diff --git a/15/common_attributes.html b/15/common_attributes.html new file mode 100644 index 000000000..92756e41c --- /dev/null +++ b/15/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 15). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/16/common_attributes.html b/16/common_attributes.html new file mode 100644 index 000000000..7c315af07 --- /dev/null +++ b/16/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 16). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/17/common_attributes.html b/17/common_attributes.html new file mode 100644 index 000000000..2d9ce80e6 --- /dev/null +++ b/17/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 17). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/18/common_attributes.html b/18/common_attributes.html new file mode 100644 index 000000000..575a4480e --- /dev/null +++ b/18/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 18). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/19.1/common_attributes.html b/19.1/common_attributes.html new file mode 100644 index 000000000..4bd852a96 --- /dev/null +++ b/19.1/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 19.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/19/common_attributes.html b/19/common_attributes.html new file mode 100644 index 000000000..a8f401a23 --- /dev/null +++ b/19/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 19). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/20/common_attributes.html b/20/common_attributes.html new file mode 100644 index 000000000..7b6adb27d --- /dev/null +++ b/20/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 20). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/21/common_attributes.html b/21/common_attributes.html new file mode 100644 index 000000000..086542043 --- /dev/null +++ b/21/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/21/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..1ff858a26 --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/21/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..da9e57439 --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/21/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..7a6ca3e84 --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/21/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..edda02cd8 --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/21/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..c99203d14 --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/21/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..8e547c4d3 --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/21/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..06d1c65e2 --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/21/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..6e3014710 --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/21/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..af4d2c4db --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/21/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/21/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..9b4fc6033 --- /dev/null +++ b/21/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 21). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/22/common_attributes.html b/22/common_attributes.html new file mode 100644 index 000000000..7f81161d7 --- /dev/null +++ b/22/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/22/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..cb469ff58 --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/22/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..8ffcd2a60 --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/22/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..b2a25cefa --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/22/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..d8a473352 --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/22/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..ed2112c8d --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/22/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..16349630f --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/22/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..64955eb60 --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/22/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..05f317a30 --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/22/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..bcedb61a9 --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/22/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..dfe708611 --- /dev/null +++ b/22/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/microprofile-health-smallrye/index.html b/22/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..a14bcb63d --- /dev/null +++ b/22/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/22/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/22/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..8ffb082b6 --- /dev/null +++ b/22/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 22). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/23/common_attributes.html b/23/common_attributes.html new file mode 100644 index 000000000..d4de3905b --- /dev/null +++ b/23/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/23/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..835e903e9 --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/23/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..3c7ba0949 --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/23/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..4bf58ca1f --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/23/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..2b99c14e6 --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/23/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..8623c6ab3 --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/23/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..db9b02d3e --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/23/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..0dc89c361 --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/23/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..a60e91f39 --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/23/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..7c5247951 --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/23/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..1a5755cfc --- /dev/null +++ b/23/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/microprofile-health-smallrye/index.html b/23/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..20b3517fe --- /dev/null +++ b/23/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/23/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/23/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..f09776394 --- /dev/null +++ b/23/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 23). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/24/JavaEE_Tutorial.html b/24/JavaEE_Tutorial.html new file mode 100644 index 000000000..df51331a9 --- /dev/null +++ b/24/JavaEE_Tutorial.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /23/JavaEE_Tutorial.html

+ + \ No newline at end of file diff --git a/24/common_attributes.html b/24/common_attributes.html new file mode 100644 index 000000000..0a95dc0e0 --- /dev/null +++ b/24/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/24/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..553c22991 --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/24/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..f065aab92 --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/24/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..b02693416 --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/24/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..3301d49cb --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/24/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..19bc93276 --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/24/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..d85453596 --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/24/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..64709f999 --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/24/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..e86d9d5da --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/24/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..8ea7df766 --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/24/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..3a60521a5 --- /dev/null +++ b/24/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/microprofile-health-smallrye/index.html b/24/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..d6151423f --- /dev/null +++ b/24/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/24/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/24/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..4dd817d7d --- /dev/null +++ b/24/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 24). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/25/JavaEE_Tutorial.html b/25/JavaEE_Tutorial.html new file mode 100644 index 000000000..3af522b8a --- /dev/null +++ b/25/JavaEE_Tutorial.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /23/JavaEE_Tutorial.html

+ + \ No newline at end of file diff --git a/25/common_attributes.html b/25/common_attributes.html new file mode 100644 index 000000000..3937fa0e6 --- /dev/null +++ b/25/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/ldap-connection/index.html b/25/wildscribe/core-service/management/ldap-connection/index.html new file mode 100644 index 000000000..2415d600f --- /dev/null +++ b/25/wildscribe/core-service/management/ldap-connection/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/ldap-connection/property/index.html b/25/wildscribe/core-service/management/ldap-connection/property/index.html new file mode 100644 index 000000000..910c439de --- /dev/null +++ b/25/wildscribe/core-service/management/ldap-connection/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/property/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/jaas/index.html b/25/wildscribe/core-service/management/security-realm/authentication/jaas/index.html new file mode 100644 index 000000000..5be1b14c8 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/jaas/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/jaas/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html b/25/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html new file mode 100644 index 000000000..0274cf866 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html b/25/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html new file mode 100644 index 000000000..9dcf12db0 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html b/25/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html new file mode 100644 index 000000000..93a1ea09f --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/ldap/index.html b/25/wildscribe/core-service/management/security-realm/authentication/ldap/index.html new file mode 100644 index 000000000..f20ee17e1 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/local/index.html b/25/wildscribe/core-service/management/security-realm/authentication/local/index.html new file mode 100644 index 000000000..7467b4e47 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/local/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/local/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html b/25/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html new file mode 100644 index 000000000..0d1b2bab2 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html b/25/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html new file mode 100644 index 000000000..f8ce4ce15 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/properties/index.html b/25/wildscribe/core-service/management/security-realm/authentication/properties/index.html new file mode 100644 index 000000000..612ac404b --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/properties/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/truststore/index.html b/25/wildscribe/core-service/management/security-realm/authentication/truststore/index.html new file mode 100644 index 000000000..de0cb940c --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/truststore/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/truststore/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/users/index.html b/25/wildscribe/core-service/management/security-realm/authentication/users/index.html new file mode 100644 index 000000000..cbb6eb277 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/users/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authentication/users/user/index.html b/25/wildscribe/core-service/management/security-realm/authentication/users/user/index.html new file mode 100644 index 000000000..6c0a418dc --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authentication/users/user/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/user/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html new file mode 100644 index 000000000..fc3caf9d3 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html new file mode 100644 index 000000000..99e828a73 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html new file mode 100644 index 000000000..ba6ae7da5 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html new file mode 100644 index 000000000..021c7c064 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html new file mode 100644 index 000000000..5be338d10 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html new file mode 100644 index 000000000..ea143e02d --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/index.html new file mode 100644 index 000000000..ec44f6b11 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..d5eb72bd7 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..028ea39f4 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html new file mode 100644 index 000000000..2c79fb2b4 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..4bcc4bef8 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..be2177277 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html new file mode 100644 index 000000000..e1efbbcad --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html new file mode 100644 index 000000000..5388aaa8b --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html new file mode 100644 index 000000000..069021e7a --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html new file mode 100644 index 000000000..a225b479f --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html b/25/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html new file mode 100644 index 000000000..ff9cbd296 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html b/25/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html new file mode 100644 index 000000000..b4a1add4b --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/authorization/properties/index.html b/25/wildscribe/core-service/management/security-realm/authorization/properties/index.html new file mode 100644 index 000000000..94adc68e1 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/authorization/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/properties/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/index.html b/25/wildscribe/core-service/management/security-realm/index.html new file mode 100644 index 000000000..d5136b5a3 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/plug-in/index.html b/25/wildscribe/core-service/management/security-realm/plug-in/index.html new file mode 100644 index 000000000..60a3df9b5 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/plug-in/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html b/25/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html new file mode 100644 index 000000000..88289d479 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html b/25/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html new file mode 100644 index 000000000..992c3138d --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/server-identity/secret/index.html b/25/wildscribe/core-service/management/security-realm/server-identity/secret/index.html new file mode 100644 index 000000000..d916d2178 --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/server-identity/secret/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/secret/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html b/25/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html new file mode 100644 index 000000000..ed0de3f2d --- /dev/null +++ b/25/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/core-service/vault/index.html b/25/wildscribe/core-service/vault/index.html new file mode 100644 index 000000000..59787ccd9 --- /dev/null +++ b/25/wildscribe/core-service/vault/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/vault/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/25/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..cb8ad80d8 --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/25/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..e315a56fd --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/25/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..f349c95b3 --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/25/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..6cc880319 --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/25/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..9bdc52ead --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/25/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..b14a89ce8 --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/25/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..06138b94a --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/25/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..f0ef2c8ba --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/25/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..84344e926 --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/25/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..8e511ad41 --- /dev/null +++ b/25/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/microprofile-health-smallrye/index.html b/25/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..cd67446b9 --- /dev/null +++ b/25/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/25/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..6b63c9787 --- /dev/null +++ b/25/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/elytron-key-manager/index.html b/25/wildscribe/subsystem/security/elytron-key-manager/index.html new file mode 100644 index 000000000..2c6f71d0e --- /dev/null +++ b/25/wildscribe/subsystem/security/elytron-key-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-manager/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/elytron-key-store/index.html b/25/wildscribe/subsystem/security/elytron-key-store/index.html new file mode 100644 index 000000000..cd71c11fc --- /dev/null +++ b/25/wildscribe/subsystem/security/elytron-key-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-store/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/elytron-realm/index.html b/25/wildscribe/subsystem/security/elytron-realm/index.html new file mode 100644 index 000000000..264c8cf96 --- /dev/null +++ b/25/wildscribe/subsystem/security/elytron-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-realm/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/elytron-trust-manager/index.html b/25/wildscribe/subsystem/security/elytron-trust-manager/index.html new file mode 100644 index 000000000..651b9f5b2 --- /dev/null +++ b/25/wildscribe/subsystem/security/elytron-trust-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-manager/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/elytron-trust-store/index.html b/25/wildscribe/subsystem/security/elytron-trust-store/index.html new file mode 100644 index 000000000..9f01d675e --- /dev/null +++ b/25/wildscribe/subsystem/security/elytron-trust-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-store/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/index.html b/25/wildscribe/subsystem/security/index.html new file mode 100644 index 000000000..14eec78d8 --- /dev/null +++ b/25/wildscribe/subsystem/security/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html b/25/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html new file mode 100644 index 000000000..7ebe2dde2 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/acl/classic/index.html b/25/wildscribe/subsystem/security/security-domain/acl/classic/index.html new file mode 100644 index 000000000..72c228401 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/acl/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/audit/classic/index.html b/25/wildscribe/subsystem/security/security-domain/audit/classic/index.html new file mode 100644 index 000000000..c8309c233 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/audit/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html b/25/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html new file mode 100644 index 000000000..577a65a2c --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/authentication/classic/index.html b/25/wildscribe/subsystem/security/security-domain/authentication/classic/index.html new file mode 100644 index 000000000..4e411952f --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/authentication/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html b/25/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html new file mode 100644 index 000000000..ad76bcd11 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html b/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html new file mode 100644 index 000000000..ae9d8ea87 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html b/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html new file mode 100644 index 000000000..5d408d708 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html b/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html new file mode 100644 index 000000000..9efad778d --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html b/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html new file mode 100644 index 000000000..f83f89f12 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/authorization/classic/index.html b/25/wildscribe/subsystem/security/security-domain/authorization/classic/index.html new file mode 100644 index 000000000..3f44053f4 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/authorization/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html b/25/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html new file mode 100644 index 000000000..6362fda8d --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html b/25/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html new file mode 100644 index 000000000..633c194a4 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html b/25/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html new file mode 100644 index 000000000..beff2fa18 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/index.html b/25/wildscribe/subsystem/security/security-domain/index.html new file mode 100644 index 000000000..50a4c97e8 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/jsse/classic/index.html b/25/wildscribe/subsystem/security/security-domain/jsse/classic/index.html new file mode 100644 index 000000000..206ca5bfc --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/jsse/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/jsse/classic/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/mapping/classic/index.html b/25/wildscribe/subsystem/security/security-domain/mapping/classic/index.html new file mode 100644 index 000000000..435068376 --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/mapping/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html b/25/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html new file mode 100644 index 000000000..2247f8dfd --- /dev/null +++ b/25/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html

+ + \ No newline at end of file diff --git a/25/wildscribe/subsystem/security/vault/classic/index.html b/25/wildscribe/subsystem/security/vault/classic/index.html new file mode 100644 index 000000000..547739caf --- /dev/null +++ b/25/wildscribe/subsystem/security/vault/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 25). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/vault/classic/index.html

+ + \ No newline at end of file diff --git a/26.1/JavaEE_Tutorial.html b/26.1/JavaEE_Tutorial.html new file mode 100644 index 000000000..e8388171e --- /dev/null +++ b/26.1/JavaEE_Tutorial.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /23/JavaEE_Tutorial.html

+ + \ No newline at end of file diff --git a/26.1/common_attributes.html b/26.1/common_attributes.html new file mode 100644 index 000000000..017e9f05a --- /dev/null +++ b/26.1/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/ldap-connection/index.html b/26.1/wildscribe/core-service/management/ldap-connection/index.html new file mode 100644 index 000000000..998a66dc9 --- /dev/null +++ b/26.1/wildscribe/core-service/management/ldap-connection/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/ldap-connection/property/index.html b/26.1/wildscribe/core-service/management/ldap-connection/property/index.html new file mode 100644 index 000000000..b35624c71 --- /dev/null +++ b/26.1/wildscribe/core-service/management/ldap-connection/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/property/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/jaas/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/jaas/index.html new file mode 100644 index 000000000..f4ed97bc1 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/jaas/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/jaas/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html new file mode 100644 index 000000000..5b5440bbf --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html new file mode 100644 index 000000000..1eb9420e0 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html new file mode 100644 index 000000000..a16d5248b --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/ldap/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/ldap/index.html new file mode 100644 index 000000000..ba27646b9 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/local/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/local/index.html new file mode 100644 index 000000000..850da10e6 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/local/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/local/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html new file mode 100644 index 000000000..3d335292f --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html new file mode 100644 index 000000000..2ee224953 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/properties/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/properties/index.html new file mode 100644 index 000000000..bd600ef6a --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/properties/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/truststore/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/truststore/index.html new file mode 100644 index 000000000..43818a22a --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/truststore/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/truststore/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/users/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/users/index.html new file mode 100644 index 000000000..fac8945da --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/users/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authentication/users/user/index.html b/26.1/wildscribe/core-service/management/security-realm/authentication/users/user/index.html new file mode 100644 index 000000000..d903d27a3 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authentication/users/user/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/user/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html new file mode 100644 index 000000000..5069cd411 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html new file mode 100644 index 000000000..664d78b94 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html new file mode 100644 index 000000000..296868697 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html new file mode 100644 index 000000000..961afce70 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html new file mode 100644 index 000000000..37467671b --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html new file mode 100644 index 000000000..038304ea9 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/index.html new file mode 100644 index 000000000..417db0204 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..c867f066d --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..85faa13db --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html new file mode 100644 index 000000000..2b251e096 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..508653670 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..1191ff0d7 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html new file mode 100644 index 000000000..7fb93c6ce --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html new file mode 100644 index 000000000..02583dcfe --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html new file mode 100644 index 000000000..d4e4498d9 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html new file mode 100644 index 000000000..6e0890c49 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html new file mode 100644 index 000000000..aac188b9c --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html new file mode 100644 index 000000000..39891bf70 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/authorization/properties/index.html b/26.1/wildscribe/core-service/management/security-realm/authorization/properties/index.html new file mode 100644 index 000000000..dd98e35a5 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/authorization/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/properties/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/index.html b/26.1/wildscribe/core-service/management/security-realm/index.html new file mode 100644 index 000000000..7b93a7fae --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/plug-in/index.html b/26.1/wildscribe/core-service/management/security-realm/plug-in/index.html new file mode 100644 index 000000000..7386f4435 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/plug-in/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html b/26.1/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html new file mode 100644 index 000000000..72219381f --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html b/26.1/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html new file mode 100644 index 000000000..94a105a41 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/server-identity/secret/index.html b/26.1/wildscribe/core-service/management/security-realm/server-identity/secret/index.html new file mode 100644 index 000000000..325e1e618 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/server-identity/secret/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/secret/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html b/26.1/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html new file mode 100644 index 000000000..5235e0877 --- /dev/null +++ b/26.1/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/core-service/vault/index.html b/26.1/wildscribe/core-service/vault/index.html new file mode 100644 index 000000000..3ef1a6e13 --- /dev/null +++ b/26.1/wildscribe/core-service/vault/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/vault/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/26.1/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..2bd926d2e --- /dev/null +++ b/26.1/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/26.1/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..4e161b7a4 --- /dev/null +++ b/26.1/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/26.1/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..9138b0379 --- /dev/null +++ b/26.1/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/26.1/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..401680f75 --- /dev/null +++ b/26.1/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..2c3093412 --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..4d57c677a --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..5bbf18e79 --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..2c590f8b7 --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..fa6d08e01 --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..96f769254 --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..bfa40dbca --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..269334ab3 --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..8eeab8a06 --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..c79d422ff --- /dev/null +++ b/26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/microprofile-health-smallrye/index.html b/26.1/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..c7b811110 --- /dev/null +++ b/26.1/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/26.1/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..32e83cda5 --- /dev/null +++ b/26.1/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/elytron-key-manager/index.html b/26.1/wildscribe/subsystem/security/elytron-key-manager/index.html new file mode 100644 index 000000000..b4e2437ef --- /dev/null +++ b/26.1/wildscribe/subsystem/security/elytron-key-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-manager/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/elytron-key-store/index.html b/26.1/wildscribe/subsystem/security/elytron-key-store/index.html new file mode 100644 index 000000000..c82bab9ab --- /dev/null +++ b/26.1/wildscribe/subsystem/security/elytron-key-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-store/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/elytron-realm/index.html b/26.1/wildscribe/subsystem/security/elytron-realm/index.html new file mode 100644 index 000000000..0b461917f --- /dev/null +++ b/26.1/wildscribe/subsystem/security/elytron-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-realm/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/elytron-trust-manager/index.html b/26.1/wildscribe/subsystem/security/elytron-trust-manager/index.html new file mode 100644 index 000000000..a3d911320 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/elytron-trust-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-manager/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/elytron-trust-store/index.html b/26.1/wildscribe/subsystem/security/elytron-trust-store/index.html new file mode 100644 index 000000000..ff0925841 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/elytron-trust-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-store/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/index.html b/26.1/wildscribe/subsystem/security/index.html new file mode 100644 index 000000000..b3b1a6034 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html b/26.1/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html new file mode 100644 index 000000000..9b674b136 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/acl/classic/index.html b/26.1/wildscribe/subsystem/security/security-domain/acl/classic/index.html new file mode 100644 index 000000000..b5a27a523 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/acl/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/audit/classic/index.html b/26.1/wildscribe/subsystem/security/security-domain/audit/classic/index.html new file mode 100644 index 000000000..49a8958f0 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/audit/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html b/26.1/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html new file mode 100644 index 000000000..5f4f77908 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/authentication/classic/index.html b/26.1/wildscribe/subsystem/security/security-domain/authentication/classic/index.html new file mode 100644 index 000000000..e918233f2 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/authentication/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html b/26.1/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html new file mode 100644 index 000000000..b28680b3e --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html b/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html new file mode 100644 index 000000000..605ae07d3 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html b/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html new file mode 100644 index 000000000..dfc31b7b3 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html b/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html new file mode 100644 index 000000000..f8c4374a7 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html b/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html new file mode 100644 index 000000000..0d89927ef --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/authorization/classic/index.html b/26.1/wildscribe/subsystem/security/security-domain/authorization/classic/index.html new file mode 100644 index 000000000..12a941aee --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/authorization/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html b/26.1/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html new file mode 100644 index 000000000..35365c8f7 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html b/26.1/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html new file mode 100644 index 000000000..81f80c3c3 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html b/26.1/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html new file mode 100644 index 000000000..08910f778 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/index.html b/26.1/wildscribe/subsystem/security/security-domain/index.html new file mode 100644 index 000000000..778d46426 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/jsse/classic/index.html b/26.1/wildscribe/subsystem/security/security-domain/jsse/classic/index.html new file mode 100644 index 000000000..6b031d064 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/jsse/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/jsse/classic/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/mapping/classic/index.html b/26.1/wildscribe/subsystem/security/security-domain/mapping/classic/index.html new file mode 100644 index 000000000..41cb8b6f3 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/mapping/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html b/26.1/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html new file mode 100644 index 000000000..f54b203e0 --- /dev/null +++ b/26.1/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html

+ + \ No newline at end of file diff --git a/26.1/wildscribe/subsystem/security/vault/classic/index.html b/26.1/wildscribe/subsystem/security/vault/classic/index.html new file mode 100644 index 000000000..2585d8f0f --- /dev/null +++ b/26.1/wildscribe/subsystem/security/vault/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26.1). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/vault/classic/index.html

+ + \ No newline at end of file diff --git a/26/JavaEE_Tutorial.html b/26/JavaEE_Tutorial.html new file mode 100644 index 000000000..2dd0d3bde --- /dev/null +++ b/26/JavaEE_Tutorial.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /23/JavaEE_Tutorial.html

+ + \ No newline at end of file diff --git a/26/common_attributes.html b/26/common_attributes.html new file mode 100644 index 000000000..fbf44c140 --- /dev/null +++ b/26/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/ldap-connection/index.html b/26/wildscribe/core-service/management/ldap-connection/index.html new file mode 100644 index 000000000..49cae435e --- /dev/null +++ b/26/wildscribe/core-service/management/ldap-connection/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/ldap-connection/property/index.html b/26/wildscribe/core-service/management/ldap-connection/property/index.html new file mode 100644 index 000000000..e5f835481 --- /dev/null +++ b/26/wildscribe/core-service/management/ldap-connection/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/property/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/jaas/index.html b/26/wildscribe/core-service/management/security-realm/authentication/jaas/index.html new file mode 100644 index 000000000..d1bc1f1ee --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/jaas/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/jaas/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html b/26/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html new file mode 100644 index 000000000..9c5726c46 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html b/26/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html new file mode 100644 index 000000000..c37867d1e --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html b/26/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html new file mode 100644 index 000000000..58c76650b --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/ldap/index.html b/26/wildscribe/core-service/management/security-realm/authentication/ldap/index.html new file mode 100644 index 000000000..15391a010 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/local/index.html b/26/wildscribe/core-service/management/security-realm/authentication/local/index.html new file mode 100644 index 000000000..d223840aa --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/local/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/local/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html b/26/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html new file mode 100644 index 000000000..748074efa --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html b/26/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html new file mode 100644 index 000000000..3a2eaeec5 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/properties/index.html b/26/wildscribe/core-service/management/security-realm/authentication/properties/index.html new file mode 100644 index 000000000..5f3ae0bb7 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/properties/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/truststore/index.html b/26/wildscribe/core-service/management/security-realm/authentication/truststore/index.html new file mode 100644 index 000000000..c928526dd --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/truststore/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/truststore/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/users/index.html b/26/wildscribe/core-service/management/security-realm/authentication/users/index.html new file mode 100644 index 000000000..e57bbb74a --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/users/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authentication/users/user/index.html b/26/wildscribe/core-service/management/security-realm/authentication/users/user/index.html new file mode 100644 index 000000000..1b0940397 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authentication/users/user/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/user/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html new file mode 100644 index 000000000..b7eff4472 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html new file mode 100644 index 000000000..c94d3f3e8 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html new file mode 100644 index 000000000..8ffda976d --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html new file mode 100644 index 000000000..1648dc700 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html new file mode 100644 index 000000000..4997965d3 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html new file mode 100644 index 000000000..ad4f89760 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/index.html new file mode 100644 index 000000000..6745c295c --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..707d007b0 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..db02e41f7 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html new file mode 100644 index 000000000..f23ca6dd8 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..1c8f2b37b --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..2afd5dc72 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html new file mode 100644 index 000000000..dfca46e72 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html new file mode 100644 index 000000000..09e79fa2a --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html new file mode 100644 index 000000000..d64186136 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html new file mode 100644 index 000000000..d6c44185f --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html b/26/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html new file mode 100644 index 000000000..88b731660 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html b/26/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html new file mode 100644 index 000000000..4595756a7 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/authorization/properties/index.html b/26/wildscribe/core-service/management/security-realm/authorization/properties/index.html new file mode 100644 index 000000000..c562f0c0a --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/authorization/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/properties/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/index.html b/26/wildscribe/core-service/management/security-realm/index.html new file mode 100644 index 000000000..260a0930a --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/plug-in/index.html b/26/wildscribe/core-service/management/security-realm/plug-in/index.html new file mode 100644 index 000000000..4e7798268 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/plug-in/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html b/26/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html new file mode 100644 index 000000000..46594d378 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html b/26/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html new file mode 100644 index 000000000..e3e3923e6 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/server-identity/secret/index.html b/26/wildscribe/core-service/management/security-realm/server-identity/secret/index.html new file mode 100644 index 000000000..fc43c5ea7 --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/server-identity/secret/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/secret/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html b/26/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html new file mode 100644 index 000000000..b5c68335d --- /dev/null +++ b/26/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/core-service/vault/index.html b/26/wildscribe/core-service/vault/index.html new file mode 100644 index 000000000..b671c8594 --- /dev/null +++ b/26/wildscribe/core-service/vault/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/vault/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/26/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..50b94cf90 --- /dev/null +++ b/26/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/26/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..685dc352f --- /dev/null +++ b/26/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/26/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..3ced3adca --- /dev/null +++ b/26/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/26/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..2e6f21193 --- /dev/null +++ b/26/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/26/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..96ccb13e2 --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/26/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..6b181ab5f --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/26/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..26778cae0 --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/26/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..638757470 --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/26/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..be5fb3d7f --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/26/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..4a458d15e --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/26/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..cab1a36d1 --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/26/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..513482da6 --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/26/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..63baa12f1 --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/26/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..afa990811 --- /dev/null +++ b/26/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/microprofile-health-smallrye/index.html b/26/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..5f74e28a4 --- /dev/null +++ b/26/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/26/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..53e46a519 --- /dev/null +++ b/26/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/elytron-key-manager/index.html b/26/wildscribe/subsystem/security/elytron-key-manager/index.html new file mode 100644 index 000000000..887aa7dc4 --- /dev/null +++ b/26/wildscribe/subsystem/security/elytron-key-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-manager/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/elytron-key-store/index.html b/26/wildscribe/subsystem/security/elytron-key-store/index.html new file mode 100644 index 000000000..a5d83df3e --- /dev/null +++ b/26/wildscribe/subsystem/security/elytron-key-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-store/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/elytron-realm/index.html b/26/wildscribe/subsystem/security/elytron-realm/index.html new file mode 100644 index 000000000..708d006a3 --- /dev/null +++ b/26/wildscribe/subsystem/security/elytron-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-realm/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/elytron-trust-manager/index.html b/26/wildscribe/subsystem/security/elytron-trust-manager/index.html new file mode 100644 index 000000000..c893e25b0 --- /dev/null +++ b/26/wildscribe/subsystem/security/elytron-trust-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-manager/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/elytron-trust-store/index.html b/26/wildscribe/subsystem/security/elytron-trust-store/index.html new file mode 100644 index 000000000..0d20647c9 --- /dev/null +++ b/26/wildscribe/subsystem/security/elytron-trust-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-store/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/index.html b/26/wildscribe/subsystem/security/index.html new file mode 100644 index 000000000..c3d0bf3ab --- /dev/null +++ b/26/wildscribe/subsystem/security/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html b/26/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html new file mode 100644 index 000000000..ae10c2922 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/acl/classic/index.html b/26/wildscribe/subsystem/security/security-domain/acl/classic/index.html new file mode 100644 index 000000000..14130c180 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/acl/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/audit/classic/index.html b/26/wildscribe/subsystem/security/security-domain/audit/classic/index.html new file mode 100644 index 000000000..e72ebfefc --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/audit/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html b/26/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html new file mode 100644 index 000000000..70b979af2 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/authentication/classic/index.html b/26/wildscribe/subsystem/security/security-domain/authentication/classic/index.html new file mode 100644 index 000000000..8338cdfeb --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/authentication/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html b/26/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html new file mode 100644 index 000000000..c776ddf92 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html b/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html new file mode 100644 index 000000000..cd3dd1475 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html b/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html new file mode 100644 index 000000000..359c88a72 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html b/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html new file mode 100644 index 000000000..3146650be --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html b/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html new file mode 100644 index 000000000..b016c758d --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/authorization/classic/index.html b/26/wildscribe/subsystem/security/security-domain/authorization/classic/index.html new file mode 100644 index 000000000..22a3220cf --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/authorization/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html b/26/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html new file mode 100644 index 000000000..1711f14a8 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html b/26/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html new file mode 100644 index 000000000..9669c18eb --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html b/26/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html new file mode 100644 index 000000000..65b103350 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/index.html b/26/wildscribe/subsystem/security/security-domain/index.html new file mode 100644 index 000000000..982d93167 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/jsse/classic/index.html b/26/wildscribe/subsystem/security/security-domain/jsse/classic/index.html new file mode 100644 index 000000000..4a13050b1 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/jsse/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/jsse/classic/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/mapping/classic/index.html b/26/wildscribe/subsystem/security/security-domain/mapping/classic/index.html new file mode 100644 index 000000000..da6c07dd7 --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/mapping/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html b/26/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html new file mode 100644 index 000000000..e3445e59d --- /dev/null +++ b/26/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html

+ + \ No newline at end of file diff --git a/26/wildscribe/subsystem/security/vault/classic/index.html b/26/wildscribe/subsystem/security/vault/classic/index.html new file mode 100644 index 000000000..84947af6a --- /dev/null +++ b/26/wildscribe/subsystem/security/vault/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 26). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/vault/classic/index.html

+ + \ No newline at end of file diff --git a/27/JavaEE_Tutorial.html b/27/JavaEE_Tutorial.html new file mode 100644 index 000000000..4cca526a5 --- /dev/null +++ b/27/JavaEE_Tutorial.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /23/JavaEE_Tutorial.html

+ + \ No newline at end of file diff --git a/27/common_attributes.html b/27/common_attributes.html new file mode 100644 index 000000000..d805b9e3d --- /dev/null +++ b/27/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/ldap-connection/index.html b/27/wildscribe/core-service/management/ldap-connection/index.html new file mode 100644 index 000000000..434547929 --- /dev/null +++ b/27/wildscribe/core-service/management/ldap-connection/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/ldap-connection/property/index.html b/27/wildscribe/core-service/management/ldap-connection/property/index.html new file mode 100644 index 000000000..624a4103e --- /dev/null +++ b/27/wildscribe/core-service/management/ldap-connection/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/jaas/index.html b/27/wildscribe/core-service/management/security-realm/authentication/jaas/index.html new file mode 100644 index 000000000..04f67430b --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/jaas/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/jaas/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html b/27/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html new file mode 100644 index 000000000..ee271d9b5 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html b/27/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html new file mode 100644 index 000000000..8b851ac32 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html b/27/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html new file mode 100644 index 000000000..e4f583f8b --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/ldap/index.html b/27/wildscribe/core-service/management/security-realm/authentication/ldap/index.html new file mode 100644 index 000000000..35d55902b --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/local/index.html b/27/wildscribe/core-service/management/security-realm/authentication/local/index.html new file mode 100644 index 000000000..e1541765b --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/local/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/local/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html b/27/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html new file mode 100644 index 000000000..62a612f5e --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html b/27/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html new file mode 100644 index 000000000..a9f880589 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/properties/index.html b/27/wildscribe/core-service/management/security-realm/authentication/properties/index.html new file mode 100644 index 000000000..4cb95e834 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/properties/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/truststore/index.html b/27/wildscribe/core-service/management/security-realm/authentication/truststore/index.html new file mode 100644 index 000000000..4f67d59d3 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/truststore/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/truststore/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/users/index.html b/27/wildscribe/core-service/management/security-realm/authentication/users/index.html new file mode 100644 index 000000000..3bf8bf9ed --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/users/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authentication/users/user/index.html b/27/wildscribe/core-service/management/security-realm/authentication/users/user/index.html new file mode 100644 index 000000000..41aeb0b69 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authentication/users/user/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/user/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html new file mode 100644 index 000000000..5be2db3af --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html new file mode 100644 index 000000000..7595c01a7 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html new file mode 100644 index 000000000..d7aa6da5c --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html new file mode 100644 index 000000000..40a77f937 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html new file mode 100644 index 000000000..5434882b3 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html new file mode 100644 index 000000000..bbd4729af --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/index.html new file mode 100644 index 000000000..a14bbe648 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..b1d327c9b --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..00e87398d --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html new file mode 100644 index 000000000..12b226723 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..1e20e86fa --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..075477efa --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html new file mode 100644 index 000000000..1a78130bf --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html new file mode 100644 index 000000000..e28b5bf69 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html new file mode 100644 index 000000000..135ab3efe --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html new file mode 100644 index 000000000..f05a5f72d --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html b/27/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html new file mode 100644 index 000000000..6f6f8943e --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html b/27/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html new file mode 100644 index 000000000..7bfddf573 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/authorization/properties/index.html b/27/wildscribe/core-service/management/security-realm/authorization/properties/index.html new file mode 100644 index 000000000..f76149b8e --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/authorization/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/properties/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/index.html b/27/wildscribe/core-service/management/security-realm/index.html new file mode 100644 index 000000000..abd027e12 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/plug-in/index.html b/27/wildscribe/core-service/management/security-realm/plug-in/index.html new file mode 100644 index 000000000..d3e16fb49 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/plug-in/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html b/27/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html new file mode 100644 index 000000000..476fe5a66 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html b/27/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html new file mode 100644 index 000000000..f3dd49c49 --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/server-identity/secret/index.html b/27/wildscribe/core-service/management/security-realm/server-identity/secret/index.html new file mode 100644 index 000000000..ca93954eb --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/server-identity/secret/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/secret/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html b/27/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html new file mode 100644 index 000000000..537e0892d --- /dev/null +++ b/27/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/core-service/vault/index.html b/27/wildscribe/core-service/vault/index.html new file mode 100644 index 000000000..2f4056a0f --- /dev/null +++ b/27/wildscribe/core-service/vault/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/vault/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/27/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..f38b0d1bb --- /dev/null +++ b/27/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/27/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..8e2d5413a --- /dev/null +++ b/27/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/27/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..13be087d0 --- /dev/null +++ b/27/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/27/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..cc5beba71 --- /dev/null +++ b/27/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html new file mode 100644 index 000000000..314a4ea02 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..8f258ee5c --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..243afc38b --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..707598577 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..43c978f0d --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..802cfc18c --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..ae8e8be78 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..0606d5ea0 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html new file mode 100644 index 000000000..aac082c54 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html new file mode 100644 index 000000000..a609a50a0 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..d508def92 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..f018cb057 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..21e5b6a86 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..e69506b09 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..f4312abcc --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..b4df4eed5 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..1ddefeabb --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..d7deeeb29 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html new file mode 100644 index 000000000..439895815 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..2a9be8d54 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..15b3e0f9e --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..39da76f6b --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..f150e8450 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..c9ac22a26 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..97c9003b8 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..5e34cae73 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html new file mode 100644 index 000000000..5e932fceb --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html new file mode 100644 index 000000000..2799eac7a --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..2bdfd50cc --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..64df2dea4 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..9eef61826 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..ecebc52d1 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..f35d60167 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..e6133d788 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..e964e0076 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..75b825692 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html new file mode 100644 index 000000000..151e90daf --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..2d79856be --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..e840ba600 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..df5ee1443 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..e8facadcc --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..1421691aa --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..e37757787 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..aec87e73b --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html new file mode 100644 index 000000000..55fa43d7a --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html new file mode 100644 index 000000000..1b8c796ec --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..2f97e23f1 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..a197df589 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..d191dbdab --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..70b5e2b79 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..c7ae1666b --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..131d2ed1b --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..e461982f0 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..a42bebb8b --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html new file mode 100644 index 000000000..d14655db9 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html new file mode 100644 index 000000000..b1d5adf93 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..c021918dc --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..b66983052 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..abfde4fec --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..f90d5de5a --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..d35e0ffdd --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..259db2237 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..d2ac41ac7 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html new file mode 100644 index 000000000..acdd7e79c --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html new file mode 100644 index 000000000..f93e6b904 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..47c6a9cd9 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..73416aba8 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..e27d86db6 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..9c829c1a0 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..7bc166d71 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..d3d939129 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..cfc506016 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..07f53c4b3 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html new file mode 100644 index 000000000..109a4ec47 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html new file mode 100644 index 000000000..d5db097e4 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..c2cd5d603 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..ceaada17b --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..66eda2e00 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..8f0d1d3c2 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..9320a98b8 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..2988a28bb --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..83982338d --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html new file mode 100644 index 000000000..20682c51b --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html new file mode 100644 index 000000000..e6a025c02 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..28ae21638 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..454203686 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..862641355 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..64eb21872 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..043acd4d9 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..b0d842ffd --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..38bc3c872 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..ed54eb8a3 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html new file mode 100644 index 000000000..13cbd21c2 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html new file mode 100644 index 000000000..03be057b7 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html new file mode 100644 index 000000000..73150f1de --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html new file mode 100644 index 000000000..55367233c --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html new file mode 100644 index 000000000..94a8fb4af --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html new file mode 100644 index 000000000..42a4ed889 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html b/27/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html new file mode 100644 index 000000000..cc7a82d8f --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html b/27/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html new file mode 100644 index 000000000..210255c92 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html b/27/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html new file mode 100644 index 000000000..4b427b4a9 --- /dev/null +++ b/27/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..5509473eb --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html new file mode 100644 index 000000000..9347f942a --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html new file mode 100644 index 000000000..794ec4edf --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html new file mode 100644 index 000000000..26d9f730c --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html new file mode 100644 index 000000000..bd33d90fe --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html new file mode 100644 index 000000000..e42c54551 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html new file mode 100644 index 000000000..59865a0dc --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..b4b9e27e0 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html new file mode 100644 index 000000000..2b31ce890 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html new file mode 100644 index 000000000..285cbcd6e --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html new file mode 100644 index 000000000..c230c7203 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html new file mode 100644 index 000000000..7abe7e44f --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..e1484d369 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html new file mode 100644 index 000000000..42985c1cb --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html new file mode 100644 index 000000000..332dbb2bf --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..38d1981c2 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html new file mode 100644 index 000000000..85034f3cb --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html new file mode 100644 index 000000000..23231ec92 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html new file mode 100644 index 000000000..4940170e7 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html new file mode 100644 index 000000000..0c22eed2d --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html new file mode 100644 index 000000000..e46227137 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html new file mode 100644 index 000000000..9b6770c46 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html new file mode 100644 index 000000000..0c6c7fa67 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html b/27/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html new file mode 100644 index 000000000..3fd3605b8 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..5b6cbc137 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html new file mode 100644 index 000000000..290dca110 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html new file mode 100644 index 000000000..2db97d712 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html new file mode 100644 index 000000000..edddd7a59 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html new file mode 100644 index 000000000..51e363ef2 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html new file mode 100644 index 000000000..f5987c856 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html new file mode 100644 index 000000000..3c51049b4 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..e632c845a --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html new file mode 100644 index 000000000..8f5f75c93 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html new file mode 100644 index 000000000..1b679093a --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html new file mode 100644 index 000000000..bac4b1237 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html new file mode 100644 index 000000000..5664b4353 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..aa1c7b81b --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html new file mode 100644 index 000000000..58527ff02 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html new file mode 100644 index 000000000..fb1c91670 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..f57061579 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html new file mode 100644 index 000000000..5a8043d41 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html new file mode 100644 index 000000000..85f9d15e9 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html new file mode 100644 index 000000000..2b6012c79 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html b/27/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html new file mode 100644 index 000000000..87a5e7426 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html new file mode 100644 index 000000000..e9c729830 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html new file mode 100644 index 000000000..32bbe2d03 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html new file mode 100644 index 000000000..df45580fa --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html new file mode 100644 index 000000000..a06618500 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html new file mode 100644 index 000000000..a10810ba6 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html new file mode 100644 index 000000000..51a1e50da --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html new file mode 100644 index 000000000..9fa8fa51b --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html new file mode 100644 index 000000000..1ca497b4e --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html new file mode 100644 index 000000000..3ee05985e --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html new file mode 100644 index 000000000..f321a5845 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html new file mode 100644 index 000000000..9f834e815 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html b/27/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html new file mode 100644 index 000000000..84c116b94 --- /dev/null +++ b/27/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/jsr77/index.html b/27/wildscribe/subsystem/jsr77/index.html new file mode 100644 index 000000000..9eda7010b --- /dev/null +++ b/27/wildscribe/subsystem/jsr77/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jsr77/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html new file mode 100644 index 000000000..3bc5172fa --- /dev/null +++ b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html new file mode 100644 index 000000000..0372c3d94 --- /dev/null +++ b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html new file mode 100644 index 000000000..b8aad3896 --- /dev/null +++ b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html new file mode 100644 index 000000000..df685283c --- /dev/null +++ b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html new file mode 100644 index 000000000..fb2593b1f --- /dev/null +++ b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html new file mode 100644 index 000000000..502c8bc68 --- /dev/null +++ b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html new file mode 100644 index 000000000..b384ebddb --- /dev/null +++ b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html new file mode 100644 index 000000000..e9d8d311d --- /dev/null +++ b/27/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/microprofile-health-smallrye/index.html b/27/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..e2077c331 --- /dev/null +++ b/27/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/27/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..509738fb6 --- /dev/null +++ b/27/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html b/27/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html new file mode 100644 index 000000000..3ba51d185 --- /dev/null +++ b/27/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/elytron-key-manager/index.html b/27/wildscribe/subsystem/security/elytron-key-manager/index.html new file mode 100644 index 000000000..58b185cb8 --- /dev/null +++ b/27/wildscribe/subsystem/security/elytron-key-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-manager/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/elytron-key-store/index.html b/27/wildscribe/subsystem/security/elytron-key-store/index.html new file mode 100644 index 000000000..39ddf82ae --- /dev/null +++ b/27/wildscribe/subsystem/security/elytron-key-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-store/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/elytron-realm/index.html b/27/wildscribe/subsystem/security/elytron-realm/index.html new file mode 100644 index 000000000..2ca8db194 --- /dev/null +++ b/27/wildscribe/subsystem/security/elytron-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-realm/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/elytron-trust-manager/index.html b/27/wildscribe/subsystem/security/elytron-trust-manager/index.html new file mode 100644 index 000000000..0a090c709 --- /dev/null +++ b/27/wildscribe/subsystem/security/elytron-trust-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-manager/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/elytron-trust-store/index.html b/27/wildscribe/subsystem/security/elytron-trust-store/index.html new file mode 100644 index 000000000..148d17d64 --- /dev/null +++ b/27/wildscribe/subsystem/security/elytron-trust-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-store/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/index.html b/27/wildscribe/subsystem/security/index.html new file mode 100644 index 000000000..1a7493a3d --- /dev/null +++ b/27/wildscribe/subsystem/security/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html b/27/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html new file mode 100644 index 000000000..5a155b23a --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/acl/classic/index.html b/27/wildscribe/subsystem/security/security-domain/acl/classic/index.html new file mode 100644 index 000000000..99929b55c --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/acl/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/audit/classic/index.html b/27/wildscribe/subsystem/security/security-domain/audit/classic/index.html new file mode 100644 index 000000000..3aeeb9306 --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/audit/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html b/27/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html new file mode 100644 index 000000000..fc6a3174a --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/authentication/classic/index.html b/27/wildscribe/subsystem/security/security-domain/authentication/classic/index.html new file mode 100644 index 000000000..99429f324 --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/authentication/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html b/27/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html new file mode 100644 index 000000000..11640ae5a --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html b/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html new file mode 100644 index 000000000..d32c8e09f --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html b/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html new file mode 100644 index 000000000..4f97f4fbf --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html b/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html new file mode 100644 index 000000000..7465db3c9 --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html b/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html new file mode 100644 index 000000000..559e395e9 --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/authorization/classic/index.html b/27/wildscribe/subsystem/security/security-domain/authorization/classic/index.html new file mode 100644 index 000000000..50d97aacd --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/authorization/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html b/27/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html new file mode 100644 index 000000000..5d08cf67d --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html b/27/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html new file mode 100644 index 000000000..d642f4ea8 --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html b/27/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html new file mode 100644 index 000000000..57b19f594 --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/index.html b/27/wildscribe/subsystem/security/security-domain/index.html new file mode 100644 index 000000000..3060ba0f9 --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/jsse/classic/index.html b/27/wildscribe/subsystem/security/security-domain/jsse/classic/index.html new file mode 100644 index 000000000..66c79c72e --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/jsse/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/jsse/classic/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/mapping/classic/index.html b/27/wildscribe/subsystem/security/security-domain/mapping/classic/index.html new file mode 100644 index 000000000..63a8fc7cb --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/mapping/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html b/27/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html new file mode 100644 index 000000000..6ab4fbff5 --- /dev/null +++ b/27/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html

+ + \ No newline at end of file diff --git a/27/wildscribe/subsystem/security/vault/classic/index.html b/27/wildscribe/subsystem/security/vault/classic/index.html new file mode 100644 index 000000000..70152682b --- /dev/null +++ b/27/wildscribe/subsystem/security/vault/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 27). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/vault/classic/index.html

+ + \ No newline at end of file diff --git a/28/JavaEE_Tutorial.html b/28/JavaEE_Tutorial.html new file mode 100644 index 000000000..32fe72382 --- /dev/null +++ b/28/JavaEE_Tutorial.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /23/JavaEE_Tutorial.html

+ + \ No newline at end of file diff --git a/28/common_attributes.html b/28/common_attributes.html new file mode 100644 index 000000000..da1152e5d --- /dev/null +++ b/28/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/ldap-connection/index.html b/28/wildscribe/core-service/management/ldap-connection/index.html new file mode 100644 index 000000000..e879acc04 --- /dev/null +++ b/28/wildscribe/core-service/management/ldap-connection/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/ldap-connection/property/index.html b/28/wildscribe/core-service/management/ldap-connection/property/index.html new file mode 100644 index 000000000..78b4c1095 --- /dev/null +++ b/28/wildscribe/core-service/management/ldap-connection/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/jaas/index.html b/28/wildscribe/core-service/management/security-realm/authentication/jaas/index.html new file mode 100644 index 000000000..c676fd16a --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/jaas/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/jaas/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html b/28/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html new file mode 100644 index 000000000..3bbd7ab92 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html b/28/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html new file mode 100644 index 000000000..a46668e1d --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html b/28/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html new file mode 100644 index 000000000..efd186699 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/ldap/index.html b/28/wildscribe/core-service/management/security-realm/authentication/ldap/index.html new file mode 100644 index 000000000..84c75b294 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/local/index.html b/28/wildscribe/core-service/management/security-realm/authentication/local/index.html new file mode 100644 index 000000000..943bdf52a --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/local/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/local/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html b/28/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html new file mode 100644 index 000000000..dcac5bb09 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html b/28/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html new file mode 100644 index 000000000..1758032c6 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/properties/index.html b/28/wildscribe/core-service/management/security-realm/authentication/properties/index.html new file mode 100644 index 000000000..6dce72a69 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/properties/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/truststore/index.html b/28/wildscribe/core-service/management/security-realm/authentication/truststore/index.html new file mode 100644 index 000000000..c96d0d9ae --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/truststore/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/truststore/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/users/index.html b/28/wildscribe/core-service/management/security-realm/authentication/users/index.html new file mode 100644 index 000000000..cc4aae995 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/users/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authentication/users/user/index.html b/28/wildscribe/core-service/management/security-realm/authentication/users/user/index.html new file mode 100644 index 000000000..a86ce7ad2 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authentication/users/user/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/user/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html new file mode 100644 index 000000000..2c6fac26b --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html new file mode 100644 index 000000000..838a6573d --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html new file mode 100644 index 000000000..a520bd895 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html new file mode 100644 index 000000000..27c56e324 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html new file mode 100644 index 000000000..946c71499 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html new file mode 100644 index 000000000..7ec8d59d0 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/index.html new file mode 100644 index 000000000..e6bb4f837 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..3ff158903 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..4aa1eba4c --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html new file mode 100644 index 000000000..17a95fafd --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..2f4246731 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..32f6c66b3 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html new file mode 100644 index 000000000..c9b15afe3 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html new file mode 100644 index 000000000..c1231d335 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html new file mode 100644 index 000000000..c43c0e3f5 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html new file mode 100644 index 000000000..79c9b491d --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html b/28/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html new file mode 100644 index 000000000..c3e0c7963 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html b/28/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html new file mode 100644 index 000000000..94153fb90 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/authorization/properties/index.html b/28/wildscribe/core-service/management/security-realm/authorization/properties/index.html new file mode 100644 index 000000000..797fd1feb --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/authorization/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/properties/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/index.html b/28/wildscribe/core-service/management/security-realm/index.html new file mode 100644 index 000000000..bc978a791 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/plug-in/index.html b/28/wildscribe/core-service/management/security-realm/plug-in/index.html new file mode 100644 index 000000000..14d5ed94a --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/plug-in/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html b/28/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html new file mode 100644 index 000000000..496f07e9f --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html b/28/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html new file mode 100644 index 000000000..8d0ef0af6 --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/server-identity/secret/index.html b/28/wildscribe/core-service/management/security-realm/server-identity/secret/index.html new file mode 100644 index 000000000..16d0d915f --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/server-identity/secret/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/secret/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html b/28/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html new file mode 100644 index 000000000..979a8d56c --- /dev/null +++ b/28/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/core-service/vault/index.html b/28/wildscribe/core-service/vault/index.html new file mode 100644 index 000000000..e818fe331 --- /dev/null +++ b/28/wildscribe/core-service/vault/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/vault/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/28/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..fe0a4799a --- /dev/null +++ b/28/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/28/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..aa568ffc2 --- /dev/null +++ b/28/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html b/28/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html new file mode 100644 index 000000000..fa20e09d8 --- /dev/null +++ b/28/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/28/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..10b44df0f --- /dev/null +++ b/28/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/28/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..842255b95 --- /dev/null +++ b/28/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html b/28/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html new file mode 100644 index 000000000..0c1a1961c --- /dev/null +++ b/28/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html new file mode 100644 index 000000000..6039a416f --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..d5a396e5e --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..0a1788c6f --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..e60de8f20 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..60af23ea1 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..92f2f1dde --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..08b0e19a4 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..0f37a546a --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html new file mode 100644 index 000000000..d0ef181f3 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html new file mode 100644 index 000000000..b8fb52a18 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..51aad3b91 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..c657e0687 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..8d26e5f9f --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..d023ce503 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..77466c6c1 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..68b0f9836 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..66f207d18 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..bf1aee53a --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html new file mode 100644 index 000000000..b9d345e4f --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..e4e2ef099 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..0ac731956 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..2f75653c5 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..c604a445d --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..c5e5e9c97 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..7a70f521b --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..c2aefc5c4 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html new file mode 100644 index 000000000..73c7f09d7 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html new file mode 100644 index 000000000..668d754ad --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..9e8016eb8 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..057adcd4e --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..aa14d9323 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..9e0abe462 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..f22596f94 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..c24844fc3 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..8a570ded3 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..1beebcbf9 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html new file mode 100644 index 000000000..93d5f2b8f --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..38843dcf0 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..1e6f8e6cc --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..396f391ba --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..f11da5cc9 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..80c817b13 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..a50280682 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..b87472c72 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html new file mode 100644 index 000000000..c3c23ffe2 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html new file mode 100644 index 000000000..bf81091dd --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..86c827436 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..678c6dee2 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..d70cf4e9c --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..2f9ef8c40 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..011cec653 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..9e15449e2 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..5155a15ce --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..600693128 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html new file mode 100644 index 000000000..a6ba897f0 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html new file mode 100644 index 000000000..664c85bbb --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..a87a74dc3 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..d2ce0e994 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..0e566d9b1 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..5fce42e5c --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..013d6a351 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..c00d64e7a --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..ff005d501 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html new file mode 100644 index 000000000..59c346e12 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html new file mode 100644 index 000000000..84e664742 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..6615d2e05 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..81b6e6d0d --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..f17a067f3 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..14d0cc6a3 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..13991130a --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..f66ed7269 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..beedf7fae --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..534d4f416 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html new file mode 100644 index 000000000..6750383a1 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html new file mode 100644 index 000000000..592f844a0 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..61fba1369 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..d00012e91 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..168cf2493 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..f0111b00b --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..edf58b4da --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..914e203c8 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..600fdbee0 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html new file mode 100644 index 000000000..c8f83fafb --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html new file mode 100644 index 000000000..dd5c7a8b1 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..55bc6e569 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..0db06cc79 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..2486891de --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..e5bc94365 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..7edd7e443 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..e5881b3d4 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..2aa664adf --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..9d146b4c2 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html new file mode 100644 index 000000000..944882df3 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html new file mode 100644 index 000000000..2d9eadf94 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html new file mode 100644 index 000000000..fce704fb2 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html new file mode 100644 index 000000000..685d5b8e3 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html new file mode 100644 index 000000000..198446a3d --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html new file mode 100644 index 000000000..96e60382c --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html b/28/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html new file mode 100644 index 000000000..ee2f35c79 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html b/28/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html new file mode 100644 index 000000000..091db9221 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html b/28/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html new file mode 100644 index 000000000..ac7d293f3 --- /dev/null +++ b/28/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..f02ba89d4 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html new file mode 100644 index 000000000..8cac40917 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html new file mode 100644 index 000000000..7b5accf56 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html new file mode 100644 index 000000000..895bc620e --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html new file mode 100644 index 000000000..24f2627c2 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html new file mode 100644 index 000000000..c4e47c452 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html new file mode 100644 index 000000000..577c0ec10 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..9f2a533a5 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html new file mode 100644 index 000000000..8b98b617c --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html new file mode 100644 index 000000000..8e4302b80 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html new file mode 100644 index 000000000..52a130c18 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html new file mode 100644 index 000000000..96ef43157 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..d8f981500 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html new file mode 100644 index 000000000..7d1eca0ea --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html new file mode 100644 index 000000000..8ea0aa528 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..09af3c189 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html new file mode 100644 index 000000000..e4cc4244f --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html new file mode 100644 index 000000000..3a1e09725 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html new file mode 100644 index 000000000..0740a8475 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html new file mode 100644 index 000000000..c81e95551 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html new file mode 100644 index 000000000..944c865b5 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html new file mode 100644 index 000000000..ae51f9137 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html new file mode 100644 index 000000000..d7f2b6368 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html b/28/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html new file mode 100644 index 000000000..e0c7d02fc --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..f0298c1b2 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html new file mode 100644 index 000000000..f0e02719f --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html new file mode 100644 index 000000000..ad6e65bea --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html new file mode 100644 index 000000000..385ab8c74 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html new file mode 100644 index 000000000..75b6d8cfe --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html new file mode 100644 index 000000000..66e2a4ca7 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html new file mode 100644 index 000000000..f649ecc37 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..028c27926 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html new file mode 100644 index 000000000..1c58ad42c --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html new file mode 100644 index 000000000..07d0431e1 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html new file mode 100644 index 000000000..b9c9f0c22 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html new file mode 100644 index 000000000..bf2f0105e --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..4358d6568 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html new file mode 100644 index 000000000..b5f3041a8 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html new file mode 100644 index 000000000..f940a8bfb --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..7aed54291 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html new file mode 100644 index 000000000..0f694e065 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html new file mode 100644 index 000000000..3dee6f4e4 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html new file mode 100644 index 000000000..0a5bdfa18 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html b/28/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html new file mode 100644 index 000000000..5c4325701 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html new file mode 100644 index 000000000..f91b9fe10 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html new file mode 100644 index 000000000..6be7bd8e9 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html new file mode 100644 index 000000000..3efbf0a0b --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html new file mode 100644 index 000000000..4b4969ab8 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html new file mode 100644 index 000000000..cb5773b0e --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html new file mode 100644 index 000000000..4967e8fe9 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html new file mode 100644 index 000000000..a8359c5b4 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html new file mode 100644 index 000000000..0c8abd929 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html new file mode 100644 index 000000000..3f81fc2dd --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html new file mode 100644 index 000000000..c0d5abbd7 --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html new file mode 100644 index 000000000..6dd8660bc --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html b/28/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html new file mode 100644 index 000000000..8a989ea8e --- /dev/null +++ b/28/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/jsr77/index.html b/28/wildscribe/subsystem/jsr77/index.html new file mode 100644 index 000000000..bb18a0fa1 --- /dev/null +++ b/28/wildscribe/subsystem/jsr77/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jsr77/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html new file mode 100644 index 000000000..67bd49f91 --- /dev/null +++ b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html new file mode 100644 index 000000000..375b9f81a --- /dev/null +++ b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html new file mode 100644 index 000000000..9fea819c3 --- /dev/null +++ b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html new file mode 100644 index 000000000..2528ab729 --- /dev/null +++ b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html new file mode 100644 index 000000000..72708826f --- /dev/null +++ b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html new file mode 100644 index 000000000..f9531f241 --- /dev/null +++ b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html new file mode 100644 index 000000000..3aa2ef041 --- /dev/null +++ b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html new file mode 100644 index 000000000..6e1e8960e --- /dev/null +++ b/28/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/microprofile-health-smallrye/index.html b/28/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..0c2a8bce5 --- /dev/null +++ b/28/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/28/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..db9f4e414 --- /dev/null +++ b/28/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html b/28/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html new file mode 100644 index 000000000..584f9e74b --- /dev/null +++ b/28/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html b/28/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html new file mode 100644 index 000000000..c9baa8728 --- /dev/null +++ b/28/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html b/28/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html new file mode 100644 index 000000000..b839e5197 --- /dev/null +++ b/28/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/elytron-key-manager/index.html b/28/wildscribe/subsystem/security/elytron-key-manager/index.html new file mode 100644 index 000000000..ab2b18c94 --- /dev/null +++ b/28/wildscribe/subsystem/security/elytron-key-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-manager/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/elytron-key-store/index.html b/28/wildscribe/subsystem/security/elytron-key-store/index.html new file mode 100644 index 000000000..f4aed7f76 --- /dev/null +++ b/28/wildscribe/subsystem/security/elytron-key-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-store/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/elytron-realm/index.html b/28/wildscribe/subsystem/security/elytron-realm/index.html new file mode 100644 index 000000000..8fdf49178 --- /dev/null +++ b/28/wildscribe/subsystem/security/elytron-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-realm/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/elytron-trust-manager/index.html b/28/wildscribe/subsystem/security/elytron-trust-manager/index.html new file mode 100644 index 000000000..089272106 --- /dev/null +++ b/28/wildscribe/subsystem/security/elytron-trust-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-manager/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/elytron-trust-store/index.html b/28/wildscribe/subsystem/security/elytron-trust-store/index.html new file mode 100644 index 000000000..cc7f34bce --- /dev/null +++ b/28/wildscribe/subsystem/security/elytron-trust-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-store/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/index.html b/28/wildscribe/subsystem/security/index.html new file mode 100644 index 000000000..9734c48a0 --- /dev/null +++ b/28/wildscribe/subsystem/security/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html b/28/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html new file mode 100644 index 000000000..4d717261e --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/acl/classic/index.html b/28/wildscribe/subsystem/security/security-domain/acl/classic/index.html new file mode 100644 index 000000000..2053e5cb9 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/acl/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/audit/classic/index.html b/28/wildscribe/subsystem/security/security-domain/audit/classic/index.html new file mode 100644 index 000000000..8785c4b5f --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/audit/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html b/28/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html new file mode 100644 index 000000000..c32328fcb --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/authentication/classic/index.html b/28/wildscribe/subsystem/security/security-domain/authentication/classic/index.html new file mode 100644 index 000000000..56358da01 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/authentication/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html b/28/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html new file mode 100644 index 000000000..855491bed --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html b/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html new file mode 100644 index 000000000..5693761a2 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html b/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html new file mode 100644 index 000000000..3b00b28dc --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html b/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html new file mode 100644 index 000000000..3a791bae1 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html b/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html new file mode 100644 index 000000000..bb48ac297 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/authorization/classic/index.html b/28/wildscribe/subsystem/security/security-domain/authorization/classic/index.html new file mode 100644 index 000000000..4ccb820ad --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/authorization/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html b/28/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html new file mode 100644 index 000000000..c3ab14f9b --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html b/28/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html new file mode 100644 index 000000000..9c2ba7389 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html b/28/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html new file mode 100644 index 000000000..0a6fc4926 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/index.html b/28/wildscribe/subsystem/security/security-domain/index.html new file mode 100644 index 000000000..361ebd45b --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/jsse/classic/index.html b/28/wildscribe/subsystem/security/security-domain/jsse/classic/index.html new file mode 100644 index 000000000..c912a14a4 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/jsse/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/jsse/classic/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/mapping/classic/index.html b/28/wildscribe/subsystem/security/security-domain/mapping/classic/index.html new file mode 100644 index 000000000..a0a342796 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/mapping/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html b/28/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html new file mode 100644 index 000000000..5377a0945 --- /dev/null +++ b/28/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html

+ + \ No newline at end of file diff --git a/28/wildscribe/subsystem/security/vault/classic/index.html b/28/wildscribe/subsystem/security/vault/classic/index.html new file mode 100644 index 000000000..8ea813e83 --- /dev/null +++ b/28/wildscribe/subsystem/security/vault/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 28). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/vault/classic/index.html

+ + \ No newline at end of file diff --git a/29/Admin_Guide.html b/29/Admin_Guide.html index c5c779809..7c7bbd643 100644 --- a/29/Admin_Guide.html +++ b/29/Admin_Guide.html @@ -1,26840 +1,11 @@ - - - - - - -WildFly Admin Guide - - - - - - - -
-
-
-
-

© 2017 The original authors.

-
- -
-
-
-

1. Target Audience

-
-
-

This document is a guide to the setup, administration, and configuration -of WildFly.

-
-
-

1.1. Prerequisites

-
-

Before continuing, you should know how to download, install and run -WildFly. For more information on these steps, refer here: -Getting Started Guide.

-
-
-
-

1.2. Examples in this guide

-
-

The examples in this guide are largely expressed as XML configuration -file excerpts, or by using a representation of the de-typed management -model.

-
-
-
-
-
-

2. Core management concepts

-
- -
-

2.1. Operating mode

-
-

WildFly can be booted in two different modes. A managed domain allows -you to run and manage a multi-server topology. Alternatively, you can -run a standalone server instance.

-
-
-

2.1.1. Standalone Server

-
-

For many use cases, the centralized management capability available via -a managed domain is not necessary. For these use cases, a WildFly -instance can be run as a "standalone server". A standalone server -instance is an independent process, much like an JBoss Application -Server 3, 4, 5, or 6 instance is. Standalone instances can be launched -via the standalone.sh or standalone.bat launch scripts.

-
-
-

If more than one standalone instance is launched and multi-server -management is desired, it is the user’s responsibility to coordinate -management across the servers. For example, to deploy an application -across all of the standalone servers, the user would need to -individually deploy the application on each server.

-
-
-

It is perfectly possible to launch multiple standalone server instances -and have them form an HA cluster, just like it was possible with JBoss -Application Server 3, 4, 5 and 6.

-
-
-
-

2.1.2. Managed Domain

-
-

One of the primary new features of WildFly is the ability to manage -multiple WildFly instances from a single control point. A collection of -such servers is referred to as the members of a "domain" with a single -Domain Controller process acting as the central management control -point. All of the WildFly instances in the domain share a common -management policy, with the Domain Controller acting to ensure that each -server is configured according to that policy. Domains can span multiple -physical (or virtual) machines, with all WildFly instances on a given -host under the control of a special Host Controller process. One Host -Controller instance is configured to act as the central Domain -Controller. The Host Controller on each host interacts with the Domain -Controller to control the lifecycle of the application server instances -running on its host and to assist the Domain Controller in managing -them.

-
-
-

When you launch a WildFly managed domain on a host (via the domain.sh -or domain.bat launch scripts) your intent is to launch a Host -Controller and usually at least one WildFly instance. On one of the -hosts the Host Controller should be configured to act as the Domain -Controller. See Domain Setup for details.

-
-
-

The following is an example managed domain topology:

-
-
-
-DC-HC-Server.png -
-
-
-
Host
-
-

Each "Host" box in the above diagram represents a physical or virtual -host. A physical host can contain zero, one or more server instances.

-
-
-
-
Host Controller
-
-

When the domain.sh or domain.bat script is run on a host, a process -known as a Host Controller is launched. The Host Controller is solely -concerned with server management; it does not itself handle application -server workloads. The Host Controller is responsible for starting and -stopping the individual application server processes that run on its -host, and interacts with the Domain Controller to help manage them.

-
-
-

Each Host Controller by default reads its configuration from the -domain/configuration/host.xml file located in the unzipped WildFly -installation on its host’s filesystem. The host.xml file contains -configuration information that is specific to the particular host. -Primarily:

-
-
-
    -
  • -

    the listing of the names of the actual WildFly instances that are -meant to run off of this installation.

    -
  • -
  • -

    configuration of how the Host Controller is to contact the Domain -Controller to register itself and access the domain configuration. This -may either be configuration of how to find and contact a remote Domain -Controller, or a configuration telling the Host Controller to itself act -as the Domain Controller.

    -
  • -
  • -

    configuration of items that are specific to the local physical -installation. For example, named interface definitions declared in -domain.xml (see below) can be mapped to an actual machine-specific IP -address in host.xml. Abstract path names in domain.xml can be mapped -to actual filesystem paths in host.xml.

    -
  • -
-
-
-
-
Domain Controller
-
-

One Host Controller instance is configured to act as the central -management point for the entire domain, i.e. to be the Domain -Controller. The primary responsibility of the Domain Controller is to -maintain the domain’s central management policy, to ensure all Host -Controllers are aware of its current contents, and to assist the Host -Controllers in ensuring any running application server instances are -configured in accordance with this policy. This central management -policy is stored by default in the domain/configuration/domain.xml -file in the unzipped WildFly installation on Domain Controller’s host’s -filesystem.

-
-
-

A domain.xml file must be located in the domain/configuration -directory of an installation that’s meant to run the Domain Controller. -It does not need to be present in installations that are not meant to -run a Domain Controller; i.e. those whose Host Controller is configured -to contact a remote Domain Controller. The presence of a domain.xml -file on such a server does no harm.

-
-
-

The domain.xml file includes, among other things, the configuration of -the various "profiles" that WildFly instances in the domain can be -configured to run. A profile configuration includes the detailed -configuration of the various subsystems that comprise that profile (e.g. -an embedded JBoss Web instance is a subsystem; a JBoss TS transaction -manager is a subsystem, etc). The domain configuration also includes the -definition of groups of sockets that those subsystems may open. The -domain configuration also includes the definition of "server groups":

-
-
-
-
Server Group
-
-

A server group is set of server instances that will be managed and -configured as one. In a managed domain each application server instance -is a member of a server group. (Even if the group only has a single -server, the server is still a member of a group.) It is the -responsibility of the Domain Controller and the Host Controllers to -ensure that all servers in a server group have a consistent -configuration. They should all be configured with the same profile and -they should have the same deployment content deployed.

-
-
-

The domain can have multiple server groups. The above diagram shows two -server groups, "ServerGroupA" and "ServerGroupB". Different server -groups can be configured with different profiles and deployments; for -example in a domain with different tiers of servers providing different -services. Different server groups can also run the same profile and have -the same deployments; for example to support rolling application upgrade -scenarios where a complete service outage is avoided by first upgrading -the application on one server group and then upgrading a second server -group.

-
-
-

An example server group definition is as follows:

-
-
-
-
<server-group name="main-server-group" profile="default">
-    <socket-binding-group ref="standard-sockets"/>
-    <deployments>
-        <deployment name="foo.war_v1" runtime-name="foo.war" />
-        <deployment name="bar.ear" runtime-name="bar.ear" />
-    </deployments>
-</server-group>
-
-
-
-

A server-group configuration includes the following required attributes:

-
-
-
    -
  • -

    name — the name of the server group

    -
  • -
  • -

    profile — the name of the profile the servers in the group should run

    -
  • -
-
-
-

In addition, the following optional elements are available:

-
-
-
    -
  • -

    socket-binding-group — specifies the name of the default socket -binding group to use on servers in the group. Can be overridden on a -per-server basis in host.xml. If not provided in the server-group -element, it must be provided for each server in host.xml.

    -
  • -
  • -

    deployments — the deployment content that should be deployed on the -servers in the group.

    -
  • -
  • -

    deployment-overlays — the overlays and their associated deployments.

    -
  • -
  • -

    system-properties — system properties that should be set on all -servers in the group

    -
  • -
  • -

    jvm — default jvm settings for all servers in the group. The Host -Controller will merge these settings with any provided in host.xml to -derive the settings to use to launch the server’s JVM. See -JVM settings for further details.

    -
  • -
-
-
-
-
Server
-
-

Each "Server" in the above diagram represents an actual application -server instance. The server runs in a separate JVM process from the Host -Controller. The Host Controller is responsible for launching that -process. (In a managed domain the end user cannot directly launch a -server process from the command line.)

-
-
-

The Host Controller synthesizes the server’s configuration by combining -elements from the domain wide configuration (from domain.xml ) and the -host-specific configuration (from host.xml ).

-
-
-
-
-

2.1.3. Deciding between running standalone servers or a managed domain

-
-

Which use cases are appropriate for managed domain and which are -appropriate for standalone servers? A managed domain is all about -coordinated multi-server management — with it WildFly provides a -central point through which users can manage multiple servers, with rich -capabilities to keep those servers' configurations consistent and the -ability to roll out configuration changes (including deployments) to the -servers in a coordinated fashion.

-
-
-

It’s important to understand that the choice between a managed domain -and standalone servers is all about how your servers are managed, not -what capabilities they have to service end user requests. This -distinction is particularly important when it comes to high availability -clusters. It’s important to understand that HA functionality is -orthogonal to running standalone servers or a managed domain. That is, a -group of standalone servers can be configured to form an HA cluster. The -domain and standalone modes determine how the servers are managed, not -what capabilities they provide.

-
-
-

So, given all that:

-
-
-
    -
  • -

    A single server installation gains nothing from running in a managed -domain, so running a standalone server is a better choice.

    -
  • -
  • -

    For multi-server production environments, the choice of running a -managed domain versus standalone servers comes down to whether the user -wants to use the centralized management capabilities a managed domain -provides. Some enterprises have developed their own sophisticated -multi-server management capabilities and are comfortable coordinating -changes across a number of independent WildFly instances. For these -enterprises, a multi-server architecture comprised of individual -standalone servers is a good option.

    -
  • -
  • -

    Running a standalone server is better suited for most development -scenarios. Any individual server configuration that can be achieved in a -managed domain can also be achieved in a standalone server, so even if -the application being developed will eventually run in production on a -managed domain installation, much (probably most) development can be -done using a standalone server.

    -
  • -
  • -

    Running a managed domain mode can be helpful in some advanced -development scenarios; i.e. those involving interaction between multiple -WildFly instances. Developers may find that setting up various servers -as members of a domain is an efficient way to launch a multi-server -cluster.

    -
  • -
-
-
-
-
-

2.2. General configuration concepts

-
-

For both a managed domain or a standalone server, a number of common -configuration concepts apply:

-
-
-

2.2.1. Extensions

-
-

An extension is a module that extends the core capabilities of the -server. The WildFly core is very simple and lightweight; most of the -capabilities people associate with an application server are provided -via extensions. An extension is packaged as a module in the modules -folder. The user indicates that they want a particular extension to be -available by including an <extension/> element naming its module in -the domain.xml or standalone.xml file.

-
-
-
-
<extensions>
-    [...]
-    <extension module="org.jboss.as.transactions"/>
-    <extension module="org.jboss.as.webservices" />
-    <extension module="org.jboss.as.weld" />
-    [...]
-    <extension module="org.wildfly.extension.undertow"/>
-</extensions>
-
-
-
-
-

2.2.2. Profiles and Subsystems

-
-

The most significant part of the configuration in domain.xml and -standalone.xml is the configuration of one (in standalone.xml) or -more (in domain.xml) "profiles". A profile is a named set of subsystem -configurations. A subsystem is an added set of capabilities added to the -core server by an extension (see "Extensions" above). A subsystem -provides servlet handling capabilities; a subsystem provides an Jakarta Enterprise Beans -container; a subsystem provides Jakarta Transactions, etc. A profile is a named list of -subsystems, along with the details of each subsystem’s configuration. A -profile with a large number of subsystems results in a server with a -large set of capabilities. A profile with a small, focused set of -subsystems will have fewer capabilities but a smaller footprint.

-
-
-

The content of an individual profile configuration looks largely the -same in domain.xml and standalone.xml. The only difference is -standalone.xml is only allowed to have a single profile element (the -profile the server will run), while domain.xml can have many profiles, -each of which can be mapped to one or more groups of servers.

-
-
-

The contents of individual subsystem configurations look exactly the -same between domain.xml and standalone.xml.

-
-
-
-

2.2.3. Paths

-
-

A logical name for a filesystem path. The domain.xml, host.xml and -standalone.xml configurations all include a section where paths can be -declared. Other sections of the configuration can then reference those -paths by their logical name, rather than having to include the full -details of the path (which may vary on different machines). For example, -the logging subsystem configuration includes a reference to the " -`jboss.server.log.dir`" path that points to the server’s " `log`" -directory.

-
-
-
-
<file relative-to="jboss.server.log.dir" path="server.log"/>
-
-
-
-

WildFly automatically provides a number of standard paths without any -need for the user to configure them in a configuration file:

-
-
-
    -
  • -

    jboss.home.dir - the root directory of the WildFly distribution

    -
  • -
  • -

    user.home - user’s home directory

    -
  • -
  • -

    user.dir - user’s current working directory

    -
  • -
  • -

    java.home - java installation directory

    -
  • -
  • -

    jboss.server.base.dir - root directory for an individual server -instance

    -
  • -
  • -

    jboss.server.config.dir - directory the server will use for -configuration file storage

    -
  • -
  • -

    jboss.server.data.dir - directory the server will use for persistent -data file storage

    -
  • -
  • -

    jboss.server.log.dir - directory the server will use for log file -storage

    -
  • -
  • -

    jboss.server.temp.dir - directory the server will use for temporary -file storage

    -
  • -
  • -

    jboss.controller.temp.dir - directory the server will use for -temporary file storage

    -
  • -
  • -

    jboss.domain.servers.dir - directory under which a host controller -will create the working area for individual server instances (managed -domain mode only)

    -
  • -
-
-
-

Users can add their own paths or override all except the first 5 of the -above by adding a <path/> element to their configuration file.

-
-
-
-
<path name="example" path="example" relative-to="jboss.server.data.dir"/>
-
-
-
-

The attributes are:

-
-
-
    -
  • -

    name — the name of the path.

    -
  • -
  • -

    path — the actual filesystem path. Treated as an absolute path, -unless the 'relative-to' attribute is specified, in which case the value -is treated as relative to that path.

    -
  • -
  • -

    relative-to — (optional) the name of another previously named path, -or of one of the standard paths provided by the system.

    -
  • -
-
-
-

A <path/> element in a domain.xml need not include anything more -than the name attribute; i.e. it need not include any information -indicating what the actual filesystem path is:

-
-
-
-
<path name="x"/>
-
-
-
-

Such a configuration simply says, "There is a path named 'x' that other -parts of the domain.xml configuration can reference. The actual -filesystem location pointed to by 'x' is host-specific and will be -specified in each machine’s host.xml file." If this approach is used, -there must be a path element in each machine’s host.xml that specifies -what the actual filesystem path is:

-
-
-
-
<path name="x" path="/var/x" />
-
-
-
-

A <path/> element in a standalone.xml must include the specification -of the actual filesystem path.

-
-
-
-

2.2.4. Interfaces

-
-

A logical name for a network interface/IP address/host name to which -sockets can be bound. The domain.xml, host.xml and standalone.xml -configurations all include a section where interfaces can be declared. -Other sections of the configuration can then reference those interfaces -by their logical name, rather than having to include the full details of -the interface (which may vary on different machines). An interface -configuration includes the logical name of the interface as well as -information specifying the criteria to use for resolving the actual -physical address to use. See Interfaces -and ports for further details.

-
-
-

An <interface/> element in a domain.xml need not include anything -more than the name attribute; i.e. it need not include any information -indicating what the actual IP address associated with the name is:

-
-
-
-
<interface name="internal"/>
-
-
-
-

Such a configuration simply says, "There is an interface named -'internal' that other parts of the domain.xml configuration can -reference. The actual IP address pointed to by 'internal' is -host-specific and will be specified in each machine’s host.xml file." If -this approach is used, there must be an interface element in each -machine’s host.xml that specifies the criteria for determining the IP -address:

-
-
-
-
<interface name="internal">
-   <nic name="eth1"/>
-</interface>
-
-
-
-

An <interface/> element in a standalone.xml must include the -criteria for determining the IP address.

-
-
-

See Interface declarations -for full details.

-
-
-
-

2.2.5. Socket Bindings and Socket Binding Groups

-
-

A socket binding is a named configuration for a socket.

-
-
-

The domain.xml and standalone.xml configurations both include a -section where named socket configurations can be declared. Other -sections of the configuration can then reference those sockets by their -logical name, rather than having to include the full details of the -socket configuration (which may vary on different machines). -See Socket Binding Groups -for full details.

-
-
-
-

2.2.6. System Properties

-
-

System property values can be set in a number of places in domain.xml, -host.xml and standalone.xml. The values in standalone.xml are set -as part of the server boot process. Values in domain.xml and -host.xml are applied to servers when they are launched.

-
-
-

When a system property is configured in domain.xml or host.xml, the -servers it ends up being applied to depends on where it is set. Setting -a system property in a child element directly under the domain.xml -root results in the property being set on all servers. Setting it in a -<system-property/> element inside a <server-group/> element in -domain.xml results in the property being set on all servers in the -group. Setting it in a child element directly under the host.xml root -results in the property being set on all servers controlled by that -host’s Host Controller. Finally, setting it in a <system-property/> -element inside a <server/> element in host.xml result in the -property being set on that server. The same property can be configured -in multiple locations, with a value in a <server/> element taking -precedence over a value specified directly under the host.xml root -element, the value in a host.xml taking precedence over anything from -domain.xml, and a value in a <server-group/> element taking -precedence over a value specified directly under the domain.xml root -element.

-
-
-
-

2.2.7. Script Configuration Files

-
-

Scripts are located in the $JBOSS_HOME/bin directory. Within this directory you will find script configuration files -for standalone and domain startup scripts for each platform. These files can be used to configure your environment -without having to edit the scripts themselves. For example, you can configure the JAVA_OPTS environment variable to -configure the JVM before the container is launched.

-
-
-
Standalone Script Configuration Files:
-
-
    -
  • -

    standalone.conf invoked from standalone.sh

    -
  • -
  • -

    standalone.conf.bat invoked from standalone.bat

    -
  • -
  • -

    standalone.conf.ps1 invoked from standalone.ps1

    -
  • -
-
-
-
-
Domain Script Configuration Files:
-
-
    -
  • -

    domain.conf invoked from domain.sh

    -
  • -
  • -

    domain.conf.bat invoked from domain.bat

    -
  • -
  • -

    domain.conf.ps1 invoked from domain.ps1

    -
  • -
-
-
-

By default, these are in the $JBOSS_HOME/bin directory. However, you can set the STANDALONE_CONF environment -variable for standalone servers or DOMAIN_CONF environment variable for domain servers with a value of the -absolute path to the file.

-
-
-
-
Common Script Configuration Files
-
-

Starting with WildFly 23, common configuration files were introduced. These files are invoked from every script in the -$JBOSS_HOME/bin directory. While these configuration files are not present in the directory by default, they -can be added. You can simply just add the common.conf configuration file for the script type you want to -execute and all scripts in the directory will invoke the configuration script.

-
-
-
    -
  • -

    common.conf for bash scripts

    -
  • -
  • -

    common.conf.bat for Windows batch scripts

    -
  • -
  • -

    common.conf.ps1 for PowerShell scripts

    -
  • -
-
-
-

You can also set the COMMON_CONF environment variable to have this configuration script live outside the -$JBOSS_HOME/bin directory.

-
-
- - - - - -
- - -If you provide a common configuration file it will be invoked before the standalone and domain script -configuration files. For example invoking standalone.sh first invokes the common.conf then later invokes -the standalone.conf. -
-
-
-
-
-
-

2.3. Management resources

-
-

When WildFly parses your configuration files at boot, or when you use -one of the AS’s Management Clients you are -adding, removing or modifying management resources in the AS’s -internal management model. A WildFly management resource has the -following characteristics:

-
-
-

2.3.1. Address

-
-

All WildFly management resources are organized in a tree. The path to -the node in the tree for a particular resource is its address. Each -segment in a resource’s address is a key/value pair:

-
-
-
    -
  • -

    The key is the resource’s type, in the context of its parent. So, -for example, the root resource for a standalone server has children of -type subsystem, interface, socket-binding, etc. The resource for -the subsystem that provides the AS’s webserver capability has children -of type connector and virtual-server. The resource for the subsystem -that provides the AS’s messaging server capability has, among others, -children of type jms-queue and jms-topic.

    -
  • -
  • -

    The value is the name of a particular resource of the given type, e.g -web or messaging for subsystems or http or https for web -subsystem connectors.

    -
  • -
-
-
-

The full address for a resource is the ordered list of key/value pairs -that lead from the root of the tree to the resource. Typical notation is -to separate the elements in the address with a '/' and to separate the -key and the value with an '=':

-
-
-
    -
  • -

    /subsystem=undertow/server=default-server/http-listener=default

    -
  • -
  • -

    /subsystem=messaging/jms-queue=testQueue

    -
  • -
  • -

    /interface=public

    -
  • -
-
-
-

When using the HTTP API, a '/' is used to separate the key and the value -instead of an '=':

-
- -
-
-

2.3.2. Operations

-
-

Querying or modifying the state of a resource is done via an operation. -An operation has the following characteristics:

-
-
-
    -
  • -

    A string name

    -
  • -
  • -

    Zero or more named parameters. Each parameter has a string name, and a -value of type org.jboss.dmr.ModelNode (or, when invoked via the CLI, -the text representation of a ModelNode; when invoked via the HTTP API, -the JSON representation of a ModelNode.) Parameters may be optional.

    -
  • -
  • -

    A return value, which will be of type org.jboss.dmr.ModelNode (or, -when invoked via the CLI, the text representation of a ModelNode; when -invoked via the HTTP API, the JSON representation of a ModelNode.)

    -
  • -
-
-
-

Every resource except the root resource will have an add operation and -should have a remove operation ("should" because in WildFly 29 many do -not). The parameters for the add operation vary depending on the -resource. The remove operation has no parameters.

-
-
-

There are also a number of "global" operations that apply to all -resources. See Global operations for full -details.

-
-
-

The operations a resource supports can themselves be determined by -invoking an operation: the read-operation-names operation. Once the -name of an operation is known, details about its parameters and return -value can be determined by invoking the read-operation-description -operation. For example, to learn the names of the operations exposed by -the root resource for a standalone server, and then learn the full -details of one of them, via the CLI one would:

-
-
-
-
[standalone@localhost:9990 /] :read-operation-names
-{
-    "outcome" => "success",
-    "result" => [
-        "add-namespace",
-        "add-schema-location",
-        "delete-snapshot",
-        "full-replace-deployment",
-        "list-snapshots",
-        "read-attribute",
-        "read-children-names",
-        "read-children-resources",
-        "read-children-types",
-        "read-config-as-xml",
-        "read-operation-description",
-        "read-operation-names",
-        "read-resource",
-        "read-resource-description",
-        "reload",
-        "remove-namespace",
-        "remove-schema-location",
-        "replace-deployment",
-        "shutdown",
-        "take-snapshot",
-        "upload-deployment-bytes",
-        "upload-deployment-stream",
-        "upload-deployment-url",
-        "validate-address",
-        "write-attribute"
-    ]
-}
-[standalone@localhost:9990 /] :read-operation-description(name=upload-deployment-url)
-{
-    "outcome" => "success",
-    "result" => {
-        "operation-name" => "upload-deployment-url",
-        "description" => "Indicates that the deployment content available at the included URL should be added to the deployment content repository. Note that this operation does not indicate the content should be deployed into the runtime.",
-        "request-properties" => {"url" => {
-            "type" => STRING,
-            "description" => "The URL at which the deployment content is available for upload to the domain's or standalone server's deployment content repository.. Note that the URL must be accessible from the target of the operation (i.e. the Domain Controller or standalone server).",
-            "required" => true,
-            "min-length" => 1,
-            "nillable" => false
-        }},
-        "reply-properties" => {
-            "type" => BYTES,
-            "description" => "The hash of managed deployment content that has been uploaded to the domain's or standalone server's deployment content repository.",
-            "min-length" => 20,
-            "max-length" => 20,
-            "nillable" => false
-        }
-    }
-}
-
-
-
-

See Descriptions -below for more on how to learn about the operations a resource exposes.

-
-
-
-

2.3.3. Attributes

-
-

Management resources expose information about their state as attributes. -Attributes have string name, and a value of type -org.jboss.dmr.ModelNode (or: for the CLI, the text representation of a -ModelNode; for HTTP API, the JSON representation of a ModelNode.)

-
-
-

Attributes can either be read-only or read-write. Reading and writing -attribute values is done via the global read-attribute and -write-attribute operations.

-
-
-

The read-attribute operation takes a single parameter "name" whose -value is a the name of the attribute. For example, to read the "port" -attribute of a socket-binding resource via the CLI:

-
-
-
-
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets/socket-binding=https:read-attribute(name=port)
-{
-    "outcome" => "success",
-    "result" => 8443
-}
-
-
-
-

If an attribute is writable, the write-attribute operation is used to -mutate its state. The operation takes two parameters:

-
-
-
    -
  • -

    name – the name of the attribute

    -
  • -
  • -

    value – the value of the attribute

    -
  • -
-
-
-

For example, to read the "port" attribute of a socket-binding resource -via the CLI:

-
-
-
-
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets/socket-binding=https:write-attribute(name=port,value=8444)
-{"outcome" => "success"}
-
-
-
-

Attributes can have one of two possible storage types:

-
-
-
    -
  • -

    CONFIGURATION – means the value of the attribute is stored in the -persistent configuration; i.e. in the domain.xml, host.xml or -standalone.xml file from which the resource’s configuration was read.

    -
  • -
  • -

    RUNTIME – the attribute value is only available from a running -server; the value is not stored in the persistent configuration. A -metric (e.g. number of requests serviced) is a typical example of a -RUNTIME attribute.

    -
  • -
-
-
-

The values of all of the attributes a resource exposes can be obtained -via the read-resource operation, with the "include-runtime" parameter -set to "true". For example, from the CLI:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=undertow/server=default-server/http-listener=default:read-resource(include-runtime=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "allow-encoded-slash" => false,
-        "allow-equals-in-cookie-value" => false,
-        "always-set-keep-alive" => true,
-        "buffer-pipelined-data" => true,
-        "buffer-pool" => "default",
-        "bytes-received" => 0L,
-        "bytes-sent" => 0L,
-        "certificate-forwarding" => false,
-        "decode-url" => true,
-        "disallowed-methods" => ["TRACE"],
-        "enable-http2" => false,
-        "enabled" => true,
-        "error-count" => 0L,
-        "max-buffered-request-size" => 16384,
-        "max-connections" => undefined,
-        "max-cookies" => 200,
-        "max-header-size" => 1048576,
-        "max-headers" => 200,
-        "max-parameters" => 1000,
-        "max-post-size" => 10485760L,
-        "max-processing-time" => 0L,
-        "no-request-timeout" => undefined,
-        "processing-time" => 0L,
-        "proxy-address-forwarding" => false,
-        "read-timeout" => undefined,
-        "receive-buffer" => undefined,
-        "record-request-start-time" => false,
-        "redirect-socket" => "https",
-        "request-count" => 0L,
-        "request-parse-timeout" => undefined,
-        "resolve-peer-address" => false,
-        "send-buffer" => undefined,
-        "socket-binding" => "http",
-        "tcp-backlog" => undefined,
-        "tcp-keep-alive" => undefined,
-        "url-charset" => "UTF-8",
-        "worker" => "default",
-        "write-timeout" => undefined
-    }
-}
-
-
-
-

Omit the "include-runtime" parameter (or set it to "false") to limit -output to those attributes whose values are stored in the persistent -configuration:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=undertow/server=default-server/http-listener=default:read-resource(include-runtime=false)
-{
-    "outcome" => "success",
-    "result" => {
-        "allow-encoded-slash" => false,
-        "allow-equals-in-cookie-value" => false,
-        "always-set-keep-alive" => true,
-        "buffer-pipelined-data" => true,
-        "buffer-pool" => "default",
-        "certificate-forwarding" => false,
-        "decode-url" => true,
-        "disallowed-methods" => ["TRACE"],
-        "enable-http2" => false,
-        "enabled" => true,
-        "max-buffered-request-size" => 16384,
-        "max-connections" => undefined,
-        "max-cookies" => 200,
-        "max-header-size" => 1048576,
-        "max-headers" => 200,
-        "max-parameters" => 1000,
-        "max-post-size" => 10485760L,
-        "no-request-timeout" => undefined,
-        "proxy-address-forwarding" => false,
-        "read-timeout" => undefined,
-        "receive-buffer" => undefined,
-        "record-request-start-time" => false,
-        "redirect-socket" => "https",
-        "request-parse-timeout" => undefined,
-        "resolve-peer-address" => false,
-        "send-buffer" => undefined,
-        "socket-binding" => "http",
-        "tcp-backlog" => undefined,
-        "tcp-keep-alive" => undefined,
-        "url-charset" => "UTF-8",
-        "worker" => "default",
-        "write-timeout" => undefined
-    }
-}
-
-
-
-

See Descriptions -below for how to learn more about the attributes a particular resource -exposes.

-
-
-
Override an Attribute Value with an Environment Variable
-
-

It is possible to override the value of any simple attribute by providing an environment variable with a name -that maps to the attribute (and its resource).

-
-
- - - - - -
- - -
-

Complex attributes (which have their type set to LIST, OBJECT, or PROPERTY) can not be overridden using an environment variable.

-
-
-
-
-

If there is an environment variable with such a name, the management resource will use the value of this environment variable -when the management resource validates and sets the attribute value. -This takes place before the attribute value is resolved (if it contains an expression) or corrected.

-
-
- - - - - -
- - -
-

This feature is disabled by default. To enable it, the environment variable WILDFLY_OVERRIDING_ENV_VARS must be set (its value is not relevant):

-
-
-

export WILDFLY_OVERRIDING_ENV_VARS=1

-
-
-
-
-
Mapping between the resource address and attribute and the environment variable
-
-

The name of the environment variable is based on the address of the resource and the name of the attribute:

-
-
-
    -
  1. -

    take the address of the resource (e.g. /subsystem=undertow/server=default-server/http-listener=default)

    -
    -
      -
    • -

      /subsystem=undertow/server=default-server/http-listener=default

      -
    • -
    -
    -
  2. -
  3. -

    remove the leading slash (/)

    -
    -
      -
    • -

      subsystem=undertow/server=default-server/http-listener=default

      -
    • -
    -
    -
  4. -
  5. -

    append two underscores (__) and the name of the attribute (e.g. proxy-address-forwarding)

    -
    -
      -
    • -

      subsystem=undertow/server=default-server/http-listener=default__proxy-address-forwarding

      -
    • -
    -
    -
  6. -
  7. -

    Replace all non-alphanumeric characters with an underscore (_) and put it in upper case

    -
    -
      -
    • -

      SUBSYSTEM_UNDERTOW_SERVER_DEFAULT_SERVER_HTTP_LISTENER_DEFAULT__PROXY_ADDRESS_FORWARDING

      -
    • -
    -
    -
  8. -
-
-
-

If WildFly is started with that environment variable, the value of the proxy-address-forwarding attribute on the -/subsystem=undertow/server=default-server/http-listener=default will be set to the value of the environment variable:

-
-
-
-
$ WILDFLY_OVERRIDING_ENV_VARS=1 \
-  SUBSYSTEM_UNDERTOW_SERVER_DEFAULT_SERVER_HTTP_LISTENER_DEFAULT__PROXY_ADDRESS_FORWARDING=false \
-  ./bin/standalone.sh
-$ ./bin/jboss-cli.sh -c --command="/subsystem=undertow/server=default-server/http-listener=default:read-attribute(name=proxy-address-forwarding)"
-{
-    "outcome" => "success",
-    "result" => "false"
-
-
-
- - - - - -
- - -
-

If an attribute value is determined from an environment variable, the next time the configuration is persisted, that value from the environment variable will be persisted. -Until an operation triggers such persistence of the configuration file, the configuration file will not reflect the current running configuration.

-
-
-
-
-
-
-
-

2.3.4. Children

-
-

Management resources may support child resources. The -types of children a -resource supports (e.g. connector for the web subsystem resource) can -be obtained by querying the resource’s description (see -Descriptions below) -or by invoking the read-children-types operation. Once you know the -legal child types, you can query the names of all children of a given -type by using the global read-children-types operation. The operation -takes a single parameter "child-type" whose value is the type. For -example, a resource representing a socket binding group has children. To -find the type of those children and the names of resources of that type -via the CLI one could:

-
-
-
-
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets:read-children-types
-{
-    "outcome" => "success",
-    "result" => ["socket-binding"]
-}
-[standalone@localhost:9990 /] /socket-binding-group=standard-sockets:read-children-names(child-type=socket-binding)
-{
-    "outcome" => "success",
-    "result" => [
-        "http",
-        "https",
-        "jmx-connector-registry",
-        "jmx-connector-server",
-        "jndi",
-        "remoting",
-        "txn-recovery-environment",
-        "txn-status-manager"
-    ]
-}
-
-
-
-
-

2.3.5. Descriptions

-
-

All resources expose metadata that describes their attributes, -operations and child types. This metadata is itself obtained by invoking -one or more of the global operations each -resource supports. We showed examples of the read-operation-names, -read-operation-description, read-children-types and -read-children-names operations above.

-
-
-

The read-resource-description operation can be used to find the -details of the attributes and child types associated with a resource. -For example, using the CLI:

-
-
-
-
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets:read-resource-description
-{
-    "outcome" => "success",
-    "result" => {
-        "description" => "Contains a list of socket configurations.",
-        "head-comment-allowed" => true,
-        "tail-comment-allowed" => false,
-        "attributes" => {
-            "name" => {
-                "type" => STRING,
-                "description" => "The name of the socket binding group.",
-                "required" => true,
-                "head-comment-allowed" => false,
-                "tail-comment-allowed" => false,
-                "access-type" => "read-only",
-                "storage" => "configuration"
-            },
-            "default-interface" => {
-                "type" => STRING,
-                "description" => "Name of an interface that should be used as the interface for any sockets that do not explicitly declare one.",
-                "required" => true,
-                "head-comment-allowed" => false,
-                "tail-comment-allowed" => false,
-                "access-type" => "read-write",
-                "storage" => "configuration"
-            },
-            "port-offset" => {
-                "type" => INT,
-                "description" => "Increment to apply to the base port values defined in the socket bindings to derive the runtime values to use on this server.",
-                "required" => false,
-                "head-comment-allowed" => true,
-                "tail-comment-allowed" => false,
-                "access-type" => "read-write",
-                "storage" => "configuration"
-            }
-        },
-        "operations" => {},
-        "children" => {"socket-binding" => {
-            "description" => "The individual socket configurtions.",
-            "min-occurs" => 0,
-            "model-description" => undefined
-        }}
-    }
-}
-
-
-
-

Note the -"operations" ⇒ }} in the output above. If the command had included the {{operations -parameter (i.e. -/socket-binding-group=standard-sockets:read-resource-description(operations=true)) -the output would have included the description of each operation -supported by the resource.

-
-
-

See the Global operations section for -details on other parameters supported by the read-resource-description -operation and all the other globally available operations.

-
-
-
-

2.3.6. Comparison to JMX MBeans

-
-

WildFly management resources are conceptually quite similar to Open -MBeans. They have the following primary differences:

-
-
-
    -
  • -

    WildFly management resources are organized in a tree structure. The -order of the key value pairs in a resource’s address is significant, as -it defines the resource’s position in the tree. The order of the key -properties in a JMX ObjectName is not significant.

    -
  • -
  • -

    In an Open MBean attribute values, operation parameter values and -operation return values must either be one of the simple JDK types -(String, Boolean, Integer, etc) or implement either the -javax.management.openmbean.CompositeData interface or the -javax.management.openmbean.TabularData interface. WildFly management -resource attribute values, operation parameter values and operation -return values are all of type org.jboss.dmr.ModelNode.

    -
  • -
-
-
-
-

2.3.7. Basic structure of the management resource trees

-
-

As noted above, management resources are organized in a tree structure. -The structure of the tree depends on whether you are running a -standalone server or a managed domain.

-
-
-
Standalone server
-
-

The structure of the managed resource tree is quite close to the -structure of the standalone.xml configuration file.

-
-
-
    -
  • -

    The root resource

    -
    -
      -
    • -

      extension – extensions installed in the server

      -
    • -
    • -

      path – paths available on the server

      -
    • -
    • -

      system-property – system properties set as part of the -configuration (i.e. not on the command line)

      -
    • -
    • -

      core-service=management – the server’s core management services

      -
    • -
    • -

      core-service=service-container – resource for the JBoss MSC -ServiceContainer that’s at the heart of the AS

      -
    • -
    • -

      subsystem – the subsystems installed on the server. The bulk of the -management model will be children of type subsystem

      -
    • -
    • -

      interface – interface configurations

      -
    • -
    • -

      socket-binding-group – the central resource for the server’s socket -bindings

      -
      -
        -
      • -

        socket-binding – individual socket binding configurations

        -
      • -
      -
      -
    • -
    • -

      deployment – available deployments on the server

      -
    • -
    -
    -
  • -
-
-
-
-
Managed domain
-
-

In a managed domain, the structure of the managed resource tree spans -the entire domain, covering both the domain wide configuration (e.g. -what’s in domain.xml, the host specific configuration for each host -(e.g. what’s in host.xml, and the resources exposed by each running -application server. The Host Controller processes in a managed domain -provide access to all or part of the overall resource tree. How much is -available depends on whether the management client is interacting with -the Host Controller that is acting as the Domain Controller. If -the Host Controller is the Domain Controller, then the section of -the tree for each host is available. If the Host Controller is a secondary Host Controller -to a remote Domain Controller, then only the portion of the tree -associated with that host is available.

-
-
-
    -
  • -

    The root resource for the entire domain. The persistent configuration -associated with this resource and its children, except for those of type -host, is persisted in the domain.xml file on the Domain Controller.

    -
    -
      -
    • -

      extension – extensions available in the domain

      -
    • -
    • -

      path – paths available on across the domain

      -
    • -
    • -

      system-property – system properties set as part of the -configuration (i.e. not on the command line) and available across the -domain

      -
    • -
    • -

      profile – sets of subsystem configurations that can be assigned to -server groups

      -
      -
        -
      • -

        subsystem – configuration of subsystems that are part of the -profile

        -
      • -
      -
      -
    • -
    • -

      interface – interface configurations

      -
    • -
    • -

      socket-binding-group – sets of socket bindings configurations that -can be applied to server groups

      -
      -
        -
      • -

        socket-binding – individual socket binding configurations

        -
      • -
      -
      -
    • -
    • -

      deployment – deployments available for assignment to server groups

      -
    • -
    • -

      deployment-overlay — deployment-overlays content available to -overlay deployments in server groups

      -
    • -
    • -

      server-group – server group configurations

      -
    • -
    • -

      host – the individual Host Controllers. Each child of this type -represents the root resource for a particular host. The persistent -configuration associated with one of these resources or its children is -persisted in the host’s host.xml file.

      -
      -
        -
      • -

        path – paths available on each server on the host

        -
      • -
      • -

        system-property – system properties to set on each server on the -host

        -
      • -
      • -

        core-service=management – the Host Controller’s core management -services

        -
      • -
      • -

        interface – interface configurations that apply to the Host -Controller or servers on the host

        -
      • -
      • -

        jvm – JVM configurations that can be applied when launching -servers

        -
      • -
      • -

        server-config – configuration describing how the Host Controller -should launch a server; what server group configuration to use, and any -server-specific overrides of items specified in other resources

        -
      • -
      • -

        server – the root resource for a running server. Resources from -here and below are not directly persisted; the domain-wide and host -level resources contain the persistent configuration that drives a -server

        -
        -
          -
        • -

          extension – extensions installed in the server

          -
        • -
        • -

          path – paths available on the server

          -
        • -
        • -

          system-property – system properties set as part of the -configuration (i.e. not on the command line)

          -
        • -
        • -

          core-service=management – the server’s core management services

          -
        • -
        • -

          core-service=service-container – resource for the JBoss MSC -ServiceContainer that’s at the heart of the AS

          -
        • -
        • -

          subsystem – the subsystems installed on the server. The bulk of -the management model will be children of type subsystem

          -
        • -
        • -

          interface – interface configurations

          -
        • -
        • -

          socket-binding-group – the central resource for the server’s -socket bindings

          -
          -
            -
          • -

            socket-binding – individual socket binding configurations

            -
          • -
          -
          -
        • -
        • -

          deployment – available deployments on the server

          -
        • -
        • -

          deployment-overlay — available overlays on the server

          -
        • -
        -
        -
      • -
      -
      -
    • -
    -
    -
  • -
-
-
-
-
-
-
-
-

3. Management Clients

-
-
-

WildFly offers three different approaches to configure and manage -servers: a web interface, a command line client and a set of XML -configuration files. Regardless of the approach you choose, the -configuration is always synchronized across the different views and -finally persisted to the XML files.

-
-
-

3.1. Web Management Interface

-
-

The web interface is a GWT application that uses the HTTP management API -to configure a management domain or standalone server.

-
-
-

3.1.1. HTTP Management Endpoint

-
-

The HTTP API endpoint is the entry point for management clients that -rely on the HTTP protocol to integrate with the management layer. It -uses a JSON encoded protocol and a de-typed, RPC style API to describe -and execute management operations against a managed domain or standalone -server. It’s used by the web console, but offers integration -capabilities for a wide range of other clients too.

-
-
-

The HTTP API endpoint is co-located with either the domain controller or -a standalone server. By default, it runs on port 9990:

-
-
-
-
<management-interfaces>
- [...]
-  <http-interface http-authentication-factory="management-http-authentication">
-    <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
-    <socket-binding http="management-http"/>
-  </http-interface>
-<management-interfaces>
-
-
-
-

~(See standalone/configuration/standalone.xml or -domain/configuration/host.xml)~

-
-
-

The HTTP API Endpoint serves two different contexts. One for executing -management operations and another one that allows you to access the web -interface:

-
-
- -
-
-
-

3.1.2. Accessing the web console

-
-

The web console is served through the same port as the HTTP management -API. It can be accessed by pointing your browser to:

-
- -
-

Default URL

-
-
- - - - - -
- - -By default the web interface can be accessed here: -http://localhost:9990/console. -
-
-
-
-

3.1.3. Custom HTTP Headers

-
-

For the responses returned from the HTTP management interface it is also possible to define custom constant HTTP headers that will be added to any response based on matching a configured prefix against the request path.

-
-
-

As an example it could be desirable to add a HTTP header X-Help which points users to the correct location to obtain assistance. The following management operation can be executed within the CLI to activate returning this header on all requests.

-
-
-
-
[standalone@localhost:9990 /]  /core-service=management/management-interface=http-interface: \
-    write-attribute(name=constant-headers, value=[{path="/", \
-    headers=[{name="X-Help", value="wildfly.org"}]}])
-
-
-
-

The responses to all requests to the HTTP management interface will now include the header X-Help with the value wildfly.org.

-
-
-

The resulting configuration will look like: -

-
-
-
-
<management-interfaces>
-  <http-interface http-authentication-factory="management-http-authentication">
-    <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
-        <socket-binding http="management-http"/>
-        <constant-headers>
-            <header-mapping path="/">
-                <header name="X-Help" value="wildfly.org"/>
-            </header-mapping>
-        </constant-headers>
-    </http-interface>
-</management-interfaces>
-
-
-
-

The example here has illustrated adding a single header for all requests matching the path prefix / i.e. every request. More advanced mappings can be defined by specifying a mapping for a more specific path prefix such as /management.

-
-
-

If a request matches multiple mappings such as a request to /management where mappings for / and /management have been specified the headers from all of the mappings will be applied to the corresponding request.

-
-
-

Within a single mapping it is also possible to define multiple headers which should be set on the corresponding response.

-
-
-

As the constant-headers attribute is set verification will be performed to verify that the HTTP headers specified are only making use of allowed characters as specified in the HTTP specification RFCs.

-
-
-

Additionally as they have special handling within the management interface overriding the following headers is disallowed and attempts to set these will result in an error being reported.

-
-
-
    -
  • -

    Connection

    -
  • -
  • -

    Content-Length

    -
  • -
  • -

    Content-Type

    -
  • -
  • -

    Date

    -
  • -
  • -

    Transfer-Encoding

    -
  • -
-
-
-

The configured headers are set at the very end of processing the request immediately before the response is returned to the client, this will mean any of the configured headers will override the same headers set by the corresponding endpoint.

-
-
-
-
-

3.2. Command Line Interface

-
-

The Command Line Interface (CLI) is a management tool for a managed -domain or standalone server. It allows a user to connect to the domain -controller or a standalone server and execute management operations -available through the de-typed management model.

-
-
-

3.2.1. Running the CLI

-
-

Depending on the operating system, the CLI is launched using -jboss-cli.sh or jboss-cli.bat located in the WildFly bin -directory. For further information on the default directory structure, -please consult the " Getting Started -Guide".

-
-
-

The first thing to do after the CLI has started is to connect to a -managed WildFly instance. This is done using the command connect, e.g.

-
-
-
-
./bin/jboss-cli.sh
-You are disconnected at the moment. Type 'connect' to connect to the server
-or 'help' for the list of supported commands.
-[disconnected /]
- 
-[disconnected /] connect
-[domain@localhost:9990 /]
- 
-[domain@localhost:9990 /] quit
-Closed connection to localhost:9990
-
-
-
-

localhost:9990 is the default host and port combination for the -WildFly CLI client.

-
-
-

The host and the port of the server can be provided as an optional -parameter, if the server is not listening on localhost:9990.

-
-
-
-
./bin/jboss-cli.sh
-You are disconnected at the moment. Type 'connect' to connect to the server
-[disconnected /] connect 192.168.0.10:9990
-Connected to standalone controller at 192.168.0.1:9990
-
-
-
-

The :9990 is not required as the CLI will use port 9990 by default. The -port needs to be provided if the server is listening on some other port.

-
-
-

To terminate the session type quit.

-
-
- - - - - -
- - -The jboss-cli script accepts a --connect parameter: ./jboss-cli.sh ---connect -
-
-
-

The --controller parameter can be used to specify the host and port of -the server: ./jboss-cli.sh --connect --controller=192.168.0.1:9990

-
-
-

Help is also available:

-
-
-

In order to list the set of commands that are currently available in the current context -use the option --commands (NB: the following examples are not displaying an -exhaustive set of CLI commands, more and/or different commands could be available -in your running CLI instance):

-
-
-
-
[domain@localhost:9990 /] help --commands
-Commands available in the current context:
-batch               connection-factory  deployment-overlay  if                  patch               reload              try
-cd                  connection-info     echo                jdbc-driver-info    pwd                 rollout-plan        undeploy
-clear               data-source         echo-dmr            jms-queue           quit                run-batch           unset
-command             deploy              help                jms-topic           read-attribute      set                 version
-connect             deployment-info     history             ls                  read-operation      shutdown            xa-data-source
-To read a description of a specific command execute 'help <command name>'.
-
-
-
-

The help command can print help for any command or operation. For operations, -the operation description is formatted as a command help (synopsis, description and -options). Some commands (eg: patch) expose two levels of documentation. A high -level description for the command itself and a dedicated help content for each action (eg: apply). -The help documentation of each command makes it clear if this two levels are available or not.

-
-
-

Use Tab-completion to discover the set of commands and operations:

-
-
-
-
help <TAB>
-
-
-
-

The list of all commands (enabled or not) is displayed.

-
-
-

Examples

-
-
-
    -
  • -

    Display the help of the patch command:

    -
  • -
-
-
-
-
help patch
-
-
-
-
    -
  • -

    Display the help of the apply action of the patch command:

    -
  • -
-
-
-
-
help patch apply
-
-
-
-
    -
  • -

    Display the description of the elytron key-store resource add operation -formatted as a command help content:

    -
  • -
-
-
-
-
help /subsystem=elytron/key-store=?:add
-
-
-
-
-

3.2.2. Keyboard navigation

-
-

In order to efficiently edit commands, the CLI allows you to navigate the words - and characters of a command using the keyboard.

-
-
-

NB: Part of this navigation is platform dependent.

-
-
-
Go left (back) one word
-
-
    -
  • -

    Alt+B : Linux, Solaris, HP-UX, Windows.

    -
  • -
  • -

    Ctrl+LeftArrow: Linux, Solaris, HP-UX.

    -
  • -
  • -

    Alt+LeftArrow: Mac OSX.

    -
  • -
-
-
-
-
Go right (forward) one word
-
-
    -
  • -

    Alt+F : Linux, Solaris, HP-UX, Windows.

    -
  • -
  • -

    Ctrl+RightArrow: Linux, Solaris, HP-UX.

    -
  • -
  • -

    Alt+RightArrow: Mac OSX.

    -
  • -
-
-
-
-
Go to the beginning of the line
-
-
    -
  • -

    Ctrl+A: All supported platforms.

    -
  • -
  • -

    HOME: Linux, Solaris, HP-UX, Windows

    -
  • -
-
-
-
-
Go to the end of the line
-
-
    -
  • -

    Ctrl+E: All supported platforms.

    -
  • -
  • -

    END: Linux, Solaris, HP-UX, Windows

    -
  • -
-
-
-
-
Go left (back) one character
-
-
    -
  • -

    Ctrl+B or LeftArrow: All supported platforms.

    -
  • -
-
-
-
-
Go right (forward) one character
-
-
    -
  • -

    Ctrl+F or RightArrow: All supported platforms.

    -
  • -
-
-
-
-
-

3.2.3. Non-interactive Mode

-
-

The CLI can also be run in non-interactive mode to support scripts and -other types of command line or batch processing. The --command and ---commands arguments can be used to pass a command or a list of commands -to execute. Additionally a --file argument is supported which enables -CLI commands to be provided from a text file.

-
-
-

For example the following command can be used to list all the current -deployments

-
-
-
-
$ ./bin/jboss-cli.sh --connect --commands=ls\ deployment
-sample.war
-business.jar
-
-
-
-

The output can be combined with other shell commands for further -processing, for example to find out what .war files are deployed:

-
-
-
-
$ ./bin/jboss-cli.sh --connect --commands=ls\ deployment | grep war
-sample.war
-
-
-
-

In order to match a command with its output, you can provide the option ---echo-command (or add the XML element <echo-command> to the CLI -configuration file) in order to make the CLI to include the prompt
-command + options in the output. With this option enabled, any executed -command will be added to the output.

-
-
-
-

3.2.4. Command timeout

-
-

By default CLI command and operation executions are not timely bounded. -It means that a command never ending its execution will make the CLI -process to be stuck and unresponsive. To protect the CLI from this -behavior, one can set a command execution timeout.

-
-
-
Command Timeout behavior
-
-

In interactive mode, when a timeout occurs, an error message is -displayed then the console prompt is made available to type new -commands. In non interactive mode (executing a script or a list of -commands), when a timeout occurs, an exception is thrown and the CLI -execution is stopped. In both modes (interactive and non interactive), -when a timeout occurs, the CLI will make a best effort to cancel the -associated server side activities.

-
-
-
-
Configuring the Command timeout
-
-
    -
  • -

    Add the XML element <command-timeout>\{num -seconds}</command-timeout> to the CLI XML configuration file.

    -
  • -
  • -

    Add the option - -command-timeout=\{num seconds} to the CLI command -line. This will override any value set in the XML configuration file.

    -
  • -
-
-
-
-
Managing the Command Timeout
-
-

Once the CLI is running, the timeout can be adjusted to cope with the -commands to execute. For example a batch command will need a longer -timeout than a non batch one. The command command-timeout allows to -get, set and reset the command timeout.

-
-
-
-
Retrieving the command timeout
-
-

The command command-timeout get displays the current timeout in -seconds. A timeout of 0 means no timeout.

-
-
-
-
[standalone@localhost:9990 /] command-timeout get
-0
-
-
-
-
-
Setting the command timeout
-
-

The command command-timeout set update the timeout value to a number -of seconds. If a timeout has been set via configuration (XML file or -option), it is overridden by the set action.

-
-
-
-
[standalone@localhost:9990 /] command-timeout set 10
-
-
-
-
-
Resetting the command timeout
-
-

The command command-timeout reset \{config|default} allows to set the -timeout to its configuration value (XML file or option) or default value -(0 second). If no configuration value is set, resetting to the -configuration value sets the timeout to its default value (0 seconds).

-
-
-
-
[standalone@localhost:9990 /] command-timeout reset config
-[standalone@localhost:9990 /] command-timeout reset default
-
-
-
-
-
-

3.2.5. Default Native Management Interface Security

-
-

The native interface shares the same security configuration as the http -interface, however we also support a local authentication mechanism -which means that the CLI can authenticate against the local WildFly -instance without prompting the user for a username and password. This -mechanism only works if the user running the CLI has read access to the -standalone/tmp/auth folder or domain/tmp/auth folder under the -respective WildFly installation - if the local mechanism fails then the -CLI will fallback to prompting for a username and password for a user -configured as in Default HTTP Interface Security.

-
-
-

Establishing a CLI connection to a remote server will require a username -and password by default.

-
-
-
-

3.2.6. Operation Requests

-
-

Operation requests allow for low level interaction with the management -model. They are different from the high level commands (i.e. -create-jms-queue) in that they allow you to read and modify the server -configuration as if you were editing the XML configuration files -directly. The configuration is represented as a tree of addressable -resources, where each node in the tree (aka resource) offers a set of -operations to execute.

-
-
-

An operation request basically consists of three parts: The address, -an operation name and an optional set of parameters.

-
-
-

The formal specification for an operation request is:

-
-
-
-
[/node-type=node-name (/node-type=node-name)*] : operation-name [( [parameter-name=parameter-value (,parameter-name=parameter-value)*] )]
-
-
-
-

For example:

-
-
-
-
/subsystem=logging/root-logger=ROOT:change-root-log-level(level=WARN)
-
-
-
-

Tab Completion

-
-
-

Tab-completion is supported for all commands and options, i.e. -node-types and node-names, operation names and parameter names.

-
-
-

In operation Tab-completion, required parameters have a name terminated by the -'*' character. This helps identify which are the parameters that must be set in order to -construct a valid operation. Furthermore, Tab-completion does not propose -parameters that are alternatives of parameters already present in the operation.

-
-
-

For example:

-
-
-
-
/deployment=myapp:add(<TAB>
-!  content*  enabled  runtime-name
-
-
-
-

The parameter content is required and completion advertises it with a '*' character.

-
-
-
-
/deployment=myapp:add-content(content=[{<TAB>
-bytes*  hash*  input-stream-index*  target-path*  url*
-
-
-
-

bytes, hash, input-stream-index and url are required but also alternatives -(only one of them can be set). As soon as one of these parameter has been set, the -others are no longer proposed by completion.

-
-
-
-
/deployment=myapp:add-content(content=[{url=myurl,<TAB>
-/deployment=myapp:add-content(content=[{url=myurl,target-path
-
-
-
-

target-path argument is automatically inlined in the command.

-
-
- - - - - -
- - -We are also considering adding aliases that are less verbose for the user, and -will translate into the corresponding operation requests in the -background. -
-
-
-

Whitespaces between the separators in the operation request strings are -not significant.

-
-
-
Addressing resources
-
-

Operation requests might not always have the address part or the -parameters. E.g.

-
-
-
-
:read-resource
-
-
-
-

which will list all the node types for the current node.

-
-
-

To syntactically disambiguate between the commands and operations, -operations require one of the following prefixes:

-
-
-

To execute an operation against the current node, e.g.

-
-
-
-
cd subsystem=logging
-:read-resource(recursive="true")
-
-
-
-

To execute an operation against a child node of the current node, e.g.

-
-
-
-
cd subsystem=logging
-./root-logger=ROOT:change-root-log-level(level=WARN)
-
-
-
-

To execute an operation against the root node, e.g.

-
-
-
-
/:read-resource
-
-
-
-
-
Available Operation Types and Descriptions
-
-

The operation types can be distinguished between common operations that -exist on any node and specific operations that belong to a particular -configuration resource (i.e. subsystem). The common operations are:

-
-
-
    -
  • -

    add

    -
  • -
  • -

    read-attribute

    -
  • -
  • -

    read-children-names

    -
  • -
  • -

    read-children-resources

    -
  • -
  • -

    read-children-types

    -
  • -
  • -

    read-operation-description

    -
  • -
  • -

    read-operation-names

    -
  • -
  • -

    read-resource

    -
  • -
  • -

    read-resource-description

    -
  • -
  • -

    remove

    -
  • -
  • -

    validate-address

    -
  • -
  • -

    write-attribute

    -
  • -
-
-
-

For a list of specific operations (e.g. operations that relate to the -logging subsystem) you can always query the model itself. For example, -to read the operations supported by the logging subsystem resource on a -standalone server:

-
-
-
-
[[standalone@localhost:9990 /] /subsystem=logging:read-operation-names
-{
-   "outcome" => "success",
-   "result" => [
-       "add",
-       "change-root-log-level",
-       "read-attribute",
-       "read-children-names",
-       "read-children-resources",
-       "read-children-types",
-       "read-operation-description",
-       "read-operation-names",
-       "read-resource",
-       "read-resource-description",
-       "remove-root-logger",
-       "root-logger-assign-handler",
-       "root-logger-unassign-handler",
-       "set-root-logger",
-       "validate-address",
-       "write-attribute"
-   ]
-}
-
-
-
-

As you can see, the logging resource offers four additional operations, -namely root-logger-assign-handler, root-logger-unassign-handler, -set-root-logger and remove-root-logger.

-
-
-

Further documentation about a resource or operation can be retrieved -through the description:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=logging:read-operation-description(name=change-root-log-level)
-{
-   "outcome" => "success",
-   "result" => {
-       "operation-name" => "change-root-log-level",
-       "description" => "Change the root logger level.",
-       "request-properties" => {"level" => {
-           "type" => STRING,
-           "description" => "The log level specifying which message levels will be logged by this logger.
-                            Message levels lower than this value will be discarded.",
-           "required" => true
-       }}
-   }
-}
-
-
-
-

Full model

-
-
- - - - - -
- - -To see the full model enter :read-resource(recursive=true). -
-
-
-
-
-

3.2.7. Command History

-
-

Command (and operation request) history is enabled by default. The -history is kept both in-memory and in a file on the disk, i.e. it is -preserved between command line sessions. The history file name is -.jboss-cli-history and is automatically created in the user’s home -directory. When the command line interface is launched this file is read -and the in-memory history is initialized with its content.

-
-
- - - - - -
- - -While in the command line session, you can use the arrow keys to go back -and forth in the history of commands and operations. -
-
-
-

To manipulate the history you can use the history command. If executed -without any arguments, it will print all the recorded commands and -operations (up to the configured maximum, which defaults to 500) from -the in-memory history.

-
-
-

history supports three optional arguments:

-
-
-
    -
  • -

    disable - will disable history expansion (but will not clear the -previously recorded history);

    -
  • -
  • -

    enabled - will re-enable history expansion (starting from the last -recorded command before the history expansion was disabled);

    -
  • -
  • -

    clear - will clear the in-memory history (but not the file one).

    -
  • -
-
-
-
-

3.2.8. JSON and DMR output

-
-

By default the CLI prints operation results using the DMR textual syntax. There are -two ways to make the CLI to display JSON:

-
-
-
    -
  • -

    --output-json option when launching the CLI.

    -
  • -
  • -

    <output-json> XML element added to jboss-cli.xml configuration file.

    -
  • -
-
-
-
-

3.2.9. Color output

-
-

The CLI outputs results of commands and the prompt in color. To disable this, there are two possible ways to disable it:

-
-
-
    -
  • -

    --no-color-output will disable color output;

    -
  • -
  • -

    Change <enabled> to false in jboss-cli.xml.

    -
  • -
-
-
-

The <color-output> block is used to configure the colors of the six basic elements that do support it

-
-
-
    -
  • -

    Output messages: error, warning and success;

    -
  • -
  • -

    Required configuration options when using the auto-complete functionality;

    -
  • -
  • -

    The color of the default prompt;

    -
  • -
  • -

    The color of the prompt when using batch and any of the workflow commands, if, for and try.

    -
  • -
-
-
-
-
<color-output>
-    <enabled>true</enabled>
-    <error-color>red</error-color>
-    <warn-color>yellow</warn-color>
-    <success-color>default</success-color>
-    <required-color>magenta</required-color>
-    <workflow-color>green</workflow-color>
-    <prompt-color>blue</prompt-color>
-</color-output>
-
-
-
-

There are eight available colors:

-
- ---- - - - - - - - - - - - - - - - - - - -

Black

Magenta

Blue

Red

Cyan

White

Green

Yellow

-
-

There is also the possibility of using the default color, which is the terminal’s configured foreground color.

-
-
-
-

3.2.10. Paging and searching output

-
-

In interactive mode, when the content to display is longer than the terminal - height, the content is paged. You can navigate the content by using the following - keys and mouse events:

-
-
-
    -
  • -

    space or PAGE_DOWN: scroll the content one page down.

    -
  • -
  • -

    '\' or PAGE_UP: scroll the content one page up.

    -
  • -
  • -

    ';' or up arrow or mouse wheel up: scroll the content one line up.

    -
  • -
  • -

    ENTER or down arrow or mouse wheel down: scroll the content one line down.

    -
  • -
  • -

    HOME or 'g': scroll to the top of the content. NB: HOME is only supported -for keyboards containing this key.

    -
  • -
  • -

    END or 'G': scroll to the bottom of the content. NB: END is only supported -for keyboards containing this key.

    -
  • -
  • -

    'q' or 'Q' or ESC: exit the paging.

    -
  • -
-
-
-

NB: When the end of the content is reached (using ENTER, space, …​) the paging - is automatically exited.

-
-
-

It is possible to search for text when the content is paged. Search is operated - with the following keys:

-
-
-
    -
  • -

    '/' to display prompt allowing to type some text. Type return to launch the search.
    -You can use up/down arrows to retrieve previously typed text. NB: search history - is not persisted when CLI process exits.

    -
  • -
  • -

    'n' to jump to the next match if any. If no search text has been typed, then the -last entry from the search history is used.

    -
  • -
  • -

    'N' to jump to the previous match if any. If no search text has been typed, -then the last entry from the search history is used.

    -
  • -
-
-
-

There are two possible ways to disable the output paging and write the whole output of the commands at once:

-
-
-
    -
  • -

    --no-output-paging command line parameter will disable the output paging;

    -
  • -
  • -

    Add <output-paging>false<output-paging> in jboss-cli.xml.

    -
  • -
-
-
- - - - - -
- - -On Windows, searching and navigating backward is only supported starting with Windows 10 and Windows Server 2016. -
-
-
- - - - - -
- - -If the CLI process is sent the signal KILL(9) while it is paging, the terminal will stay - in alternate mode. This makes the terminal to behave in an unexpected manner (display and mouse events). - In order to restore the terminal state call: tput rmcup. -
-
-
-
-

3.2.11. Batch Processing

-
-

The batch mode allows one to group commands and operations and execute -them together as an atomic unit. If at least one of the commands or -operations fails, all the other successfully executed commands and -operations in the batch are rolled back.

-
-
-

Not all of the commands are allowed in the batch. For example, commands -like cd, ls, help, etc. are not allowed in the batch since they -don’t translate into operation requests. Only the commands that -translate into operation requests are allowed in the batch. The batch, -actually, is executed as a composite operation request.

-
-
-

The batch mode is entered by executing command batch.

-
-
-
-
[standalone@localhost:9990 /] batch
-[standalone@localhost:9990 / #] /subsystem=datasources/data-source="java\:\/H2DS":enable
-[standalone@localhost:9990 / #] /subsystem=messaging-activemq/server=default/jms-queue=newQueue:add
-
-
-
-

You can execute a batch using the run-batch command:

-
-
-
-
[standalone@localhost:9990 / #] run-batch
-The batch executed successfully.
-
-
-
-

Exit the batch edit mode without losing your changes:

-
-
-
-
[standalone@localhost:9990 / #] holdback-batch
-[standalone@localhost:9990 /]
-
-
-
-

Then activate it later on again:

-
-
-
-
[standalone@localhost:9990 /] batch
-Re-activated batch
-#1 /subsystem=datasources/data-source=java:/H2DS:\/H2DS:enable
-
-
-
-

There are several other notable batch commands available as well (tab -complete to see the list):

-
-
-
    -
  • -

    clear-batch

    -
  • -
  • -

    edit-batch-line (e.g. edit-batch line 3 create-jms-topic -name=mytopic)

    -
  • -
  • -

    remove-batch-line (e.g. remove-batch-line 3)

    -
  • -
  • -

    move-batch-line (e.g. move-batch-line 3 1)

    -
  • -
  • -

    discard-batch

    -
  • -
-
-
-
-

3.2.12. Operators

-
-

CLI has some operators that are similar to shell operators:

-
-
-
    -
  • -

    > To redirect the output of a command/operation to a file:

    -
  • -
-
-
-
-
:read-resource > my-file.txt
-
-
-
-
    -
  • -

    >> To redirect the output of a command/operation and append it at the end of a file:

    -
  • -
-
-
-
-
:read-resource >> my-file.txt
-
-
-
-
    -
  • -

    | To redirect the output of a command/operation to the grep command:

    -
  • -
-
-
-
-
:read-resource | grep undefined
-
-
-
-
-
-

3.3. Default HTTP Interface Security

-
-

WildFly is distributed secured by default. The default security -mechanism is username / password based making use of HTTP Digest for the -authentication process.

-
-
-

The reason for securing the server by default is so that if the -management interfaces are accidentally exposed on a public IP address -authentication is required to connect - for this reason there is no -default user in the distribution.

-
-
-

The user are stored in a properties file called mgmt-users.properties -under standalone/configuration and domain/configuration depending on the -running mode of the server, these files contain the users username along -with a pre-prepared hash of the username along with the name of the -realm and the users password.

-
-
- - - - - -
- - -Although the properties files do not contain the plain text passwords -they should still be guarded as the pre-prepared hashes could be used to -gain access to any server with the same realm if the same user has used -the same password. -
-
-
-

To manipulate the files and add users we provide a utility add-user.sh -and add-user.bat to add the users and generate the hashes, to add a user -you should execute the script and follow the guided process. -add-user.png
-The full details of the add-user utility are described later but for the -purpose of accessing the management interface you need to enter the -following values: -

-
-
-
    -
  • -

    Type of user - This will be a 'Management User' to selection option a.

    -
  • -
  • -

    Realm - This MUST match the realm name used in the configuration so -unless you have changed the configuration to use a different realm name -leave this set as 'ManagementRealm'.

    -
  • -
  • -

    Username - The username of the user you are adding.

    -
  • -
  • -

    Password - The users password.

    -
  • -
-
-
-

Provided the validation passes you will then be asked to confirm you -want to add the user and the properties files will be updated.

-
-
-

For the final question, as this is a user that is going to be accessing -the admin console just answer 'n' - this option will be described later -for adding secondary host controllers that authenticate against a -Domain Controller but that is a later topic.

-
-
-

After a new user has been added the server should be restarted or the -load operation should be executed on the ManagementRealm or -ApplicationRealm resource in the elytron subsystem as appropriate.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=elytron/properties-realm=ManagementRealm:load
-{"outcome" => "success"}
-
-
-
-
-

3.4. Default Native Interface Security

-
-

The native interface shares the same security configuration as the http -interface, however we also support a local authentication mechanism -which means that the CLI can authenticate against the local WildFly -instance without prompting the user for a username and password. This -mechanism only works if the user running the CLI has read access to the -standalone/tmp/auth folder or domain/tmp/auth folder under the -respective WildFly installation - if the local mechanism fails then the -CLI will fallback to prompting for a username and password for a user -configured as in Default HTTP Interface Security.

-
-
-

Establishing a CLI connection to a remote server will require a username -and password by default.

-
-
-
-

3.5. Command Line Interface

-
-

The Command Line Interface (CLI) is a management tool for a managed -domain or standalone server. It allows a user to connect to the domain -controller or a standalone server and execute management operations -available through the de-typed management model.

-
-
-

Details on how to use the CLI can be found in the -Command Line Interface page.

-
-
-
-

3.6. Configuration Files

-
-

WildFly stores its configuration in centralized XML configuration files, -one per server for standalone servers and, for managed domains, one per -host with an additional domain wide policy controlled by the Domain Controller. -These files are meant to be human-readable and human editable.

-
-
- - - - - -
- - -The XML configuration files act as a central, authoritative source of -configuration. Any configuration changes made via the web interface or -the CLI are persisted back to the XML configuration files. If a domain -or standalone server is offline, the XML configuration files can be hand -edited as well, and any changes will be picked up when the domain or -standalone server is next started. However, users are encouraged to use -the web interface or the CLI in preference to making offline edits to -the configuration files. External changes made to the configuration -files while processes are running will not be detected, and may be -overwritten. -
-
-
-

3.6.1. Standalone Server Configuration File

-
-

The XML configuration for a standalone server can be found in the -standalone/configuration directory. The default configuration file is -standalone/configuration/standalone.xml.

-
-
-

The standalone/configuration directory includes a number of other -standard configuration files, e.g. standalone-full.xml, -standalone-ha.xml and standalone-full-ha.xml each of which is -similar to the default standalone.xml file but includes additional -subsystems not present in the default configuration. If you prefer to -use one of these files as your server configuration, you can specify it -with the [line-through]*c* or -server-config command line argument:

-
-
-
    -
  • -

    bin/standalone.sh -c=standalone-full.xml

    -
  • -
  • -

    bin/standalone.sh --server-config=standalone-ha.xml

    -
  • -
-
-
-
-

3.6.2. Managed Domain Configuration Files

-
-

In a managed domain, the XML files are found in the -domain/configuration directory. There are two types of configuration -files – one per host, and then a single domain-wide file managed by the -primary Host Controller, aka the Domain Controller. (For more on the types of -processes in a managed domain, see Operating -Modes.)

-
-
-
Host Specific Configuration – host.xml
-
-

When you start a managed domain process, a Host Controller instance is -launched, and it parses its own configuration file to determine its own -configuration, how it should integrate with the rest of the domain, any -host-specific values for settings in the domain wide configuration (e.g. -IP addresses) and what servers it should launch. This information is -contained in the host-specific configuration file, the default version -of which is domain/configuration/host.xml.

-
-
-

Each host will have its own variant host.xml, with settings -appropriate for its role in the domain. WildFly ships with three -standard variants:

-
- ---- - - - - - - - - - - - - - - - - -
host-primary.xmlA configuration that specifies the Host Controller -should become the primary Host Controller, aka the Domain Controller. -No servers will be started by this Host Controller, which is a recommended -setup for a production Domain Controller.

host-secondary.xml

A configuration that specifies the Host Controller -should not become the primary Host Controller and instead should register with a remote -primary Host Controller and be controlled by it. This configuration launches servers, -although a user will likely wish to modify how many servers are launched -and what server groups they belong to.

host.xml

The default host configuration, tailored for an easy out of -the box experience experimenting with a managed domain. This -configuration specifies the Host Controller should become the primary Host Controller, -aka the Domain Controller, but it also launches a couple of servers.

-
-

Which host-specific configuration should be used can be controlled via -the _ --host-config_ command line argument:

-
-
-
-
$ bin/domain.sh --host-config=host-primary.xml
-
-
-
-
-
Domain Wide Configuration – domain.xml
-
-

Once a Host Controller has processed its host-specific configuration, it -knows whether it is configured to act as the Domain Controller. -If it is, it must parse the domain wide configuration file, by default -located at domain/configuration/domain.xml. This file contains the -bulk of the settings that should be applied to the servers in the domain -when they are launched – among other things, what subsystems they should -run with what settings, what sockets should be used, and what -deployments should be deployed.

-
-
-

Which domain-wide configuration should be used can be controlled via the -_ --domain-config_ command line argument:

-
-
-
-
$ bin/domain.sh --domain-config=domain-production.xml
-
-
-
-

That argument is only relevant for hosts configured to act as the -Domain Controller.

-
-
-

A secondary Host Controller does not usually parse the domain wide -configuration file. A secondary Host Controller gets the domain wide configuration from the -remote Domain Controller when it registers with it. A secondary Host Controller also -will not persist changes to a domain.xml file if one is present on the -filesystem. For that reason it is recommended that no domain.xml be -kept on the filesystem of hosts that will only run as secondary Host Controllers.

-
-
-

A secondary Host Controller can be configured to keep a locally persisted copy of the domain -wide configuration and then use it on boot (in case the Domain Controller is not -available.) See --backup and --cached-dc under -Command line parameters.

-
-
-
-
-
-
-
-

4. Interfaces and ports

-
-
-

4.1. Interface declarations

-
-

WildFly uses named interface references throughout the configuration. A -network interface is declared by specifying a logical name and a -selection criteria for the physical interface:

-
-
-
-
[standalone@localhost:9990 /] :read-children-names(child-type=interface)
-{
-   "outcome" => "success",
-   "result" => [
-       "management",
-       "public"
-   ]
-}
-
-
-
-

This means the server in question declares two interfaces: One is -referred to as " management"; the other one " public". The " -management" interface is used for all components and services that are -required by the management layer (i.e. the HTTP Management Endpoint). -The " public" interface binding is used for any application related -network communication (i.e. Web, Messaging, etc). There is nothing -special about these names; interfaces can be declared with any name. -Other sections of the configuration can then reference those interfaces -by their logical name, rather than having to include the full details of -the interface (which, on servers in a management domain, may vary on -different machines).

-
-
-

The domain.xml, host.xml and standalone.xml configuration files -all include a section where interfaces can be declared. If we take a -look at the XML declaration it reveals the selection criteria. The -criteria is one of two types: either a single element indicating that -the interface should be bound to a wildcard address, or a set of one or -more characteristics that an interface or address must have in order to -be a valid match. The selection criteria in this example are specific IP -addresses for each interface:

-
-
-
-
<interfaces>
-  <interface name="management">
-   <inet-address value="127.0.0.1"/>
-  </interface>
-  <interface name="public">
-   <inet-address value="127.0.0.1"/>
-  </interface>
-</interfaces>
-
-
-
-

Some other examples:

-
-
-
-
<interface name="global">
-   <!-- Use the wildcard address -->
-   <any-address/>
-</interface>
- 
-<interface name="external">
-   <nic name="eth0"/>
-</interface>
- 
-<interface name="default">
-   <!-- Match any interface/address on the right subnet if it's
-        up, supports multicast and isn't point-to-point -->
-   <subnet-match value="192.168.0.0/16"/>
-   <up/>
-   <multicast/>
-   <not>
-      <point-to-point/>
-   </not>
-</interface>
-
-
-
- - - - - -
- - -An interface configuration element is used to provide a single InetAddress to parts -of the server that reference that interface. If the selection criteria specified for -the interface element results in more than one address meeting the criteria, then a -warning will be logged and one just one address will be selected and used. Preference -will be given to network interfaces that are up, are non-loopback and are not -point-to-point. -
-
-
-

4.1.1. The -b command line argument

-
-

WildFly supports using the -b command line argument to specify the -address to assign to interfaces. See -Controlling the Bind Address with -b for further details.

-
-
-
-
-

4.2. Socket Binding Groups

-
-

The socket configuration in WildFly works similarly to the interfaces -declarations. Sockets are declared using a logical name, by which they -will be referenced throughout the configuration. Socket declarations are -grouped under a certain name. This allows you to easily reference a -particular socket binding group when configuring server groups in a -managed domain. Socket binding groups reference an interface by its -logical name:

-
-
-
-
<socket-binding-group name="standard-sockets" default-interface="public">
-  <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/><socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/><socket-binding name="ajp" port="${jboss.ajp.port:8009}"/><socket-binding name="http" port="${jboss.http.port:8080}"/><socket-binding name="https" port="${jboss.https.port:8443}"/><socket-binding name="txn-recovery-environment" port="4712"/><socket-binding name="txn-status-manager" port="4713"/>
-</socket-binding-group>
-
-
-
-

A socket binding includes the following information:

-
-
-
    -
  • -

    name — logical name of the socket configuration that should be used -elsewhere in the configuration

    -
  • -
  • -

    port — base port to which a socket based on this configuration should -be bound. (Note that servers can be configured to override this base -value by applying an increment or decrement to all port values.)

    -
  • -
  • -

    interface (optional) — logical name (see "Interfaces declarations" -above) of the interface to which a socket based on this configuration -should be bound. If not defined, the value of the "default-interface" -attribute from the enclosing socket binding group will be used.

    -
  • -
  • -

    multicast-address (optional) — if the socket will be used for -multicast, the multicast address to use

    -
  • -
  • -

    multicast-port (optional) — if the socket will be used for multicast, -the multicast port to use

    -
  • -
  • -

    fixed-port (optional, defaults to false) — if true, declares that the -value of port should always be used for the socket and should not be -overridden by applying an increment or decrement

    -
  • -
-
-
-
-

4.3. IPv4 versus IPv6

-
-

WildFly supports the use of both IPv4 and IPv6 addresses. By default, -WildFly is configured for use in an IPv4 network and so if you are -running in an IPv4 network, no changes are required. If you need to run -in an IPv6 network, the changes required are minimal and involve -changing the JVM stack and address preferences, and adjusting any -interface IP address values specified in the configuration -(standalone.xml or domain.xml).

-
-
-

4.3.1. Stack and address preference

-
-

The system properties java.net.preferIPv4Stack and -java.net.preferIPv6Addresses are used to configure the JVM for use with -IPv4 or IPv6 addresses. With WildFly, in order to run using IPv4 -addresses, you need to specify java.net.preferIPv4Stack=true; in order -to run with IPv6 addresses, you need to specify -java.net.preferIPv4Stack=false (the JVM default) and -java.net.preferIPv6Addresses=true. The latter ensures that any hostname -to IP address conversions always return IPv6 address variants.

-
-
-

These system properties are conveniently set by the JAVA_OPTS -environment variable, defined in the standalone.conf (or domain.conf) -file. For example, to change the IP stack preference from its default of -IPv4 to IPv6, edit the standalone.conf (or domain.conf) file and change -its default IPv4 setting:

-
-
-
-
if [ "x$JAVA_OPTS" = "x" ]; then
-   JAVA_OPTS=" ... -Djava.net.preferIPv4Stack=true ..."
-...
-
-
-
-

to an IPv6 suitable setting:

-
-
-
-
if [ "x$JAVA_OPTS" = "x" ]; then
-   JAVA_OPTS=" ... -Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true ..."
-...
-
-
-
-
-

4.3.2. IP address literals

-
-

To change the IP address literals referenced in standalone.xml (or -domain.xml), first visit the interface declarations and ensure that -valid IPv6 addresses are being used as interface values. For example, to -change the default configuration in which the loopback interface is used -as the primary interface, change from the IPv4 loopback address:

-
-
-
-
<interfaces>
-  <interface name="management">
-    <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
-  </interface>
-  <interface name="public">
-    <inet-address value="${jboss.bind.address:127.0.0.1}"/>
-  </interface>
-</interfaces>
-
-
-
-

to the IPv6 loopback address:

-
-
-
-
<interfaces>
-  <interface name="management">
-    <inet-address value="${jboss.bind.address.management:[::1]}"/>
-  </interface>
-  <interface name="public">
-    <inet-address value="${jboss.bind.address:[::1]}"/>
-  </interface>
-</interfaces>
-
-
-
-

Note that when embedding IPv6 address literals in the substitution -expression, square brackets surrounding the IP address literal are used -to avoid ambiguity. This follows the convention for the use of IPv6 -literals in URLs.

-
-
-

Over and above making such changes for the interface definitions, you -should also check the rest of your configuration file and adjust IP -address literals from IPv4 to IPv6 as required.

-
-
-
-
-
-
-

5. Administrative security

-
-
-

5.1. add-user utility

-
-

For use with the default configuration we supply a utility add-user -which can be used to manage the properties files for the default realms -used to store the users and their roles.

-
-
-

The add-user utility can be used to manage both the users in the -ManagementRealm and the users in the ApplicationRealm, changes made -apply to the properties file used both for domain mode and standalone -mode.

-
-
- - - - - -
- - -After you have installed your application server and decided if you are -going to run in standalone mode or domain mode you can delete the parent -folder for the mode you are not using, the add-user utility will then -only be managing the properties file for the mode in use. -
-
-
-

The add-user utility is a command line utility however it can be run in -both interactive and non-interactive mode. Depending on your platform -the script to run the add-user utility is either add-user.sh or -add-user.bat which can be found in \{ jboss.home}/bin.

-
-
-

This guide now contains a couple of examples of this utility in use to -accomplish the most common tasks.

-
-
-

5.1.1. Adding a User

-
-

Adding users to the properties files is the primary purpose of this -utility. Usernames can only contain the following characters in any -number and in any order:

-
-
-
    -
  • -

    Alphanumeric characters (a-z, A-Z, 0-9)

    -
  • -
  • -

    Dashes (-), periods (.), commas (,), at (@)

    -
  • -
  • -

    Escaped backslash ( \\ )

    -
  • -
  • -

    Escaped equals (\=)

    -
  • -
-
-
-
A Management User
-
- - - - - -
- - -The default name of the realm for management users is ManagementRealm, -when the utility prompts for the realm name just accept the default -unless you have switched to a different realm. -
-
-
-
Interactive Mode
-
-

add-mgmt-user-interactive.png

-
-
-

Here we have added a new Management User called adminUser, as you can -see some of the questions offer default responses so you can just press -enter without repeating the default value.

-
-
-

For now just answer n or no to the final question, adding users to -be used by processes is described in more detail in the domain -management chapter.

-
-
-
-
Non-Interactive Mode
-
-

To add a user in non-interactive mode the command -./add-user.sh {username} {password} can be used.

-
-
-

add-mgmt-user-non-interactive.png

-
-
- - - - - -
- - -If you add users using this approach there is a risk that any other user -that can view the list of running process may see the arguments -including the password of the user being added, there is also the risk -that the username / password combination will be cached in the history -file of the shell you are currently using. -
-
-
-
-
-
An Application User
-
-

When adding application users in addition to adding the user with their -pre-hashed password it is also now possible to define the roles of the -user.

-
-
-
Interactive Mode
-
-

add-app-user-interactive.png

-
-
-

Here a new user called appUser has been added, in this case a comma -separated list of roles has also been specified.

-
-
-

As with adding a management user just answer n or no to the final -question until you know you are adding a user that will be establishing -a connection from one server to another.

-
-
-
-
Non-Interactive Mode
-
-

To add an application user non-interactively use the command -./add-user.sh -a {username} {password}.

-
-
-

add-app-user-non-interactive.png

-
-
- - - - - -
- - -Non-interactive mode does not support defining a list of users, to -associate a user with a set of roles you will need to manually edit the -application-roles.properties file by hand. -
-
-
-
-
-
-

5.1.2. Updating a User

-
-

Within the add-user utility it is also possible to update existing -users, in interactive mode you will be prompted to confirm if this is -your intention.

-
-
-
A Management User
- -
-
Non-Interactive Mode
-
-

In non-interactive mode if a user already exists the update is automatic -with no confirmation prompt.

-
-
-
-
-
An Application User
-
-
Interactive Mode
-
-

update-app-user-interactive.png

-
-
- - - - - -
- - -On updating a user with roles you will need to re-enter the list of -roles assigned to the user. -
-
-
-
-
Non-Interactive Mode
-
-

In non-interactive mode if a user already exists the update is automatic -with no confirmation prompt.

-
-
-
-
-
-

5.1.3. Community Contributions

-
-

There are still a few features to add to the add-user utility such as -removing users or adding application users with roles in non-interactive -mode, if you are interested in contributing to WildFly development the -add-user utility is a good place to start as it is a stand alone -utility, however it is a part of the AS build so you can become familiar -with the AS development processes without needing to delve straight into -the internals of the application server.

-
-
-
-
-

5.2. Authorizing management actions with Role Based Access Control

-
-

WildFly introduces a Role Based Access Control scheme that allows -different administrative users to have different sets of permissions to -read and update parts of the management tree. This replaces the simple -permission scheme used in JBoss AS 7, where anyone who could -successfully authenticate to the management security realm would have -all permissions.

-
-
-

5.2.1. Access Control Providers

-
-

WildFly ships with two access control "providers", the "simple" -provider, and the "rbac" provider. The "simple" provider is the default, -and provides a permission scheme equivalent to the JBoss AS 7 behavior -where any authenticated administrator has all permissions. The "rbac" -provider gives the finer grained permission scheme that is the focus of -this section.

-
-
-

The access control configuration is included in the management section -of a standalone server’s standalone.xml, or in a new "management" -section in a managed domain’s domain.xml. The access control policy is -centrally configured in a managed domain.

-
-
-
-
<management>
-    . . .
-    <access-control provider="simple">
-        <role-mapping>
-            <role name="SuperUser">
-                <include>
-                    <user name="$local"/>
-                </include>
-            </role>
-        </role-mapping>
-    </access-control>
-</management>
-
-
-
-

As you can see, the provider is set to "simple" by default. With the -"simple" provider, the nested "role-mapping" section is not actually -relevant. It’s there to help ensure that if the provider attribute is -switched to "rbac" there will be at least one user mapped to a role that -can continue to administer the system. This default mapping assigns the -"$local" user name to the RBAC role that provides all permissions, the -"SuperUser" role. The "$local" user name is the name an administrator -will be assigned if he or she uses the CLI on the same system as the -WildFly instance and the "local" authentication scheme is enabled.

-
-
-
-

5.2.2. RBAC provider overview

-
-

The access control scheme implemented by the "rbac" provider is based on -seven standard roles. A role is a named set of permissions to perform -one of the actions: addressing (i.e. looking up) a management resource, -reading it, or modifying it. The different roles have constraints -applied to their permissions that are used to determine whether the -permission is granted.

-
-
-
RBAC roles
-
-

The seven standard roles are divided into two broad categories, based on -whether the role can deal with items that are considered to be "security -sensitive". Resources, attributes and operations that may affect -administrative security (e.g. security realm resources and attributes -that contain passwords) are "security sensitive".

-
-
-

Four roles are not given permissions for "security sensitive" items:

-
-
-
    -
  • -

    Monitor – a read-only role. Cannot modify any resource.

    -
  • -
  • -

    Operator – Monitor permissions, plus can modify runtime state, but -cannot modify anything that ends up in the persistent configuration. -Could, for example, restart a server.

    -
  • -
  • -

    Maintainer – Operator permissions, plus can modify the persistent -configuration.

    -
  • -
  • -

    Deployer – like a Maintainer, but with permission to modify persistent -configuration constrained to resources that are considered to be -"application resources". A deployment is an application resource. The -messaging server is not. Items like datasources and Jakarta Messaging destinations are -not considered to be application resources by default, but this is -configurable.

    -
  • -
-
-
-

Three roles are granted permissions for security sensitive items:

-
-
-
    -
  • -

    SuperUser – has all permissions. Equivalent to a JBoss AS 7 -administrator.

    -
  • -
  • -

    Administrator – has all permissions except cannot read or write -resources related to the administrative audit logging system.

    -
  • -
  • -

    Auditor – can read anything. Can only modify the resources related to -the administrative audit logging system.

    -
  • -
-
-
-

The Auditor and Administrator roles are meant for organizations that -want a separation of responsibilities between those who audit normal -administrative actions and those who perform them, with those who -perform most actions (Administrator role) not being able to read or -alter the auditing configuration.

-
-
-
-
Access control constraints
-
-

The following factors are used to determine whether a given role is -granted a permission:

-
-
-
    -
  • -

    What the requested action is (address, read, write)

    -
  • -
  • -

    Whether the resource, attribute or operation affects the persistent -configuration

    -
  • -
  • -

    Whether the resource, attribute or operation is related to the -administrative audit logging function

    -
  • -
  • -

    Whether the resource, attribute or operation is configured as security -sensitive

    -
  • -
  • -

    Whether an attribute or operation parameter value has a security vault -expression

    -
  • -
  • -

    Whether a resource is considered to be associated with applications, -as opposed to being part of a general container configuration

    -
  • -
-
-
-

The first three of these factors are non-configurable; the latter three -allow some customization. See " -Configuring constraints" -for details.

-
-
-
-
Addressing a resource
-
-

As mentioned above, permissions are granted to perform one of three -actions, addressing a resource, reading it, and modifying. The latter -two actions are fairly self-explanatory. But what is meant by -"addressing" a resource?

-
-
-

"Addressing" a resource refers to taking an action that allows the user -to determine whether a resource at a given address actually exists. For -example, the "read-children-names" operation lets a user determine valid -addresses. Trying to read a resource and getting a "Permission denied" -error also gives the user a clue that there actually is a resource at -the requested address.

-
-
-

Some resources may include sensitive information as part of their -address. For example, security realm resources include the realm name as -the last element in the address. That realm name is potentially security -sensitive; for example it is part of the data used when creating a hash -of a user password. Because some addresses may contain security -sensitive data, a user needs permission to even "address" a resource. If -a user attempts to address a resource and does not have permission, they -will not receive a "permission denied" type error. Rather, the system -will respond as if the resource does not even exist, e.g. excluding the -resource from the result of the "read-children-names" operation or -responding with a "No such resource" error instead of "Permission -denied" if the user is attempting to read or write the resource.

-
-
-

Another term for "addressing" a resource is "looking up" the resource.

-
-
-
-
-

5.2.3. Switching to the "rbac" provider

-
-

Use the CLI to switch the access-control provider.

-
-
- - - - - -
- - -Before changing the provider to "rbac", be sure your configuration has a -user who will be mapped to one of the RBAC roles, preferably with at -least one in the Administrator or SuperUser role. Otherwise your -installation will not be manageable except by shutting it down and -editing the xml configuration. If you have started with one of the -standard xml configurations shipped with WildFly, the "$local" user will -be mapped to the "SuperUser" role and the "local" authentication scheme will be -enabled. This will allow a user running the CLI on the same system as the -WildFly process to have full administrative permissions. Remote CLI users and -web-based admin console users will have no permissions. -
-
-
-

We recommend mapping at least one -user besides "$local" before switching the provider to "rbac". You can -do all of the configuration associated with the "rbac" provider even -when the provider is set to "simple"

-
-
-

The management resources related to access control are located in the -core-service=management/access=authorization portion of the management -resource tree. Update the provider attribute to change between the -"simple" and "rbac" providers. Any update requires a reload or restart -to take effect.

-
-
-
-
[standalone@localhost:9990 /] cd core-service=management/access=authorization
-[standalone@localhost:9990 access=authorization] :write-attribute(name=provider,value=rbac)
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-[standalone@localhost:9990 access=authorization] reload
-
-
-
-

In a managed domain, the access control configuration is part of the -domain wide configuration, so the resource address is the same as above, -but the CLI is connected to the Domain Controller:

-
-
-
-
[domain@localhost:9990 /] cd core-service=management/access=authorization
-[domain@localhost:9990 access=authorization] :write-attribute(name=provider,value=rbac)
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    },
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {
-            "outcome" => "success",
-            "response-headers" => {
-                "operation-requires-reload" => true,
-                "process-state" => "reload-required"
-            }
-        }},
-        "server-two" => {"response" => {
-            "outcome" => "success",
-            "response-headers" => {
-                "operation-requires-reload" => true,
-                "process-state" => "reload-required"
-            }
-        }}
-    }}}}
-}
-[domain@localhost:9990 access=authorization] reload --host=primary
-
-
-
-

As with a standalone server, a reload or restart is required for the -change to take effect. In this case, all hosts and servers in the domain -will need to be reloaded or restarted, starting with the Domain -Controller, so be sure to plan well before making this change.

-
-
-
-

5.2.4. Mapping users and groups to roles

-
-

Once the "rbac" access control provider is enabled, only users who are -mapped to one of the available roles will have any administrative -permissions at all. So, to make RBAC useful, a mapping between -individual users or groups of users and the available roles must be -performed.

-
-
-
Mapping individual users
-
-

The easiest way to map individual users to roles is to use the web-based -admin console.

-
-
-

Navigate to the "Administration" tab and the "Users" subtab. From there -individual user mappings can be added, removed, or edited.

-
-
-

usermapping.png

-
-
-

The CLI can also be used to map individuals users to roles.

-
-
-

First, if one does not exist, create the parent resource for all -mappings for a role. Here we create the resource for the Administrator -role.

-
-
-
-
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Administrator:add
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
-

Once this is done, map a user to the role:

-
-
-
-
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Administrator/include=user-jsmith:add(name=jsmith,type=USER)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
-

Now if user jsmith authenticates to any security domain associated with -the management interface they are using, he will be mapped to the -Administrator role.

-
-
-
-
User groups
-
-

A "group" is an arbitrary collection of users that may exist in the end -user environment. They can be named whatever the end user organization -wants and can contain whatever users the end user organization wants. -Some of the authentication store types supported by WildFly security -realms include the ability to access information about what groups a -user is a member of and associate this information with the Subject -produced when the user is authenticated. This is currently supported for -the following authentication store types:

-
-
-
    -
  • -

    properties file (via the <realm_name>-groups.properties file)

    -
  • -
  • -

    LDAP (via directory-server-specific configuration)

    -
  • -
-
-
-

Groups are convenient when it comes to associating a user with a role, -since entire groups can be associated with a role in a single mapping.

-
-
-
-
Mapping groups to roles
-
-

The easiest way to map groups to roles is to use the web-based admin -console.

-
-
-

Navigate to the "Administration" tab and the "Groups" subtab. From there -group mappings can be added, removed, or edited.

-
-
-

groupmapping.png

-
-
-

The CLI can also be used to map groups to roles. The only difference to -individual user mapping is the value of the type attribute should be -GROUP instead of USER.

-
-
-
-
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Administrator/include=group-SeniorAdmins:add(name=SeniorAdmins,type=GROUP)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
-
-
Including all authenticated users in a role
-
-

It’s possible to specify that all authenticated users should be mapped -to a particular role. This could be used, for example, to ensure that -anyone who can authenticate can at least have Monitor privileges.

-
-
- - - - - -
- - -A user who can authenticate to the management security realm but who -does not map to a role will not be able to perform any administrative -functions, not even reads. -
-
-
-

In the web based admin console, navigate to the "Administration" tab, -"Roles" subtab, highlight the relevant role, click the "Edit" button and -click on the "Include All" checkbox:

-
-
-

includeall.png

-
-
-

The same change can be made using the CLI:

-
-
-
-
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Monitor:write-attribute(name=include-all,value=true)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
-
-
Excluding users and groups
-
-

It is also possible to explicitly exclude certain users and groups from -a role. Exclusions take precedence over inclusions, including cases -where the include-all attribute is set to true for a role.

-
-
-

In the admin console, excludes are done in the same screens as includes. -In the add dialog, simply change the "Type" pulldown to "Exclude".

-
-
-

excludemapping.png

-
-
-

In the CLI, excludes are identical to includes, except the resource -address has exclude instead of include as the key for the last -address element:

-
-
-
-
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Monitor/exclude=group-Temps:add(name=Temps,type=GROUP)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
-
-
Users who map to multiple roles
-
-

It is possible that a given user will be mapped to more than one role. -When this occurs, by default the user will be granted the union of the -permissions of the two roles. This behavior can be changed on a global -basis to instead respond to the user request with an error if this -situation is detected:

-
-
-
-
[standalone@localhost:9990 /] cd core-service=management/access=authorization
-[standalone@localhost:9990 access=authorization] :write-attribute(name=permission-combination-policy,value=rejecting)
-{"outcome" => "success"}
-
-
-
-

Note that no reload is required; the change takes immediate effect.

-
-
-

To restore the default behavior, set the value to "permissive":

-
-
-
-
[standalone@localhost:9990 /] cd core-service=management/access=authorization
-[standalone@localhost:9990 access=authorization] :write-attribute(name=permission-combination-policy,value=permissive)
-{"outcome" => "success"}
-
-
-
-
-
-

5.2.5. Adding custom roles in a managed domain

-
-

A managed domain may involve a variety of servers running different -configurations and hosting different applications. In such an -environment, it is likely that there will be different teams of -administrators responsible for different parts of the domain. To allow -organizations to grant permissions to only parts of a domain, WildFly’s -RBAC scheme allows for the creation of custom "scoped roles". Scoped -roles are based on the seven standard roles, but with permissions -limited to a portion of the domain – either to a set of server groups or -to a set of hosts.

-
-
-
Server group scoped roles
-
-

The privileges for a server-group scoped role are constrained to -resources associated with one or more server groups. Server groups are -often associated with a particular application or set of applications; -organizations that have separate teams responsible for different -applications may find server-group scoped roles useful.

-
-
-

A server-group scoped role is equivalent to the default role upon which -it is based, but with privileges constrained to target resources in the -resource trees rooted in the server group resources. The server-group -scoped role can be configured to include privileges for the following -resources trees logically related to the server group:

-
-
-
    -
  • -

    Profile

    -
  • -
  • -

    Socket Binding Group

    -
  • -
  • -

    Deployment

    -
  • -
  • -

    Deployment override

    -
  • -
  • -

    Server group

    -
  • -
  • -

    Server config

    -
  • -
  • -

    Server

    -
  • -
-
-
-

Resources in the profile, socket binding group, server config and server -portions of the tree that are not logically related to a server group -associated with the server-group scoped role will not be addressable by -a user in that role. So, in a domain with server groups "a" and "b", a -user in a server-group scoped role that grants access to "a" will not be -able to address /server-group=b. The system will treat that resource as -non-existent for that user.

-
-
-

In addition to these privileges, users in a server-group scoped role -will have non-sensitive read privileges (equivalent to the Monitor role) -for resources other than those listed above.

-
-
-

The easiest way to create a server-group scoped role is to -use the admin console. -But you can also use the CLI to create a server-group scoped role.

-
-
-
-
[domain@localhost:9990 /] /core-service=management/access=authorization/server-group-scoped-role=MainGroupAdmins:add(base-role=Administrator,server-groups=[main-server-group])
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
-

Once the role is created, users or groups can be mapped to it the same -as with the seven standard roles.

-
-
-
-
Host scoped roles
-
-

The privileges for a host-scoped role are constrained to resources -associated with one or more hosts. A user with a host-scoped role cannot -modify the domain wide configuration. Organizations may use host-scoped -roles to give administrators relatively broad administrative rights for -a host without granting such rights across the managed domain.

-
-
-

A host-scoped role is equivalent to the default role upon which it is -based, but with privileges constrained to target resources in the -resource trees rooted in the host resources for one or more specified -hosts.

-
-
-

In addition to these privileges, users in a host-scoped role will have -non-sensitive read privileges (equivalent to the Monitor role) for -domain wide resources (i.e. those not in the /host=* section of the -tree.)

-
-
-

Resources in the /host=* portion of the tree that are unrelated to the -hosts specified for the Host Scoped Role will not be visible to users in -that host-scoped role. So, in a domain with hosts "a" and "b", a user in -a host-scoped role that grants access to "a" will not be able to address -/host=b. The system will treat that resource as non-existent for that -user.

-
-
-

The easiest way to create a host-scoped role is to -use the admin console. -But you can also use the CLI to create a host scoped role.

-
-
-
-
[domain@localhost:9990 /] /core-service=management/access=authorization/host-scoped-role=DCOperators:add(base-role=Operator,hosts=[primary]}
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
-

Once the role is created, users or groups can be mapped to it the same -as with the seven standard roles.

-
-
-
-
Using the admin console to create scoped roles
-
-

Both server-group and host scoped roles can be added, removed or edited -via the admin console. Select "Scoped Roles" from the "Administration" -tab, "Roles" subtab:

-
-
-

scopedroles.png

-
-
-

When adding a new scoped role, use the dialogue’s "Type" pull down to -choose between a host scoped role and a server-group scoped role. Then -place the names of the relevant hosts or server groups in the "Scope" -text are.

-
-
-

addscopedrole.png

-
-
-
-
-

5.2.6. Configuring constraints

-
-

The following factors are used to determine whether a given role is -granted a permission:

-
-
-
    -
  • -

    What the requested action is (address, read, write)

    -
  • -
  • -

    Whether the resource, attribute or operation affects the persistent -configuration

    -
  • -
  • -

    Whether the resource, attribute or operation is related to the -administrative audit logging function

    -
  • -
  • -

    Whether the resource, attribute or operation is configured as security -sensitive

    -
  • -
  • -

    Whether an attribute or operation parameter value has a security vault -expression or an encrypted expression.

    -
  • -
  • -

    Whether a resource is considered to be associated with applications, -as opposed to being part of a general container configuration

    -
  • -
-
-
-

The first three of these factors are non-configurable; the latter three -allow some customization.

-
-
-
Configuring sensitivity
-
-

"Sensitivity" constraints are about restricting access to -security-sensitive data. Different organizations may have different -opinions about what is security sensitive, so WildFly provides -configuration options to allow users to tailor these constraints.

-
-
-
Sensitive resources, attributes and operations
-
-

The developers of the WildFly core and of any subsystem may annotate -resources, attributes or operations with a "sensitivity classification". -Classifications are either provided by the core and may be applicable -anywhere in the management model, or they are scoped to a particular -subsystem. For each classification, there will be a setting declaring -whether by default the addressing, read and write actions are considered -to be sensitive. If an action is sensitive, only users in the roles able -to deal with sensitive data (Administrator, Auditor, SuperUser) will -have permissions.

-
-
-

Using the CLI, administrators can see the settings for a classification. -For example, there is a core classification called "socket-config" that -is applied to elements throughout the model that relate to configuring -sockets:

-
-
-
-
[domain@localhost:9990 /] cd core-service=management/access=authorization/constraint=sensitivity-classification/type=core/classification=socket-config
-[domain@localhost:9990 classification=socket-config] ls -l
-ATTRIBUTE                       VALUE     TYPE
-configured-requires-addressable undefined BOOLEAN
-configured-requires-read        undefined BOOLEAN
-configured-requires-write       undefined BOOLEAN
-default-requires-addressable    false     BOOLEAN
-default-requires-read           false     BOOLEAN
-default-requires-write          true      BOOLEAN
- 
-CHILD      MIN-OCCURS MAX-OCCURS
-applies-to n/a        n/a
-
-
-
-

The various default-requires-…​ attributes indicate whether a user -must be in a role that allows security sensitive actions in order to -perform the action. In the socket-config example above, -default-requires-write is true, while the others are false. So, by -default modifying a setting involving socket configuration is considered -sensitive, while addressing those resources or doing reads is not -sensitive.

-
-
-

The default-requires-…​ attributes are read-only. The -configured-requires-…​ attributes however can be modified to override -the default settings with ones appropriate for your organization. For -example, if your organization doesn’t regard modifying socket -configuration settings to be security sensitive, you can change that -setting:

-
-
-
-
[domain@localhost:9990 classification=socket-config] :write-attribute(name=configured-requires-write,value=false)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
-

Administrators can also read the management model to see to which -resources, attributes and operations a particular sensitivity -classification applies:

-
-
-
-
[domain@localhost:9990 classification=socket-config] :read-children-resources(child-type=applies-to)
-{
-    "outcome" => "success",
-    "result" => {
-        "/host=primary" => {
-            "address" => "/host=primary",
-            "attributes" => [],
-            "entire-resource" => false,
-            "operations" => ["resolve-internet-address"]
-        },
-        "/host=primary/core-service=host-environment" => {
-            "address" => "/host=primary/core-service=host-environment",
-            "attributes" => [
-                "host-controller-port",
-                "host-controller-address",
-                "process-controller-port",
-                "process-controller-address"
-            ],
-            "entire-resource" => false,
-            "operations" => []
-        },
-        "/host=primary/core-service=management/management-interface=http-interface" => {
-            "address" => "/host=primary/core-service=management/management-interface=http-interface",
-            "attributes" => [
-                "port",
-                "secure-interface",
-                "secure-port",
-                "interface"
-            ],
-            "entire-resource" => false,
-            "operations" => []
-        },
-        "/host=primary/core-service=management/management-interface=native-interface" => {
-            "address" => "/host=primary/core-service=management/management-interface=native-interface",
-            "attributes" => [
-                "port",
-                "interface"
-            ],
-            "entire-resource" => false,
-            "operations" => []
-        },
-        "/host=primary/interface=*" => {
-            "address" => "/host=primary/interface=*",
-            "attributes" => [],
-            "entire-resource" => true,
-            "operations" => ["resolve-internet-address"]
-        },
-        "/host=primary/server-config=*/interface=*" => {
-            "address" => "/host=primary/server-config=*/interface=*",
-            "attributes" => [],
-            "entire-resource" => true,
-            "operations" => []
-        },
-        "/interface=*" => {
-            "address" => "/interface=*",
-            "attributes" => [],
-            "entire-resource" => true,
-            "operations" => []
-        },
-        "/profile=*/subsystem=messaging/hornetq-server=*/broadcast-group=*" => {
-            "address" => "/profile=*/subsystem=messaging/hornetq-server=*/broadcast-group=*",
-            "attributes" => [
-                "group-address",
-                "group-port",
-                "local-bind-address",
-                "local-bind-port"
-            ],
-            "entire-resource" => false,
-            "operations" => []
-        },
-        "/profile=*/subsystem=messaging/hornetq-server=*/discovery-group=*" => {
-            "address" => "/profile=*/subsystem=messaging/hornetq-server=*/discovery-group=*",
-            "attributes" => [
-                "group-address",
-                "group-port",
-                "local-bind-address"
-            ],
-            "entire-resource" => false,
-            "operations" => []
-        },
-        "/profile=*/subsystem=transactions" => {
-            "address" => "/profile=*/subsystem=transactions",
-            "attributes" => ["process-id-socket-max-ports"],
-            "entire-resource" => false,
-            "operations" => []
-        },
-        "/server-group=*" => {
-            "address" => "/server-group=*",
-            "attributes" => ["socket-binding-port-offset"],
-            "entire-resource" => false,
-            "operations" => []
-        },
-        "/socket-binding-group=*" => {
-            "address" => "/socket-binding-group=*",
-            "attributes" => [],
-            "entire-resource" => true,
-            "operations" => []
-        }
-    }
-}
-
-
-
-

There will be a separate child for each address to which the -classification applies. The entire-resource attribute will be true if -the classification applies to the entire resource. Otherwise, the -attributes and operations attributes will include the names of -attributes or operations to which the classification applies.

-
-
-Classifications with broad use -
-

Several of the core sensitivity classifications are commonly used across -the management model and deserve special mention.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription

credential

An attribute whose value is some sort of credential, e.g. a -password or a username. By default sensitive for both reads and writes

security-domain-ref

An attribute whose value is the name of a security -domain. By default sensitive for both reads and writes

security-realm-ref

An attribute whose value is the name of a security -realm. By default sensitive for both reads and writes

socket-binding-ref

An attribute whose value is the name of a socket -binding. By default not sensitive for any action

socket-config

A resource, attribute or operation that somehow relates -to configuring a socket. By default sensitive for writes

-
-
-
-
Values with security vault expressions
-
-

By default any attribute or operation parameter whose value includes a -security vault expression will be treated as sensitive, even if no -sensitivity classification applies or the classification does not treat -the action as sensitive.

-
-
-

This setting can be globally changed via the CLI. There is a resource -for this configuration:

-
-
-
-
[domain@localhost:9990 /] cd core-service=management/access=authorization/constraint=vault-expression
-[domain@localhost:9990 constraint=vault-expression] ls -l
-ATTRIBUTE                 VALUE     TYPE
-configured-requires-read  undefined BOOLEAN
-configured-requires-write undefined BOOLEAN
-default-requires-read     true      BOOLEAN
-default-requires-write    true      BOOLEAN
-
-
-
-

The various default-requires-…​ attributes indicate whether a user -must be in a role that allows security sensitive actions in order to -perform the action. So, by default both reading and writing attributes -whose values include vault expressions requires a user to be in one of -the roles with sensitive data permissions.

-
-
-

The default-requires-…​ attributes are read-only. The -configured-requires-…​ attributes however can be modified to override -the default settings with settings appropriate for your organization. -For example, if your organization doesn’t regard reading vault -expressions to be security sensitive, you can change that setting:

-
-
-
-
[domain@localhost:9990 constraint=vault-expression] :write-attribute(name=configured-requires-read,value=false)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
- - - - - -
- - -This vault-expression constraint overlaps somewhat with the -core -"credential" sensitivity classification in that the most typical uses -of a vault expression are in attributes that contain a user name or -password, and those will typically be annotated with the "credential" -sensitivity classification. So, if you change the settings for the -"credential" sensitivity classification you may also need to make a -corresponding change to the vault-expression constraint settings, or -your change will not have full effect. -
-
-
-

Be aware though, that vault expressions can be used in any attribute -that supports expressions, not just in credential-type attributes. So it -is important to be familiar with where and how your organization uses -vault expressions before changing these settings.

-
-
-
-
-
Configuring "Deployer" role access
-
-

The standard Deployer role -has its write permissions limited to resources that are considered to be -"application resources"; i.e. conceptually part of an application and -not part of the general server configuration. By default, only -deployment resources are considered to be application resources. -However, different organizations may have different opinions on what -qualifies as an application resource, so for resource types that -subsystems authors consider potentially to be application resources, -WildFly provides a configuration option to declare them as such. Such -resources will be annotated with an "application classification".

-
-
-

For example, the mail subsystem provides such a classification:

-
-
-
-
[domain@localhost:9990 /] cd /core-service=management/access=authorization/constraint=application-classification/type=mail/classification=mail-session
-[domain@localhost:9990 classification=mail-session] ls -l
-ATTRIBUTE              VALUE     TYPE
-configured-application undefined BOOLEAN
-default-application    false     BOOLEAN
- 
-CHILD      MIN-OCCURS MAX-OCCURS
-applies-to n/a        n/a
-
-
-
-

Use read-resource or read-children-resources to see what resources -have this classification applied:

-
-
-
-
[domain@localhost:9990 classification=mail-session] :read-children-resources(child-type=applies-to)
-{
-    "outcome" => "success",
-    "result" => {"/profile=*/subsystem=mail/mail-session=*" => {
-        "address" => "/profile=*/subsystem=mail/mail-session=*",
-        "attributes" => [],
-        "entire-resource" => true,
-        "operations" => []
-    }}
-}
-
-
-
-

This indicates that this classification, intuitively enough, only -applies to mail subsystem mail-session resources.

-
-
-

To make resources with this classification writeable by users in the -Deployer role, set the configured-application attribute to true.

-
-
-
-
[domain@localhost:9990 classification=mail-session] :write-attribute(name=configured-application,value=true)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
-        "server-one" => {"response" => {"outcome" => "success"}},
-        "server-two" => {"response" => {"outcome" => "success"}}
-    }}}}
-}
-
-
-
-
Application classifications shipped with WildFly
-
-

The subsystems shipped with the full WildFly distribution include the -following application classifications:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SubsystemClassification

datasources

data-source

datasources

jdbc-driver

datasources

xa-data-source

logging

logger

logging

logging-profile

mail

mail-session

messaging

jms-queue

messaging

jms-topic

messaging

queue

messaging

security-setting

naming

binding

resource-adapters

resource-adapter

security

security-domain

-
-

In each case the classification applies to the resources you would -expect, given its name.

-
-
-
-
-
-

5.2.7. RBAC effect on administrator user experience

-
-

The RBAC scheme will result in reduced permissions for administrators -who do not map to the SuperUser role, so this will of course have some -impact on their experience when using administrative tools like the -admin console and the CLI.

-
-
-
Admin console
-
-

The admin console takes great pains to provide a good user experience -even when the user has reduced permissions. Resources the user is not -permitted to see will simply not be shown, or if appropriate will be -replaced in the UI with an indication that the user is not authorized. -Interaction units like "Add" and "Remove" buttons and "Edit" links will -be suppressed if the user has no write permissions.

-
-
-
-
CLI
-
-

The CLI is a much more unconstrained tool than the admin console is, -allowing users to try to execute whatever operations they wish, so it’s -more likely that users who attempt to do things for which they lack -necessary permissions will receive failure messages. For example, a user -in the Monitor role cannot read passwords:

-
-
-
-
[domain@localhost:9990 /] /profile=default/subsystem=datasources/data-source=ExampleDS:read-attribute(name=password)
-{
-    "outcome" => "failed",
-    "result" => undefined,
-    "failure-description" => "WFLYCTL0313: Unauthorized to execute operation 'read-attribute' for resource '[
-    (\"profile\" => \"default\"),
-    (\"subsystem\" => \"datasources\"),
-    (\"data-source\" => \"ExampleDS\")
-]' -- \"WFLYCTL0332: Permission denied\"",
-    "rolled-back" => true
-}
-
-
-
-

If the user isn’t even allowed to -address the resource then the -response would be as if the resource doesn’t exist, even though it -actually does:

-
-
-
-
[domain@localhost:9990 /] /profile=default/subsystem=elytron/security-domain=ManagementDomain:read-resource
-{
-    "outcome" => "failed",
-    "failure-description" => "WFLYCTL0216: Management resource '[
-    (\"profile\" => \"default\"),
-    (\"subsystem\" => \"elytron\"),
-    (\"security-domain\" => \"ManagementDomain\")
-]' not found",
-    "rolled-back" => true
-}
-
-
-
-

This prevents unauthorized users fishing for sensitive data in resource -addresses by checking for "Permission denied" type failures.

-
-
-

Users who use the read-resource operation may ask for data, some of -which they are allowed to see and some of which they are not. If this -happens, the request will not fail, but inaccessible data will be elided -and a response header will be included advising on what was not -included. Here we show the effect of a Monitor trying to recursively -read the elytron subsystem configuration:

-
-
-
-
[domain@localhost:9990 /] /profile=default/subsystem=elytron:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "security-properties" => undefined,
-        "security-domain" => undefined,
-        "vault" => undefined
-    },
-    "response-headers" => {"access-control" => [{
-        "absolute-address" => [
-            ("profile" => "default"),
-            ("subsystem" => "elytron")
-        ],
-        "relative-address" => [],
-        "filtered-attributes" => ["security-properties"],
-        "filtered-children-types" => ["security-domain"]
-    }]}
-}
-
-
-
-

The response-headers section includes access control data in a list -with one element per relevant resource. (In this case there’s just one.) -The absolute and relative address of the resource is shown, along with -the fact that the value of the deep-copy-subject-mode attribute has -been filtered (i.e. undefined is shown as the value, which may not be -the real value) as well as the fact that child resources of type -security-domain have been filtered.

-
-
-
-
Description of access control constraints in the management model
-
-

metadata

-
-
-

The management model descriptive metadata returned from operations like -read-resource-description and read-operation-description can be -configured to include information describing the access control -constraints relevant to the resource, This is done by using the -access-control parameter. The output will be tailored to the caller’s -permissions. For example, a user who maps to the Monitor role could ask -for information about a resource in the mail subsystem:

-
-
-
-
[domain@localhost:9990 /] cd /profile=default/subsystem=mail/mail-session=default/server=smtp
-[domain@localhost:9990 server=smtp] :read-resource-description(access-control=trim-descriptions)
-{
-    "outcome" => "success",
-    "result" => {
-        "description" => undefined,
-        "access-constraints" => {"application" => {"mail-session" => {"type" => "mail"}}},
-        "attributes" => undefined,
-        "operations" => undefined,
-        "children" => {},
-        "access-control" => {
-            "default" => {
-                "read" => true,
-                "write" => false,
-                "attributes" => {
-                    "outbound-socket-binding-ref" => {
-                        "read" => true,
-                        "write" => false
-                    },
-                    "username" => {
-                        "read" => false,
-                        "write" => false
-                    },
-                    "tls" => {
-                        "read" => true,
-                        "write" => false
-                    },
-                    "ssl" => {
-                        "read" => true,
-                        "write" => false
-                    },
-                    "password" => {
-                        "read" => false,
-                        "write" => false
-                    }
-                }
-            },
-            "exceptions" => {}
-        }
-    }
-}
-
-
-
-

Because trim-descriptions was used as the value for the -access-control parameter, the typical "description", "attributes", -"operations" and "children" data is largely suppressed. (For more on -this, see below.) The -access-constraints field indicates that this resource is annotated -with an application constraint. The access-control field includes information about the -permissions the current caller has for this resource. The default -section shows the default settings for resources of this type. The -read and write fields directly under default show that the caller -can, in general, read this resource but cannot write it. The -attributes section shows the individual attribute settings. Note that -Monitor cannot read the username and password attributes.

-
-
-

There are three valid values for the access-control parameter to -read-resource-description and read-operation-description:

-
-
-
    -
  • -

    none – do not include access control information in the response. -This is the default behavior if no parameter is included.

    -
  • -
  • -

    trim-descriptions – remove the normal description details, as shown -in the example above

    -
  • -
  • -

    combined-descriptions – include both the normal output and the -access control data

    -
  • -
-
-
-
-
-

5.2.8. Learning about your own role mappings

-
-

Users can learn in which roles they are operating. In the admin console, -click on your name in the top right corner; the roles you are in will be -shown.

-
-
-

callersroles.png

-
-
-

CLI users should use the whoami operation with the verbose attribute -set:

-
-
-
-
[domain@localhost:9990 /] :whoami(verbose=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "identity" => {
-            "username" => "aadams",
-            "realm" => "ManagementRealm"
-        },
-        "mapped-roles" => [
-            "Maintainer"
-        ]
-    }
-}
-
-
-
-
-

5.2.9. "Run-as" capability for SuperUsers

-
-

If a user maps to the SuperUser role, WildFly also supports letting that -user request that they instead map to one or more other roles. This can -be useful when doing demos, or when the SuperUser is changing the RBAC -configuration and wants to see what effect the changes have from the -perspective of a user in another role. This capability is only available -to the SuperUser role, so it can only be used to narrow a user’s -permissions, not to potentially increase them.

-
-
-
CLI run-as
-
-

With the CLI, run-as capability is on a per-request basis. It is done by -using the "roles" operation header, the value of which can be the name -of a single role or a bracket-enclosed, comma-delimited list of role -names.

-
-
-

Example with a low level operation:

-
-
-
-
[standalone@localhost:9990 /] :whoami(verbose=true){roles=[Operator,Auditor]}
-{
-    "outcome" => "success",
-    "result" => {
-        "identity" => {
-            "username" => "$local",
-            "realm" => "ManagementRealm"
-        },
-        "mapped-roles" => [
-            "Auditor",
-            "Operator"
-        ]
-    }
-}
-
-
-
-

Example with a CLI command:

-
-
-
-
[standalone@localhost:9990 /] deploy /tmp/helloworld.war --headers={roles=Monitor}
-{"WFLYCTL0062: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-1" => "WFLYCTL0313: Unauthorized to execute operation 'add' for resource '[(\"deployment\" => \"helloworld.war\")]' -- \"WFLYCTL0332: Permission denied\""}}
-[standalone@localhost:9990 /] deploy /tmp/helloworld.war --headers={roles=Maintainer}
-
-
-
-

Here we show the effect of switching to a role that isn’t granted the -necessary permission.

-
-
-
-
Admin console run-as
-
-

Admin console users can change the role in which they operate by -clicking on their name in the top right corner and clicking on the "Run -as…​" link.

-
-
-

callersroles.png

-
-
-

Then select the role in which you wish to operate:

-
-
-

runasrole.png

-
-
-

The console will need to be restarted in order for the change to take -effect.

-
-
-
-
Using run-as roles with the "simple" access control provider
-
-

This "run-as" capability is available even if the "simple" access -control provider is used. When the "simple" provider is used, any -authenticated administrator is treated the same as if they would map to -SuperUser when the "rbac" provider is used.
-However, the "simple" provider actually understands all of the "rbac" -provider configuration settings described above, but only makes use of -them if the "run-as" capability is used for a request. Otherwise, the -SuperUser role has all permissions, so detailed configuration is -irrelevant.

-
-
-

Using the run-as capability with the "simple" provider may be useful if -an administrator is setting up an rbac provider configuration before -switching the provider to rbac to make that configuration take effect. -The administrator can then run-as different roles to see the effect of -the planned settings.

-
-
-
-
-
-
-
-

6. Application deployment

-
- -
-

6.1. Managed Domain

-
-

In a managed domain, deployments are associated with a server-group -(see Core management concepts). -Any server within the server group will then be provided with that -deployment.

-
-
-

The domain and host controller components manage the distribution of -binaries across network boundaries.

-
-
-

6.1.1. Deployment Commands

-
-

Distributing deployment binaries involves two steps: uploading the -deployment to the repository the domain controller will use to -distribute its contents, and then assigning the deployment to one or -more server groups.

-
-
-

You can do this in one sweep with the CLI:

-
-
-
-
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war
-Either --all-server-groups or --server-groups must be specified.
-
-[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --all-server-groups
-'test-application.war' deployed successfully.
-
-
-
-

The deployment will be available to the domain controller, assigned to a -server group, and deployed on all running servers in that group:

-
-
-
-
[domain@localhost:9990 /] :read-children-names(child-type=deployment)
-{
-   "outcome" => "success",
-   "result" => [
-       "mysql-connector-java-5.1.15.jar",
-       "test-application.war"
-   ]
-}
-
-[domain@localhost:9990 /] /server-group=main-server-group/deployment=test-application.war:read-resource(include-runtime)
-{
-   "outcome" => "success",
-   "result" => {
-       "enabled" => true,
-       "name" => "test-application.war",
-       "managed" => true,
-       "runtime-name" => "test-application.war"
-   }
-}
-
-
-
-

If you only want the deployment deployed on servers in some server -groups, but not all, use the --server-groups parameter instead of --all-server-groups:

-
-
-
-
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --server-groups=main-server-group,another-group
-'test-application.war' deployed successfully.
-
-
-
-

If you have a new version of the deployment that you want to deploy -replacing an existing one, use the --force parameter:

-
-
-
-
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --all-server-groups --force
-'test-application.war' deployed successfully.
-
-
-
-

You can remove binaries from server groups with the undeploy command:

-
-
-
-
[domain@localhost:9990 /] undeploy test-application.war --all-relevant-server-groups
-Successfully undeployed test-application.war.
-
-[domain@localhost:9990 /] /server-group=main-server-group:read-children-names(child-type=deployment)
-{
-   "outcome" => "success",
-   "result" => []
-}
-
-
-
-

If you only want to undeploy from some server groups but not others, use -the - server-groups parameter instead of --all-relevant-server-groups.

-
-
-

The CLI deploy command supports a number of other parameters that can -control behavior. Use the --help parameter to learn more:

-
-
-
-
[domain@localhost:9990 /] deploy --help
-[...]
-
-
-
- - - - - -
- - -Managing deployments through the web interface provides an alternate, -sometimes simpler approach. -
-
-
-
-

6.1.2. Exploded managed deployments

-
-

Managed and unmanaged deployments can be 'exploded', i.e. on the -filesystem in the form of a directory structure whose structure -corresponds to an unzipped version of the archive. An exploded -deployment can be convenient to administer if your administrative -processes involve inserting or replacing files from a base version in -order to create a version tailored for a particular use (for example, -copy in a base deployment and then copy in a jboss-web.xml file to -tailor a deployment for use in WildFly.) Exploded deployments are also -nice in some development scenarios, as you can replace static content -(e.g. .html, .css) files in the deployment and have the new content -visible immediately without requiring a redeploy.

-
-
-

Since unmanaged deployment content is directly in your charge, the -following operations only make sense for a managed deployment.

-
-
-
-
[domain@localhost:9990 /] /deployment=exploded.war:add(content=[{empty=true}])
-
-
-
-

This will create an empty exploded deployment to which you’ll be able to -add content. The empty content parameter is required to check that you -really intend to create an empty deployment and not just forget to -define the content.

-
-
-
-
[domain@localhost:9990 /] /deployment=kitchensink.ear:explode()
-
-
-
-

This will 'explode' an existing archive deployment to its exploded -format. This operation is not recursive so you need to explode the -sub-deployment if you want to be able to manipulate the sub-deployment -content. You can do this by specifying the sub-deployment archive path -as a parameter to the explode operation.

-
-
-
-
[domain@localhost:9990 /] /deployment=kitchensink.ear:explode(path=wildfly-kitchensink-ear-web.war)
-
-
-
-

Now you can add or remove content to your exploded deployment. Note that -per-default this will overwrite existing contents, you can specify the -overwrite parameter to make the operation fail if the content already -exists.

-
-
-
-
[domain@localhost:9990 /] /deployment=exploded.war:add-content(content=[{target-path=WEB-INF/classes/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class, input-stream-index=/home/demo/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class}, {target-path=META-INF/MANIFEST.MF, input-stream-index=/home/demo/META-INF/MANIFEST.MF}, {target-path=META-INF/services/org.jboss.msc.service.ServiceActivator, input-stream-index=/home/demo/META-INF/services/org.jboss.msc.service.ServiceActivator}])
-
-
-
-

Each content specifies a source content and the target path to which it -will be copied relative to the deployment root. With WildFly 11 you can -use input-stream-index (which was a convenient way to pass a stream of -content) from the CLI by pointing it to a local file.

-
-
-
-
[domain@localhost:9990 /] /deployment=exploded.war:remove-content(paths=[WEB-INF/classes/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class, META-INF/MANIFEST.MF, META-INF/services/org.jboss.msc.service.ServiceActivator])
-
-
-
-

Now you can list the content of an exploded deployment, or just some -part of it.

-
-
-
-
[domain@localhost:9990 /] /deployment=kitchensink.ear:browse-content(archive=false, path=wildfly-kitchensink-ear-web.war)
-{
-    "outcome" => "success",
-    "result" => [
-        {
-            "path" => "META-INF/",
-            "directory" => true
-        },
-        {
-            "path" => "META-INF/MANIFEST.MF",
-            "directory" => false,
-            "file-size" => 128L
-        },
-        {
-            "path" => "WEB-INF/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/templates/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/classes/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/classes/org/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/controller/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/rest/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/util/",
-            "directory" => true
-        },
-        {
-            "path" => "resources/",
-            "directory" => true
-        },
-        {
-            "path" => "resources/css/",
-            "directory" => true
-        },
-        {
-            "path" => "resources/gfx/",
-            "directory" => true
-        },
-        {
-            "path" => "WEB-INF/templates/default.xhtml",
-            "directory" => false,
-            "file-size" => 2113L
-        },
-        {
-            "path" => "WEB-INF/faces-config.xml",
-            "directory" => false,
-            "file-size" => 1365L
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/controller/MemberController.class",
-            "directory" => false,
-            "file-size" => 2750L
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/rest/MemberResourceRESTService.class",
-            "directory" => false,
-            "file-size" => 6363L
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/rest/JaxRsActivator.class",
-            "directory" => false,
-            "file-size" => 464L
-        },
-        {
-            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/util/WebResources.class",
-            "directory" => false,
-            "file-size" => 667L
-        },
-        {
-            "path" => "WEB-INF/beans.xml",
-            "directory" => false,
-            "file-size" => 1262L
-        },
-        {
-            "path" => "index.xhtml",
-            "directory" => false,
-            "file-size" => 3603L
-        },
-        {
-            "path" => "index.html",
-            "directory" => false,
-            "file-size" => 949L
-        },
-        {
-            "path" => "resources/css/screen.css",
-            "directory" => false,
-            "file-size" => 4025L
-        },
-        {
-            "path" => "resources/gfx/headerbkg.png",
-            "directory" => false,
-            "file-size" => 1147L
-        },
-        {
-            "path" => "resources/gfx/asidebkg.png",
-            "directory" => false,
-            "file-size" => 1374L
-        },
-        {
-            "path" => "resources/gfx/banner.png",
-            "directory" => false,
-            "file-size" => 41473L
-        },
-        {
-            "path" => "resources/gfx/bkg-blkheader.png",
-            "directory" => false,
-            "file-size" => 116L
-        },
-        {
-            "path" => "resources/gfx/rhjb_eap_logo.png",
-            "directory" => false,
-            "file-size" => 2637L
-        },
-        {
-            "path" => "META-INF/maven/",
-            "directory" => true
-        },
-        {
-            "path" => "META-INF/maven/org.wildfly.quickstarts/",
-            "directory" => true
-        },
-        {
-            "path" => "META-INF/maven/org.wildfly.quickstarts/wildfly-kitchensink-ear-web/",
-            "directory" => true
-        },
-        {
-            "path" => "META-INF/maven/org.wildfly.quickstarts/wildfly-kitchensink-ear-web/pom.xml",
-            "directory" => false,
-            "file-size" => 4128L
-        },
-        {
-            "path" => "META-INF/maven/org.wildfly.quickstarts/wildfly-kitchensink-ear-web/pom.properties",
-            "directory" => false,
-            "file-size" => 146L
-        }
-    ]
-}
-
-
-
-

You also have a read-content operation but since it returns a binary -stream, this is not displayable from the CLI.

-
-
-
-
[domain@localhost:9990 /] /deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF)
-{
-  "outcome" => "success",
-    "result" => {"uuid" => "b373d587-72ee-4b1e-a02a-71fbb0c85d32"},
-    "response-headers" => {"attached-streams" => [{
-        "uuid" => "b373d587-72ee-4b1e-a02a-71fbb0c85d32",
-        "mime-type" => "text/plain"
-    }]}
-}
-
-
-
-

The management CLI however provides high level commands to display or -save binary stream attachments:

-
-
-
-
[domain@localhost:9990 /] attachment display --operation=/deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF)
-ATTACHMENT d052340a-abb7-4a66-aa24-4eeeb6b256be:
-Manifest-Version: 1.0
-Archiver-Version: Plexus Archiver
-Built-By: mjurc
-Created-By: Apache Maven 3.3.9
-Build-Jdk: 1.8.0_91
-
-
-
-
-
[domain@localhost:9990 /] attachment save --operation=/deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF) --file=example
-File saved to /home/mjurc/wildfly/build/target/wildfly-11.0.0.Alpha1-SNAPSHOT/example
-
-
-
-
-

6.1.3. XML Configuration File

-
-

When you deploy content, the domain controller adds two types of entries -to the domain.xml configuration file, one showing global information -about the deployment, and another for each relevant server group showing -how it is used by that server group:

-
-
-
-
[...]
-<deployments>
-   <deployment name="test-application.war"
-               runtime-name="test-application.war">
-       <content sha1="dda9881fa7811b22f1424b4c5acccb13c71202bd"/>
-   </deployment>
-</deployments>
-[...]
-<server-groups>
-   <server-group name="main-server-group" profile="default">
-       [...]
-       <deployments>
-           <deployment name="test-application.war" runtime-name="test-application.war"/>
-       </deployments>
-   </server-group>
-</server-groups>
-[...]
-
-
-
-

~(See domain/configuration/domain.xml)~

-
-
-
-
-

6.2. Standalone Server

-
-

Deployments on a standalone server work in a similar way to those on -managed domains. The main difference is that there are no server group -associations.

-
-
-

6.2.1. Deployment Commands

-
-

The same CLI commands used for managed domains work for standalone -servers when deploying and removing an application:

-
-
-
-
[standalone@localhost:9990 /] deploy ~/Desktop/test-application.war
-'test-application.war' deployed successfully.
-
-[standalone@localhost:9990 /] undeploy test-application.war
-Successfully undeployed test-application.war.
-
-
-
-
-

6.2.2. Deploying Using the Deployment Scanner

-
-

Deployment content (for example, war, ear, jar, and sar files) can be -placed in the standalone/deployments directory of the WildFly -distribution, in order to be automatically deployed into the server -runtime. For this to work the deployment-scanner subsystem must be -present. The scanner periodically checks the contents of the deployments -directory and reacts to changes by updating the server.

-
-
- - - - - -
- - -Users are encouraged to use the WildFly management APIs to upload and -deploy deployment content instead of relying on the deployment scanner -that periodically scans the directory, particularly if running -production systems. -
-
-
-
Deployment Scanner Modes
-
-

The WildFly filesystem deployment scanner operates in one of two -different modes, depending on whether it will directly monitor the -deployment content in order to decide to deploy or redeploy it.

-
-
-

Auto-deploy mode:

-
-
-

The scanner will directly monitor the deployment content, automatically -deploying new content and redeploying content whose timestamp has -changed. This is similiar to the behavior of previous AS releases, -although there are differences:

-
-
-
    -
  • -

    A change in any file in an exploded deployment triggers redeploy. -Because EE 6+ applications do not require deployment descriptors,
    -there is no attempt to monitor deployment descriptors and only redeploy -when a deployment descriptor changes.

    -
  • -
  • -

    The scanner will place marker files in this directory as an indication -of the status of its attempts to deploy or undeploy content. These are -detailed below.

    -
  • -
-
-
-

Manual deploy mode:

-
-
-

The scanner will not attempt to directly monitor the deployment content -and decide if or when the end user wishes the content to be deployed. -Instead, the scanner relies on a system of marker files, with the user’s -addition or removal of a marker file serving as a sort of command -telling the scanner to deploy, undeploy or redeploy content.

-
-
-

Auto-deploy mode and manual deploy mode can be independently configured -for zipped deployment content and exploded deployment content. This is -done via the "auto-deploy" attribute on the deployment-scanner element -in the standalone.xml configuration file:

-
-
-
-
<deployment-scanner scan-interval="5000" relative-to="jboss.server.base.dir"
-   path="deployments" auto-deploy-zipped="true" auto-deploy-exploded="false"/>
-
-
-
-

By default, auto-deploy of zipped content is enabled, and auto-deploy of -exploded content is disabled. Manual deploy mode is strongly recommended -for exploded content, as exploded content is inherently vulnerable to -the scanner trying to auto-deploy partially copied content.

-
-
-
-
Marker Files
-
-

The marker files always have the same name as the deployment content to -which they relate, but with an additional file suffix appended. For -example, the marker file to indicate the example.war file should be -deployed is named example.war.dodeploy. Different marker file suffixes -have different meanings.

-
-
-

The relevant marker file types are:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FilePurpose

.dodeploy

Placed by the user to indicate that the given content -should be deployed into the runtime (or redeployed if already deployed in -the runtime.)

.skipdeploy

Disables auto-deploy of the content for as long as the -file is present. Most useful for allowing updates to exploded content -without having the scanner initiate redeploy in the middle of the update. -Can be used with zipped content as well, although the scanner will detect -in-progress changes to zipped content and wait until changes are -complete.

.isdeploying

Placed by the deployment scanner service to indicate that -it has noticed a .dodeploy file or new or updated auto-deploymode content -and is in the process of deploying the content.This marker file will be -deleted when the deployment process completes.

.deployed

Placed by the deployment scanner service to indicate that -the given content has been deployed into the runtime. If an end user -deletes this file, the content will be undeployed.

.failed

Placed by the deployment scanner service to indicate that -the given content failed to deploy into the runtime. The contentof the -file will include some information about the cause ofthe failure. Note -that with auto-deploy mode, removing this file will make the deployment -eligible for deployment again.

.isundeploying

Placed by the deployment scanner service to indicate -that it has noticed a .deployed file has been deleted and the content is -being undeployed. This marker file will be deleted when the undeployment -process completes.

.undeployed

Placed by the deployment scanner service to indicate that -the given content has been undeployed from the runtime. If an end user -deletes this file, it has no impact.

.pending

Placed by the deployment scanner service to indicate that -it has noticed the need to deploy content but has not yet instructed the -server to deploy it. This file is created if the scanner detects that -some auto-deploy content is still in the process of being copied or if -there is some problem that prevents auto-deployment. The scanner will not -instruct the server to deploy or undeploy any content (not just -the directly affected content) as long as this condition holds.

-
-
-
Basic workflows:
-
-

All examples assume variable $JBOSS_HOME points to the root of the -WildFly distribution.

-
-
-
    -
  1. -

    Add new zipped content and deploy it:

    -
    -
      -
    1. -

      cp target/example.war/ $JBOSS_HOME/standalone/deployments

      -
    2. -
    3. -

      (Manual mode only) touch -$JBOSS_HOME/standalone/deployments/example.war.dodeploy

      -
    4. -
    -
    -
  2. -
  3. -

    Add new unzipped content and deploy it:

    -
    -
      -
    1. -

      cp -r target/example.war/ $JBOSS_HOME/standalone/deployments

      -
    2. -
    3. -

      (Manual mode only) touch -$JBOSS_HOME/standalone/deployments/example.war.dodeploy

      -
    4. -
    -
    -
  4. -
  5. -

    Undeploy currently deployed content:

    -
    -
      -
    1. -

      rm $JBOSS_HOME/standalone/deployments/example.war.deployed

      -
    2. -
    -
    -
  6. -
  7. -

    Auto-deploy mode only: Undeploy currently deployed content:

    -
    -
      -
    1. -

      rm $JBOSS_HOME/standalone/deployments/example.war

      -
    2. -
    -
    -
  8. -
  9. -

    Replace currently deployed zipped content with a new version and deploy it:

    -
    -
      -
    1. -

      cp target/example.war/ $JBOSS_HOME/standalone/deployments

      -
    2. -
    3. -

      (Manual mode only) touch -$JBOSS_HOME/standalone/deployments/example.war.dodeploy

      -
    4. -
    -
    -
  10. -
  11. -

    Manual mode only: Replace currently deployed unzipped content with a -new version and deploy it:

    -
    -
      -
    1. -

      rm $JBOSS_HOME/standalone/deployments/example.war.deployed

      -
    2. -
    3. -

      wait for $JBOSS_HOME/standalone/deployments/example.war.undeployed -file to appear

      -
    4. -
    5. -

      cp -r target/example.war/ $JBOSS_HOME/standalone/deployments

      -
    6. -
    7. -

      touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy

      -
    8. -
    -
    -
  12. -
  13. -

    Auto-deploy mode only: Replace currently deployed unzipped content -with a new version and deploy it:

    -
    -
      -
    1. -

      touch $JBOSS_HOME/standalone/deployments/example.war.skipdeploy

      -
    2. -
    3. -

      cp -r target/example.war/ $JBOSS_HOME/standalone/deployments

      -
    4. -
    5. -

      rm $JBOSS_HOME/standalone/deployments/example.war.skipdeploy

      -
    6. -
    -
    -
  14. -
  15. -

    Manual mode only: Live replace portions of currently deployed -unzipped content without redeploying:

    -
    -
      -
    1. -

      cp -r target/example.war/foo.html -$JBOSS_HOME/standalone/deployments/example.war

      -
    2. -
    -
    -
  16. -
  17. -

    Auto-deploy mode only: Live replace portions of currently deployed -unzipped content without redeploying:

    -
    -
      -
    1. -

      touch $JBOSS_HOME/standalone/deployments/example.war.skipdeploy

      -
    2. -
    3. -

      cp -r target/example.war/foo.html -$JBOSS_HOME/standalone/deployments/example.war

      -
    4. -
    -
    -
  18. -
  19. -

    Manual or auto-deploy mode: Redeploy currently deployed content -(i.e. bounce it with no content change):

    -
    -
      -
    1. -

      touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy

      -
    2. -
    -
    -
  20. -
  21. -

    Auto-deploy mode only: Redeploy currently deployed content (i.e. -bounce it with no content change):

    -
    -
      -
    1. -

      touch $JBOSS_HOME/standalone/deployments/example.war

      -
    2. -
    -
    -
  22. -
-
-
- - - - - -
- - -The above examples use Unix shell commands. Windows equivalents are: -cp src dest -→ xcopy /y src dest
-cp -r src dest -→ xcopy /e /s /y src dest
-rm afile -→ del afile
-touch afile -→ echo>> afile -
-
-
-

Note that the behavior of 'touch' and 'echo' are different but the -differences are not relevant to the usages in the examples above.

-
-
-
-
-
-

6.3. Managed and Unmanaged Deployments

-
-

WildFly supports two mechanisms for dealing with deployment content – -managed and unmanaged deployments.

-
-
-

With a managed deployment the server takes the deployment content and -copies it into an internal content repository and thereafter uses that -copy of the content, not the original user-provided content. The server -is thereafter responsible for the content it uses.

-
-
-

With an unmanaged deployment the user provides the local filesystem path -of deployment content, and the server directly uses that content. -However, the user is responsible for ensuring that content, e.g. for -making sure that no changes are made to it that will negatively impact -the functioning of the deployed application.

-
-
-

To help you differentiate managed from unmanaged deployments the -deployment model has a runtime boolean attribute 'managed'.

-
-
-

Managed deployments have a number of benefits over unmanaged:

-
-
-
    -
  • -

    They can be manipulated by remote management clients, not requiring -access to the server filesystem.

    -
  • -
  • -

    In a managed domain, WildFly/EAP will take responsibility for -replicating a copy of the deployment to all hosts/servers in the domain -where it is needed. With an unmanaged deployment, it is the user’s -responsibility to have the deployment available on the local filesystem -on all relevant hosts, at a consistent path.

    -
  • -
  • -

    The deployment content actually used is stored on the filesystem in -the internal content repository, which should help shelter it from -unintended changes.

    -
  • -
-
-
-

All of the previous examples above illustrate using managed deployments, -except for any discussion of deployment scanner handling of exploded -deployments. In WildFly 10 and earlier exploded deployments are always -unmanaged, this is no longer the case since WildFly 11.

-
-
-

6.3.1. Content Repository

-
-

For a managed deployment, the actual file the server uses when creating -runtime services is not the file provided to the CLI deploy command or -to the web console. It is a copy of that file stored in an internal -content repository. The repository is located in the -domain/data/content directory for a managed domain, or in -standalone/data/content for a standalone server. Actual binaries are -stored in a subdirectory:

-
-
-
-
ls domain/data/content/
-  |---/47
-  |-----95cc29338b5049e238941231b36b3946952991
-  |---/dd
-  |-----a9881fa7811b22f1424b4c5acccb13c71202bd
-
-
-
- - - - - -
- - -The location of the content repository and its internal structure is -subject to change at any time and should not be relied upon by end -users. -
-
-
-

The description of a managed deployment in the domain or standalone -configuration file includes an attribute recording the SHA1 hash of the -deployment content:

-
-
-
-
<deployments>
-   <deployment name="test-application.war"
-               runtime-name="test-application.war">
-       <content sha1="dda9881fa7811b22f1424b4c5acccb13c71202bd"/>
-   </deployment>
-</deployments>
-
-
-
-

The WildFly process calculates and records that hash when the user -invokes a management operation (e.g. CLI deploy command or using the -console) providing deployment content. The user is not expected to -calculate the hash.

-
-
-

The sha1 attribute in the content element tells the WildFly process -where to find the deployment content in its internal content repository.

-
-
-

In a domain each host will have a copy of the content needed by its -servers in its own local content repository. The WildFly domain -controller and secondary Host Controller processes take responsibility for -ensuring each host has the needed content.

-
-
-
-

6.3.2. Unmanaged Deployments

-
-

An unmanaged deployment is one where the server directly deploys the -content at a path you specify instead of making an internal copy and -then deploying the copy.

-
-
-

Initially deploying an unmanaged deployment is much like deploying a -managed one, except you tell WildFly that you do not want the deployment -to be managed:

-
-
-
-
[standalone@localhost:9990 /] deploy ~/Desktop/test-application.war --unmanaged
-'test-application.war' deployed successfully.
-
-
-
-

When you do this, instead of the server making a copy of the content at -/Desktop/test-application.war, calculating the hash of the content, -storing the hash in the configuration file and then installing the copy -into the runtime, instead it will convert -/Desktop/test-application.war to an absolute path, store the path in -the configuration file, and then install the original content in the -runtime.

-
-
-

You can also use unmanaged deployments in a domain:

-
-
-
-
[domain@localhost:9990 /] deploy /home/example/Desktop/test-application.war --server-group=main-server-group --unmanaged
-'test-application.war' deployed successfully.
-
-
-
-

However, before you run this command you must ensure that a copy of the -content is present on all machines that have servers in the target -server groups, all at the same filesystem path. The domain will not copy -the file for you.

-
-
-

Undeploy is no different from a managed undeploy:

-
-
-
-
[standalone@localhost:9990 /] undeploy test-application.war
-Successfully undeployed test-application.war.
-
-
-
-

Doing a replacement of the deployment with a new version is a bit -different, the server is using the file you want to replace. You should -undeploy the deployment, replace the content, and then deploy again. Or -you can stop the server, replace the deployment and deploy again.

-
-
-
-
-

6.4. Deployment Overlays

-
-

Deployment overlays are our way of 'overlaying' content into an existing -deployment, without physically modifying the contents of the deployment -archive. Possible use cases include swapping out deployment descriptors, -modifying static web resources to change the branding of an application, -or even replacing jar libraries with different versions.

-
-
-

Deployment overlays have a different lifecycle to a deployment. In order -to use a deployment overlay, you first create the overlay, using the CLI -or the management API. You then add files to the overlay, specifying the -deployment paths you want them to overlay. Once you have created the -overlay you then have to link it to a deployment name (which is done -slightly differently depending on if you are in standalone or domain -mode). Once you have created the link any deployment that matches the -specified deployment name will have the overlay applied.

-
-
-

When you modify or create an overlay it will not affect existing -deployments, they must be redeployed in order to take effect

-
-
-

6.4.1. Creating a deployment overlay

-
-

To create a deployment overlay the CLI provides a high level command to -do all the steps specified above in one go. An example command is given -below for both standalone and domain mode:

-
-
-
-
deployment-overlay add --name=myOverlay --content=/WEB-INF/web.xml=/myFiles/myWeb.xml,/WEB-INF/ejb-jar.xml=/myFiles/myEjbJar.xml --deployments=test.war,*-admin.war --redeploy-affected
-
-
-
-
-
deployment-overlay add --name=myOverlay --content=/WEB-INF/web.xml=/myFiles/myWeb.xml,/WEB-INF/ejb-jar.xml=/myFiles/myEjbJar.xml --deployments=test.war,*-admin.war --server-groups=main-server-group --redeploy-affected
-
-
-
-
-
-
-
-

7. Subsystem configuration

-
-
-

Subsystem configuration reference -:author: tcerar@redhat.com -:icons: font -:source-highlighter: coderay -:toc: macro -:toclevels: 2

-
- -
-

The following chapters will focus on the high level management use cases -that are available through the CLI and the web interface. For a detailed -description of each subsystem configuration property, please consult the -respective component reference.

-
-
-

Schema Location

-
-
- - - - - -
- - -The configuration schemas can found in $JBOSS_HOME/docs/schema. -
-
-
-

7.1. EE Subsystem Configuration

-
-

The EE subsystem provides common functionality in the Jakarta EE platform, -such as the EE Concurrency Utilities (JSR 236) and @Resource -injection. The subsystem is also responsible for managing the lifecycle -of Jakarta EE application’s deployments, that is, .ear files and configuration of global directories to share common libraries across all deployed applications.

-
-
-

The EE subsystem configuration may be used to:

-
-
-
    -
  • -

    customise the deployment of Jakarta EE applications

    -
  • -
  • -

    create EE Concurrency Utilities instances

    -
  • -
  • -

    define the default bindings

    -
  • -
-
-
-

The subsystem name is ee and this document covers EE subsystem version -5.0, which XML namespace within WildFly XML configurations is -urn:jboss:domain:ee:5.0. The path for the subsystem’s XML schema, -within WildFly’s distribution, is docs/schema/jboss-as-ee_5_0.xsd.

-
-
-

Subsystem XML configuration example with all elements and attributes -specified:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:ee:5.0">
-    <global-modules>
-        <module name="org.jboss.logging"
-                slot="main"/>
-        <module name="org.apache.logging.log4j.api"
-                annotations="true"
-                meta-inf="true"
-                services="false" />
-    </global-modules>
-    <global-directories>
-        <directory name="common-libs" path="libs" relative-to="jboss.server.base.dir"/>
-    </global-directories>
-    <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
-    <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
-    <jboss-descriptor-property-replacement>false</jboss-descriptor-property-replacement>
-    <annotation-property-replacement>false</annotation-property-replacement>
-    <concurrent>
-        <context-services>
-            <context-service
-                    name="default"
-                    jndi-name="java:jboss/ee/concurrency/context/default"
-                    use-transaction-setup-provider="true" />
-        </context-services>
-        <managed-thread-factories>
-            <managed-thread-factory
-                    name="default"
-                    jndi-name="java:jboss/ee/concurrency/factory/default"
-                    context-service="default"
-                    priority="1" />
-        </managed-thread-factories>
-        <managed-executor-services>
-            <managed-executor-service
-                    name="default"
-                    jndi-name="java:jboss/ee/concurrency/executor/default"
-                    context-service="default"
-                    thread-factory="default"
-                    hung-task-threshold="60000"
-                    core-threads="5"
-                    max-threads="25"
-                    keepalive-time="5000"
-                    queue-length="1000000"
-                    reject-policy="RETRY_ABORT" />
-        </managed-executor-services>
-        <managed-scheduled-executor-services>
-            <managed-scheduled-executor-service
-                    name="default"
-                    jndi-name="java:jboss/ee/concurrency/scheduler/default"
-                    context-service="default"
-                    thread-factory="default"
-                    hung-task-threshold="60000"
-                    core-threads="5"
-                    keepalive-time="5000"
-                    reject-policy="RETRY_ABORT" />
-        </managed-scheduled-executor-services>
-    </concurrent>
-    <default-bindings
-            context-service="java:jboss/ee/concurrency/context/default"
-            datasource="java:jboss/datasources/ExampleDS"
-            jms-connection-factory="java:jboss/DefaultJMSConnectionFactory"
-            managed-executor-service="java:jboss/ee/concurrency/executor/default"
-            managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default"
-            managed-thread-factory="java:jboss/ee/concurrency/factory/default" />
-</subsystem>
-
-
-
-

7.1.1. Jakarta EE Application Deployment

-
-

The EE subsystem configuration allows the customisation of the -deployment behaviour for Jakarta EE Applications.

-
-
-
Global Modules
-
-

Global modules is a set of JBoss Modules that will be added as -dependencies to the JBoss Modules module of every Jakarta EE deployment. Such -dependencies allows Jakarta EE deployments to see the classes exported by -the global modules.

-
-
-

Each global module is defined through the module resource, an example -of its XML configuration:

-
-
-
-
  <global-modules>
-    <module name="org.jboss.logging" slot="main"/>
-    <module name="org.apache.logging.log4j.api" annotations="true" meta-inf="true" services="false" />
-  </global-modules>
-
-
-
-

The only mandatory attribute is the JBoss Modules module name, the slot -attribute defaults to main, and both define the JBoss Modules module ID to -reference.

-
-
-

The optional annotations attribute, which defaults to false, -indicates if a pre-computed annotation index should be imported from -META-INF/jandex.idx

-
-
-

The optional services attribute indicates if any services exposed in -META-INF/services should be made available to the deployments class -loader, and defaults to false.

-
-
-

The optional meta-inf attribute, which defaults to true, indicates -if the Module’s META-INF path should be available to the deployment’s -class loader.

-
-
-
-
Global Directory
-
-

Global modules can be used to share common libraries across all deployed applications, but it could be impractical if the name of a shared library changes very often or if there are many libraries you want to share. Both cases will require changes in the underlying module.xml that represents this global module.

-
-
-

The EE subsystem allows the configuration of a global directory, which represents a directory tree scanned automatically to include .jar files and resources as a single additional dependency. This module dependency is added as a system dependency on each deployed application. Basically, with a global directory, you will be relying on WildFly to automate the maintenance and configuration of a JBoss Modules module that represents the jar files and resources of a specific directory.

-
-
-

You can configure a global directory using the following operation:

-
-
-
-
  [standalone@localhost:9990 /] /subsystem=ee/global-directory=my-common-libs:add(path=lib, relative-to=jboss.home.dir)
-
-
-
-

The following attributes are available on the global-directory resource:

-
-
-
    -
  • -

    path: The path of the directory to scan. (Mandatory)

    -
  • -
  • -

    relative-to: The name of another previously named path, or of one of the standard paths provided by the system. (Optional)

    -
  • -
-
-
-

When a global-directory is created, the server establishes a JBoss Modules module with one Path Resource Loader created using 'path' and 'relative-to' attributes and one Jar Resource loader for each jar file included in this directory and its subdirectories.

-
-
-

The 'Path Resource Loader' will make available any file as a resource to the application. The 'Jar Resource loader' will make available any class inside of the jar file to the applications.

-
-
-

For example, suppose you have configured one global directory pointing to the following directory tree:

-
-
-
-
/my-common-libs/Z/a-lib.jar
-/my-common-libs/A/A/z-lib.jar
-/my-common-libs/A/a-lib.jar
-/my-common-libs/A/b-lib.jar
-/my-common-libs/a-lib.jar
-/my-common-libs/A/B/a-lib.jar
-/my-common-libs/properties-1.properties
-/my-common-libs/A/B/properties-2.properties
-
-
-
-

The JBoss Modules module generated after scanning this global-directory will be equivalent to the following module.xml:

-
-
-
-
<module xmlns="urn:jboss:module:1.9" name="deployment.external.global-directory.my-common-libs">
-    <resources>
-        <resource-root path="/my-common-libs"/>
-        <resource-root path="/my-common-libs/a-lib.jar"/>
-        <resource-root path="/my-common-libs/A/a-lib.jar"/>
-        <resource-root path="/my-common-libs/A/b-lib.jar"/>
-        <resource-root path="/my-common-libs/A/A/z-lib.jar"/>
-        <resource-root path="/my-common-libs/A/B/a-lib.jar"/>
-        <resource-root path="/my-common-libs/Z/a-lib.jar"/>
-    </resources>
-
-    <dependencies>
-        <module name="javaee.api"/>
-    </dependencies>
-</module>
-
-
-
-

The name of the generated module follows the pattern deployment.external.global-directory.{global-directory-name} and as such, it can be excluded selectively using your deployment-structure.xml.

-
-
-

All resources will be available from the application class loader. For example, you could access the above property files using the context ClassLoader of your current thread:

-
-
-
-
Thread.currentThread().getContextClassLoader().getResourceAsStream("properties-1.properties");
-Thread.currentThread().getContextClassLoader().getResourceAsStream("A/B/properties-2.properties");
-
-
-
-

All classes inside of each jar file will also be available, and the order of how the resource-root are created internally will govern the order of the class loading. The jar resources of the generated module will be created iterating over all jar files found in the directory tree. Each directory is scanned alphabetically starting from the root, and on each level, each subdirectory is also explored alphabetically until visiting all the branch. Files found on each level are also added in alphabetical order.

-
-
-

Notice you should know which classes are exposed on each .jar file and avoid conflicts including the same class twice with incompatible binary change. In those cases, classloading errors are likely to occur. Specifically, you should not add classes that interfere with the classes the server already makes available for your application; the goal of a global directory is not to override and replace existing library versions shipped with the server. It is a facility that will allow moving common frameworks you usually add to your application libs to a common place to facilitate maintenance.

-
-
-

The module created from the shared directory is loaded as soon as the first application is deployed in the server after creating the global-directory. That means, if the server is started/restarted and there are no applications deployed, then the global directory is neither scanned nor the module loaded. Any change in any of the contents of the global-directory will require a server reload to make them available to the deployed applications.

-
-
-

In case of domain mode or distributed environments, it is the user responsibility to make the content of the configured global directory consistent across all the server instances, as well as distribute the jar files that they contain.

-
-
-
-
EAR Subdeployments Isolation
-
-

A flag indicating whether each of the subdeployments within a .ear can -access classes belonging to another subdeployment within the same -.ear. The default value is false, which allows the subdeployments to -see classes belonging to other subdeployments within the .ear.

-
-
-
-
  <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
-
-
-
-

For example:

-
-
-
-
myapp.ear
-|
-|--- web.war
-|
-|--- ejb1.jar
-|
-|--- ejb2.jar
-
-
-
-

If the ear-subdeployments-isolated is set to false, then the classes -in web.war can access classes belonging to ejb1.jar and ejb2.jar. -Similarly, classes from ejb1.jar can access classes from ejb2.jar -(and vice-versa).

-
-
- - - - - -
- - -This flag has no effect on the isolated classloader of the .war -file(s), i.e. irrespective of whether this flag is set to true or -false, the .war within a .ear will have a isolated classloader, -and other subdeployments within that .ear will not be able to access -classes from that .war. This is as per spec. -
-
-
-
-
Property Replacement
-
-

The EE subsystem configuration includes flags to configure whether -system property replacement will be done on XML descriptors and Java -Annotations included in Jakarta EE deployments.

-
-
- - - - - -
- - -System properties etc are resolved in the security context of the -application server itself, not the deployment that contains the file. -This means that if you are running with a security manager and enable -this property, a deployment can potentially access system properties or -environment entries that the security manager would have otherwise -prevented. -
-
-
-
Spec Descriptor Property Replacement
-
-

Flag indicating whether system property replacement will be performed on -standard Jakarta EE XML descriptors. If not configured this defaults to -true, however it is set to false in the standard configuration files -shipped with WildFly.

-
-
-
-
  <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
-
-
-
-

When enabled, properties can be replaced in the following deployment descriptors:

-
-
-
    -
  • -

    ejb-jar.xml

    -
  • -
  • -

    persistence.xml

    -
  • -
  • -

    application.xml

    -
  • -
  • -

    web.xml

    -
  • -
  • -

    permissions.xml

    -
  • -
-
-
-
-
JBoss Descriptor Property Replacement
-
-

Flag indicating whether system property replacement will be performed on -WildFly proprietary XML descriptors, such as jboss-app.xml. This -defaults to true.

-
-
-
-
  <jboss-descriptor-property-replacement>false</jboss-descriptor-property-replacement>
-
-
-
-

When enabled, properties can be replaced in the following deployment descriptors:

-
-
-
    -
  • -

    jboss-ejb3.xml

    -
  • -
  • -

    jboss-app.xml

    -
  • -
  • -

    jboss-web.xml

    -
  • -
  • -

    jboss-permissions.xml

    -
  • -
  • -

    *-jms.xml

    -
  • -
  • -

    *-ds.xml

    -
  • -
-
-
-
-
Annotation Property Replacement
-
-

Flag indicating whether system property replacement will be performed on -Java annotations. The default value is false.

-
-
-
-
  <annotation-property-replacement>false</annotation-property-replacement>
-
-
-
-
-
-
-

7.1.2. EE Concurrency Utilities

-
-

EE Concurrency Utilities (JSR 236) were introduced to -ease the task of writing multithreaded applications. Instances -of these utilities are managed by WildFly, and the related configuration.

-
-
-
Context Services
-
-

The Context Service is a concurrency utility which creates contextual -proxies from existent objects. WildFly Context Services are also used to -propagate the context from a Jakarta EE application invocation thread, to -the threads internally used by the other EE Concurrency Utilities. -Context Service instances may be created using the subsystem XML -configuration:

-
-
-
-
  <context-services>
-    <context-service
- name="default"
- jndi-name="java:jboss/ee/concurrency/context/default"
- use-transaction-setup-provider="true" />
-  </context-services>
-
-
-
-

The name attribute is mandatory, and it’s value should be a unique -name within all Context Services.

-
-
-

The jndi-name attribute is also mandatory, and defines where in the -JNDI the Context Service should be placed.

-
-
-

The optional use-trasaction-setup-provider attribute indicates if the -contextual proxies built by the Context Service should suspend -transactions in context, when invoking the proxy objects, and its value -defaults to true.

-
-
-

Management clients, such as the WildFly CLI, may also be used to -configure Context Service instances. An example to add and remove -one named other:

-
-
-
-
/subsystem=ee/context-service=other:add(jndi-name=java\:jboss\/ee\/concurrency\/other)
-/subsystem=ee/context-service=other:remove
-
-
-
-
-
Managed Thread Factories
-
-

The Managed Thread Factory allows Jakarta EE applications to create new -threads. WildFly Managed Thread Factory instances may also, optionally, -use a Context Service instance to propagate the Jakarta EE application -thread’s context to the new threads. Instance creation is done through -the EE subsystem, by editing the subsystem XML configuration:

-
-
-
-
  <managed-thread-factories>
-    <managed-thread-factory
- name="default"
- jndi-name="java:jboss/ee/concurrency/factory/default"
- context-service="default"
- priority="1" />
-  </managed-thread-factories>
-
-
-
-

The name attribute is mandatory, and it’s value should be a unique -name within all Managed Thread Factories.

-
-
-

The jndi-name attribute is also mandatory, and defines where in the -JNDI the Managed Thread Factory should be placed.

-
-
-

The optional context-service references an existent Context Service by -its name. If specified then thread created by the factory will -propagate the invocation context, present when creating the thread.

-
-
-

The optional priority indicates the priority for new threads created -by the factory, and defaults to 5.

-
-
-

Management clients, such as the WildFly CLI, may also be used to -configure Managed Thread Factory instances. An example to add and -remove one named other:

-
-
-
-
/subsystem=ee/managed-thread-factory=other:add(jndi-name=java\:jboss\/ee\/factory\/other)
-/subsystem=ee/managed-thread-factory=other:remove
-
-
-
-
-
Managed Executor Services
-
-

The Managed Executor Service is the Jakarta EE adaptation of Java SE -Executor Service, providing to Jakarta EE applications the functionality of -asynchronous task execution. WildFly is responsible to manage the -lifecycle of Managed Executor Service instances, which are specified -through the EE subsystem XML configuration:

-
-
-
-
<managed-executor-services>
-    <managed-executor-service
-        name="default"
-        jndi-name="java:jboss/ee/concurrency/executor/default"
-        context-service="default"
-        thread-factory="default"
-        hung-task-threshold="60000"
-        hung-task-termination-period="60000"
-        core-threads="5"
-        max-threads="25"
-        keepalive-time="5000"
-        queue-length="1000000"
-        reject-policy="RETRY_ABORT" />
-</managed-executor-services>
-
-
-
-

The name attribute is mandatory, and it’s value should be a unique -name within all Managed Executor Services.

-
-
-

The jndi-name attribute is also mandatory, and defines where in the -JNDI the Managed Executor Service should be placed.

-
-
-

The optional context-service references an existent Context Service by -its name. If specified then the referenced Context Service will -capture the invocation context present when submitting a task to the -executor, which will then be used when executing the task.

-
-
-

The optional thread-factory references an existent Managed Thread -Factory by its name, to handle the creation of internal threads. If -not specified then a Managed Thread Factory with default configuration -will be created and used internally.

-
-
-

The mandatory core-threads provides the number of threads to keep in -the executor’s pool, even if they are idle. If this is not defined or -is set to 0, the core pool size will be calculated based on the number -of available processors.

-
-
-

The optional queue-length indicates the number of tasks that can be -stored in the input queue. The default value is 0, which means the -queue capacity is unlimited.

-
-
-

The executor’s task queue is based on the values of the attributes -core-threads and queue-length:

-
-
-
    -
  • -

    If queue-length is 0, or queue-length is -Integer.MAX_VALUE (2147483647) and core-threads is 0, direct -handoff queuing strategy will be used and a synchronous queue will be -created.

    -
  • -
  • -

    If queue-length is Integer.MAX_VALUE but core-threads is not -0, an unbounded queue will be used.

    -
  • -
  • -

    For any other valid value for queue-length, a bounded queue wil be -created.

    -
  • -
-
-
-

The optional hung-task-threshold defines a runtime threshold value, in -milliseconds, for tasks to be considered hung by the executor. -A value of 0 will never consider tasks to be hung.

-
-
-

The optional hung-task-termination-period defines the period, in -milliseconds, for attempting the termination of hung tasks, by cancelling -their execution, and interrupting their executing threads. Please note -that the termination of a cancelled hung task is not guaranteed. -A value of 0, which is the default, deactivates the periodic -cancellation of hung tasks. Management clients, such as the WildFly CLI, -may still be used to manually attempt the termination of hung tasks:

-
-
-
-
/subsystem=ee/managed-executor-service=other:terminate-hung-tasks
-
-
-
-

The optional long-running-tasks is a hint to optimize the execution of -long running tasks, and defaults to false.

-
-
-

The optional max-threads defines the the maximum number of threads -used by the executor, which defaults to Integer.MAX_VALUE (2147483647).

-
-
-

The optional keepalive-time defines the time, in milliseconds, that an -internal thread may be idle. The attribute default value is 60000.

-
-
-

The optional reject-policy defines the policy to use when a task is -rejected by the executor. The attribute value may be the default -ABORT, which means an exception should be thrown, or RETRY_ABORT, -which means the executor will try to submit it once more, before -throwing an exception.

-
-
-

Management clients, such as the WildFly CLI, may also be used to -configure Managed Executor Service instances. An example to add and -remove one named other:

-
-
-
-
/subsystem=ee/managed-executor-service=other:add(jndi-name=java\:jboss\/ee\/executor\/other, core-threads=2)
-/subsystem=ee/managed-executor-service=other:remove
-
-
-
-
-
Managed Scheduled Executor Services
-
-

The Managed Scheduled Executor Service is the Jakarta EE adaptation of Java -SE Scheduled Executor Service, providing to Jakarta EE applications the -functionality of scheduling task execution. WildFly is responsible to -manage the lifecycle of Managed Scheduled Executor Service instances, -which are specified through the EE subsystem XML configuration:

-
-
-
-
<managed-scheduled-executor-services>
-    <managed-scheduled-executor-service
-        name="default"
-        jndi-name="java:jboss/ee/concurrency/scheduler/default"
-        context-service="default"
-        thread-factory="default"
-        hung-task-threshold="60000"
-        core-threads="5"
-        keepalive-time="5000"
-        reject-policy="RETRY_ABORT" />
-</managed-scheduled-executor-services>
-
-
-
-

The name attribute is mandatory, and it’s value should be a unique -name within all Managed Scheduled Executor Services.

-
-
-

The jndi-name attribute is also mandatory, and defines where in the -JNDI the Managed Scheduled Executor Service should be placed.

-
-
-

The optional context-service references an existent Context Service by -its name. If specified then the referenced Context Service will -capture the invocation context present when submitting a task to the -executor, which will then be used when executing the task.

-
-
-

The optional thread-factory references an existent Managed Thread -Factory by its name, to handle the creation of internal threads. If -not specified then a Managed Thread Factory with default configuration -will be created and used internally.

-
-
-

The mandatory core-threads provides the number of threads to keep in -the executor’s pool, even if they are idle. A value of 0 means there -is no limit.

-
-
-

The optional hung-task-threshold defines a runtime threshold value, in -milliseconds, for tasks to be considered hung by the executor. -A value of 0 will never consider tasks to be hung.

-
-
-

The optional hung-task-termination-period defines the period, in -milliseconds, for attempting the termination of hung tasks, by cancelling -their execution, and interrupting their executing threads. Please note -that the termination of a cancelled hung task is not guaranteed. -A value of 0, which is the default, deactivates the periodic -cancellation of hung tasks. Management clients, such as the WildFly CLI, -may still be used to manually attempt the termination of hung tasks:

-
-
-
-
/subsystem=ee/managed-scheduled-executor-service=other:terminate-hung-tasks
-
-
-
-

The optional long-running-tasks is a hint to optimize the execution of -long running tasks, and defaults to false.

-
-
-

The optional keepalive-time defines the time, in milliseconds, that an -internal thread may be idle. The attribute default value is 60000.

-
-
-

The optional reject-policy defines the policy to use when a task is -rejected by the executor. The attribute value may be the default -ABORT, which means an exception should be thrown, or RETRY_ABORT, -which means the executor will try to submit it once more, before -throwing an exception.

-
-
-

Management clients, such as the WildFly CLI, may also be used to -configure Managed Scheduled Executor Service instances. An example to -add and remove one named other:

-
-
-
-
/subsystem=ee/managed-scheduled-executor-service=other:add(jndi-name=java\:jboss\/ee\/scheduler\/other, core-threads=2)
-/subsystem=ee/managed-scheduled-executor-service=other:remove
-
-
-
-
-
-

7.1.3. Default EE Bindings

-
-

The Jakarta EE Specification mandates the existence of a default instance -for each of the following resources:

-
-
-
    -
  • -

    Context Service

    -
  • -
  • -

    Datasource

    -
  • -
  • -

    Jakarta Messaging Connection Factory

    -
  • -
  • -

    Managed Executor Service

    -
  • -
  • -

    Managed Scheduled Executor Service

    -
  • -
  • -

    Managed Thread Factory

    -
  • -
-
-
-

The EE subsystem looks up the default instances from JNDI, using the -names in the default bindings configuration, before placing those in the -standard JNDI names, such as java:comp/DefaultManagedExecutorService:

-
-
-
-
  <default-bindings
- context-service="java:jboss/ee/concurrency/context/default"
- datasource="java:jboss/datasources/ExampleDS"
- jms-connection-factory="java:jboss/DefaultJMSConnectionFactory"
- managed-executor-service="java:jboss/ee/concurrency/executor/default"
- managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default"
- managed-thread-factory="java:jboss/ee/concurrency/factory/default" />
-
-
-
-

Above bindings become application dependencies upon deployment. However in some cases -they might not be required or covered by non-default resources. In such case default binding could be:

-
-
-
-
-
    -
  • -

    rewriten - to point to user configured resource( :write-attribute(name=…​,value=…​) )

    -
  • -
  • -

    undefined - if there is no need for runtime dependency( :undefine-attribute(name=…​) )

    -
  • -
-
-
-
-
- - - - - -
- - -The default bindings are optional, if the jndi name for a default -binding is not configured then the related resource will not be -available to Jakarta EE applications. -
-
-
- - - - - -
- - -If default EE resources are not required and bindings do not point at them, -it is safe to remove or turn off default services. -
-
-
-
-
-

7.2. Naming Subsystem Configuration

-
-

The Naming subsystem provides the JNDI implementation on WildFly, and -its configuration allows to:

-
-
-
    -
  • -

    bind entries in global JNDI namespaces

    -
  • -
  • -

    turn off/on the remote JNDI interface

    -
  • -
-
-
-

The subsystem name is naming and this document covers Naming subsystem -version 2.0, which XML namespace within WildFly XML configurations is -urn:jboss:domain:naming:2.0. The path for the subsystem’s XML schema, -within WildFly’s distribution, is docs/schema/jboss-as-naming_2_0.xsd.

-
-
-

Subsystem XML configuration example with all elements and attributes -specified:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:naming:2.0">
-    <bindings>
-        <simple name="java:global/a" value="100" type="int" />
-        <simple name="java:global/jboss.org/docs/url" value="https://docs.jboss.org" type="java.net.URL" />
-        <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory" />
-        <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
-            <environment>
-                <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
-                <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
-                <property name="java.naming.security.authentication" value="simple" />
-                <property name="java.naming.security.principal" value="uid=admin,ou=system" />
-                <property name="java.naming.security.credentials" value="secret" />
-            </environment>
-        </external-context>
-        <lookup name="java:global/c" lookup="java:global/b" />
-    </bindings>
-    <remote-naming/>
-</subsystem>
-
-
-
-

7.2.1. Global Bindings Configuration

-
-

The Naming subsystem configuration allows binding entries into the -following global JNDI namespaces:

-
-
-
    -
  • -

    java:global

    -
  • -
  • -

    java:jboss

    -
  • -
  • -

    java:

    -
  • -
-
-
- - - - - -
- - -If WildFly is to be used as a Jakarta EE application server, then it’s -recommended to opt for java:global, since it is a standard (i.e. -portable) namespace. -
-
-
-

Four different types of bindings are supported:

-
-
-
    -
  • -

    Simple

    -
  • -
  • -

    Object Factory

    -
  • -
  • -

    External Context

    -
  • -
  • -

    Lookup

    -
  • -
-
-
-

In the subsystem’s XML configuration, global bindings are configured -through the <bindings /> XML element, as an example:

-
-
-
-
<bindings>
-    <simple name="java:global/a" value="100" type="int" />
-    <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory" />
-    <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
-        <environment>
-            <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
-            <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
-            <property name="java.naming.security.authentication" value="simple" />
-            <property name="java.naming.security.principal" value="uid=admin,ou=system" />
-            <property name="java.naming.security.credentials" value="secret" />
-        </environment>
-    </external-context>
-    <lookup name="java:global/c" lookup="java:global/b" />
-</bindings>
-
-
-
-
Simple Bindings
-
-

A simple binding is a primitive or java.net.URL entry, and it is defined -through the simple XML element. An example of its XML configuration:

-
-
-
-
<simple name="java:global/a" value="100" type="int" />
-
-
-
-

The name attribute is mandatory and specifies the target JNDI name for -the entry.

-
-
-

The value attribute is mandatory and defines the entry’s value.

-
-
-

The optional type attribute, which defaults to java.lang.String, -specifies the type of the entry’s value. Besides java.lang.String, -allowed types are all the primitive types and their corresponding object -wrapper classes, such as int or java.lang.Integer, and java.net.URL.

-
-
-

Management clients, such as the WildFly CLI, may be used to configure -simple bindings. An example to add and remove the one in the XML -example above:

-
-
-
-
/subsystem=naming/binding=java\:global\/a:add(binding-type=simple, type=int, value=100)
-/subsystem=naming/binding=java\:global\/a:remove
-
-
-
-
-
Object Factories
-
-

The Naming subsystem configuration allows the binding of -javax.naming.spi.ObjectFactory entries, through the object-factory -XML element, for instance:

-
-
-
-
<object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory">
-    <environment>
-        <property name="p1" value="v1" />
-        <property name="p2" value="v2" />
-    </environment>
-</object-factory>
-
-
-
-

The name attribute is mandatory and specifies the target JNDI name for -the entry.

-
-
-

The class attribute is mandatory and defines the object factory’s Java -type.

-
-
-

The module attribute is mandatory and specifies the JBoss Module ID -where the object factory Java class may be loaded from.

-
-
-

The optional environment child element may be used to provide a custom -environment to the object factory.

-
-
-

Management clients, such as the WildFly CLI, may be used to configure -object factory bindings. An example to add and remove the one in the -XML example above:

-
-
-
-
/subsystem=naming/binding=java\:global\/foo\/bar\/factory:add(binding-type=object-factory, module=org.foo.bar, class=org.foo.bar.ObjectFactory, environment=[p1=v1, p2=v2])
-/subsystem=naming/binding=java\:global\/foo\/bar\/factory:remove
-
-
-
-
-
External Context Federation
-
-

Federation of external JNDI contexts, such as a LDAP context, are -achieved by adding External Context bindings to the global bindings -configuration, through the external-context XML element. An example of -its XML configuration:

-
-
-
-
<external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
-    <environment>
-        <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
-        <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
-        <property name="java.naming.security.authentication" value="simple" />
-        <property name="java.naming.security.principal" value="uid=admin,ou=system" />
-        <property name="java.naming.security.credentials" value="secret" />
-    </environment>
-</external-context>
-
-
-
-

The name attribute is mandatory and specifies the target JNDI name for -the entry.

-
-
-

The class attribute is mandatory and indicates the Java initial naming -context type used to create the federated context. Note that such type -must have a constructor with a single environment map argument.

-
-
-

The optional module attribute specifies the JBoss Module ID where any -classes required by the external JNDI context may be loaded from.

-
-
-

The optional cache attribute, which value defaults to false, -indicates if the external context instance should be cached.

-
-
-

The optional environment child element may be used to provide the -custom environment needed to lookup the external context.

-
-
-

Management clients, such as the WildFly CLI, may be used to configure -external context bindings. An example to add and remove the one in -the XML example above:

-
-
-
-
/subsystem=naming/binding=java\:global\/federation\/ldap\/example:add(binding-type=external-context, cache=true, class=javax.naming.directory.InitialDirContext, environment=[java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap\:\/\/ldap.example.com\:389, java.naming.security.authentication=simple, java.naming.security.principal=uid\=admin\,ou\=system, java.naming.security.credentials= secret])
- 
-/subsystem=naming/binding=java\:global\/federation\/ldap\/example:remove
-
-
-
-

Some JNDI providers may fail when their resources are looked up if they -do not implement properly the lookup(Name) method. Their errors would -look like:

-
- --- - - - - - -
11:31:49,047 ERROR org.jboss.resource.adapter.jms.inflow.JmsActivation -(default-threads -1) javax.naming.InvalidNameException: Only support -CompoundName namesat -com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:504)at -javax.naming.InitialContext.lookup(InitialContext.java:421)
-
-

To work around their shortcomings, the -org.jboss.as.naming.lookup.by.string property can be specified in the -external-context’s environment to use instead the lookup(String) method -(with a performance degradation):

-
-
-
-
<property name="org.jboss.as.naming.lookup.by.string" value="true"/>
-
-
-
-

Binding Aliases

-
-
-

The Naming subsystem configuration allows the binding of existent -entries into additional names, i.e. aliases. Binding aliases are -specified through the lookup XML element. An example of its XML -configuration:

-
-
-
-
<lookup name="java:global/c" lookup="java:global/b" />
-
-
-
-

The name attribute is mandatory and specifies the target JNDI name for -the entry.

-
-
-

The lookup attribute is mandatory and indicates the source JNDI name. -It can chain lookups on external contexts. For example, having an -external context bounded to java:global/federation/ldap/example, -searching can be done there by setting lookup attribute to -java:global/federation/ldap/example/subfolder.

-
-
-

Management clients, such as the WildFly CLI, may be used to configure -binding aliases. An example to add and remove the one in the XML -example above:

-
-
-
-
/subsystem=naming/binding=java\:global\/c:add(binding-type=lookup, lookup=java\:global\/b)
-/subsystem=naming/binding=java\:global\/c:remove
-
-
-
-
-
-

7.2.2. Remote JNDI Configuration

-
-

The Naming subsystem configuration may be used to (de)activate the -remote JNDI interface, which allows clients to lookup entries present in -a remote WildFly instance.

-
-
- - - - - -
- - -Only entries within the java:jboss/exported context are accessible -over remote JNDI. -
-
-
-

In the subsystem’s XML configuration, remote JNDI access bindings are -configured through the <remote-naming /> XML element:

-
-
-
-
<remote-naming />
-
-
-
-

Management clients, such as the WildFly CLI, may be used to add/remove -the remote JNDI interface. An example to add and remove the one in -the XML example above:

-
-
-
-
/subsystem=naming/service=remote-naming:add
-/subsystem=naming/service=remote-naming:remove
-
-
-
-
-
-

7.3. DataSource configuration

-
-

Datasources are configured through the datasource subsystem. Declaring -a new datasource consists of two separate steps: You would need to -provide a JDBC driver and define a datasource that references the driver -you installed.

-
-
-

7.3.1. JDBC Driver Installation

-
-

The recommended way to install a JDBC driver into WildFly 29 is to deploy -it as a regular JAR deployment. The reason for this is that when you run -WildFly in domain mode, deployments are automatically propagated to all -servers to which the deployment applies; thus distribution of the driver -JAR is one less thing for you to worry about!

-
-
-

Any JDBC 4-compliant driver will automatically be recognized and -installed into the system by name and version. A JDBC JAR is identified -using the Java service provider mechanism. Such JARs will contain a text -a file named META-INF/services/java.sql.Driver, which contains the -name of the class(es) of the Drivers which exist in that JAR. If your -JDBC driver JAR is not JDBC 4-compliant, it can be made deployable in -one of a few ways.

-
-
-

Modify the JAR

-
-
-

The most straightforward solution is to simply modify the JAR and add -the missing file. You can do this from your command shell by:

-
-
-
    -
  1. -

    Change to, or create, an empty temporary directory.

    -
  2. -
  3. -

    Create a META-INF subdirectory.

    -
  4. -
  5. -

    Create a META-INF/services subdirectory.

    -
  6. -
  7. -

    Create a META-INF/services/java.sql.Driver file which contains one -line - the fully-qualified class name of the JDBC driver.

    -
  8. -
  9. -

    Use the jar command-line tool to update the JAR like this:

    -
  10. -
-
-
-
-
jar \-uf jdbc-driver.jar META-INF/services/java.sql.Driver
-
-
-
-

For a detailed explanation how to deploy JDBC 4 compliant driver jar, -please refer to the chapter " Application Deployment".

-
-
-
-

7.3.2. Datasource Definitions

-
-

The datasource itself is defined within the subsystem datasources:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:datasources:4.0">
-    <datasources>
-        <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS">
-            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
-            <driver>h2</driver>
-            <pool>
-                <min-pool-size>10</min-pool-size>
-                <max-pool-size>20</max-pool-size>
-                <prefill>true</prefill>
-            </pool>
-            <security>
-                <user-name>sa</user-name>
-                <password>sa</password>
-            </security>
-        </datasource>
-        <xa-datasource jndi-name="java:jboss/datasources/ExampleXADS" pool-name="ExampleXADS">
-           <driver>h2</driver>
-           <xa-datasource-property name="URL">jdbc:h2:mem:test</xa-datasource-property>
-           <xa-pool>
-                <min-pool-size>10</min-pool-size>
-                <max-pool-size>20</max-pool-size>
-                <prefill>true</prefill>
-           </xa-pool>
-           <security>
-                <user-name>sa</user-name>
-                <password>sa</password>
-           </security>
-        </xa-datasource>
-        <drivers>
-            <driver name="h2" module="com.h2database.h2">
-                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
-            </driver>
-        </drivers>
-  </datasources>
- 
-</subsystem>
-
-
-
-

(See standalone/configuration/standalone.xml )

-
-
-

As you can see the datasource references a driver by it’s logical name.

-
-
-

You can easily query the same information through the CLI:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=datasources:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "data-source" => {"H2DS" => {
-            "connection-url" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1",
-            "jndi-name" => "java:/H2DS",
-            "driver-name" => "h2",
-            "pool-name" => "H2DS",
-            "use-java-context" => true,
-            "enabled" => true,
-            "jta" => true,
-            "pool-prefill" => true,
-            "pool-use-strict-min" => false,
-            "user-name" => "sa",
-            "password" => "sa",
-            "flush-strategy" => "FailingConnectionOnly",
-            "background-validation" => false,
-            "use-fast-fail" => false,
-            "validate-on-match" => false,
-            "use-ccm" => true
-        }},
-        "xa-data-source" => undefined,
-        "jdbc-driver" => {"h2" => {
-            "driver-name" => "h2",
-            "driver-module-name" => "com.h2database.h2",
-            "driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource"
-        }}
-    }
-}
- 
- 
-[standalone@localhost:9990 /] /subsystem=datasources:installed-drivers-list
-{
-    "outcome" => "success",
-    "result" => [{
-        "driver-name" => "h2",
-        "datasource-class-info" => [{"org.h2.jdbcx.JdbcDataSource" => {
-            "URL" => "java.lang.String",
-            "description" => "java.lang.String",
-            "loginTimeout" => "int",
-            "password" => "java.lang.String",
-            "url" => "java.lang.String",
-            "user" => "java.lang.String"
-        }}],
-        "deployment-name" => undefined,
-        "driver-module-name" => "com.h2database.h2",
-        "module-slot" => "main",
-        "driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource",
-        "driver-class-name" => "org.h2.Driver",
-        "driver-major-version" => 1,
-        "driver-minor-version" => 3,
-        "jdbc-compliant" => true
-    }]
-}
-
-
-
- - - - - -
- - -datasource-class-info shows connection properties defined in the (xa-)datasource-class. -
-
-
- - - - - -
- - -Using the web console or the CLI greatly simplifies the deployment of -JDBC drivers and the creation of datasources. -
-
-
-

The CLI offers a set of commands to create and modify datasources:

-
-
-
-
[standalone@localhost:9990 /] data-source --help
- 
-SYNOPSIS
-  data-source --help [--properties | --commands] |
-              (--name=<resource_id> (--<property>=<value>)*) |
-              (<command> --name=<resource_id> (--<parameter>=<value>)*)
-              [--headers={<operation_header> (;<operation_header>)*}]
-DESCRIPTION
-  The command is used to manage resources of type /subsystem=datasources/data-source.
-[...]
- 
- 
-[standalone@localhost:9990 /] xa-data-source --help
- 
-SYNOPSIS
-  xa-data-source --help [--properties | --commands] |
-                 (--name=<resource_id> (--<property>=<value>)*) |
-                 (<command> --name=<resource_id> (--<parameter>=<value>)*)
-                 [--headers={<operation_header> (;<operation_header>)*}]
- 
-DESCRIPTION
-  The command is used to manage resources of type /subsystem=datasources/xa-data-source.
- 
-RESOURCE DESCRIPTION
-  A JDBC XA data-source configuration
- 
-[...]
-
-
-
-
-

7.3.3. Component Reference

-
-

The datasource subsystem is provided by the -IronJacamar project. For a detailed -description of the available configuration properties, please consult -the project documentation.

-
- -
-
-
-

7.4. Agroal configuration

-
-

The Agroal subsystem allows the definition of datasources. Declaring a new datasource consists of two separate steps: provide a JDBC driver and define a datasource that references the driver you installed.

-
-
-

The Agroal subsystem is provided by the Agroal project. For a detailed description of the available configuration properties, please consult the project documentation.

-
-
-

7.4.1. Enabling the subsystem

-
-

If the WildFly configuration does not have Agroal subsystem enabled by default, it can be enabled in the following ways.

-
-
-
-
<extensions>
-    <extension module="org.wildfly.extension.datasources-agroal"/>
-    [...]
-</extensions>
-<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
-    [...]
-</subsystem>
-
-
-
-
-
[standalone@localhost:9990  /] /extension=org.wildfly.extension.datasources-agroal:add
-{"outcome" => "success"}
-[standalone@localhost:9990  /] /subsystem=datasources-agroal:add
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-
-

7.4.2. JDBC Driver Installation

-
-

A driver definition is a reference to a class in a JDBC driver. Multiple definitions can be created on the same JDBC driver for multiple classes in it. Agroal requires an implementation of java.sql.Driver or javax.sql.DataSource for non-XA datasources, while for XA a javax.sql.XADataSource implementation is required.

-
-
- - - - - -
- - -Agroal will try to load an java.sql.Driver from the specified module if the class is not defined -
-
-
- - - - - -
- - -Any installed driver provides an operation called class-info that lists all the properties available for that particular class, that can be set in the connection-factory. -
-
-
-
-
<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
-    [...]
-    <drivers>
-        <driver name="h2" module="com.h2database.h2" class="org.h2.Driver"/>
-    </drivers>
-</subsystem>
-
-
-
-
-
[standalone@localhost:9990  /] /subsystem=datasources-agroal/driver=h2:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "class" => "org.h2.Driver",
-        "module" => "com.h2database.h2"
-    }
-}
-
-
-
-
-

7.4.3. Common Datasource Definitions

-
-

Agroal provides both XA and non-XA datasources and most of the attributes that define them are common. This definition is mainly split in two logical units: the connection factory and the connection pool. As the name implies, the connection factory has all that is required to create new connections and connection pool defines how connections are handled by the pool.

-
-
-
Connection Factory definition
-
-

The connection factory requires a reference to a driver (see agroal-driver-installation). With a java.sql.Driver the preferred way to 'point' to the database is to specify an url attribute while for javax.sql.DataSource and javax.sql.XADataSource the preferred way is to specify connection-properties.

-
-
- - - - - -
- - -Attributes username and password are provided for basic authentication with the database. Agroal does not allow username and password to be set as connection-properties due to security requirements. -
-
-
-

Other features provided by the connection-factory definition include the possibility of executing a SQL statement right after the connection has been created and to specify the isolation level of transactions in the database.

-
-
-
-
<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
-     <datasource [...]>
-        [...]
-        <connection-factory driver="h2" url="jdbc:h2:tcp://localhost:1701" transaction-isolation="SERIALIZABLE" new-connection-sql="SELECT 1" username="sa" password="sa">
-            <connection-properties>
-                <property name="aProperty" value="aValue"/>
-                <property name="anotherProperty" value="anotherValue"/>
-            </connection-properties>
-        </connection-factory>
-    </datasource>
-    [...]
-</subsystem>
-
-
-
-
-
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "connection-factory" => {
-            "driver" => "h2",
-            "url" => "jdbc:h2:tcp://localhost:1701",
-            "transaction-isolation" => "SERIALIZABLE",
-            "new-connection-sql" => "SELECT 1",
-            "username" => "sa",
-            "password" => "sa",
-            "connection-properties" => {
-                "aProperty" => "aValue",
-                "anotherProperty" => "anotherValue"
-            }
-        }
-        [...]
-    }
-}
-
-
-
-
-
Connection Pool definition
-
-

The main attributes of the connection-pool definition are the ones that control it’s size. While the initial size attribute is only taken into account while bootstrapping the pool, min size and max size are always enforced and can be changed at any time without requiring a reload of the server.

-
-
-

Another important attribute of the connection-pool is the blocking timeout that defines the maximum amount of time a thread will wait for a connection. If that time elapses and still no connection is available an exception is thrown. Keep in mind that the default value is 0, meaning that a thread will wait forever for a connection to become available. Changing this setting does not require a reload of the server.

-
-
-

The connection pool provides other convenient features like background validation of connections on the pool, removal of idle connections from the pool and detection of connections held for too long by one thread. All these features are disabled by default and can be enabled by specifying an interval of time on the corresponding attribute.

-
-
- - - - - -
- - -There is a set of flush operations that perform many of these features on-demand. These are flush-all to close all connections immediately, flush-graceful to close all connections under normal operation, flush-invalid to remove any invalid connections from the pool and flush-idle to remove any connections not being used. -
-
-
-
-
<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
-     <datasource [...]>
-        [...]
-        <connection-pool max-size="30" min-size="10" initial-size="20" blocking-timeout="1000" background-validation="6000" leak-detection="5000" idle-removal="5"/>
-    </datasource>
-    [...]
-</subsystem>
-
-
-
-
-
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "connection-pool" => {
-            "max-size" => 30,
-            "min-size" => 10,
-            "initial-size" => 20,
-            "blocking-timeout" => 1000,
-            "background-validation" => 6000,
-            "leak-detection" => 5000,
-            "idle-removal" => 5
-        }
-        [...]
-    }
-}
-
-
-
-
-
Common datasource attributes
-
-

All datasources in Agroal have a name that’s used to locate them in the WildFly runtime model and are bound to a JNDI name.

-
-
-

The attribute statistics-enabled allow the collection of metrics regarding the pool that can be queried in the runtime model

-
-
- - - - - -
- - -There is also a reset-statistics operation provided. -
-
-
-
-
<subsystem xmlns="urn:jboss:domain:agroal:1.0">
-    <xa-datasource name="sample-xa" jndi-name="java:jboss/datasources/ExampleXADS" statistics-enabled="true">
-        [...]
-    </xa-datasource>
-    [...]
-</subsystem>
-
-
-
-
-
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample-xa:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "jndi-name" => "java:jboss/datasources/ExampleXADS",
-        "statistics-enabled" => true
-        [...]
-    }
-}
-
-
-
-

The available statistics include the number of created / destroyed connections and the number of connections in use / available in the pool. There are also statistics for the time it takes to create a connection and for how long have threads been blocked waiting for a connection.

-
-
-
-
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample:read-resource(include-runtime)
-{
-    "outcome" => "success",
-    "result" => {
-        "statistics" => {
-            "acquire-count" => 10L,
-            "active-count" => 3L,
-            "available-count" => 17L,
-            "awaiting-count" => 0L,
-            "creation-count" => 20L,
-            "destroy-count" => 0L,
-            "flush-count" => 0L,
-            "invalid-count" => 0L,
-            "leak-detection-count" => 0L,
-            "max-used-count" => 20L,
-            "reap-count" => 0L,
-            "blocking-time-average-ms" => 0L,
-            "blocking-time-max-ms" => 0L,
-            "blocking-time-total-ms" => 0L,
-            "creation-time-average-ms" => 96L,
-            "creation-time-max-ms" => 815L,
-            "creation-time-total-ms" => 964L
-        }
-        [...]
-    }
-}
-
-
-
-
-
DataSource specific attributes
-
-

In addition to all the common attributes, a datasource definition may disable the Jakarta Transactions integration.

-
-
-

Deferred enlistment is not supported, meaning that if Jakarta Transactions is enabled a connection must always be obtained within the scope of a transaction. The connection will always be enlisted with that transaction (lazy enlistment is not supported).

-
-
- - - - - -
- - -The connectable attribute allows a non-XA datasource to take part in an XA transaction ('Last Resource Commit Optimization (LRCO)' / 'Commit Markable Resource') -
-
-
-
-
<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
-    <datasource name="sample" jndi-name="java:jboss/datasources/ExampleDS" jta="false" connectable="false" statistics-enabled="true">
-        [...]
-    </datasource>
-    [...]
-</subsystem>
-
-
-
-
-
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample-xa:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "connectable" => false,
-        "jta" => false,
-        [...]
-    }
-}
-
-
-
-
-
XADataSource specific attributes
-
-

At the moment there are no attributes specific to a XADataSource definition.

-
-
-
-
-

7.4.4. Agroal known limitations

-
-

The subsystem to define default datasources remains "datasources" at the moment.

-
-
-
-
-

7.5. Logging Configuration

-
-
-The overall server logging configuration is represented by the logging -subsystem. It consists of four notable parts: handler configurations, -logger, the root logger declarations (aka log categories) and -logging profiles. Each logger does reference a handler (or set of -handlers). Each handler declares the log format and output: -
-
-
-
-
<subsystem xmlns="urn:jboss:domain:logging:3.0">
-   <console-handler name="CONSOLE" autoflush="true">
-       <level name="DEBUG"/>
-       <formatter>
-           <named-formatter name="COLOR-PATTERN"/>
-       </formatter>
-   </console-handler>
-   <periodic-rotating-file-handler name="FILE" autoflush="true">
-       <formatter>
-           <named-formatter name="PATTERN"/>
-       </formatter>
-       <file relative-to="jboss.server.log.dir" path="server.log"/>
-       <suffix value=".yyyy-MM-dd"/>
-   </periodic-rotating-file-handler>
-   <logger category="com.arjuna">
-       <level name="WARN"/>
-   </logger>
-   [...]
-   <root-logger>
-       <level name="DEBUG"/>
-       <handlers>
-           <handler name="CONSOLE"/>
-           <handler name="FILE"/>
-       </handlers>
-   </root-logger>
-   <formatter name="PATTERN">
-       <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
-   </formatter>
-   <formatter name="COLOR-PATTERN">
-       <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
-   </formatter>
-</subsystem>
-
-
-
-

7.5.1. Attributes

-
-

The root resource contains two notable attributes -add-logging-api-dependencies and use-deployment-logging-config.

-
-
-
add-logging-api-dependencies
-
-

The add-logging-api-dependencies controls whether or not the container -adds -implicit -logging API dependencies to your deployments. If set to true, the -default, all the implicit logging API dependencies are added. If set to -false the dependencies are not added to your deployments.

-
-
-
-
use-deployment-logging-config
-
-

The use-deployment-logging-config controls whether or not your -deployment is scanned for -per-deployment -logging. If set to true, the default, -per-deployment -logging is enabled. Set to false to disable this feature.

-
-
-
-
-

7.5.2. Per-deployment Logging

-
-

Per-deployment logging allows you to add a logging configuration file to -your deployment and have the logging for that deployment configured -according to the configuration file. In an EAR the configuration should -be in the META-INF directory. In a WAR or JAR deployment the -configuration file can be in either the META-INF or WEB-INF/classes -directories.

-
-
-

The following configuration files are allowed:

-
-
-
    -
  • -

    logging.properties

    -
  • -
  • -

    jboss-logging.properties

    -
  • -
-
-
-

You can also disable this functionality by changing the -use-deployment-logging-config attribute to false.

-
-
-
-

7.5.3. Logging Profiles

-
-

Logging profiles are like additional logging subsystems. Each logging -profile constists of three of the four notable parts listed above: -handler configurations, logger and the root logger declarations.

-
-
-

You can assign a logging profile to a deployment via the deployments -manifest. Add a Logging-Profile entry to the MANIFEST.MF file with a -value of the logging profile id. For example a logging profile defined -on /subsystem=logging/logging-profile=ejbs the MANIFEST.MF would look -like:

-
-
-
-
Manifest-Version: 1.0
-Logging-Profile: ejbs
-
-
-
-

A logging profile can be assigned to any number of deployments. Using a -logging profile also allows for runtime changes to the configuration. -This is an advantage over the per-deployment logging configuration as -the redeploy is not required for logging changes to take affect.

-
-
-
-

7.5.4. Default Log File Locations

-
-
Managed Domain
-
-

In a managed domain two types of log files do exist: Controller and -server logs. The controller components govern the domain as whole. It’s -their responsibility to start/stop server instances and execute managed -operations throughout the domain. Server logs contain the logging -information for a particular server instance. They are co-located with -the host the server is running on.

-
-
-

For the sake of simplicity we look at the default setup for managed -domain. In this case, both the domain controller components and the -servers are located on the same host:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ProcessLog File

Host Controller

./domain/log/host-controller.log

Process Controller

./domain/log/process-controller.log

"Server One"

./domain/servers/server-one/log/server.log

"Server Two"

./domain/servers/server-two/log/server.log

"Server Three"

./domain/servers/server-three/log/server.log

-
-
-
Standalone Server
-
-

The default log files for a standalone server can be found in the log -subdirectory of the distribution:

-
- ---- - - - - - - - - - - - - -
ProcessLog File

Server

./standalone/log/server.log

-
-
-
-

7.5.5. List Log Files and Reading Log Files

-
-

Log files can be listed and viewed via management operations. The log -files allowed to be viewed are intentionally limited to files that exist -in the jboss.server.log.dir and are associated with a known file -handler. Known file handler types include file-handler, -periodic-rotating-file-handler and size-rotating-file-handler. The -operations are valid in both standalone and domain modes.

-
-
-
List Log Files
-
-

The logging subsystem has a log-file resource off the subsystem root -resource and off each logging-profile resource to list each log file.

-
-
-
CLI command and output
-
-
[standalone@localhost:9990 /] /subsystem=logging:read-children-names(child-type=log-file)
-{
-    "outcome" => "success",
-    "result" => [
-        "server.log",
-        "server.log.2014-02-12",
-        "server.log.2014-02-13"
-    ]
-}
-
-
-
-
-
Read Log File
-
-

The read-log-file operation is available on each log-file resource. -This operation has 4 optional parameters.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription

encoding

the encoding the file should be read in

lines

the number of lines from the file. A value of -1 indicates all -lines should be read.

skip

the number of lines to skip before reading.

tail

true to read from the end of the file up or false to read top -down.

-
-
CLI command and output
-
-
[standalone@localhost:9990 /] /subsystem=logging/log-file=server.log:read-log-file
-{
-    "outcome" => "success",
-    "result" => [
-        "2014-02-14 14:16:48,781 INFO  [org.jboss.as.server.deployment.scanner] (MSC service thread 1-11) JBAS015012: Started FileSystemDeploymentService for directory /home/jperkins/servers/wildfly-8.0.0.Final/standalone/deployments",
-        "2014-02-14 14:16:48,782 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-8) JBAS010400: Bound data source [java:jboss/myDs]",
-        "2014-02-14 14:16:48,782 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-15) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]",
-        "2014-02-14 14:16:48,786 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-9) JBAS015876: Starting deployment of \"simple-servlet.war\" (runtime-name: \"simple-servlet.war\")",
-        "2014-02-14 14:16:48,978 INFO  [org.jboss.ws.common.management] (MSC service thread 1-10) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.3.Final",
-        "2014-02-14 14:16:49,160 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-16) JBAS017534: Registered web context: /simple-servlet",
-        "2014-02-14 14:16:49,189 INFO  [org.jboss.as.server] (Controller Boot Thread) JBAS018559: Deployed \"simple-servlet.war\" (runtime-name : \"simple-servlet.war\")",
-        "2014-02-14 14:16:49,224 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management",
-        "2014-02-14 14:16:49,224 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990",
-        "2014-02-14 14:16:49,225 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly {wildflyVersion}.0.0.Final \"WildFly\" started in 1906ms - Started 258 of 312 services (90 services are lazy, passive or on-demand)"
-    ]
-}
-
-
-
-
-
-

7.5.6. FAQ

-
-
Why is there a logging.properties file?
-
-

You may have noticed that there is a logging.properties file in the -configuration directory. This is logging configuration is used when the -server boots up until the logging subsystem kicks in. If the logging -subsystem is not included in your configuration, then this would act as -the logging configuration for the entire server.

-
-
- - - - - -
- - -The logging.properties file is overwritten at boot and with each -change to the logging subsystem. Any changes made to the file are not -persisted. Any changes made to the XML configuration or via management -operations will be persisted to the logging.properties file and used -on the next boot. -
-
-
-
-
-

7.5.7. Logging Formatters

-
-

Formatters are used to format a log message. A formatter can be assigned to a logging handler.

-
-
-

The logging subsystem includes 4 types of handlers:

-
- -
-
JSON Formatter
-
-

A formatter used to format log messages in JSON.

-
-
-
Examples
-
-
Simple JSON Formatter
-
-
/subsystem=logging/json-formatter=json:add(pretty-print=true, exception-output-type=formatted)
-
-
-
-
Logstash Formatter
-
-
/subsystem=logging/json-formatter=logstash:add(exception-output-type=formatted, key-overrides=[timestamp="@timestamp"],
-meta-data=[@version=1])
-
-
-
-
-
-
Pattern Formatter
-
-

A formatter used to format log messages in plain text. The following table describes the format characters for the -pattern formatter.

-
-
- - - - - -
- - -Highlighted symbols indicate the calculation of the caller is required which can be expensive to resolve. -
-
- - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 1. Pattern Syntax
SymbolDescriptionExamples

%c

The category of the logging event. A precision specifier can be used to alter the dot delimited category

-
-
%c      org.jboss.example.Foo
-%c{1}   Foo
-%c{2}   example.Foo
-%c{.}   ...Foo
-%c{1.}  o.j.e.Foo
-%c{1~.} o.~.~.Foo
-
-

%C

The class of the code calling the log method. A precision specifier can be used to alter the dot delimited class name.

-
-
%C      org.jboss.example.Foo
-%C{1}   Foo
-%C{2}   example.Foo
-%C{.}   ...Foo
-%C{1.}  o.j.e.Foo
-%C{1~.} o.~.~.Foo
-
-

%d

The timestamp the log message. Any valid SimpleDateFormat pattern. The - default is yyyy-MM-dd HH:mm:ss,SSS.

-
-
%d{HH:mm:ss,SSS}
-%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}
-
-

%D

The name of the module the log message came from. A precision specifier can be used to alter the dot delimited module - name.

-
-
%D      org.jboss.example
-%D{1}   example
-%D{2}   jboss.example
-%D{.}   ..example
-%D{1.}  o.j.example
-%D{1~.} o.~.example
-
-

%e

The exception stack trace. Accepts an argument to indicate how many levels of suppressed messages to print.

---- - - - - - - - - - - - - - - -

%e

Prints the full stack trace.

%e{0}

Prints the stack trace ignoring any suppressed messages.

%e{1}

Prints the stack trace with a maximum of one suppressed message.

%F

The name of the file the class that logged the message.

-

 

-

%h

The short host name. This will be the first portion of the qualified host name.

-
-
%h     localhost
-
-

%H

The qualified host name. A precision specifier can be used to alter the dot delimited host name.

-
-
%H    developer.jboss.org
-%H{1} developer
-
-

%i

The process id.

-

 

-

%k

The resource bundle key.

-

 

-

%K

If colored output is supported defines the colors to map to the log message.

---- - - - - - - - - - - -

%K{level}

The level determines the color of the output.

%K{red}

All messages will be colored red.

%l

The location information. This includes the callers class name, method name, file name and line number.

-
-
%l    org.jboss.example.Foo.bar(Foo.java:33)
-
-

%L

The line number of the caller.

-

 

-

%m

The formatted message including any stack traces.

-

 

-

%M

The callers method name.

-

 

-

%n

A platform independent line separator.

-

 

-

%N

The name of the process.

-

 

-

%p

The level of the logged message.

-

 

-

%P

The localized level of the logged message.

-

 

-

%r

The relative number of milliseconds since the given base time from the log message.

-

 

-

%s

The simple formatted message. This will not include the stack trace if a cause was logged.

-

 

-

%t

The name of the callers thread.

-

 

-

%v

The version of the module. A precision specifier can be used to alter the dot delimited module version.

-

 

-

%x

The nested diagnostic context entries. A precision specifier can be used to specify the number of entries to print.

-
-
%x      value1.value2.value3
-%x{1}   value3
-%x{2}   value2.value3
-
-

%X

The mapped diagnostic context entry. The entry must be followed by the key for the MDC entry.

-

%X{key}

-

%z

Allows the timezone to be overridden when formatting the timestamp. This must precede the - timestamp.

-

%z{GMT}%d{yyyy-MM-dd’T’HH:mm:ssSSSXXX}

-

%#

Allows a system property to be appended to the log message.

-

%#{jboss.server.name}

-

%$

Allows a system property to be appended to the log message.

-

%${jboss.server.name}

-

%%

Escapes the % symbol.

-

 

-
-
-

You can also modify the format by placing the optional format modifier between the percent sign and the symbol.

-
- - ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 2. Format Modifier Examples
ModifierLeft JustifyMin WidthMax WidthExample

[%20c]

false

20

 

-
-
[  org.jboss.example]
-
-

[%-20c]

true

20

 

-
-
[org.jboss.example  ]
-
-

[%.10c]

 

 

10

-
-
[org.jboss]
-
-

[%20.30c]

false

20

30

-
-
[  org.jboss.example]
-
-

[%-20.30c]

true

20

30

-
-
[org.jboss.example  ]
-
-
-
-
Examples
-
-
Simple Pattern Formatter
-
-
/subsystem=logging/pattern-formatter=DEFAULT:add(pattern="%d{HH:mm:ssSSSXXX} %-5p [%c] (%t) %10.10#{jboss.node.name} %s%e%n")
-
-
-
-
Color Pattern Formatter
-
-
/subsystem=logging/pattern-formatter=DEFAULT:add(color-map="info:cyan,warn:brightyellow,error:brightred,debug:magenta", pattern="%K{level}%d{yyyy-MM-dd'T'HH:mm:ssSSSXXX} %-5p [%c] (%t) %s%e%n")
-
-
-
-
-
-
XML Formatter
-
-

A formatter used to format log messages in XML.

-
-
-
Examples
-
-
Simple XML Formatter
-
-
/subsystem=logging/xml-formatter=xml:add(pretty-print=true, exception-output-type=detailed-and-formatted)
-
-
-
-
Key Overrides XML Formatter
-
-
/subsystem=logging/xml-formatter=xml:add(pretty-print=true, print-namespace=true, namespace-uri="urn:custom:1.0", key-overrides={message=msg, record=logRecord, timestamp=date}, print-details=true)
-
-
-
-
-
-
Custom Formatter
-
-

A custom formatter to be used with handlers. Note that most log records are formatted in the printf format. Formatters -may require invocation of the org.jboss.logmanager.ExtLogRecord#getFormattedMessage() for the message to be properly -formatted.

-
-
-
Examples
-
-
-
/subsystem=logging/custom-formatter=custom:add(class=org.jboss.example.CustomFormatter, module=org.jboss.example, properties={prettyPrint=true,printDetails=true,bufferSize=1024})
-
-
-
-
-
-
-

7.5.8. Handlers

-
-
Overview
-
-

Handlers define how log messages are recorded. If a message is said to be -{oracle-javadocs}/java.logging/java/util/logging/Logger.html#isLoggable-java.util.logging.Level-[loggable] by a -logger the message is then processed by the log handler.

-
-
-

The following are the available handlers for WildFly Full;

-
- -
-
async-handler
-
-

An async-handler is a handler that asynchronously writes log messages to it’s child handlers. This type of -handler is generally used to wrap other handlers that take a substantial time to write messages.

-
-
-
-
console-handler
-
-

A console-handler is a handler that writes log messages to the console. Generally this writes to stdout, -but can be set to write to stderr.

-
-
-
-
custom-handler
-
-

A custom-handler allows you to define any handler as a handler that -can be assigned to a logger or a async-handler.

-
-
-
-
file-handler
-
-

A file-handler is a handler that writes log messages to the specified file.

-
-
-
-
periodic-rotating-file-handler
-
-

A periodic-rotating-file-handler is a handler that writes log messages to the specified file. The file rotates on -the date pattern specified in the suffix attribute. The suffix must be a valid pattern recognized by the -java.text.SimpleDateFormat and must not rotate on seconds or -milliseconds.

-
-
- - - - - -
- - -The rotate happens before the next message is written by the handler. -
-
-
-
-
periodic-size-rotating-file-handler
-
-

A periodic-size-rotating-file-handler is a handler that writes log messages to the specified file. The file rotates on -the date pattern specified in the suffix attribute or the rotate-size attribute. The suffix must be a valid -pattern recognized by the java.text.SimpleDateFormat and must -not rotate on seconds or milliseconds.

-
-
-

The max-backup-index works differently on this handler than the -size-rotating-file-handler. The date suffix of the file to be rotated must be the -same as the current expected suffix. For example with a suffix pattern of yyyy-MM and a rotate-size of 10m the -file will be rotated with the current month each time the 10Mb size is reached.

-
-
- - - - - -
- - -The rotate happens before the next message is written by the handler. -
-
-
-
-
size-rotating-file-handler
-
-

A size-rotating-file-handler is a handler that writes log messages to the specified file. The file rotates when -the file size is greater than the rotate-size attribute. The rotated file will be kept and the index appended -to the name moving previously rotated file indexes up by 1 until the max-backup-index is reached. Once the -max-backup-index is reached, the indexed files will be overwritten.

-
-
- - - - - -
- - -The rotate happens before the next message is written by the handler. -
-
-
-
-
socket-handler
-
-

A socket-handler is a handler which sends messages over a socket. This can be a TCP or UDP socket and must be -defined in a socket binding group under the local-destination-outbound-socket-binding or -remote-destination-outbound-socket-binding resource.

-
-
-

During the boot logging messages will be queued until the socket binding is configured and the logging subsystem is -added. This is important to note because setting the level of the handler to DEBUG or TRACE could result in -large memory consumption during boot.

-
-
- - - - - -
- - -
-

A server booted in --admin-only mode will discard messages rather than send them over a socket.

-
-
-
-
-
CLI Example
-
-
# Add the socket binding
-/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=log-server:add(host=localhost, port=4560)
-# Add a json-formatter
-/subsystem=logging/json-formatter=json:add
-# Add the socket handler
-/subsystem=logging/socket-handler=log-server-handler:add(named-formatter=json, level=INFO, outbound-socket-binding-ref=log-server)
-# Add the handler to the root logger
-/subsystem=logging/root-logger=ROOT:add-handler(name=log-server-handler)
-
-
-
-
Add a UDP Example
-
-
/subsystem=logging/socket-handler=log-server-handler:add(named-formatter=json, level=INFO, outbound-socket-binding-ref=log-server, protocol=UDP)
-
-
-
-
Add SSL Example
-
-
# Add the socket binding
-/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=log-server:add(host=localhost, port=4560)
-
-# Add the Elytron key store
-/subsystem=elytron/key-store=log-server-ks:add(path=/path/to/keystore.pkcs12, type=PKCS12, credential-reference={clear-text=mypassword})
-# Add the Elytron trust manager
-/subsystem=elytron/trust-manager=log-server-tm:add(key-store=log-server-ks)
-# Add the client SSL context
-/subsystem=elytron/client-ssl-context=log-server-context:add(trust-manager=log-server-tm, protocols=["TLSv1.2"])
-
-# Add a json-formatter
-/subsystem=logging/json-formatter=json:add
-# Add the socket handler
-/subsystem=logging/socket-handler=log-server-handler:add(named-formatter=json, level=INFO, outbound-socket-binding-ref=log-server, protocol=SSL_TCP, ssl-context=log-server-context)
-# Add the handler to the root logger
-/subsystem=logging/root-logger=ROOT:add-handler(name=log-server-handler)
-
-
-
- - - - - -
- - -Wrapping a socket-handler in a async-handler may improve performance. -
-
-
-
-
syslog-handler
-
-

A syslog-handler is a handler that writes to a syslog server via UDP. The handler support -RFC3164 or RFC5424 formats.

-
-
- - - - - -
- - -
-

The syslog-handler is missing some configuration properties that may be -useful in some scenarios like setting a formatter. Use the -org.jboss.logmanager.handlers.SyslogHandler in module -org.jboss.logmanager as a -custom-handler to exploit -these benefits. Additional attributes will be added at some point so -this will no longer be necessary.

-
-
-
-
-
-
-
-

7.5.9. How To

-
-
How do I add a log category?
-
-
-
/subsystem=logging/logger=com.your.category:add
-
-
-
-
-
How do I change a log level?
-
-

To change a handlers log level:

-
-
-
-
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=DEBUG)
-
-
-
-

Changing the level on a log category is the same:

-
-
-
-
/subsystem=logging/logger=com.your.category:write-attribute(name=level,value=ALL)
-
-
-
-
-
How do I log my applications messages to their own file?
-
-
    -
  1. -

    Create a file handler. There are 3 different types of file handlers -to choose from; file-handler, periodic-rotating-file-handler and -size-rotating-file-handler. In this example we’ll just use a simple -file-handler.

    -
    -
    -
    /subsystem=logging/file-handler=fh:add(level=INFO, file={"relative-to"=>"jboss.server.log.dir", "path"=>"fh.log"}, append=false, autoflush=true)
    -
    -
    -
  2. -
  3. -

    Now create the log category.

    -
    -
    -
    /subsystem=logging/logger=org.your.company:add(use-parent-handlers=false,handlers=["fh"])
    -
    -
    -
  4. -
-
-
-
-
How do I use my own log4j2 implementation?
-
-

If you want to use your own log4j2 implementation, such as log4j-core, then you need to do the following two steps.

-
-
-
    -
  1. -

    Disable the adding of the logging dependencies to all your deployments with the -add-logging-api-dependencies attribute OR exclude the org.apache.logging.log4j.api -in a jboss-deployment-structure.xml.

    -
  2. -
  3. -

    Then you would need to include the log4j-api and a log4j2 implementation library in your deployment.

    -
  4. -
-
-
- - - - - -
- - -This only works for logging in your deployment. Server logs will continue to use the logging subsystem - configuration. -
-
-
-
-
-

7.5.10. Loggers

-
-

WIP

-
-
- - - - - -
- - -This is still a work in progress. Please feel free to edit any mistakes -you find -
-
-
-
Overview
-
-

Loggers are used to log messages. A logger is defined by a category -generally consisting of a package name or a class name.

-
-
-

A logger is the first step to determining if a messages should be logged -or not. If a logger is defined with a level, the level of the message -must be greater than the level defined on the logger. The filter is then -checked next and the rules of the filter will determine whether or not -the messages is said to be loggable.

-
-
-
Logger Resource
-
-

A logger resource uses the path subsystem=logging/logger=$category -where $category is the of the logger. For example to a logger named -org.wildfly.example would have a resource path of -subsystem=logging/logger=org.wildfly.example.

-
-
-

A logger as 4 writeable attributes;

-
-
- -
-
- - - - - -
- - -You may notice that the category and filter attributes are missing. -While filter is writable it may be deprecated and removed in the -future. Both attributes are still on the resource for legacy reasons. -
-
-
-filter-spec -
-

The filter-spec attribute is an expression based string to define -filters for the logger.

-
-
- - - - - -
- - -Filters on loggers are not inherited. -
-
-
-
-handlers -
-

The handlers attribute is a list of handler names that should be -attached to the logger. If the -use-parent-handlers -attribute is set to true and the log messages is determined to be -loggable, parent loggers will continue to be processed.

-
-
-
-level -
-

The level attribute allows the minimum level to allow messages to be -logged at for the logger.

-
-
-
-use-parent-handlers -
-

The use-parent-handlers attribute is a boolean attribute to determine -whether or not parent loggers should also process the log message.

-
-
-
-
-
Root Logger Resource
-
-

The root-logger is similar to a -#Logger Resource only it has no -category and it’s name is must be ROOT.

-
-
-
-
Logger Hierarchy
-
-

A logger hierarchy is defined by it’s category. The category is a . -(dot) delimited string generally consisting of the package name or a -class name. For example the logger org.wildfly is the parent logger of -org.wildfly.example.

-
-
-
-
-
-

7.5.11. Logging Filters

-
-

Filters are used to add fine grained control over a log message. A filter can be assigned to a logger or log handler. -See the Filter documentation for details on filters.

-
-
-
Filter
-
-

The filter resource allows a custom filter to be used. The custom filter must reside in a module and implement the -Filter interface.

-
-
-

It’s generally suggested to add filters to a handler. By default loggers do no inherit filters. This means if a filter -is placed on a logger named org.jboss.as.logging is only checked if the logger name is equal to org.jboss.as.logging.

-
-
-
Examples
-
-
Adding a filter
-
-
/subsystem=logging/filter=myFilter:add(class=org.jboss.example.MyFilter, module=org.jboss.example, properties={matches="true"}, constructor-properties={pattern="*.WFLYLOG.*"))
-
-
-
-
Nesting a filter
-
-
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=filter-spec, value=not(myFilter))
-
-
-
-
-
-
Filter Expressions
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Filter TypeExpressionDescriptionParameter(s)Examples

accept

accept

Accepts all log messages.

None

accept

deny

deny

Denies all log messages.

None

deny

not

not(filterExpression)

Accepts a filter as an argument and inverts -the returned value.

The expression takes a single filter for it’s -argument.

not(match("JBAS"))

all

all(filterExpressions)

A filter consisting of several filters in -a chain. If any filter find the log message to be unloggable, the -message will not be logged and subsequent filters will not be checked.

The expression takes a comma delimited list of filters for it’s -argument.

all(match("JBAS"), match("WELD"))

any

any(filterExpressions)

A filter consisting of several filters in -a chain. If any filter fins the log message to be loggable, the message -will be logged and the subsequent filters will not be checked.

The -expression takes a comma delimited list of filters for it’s argument.

any(match("JBAS"), match("WELD"))

levelChange

levelChange(level)

A filter which modifies the log record -with a new level.

The expression takes a single string based level for -it’s argument.

levelChange(WARN)

levels

levels(levels)

A filter which includes log messages with a -level that is listed in the list of levels.

The expression takes a -comma delimited list of string based levels for it’s argument.

levels(DEBUG, INFO, WARN, ERROR)

levelRange

levelRange([minLevel,maxLevel])

A filter which logs -records that are within the level range.

The filter expression uses a -"[" to indicate a minimum inclusive level and a "]" to indicate a -maximum inclusive level. Otherwise use "(" or ")" respectively indicate -exclusive. The first argument for the expression is the minimum level -allowed, the second argument is the maximum level allowed.

minimum -level must be less than ERROR and the maximum level must be greater than -DEBUGlevelRange(ERROR, DEBUG) minimum level must be less than or equal -to ERROR and the maximum level must be greater than -DEBUGlevelRange[ERROR, DEBUG) minimum level must be less than or equal -to ERROR and the maximum level must be greater or equal to -INFOlevelRange[ERROR, INFO]

match

match("pattern")

A regular-expression based filter. The raw -unformatted message is used against the pattern.

The expression takes a -regular expression for it’s argument. match("JBAS\d+")

substitute

substitute("pattern", "replacement value")

A filter which -replaces the first match to the pattern with the replacement value.

The -first argument for the expression is the pattern the second argument is -the replacement text.

substitute("JBAS", "EAP")

substituteAll

substituteAll("pattern", "replacement value")

A filter -which replaces all matches of the pattern with the replacement value.

The first argument for the expression is the pattern the second -argument is the replacement text.

substituteAll("JBAS", "EAP")

filterName

myCustomFilter

A custom filter which is defined on a filter resource.

None

myCustomFilter
-any(myFilter1, myFilter2, myFilter3)

-
-
-
-
-

7.6. EJB3 subsystem configuration guide

-
-

This page lists the options that are available for configuring the EJB -subsystem.

-
-
-

A complete example of the config is shown below, with a full explanation -of each

-
-
-
-
<subsystem xmlns="urn:jboss:domain:ejb3:10.0">
-  <session-bean>
-    <stateless>
-      <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
-    </stateless>
-    <stateful default-session-timeout="600000" default-access-timeout="5000" cache-ref="distributable" passivation-disabled-cache-ref="simple"/>
-    <singleton default-access-timeout="5000"/>
-  </session-bean>
-  <mdb>
-    <resource-adapter-ref resource-adapter-name="hornetq-ra"/>
-    <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
-  </mdb>
-  <entity-bean>
-    <bean-instance-pool-ref pool-name="entity-strict-max-pool"/>
-  </entity-bean>
-    <pools>
-    <bean-instance-pools>
-      <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
-      <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
-      <strict-max-pool name="entity-strict-max-pool" max-pool-size="100" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
-    </bean-instance-pools>
-  </pools>
-  <caches>
-    <simple-cache name="simple"/>
-    <distributable-cache name="distributable" bean-management="default"/>
-  </caches>
-  <async thread-pool-name="default"/>
-  <timer-service thread-pool-name="default" default-data-store="default-file-store">
-    <data-stores>
-      <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>
-    </data-stores>
-  </timer-service>
-  <remote connectors="remoting-connector" thread-pool-name="default">
-    <profiles>
-        <profile name="profile" exclude-local-receiver="false" local-receiver-pass-by-value="false">
-          <remoting-ejb-receiver name="receiver" outbound-connection-ref="remote-ejb-connection"/>
-          <remote-http-connection name="connection" uri="http://localhost:8180/wildfly-services"/>
-          <static-ejb-discovery>
-            <module uri="http://localhost:8180/wildfly-services" module-name="foo" app-name="bar" distinct-name="baz"/>
-          </static-ejb-discovery>
-        </profile>
-    </profiles>
-  </remote>
-  <thread-pools>
-    <thread-pool name="default">
-      <max-threads count="10"/>
-      <core-threads count="10"/>
-      <keepalive-time time="60" unit="seconds"/>
-    </thread-pool>
-  </thread-pools>
-  <iiop enable-by-default="false" use-qualified-name="false"/>
-  <in-vm-remote-interface-invocation pass-by-value="false"/> <!-- Warning see notes below about possible issues -->
-</subsystem>
-
-
-
-

7.6.1. <session-bean>

-
-
<stateless>
-
-

This element is used to configure the instance pool that is used by -default for stateless session beans. If it is not present stateless -session beans are not pooled, but are instead created on demand for -every invocation. The instance pool can be overridden on a per -deployment or per bean level using jboss-ejb3.xml or the -org.jboss.ejb3.annotation.Pool annotation. The instance pools -themselves are configured in the <pools> element.

-
-
-
-
<stateful>
-
-

This element is used to configure Stateful Session Beans.

-
-
-
    -
  • -

    default-session-timeout This optional attribute specifies the default -amount of time in milliseconds a stateful session bean can remain idle -before it is eligible for removal by the container. -It can be overridden via ejb-jar.xml deployment descriptor or via -jakarta.ejb.StatefulTimeout annotation.

    -
  • -
  • -

    default-access-timeout This attribute specifies the default time -concurrent invocations on the same bean instance will wait to acquire -the instance lock. It can be overridden via the deployment descriptor or -via the jakarta.ejb.AccessTimeout annotation.

    -
  • -
  • -

    cache-ref This attribute is used to set the default cache for -beans which require a passivating cache. It can be overridden by jboss-ejb3.xml, or via -the org.jboss.ejb3.annotation.Cache annotation.

    -
  • -
  • -

    non-passivating-cache-ref This attribute is used to set the default cache -for beans which require a non-passivating cache.

    -
  • -
-
-
-
-
<singleton>
-
-

This element is used to configure Singleton Session Beans.

-
-
-
    -
  • -

    default-access-timeout This attribute specifies the default time -concurrent invocations will wait to acquire the instance lock. It can be -overridden via the deployment descriptor or via the -jakarta.ejb.AccessTimeout annotation.

    -
  • -
-
-
-
-
-

7.6.2. <mdb>

-
-
<resource-adaptor-ref>
-
-

This element sets the default resource adaptor for Message Driven Beans.

-
-
-
-
<bean-instance-pool-ref>
-
-

This element is used to configure the instance pool that is used by -default for Message Driven Beans. If it is not present they are not -pooled, but are instead created on demand for every invocation. The -instance pool can be overridden on a per deployment or per bean level -using jboss-ejb3.xml or the org.jboss.ejb3.annotation.Pool -annotation. The instance pools themselves are configured in the -<pools> element.

-
-
-
-
-

7.6.3. <entity-bean>

-
-

This element is used to configure the behavior for EJB2 EntityBeans.

-
-
-
<bean-instance-pool-ref>
-
-

This element is used to configure the instance pool that is used by -default for Entity Beans. If it is not present they are not pooled, but -are instead created on demand for every invocation. The instance pool -can be overridden on a per deployment or per bean level using -jboss-ejb3.xml or the org.jboss.ejb3.annotation.Pool annotation. The -instance pools themselves are configured in the <pools> element.

-
-
-
-
-

7.6.4. <pools>

-
-
<bean-instance-pools>
-
-

This element is used to configure pools used by stateless session, message driven beans and entity beans.

-
-
-
<strict-max-pool>
-
-

Each pool is configured using strict-max-pool element.

-
-
-
    -
  • -

    name Name of the pool.

    -
  • -
  • -

    max-pool-size Configured maximum number of bean instances that the pool can hold at a given point in time.

    -
  • -
  • -

    instance-acquisition-timeout The maximum amount of time to wait for a bean instance to be available from the pool.

    -
  • -
  • -

    instance-acquisition-timeout-unit The instance acquisition timeout unit

    -
  • -
-
-
-
-
-
-

7.6.5. <caches>

-
-

This element is used to define named cache factories to support the persistence of SFSB session states. -Cache factories may be passivating (an in-memory cache with the ability to passivate to persistant store -the session states of beans not recently used and then activate them when needed) or non-passivating -(an in-memory cache only). Default values for passivating and non-passivating caches are specified -in the <stateful> element mentioned above. A SFSB may override the named cache used to store its session states -via the @Cache annotation (in its class definition) or via a corresponding deployment descriptor.

-
-
-
<simple-cache>
-
-

This element defines a non-passivating (in-memory only) cache factory for storing session states of a SFSB.

-
-
-
-
<distributable-cache>
-
-

This element defines a passivating cache factory (in-memory plus passivation to persistent store) for storing -session states of a SFSB. A passivating cache factory relies on a bean-management provider to configure -the passivation mechanism and the persistent store that it uses.

-
-
-
    -
  • -

    bean-management This attribute specifies the bean-management provider to be used to -support passivation of cache entries. The bean-management provider is defined and configured -in the distributable-ejb subsystem (see the High Availability Guide). -If the attribute is non-defined, the default bean management provider -defined in the distributable-ejb subsystem is used.

    -
  • -
-
-
-
-
-

7.6.6. <async>

-
-

This element enables async EJB invocations. It is also used to specify -the thread pool that these invocations will use.

-
-
-
-

7.6.7. <timer-service>

-
-

This element enables the EJB timer service. It is also used to specify -the thread pool that these invocations will use.

-
-
-
<data-store>
-
-

This is used to configure the directory that persistent timer -information is saved to.

-
-
-
-
-

7.6.8. <remote>

-
-

This element is used to enable remote EJB invocations. In other words, it allows a remote EJB client -application to make invocations on Jakarta Enterprise beans deployed on the server.

-
-
-

It specifies the following attributes:

-
-
-
    -
  • -

    connectors specifies a space-separated list of remoting connectors to use (as defined in the remoting -subsystem configuration) for accepting invocations.

    -
  • -
  • -

    thread-pool specifies a thread pool to use for processing incoming remote invocations

    -
  • -
-
-
-
<profile>
-
-

A remote profile specifies a configuration of remote invocations that can -be referenced by many deployments. EJBs that are meant to be invoked can -be discovered in either a static or a dynamic way.

-
-
-

Static discovery decides which remote node to connect to based on the information -provided by the administrator.

-
-
-

Dynamic discovery is responsible for monitoring the available EJBs on all the -nodes to which connections are configured and decides which remote node to -connect to based on the gathered data.

-
-
-
    -
  • -

    name the name of the profile

    -
  • -
  • -

    exclude-local-receiver If set, no local receiver is used in this profile

    -
  • -
  • -

    local-receiver-pass-by-value If set, local receiver will pass ejb beans by value

    -
  • -
-
-
-
<static-ejb-discovery>
-
-

Static ejb discovery allows the administrator to explicitly specify on which remote nodes -given EJBs are located. The module tag is used to define it:

-
-
-
    -
  • -

    module-name the name of EJB module

    -
  • -
  • -

    app-name the name of EJB app

    -
  • -
  • -

    distinct-name the distinct name EJB

    -
  • -
  • -

    uri the address on which given EJB is located

    -
  • -
-
-
-
-
<remoting-ejb-receiver>
-
-

The remoting-ejb-receiver tag is used to define dynamic discovery based on -the remoting protocol:

-
-
-
    -
  • -

    name name of the remote connection

    -
  • -
  • -

    outbound-connection-ref reference to outbound connection defined in -the remoting subsystem

    -
  • -
  • -

    connection-timeout the timeout of the connection

    -
  • -
-
-
-
-
<remote-http-connection>
-
-

The remote-http-connection tag is used to define dynamic discovery based on -HTTP protocol:

-
-
-
    -
  • -

    name name of the HTTP connection

    -
  • -
  • -

    uri URI of the connection

    -
  • -
-
-
-
-
-
-

7.6.9. <thread-pools>

-
-

This is used to configure the thread pools used by async, timer and -remote invocations.

-
-
-
    -
  • -

    max-threads specifies the maximum number of threads in the thread pool. -It is a required attribute and defaults to 10.

    -
  • -
  • -

    core-threads specifies the number of core threads in the thread pool. -It is an optional attribute and defaults to max-threads value.

    -
  • -
  • -

    keepalive-time specifies the amount of time that non-core threads can -stay idle before they become eligible for removal. It is an optional -attribute and defaults to 60 seconds.

    -
  • -
-
-
-
-

7.6.10. <iiop>

-
-

This is used to enable IIOP (i.e. CORBA) invocation of EJB’s. If this -element is present then the JacORB subsystem must also be installed. It -supports the following two attributes:

-
-
-
    -
  • -

    enable-by-default If this is true then all EJB’s with EJB2.x home -interfaces are exposed via IIOP, otherwise they must be explicitly -enabled via jboss-ejb3.xml.

    -
  • -
  • -

    use-qualified-name If this is true then EJB’s are bound to the corba -naming context with a binding name that contains the application and -modules name of the deployment (e.g. myear/myejbjar/MyBean), if this is -false the default binding name is simply the bean name.

    -
  • -
-
-
-
-

7.6.11. <in-vm-remote-interface-invocation>

-
-

By default remote interface invocations use pass by value, as required -by the EJB spec. This element can use used to enable pass by reference, -which can give you a performance boost. Note WildFly will do a shallow -check to see if the caller and the EJB have access to the same class -definitions, which means if you are passing something such as a -List<MyObject>, WildFly only checks the List to see if it is the same -class definition on the call & EJB side. If the top level class -definition is the same, JBoss will make the call using pass by -reference, which means that if MyObject or any objects beneath it are -loaded from different classloaders, you would get a ClassCastException. -If the top level class definitions are loaded from different -classloaders, JBoss will use pass by value. JBoss cannot do a deep check -of all of the classes to ensure no ClassCastExceptions will occur -because doing a deep check would eliminate any performance boost you -would have received by using call by reference. It is recommended that -you configure pass by reference only on callers that you are sure will -use the same class definitions and not globally. This can be done via a -configuration in the jboss-ejb-client.xml as shown below.

-
-
-

To configure a caller/client use pass by reference, you configure your -top level deployment with a META-INF/jboss-ejb-client.xml containing:

-
-
-
-
<jboss-ejb-client xmlns="urn:jboss:ejb-client:1.0">
-    <client-context>
-        <ejb-receivers local-receiver-pass-by-value="false"/>
-    </client-context>
-</jboss-ejb-client>
-
-
-
-
-

7.6.12. <server-interceptors>

-
-

This element configures a number of server-side interceptors which can be -configured without changing the deployments.

-
-
-

Each interceptor is configured in <interceptor> tag which contains the -following fields:

-
-
-
    -
  • -

    module - the module in which the interceptor is defined

    -
  • -
  • -

    class - the class which implements the interceptor

    -
  • -
-
-
-

In order to use server interceptors you have to create a module that implements -them and place it into ${WILDFLY_HOME}/modules directory.

-
-
-

Interceptor implementations are POJO classes which use -jakarta.interceptor.AroundInvoke and jakarta.interceptor.AroundTimeout to -mark interceptor methods.

-
-
-

Sample configuration:

-
-
-
-
<server-interceptors>
-        <interceptor module="org.foo:FooInterceptor:1.0" class="org.foo.FooInterceptor"/>
-</server-interceptors>
-
-
-
-

Sample interceptor implementation:

-
-
-
-
package org.foo;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.interceptor.AroundInvoke;
-import jakarta.interceptor.InvocationContext;
-
-public class FooInterceptor {
-
-    @AroundInvoke
-    public Object bar(final InvocationContext invocationContext) throws Exception {
-        return invocationContext.proceed();
-    }
-}
-
-
-
-
-

7.6.13. <client-interceptors>

-
-

This element configures a number of client-side interceptors which can be -configured without changing the deployments.

-
-
-

Each interceptor is configured in <interceptor> tag which contains the -following fields:

-
-
-
    -
  • -

    module - the module in which the interceptor is defined

    -
  • -
  • -

    class - the class which implements the interceptor

    -
  • -
-
-
-

In order to use server interceptors you have to create a module that implements -them and place it into ${WILDFLY_HOME}/modules directory.

-
-
-

Interceptor implementations must implement org.jboss.ejb.client.EJBClientInterceptor -interface.

-
-
-

Sample configuration:

-
-
-
-
<client-interceptors>
-        <interceptor module="org.foo:FooInterceptor:1.0" class="org.foo.FooInterceptor"/>
-</client-interceptors>
-
-
-
-

Sample interceptor implementation:

-
-
-
-
package org.foo;
-
-import org.jboss.ejb.client.EJBClientInterceptor;
-import org.jboss.ejb.client.EJBClientInvocationContext;
-
-public class FooInterceptor implements EJBClientInterceptor {
-
-    @Override
-    public void handleInvocation(EJBClientInvocationContext context) throws Exception {
-        context.sendRequest();
-    }
-
-    @Override
-    public Object handleInvocationResult(EJBClientInvocationContext context) throws Exception {
-        return context.getResult();
-    }
-}
-
-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-

7.7. Undertow subsystem configuration

-
-
-
-

Web subsystem was replaced in WildFly 8 with Undertow.

-
-
-
-
-

There are two main parts to the undertow subsystem, which are server and -Servlet container configuration, as well as some ancillary items. -Advanced topics like load balancing and failover are covered on the -"High Availability Guide". The default configuration does is suitable -for most use cases and provides reasonable performance settings.

-
-
-

Required extension:

-
-
-
-
<extension module="org.wildfly.extension.undertow" />
-
-
-
-

Basic subsystem configuration example:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:undertow:13.0">
-        <buffer-cache name="default" buffer-size="1024" buffers-per-region="1024" max-regions="10"/>
-        <server name="default-server">
-            <http-listener name="default" socket-binding="http" />
-            <host name="default-host" alias="localhost">
-                <location name="/" handler="welcome-content" />
-            </host>
-        </server>
-        <servlet-container name="default" default-buffer-cache="default" stack-trace-on-error="local-only" >
-            <jsp-config/>
-            <persistent-sessions/>
-        </servlet-container>
-        <handlers>
-            <file name="welcome-content" path="${jboss.home.dir}/welcome-content" directory-listing="true"/>
-        </handlers>
-    </subsystem>
-
-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

default-server

the default server to use for deployments

default-virtual-host

the default virtual host to use for deployments

default-servlet-container

the default servlet container to use for deployments

instance-id

the id of Undertow. Defaults to "${jboss.node.name}" if undefined

obfuscate-session-route

set this to "true" to indicate the -instance-id should be obfuscated in routing. This prevents instance-id from being sent across -HTTP connections when serving remote requests with the HTTP invoker.

default-security-domain

the default security domain used by web deployments

statistics-enabled

set this to true to enable statistics gathering for Undertow subsystem

-
- - - - - -
- - -
-

When setting obfuscate-session-route to "true", the server’s -name is used as a salt in the hashing algorithm that obfuscates the value of instance-id. -For that reason, it is strongly advised that the value of the server be changed from "default-server" to something -else, or else it would be easy to reverse engineer the obfuscated route to its original value, using "default-server" -bytes as the salt.

-
-
-
-
-

Dependencies on other subsystems:

-
-
-

IO Subsystem

-
-
-

7.7.1. Buffer cache configuration

-
-

The buffer cache is used for caching content, such as static files. -Multiple buffer caches can be configured, which allows for separate -servers to use different sized caches.

-
-
-

Buffers are allocated in regions, and are of a fixed size. If you are -caching many small files then using a smaller buffer size will be -better.

-
-
-

The total amount of space used can be calculated by multiplying the -buffer size by the number of buffers per region by the maximum number of -regions.

-
-
-
-
  <buffer-caches>
-    <buffer-cache name="default" buffer-size="1024" buffers-per-region="1024" max-regions="10"/>
-  </buffer-caches>
-
-
- ---- - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

buffer-size

The size of the buffers. Smaller buffers allow space to be -utilised more effectively

buffers-per-region

The numbers of buffers per region

max-regions

The maximum number of regions. This controls the maximum -amount of memory that can be used for caching

-
-
-

7.7.2. Server configuration

-
-

A server represents an instance of Undertow. Basically this consists of -a set of connectors and some configured handlers.

-
-
-
-
<server name="default-server" default-host="default-host" servlet-container="default" >
-
-
- ---- - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

name

the name of this server

default-host

the virtual host that will be used if an incoming request -as no Host: header

servlet-container

the servlet container that will be used by this -server, unless is is explicitly overriden by the deployment

-
-
Connector configuration
-
-

Undertow provides HTTP, HTTPS and AJP connectors, which are configured -per server.

-
-
-
Common settings
-
-

The following settings are common to all connectors:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

allow-encoded-slash

If a request comes in with encoded / characters (i.e. %2F), will these be decoded.

allow-equals-in-cookie-value

If this is true then Undertow will allow non-escaped equals characters in unquoted cookie values. -Unquoted cookie values may not contain equals characters. If present the value ends before the -equals sign. The remainder of the cookie value will be dropped.

allow-unescaped-characters-in-url

If this is true Undertow will accept non-encoded characters that are disallowed by the URI specification. -This defaults to false, and in general should not be needed as most clients correctly encode characters. -Note that setting this to true can be considered a security risk, as allowing non-standard characters can -allow request smuggling attacks in some circumstances.

always-set-keep-alive

If this is true then a Connection: keep-alive header will be added to responses, even when it is not -strictly required by the specification.

buffer-pipelined-data

If we should buffer pipelined requests.

buffer-pool

The listeners buffer pool

certificate-forwarding

If certificate forwarding should be enabled. If this is enabled then the listener will take the certificate -from the SSL_CLIENT_CERT attribute. This should only be enabled if behind a proxy, and the proxy is -configured to always set these headers.

decode-url

If this is true then the parser will decode the URL and query parameters using the selected character -encoding (UTF-8 by default). If this is false they will not be decoded. This will allow a later handler to -decode them into whatever charset is desired.

disallowed-methods

A comma separated list of HTTP methods that are not allowed

enable-http2

Enables HTTP2 support for this listener

enabled (Deprecated)

If the listener is enabled

http2-enable-push

If server push is enabled for this connection

http2-header-table-size

The size of the header table used for HPACK compression, in bytes. This amount of memory will be allocated -per connection for compression. Larger values use more memory but may give better compression.

http2-initial-window-size

The flow control window size that controls how quickly the client can send data to the server

http2-max-concurrent-streams

The maximum number of HTTP/2 streams that can be active at any time on a single connection

http2-max-frame-size

The max HTTP/2 frame size

http2-max-header-list-size

The maximum size of request headers the server is prepared to accept

max-buffered-request-size

Maximum size of a buffered request, in bytes. Requests are not usually buffered, the most common case is -when performing SSL renegotiation for a POST request, and the post data must be fully buffered in order -to perform the renegotiation.

max-connections

The maximum number of concurrent connections. Only values greater than 0 are allowed. For unlimited -connections simply undefine this attribute value.

max-cookies

The maximum number of cookies that will be parsed. This is used to protect against hash vulnerabilities.

max-header-size

The maximum size of a http request header, in bytes.

max-headers

The maximum number of headers that will be parsed. This is used to protect against hash vulnerabilities.

max-parameters

The maximum number of parameters that will be parsed. This is used to protect against hash vulnerabilities. -This applies to both query parameters, and to POST data, but is not cumulative (i.e. you can potentially -have max parameters * 2 total parameters).

max-post-size

The maximum size of a post that will be accepted, in bytes.

no-request-timeout

The length of time in milliseconds that the connection can be idle before it is closed by the container.

proxy-address-forwarding

Enables handling of x-forwarded-host header (and other x-forwarded-* headers) and use this header information -to set the remote address. This should only be used behind a trusted proxy that sets these headers otherwise -a remote user can spoof their IP address.

proxy-protocol

If this is true then the listener will use the proxy protocol v1, as defined by -https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt. This option MUST only be enabled for listeners -that are behind a load balancer that supports the same protocol.

read-timeout

Configure a read timeout for a socket, in milliseconds. If the given amount of time elapses without a -successful read taking place, the socket’s next read will throw a {@link ReadTimeoutException}.

receive-buffer

The receive buffer size, in bytes.

record-request-start-time

If this is true then Undertow will record the request start time, to allow for request time to be logged. -This has a small but measurable performance impact

request-parse-timeout

The maximum amount of time (in milliseconds) that can be spent parsing the request

require-host-http11

Require that all HTTP/1.1 requests have a 'Host' header, as per the RFC. IF the request does not include -this header it will be rejected with a 403.

resolve-peer-address

Enables host dns lookup

rfc6265-cookie-validation

If cookies should be validated to ensure they comply with RFC6265.

secure

If this is true then requests that originate from this listener are marked as secure, even if the request -is not using HTTPS.

send-buffer

The send buffer size, in bytes.

socket-binding

The listener socket binding

tcp-backlog

Configure a server with the specified backlog.

tcp-keep-alive

Configure a channel to send TCP keep-alive messages in an implementation-dependent manner.

url-charset

URL charset

worker

The listeners XNIO worker

write-timeout

Configure a write timeout for a socket, in milliseconds. If the given amount of time -elapses without a successful write taking place, the socket’s next write will throw -a {@link WriteTimeoutException}.

-
-
-
HTTP Connector
-
-
-
<http-listener name="default" socket-binding="http"  />
-
-
- ---- - - - - - - - - - - - - -
AttributeDescription

redirect-socket

If this listener is supporting non-SSL requests, and a request is received for which a matching -<security-constraint> requires SSL transport, undertow will automatically redirect the request to the -socket binding port specified here.

-
-
-
HTTPS listener
-
-

Https listener provides secure access to the server. The most important -configuration option is ssl-context which cross references a pre-configured -SSL Context instance.

-
-
-
-
<https-listener name="https" socket-binding="https" ssl-context="applicationSSC" enable-http2="true"/>
-
-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

enable-spdy (Deprecated)

Enables SPDY support for this listener. This has been deprecated and has no effect, HTTP/2 should be used instead

enabled-cipher-suites (Deprecated)

Where an SSLContext is referenced it should be configured with the cipher suites to be supported.

enabled-protocols (Deprecated)

Configures SSL protocols

security-realm (Deprecated)

The listeners security realm

ssl-context

Reference to the SSLContext to be used by this listener.

ssl-session-cache-size (Deprecated)

The maximum number of active SSL sessions

ssl-session-timeout (Deprecated)

The timeout for SSL sessions, in seconds

verify-client (Deprecated)

The desired SSL client authentication mode for SSL channels

-
-
-
AJP listener
-
-
-
<ajp-listener name="default" socket-binding="ajp" />
-
-
-
-
-
-
Host configuration
-
-

The host element corresponds to a virtual host.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

name

The virtual host name

alias

A whitespace separated list of additional host names that should -be matched

default-web-module

The name of a deployment that should be used to -serve up requests that do not match anything.

queue-requests-on-start

If requests should be queued on start for this host. If this is set to false the default -response code will be returned instead.

-

Note: If a Non-graceful Startup is requested, and the queue-requests-on-start attribute is not set, requests will NOT be -queued despite the default value of true for the property. In the instance of a non-graceful startup, non-queued requests -are required. However, if non-graceful is configured, but queue-requests-on-start is explicitly set to true, then requests -will be queued, effectively disabling the non-graceful mode for requests to that host.

-
-
Console Access Logging
-
-

Each host allows for access logging to the console which writes structured data in JSON format. This only writes to -stdout and is a single line of JSON structured data.

-
-
-

The attributes management model attribute is used to determine which exchange attributes should be logged. This is -similar to the pattern used for traditional access logging. The main difference being since the data is structured -the ability to use defined keys is essential.

-
-
-

A metadata attribute also exists which allows extra metadata to be added to the output. The value of the attribute is -a set of arbitrary key/value pairs. The values can include management model expressions, which must be resolvable when -the console access log service is started. The value is resolved once per start or reload of the server.

-
-
-CLI Examples -
-
add-console-access-logging.cli
-
-
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add
-
-
-
-
complex-add-console-access-logging.cli
-
-
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add(metadata={"@version"="1", "qualifiedHostName"=${jboss.qualified.host.name:unknown}}, attributes={bytes-sent={}, date-time={key="@timestamp", date-format="yyyy-MM-dd'T'HH:mm:ssSSS"}, remote-host={}, request-line={}, response-header={key-prefix="responseHeader", names=["Content-Type"]}, response-code={}, remote-user={}})
-
-
-
-
-
{
-    "eventSource":"web-access",
-    "hostName":"default-host",
-    "@version":"1",
-    "qualifiedHostName":"localhost.localdomain",
-    "bytesSent":1504,
-    "@timestamp":"2019-05-02T11:57:37123",
-    "remoteHost":"127.0.0.1",
-    "remoteUser":null,
-    "requestLine":"GET / HTTP/2.0",
-    "responseCode":200,
-    "responseHeaderContent-Type":"text/html"
-}
-
-
-
- - - - - -
- - -The above JSON is formatted only for readability. The output will be on a single line. -
-
-
-
-
-
-
-

7.7.3. Servlet container configuration

-
-

The servlet-container element corresponds to an instance of an Undertow -Servlet container. Most servers will only need a single servlet -container, however there may be cases where it makes sense to define -multiple containers (in particular if you want applications to be -isolated, so they cannot dispatch to each other using the -RequestDispatcher. You can also use multiple Servlet containers to serve -different applications from the same context path on different virtual -hosts).

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

allow-non-standard-wrappers

The Servlet specification requires -applications to only wrap the request/response using wrapper classes -that extend from the ServletRequestWrapper and ServletResponseWrapper -classes. If this is set to true then this restriction is relaxed.

default-buffer-cache

The buffer cache that is used to cache static -resources in the default Servlet.

stack-trace-on-error

Can be either all, none, or local-only. When set -to none Undertow will never display stack traces. When set to All -Undertow will always display them (not recommended for production use). -When set to local-only Undertow will only display them for requests from -local addresses, where there are no headers to indicate that the request -has been proxied. Note that this feature means that the Undertow error -page will be displayed instead of the default error page specified in -web.xml.

default-encoding

The default encoding to use for requests and -responses.

use-listener-encoding

If this is true then the default encoding will -be the same as that used by the listener that received the request.

preserve-path-on-forward

If this is true, the return values of the -getServletPath(), getRequestURL() and getRequestURI() methods from - HttpServletRequest will be unchanged following a - RequestDispatcher.forward() call, and point to the original resource requested. -If false, following the RequestDispatcher.forward() call, they will -point to the resource being forwarded to.

- -
- -
-

This allows you to change the attributes of the session cookie.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

name

The cookie name

domain

The cookie domain

http-only

If the cookie is HTTP only

secure

If the cookie is marked secure

max-age

The max age of the cookie

-
-
- -
-

This allows you to change the attributes of the affinity cookie. -If the affinity cookie is configured, the affinity will not be appended to the session ID, but will be sent via the configured cookie name.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

name (required)

The affinity cookie name

domain

The affinity cookie domain

http-only

If the affinity cookie is HTTP only

secure

If the affinity cookie is marked secure

max-age

The max age of the affinity cookie

-
-
-
Persistent Session Configuration
-
-

Persistent sessions allow session data to be saved across redeploys and -restarts. This feature is enabled by adding the persistent-sessions -element to the server config. This is mostly intended to be a -development time feature.

-
-
-

If the path is not specified then session data is stored in memory, and -will only be persistent across redeploys, rather than restarts.

-
- ---- - - - - - - - - - - - - - - - - -
AttributeDescription

path

The path to the persistent sessions data

relative-to

The location that the path is relevant to

-
-
-
-

7.7.4. AJP listeners

-
-

The AJP listeners are child resources of the subsystem undertow. They -are used with mod_jk, mod_proxy and mod_cluster of the Apache httpd -front-end. Each listener does reference a particular socket binding:

-
-
-
-
[standalone@localhost:9999 /] /subsystem=undertow/server=default-server:read-children-names(child-type=ajp-listener)
-{
-    "outcome" => "success",
-    "result" => [
-        "ajp-listener",
-    ]
-}
- 
-[standalone@localhost:9999 /] /subsystem=undertow/server=default-server/ajp-listener=*:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "enabled" => "true",
-        "scheme" => "http",
-        "socket-binding" => "ajp",
-    }
-}
-
-
-
-

Creating a new ajp-listener requires you to declare a new -socket binding first:

-
-
-
-
[standalone@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=ajp:add(port=8009)
-
-
-
-

The newly created, unused socket binding can then be used to create a -new connector configuration:

-
-
-
-
[standalone@localhost:9999 /] /subsystem=undertow/server=default-server/ajp-listener=myListener:add(socket-binding=ajp, scheme=http, enabled=true)
-
-
-
-
-

7.7.5. Using WildFly as a Load Balancer

-
-

WildFly 10 added support for using the Undertow subsystem as a load -balancer. WildFly supports two different approaches, you can either -define a static load balancer, and specify the back end hosts in your -configuration, or use it as a mod_cluster frontend, and use mod_cluster -to dynamically update the hosts.

-
-
-
General Overview
-
-

WildFly uses Undertow’s proxy capabilities to act as a load balancer. -Undertow will connect to the back end servers using its built in client, -and proxies requests.

-
-
-

The following protocols are supported:

-
-
-
    -
  • -

    http

    -
  • -
  • -

    ajp

    -
  • -
  • -

    http2

    -
  • -
  • -

    h2c (clear text HTTP2)
    -Of these protocols h2c should give the best performance, if the back end -servers support it.

    -
  • -
-
-
-

The Undertow proxy uses async IO, the only threads that are involved in -the request is the IO thread that is responsible for the connection. The -connection to the back end server is made from the same thread, which -removes the need for any thread safety constructs.
-If both the front and back end servers support server push, and HTTP2 is -in use then the proxy also supports pushing responses to the client. In -cases where proxy and backend are capable of server push, but the client -does not support it the server will send a X-Disable-Push header to let -the backend know that it should not attempt to push for this request.

-
-
-
Load balancer server profiles
-
-

WildFly 11 added load balancer profiles for both standalone and domain modes.

-
-
-Example: Start standalone load balancer -
-
-
# configure correct path to WildFly installation
-WILDFLY_HOME=/path/to/wildfly
-
-# configure correct IP of the node
-MY_IP=192.168.1.1
-
-# run the load balancer profile
-$WILDFLY_HOME/bin/standalone.sh -b $MY_IP -bprivate $MY_IP -c standalone-load-balancer.xml
-
-
-
-

It’s highly recommended to use private/internal network for communication between load balancer and nodes. -To do this set the correct IP address to the private interface (-bprivate argument).

-
-
-
-Example: Start worker node -
-

Run the server with the HA (or Full HA) profile, which has mod_cluster component included. -If the UDP multicast is working in your environment, the workers should work out of the box without any change. -If it’s not the case, then configure the IP address of the load balancer statically.

-
-
-
-
# configure correct path to WildFly installation
-WILDFLY_HOME=/path/to/wildfly
-# configure correct IP of the node
-MY_IP=192.168.1.2
-
-# Configure static load balancer IP address.
-# This is necessary when UDP multicast doesn't work in your environment.
-LOAD_BALANCER_IP=192.168.1.1
-$WILDFLY_HOME/bin/jboss-cli.sh <<EOT
-
-embed-server -c=standalone-ha.xml
-/subsystem=modcluster/proxy=default:write-attribute(name=advertise, value=false)
-/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=proxy1:add(host=$LOAD_BALANCER_IP, port=8090)
-/subsystem=modcluster/proxy=default:list-add(name=proxies, value=proxy1)
-EOT
-
-# start the woker node with HA profile
-$WILDFLY_HOME/bin/standalone.sh -c standalone-ha.xml -b $MY_IP -bprivate $MY_IP
-
-
-
-

Again, to make it safe, users should configure private/internal IP address into MY_IP variable.

-
-
-
-
-
-
Using WildFly as a static load balancer
-
-

To use WildFly as a static load balancer the first step is to create a -proxy handler in the Undertow subsystem. For the purposes of this -example we are going to assume that our load balancer is going to load -balance between two servers, sv1.foo.com and sv2.foo.com, and will be -using the AJP protocol.

-
-
-

The first step is to add a reverse proxy handler to the Undertow -subsystem:

-
-
-
-
/subsystem=undertow/configuration=handler/reverse-proxy=my-handler:add()
-
-
-
-

Then we need to define outbound-socket-binding-s for remote hosts:

-
-
-
-
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host1:add(host=sv1.foo.com, port=8009)
-/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host2:add(host=sv2.foo.com, port=8009)
-
-
-
-

and than we add them as hosts to reverse proxy handler:

-
-
-
-
/subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host1:add(outbound-socket-binding=remote-host1, scheme=ajp, instance-id=myroute, path=/test)
-/subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host2:add(outbound-socket-binding=remote-host2, scheme=ajp, instance-id=myroute, path=/test)
-
-
-
-

Now we need to actually add the reverse proxy to a location. -Assuming we are serving the path /app:

-
-
-
-
/subsystem=undertow/server=default-server/host=default-host/location=\/app:add(handler=my-handler)
-
-
-
-

This is all there is to it. If you point your browser to http://localhost:8080/app -you should be able to see the proxied content.

-
-
-

The full details of all configuration options available can be found in -the subsystem reference.

-
-
-
-
-
-

7.8. Messaging configuration

-
-

The Jakarta Messaging server configuration is done through the messaging-activemq -subsystem. In this chapter we are going outline the frequently used -configuration options. For a more detailed explanation please consult -the Artemis user guide (See "Component Reference").

-
-
-

7.8.1. Required Extension

-
-

The configuration options discussed in this section assume that the the -org.wildfly.extension.messaging-activemq extension is present in your -configuration. This extension is not included in the standard -standalone.xml and standalone-ha.xml configurations included in the -WildFly distribution. It is, however, included with the -standalone-full.xml and standalone-full-ha.xml configurations.

-
-
-

You can add the extension to a configuration without it either by adding -an <extension module="org.wildfly.extension.messaging-activemq"/> -element to the xml or by using the following CLI operation:

-
-
-
-
[standalone@localhost:9990 /]/extension=org.wildfly.extension.messaging-activemq:add
-
-
-
-
-

7.8.2. Connectors

-
-

There are three kind of connectors that can be used to connect to -WildFly Jakarta Messaging Server

-
-
-
    -
  • -

    invm-connector can be used by a local client (i.e. one running in -the same JVM as the server)

    -
  • -
  • -

    netty-connector can be used by a remote client (and uses Netty over -TCP for the communication)

    -
  • -
  • -

    http-connector can be used by a remote client (and uses Undertow Web -Server to upgrade from a HTTP connection)

    -
  • -
-
-
-
-

7.8.3. Jakarta Messaging Connection Factories

-
-

There are three kinds of basic Jakarta Messaging connection-factory that depends -on the type of connectors that is used.

-
-
-

There is also a pooled-connection-factory which is special in that it -is essentially a configuration facade for both the inbound and -outbound connectors of the the Artemis Jakarta Connectors Resource Adapter. An MDB can -be configured to use a pooled-connection-factory (e.g. using -@ResourceAdapter). In this context, the MDB leverages the inbound -connector of the Artemis Jakarta Connectors RA. Other kinds of clients can look up the -pooled-connection-factory in JNDI (or inject it) and use it to send -messages. In this context, such a client would leverage the outbound -connector of the Artemis Jakarta Connectors RA. A pooled-connection-factory is also -special because:

-
-
-
    -
  • -

    It is only available to local clients, although it can be configured -to point to a remote server.

    -
  • -
  • -

    As the name suggests, it is pooled and therefore provides superior -performance to the clients which are able to use it. The pool size can -be configured via the max-pool-size and min-pool-size attributes.

    -
  • -
  • -

    It should only be used to send (i.e. produce) messages when looked -up in JNDI or injected.

    -
  • -
  • -

    It can be configured to use specific security credentials via the -user and password attributes. This is useful if the remote server to -which it is pointing is secured.

    -
  • -
  • -

    Resources acquired from it will be automatically enlisted any on-going -Jakarta Transactions. If you want to send a message from an Jakarta Enterprise Beans using CMT -then this is likely the connection factory you want to use so the send -operation will be atomically committed along with the rest of the Jakarta Enterprise Beans’s -transaction operations.

    -
  • -
-
-
-

To be clear, the inbound connector of the Artemis Jakarta Connectors RA (which is for -consuming messages) is only used by MDBs and other Jakarta Connectors based components. -It is not available to traditional clients.

-
-
-

Both a connection-factory and a pooled-connection-factory reference -a connector declaration.

-
-
-

A netty-connector is associated with a socket-binding which tells -the client using the connection-factory where to connect.

-
-
-
    -
  • -

    A connection-factory referencing a netty-connector is suitable to -be used by a remote client to send messages to or receive messages -from the server (assuming the connection-factory has an appropriately -exported entry).

    -
  • -
  • -

    A pooled-connection-factory looked up in JNDI or injected which is -referencing a netty-connector is suitable to be used by a local -client to send messages to a remote server granted the socket-binding -references an outbound-socket-binding pointing to the remote server in -question.

    -
  • -
  • -

    A pooled-connection-factory used by an MDB which is referencing a -remote-connector is suitable to consume messages from a remote server -granted the socket-binding references an outbound-socket-binding -pointing to the remote server in question.

    -
  • -
-
-
-

An in-vm-connector is associated with a server-id which tells the -client using the connection-factory where to connect (since multiple -Artemis servers can run in a single JVM).

-
-
-
    -
  • -

    A connection-factory referencing an in-vm-connector is suitable to -be used by a local client to either send messages to or receive -messages from a local server.

    -
  • -
  • -

    A pooled-connection-factory looked up in JNDI or injected which is -referencing an in-vm-connector is suitable to be used by a local -client only to send messages to a local server.

    -
  • -
  • -

    A pooled-connection-factory used by an MDB which is referencing an -in-vm-connector is suitable only to consume messages from a local -server.

    -
  • -
-
-
-

A http-connector is associated with the socket-binding that -represents the HTTP socket (by default, named http).

-
-
-
    -
  • -

    A connection-factory referencing a http-connector is suitable to -be used by a remote client to send messages to or receive messages from -the server by connecting to its HTTP port before upgrading to the -messaging protocol.

    -
  • -
  • -

    A pooled-connection-factory referencing a http-connector is -suitable to be used by a local client to send messages to a remote -server granted the socket-binding references an -outbound-socket-binding pointing to the remote server in question.

    -
  • -
  • -

    A pooled-connection-factory used by an MDB which is referencing a -http-connector is suitable only to consume messages from a remote -server granted the socket-binding references an -outbound-socket-binding pointing to the remote server in question.

    -
  • -
-
-
-

The entry declaration of a connection-factory or a -pooled-connection-factory specifies the JNDI name under which the -factory will be exposed. Only JNDI names bound in the -"java:jboss/exported" namespace are available to remote clients. If a -connection-factory has an entry bound in the "java:jboss/exported" -namespace a remote client would look-up the connection-factory using -the text after "java:jboss/exported". For example, the " -RemoteConnectionFactory`" is bound by default to -`"java:jboss/exported/jms/RemoteConnectionFactory" which means a remote -client would look-up this connection-factory using " -jms/RemoteConnectionFactory`". A `pooled-connection-factory should -not have any entry bound in the " java:jboss/exported`" namespace -because a `pooled-connection-factory is not suitable for remote -clients.

-
-
-

Since Jakarta Messaging 2.0, a default Jakarta Messaging connection factory is accessible to Jakarta EE -applications under the JNDI name java:comp/DefaultJMSConnectionFactory. -The WildFly messaging subsystem defines a pooled-connection-factory that -is used to provide this default connection factory. Any parameter change -on this pooled-connection-factory will be take into account by any EE -application looking the default Jakarta Messaging provider under the JNDI name -java:comp/DefaultJMSConnectionFactory.

-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
-    <server name="default">
-        [...]
-        <http-connector name="http-connector"
-                        socket-binding="http"
-                        endpoint="http-acceptor" />
-        <http-connector name="http-connector-throughput"
-                        socket-binding="http"
-                        endpoint="http-acceptor-throughput">
-            <param name="batch-delay"
-                   value="50"/>
-        </http-connector>
-        <in-vm-connector name="in-vm"
-                         server-id="0"/>
-      [...]
-      <connection-factory name="InVmConnectionFactory"
-                            connectors="in-vm"
-                            entries="java:/ConnectionFactory" />
-      <pooled-connection-factory name="activemq-ra"
-                            transaction="xa"
-                            connectors="in-vm"
-                            entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"/>
-      [...]
-   </server>
-</subsystem>
-
-
-
-

~(See standalone/configuration/standalone-full.xml)~

-
-
-
-

7.8.4. Jakarta Messaging Queues and Topics

-
-

Jakarta Messaging queues and topics are sub resources of the messaging-actively -subsystem. One can define either a jms-queue or jms-topic. Each -destination must be given a name and contain at least one entry in -its entries element (separated by whitespace).

-
-
-

Each entry refers to a JNDI name of the queue or topic. Keep in mind -that any jms-queue or jms-topic which needs to be accessed by a -remote client needs to have an entry in the "java:jboss/exported" -namespace. As with connection factories, if a jms-queue or or -jms-topic has an entry bound in the "java:jboss/exported" namespace a -remote client would look it up using the text after -"java:jboss/exported`". For example, the following `jms-queue -"testQueue" is bound to "java:jboss/exported/jms/queue/test" which means -a remote client would look-up this \{{kms-queue} using -"jms/queue/test". A local client could look it up using -"java:jboss/exported/jms/queue/test", "java:jms/queue/test", or more -simply "jms/queue/test":

-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
-    <server name="default">
-    [...]
-    <jms-queue name="testQueue"
-               entries="jms/queue/test java:jboss/exported/jms/queue/test" />
-    <jms-topic name="testTopic"
-               entries="jms/topic/test java:jboss/exported/jms/topic/test" />
-</subsystem>
-
-
-
-

~(See standalone/configuration/standalone-full.xml)~

-
-
-

Jakarta Messaging endpoints can easily be created through the CLI:

-
-
-
-
[standalone@localhost:9990 /] jms-queue add --queue-address=myQueue --entries=queues/myQueue
-
-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/jms-queue=myQueue:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "durable" => true,
-        "entries" => ["queues/myQueue"],
-        "selector" => undefined
-    }
-}
-
-
-
-

Pausing and resuming Queues and Topics

-
-
-

When a queue is paused, it will receive messages but will not deliver them. When it’s resumed, it’ll begin delivering the queued messages, if any. -When a topic is paused, it will receive messages but will not deliver them. Newly added subscribers will be paused too until the topic is resumed. When it is resumed, delivering will occur again. The persist parameter ensure that the topic stays paused on the restart of the server.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/jms-queue=myQueue:pause()
-
-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/jms-topic=myTopic:pause()
-
-
-
-

A number of additional commands to maintain the Jakarta Messaging subsystem are -available as well:

-
-
-
-
[standalone@localhost:9990 /] jms-queue --help --commands
-add
-...
-remove
-To read the description of a specific command execute 'jms-queue command_name --help'.
-
-
-
-
-

7.8.5. Dead Letter & Redelivery

-
-

Some of the settings are applied against an address wild card instead of -a specific messaging destination. The dead letter queue and redelivery -settings belong into this group:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
-   <server name="default">
-      [...]
-      <address-setting name="#"
-                       dead-letter-address="jms.queue.DLQ"
-                       expiry-address="jms.queue.ExpiryQueue"
-                       [...] />
-
-
-
-

~(See standalone/configuration/standalone-full.xml)~

-
-
-
-

7.8.6. Security Settings for Artemis addresses and Jakarta Messaging destinations

-
-

Security constraints are matched against an address wildcard, similar to -the DLQ and redelivery settings.

-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
-   <server name="default">
-      [...]
-      <security-setting name="#">
-          <role name="guest"
-                send="true"
-                consume="true"
-                create-non-durable-queue="true"
-                delete-non-durable-queue="true"/>
-
-
-
-

~(See standalone/configuration/standalone-full.xml)~

-
-
-
-

7.8.7. Security Domain for Users

-
-

By default, Artemis will use the " ApplicationDomain`" Elytron security -domain. This domain is used to authenticate users making connections to Artemis -and then they are authorized to perform specific functions based on their -role(s) and the `security-settings described above. This domain can be -changed by using the elytron-domain, e.g.:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
-   <server name="default">
-       <security elytron-domain="mySecurityDomain" />
-      [...]
-
-
-
-
-

7.8.8. SSL Configuration

-
-

The preferred way is to reuse an SSLContext defined in the Elytron subsystem and reference it using the ssl-context attribute available on http-acceptor, remote-acceptor, http-connector and remote-acceptor. -That way you can use the SSLContext with the broker but also with other services such as Undertow.

-
-
- - - - - -
- - -One point that you have to take into account is the fact that the connector might be used on a different point than the server you have configured it on. -For example, if you obtain the connection factory remotely using JNDI, the SSLContext configured in the connector is 'relative' to your client and not to the server it was configured. -That means that a standalone client wouldn’t be able to resolve it, and if this is running on another WildFly instance, the Elytron SSLContext must be configured there. -
-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:15.0">
-    [...]
-    <remote-acceptor name="acceptor" socket-binding="messaging" ssl-context="artemis-remote-ssl">
-        <param name="enabledProtocols" value="TLSv1.2"/>
-        <param name="use-nio" value="true"/>
-    </remote-acceptor>
-    [...]
-    <remote-connector name="netty" socket-binding="messaging-socket-binding" ssl-context="artemis-ra-ssl">
-        <param name="enabledProtocols" value="TLSv1.2"/>
-        <param name="use-nio" value="true"/>
-        <param name="verifyHost" value="true"/>
-    </remote-connector>
-    [...]
-</subsystem>
-[...]
-<subsystem xmlns="urn:wildfly:elytron:16.0">
-    [...]
-    <tls>
-        <key-stores>
-            <key-store name="artemisKS">
-                <credential-reference clear-text="artemisexample"/>
-                <implementation type="JKS"/>
-                <file path="server.keystore" relative-to="jboss.server.config.dir"/>
-            </key-store>
-            <key-store name="artemisTS">
-                <credential-reference clear-text="artemisexample"/>
-                <implementation type="JKS"/>
-                <file path="server.truststore" relative-to="jboss.server.config.dir"/>
-            </key-store>
-            [...]
-        </key-stores>
-        <key-managers>
-            <key-manager name="artemisKM" key-store="artemisKS">
-                <credential-reference clear-text="artemisexample"/>
-            </key-manager>
-            [...]
-        </key-managers>
-        <trust-managers>
-            <trust-manager name="artemisTM" key-store="artemisTS"/>
-            [...]
-        </trust-managers>
-        <server-ssl-contexts>
-            <server-ssl-context name="artemis-remote-ssl" protocols="TLSv1.2" key-manager="artemisKM" trust-manager="artemisTM"/>
-            [...]
-        </server-ssl-contexts>
-    </tls>
-</subsystem>
-
-
-
-
-

7.8.9. Cluster Authentication

-
-

If the Artemis server is configured to be clustered, it will use the -cluster 's user and password attributes to connect to other -Artemis nodes in the cluster.

-
-
-

If you do not change the default value of <cluster-password>, Artemis -will fail to authenticate with the error:

-
-
-
-
HQ224018: Failed to create session: HornetQExceptionerrorType=CLUSTER_SECURITY_EXCEPTION message=HQ119099: Unable to authenticate cluster user: HORNETQ.CLUSTER.ADMIN.USER
-
-
-
-

To prevent this error, you must specify a value for -<cluster-password>. It is possible to encrypt this value by as an encrypted -expression by referring to the Elytron documentation.

-
-
-

Alternatively, you can use the system property -jboss.messaging.cluster.password to specify the cluster password from -the command line.

-
-
-
-

7.8.10. Deployment of -jms.xml files

-
-

Starting with WildFly 29, you have the ability to deploy a -jms.xml file -defining Jakarta Messaging destinations, e.g.:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<messaging-deployment xmlns="urn:jboss:messaging-activemq-deployment:1.0">
-   <server name="default">
-      <jms-destinations>
-         <jms-queue name="sample">
-            <entry name="jms/queue/sample"/>
-            <entry name="java:jboss/exported/jms/queue/sample"/>
-         </jms-queue>
-      </jms-destinations>
-   </server>
-</messaging-deployment>
-
-
-
- - - - - -
- - -This feature is primarily intended for development as destinations -deployed this way can not be managed with any of the provided management -tools (e.g. console, CLI, etc). -
-
-
-
-

7.8.11. Jakarta Messaging Bridge

-
-

The function of a Jakarta Messaging bridge is to consume messages from a source Jakarta Messaging -destination, and send them to a target Jakarta Messaging destination. Typically either -the source or the target destinations are on different servers. -The bridge can also be used to bridge messages from other non Artemis -messaging servers, as long as they are JMS 1.1 compliant.

-
-
-

The Jakarta Messaging Bridge is provided by the Artemis project. For a detailed -description of the available configuration properties, please consult -the project documentation.

-
-
-
Modules for other messaging brokers
-
-

Source and target Jakarta Messaging resources (destination and connection factories) -are looked up using JNDI. -If either the source or the target resources are managed by another -messaging server than WildFly, the required client classes must be -bundled in a module. The name of the module must then be declared when -the Jakarta Messaging Bridge is configured.

-
-
-

The use of a Jakarta Messaging bridges with any messaging provider will require to -create a module containing the jar of this provider.

-
-
-

Let’s suppose we want to use an hypothetical messaging provider named -AcmeMQ. We want to bridge messages coming from a source AcmeMQ -destination to a target destination on the local WildFly messaging -server. To lookup AcmeMQ resources from JNDI, 2 jars are required, -acmemq-1.2.3.jar, mylogapi-0.0.1.jar (please note these jars do not -exist, this is just for the example purpose). We must not include a -Jakarta Messaging jar since it will be provided by a WildFly module directly.

-
-
-

To use these resources in a Jakarta Messaging bridge, we must bundle them in a WildFly -module:

-
-
-

in JBOSS_HOME/modules, we create the layout:

-
-
-
-
modules/
-`-- org
-    `-- acmemq
-        `-- main
-            |-- acmemq-1.2.3.jar
-            |-- mylogapi-0.0.1.jar
-            `-- module.xml
-
-
-
-

We define the module in module.xml:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<module xmlns="urn:jboss:module:1.9" name="org.acmemq">
-    <properties>
-        <property name="jboss.api" value="private"/>
-    </properties>
- 
- 
-    <resources>
-        <!-- insert resources required to connect to the source or target   -->
-        <!-- messaging brokers if it not another WildFly instance           -->
-        <resource-root path="acmemq-1.2.3.jar" />
-        <resource-root path="mylogapi-0.0.1.jar" />
-    </resources>
- 
- 
-    <dependencies>
-       <!-- add the dependencies required by messaging Bridge code                -->
-       <module name="java.se" />
-       <module name="jakarta.jms.api" />
-       <module name="jakarta.transaction.api"/>
-       <module name="org.jboss.remote-naming"/>
-       <!-- we depend on org.apache.activemq.artemis module since we will send messages to  -->
-       <!-- the Artemis server embedded in the local WildFly instance       -->
-       <module name="org.apache.activemq.artemis" />
-    </dependencies>
-</module>
-
-
-
-
-
Configuration
-
-

A Jakarta Messaging bridge is defined inside a jms-bridge section of the -messaging-activemq subsystem in the XML configuration files.

-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
-   <jms-bridge name="myBridge" module="org.acmemq">
-      <source connection-factory="ConnectionFactory"
-              destination="sourceQ"
-              user="user1"
-              password="pwd1"
-              quality-of-service="AT_MOST_ONCE"
-              failure-retry-interval="500"
-              max-retries="1"
-              max-batch-size="500"
-              max-batch-time="500"
-              add-messageID-in-header="true">
-         <source-context>
-            <property name="java.naming.factory.initial"
-                      value="org.acmemq.jndi.AcmeMQInitialContextFactory"/>
-            <property name="java.naming.provider.url"
-                      value="tcp://127.0.0.1:9292"/>
-         </source-context>
-      </source>
-      <target connection-factory"/jms/invmTargetCF"
-              destination="/jms/targetQ" />
-      </target>
-   </jms-bridge>
-</subsystem>
-
-
-
-

The source and target sections contain the name of the Jakarta Messaging resource -( connection-factory and destination) that will be looked up in -JNDI. -It optionally defines the user and password credentials. If they are -set, they will be passed as arguments when creating the Jakarta Messaging connection -from the looked up ConnectionFactory. -It is also possible to define JNDI context properties in the -source-context and target-context sections. If these sections are -absent, the Jakarta Messaging resources will be looked up in the local WildFly -instance (as it is the case in the target section in the example -above).

-
-
-
-
Management commands
-
-

A Jakarta Messaging Bridge can also be managed using the WildFly command line -interface:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging/jms-bridge=myBridge/:add(module="org.acmemq",
-      source-destination="sourceQ",
-      source-connection-factory="ConnectionFactory",
-      source-user="user1",
-      source-password="pwd1",
-      source-context={"java.naming.factory.initial" => "org.acmemq.jndi.AcmeMQInitialContextFactory",
-                      "java.naming.provider.url" => "tcp://127.0.0.1:9292"},
-      target-destination="/jms/targetQ",
-      target-connection-factory="/jms/invmTargetCF",
-      quality-of-service=AT_MOST_ONCE,
-      failure-retry-interval=500,
-      max-retries=1,
-      max-batch-size=500,
-      max-batch-time=500,
-      add-messageID-in-header=true)
-{"outcome" => "success"}
-
-
-
-

You can also see the complete Jakarta Messaging Bridge resource description from the -CLI:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging/jms-bridge=*/:read-resource-description
-{
-    "outcome" => "success",
-    "result" => [{
-        "address" => [
-            ("subsystem" => "messaging"),
-            ("jms-bridge" => "*")
-        ],
-        "outcome" => "success",
-        "result" => {
-            "description" => "A Jakarta Messaging bridge instance.",
-            "attributes" => {
-                ...
-        }
-    }]
-}
-
-
-
-
-
Statistics of a Jakarta Messaging Bridge
-
-

Currently two statistics are available on a Jakarta Messaging bridge: the number of processed messages and the number of aborted/rolled back messages. -Those are available with the following command :

-
-
-
-
/subsystem=messaging/jms-bridge=myBridge:read-attribute(name=message-count)
-{
-    "outcome" => "success",
-    "result" => 0L
-}
-
-/subsystem=messaging/jms-bridge=myBridge:read-attribute(name=aborted-message-count)
-{
-    "outcome" => "success",
-    "result" => 0L
-}
-
-
-
-
-
-

7.8.12. Component Reference

-
-

The messaging-activemq subsystem is provided by the Artemis project. For -a detailed description of the available configuration properties, please -consult the project documentation.

-
-
-
-
- -
-
-
-
-
Controlling internal broker usage of memory and disk space
-
-

You can configure the disk space usage of the journal by using the global-max-disk-usage attribute, thus blocking the paging and processing of new messages until some disk space is available. -This is done from the CLI:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:write-attribute(name=global-max-disk-usage, value=70)
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-

You can define at which frequency the disk usage is checked using the disk-scan-period attribute.

-
-
-

In the same way configure the maximal memory affected to processing messages by using the global-max-memory-size attribute, thus blocking the processing of new messages until some memory space is available. -This is done from the CLI:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:write-attribute(name=global-max-memory-size, value=960000000)
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-
-
Critical analysis of the broker
-
-

When things go wrong on the broker, the critical analyzer may act as a safeguard shutting down the broker or the JVM.
-If the response time goes beyond a configured timeout, the broker is considered unstable and an action can be taken to either shutdown the broker or halt the VM. -Currently in WildFly this will only be logged but you can change that behaviour by setting the critical-analyzer-policy attribute to HALT or SHUTDOWN. -For this, the critical analyzer measures the response time in:

-
-
-
    -
  • -

    Queue delivery (adding to the queue)

    -
  • -
  • -

    Journal storage

    -
  • -
  • -

    Paging operations

    -
  • -
-
-
-

You can configure the critical analyzer on the broker using the CLI. -To disable the critical analyzer, you can execute the following CLI command:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:write-attribute(name=critical-analyzer-enabled, value=false)
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-

You can configure the critical analyzer with the following attributes:

-
-
-
    -
  • -

    critical-analyzer-enabled

    -
  • -
  • -

    critical-analyzer-timeout

    -
  • -
  • -

    critical-analyzer-check-period

    -
  • -
  • -

    critical-analyzer-policy

    -
  • -
-
-
-
-
Importing / Exporting the Journal
-
-

WildFly provides an operation to export the journal to a file which MUST be run in admin-mode. -This is done from the CLI:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:export-journal()
-{
-    "outcome" => "success",
-    "result" => "$JBOSS_HOME/standalone/data/activemq/journal-20210125-103331692+0100-dump.xml"
-}
-
-
-
-

You can now import such a dump file, in normal mode, using the command:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:import-journal(file=$FILE_PATH/journal-20210125-103331692+0100-dump.xml)
-{
-    "outcome" => "success"
-}
-
-
-
-

If you need to troubleshoot the journal you can use the print-data operation. Like the export operation, it needs to be executed in admin-mode. -Also this will send back a file so it must be coupled with the attachment operation to display or save the result. Note that the display operation won’t work properly if you are asking for a zipped version of the data.

-
-
-
-
[standalone@localhost:9990 /] attachment display --operation=/subsystem=messaging-activemq/server=default:print-data(secret)
-ATTACHMENT a69b87f3-ffeb-4596-be51-d73ebdc48b66:
-     _        _               _
-    / \  ____| |_  ___ __  __(_) _____
-   / _ \|  _ \ __|/ _ \  \/  | |/  __/
-  / ___ \ | \/ |_/  __/ |\/| | |\___ \
- /_/   \_\|   \__\____|_|  |_|_|/___ /
- Apache ActiveMQ Artemis 2.16.0
-
- ....
-
-
-
-
-
-

7.8.13. Connect a pooled-connection-factory to a Remote Artemis Server

-
-

The messaging-activemq subsystem allows to configure a -pooled-connection-factory resource to let a local client deployed in -WildFly connect to a remote Artemis server.

-
-
-

The configuration of such a pooled-connection-factory is done in 3 -steps:

-
-
-
    -
  1. -

    create an outbound-socket-binding pointing to the remote messaging -server:

    -
    -
    -
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-artemis:add(host=<server host>, port=61616)
    -
    -
    -
  2. -
  3. -

    create a remote-connector referencing the outbound-socket-binding -created at step (1).

    -
    -
    -
    /subsystem=messaging-activemq/remote-connector=remote-artemis:add(socket-binding=remote-artemis)
    -
    -
    -
  4. -
  5. -

    create a pooled-connection-factory referencing the remote-connector -created at step (2).

    -
    -
    -
    /subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:add(connectors=[remote-artemis], entries=[java:/jms/remoteCF])
    -
    -
    -
  6. -
-
-
-

In Artemis 1.x topics and queues used had a prefix(jms.topic. and jms.queue.) that were prepended to the destination name. -In Artemis 2.x this is no longer the case, but for compatibility reasons WildFly still prepend those prefixes and tells Artemis to run in compatibility mode. -If you are connecting to a remote Artemis 2.x, it may not be in compatibility mode and thus the old prefixes may not be used anymore. -If you need to use destinations without those prefixes, you can configure your connection factory not to use them by setting the attribute enable-amq1-prefix to false.

-
-
-
-
/subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:write-attribute(name="enable-amq1-prefix", value="false")
-
-
-
-
Jakarta Messaging Queues and Topics on a remote Artemis Server
-
-

You can also add queues and topics defined on a remote Artemis server to be used as if they were local to the server. This means that you can make those remote destinations available via JNDI just like local destinations. -You can also configure destinations not to enable the Artemis 1.x prefixes by setting the attribute enable-amq1-prefix to false. Those destinations are defined out-of the server element:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
-    <external-jms-queue name="testQueue"
-               entries="jms/queue/test java:jboss/exported/jms/queue/test" enable-amq1-prefix="false" />
-    <external-jms-topic name="testTopic"
-               entries="jms/topic/test java:jboss/exported/jms/topic/test" enable-amq1-prefix="false" />
-</subsystem>
-
-
-
-

Jakarta Messaging endpoints can easily be created through the CLI:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/external-jms-queue=myQueue:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "entries" => ["queues/myQueue"]
-    }
-}
-
-
-
-

You don’t have operations to see or manage attributes of those destinations.

-
-
-
-
Configuration of a MDB using a pooled-connection-factory
-
-

When a pooled-connection-factory is configured to connect to a remote -Artemis, it is possible to configure Message-Driven Beans (MDB) to have -them consume messages from this remote server.

-
-
-

The MDB must be annotated with the @ResourceAdapter annotation using -the name of the pooled-connection-factory resource

-
-
-
-
import org.jboss.ejb3.annotation.ResourceAdapter;
- 
-  @ResourceAdapter("remote-artemis")
-  @MessageDriven(name = "MyMDB", activationConfig = {
-    ...
-})
-public class MyMDB implements MessageListener {
-      public void onMessage(Message message) {
-       ...
-    }
-}
-
-
-
-

If the MDB needs to produce messages to the remote server, it must -inject the pooled-connection-factory by looking it up in JNDI using -one of its entries.

-
-
-
-
@Inject
-@JMSConnectionFactory("java:/jms/remoteCF")
-private JMSContext context;
-
-
-
-
Configuration of the destination
-
-

A MDB must also specify which destination it will consume messages from.

-
-
-

The standard way is to define a destinationLookup activation config -property that corresponds to a JNDI lookup on the local server.
-When the MDB is consuming from a remote Artemis server it will now create those bindings locally.
-It is possible to use the naming subsystem to configure -external context federation to have local JNDI -bindings delegating to external bindings.

-
-
-

However there is a simpler solution to configure the destination when -using the Artemis Resource Adapter.
-Instead of using JDNI to lookup the Jakarta Messaging Destination resource, you can -just specify the name of the destination (as configured in the remote -Artemis server) using the destination activation config property and -set the useJNDI activation config property to false to let the Artemis -Resource Adapter create automatically the Jakarta Messaging destination without -requiring any JNDI lookup.

-
-
-
-
@ResourceAdapter("remote-artemis")
-@MessageDriven(name = "MyMDB", activationConfig = {
-    @ActivationConfigProperty(propertyName = "useJNDI",         propertyValue = "false"),
-    @ActivationConfigProperty(propertyName = "destination",     propertyValue = "myQueue"),
-    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
-    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")
-})
-public class MyMDB implements MessageListener {
-    ...
-}
-
-
-
-

These properties configure the MDB to consume messages from the Jakarta Messaging -Queue named myQueue hosted on the remote Artemis server.
-In most cases, such a MDB does not need to lookup other destinations to -process the consumed messages and it can use the JMSReplyTo destination -if it is defined on the message.
-If the MDB needs any other Jakarta Messaging destinations defined on the remote -server, it must use client-side JNDI by following the -Artemis -documentation or configure external configuration context in the naming -subsystem (which allows to inject the Jakarta Messaging resources using the -@Resource annotation).

-
-
-
-
Configuration of a remote destination using annotations
-
-

The annotation @JMSDestinationDefinition can be used to create a destination on a remote Artemis Server. This will work in the same way as for a local server. -For this it needs to be able to access Artemis management queue. If your remote Artemis Server management queue is not the default one you can pass the management queue address as a property to the @JMSDestinationDefinition. -Please note that the destination is created remotely but won’t be removed once the deployement is undeployed/removed.

-
-
-
-
@JMSDestinationDefinition(
-    // explicitly mention a resourceAdapter corresponding to a pooled-connection-factory resource to the remote server
-    resourceAdapter = "activemq-ra",
-    name="java:global/env/myQueue2",
-    interfaceName="jakarta.jms.Queue",
-    destinationName="myQueue2",
-        properties = {
-            "management-address=my.management.queue",
-            "selector=color = 'red'"
-       }
-)
-
-
-
-

You can also configure destinations not to enable the Artemis 1.x prefixes by adding a property enable-amq1-prefix to false to the @JMSDestinationDefinition.

-
-
-
-
@JMSDestinationDefinition(
-    // explicitly mention a resourceAdapter corresponding to a pooled-connection-factory resource to the remote server
-    resourceAdapter = "activemq-ra",
-    name="java:global/env/myQueue2",
-    interfaceName="jakarta.jms.Queue",
-    destinationName="myQueue2",
-    properties = {
-        "enable-amq1-prefix=false"
-    }
-)
-
-
-
-
-
-
-

7.8.14. Backward & Forward Compatibility

-
-

WildFly supports both backwards and forwards compatibility with -legacy versions that were using HornetQ as their messaging brokers (such -as JBoss AS7 or WildFly 8 and 9).
-These two compatibility modes are provided by the ActiveMQ Artemis -project that supports HornetQ’s CORE protocol:

-
-
-
    -
  • -

    backward compatibility: WildFly messaging clients (using Artemis) can -connect to a legacy app server (running HornetQ)

    -
  • -
  • -

    forward compatibility: legacy messaging clients (using HornetQ) can connect -to a WildFly 29 app server (running Artemis).

    -
  • -
-
-
-
Forward Compatibility
-
-

Forward compatibility requires no code change in legacy messaging clients. It -is provided by the WildFly messaging-activemq subsystem and its -resources.

-
-
-
    -
  • -

    legacy-connection-factory is a subresource of the -messaging-activemq’s `server and can be used to store in JNDI a -HornetQ-based ConnectionFactory.

    -
  • -
-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
-    <server name="default">
-        ...
-        <legacy-connection-factory name="legacyConnectionFactory-discovery"
-                                   entries="java:jboss/exported/jms/RemoteConnectionFactory"
-                                   ... />
-    </server>
-</subsystem>
-
-
-
-
    -
  • -

    Legacy HornetQ-based messaging destinations can also be configured by -providing a legacy-entries attribute to the jms-queue and -jms-topic resource.

    -
  • -
-
-
-
-
    <jms-queue name="myQueue"
-               entries="java:jboss/exported/jms/myQueue-new"
-               legacy-entries="java:jboss/exported/jms/myQueue" />
-    <jms-topic name="testTopic"
-               entries="java:jboss/exported/jms/myTopic-new"
-               legacy-entries="java:jboss/exported/jms/myTopic" />
-
-
-
-

The legacy-entries must be used by legacy clients (using HornetQ) -while the regular entries are for WildFly 29 Jakarta Messaging clients (using -Artemis).

-
-
-

The legacy client will then lookup these legacy messaging resources to -communicate with WildFly.
-To avoid any code change in the legacy messaging clients, the legacy JNDI -entries must match the lookup expected by the legacy client.

-
-
-
Migration
-
-

During migration, the legacy messaging subsystem will create a -legacy-connection-factory resource and add legacy-entries to the -jms-queue and jms-topic resource if the boolean attribute -add-legacy-entries is set to true for its migrate operation. If -that is the case, the legacy entries in the migrated -messaging-activemq subsystem will correspond to the entries specified -in the legacy messaging subsystem and the regular entries will be -created with a -new suffix.
-If add-legacy-entries is set to false during migration, no legacy -resources will be created in the messaging-activemq subsystem and -legacy messaging clients will not be able to communicate with WildFly 29 -servers.

-
-
-
-
-
Backward Compatibility
-
-

Backward compatibility requires no configuration change in the legacy -server.
-WildFly 29 clients do not look up resources on the legacy server but -use client-side JNDI to create their Jakarta Messaging resources. WildFly’s Artemis client -can then use these resources to communicate with the legacy server -using the HornetQ CORE protocol.

-
-
-

Artemis supports -Client-side -JNDI to create Jakarta Messaging resources ( ConnectionFactory and Destination).

-
-
-

For example, if a WildFly 29 messaging client wants to communicate with a -legacy server using a queue named myQueue, it must use the -following properties to configure its JNDI InitialContext:

-
-
-
-
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
-connectionFactory.jms/ConnectionFactory=tcp://<legacy server address>:5445? \
-    protocolManagerFactoryStr=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory
-queue.jms/myQueue=myQueue
-
-
-
-

It can then use the jms/ConnectionFactory name to create the Jakarta Messaging -ConnectionFactory and jms/myQueue to create the Jakarta Messaging Queue.
-Note that the property -protocolManagerFactoryStr=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory -is mandatory when specifying the URL of the legacy connection factory so -that the Artemis JMS client can communicate with the HornetQ broker in -the legacy server.

-
-
-
-
-

7.8.15. AIO - NIO for messaging journal

-
-

Apache ActiveMQ Artemis (like HornetQ beforehand) ships with a high -performance journal. Since Apache ActiveMQ Artemis handles its own -persistence, rather than relying on a database or other 3rd party -persistence engine it is very highly optimised for the specific -messaging use cases. The majority of the journal is written in Java, -however we abstract out the interaction with the actual file system to -allow different pluggable implementations.

-
-
-

Apache ActiveMQ Artemis ships with two implementations:

-
-
-
    -
  • -

    Java NIO.

    -
  • -
-
-
-

The first implementation uses standard Java NIO to interface with the -file system. This provides extremely good performance and runs on any -platform where there’s a Java 6+ runtime.

-
-
-
    -
  • -

    Linux Asynchronous IO

    -
  • -
-
-
-

The second implementation uses a thin native code wrapper to talk to the -Linux asynchronous IO library (AIO). With AIO, Apache ActiveMQ Artemis -will be called back when the data has made it to disk, allowing us to -avoid explicit syncs altogether and simply send back confirmation of -completion when AIO informs us that the data has been persisted.

-
-
-

Using AIO will typically provide even better performance than using Java -NIO.

-
-
-

The AIO journal is only available when running Linux kernel 2.6 or later -and after having installed libaio (if it’s not already installed). If AIO is -not supported on the system then Artemis will fallback to NIO. To know which -type of journal is effectively used you can execute the following command using jboss-cli:

-
-
-
-
/subsystem=messaging-activemq/server=default:read-attribute(name=runtime-journal-type)
-
-
-
-

Please note that AIO is represented by ASYNCIO in the WildFly model configuration.

-
-
-

Also, please note that AIO will only work with the following file -systems: ext2, ext3, ext4, jfs, xfs. With other file systems, e.g. NFS -it may appear to work, but it will fall back to a slower synchronous -behaviour. Don’t put the journal on a NFS share!

-
-
-

One point that should be added is that AIO doesn’t work well with -encrypted partitions, thus you have to move to NIO on those.

-
-
-

What are the symptoms of an AIO isssue ?

-
-
-
AIO issue on WildFly 10
-
-

If you see the following exception in your WildFly log file / console

-
-
-
-
[org.apache.activemq.artemis.core.server] (ServerService Thread Pool -- 64) AMQ222010: Critical IO Error, shutting down the server. file=AIOSequentialFile:/home/wildfly/wildfly-10.0.0.Final/standalone/data/activemq/journal/activemq-data-2.amq, message=Cannot open file:The Argument is invalid: java.io.IOException: Cannot open file:The Argument is invalid
- at org.apache.activemq.artemis.jlibaio.LibaioContext.open(Native Method)
-
-
-
-

that means that AIO isn’t working properly on your system.

-
-
-

To use NIO instead execute the following command using jboss-cli:

-
-
-
-
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-type, value=NIO)
-
-
-
-

You need to reload or restart your server and you should see the -following trace in your server console :

-
-
-
-
INFO  [org.apache.activemq.artemis.core.server] (ServerService Thread Pool -- 64) AMQ221013: Using NIO Journal
-
-
-
-
-
AIO issue on WildFly 9
-
-
-
[org.hornetq.core.server] (ServerService Thread Pool -- 64) HQ222010: Critical IO Error, shutting down the server. file=AIOSequentialFile:/home/wildfly/wildfly-9.0.2.Final/standalone/data/messagingjournal/hornetq-data-1.hq, message=Can't open file: HornetQException[errorType=NATIVE_ERROR_CANT_OPEN_CLOSE_FILE message=Can't open file]
- at org.hornetq.core.libaio.Native.init(Native Method)
-
-
-
-

that means that AIO isn’t working properly on your system.

-
-
-

To use NIO instead execute the following commnd using jboss-cli :

-
-
-
-
/subsystem=messaging/hornetq-server=default:write-attribute(name=journal-type,value=NIO)
-
-
-
-

You need to reload or restart your server and you see the following -trace in your server console :

-
-
-
-
INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 64) HQ221013: Using NIO Journal
-
-
-
-
-
-

7.8.16. JDBC Store for Messaging Journal

-
-

The Artemis server that are integrated to WildFly can be configured to -use a JDBC store for its messaging journal instead of its file-based -journal.
-The server resource of the messaging-activemq subsystem needs to -configure its journal-datasource attribute to be able to use JDBC -store. If this attribute is not defined, the regular file-base journal -will be used for the Artemis server.
-This attribute value must correspond to a data source defined in the -datasource subsystem.

-
-
-

For example, if the datasources subsystem defines an ExampleDS data -source at /subsystem=datasources/data-source=ExampleDS, the Artemis -server can use it for its JDBC store with the operation:

-
-
-
-
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-datasource, value=ExampleDS)
-
-
-
-

Artemis JDBC store uses SQL commands to create the tables used to -persist its information.
-These SQL commands may differ depending on the type of database. The SQL -commands used by the JDBC store are located in modules/system/layers/base/org/apache/activemq/artemis/main/artemis-jdbc-store-${ARTEMIS_VERSION}.jar/journal-sql.properties.

-
-
-

Artemis uses different JDBC tables to store its bindings information, -the persistent messages and the large messages (paging is not supported -yet).

-
-
-

The name of these tables can be configured with the -journal-bindings-table, journal-messages-table, -journal-page-store-table, and journal-large-messages-table.

-
-
-

Please note that the configuration of the underlying pool is something that you need to take care of. -You need at least four connections:

-
-
-
    -
  • -

    one for the binding

    -
  • -
  • -

    one for the messages journal

    -
  • -
  • -

    one for the lease lock (if you use HA)

    -
  • -
  • -

    one for the node manager shared state (if you use HA)

    -
  • -
-
-
-

So you should define a min-pool-size of 4 for the pool.
-But one fact that you need to take into account is that paging and large messages can use an unbounded number of threads. -The size, a.k.a. max-pool-size, of the pool should be defined according to the amount of concurrent threads that perform page/large message streaming operations. There is no defined rule for this as there is no 1-1 relation between the number of threads and the number of connections. The number of connections depend on the number of threads processing paging and large messages operations as well as the time you are willing to wait to get a connection (cf. blocking-timeout-wait-millis). When new large messages or paging operations occur they will be in a dedicated thread and will try to get a connection, being enqueued until one is ready or the time to obtain one runs out which will create a failure.
-You really need to tailor your configuration according to your needs and test it in your environment following the DataSource configuration subsystem documentation and perform tests and peroformance runs before going to production.

-
-
-
Reference
-
-
-
- -
-
-
-
-
-
-

7.8.17. Configuring Broadcast/Discovery

-
-

Each Artemis server can be configured to broadcast itself and/or discovery other Artemis servers within a cluster. -Artemis supports two mechanisms for configuring broadcast/discovery:

-
-
-
JGroups-based broadcast/discovery
-
-

Artemis can leverage the membership of an existing JGroups channel to both broadcast its identity and discover nodes on which Artemis servers are deployed. -WildFly’s default full-ha profile uses this mechanism for broadcast/discovery using the default JGroups channel of the server (as defined by the JGroups subsystem).

-
-
-

To add this support to a profile that does not include it by default, use the following:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/broadcast-group=bg-group1:add(jgroups-cluster=activemq-cluster,connectors=http-connector)
-[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/discovery-group=dg-group1:add(jgroups-cluster=activemq-cluster)
-
-
-
-

To segregate Artemis servers use a distinct membership, configure broadcast/discovery using a separate channel. To do this, first create the channel resource:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=jgroups/channel=messaging:add(stack=tcp)
-
-
-
-

This creates a new JGroups channel resource based on the "tcp" protocol stack. -Now create your broadcast/discovery groups using this channel:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/broadcast-group=bg-group2:add(jgroups-channel=messaging, jgroups-cluster=activemq-cluster, connectors=http-connector)
-[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/discovery-group=dg-group2:add(jgroups-channel=messaging, jgroups-cluster=activemq-cluster)
-
-
-
-
-
Multicast broadcast/discovery
-
-

To broadcast identity to standalone messaging clients, you can additionally configure broadcast/discovery using multicast sockets.

-
-
-

e.g.

-
-
-
-
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets/socket-binding=messaging(interface=private, multicast-address=230.0.0.4, multicast-port=45689)
-
-[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/broadcast-group=bg-group3:add(socket-binding=messaging, connectors=http-connector)
-[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/discovery-group=dg-group3:add(socket-binding=messaging)
-
-
-
-
-
Cluster behind an HTTP load balancer
-
-

If the cluster is behind an HTTP load balancer we need to indicate to the clients that they must not use the cluster topology to connect to it but keep on using the initial connection to the load-balancer. -For this you need to specify on the (pooled) connection factory not to use the topology by setting the attribute "use-topology-for-load-balancing" to false.

-
-
-
-
/subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:write-attribute(name="use-topology-for-load-balancing", value="false")
-
-
-
-
-
Network Isolation (Split Brain)
-
-

It is possible that if a replicated live or backup server becomes isolated in a network that failover will occur and you will end up with 2 live servers serving messages in a cluster, this we call split brain. You main mitigate this problem by configuring one or more addresses that are part of your network topology, that will be pinged through the life cycle of the server.

-
-
-

The server will stop itself until the network is back on such case. -This is configured using the following configuration attributes:

-
-
-
    -
  • -

    network-check-NIC: The NIC (Network Interface Controller) to be used to validate the network.

    -
  • -
  • -

    network-check-period: The frequency of how often we should check if the network is still up.

    -
  • -
  • -

    network-check-timeout: The timeout used on the ping.

    -
  • -
  • -

    network-check-list: This is a comma separated list, no spaces, of DNS or IPs (it should accept IPV6) to be used to validate the network.

    -
  • -
  • -

    network-check-URL-list: The list of HTTP URIs to be used to validate the network.

    -
  • -
  • -

    network-check-ping-command: The command used to ping IPV4 addresses.

    -
  • -
  • -

    network-check-ping6-command: The command used to ping IPV6 addresses.

    -
  • -
-
-
-

For example, let’s ping the 10.0.0.1 IP address:

-
-
-
-
[standalone@localhost:9990 /]
-/subsystem=messaging-activemq/server=default:write-attribute(name=network-check-list, value="10.0.0.1")
-
-
-
-

Once 10.0.0.1 stops responding to the ping you will get an exception and the broker will stop:

-
-
-
-
WARN  [org.apache.activemq.artemis.logs] (ServerService Thread Pool -- 84) AMQ202002: Ping Address /10.0.0.1 wasnt reacheable.
-...
-INFO  [org.apache.activemq.artemis.logs] (Network-Checker-0 (NetworkChecker)) AMQ201001: Network is unhealthy, stopping service ActiveMQServerImpl::serverUUID=76e64326-f78e-11ea-b7a5-3ce1a1c35439
-
-
-
-
Warning
-
-

Make sure you understand your network topology as this is meant to validate your network. Using IPs that could eventually disappear or be partially visible may defeat the purpose. You can use a list of multiple IPs. Any successful ping will make the server OK to continue running

-
-
-
-
-
-
-

7.9. Transactions subsystem configuration

-
-

Required extension:

-
-
-
-
<extension module="org.jboss.as.transactions"/>
-
-
-
-

Basic subsystem configuration example:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
-  <core-environment node-identifier="${jboss.tx.node.id:1}">
-    <process-id>
-      <uuid/>
-    </process-id>
-  </core-environment>
-  <recovery-environment socket-binding="txn-recovery-environment"
-                        status-socket-binding="txn-status-manager"/>
-   <coordinator-environment statistics-enabled="${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
-  <object-store path="tx-object-store"
-                relative-to="jboss.server.data.dir"/>
-</subsystem>
-
-
-
-

7.9.1. Transaction subsystem configuration

-
-

Transaction subsystem configures the behaviour of the transaction manager. -Narayana is the transaction manager used in WildFly. -The second component configured within the subsystem is -WildFly Transaction Client -(the WFTC serves as an abstract layer to work with the transactional context).

-
-
-
Configuration of Narayana component
-
-

The structure of the transaction subsystem follows the structure of Narayana component. -Narayana defines a separate configuration bean for every -internal module. -For example any configuration related to Narayana core is available through beans -CoordinatorEnvironmentBean and -CoreEnvironmentBean, -for JTA processing it is -JTAEnvironmentBean, -for the transaction recovery setup it’s -RecoveryEnvironmentBean.

-
-
-

The transaction subsystem provides only a sub-set of the configuration available via Narayana beans. -Any other configuration option provided by Narayana is still possible to be configured via -system properties and JVM restart is usually required.

-
-
-

Narayana defines unified naming for the system properties which are used for configuration. -The system property is in form [bean name].[property name]. For example, the system property with name RecoveryEnvironmentBean.periodicRecoveryInitilizationOffset defined in -RecoveryEnvironmentBean -configures a waiting time for first time execution of the periodic recovery after application server starts.

-
-
-
-
Configuration in model and in XML
-
-

The transaction subsystem separates the configuration into sections in XML configuration file. -Every section belongs to some Narayana module. -The configuration for model consists, on the other hand, of a flat structure of attributes -(most of them at top level).

-
-
-

For example, the subsystem defines the node identifier under core-environment XML element in XML -configuration, while the node-identifer attribute is defined directly under /subsystem=transactions -resource in the model.

-
-
-

The description of individual attributes and their meaning can be found in the -Model Reference Guide.

-
-
-
jts
-
-

jts model attribute is configured as jts XML element

-
-
-
XML configuration enabling jts
-
-
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
-  ...
-  <jts />
-  ...
-</subsystem>
-
-
-
-
-
core-environment
-
-

node-identifier, process-id-uuid, process-id-socket-binding, process-id-socket-max-ports model - attributes are configured under core-environment XML element

-
-
-
XML configuration example for core-environment
-
-
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
-  ...
-  <core-environment node-identifier="1">
-    <process-id>
-      <socket socket-binding="txn-socket-id"
-              socket-process-id-max-ports="10"/>
-      </process-id>
-  </core-environment>
-  ...
-</subsystem>
-
-
-
-
-
recovery-environment
-
-

recovery-period, socket-binding, recovery-listener, status-socket-binding model attributes are configured under recovery-environment XML element

-
-
-
XML configuration example for recovery-environment
-
-
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
-  ...
-  <recovery-environment socket-binding="txn-recovery-environment"
-                        status-socket-binding="txn-status-manager"
-                        recovery-listener="false" />
-  ...
-</subsystem>
-
-
-
-

If you configure the recovery-listener then Narayana binds the linked socket, and a user may request -an explicit launch of -the recovery scan. -We can see an example of the socket communication in the following example.

-
-
-
telnet communication with recovery listener
-
-
telnet localhost 4712
-# command to start the recovery scan
-SCAN[enter]
-# at this time the transaction recovery has been started
-^]
-close
-
-
-
-
-
coordinator-environment
-
-

enable-tsm-status, statistics-enabled, default-timeout, maximum-timeout -model attributes are configured under coordinator-environment XML element

-
-
-
XML configuration example for coordinator-environment
-
-
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
-  ...
-  <coordinator-environment enable-tsm-status="true" statistics-enabled="true"
-                           default-timeout="300" maximum-timeout="31536000" />
-  ...
-</subsystem>
-
-
-
-transaction statistics -
-

When subsystem defines the statistics-enabled to true Narayana starts gathering -statistics about transaction processing. User can view a single attribute -or list all statistics attributes as a group. -Transaction statistics attributes are read-only runtime attributes.

-
-
-
observing all transaction statistics attributes
-
-
# connect to a running application server
-./bin/jboss-cli.sh -c
-
-# enable transaction statistics
-/subsystem=transactions:write-attribute(name=statistics-enabled, value=true)
-# list all statistics attributes
-/subsystem=transactions:read-attribute-group(name=statistics, include-runtime=true)
-
-
-
-
-
-
-
object-store
-
-

Narayana needs to persist data about transaction processing to a transaction log. -This persistent storage is called object store in context of Narayana. -Narayana requires to persist a log for an XA transactions that are processed -with the two-phase commit protocol. Otherwise, the transaction is held only in memory -without storing anything to the object store.

-
-
-

Narayana provides three object stores implementations.

-
-
-
    -
  • -

    ShadowNoFileLock store persists records in directory structure on the file system. -A separate file represents an record, log of a prepared transaction.
    -Used when attributes use-jdbc-store and use-journal-store are both false.

    -
  • -
  • -

    Journal store persists records in a journal file on the file system. -Records are stored in append only log implemented within ActiveMQ Artemis -project.
    -Used when attribute use-journal-store is true and use-jdbc-store is false.

    -
  • -
  • -

    JDBC stores persists records in a database. The records are accessible via JDBC connection. -This store requires a linked datasource from the datasources subsystem. -Used when attribute use-jdbc-store is true and use-journal-store is false.

    -
  • -
-
-
-
journal object-store
-
-

An XML configuration of object-store XML element configuring the journal store with model attributes -object-store-path, object-store-relative-to, journal-store-enable-async-io is

-
-
-
XML configuration example for object-store
-
-
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
-  ...
-    <object-store path="tx-object-store" relative-to="jboss.server.data.dir"/>
-    <use-journal-store enable-async-io="true"/>
-  ...
-</subsystem>
-
-
-
-
-
JDBC object-store
-
-

JDBC implementation makes the transaction log to be persisted into a database. -Transaction subsystem accesses the database via linked (via JNDI) non-transactional (jta=false) datasource. -When the transaction subsystem configures the JDBC store implementation then -the Transaction Manager creates one or few database tables (if they do not exist) to persist transaction data -when WildFly starts. Narayana creates a separate table for each store type. -Narayana uses the store type to grouping transaction records of the same type.

-
-
-

Narayana uses the following store types in WildFly

-
-
-
    -
  • -

    action store stores data for JTA transactions

    -
  • -
  • -

    state store stores data for TXOJ objects

    -
  • -
  • -

    communications store stores data for monitoring remote JTS transactions and storing CORBA IOR’s

    -
  • -
-
-
-

Attributes configuration may define a prefix for each store type. -When we configure no prefix, or the same prefix for all store types -then Narayana saves the transaction data into the same database table. -By default, Narayana persists transaction log in database table named JBossTSTxTable.

-
-
-
jboss cli example to setup JDBC object store
-
-
# PostgreSQL driver module
-./bin/jboss-cli.sh "embed-server, module add --name=org.postgresql --resources=/tmp/postgresql.jar \
-  --dependencies=java.se\,jakarta.transaction.api"
-
-# non-jta PostgreSQL datasource creation
-./bin/jboss-cli.sh "embed-server --server-config=standalone.xml,data-source add --name=JDBCStore \
-  --jndi-name=java:jboss/datasources/jdbcstore_postgresql --jta=false \
-  --connection-url=jdbc:postgresql://localhost:5432/test --user-name=test --password=test \
-  --driver-name=postgresql"
-
-# transaction subsystem configuration
-./bin/jboss-cli.sh "embed-server --server-config=standalone.xml, \
-  /subsystem=transactions:write-attribute(name=jdbc-store-datasource, \
-  value=java:jboss/datasources/jdbcstore_postgresql), \
-  /subsystem=transactions:write-attribute(name=use-jdbc-store,value=true)"
-./bin/jboss-cli.sh "embed-server --server-config=standalone.xml, \
-  /subsystem=transactions:write-attribute(name=jdbc-state-store-table-prefix,value=state), \
-  /subsystem=transactions:write-attribute(name=jdbc-state-store-drop-table,value=false),
-  /subsystem=transactions:write-attribute(name=jdbc-communication-store-table-prefix,value=communication), \
-  /subsystem=transactions:write-attribute(name=jdbc-communication-store-drop-table,value=false),
-  /subsystem=transactions:write-attribute(name=jdbc-action-store-table-prefix,value=action), \
-  /subsystem=transactions:write-attribute(name=jdbc-action-store-drop-table,value=false)"
-
-
-
-
XML configuration example for JDBC object-store
-
-
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
-  ...
-    <jdbc-store datasource-jndi-name="java:jboss/datasources/jdbcstore_postgresql">
-        <action table-prefix="action" drop-table="false"/>
-        <communication table-prefix="communication" drop-table="false"/>
-        <state table-prefix="state" drop-table="false"/>
-    </jdbc-store>
-  ...
-</subsystem>
-
-
-
-
-
-
commit-markable-resources
-
-

Makes possible for a database non-XA datasource (i.e., a local resource) to reliably -participate in an XA transaction -in the two-phase commit processing. -The datasource has to be configured with connectable attribute of value true and linked to transaction -subsystem as a commit markable resource (CMR).

-
-
-

As a prerequisite the database must contain a table named xids -(the database table name can be configured with attribute name under commit-markable-resource) -where Narayana persists additional metadata when two-phase commit prepares the non-XA datasource.

-
-
-

The SQL select that has to be working for xids table can be found -in the Narayana code.

-
-
-
example of SQL statement to create the xids table to store CMR metadata
-
-
-- PostgreSQL
-CREATE TABLE xids (
-  xid bytea, transactionManagerID varchar(64), actionuid bytea
-);
-CREATE UNIQUE INDEX index_xid ON xids (xid);
-
--- Oracle
-CREATE TABLE xids (
-  xid RAW(144), transactionManagerID VARCHAR(64), actionuid RAW(28)
-);
-CREATE UNIQUE INDEX index_xid ON xids (xid);
-
--- H2
-CREATE TABLE xids (
-  xid VARBINARY(144), transactionManagerID VARCHAR(64), actionuid VARBINARY(28)
-);
-CREATE UNIQUE INDEX index_xid ON xids (xid);
-
-
-
-
example of CMR datasource configuration in subsystem
-
-
# parameter 'connectable' is true for datasource
-./bin/jboss-cli.sh "embed-server --server-config=standalone.xml,\
-  /subsystem=datasources/data-source=ConnectableCMRDs:add(enabled=true, \
-  jndi-name=java:jboss/datasources/ConnectableCMRDs, jta=true, use-java-context=true, \
-  use-ccm=true, connectable=true, connection-url=\"jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\", \
-  driver-name=h2)"
-
-# linking the datasource into the transaction subsystem
-./bin/jboss-cli.sh "embed-server --server-config=standalone.xml,\
-  /subsystem=transactions/commit-markable-resource=\"java:jboss/datasources/ConnectableCMRDs\":add"
-./bin/jboss-cli.sh "embed-server --server-config=standalone.xml, \
-  /subsystem=transactions/commit-markable-resource=\"java:jboss/datasources/ConnectableCMRDs\":write-attribute(name=name, value=xids), \
-  /subsystem=transactions/commit-markable-resource=\"java:jboss/datasources/ConnectableCMRDs\":write-attribute(name=batch-size, value=10), \  /subsystem=transactions/commit-markable-resource=\"java:jboss/datasources/ConnectableCMRDs\":write-attribute(name=immediate-cleanup, value=false)"
-
-
-
-
XML configuration example for commit-markable-resources
-
-
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
-  ...
-  <commit-markable-resources>
-    <commit-markable-resource jndi-name="java:jboss/datasources/ConnectableCMRDs">
-      <xid-location name="xids" batch-size="10"/>
-    </commit-markable-resource>
-  </commit-markable-resources>
-  ...
-</subsystem>
-
-
-
-
-
log-store
-
-

log-store is a runtime only resource -that can be loaded with a snapshot of the content of the Narayana object store. -The operation /subsystem=transactions/log-store=log-store:probe loads -persisted transaction records from object store and that can be viewed in the model. -Another :probe operation flushes the old data and loads up-to-date records.

-
-
-
explore the snapshot of the Narayana object store
-
-
/subsystem=transactions/log-store=log-store:probe
-/subsystem=transactions/log-store=log-store:read-resource(recursive=true, include-runtime=true)
-
-
-
-

The resulted listing will be similar to the following one. -In this case we can see one transaction with one participant with status PREPARED.

-
-
-
-
{
-  "outcome" => "success",
-  "result" => {
-    "expose-all-logs" => false,
-    "type" => "default",
-    "transactions" => {"0:ffffc0a80065:-22769d16:60c87436:1a" => {
-      "age-in-seconds" => "48",
-      "id" => "0:ffffc0a80065:-22769d16:60c87436:1a",
-      "jmx-name" => undefined,
-      "type" => "StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction",
-      "participants" => {"1" => {
-        "eis-product-name" => undefined,
-        "eis-product-version" => undefined,
-        "jmx-name" => undefined,
-        "jndi-name" => "1",
-        "status" => "PREPARED",
-        "type" => "/StateManager/AbstractRecord/XAResourceRecord"
-      }}
-    }}
-  }
-}
-
-
-
-

The same content listed as a directory structure when we configure ShadowNoFileLock store

-
-
-
-
tree standalone/data/tx-object-store/
-standalone/data/tx-object-store/
-└── ShadowNoFileLockStore
-    └── defaultStore
-        ├── EISNAME
-        │   └── 0_ffffc0a80065_-22769d16_60c87436_14
-        └── StateManager
-            └── BasicAction
-                └── TwoPhaseCoordinator
-                    └── AtomicAction
-                        └── 0_ffffc0a80065_-22769d16_60c87436_1a
-
-
-
-
log-store transactions and participant operations
-
-

The transactions and participant resources contains several operations -that can be used to work with the content of the object store.

-
-
-
    -
  • -

    delete Removes the transaction record from the object store -and calls the XAResource.forget call at all participants.

    -
  • -
  • -

    refresh Reloads information from the Narayana object store about the participant -and updates the information from object store to model.

    -
  • -
  • -

    recover This operation switches the participant status to PREPARED. -This is useful mostly for HEURISTIC participant records as HEURISTIC state is -skipped by period recovery processing. Switching the HEURISTIC to PREPARED -means that the periodic recovery will try to finish the record.

    -
  • -
-
-
-
operations at log-store transactions structure
-
-
# delete of the transaction that subsequently deletes all participants
-/subsystem=transactions/log-store=log-store/transactions=0\:ffffc0a80065\:-22769d16\:60c87436\:1a:delete
-# delete of the particular participant
-/subsystem=transactions/log-store=log-store/transactions=0\:ffffc0a80065\:-22769d16\:60c87436\:1a/participants=1:delete
-# refresh and recover
-/subsystem=transactions/log-store=log-store/transactions=0\:ffffc0a80065\:-22769d16\:60c87436\:1a/participants=1:refresh
-/subsystem=transactions/log-store=log-store/transactions=0\:ffffc0a80065\:-22769d16\:60c87436\:1a/participants=1:recover
-
-
-
-
-
-
client
-
-

Configuration related to the -WildFly Transaction Client.

-
-
-
XML configuration example for client
-
-
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
-  ...
-  <client stale-transaction-time="600"/>
-  ...
-</subsystem>
-
-
-
-
-
-
-

7.10. Metrics Subsystem Configuration

-
- - - - - -
- - -
-

This subsystem exposes only base metrics from the WildFly Management Model and JVM MBeans.

-
-
-

MicroProfile Metrics is no longer supported by WildFly. For -a more robust alternative, see Micrometer and the micrometer susbsystem.

-
-
-
-
-

7.10.1. Extension

-
-

This org.wildfly.extension.metrics extension is included in all the standalone configurations included in the -WildFly distribution as well as the metrics layer.

-
-
-

You can also add the extension to a configuration without it either by adding -an <extension module="org.wildfly.extension.metrics"/> -element to the xml or by using the following CLI operation:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.metrics:add
-
-
-
-
-

7.10.2. Management Model

-
-

The /subsystem=metrics resource defines three attributes:

-
-
-
    -
  • -

    security-enabled - a boolean to indicate whether authentication is required to access the HTTP metrics endpoint (described below). By default, it is true. The -standalone configurations explicitly sets it to false to accept unauthenticated access to the HTTP endpoints.

    -
  • -
  • -

    exposed-subsystems - a list of strings corresponding to the names of subsystems that exposes their metrics in the HTTP metrics endpoints. -By default, it is not defined (there will be no metrics exposed by subsystem. The special wildcard "" can be used to expose metrics from all subsystems. The standalone -configuration sets this attribute to "".

    -
  • -
  • -

    prefix - A string to prepend to WildFly metrics that are exposed by the HTTP endpoint /metrics with the Prometheus output format.

    -
  • -
-
-
-
-

7.10.3. HTTP Endpoint

-
-

The Metric HTTP endpoint is accessible on WildFly HTTP management interface http://localhost:9990/metrics.

-
-
-

Secured access to the HTTP endpoint is controlled by the security-enabled attribute of the /subsystem=metrics resource. -If it is set to true, the HTTP client must be authenticated.

-
-
-

If security is disabled, the HTTP endpoint returns a 200 OK response:

-
-
-
-
$ curl -v http://localhost:9990/metrics
-< HTTP/1.1 200 OK
-...
-# HELP base_classloader_total_loaded_class_count Displays the total number of classes that have been loaded since the Java virtual machine has started execution
-.
-# TYPE base_classloader_total_loaded_class_count counter
-base_classloader_total_loaded_class_count 10822.0
-...
-
-
-
-

If security has been enabled, the HTTP client must pass the credentials corresponding to a management user -created by the add-user script. For example:

-
-
-
-
$ curl -v --digest -u myadminuser:myadminpassword http://localhost:9990/metrics
-< HTTP/1.1 200 OK
-...
-# HELP base_classloader_total_loaded_class_count Displays the total number of classes that have been loaded since the Java virtual machine has started execution
-.
-# TYPE base_classloader_total_loaded_class_count counter
-base_classloader_total_loaded_class_count 10822.0
-...
-
-
-
-

If the authentication fails, the server will reply with a 401 NOT AUTHORIZED response.

-
-
-
-

7.10.4. Exposed Metrics

-
-

The HTTP endpoint exposes the following metrics:

-
-
-
    -
  • -

    Base metrics - Metrics from JVM MBeans (read from their JMX MBeans)

    -
  • -
  • -

    Vendor metrics - WildFly Metrics from the management model subsystem and deployment subtrees.

    -
  • -
-
-
-

The HTTP endpoint exposes the metrics in the Prometheus format only.

-
-
-
WildFly Metrics Description
-
-

WildFly metrics names are based on the subsystem that provides them as well as the name of the attribute from the management model. -Their name can also be prepended with a prefix (specified on the /subsystem=metrics resource). -Other information is stored using labels.

-
-
-

For example Undertow exposes a metric attribute request-count for every Servlet in an application deployment. -This attribute will be exposed to Prometheus with the name wildfly_undertow_request_count. -Other information such as the name of the Servlet are added to the labels of the metrics.

-
-
-

The helloworld quickstart demonstrates the use of CDI and Servlet in Wildfly. -A corresponding metric will be exposed for it with the name and labels:

-
-
-
    -
  • -

    wildfly_undertow_request_count_total{deployment="helloworld.war",servlet="org.jboss.as.quickstarts.helloworld.HelloWorldServlet",subdeployment="helloworld.war"}

    -
  • -
-
-
- - - - - -
- - -Some subsystems (such as undertow or messaging-activemq) do not enable their statistics by default -as they have an impact on performance and memory usage. These subsystems provides a statistics-enabled attribute that must -be set to true to enable them. -For convenience, WildFly standalone configuration provides expressions to enable the statistics by setting a -System property -Dwildfly.statistics-enabled=true to enable statistics on the subsystems provided by the configuration. -
-
-
-
-
-
-

7.11. Micrometer Metrics Subsystem Configuration

-
-

Micrometer is a vendor-neutral observability facade that provides a generic, reusable API for registering and recording metrics related to application performance. This extension provides an integration with Micrometer, exposing its API to deployed applications so that they may expose application-specific metrics in addition to the server metrics added by the extension.

-
-
- - - - - -
- - -Standard WildFly continues to use the existing metrics subsystem, so this extension must be manually added and configured. See below for details. -
-
-
-

7.11.1. Extension

-
-

This org.wildfly.extension.micrometer extension is available to all the standalone configurations included in the WildFly distribution, but must be added manually:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.micrometer:add
-[standalone@localhost:9990 /] /subsystem=micrometer:add(endpoint="http://localhost:4318/v1/metrics")
-[standalone@localhost:9990 /] reload
-
-
-
-

This subsystem exposes metrics from the WildFly Management Model and JVM MBeans, as well as end-user applications via the Micrometer API now exposed to applications deployed to the server. By default, this extension will attempt to push metrics data via the OTLP protocol to an OpenTelemetry-compatible "collector". The endpoint for the collector must be configured explicitly, as you can see in the write-attribute statement above.

-
-
- - - - - -
- - -It is assumed that the server administrator will provision and secure the collector, which is outside the scope of this document. -
-
-
-

Note that this an alternative to the existing WildFly Metrics extension. While they may be run concurrently, it is not advisable, as this will likely have an impact on server performance due to the duplicated metrics collection. To disable WildFly Metrics, issue these commands:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=metrics:remove()
-[standalone@localhost:9990 /] /extension=org.wildfly.extension.metrics:remove()
-[standalone@localhost:9990 /] reload
-
-
-
-
-

7.11.2. Management Model

-
-

The /subsystem=micrometer resource defines three attributes:

-
-
-
    -
  • -

    endpoint - the URL of the metrics collector endpoint (default: http://localhost:4318/v1/metrics)

    -
  • -
  • -

    exposed-subsystems - a list of strings corresponding to the names of subsystems that exposes their metrics in the -HTTP metrics endpoints. By default, it is not defined (there will be no metrics exposed by subsystem). The special wildcard "*" can be used to expose metrics from all subsystems. The standalone configuration sets this attribute to "*".

    -
  • -
  • -

    step - the step size, or reporting frequency, to use (in seconds).

    -
  • -
-
-
-
-

7.11.3. Exposed Metrics

-
-

The following types of metrics are gathered and published by Micrometer:

-
-
-
    -
  • -

    Metrics from JVM MBeans (read directly from the JMX MBeans)

    -
  • -
  • -

    WildFly metrics from the management model subsystem and deployment subtrees.

    -
  • -
  • -

    Any application-specific metrics provided via the injected Micrometer MeterRegistry instance.

    -
  • -
-
-
-
WildFly Metrics Description
-
-

WildFly metrics names are based on the subsystem that provides them, as well as the name of the attribute from the management model.

-
-
-

For example Undertow exposes a metric attribute request-count for every Servlet in an application deployment. This attribute will be exposed with the name undertow_request_count. Other information such as the name of the Servlet are added to the tags of the metric.

-
-
-

The helloworld quickstart demonstrates the use of CDI and Servlet in WildFly. A corresponding metric will be exposed for it with the name and tags:

-
-
-
-
undertow_request_count_total{deployment="helloworld.war",servlet="org.jboss.as.quickstarts.helloworld.HelloWorldServlet",subdeployment="helloworld.war"} 4.0
-
-
-
- - - - - -
- - -Some subsystems (such as undertow or messaging-activemq) do not enable their statistics by default as they have an impact on performance and memory usage. These subsystems provide a statistics-enabled attribute that must be set to true to enable them. For convenience, WildFly standalone configuration provides expressions to enable the statistics by setting a System property -Dwildfly.statistics-enabled=true to enable statistics on the subsystems provided by the configuration. -
-
-
-
-
-

7.11.4. Use in Applications

-
-

Unlike the previous metrics systems, this new extension exposes an API (that of Micrometer) to applications in order to allow developers to record and export metrics out of the box. To do so, application developers will need to inject a MeterRegistry instance:

-
-
-
-
package com.redhat.wildfly.micrometerdemo;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.Path;
-import io.micrometer.core.instrument.MeterRegistry;
-
-@RequestScoped
-@Path("/endpoint")
-public class Endpoint {
-    @Inject
-    private MeterRegistry registry;
-
-    @GET
-    public String method() {
-        registry.counter("dummy").increment();
-        return "Counter is " + registry.counter("dummy").count();
-    }
-}
-
-
-
-

This provides the application with a MeterRegistry instance that will have any recorded metrics exported with the system metrics WildFly already exposes. There is no need for an application to include the Micrometer dependencies in the application archive, as they are provided by the server out-of-the-box:

-
-
-
-
<dependency>
-    <groupId>io.micrometer</groupId>
-    <artifactId>micrometer-core</artifactId>
-    <version>${version.micrometer}</version>
-    <scope>provided</scope>
-</dependency>
-
-
-
-
-
-

7.12. OpenTelemetry Subsystem Configuration

-
-

7.12.1. Extension

-
-

This extension is not included in any of the standalone configurations included in the WildFly distribution. -To enable, the administrator must run the following CLI commands:

-
-
-
-
 $ jboss-cli.sh -c "/extension=org.wildfly.extension.opentelemetry:add()"
- $ jboss-cli.sh -c "/subsystem=opentelemetry:add()"
-
-
-
-
-

7.12.2. Configuration

-
-

Systems administrators can configure a number of aspects of OpenTelemetry: the exporter, span processor, and sampler.

-
-
-
Exporter
-
-

The exporter can be selected and configured using the exporter child element, which supports these attributes:

-
-
-
    -
  • -

    exporter: WildFly supports two different exporters:

    -
    -
      -
    • -

      jaeger: The default exporter

      -
    • -
    • -

      otlp: The OpenTelemetry protocol

      -
    • -
    -
    -
  • -
  • -

    endpoint: The URL via which OpenTelemetry will push traces. The default is Jaeger’s gRPC-based endpoint, http://localhost:14250

    -
  • -
-
-
-
-
Span Processor
-
-

The span process is configured via the span-processor element, which supports the following attributes:

-
-
-
    -
  • -

    type: The type of span processor to use.

    -
    -
      -
    • -

      batch: The default processor, which sends traces in batches as configured via the remaining attributes

      -
    • -
    • -

      simple: Traces are pushed to the exporter as they finish.

      -
    • -
    -
    -
  • -
  • -

    batch-delay: The amount of time, in milliseconds, to wait before traces are published (default: 5000)

    -
  • -
  • -

    max-queue-size: The maximum size of the queue before traces are dropped (default: 2048)

    -
  • -
  • -

    max-export-batch-size: The maximum number of traces that are published in each batch, which must be smaller or equal to `max-queue-size (default: 512)

    -
  • -
  • -

    export-timeout: The maximum amount of time in milliseconds to allow for an export to complete before being cancelled (default: 30000)

    -
  • -
-
-
-
-
Sampler
-
-

The sampler is configured via the sampler element:

-
-
-
    -
  • -

    type: The type of sampler to use

    -
    -
      -
    • -

      on: Always on (all traces are recorded)

      -
    • -
    • -

      off: Always off (no traces are recorded)

      -
    • -
    • -

      ratio: Return a ratio of the traces (e.g., 1 trace in 10000).

      -
    • -
    -
    -
  • -
  • -

    ratio: The value used to configure the ratio sampler, which must be within [0.0, 1.0].For example, if 1 trace in 10,000 is to be exported, this value would be 0.0001.

    -
  • -
-
-
-
-
Example Configuration
-
-

The following XML is an example of the full configuration, including default values (WildFly does not typically persist -default values, so what you see in the configuration file may look different):

-
-
-
-
<subsystem xmlns="urn:wildfly:opentelemetry:1.0"
-        service-name="example">
-    <exporter
-        type="jaeger"
-        endpoint="http://localhost:14250"/>
-    <span-processor
-        type="batch"
-        batch-delay="4500"
-        max-queue-size="128"
-        max-export-batch-size="512"
-        export-timeout="45"/>
-    <sampler
-        type="on"/>
-</subsystem>
-
-
-
-
-
-

7.12.3. Application Usage

-
-

All incoming REST requests are automatically traced, so no work needs be done in user applications.If a REST request is received and the OpenTelemetry context propagation header (traceparent) is present, the request will traced as part of the remote trace context automatically.

-
-
-

Likewise, all Jakarta REST Client calls will have the trace context added to outgoing request headers so that requests to external applications can be traced correctly (assuming the remote system properly handles OpenTelemetry trace context propagation).If the REST Client call is made to another application on the local WildFly server, or a remote server of the same version or later, the trace context will propagate automatically as described above.

-
-
-

While automatic tracing may be sufficient in many cases, it will often be desirable to have traces occur throughout the user application.To support that, WildFly makes available the io.opentelemetry.api.OpenTelemetry and -io.opentelemetry.api.trace.Tracer instances, via CDI injection.A user application, then is able to create arbitrary spans as part of the server-managed trace:

-
-
-
-
@Path("/myEndpoint")
-public class MyEndpoint {
-    @Inject
-    private Tracer tracer;
-
-    @GET
-    public Response doSomeWork() {
-        final Span span = tracer.spanBuilder("Doing some work")
-                .startSpan();
-        span.makeCurrent();
-        doSomeMoreWork();
-        span.addEvent("Make request to external system.");
-        makeExternalRequest();
-        span.addEvent("All the work is done.");
-        span.end();
-
-        return Response.ok().build();
-}
-
-
-
-
-

7.12.4. Component Reference

-
-

OpenTelemetry support is provided via the OpenTelemetry project.

-
-
-
-
-

7.13. Health Subsystem Configuration

-
- - - - - -
- - -
-

This subsystem exposes only healthiness checks for the WildFly runtime. -Support for MicroProfile Health is provided by -the microprofile-health-smallrye subsystem.

-
-
-
-
-

7.13.1. Extension

-
-

This org.wildfly.extension.health extension is included in all the standalone configurations included in the -WildFly distribution as well as the health layer.

-
-
-

You can also add the extension to a configuration without it either by adding -an <extension module="org.wildfly.extension.health"/> -element to the xml or by using the following CLI operation:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.health:add
-
-
-
-
-

7.13.2. Management Model

-
-

The /subsystem=health resource defines one attribute:

-
-
-
    -
  • -

    security-enabled - a boolean to indicate whether authentication is required to access the HTTP health endpoint (described below). By default, it is true. The -standalone configurations explicitly sets it to false to accept unauthenticated access to the HTTP endpoints.

    -
  • -
-
-
-
-

7.13.3. HTTP Endpoint

-
-

The Health HTTP endpoint is accessible on the WildFly HTTP management interface http://localhost:9990/health.

-
-
-

The health subsystem registers three HTTP endpoints:

-
-
-
    -
  • -

    /health to test both the liveness and readiness of the application server.

    -
  • -
  • -

    /health/live to test the liveness of the application server

    -
  • -
  • -

    /health/ready to test the readiness of the application server.

    -
  • -
  • -

    /health/started to test the startup of the application server.

    -
  • -
-
-
-

The Health HTTP endpoints are accessible on the WildFly HTTP management interface (e.g. http://localhost:9990/health).

-
-
-

If the application server is healthy, it will return a 200 OK response:

-
-
-
-
$ curl -v http://localhost:9990/health
-< HTTP/1.1 200 OK
-
-
-
-

If the application server is not healthy, it returns 503 Service Unavailable

-
-
-
-
$ curl -v http://localhost:9990/health
-< HTTP/1.1 503 Service Unavailable
-
-
-
-
Secured Access to the HTTP endpoints
-
-

Secured access to the HTTP endpoint is controlled by the security-enabled attribute. -If it is set to true, the HTTP client must be authenticated.

-
-
-

If security has been enabled, the HTTP client must pass the credentials corresponding to a management user -created by the add-user script. For example:

-
-
-
-
$ curl -v --digest -u myadminuser:myadminpassword http://localhost:9990/health
-< HTTP/1.1 200 OK
-
-
-
-

If the authentication fails, the server will reply with a 401 NOT AUTHORIZED response.

-
-
- - - - - -
- - -The HTTP response contains additional information with individual outcomes for each probe that determined the healthiness. -This is informational only and the HTTP response code is the only relevant data to determine the healthiness of the application server. -
-
-
-
-
Default Server Procedures
-
-

WildFly provides some readiness procedures that are checked to determine if the application server is ready to serve requests:

-
-
-
    -
  • -

    boot-errors checks that there were no errors during the server boot sequence

    -
  • -
  • -

    deployments-status checks that all deployments were deployed without errors

    -
  • -
  • -

    server-state checks that the server state is running

    -
  • -
-
-
-
-
-
-

7.14. MicroProfile Config Subsystem Configuration

-
-

Support for MicroProfile Config is provided by - the microprofile-config-smallrye subsystem.

-
-
-

7.14.1. Required Extension

-
-

This extension is included in the standard configurations included in the -WildFly distribution.

-
-
-

You can also add the extension to a configuration without it either by adding -an <extension module="org.wildfly.extension.microprofile.config-smallrye"/> -element to the xml or by using the following CLI operation:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.config-smallrye:add
-
-
-
-
-

7.14.2. Supported ConfigSources

-
-

In addition to the default ConfigSources specified by the MicroProfile Config specification -(environment variables, System properties and META-INF/microprofile-config.properties file), the -microprofile-config-smallrye provides additional types of ConfigSource

-
-
-
ConfigSource from Properties
-
-

You can store properties directly in a config-source in the subsystem by using the properties -attribute when you add the config-source:

-
-
-
-
/subsystem=microprofile-config-smallrye/config-source=props:add(properties={"prop1" = "foo", "prop2" = "bar"})
-
-
-
-

This results in the XML configuration:

-
-
-
-
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
-    <config-source name="props">
-        <property name="prop1" value="foo"/>
-        <property name="prop2" value="bar"/>
-    </config-source>
-</subsystem>
-
-
-
-
-
ConfigSource from Directory
-
-

You can also read properties from a directory where each file is the name of -a property and the file content is the value of the property.

-
-
-

For example, let’s imagine that the directory /etc/config/numbers-app/ contains 2 files:

-
-
-
    -
  • -

    the num.size file contains the value 5

    -
  • -
  • -

    the num.max file contains the value 100

    -
  • -
-
-
-

We can create a config-source` to access these properties by using the operation:

-
-
-
-
/subsystem=microprofile-config-smallrye/config-source=file-props:add(dir={path=/etc/config/numbers-app})
-
-
-
-

This results in the XML configuration:

-
-
-
-
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:2.0">
-    <config-source name="file-props">
-        <dir path="/etc/config/numbers-app"/>
-    </config-source>
-</subsystem>
-
-
-
-

With that configuration, any application deployed in WildFly can use the num.size and -num.max properties that are stored in the directory:

-
-
-
-
@Inject
-@ConfigProperty(name = "num.size")
-int numSize; (1)
-
-@Inject
-@ConfigProperty(name = "num.max")
-int numMax; (2)
-
-
-
- - - - - - - - - -
1will be set to 5
2will be set to 100
-
-
- - - - - -
- - -This corresponds to the layout used by OpenShift ConfigMaps. -The dir value corresponds to the mountPath in the ConfigMap definition in OpenShift or Kubernetes. -
-
-
-
ConfigSources from Root directory
-
-

You can also point to a root directory by adjusting the examples in the preceding section to include -root=true when defining them. Top level directories within this root directory each become an -individual ConfigSource reading from a directory similar to what we saw earlier in -ConfigSource from Directory. Any directories below the top-level -directories are ignored. Also, any files in the root directory are ignored; only files in the top -level directories within the root directory will be used for the configuration.

-
-
-

This is especially useful when running on OpenShift where constructs such as ConfigMap and -ServiceBinding instances get mapped under -a common known location. For example if there are two ConfigMap instances (for this example, -we will call them map-a, and map-b) used by your application pod, they will -each get mapped under /etc/config. So you would have /etc/config/map-a and /etc/config/map-b -directories.

-
-
-

Each of these directories will have files where the file name is the name of the property and the file -content is the value of the property, like we saw earlier.

-
-
-

We can thus simply run the following CLI command to pick up all these child directories as -a ConfigSource each:

-
-
-
-
/subsystem=microprofile-config-smallrye/config-source=config-map-root:add(dir={path=/etc/config, root=true})
-
-
-
-

This results in the XML configuration:

-
-
-
-
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:2.0">
-    <config-source name="config-map-root">
-        <dir path="/etc/config" root="true"/>
-    </config-source>
-</subsystem>
-
-
-
-

Assuming the /etc/config directory contains the map-a and map-b directories we are using -for this example, the above is analogous to doing:

-
-
-
-
/subsystem=microprofile-config-smallrye/config-source=file-props:add(dir={path=/etc/config/map-a})
-/subsystem=microprofile-config-smallrye/config-source=file-props:add(dir={path=/etc/config/map-b})
-
-
-
-

Specifying the root directory rather than each individual directory removes the need to know the -exact names of each entry under the common parent directory (this is especially useful in some -OpenShift scenarios where the names of these directories are auto-generated).

-
-
-

The situation where two ConfigSource entries under the same root both contain the same property -should be avoided. However, to make this situation deterministic, the directories representing each -ConfigSource are sorted by their name according to standard Java sorting rules before doing the -lookup of values. To make this more concrete, if we have the following entries: -* /etc/config/map-a/name contains kabir -* /etc/config/map-b/name contains jeff

-
-
-

Since map-a will come before map-b after sorting, in the following scenario kabir (coming from -map-a) will be injected for the following username field:

-
-
-
-
@Inject
-@ConfigProperty(name = "name")
-String username;
-
-
-
-

You may override this default sorting by including a file called config_ordinal in a directory. The -ordinal specified in that file will be used for config values coming from that directory. Building -on our previous example, if we had: -* /etc/config/map-a/config_ordinal contains 120 -* /etc/config/map-b/config_ordinal contains 140

-
-
-

Since now map-b has a higher ordinal (140) than map-a (120), we will instead inject the value -jeff for the earlier username field.

-
-
-

If there is no config_ordinal file in a top-level directory under the root directory, the -ordinal used when specifying the ConfigSource will be used for that directory.

-
-
-
-
-
ConfigSource from Class
-
-

You can create a specific type of ConfigSource implementation by creating a config-source resource -with a class attribute.

-
-
-

For example, you can provide an implementation of org.eclipse.microprofile.config.spi.ConfigSource -that is named org.example.MyConfigSource and provided by a JBoss module named org.example:

-
-
-
-
/subsystem=microprofile-config-smallrye/config-source=my-config-source:add(class={name=org.example.MyConfigSource, module=org.example})
-
-
-
-

This results in the XML configuration:

-
-
-
-
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:2.0">
-    <config-source name="my-config-source">
-        <class name="org.example.MyConfigSource" module="org.example"/>
-    </config-source>
-</subsystem>
-
-
-
-

All properties from this ConfigSource will be available to any WildFly deployment.

-
-
-
-
ConfigSourceProvider from Class
-
-

You can create a specific type of ConfigSourceProvider implementation by creating a config-source-provider resource -with a class attribute.

-
-
-

For example, you can provide an implementation of org.eclipse.microprofile.config.spi.ConfigSourceProvider -that is named org.example.MyConfigSourceProvider and provided by a JBoss module named org.example:

-
-
-
-
/subsystem=microprofile-config-smallrye/config-source-provider=my-config-source-provider:add(class={name=org.example.MyConfigSourceProvider, module=org.example})
-
-
-
-

This results in the XML configuration:

-
-
-
-
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:2.0">
-    <config-source-provider name="my-config-source-provider">
-         <class name="org.example.MyConfigSourceProvider" module="org.example"/>
-    </config-source-provider>
-</subsystem>
-
-
-
-

All properties from the ConfigSource`s provided by this `ConfigSourceProvider will be available to any WildFly deployment.

-
-
-
-
-

7.14.3. Deployment

-
-

Applications that are deployed in WildFly must have Jakarta Contexts and Dependency Injection enabled (e.g. with a META-INF/beans.xml -or by having Jakarta Contexts and Dependency Injection Bean annotation) to be able to use MicroProfile Config in their code.

-
-
-
-

7.14.4. Component Reference

-
-

The MicroProfile Config implementation is provided by the SmallRye Config project.

-
-
- -
-
-
-
-

7.15. MicroProfile Health Subsystem Configuration

-
-

Support for MicroProfile Health is provided by - the microprofile-health-smallrye subsystem.

-
-
-

7.15.1. Required Extension

-
-

This extension is included in the standalone-microprofile configurations included in the -WildFly distribution.

-
-
-

You can also add the extension to a configuration without it either by adding -an <extension module="org.wildfly.extension.microprofile.health-smallrye"/> -element to the xml or by using the following CLI operation:

-
-
-
-
[standalone@localhost:9990 /]/extension=org.wildfly.extension.microprofile.health-smallrye:add
-
-
-
-

It depends on the base health extension org.wildfly.extension.health that must be installed.

-
-
-
-

7.15.2. Management Operations

-
-

The healthiness of the application server can be queried by calling 3 different operations:

-
-
-
    -
  • -

    check to check both the liveness and readiness of the runtime

    -
  • -
  • -

    check-live to check only the liveness of the runtime

    -
  • -
  • -

    check-ready to check only the readiness of the runtime

    -
  • -
  • -

    check-started to check only the startup of the runtime

    -
  • -
-
-
-
-
[standalone@localhost:9990 /] /subsystem=microprofile-health-smallrye:check
-{
-    "outcome" => "success", (1)
-    "result" => {
-        "status" => "UP", (2)
-        "checks" => [
-            {
-                "name" => "server-state",
-                "status" => "UP",
-                "data" => {"value" => "running"}
-            },
-            {
-                "name" => "empty-startup-checks",
-                "status" => "UP"
-            },
-            {
-                "name" => "empty-readiness-checks",
-                "status" => "UP"
-            },
-            {
-                "name" => "boot-errors",
-                "status" => "UP"
-            },
-            {
-                "name" => "empty-liveness-checks",
-                "status" => "UP"
-            },
-            {
-                "name" => "deployments-status",
-                "status" => "UP"
-            }
-        ]
-    }
-}
-
-
-
- - - - - - - - - -
1this outcome means that the management operation is successful
2this status corresponds to the health check, UP if the application server is healthy, DOWN else.
-
-
-
-

7.15.3. HTTP Endpoints

-
-

The MicroProfile Health Check specifications defines three HTTP endpoints:

-
-
-
    -
  • -

    /health to test both the liveness and readiness of the application server.

    -
  • -
  • -

    /health/live to test the liveness of the application server

    -
  • -
  • -

    /health/ready to test the readiness of the application server.

    -
  • -
  • -

    /health/started to test the startup of the application server.

    -
  • -
-
-
-

The Health HTTP endpoints are accessible on WildFly HTTP management interface (e.g. http://localhost:9990/health).

-
-
-

If the application server is healthy, it will return a 200 OK response:

-
-
-
-
$ curl -v http://localhost:9990/health
-< HTTP/1.1 200 OK
-...
-{"status":"UP","checks":[{"name":"server-state","status":"UP","data":{"value":"running"}},{"name":"empty-startup-checks","status":"UP"},{"name":"empty-readiness-checks","status":"UP"},{"name":"boot-errors","status":"UP"},{"name":"empty-liveness-checks","status":"UP"},{"name":"deployments-status","status":"UP"}]}
-
-
-
-

If the application server is not healthy, it returns 503 Service Unavailable

-
-
-
-
$ curl -v http://localhost:9990/health
-< HTTP/1.1 503 Service Unavailable
-...
-{"outcome":"DOWN","checks":[{"name":"myFailingProbe","state":"DOWN","data":{"foo":"bar"}}]}
-
-
-
-
Secured Access to the HTTP endpoints
-
-

Secured access to the HTTP endpoint is controlled by the security-enabled attribute of the /subsystem=microprofile-health-smallrye resource. -The value of this attribute will override the security-enabled attribute of the /subsystem=health resource (documented in Health subsystem configuration guide). -If it is set to true, the HTTP client must be authenticated.

-
-
-

If security has been enabled, the HTTP client must pass the credentials corresponding to a management user -created by the add-user script. For example:

-
-
-
-
$ curl -v --digest -u myadminuser:myadminpassword http://localhost:9990/health
-< HTTP/1.1 200 OK
-...
-{"status":"UP","checks":[{"name":"empty-liveness-checks","status":"UP"},{"name":"server-state","status":"UP","data":{"value":"running"}},{"name":"boot-errors","status":"UP"},{"name":"deployments-status","status":"UP"},{"name":"empty-readiness-checks","status":"UP"}]}
-
-
-
-

If the authentication fails, the server will reply with a 401 NOT AUTHORIZED response.

-
-
-
-
Default Server Procedures
-
-

WildFly provides some readiness procedures that are checked to determine if the application server is ready to serve requests:

-
-
-
    -
  • -

    boot-errors checks that there were no errors during the server boot sequence

    -
  • -
  • -

    deployments-status checks that all deployments were deployed without errors

    -
  • -
  • -

    server-state checks that the server state is running

    -
  • -
  • -

    empty-readiness-checks determines the status when there are no readiness check procedures deployed to the server. The outcome of this procedure is determined by the empty-readiness-checks-status attribute. If the attribute is -UP (by default), the server can be ready when there are no readiness checks in the deployments. Setting the empty-readiness-checks-status attribute to DOWN will make this procedure fail when there are no readiness checks in the deployments.

    -
  • -
-
-
-

If a deployment does not provide any readiness checks, WildFly will automatically add one for each deployment (named ready-<deployment name>) which always returns UP.

-
-
- - - - - -
- - -
-

This allows applications that does not provide readiness checks to still be able to inform cloud containers when they are ready to serve requests. -Setting empty-readiness-checks-status to DOWN ensures that the server will not be ready until the application is deployed. At that time, the ready-<deployment name> -will be added (which returns UP) and the empty-readiness-checks procedure will no longer be checked as there is now a readiness check procedure provided either by the deployment or by the server.

-
-
-
-
-

WildFly also provide a liveness procedure that is checked to determine if the application server is live:

-
-
-
    -
  • -

    empty-liveness-checks determines the status when there are no liveness check procedures deployed to the server. The outcome of this procedure is determined by the empty-liveness-checks-status attribute. If the attribute is -UP (by default), the server can be live when there are no liveness checks in the deployments. Setting the empty-liveness-checks-status attribute to DOWN will make this procedure fail when there are no liveness checks in the deployments.

    -
  • -
-
-
-

WildFly also provides a similar procedure for what concerns startup checks:

-
-
-
    -
  • -

    empty-startup-checks determines the status when there are no startup check procedures deployed to the server. The outcome of this procedure is determined by the empty-startup-checks-status attribute. If the attribute is -UP (by default), the server can be ready when there are no startup checks in the deployments. Setting the empty-startup-checks-status attribute to DOWN will make this procedure fail when there are no readiness checks in the deployments.

    -
  • -
-
-
-

If a deployment does not provide any startup checks, WildFly will automatically add one for each deployment (named started-<deployment name>) which always returns UP.

-
-
- - - - - -
- - -
-

This allows applications that does not provide startup checks to still be able to inform cloud containers when they are started to proceed with the container start. -Setting empty-startup-checks-status to DOWN ensures that the server will not be ready until the application is deployed. At that time, the started-<deployment name> -will be added (which returns UP) and the empty-startup-checks procedure will no longer be checked as there is now a startup check procedure provided either by the deployment or by the server.

-
-
-
-
-
-
Disabling Default Server Procedures
-
-

It is possible to disable all these server procedures by using the MicroProfile Config property mp.health.disable-default-procedures.

-
-
- - - - - -
- - -
-

The MicroProfile Config property mp.health.disable-default-procedures is read at 2 different times:

-
-
-
    -
  1. -

    When the server starts, to determine if its server procedures should be disabled or enabled. It can be set using the system property mp.health.disable-default-procedures or the environment variable MP_HEALTH_DISABLE_DEFAULT_PROCEDURES. Setting this property in a deployment is ignored at that time.

    -
  2. -
  3. -

    When an application is deployed, to determine if WildFly should add a readiness check if the deployment does not provide any. At that time, setting this property in a microprofile-config.properties file in the deployment would be taken into account. (with the usual priority rules for MicroProfile Config properties).

    -
  4. -
-
-
-
-
-

When the mp.health.disable-default-procedures is set to true the server will not return any of its health checks in the responses which involve also the default empty configurable checks included before the deployments are processed, namely empty-readiness-checks, empty-startup-checks, and empty-liveness-checks. This means that the server might prematurely respond with invalid UP response particularly to startup and readiness invocations before the user deployment is processed. For this reason, MicroProfile Health specification defines two MicroProfile Config properties that specify the response returned while the server is still processing deployments, i.e. it returns an empty health response:

-
-
-
    -
  • -

    mp.health.default.readiness.empty.response (default DOWN) that specifies empty readiness response. This response will be switched to UP once the user deployment is processed even if it doesn’t contain any readiness checks. Otherwise, it will be switched to the status set by the user readiness checks.

    -
  • -
  • -

    mp.health.default.startup.empty.response (default DOWN) that specifies empty startup response. This response will be switched to UP once the user deployment is processed even if it doesn’t contain any startup checks. Otherwise, it will be switched to the status set by the user startup checks.

    -
  • -
-
-
-
-
-

7.15.4. Component Reference

-
-

The MicroProfile Health implementation is provided by the SmallRye Health project.

-
-
- -
-
-
-
-

7.16. MicroProfile JWT Subsystem Configuration

-
-

Support for MicroProfile JWT RBAC is provided by the microprofile-jwt-smallrye subsystem.

-
-
-

The MicroProfile JWT specification describes how authentication can be performed using cryptographically signed JWT tokens and the contents of the token to be used to establish a resuting identity without relying on access to external repositories of identities such as databases or directory servers.

-
-
-

7.16.1. Subsystem

-
-

The MicroProfile JWT integration is provided by the microprofile-jwt-smallrye subsystem and is included in the default configuration, if not present the subsystem can be added using the following CLI commands.

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.jwt-smallrye:add
-
-[standalone@localhost:9990 /] /subsystem=microprofile-jwt-smallrye:add
-
-
-
-

At this point the server would need to be reloaded to activate the change.

-
-
-
-

7.16.2. Configuration

-
-

The microprofile-jwt-smallrye subsystem contains no configurable attributes or resources, it’s presence is required however to detect if a deployment is making use of the MP-JWT authentication mechanism and to activate support for JWT making use of the SmallRye JWT project.

-
-
-
Activation
-
-

The subsystem will scan all deployments to detect if the MP-JWT mechanism is required for any web components and if true activate the integration and the authentication mechanism.

-
-
-

The classes in the deployment will be scanned to identify if there is a class which extends jakarta.ws.rs.core.Application annotated with the org.eclipse.microprofile.auth.LoginConfig to specify an auth-method. Additionally the auth-method contained within the deployments web.xml will be checked.

-
-
-

If authentication configuration is defined within the @LoginConfig annotation and within the web.xml deployment descriptor the contents of the web.xml are given precedence.

-
-
-

If after evaluating the deployment the resulting auth-method is MP-JWT then this integration will be activated, in all other cases no activation will occur and deployment will continue as normal.

-
-
-
-
MicroProfile Config
-
-

For an individual deployment the configuration in relation to MicroProfile JWT can be provided using MicroProfile Config properties, many are defined within the MicroProfile JWT specification however SmallRye JWT also supports some additional properties.

-
-
-
MicroProfile JWT properties
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Property Name

Default

Description

mp.jwt.verify.publickey

none

Public Key supplied as a string, parsed from it in the order defined in section Supported Public Key Formats.

mp.jwt.verify.publickey.location

none

Config property allows for an external or internal location of Public Key to be specified.

mp.jwt.verify.publickey.algorithm

RS256

Signature algorithm. Set it to ES256 to support the Elliptic Curve signature algorithm.

mp.jwt.decrypt.key.location

none

Config property allows for an external or internal location of Private Decryption Key to be specified.

mp.jwt.verify.issuer

none

Expected value of the JWT iss (issuer) claim.

mp.jwt.verify.audiences

none

Comma separated list of the audiences that a token aud claim may contain.

mp.jwt.token.header

Authorization

Set this property if another header such as Cookie is used to pass the token.

mp.jwt.token.cookie

Bearer

Name of the cookie containing a token. This property will be effective only if mp.jwt.token.header is set to Cookie.

-
-

A minimal microprofile-config.properties could look like: -

-
-
-
-
mp.jwt.verify.publickey.location=META-INF/public.pem
-mp.jwt.verify.issuer=quickstart-jwt-issuer
-
-
-
-
-
Unavailable Options
-
-

There are presently a couple of limitations with support for JWKS which we are looking to address.

-
-
-
    -
  • -

    If a JWKS is inlined using the mp.jwt.verify.publickey property then only the first key from the set will be used with the remainder being ignored.

    -
  • -
  • -

    Encoding of JWKS using Base64 is presently unsupported.

    -
  • -
-
-
-

In both cases a clear text JWKS can be referenced instead using the mp.jwt.verify.publickey.location config property.

-
-
-

Support for Base64 encoded JWKS keys and inlined JWKS keys within the mp.jwt.verify.publickey property will be further evaluation and either support added or a contibution to the specification to remove these options.

-
-
-
-
SmallRye JWT Properties
-
-

The SmallRye JWT specific properties allow for a lot of customisation not covered by the specification, however as these are not specification defined they could be subject to change.

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Property Name

Default

Description

smallrye.jwt.verify.key.location

NONE

Location of the verification key which can point to both public and secret keys. Secret keys can only be in the JWK format. Note that 'mp.jwt.verify.publickey.location' will be ignored if this property is set.

smallrye.jwt.verify.algorithm

RS256

Signature algorithm. Set it to ES256 to support the Elliptic Curve signature algorithm. This property is deprecated, use mp.jwt.verify.publickey.algorithm.

smallrye.jwt.verify.key-format

ANY

Set this property to a specific key format such as PEM_KEY, PEM_CERTIFICATE, JWK or JWK_BASE64URL to optimize the way the verification key is loaded.

smallrye.jwt.verify.relax-key-validation

false

Relax the validation of the verification keys, setting this property to true will allow public RSA keys with the length less than 2048 bit.

smallrye.jwt.verify.certificate-thumbprint

false

If this property is enabled then a signed token must contain either 'x5t' or 'x5t#S256' X509Certificate thumbprint headers. Verification keys can only be in JWK or PEM Certificate key formats in this case. JWK keys must have a 'x5c' (Base64-encoded X509Certificate) property set.

smallrye.jwt.token.header

Authorization

Set this property if another header such as Cookie is used to pass the token. This property is deprecated, use mp.jwt.token.header.

smallrye.jwt.token.cookie

none

Name of the cookie containing a token. This property will be effective only if smallrye.jwt.token.header is set to Cookie. This property is deprecated, use mp.jwt.token.cookie.

smallrye.jwt.always-check-authorization

false

Set this property to true for Authorization header be checked even if the smallrye.jwt.token.header is set to Cookie but no cookie with a smallrye.jwt.token.cookie name exists.

smallrye.jwt.token.schemes

Bearer

Comma-separated list containing an alternative single or multiple schemes, for example, DPoP.

smallrye.jwt.token.kid

none

Key identifier. If it is set then the verification JWK key as well every JWT token must have a matching kid header.

smallrye.jwt.time-to-live

none

The maximum number of seconds that a JWT may be issued for use. Effectively, the difference between the expiration date of the JWT and the issued at date must not exceed this value.

smallrye.jwt.require.named-principal

false

If an application relies on java.security.Principal returning a name then a token must have a upn or preferred_username or sub claim set. Setting this property will result in SmallRye JWT throwing an exception if none of these claims is available for the application code to reliably deal with a non-null Principal name.

smallrye.jwt.path.sub

none

Path to the claim containing the subject name. It starts from the top level JSON object and can contain multiple segments where each segment represents a JSON object name only, example: realms/subject. This property can be used if a token has no 'sub' claim but has the subject set in a different claim. Use double quotes with the namespace qualified claims.

smallrye.jwt.claims.sub

none

This property can be used to set a default sub claim value when the current token has no standard or custom sub claim available. Effectively this property can be used to customize java.security.Principal name if no upn or preferred_username or sub claim is set.

smallrye.jwt.path.groups

none

Path to the claim containing the groups. It starts from the top level JSON object and can contain multiple segments where each segment represents a JSON object name only, example: realm/groups. This property can be used if a token has no 'groups' claim but has the groups set in a different claim. Use double quotes with the namespace qualified claims.

smallrye.jwt.groups-separator

' '

Separator for splitting a string which may contain multiple group values. It will only be used if the smallrye.jwt.path.groups property points to a custom claim whose value is a string. The default value is a single space because a standard OAuth2 scope claim may contain a space separated sequence.

smallrye.jwt.claims.groups

none

This property can be used to set a default groups claim value when the current token has no standard or custom groups claim available.

smallrye.jwt.jwks.refresh-interval

60

JWK cache refresh interval in minutes. It will be ignored unless the mp.jwt.verify.publickey.location points to the HTTP or HTTPS URL based JWK set and no HTTP Cache-Control response header with a positive max-age parameter value is returned from a JWK set endpoint.

smallrye.jwt.jwks.forced-refresh-interval

30

Forced JWK cache refresh interval in minutes which is used to restrict the frequency of the forced refresh attempts which may happen when the token verification fails due to the cache having no JWK key with a kid property matching the current token’s kid header. It will be ignored unless the mp.jwt.verify.publickey.location points to the HTTP or HTTPS URL based JWK set.

smallrye.jwt.expiration.grace

60

Expiration grace in seconds. By default an expired token will still be accepted if the current time is no more than 1 min after the token expiry time.

smallrye.jwt.verify.aud

none

Comma separated list of the audiences that a token aud claim may contain. This property is deprecated. Use mp.jwt.verify.audiences instead.

smallrye.jwt.required.claims

none

Comma separated list of the claims that a token must contain.

smallrye.jwt.decrypt.key.location

none

Config property allows for an external or internal location of Private Decryption Key to be specified. This property is deprecated, use mp.jwt.decrypt.key.location.

smallrye.jwt.decrypt.algorithm

RSA_OAEP

Decryption algorithm.

smallrye.jwt.token.decryption.kid

none

Decryption Key identifier. If it is set then the decryption JWK key as well every JWT token must have a matching kid header.

-
-
-
-
-

7.16.3. Virtual Security

-
-

For traditional deployments to WildFly where security is required a security domain name would be identified during deployment and this in turn would be mapped to use configured resources either within the elytron or legacy security subsystems.

-
-
-

One of the main motivations for using MicroProfile JWT is the ability to describe an identity from the incoming token without relying on access to external resources. For this reason MicroProfile JWT deployments will not depend on managed SecurityDomain resources, instead a virtual SecurityDomain will be created and used across the deployment.

-
-
-

As the deployment is configured entirely within the MicroProfile Config properties other than the presence of the microprofile-jwt-smallrye subsystem the virtual SecurityDomain means no other managed configuration is required for the deployment.

-
-
-
-
-

7.17. MicroProfile OpenAPI Subsystem Configuration

-
-

The OpenAPI specification defines a contract for JAX-RS applications in the same way that WSDL defined a contract for legacy web services. -The MicroProfile OpenAPI specification defines a mechanism for generating an OpenAPI v3 document from a JAX-RS application as well as an API for customizing production of the document.

-
-
-

7.17.1. Subsystem

-
-

The MicroProfile OpenAPI capability is provided by the microprofile-openapi-smallrye subsystem. -This subsystem is included in the default standalone-microprofile.xml configuration of the WildFly distribution.

-
-
-

You can also add the subsystem manually to any profile via the CLI:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.openapi-smallrye:add()
-
-[standalone@localhost:9990 /] /subsystem=microprofile-openapi-smallrye:add()
-
-
-
-
-

7.17.2. Configuration

-
-

The microprofile-openapi-smallrye subsystem obtains all of its configuration via MicroProfile Config. Thus the subsystem itself defines no attributes.

-
-
-

In addition to the standard Open API configuration properties, WildFly supports the following additional MicroProfile Config properties:

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDefaultDescription

mp.openapi.extensions.enabled

true

Enables/disables registration of an OpenAPI endpoint. Many users will want to parameterize this to selectively enable/disable OpenAPI in different environments.

mp.openapi.extensions.path

/openapi

Used to customize the path of the OpenAPI endpoint.

mp.openapi.extensions.servers.relative

true

Indicates whether auto-generated Server records are absolute or relative to the location of the OpenAPI endpoint. If absolute, WildFly will generate Server records including the protocols, hosts, and ports at which the given deployment is accessible.

-
-

e.g. /META-INF/microprofile-config.properties:

-
-
-
-
mp.openapi.extensions.enabled=${microprofile.openapi.enabled}
-mp.openapi.extensions.path=/swagger
-mp.openapi.extensions.servers.relative=false
-
-
-
-
-

7.17.3. HTTP/S Endpoint

-
-

The MicroProfile OpenAPI specification defines an HTTP endpoint that serves an OpenAPI 3.0 document describing the REST endpoints for the host. -The OpenAPI endpoint is registered using the configured path (e.g. http://localhost:8080/openapi) local to the root of the host associated with a given deployment.

-
-
- - - - - -
- - -Currently, the OpenAPI endpoint for a given virtual host can only document a single JAX-RS deployment. -To use OpenAPI with multiple JAX-RS deployments registered with different context paths on the same virtual host, each deployment should use a distinct endpoint path. -
-
-
-

By default, the OpenAPI endpoint returns a YAML document. -Alternatively, a JSON document can be requested via an Accept HTTP header, or a format query parameter.

-
-
-

e.g.

-
-
-
-
$ curl -v http://localhost:8080/openapi?format=JSON
-< HTTP/1.1 200 OK
-...
-{"openapi": "3.0.1" ... }
-
-
-$ curl -v -H'Accept: application/json' http://localhost:8080/openapi
-< HTTP/1.1 200 OK
-...
-{"openapi": "3.0.1" ... }
-
-
-
-

If the Undertow server/host of a given application defines an HTTPS listener, then the OpenAPI document will also be available via HTTPS, e.g. https://localhost:8443/openapi

-
-
-
-

7.17.4. Component Reference

-
-

The MicroProfile OpenAPI implementation is provided by the SmallRye OpenAPI project.

-
-
- -
-
- - - - - -
- - -References in this document to Java API for RESTful Web Services (JAX-RS) refer to Jakarta RESTful Web Services unless otherwise noted. -
-
-
-
-
-

7.18. MicroProfile Fault Tolerance Subsystem

-
-

7.18.1. Specification

-
-

WildFly’s MicroProfile Fault Tolerance subsystem implements MicroProfile Fault Tolerance 4.0.

-
-
-

This MicroProfile specification provides the following interceptor bindings:

-
-
-
    -
  • -

    @Timeout to define a maximum duration or an execution.

    -
  • -
  • -

    @Retry to attempt execution again in case of a failure.

    -
  • -
  • -

    @Fallback to provide an alternative execution in case of a prior failure.

    -
  • -
  • -

    @CircuitBreaker to automatically fail-fast when an execution repeatedly fails.

    -
  • -
  • -

    @Bulkhead to limit concurrent executions so that one method doesn’t overload the entire system.

    -
  • -
  • -

    @Asynchronous to execute a method asynchronously.

    -
  • -
-
-
-

For complete documentation please refer to MicroProfile Fault Tolerance 4.0 specification.

-
-
-

Support for MicroProfile Fault Tolerance is -provided as by the microprofile-fault-tolerance-smallrye subsystem.

-
-
-

The MicroProfile Fault Tolerance implementation is provided by the SmallRye Fault Tolerance project.

-
-
-
-

7.18.2. Required Extension

-
-

This extension is automatically included in the standalone-microprofile server profiles, -however, it is not included by default in the default configuration of WildFly.

-
-
- - - - - -
- - -The MicroProfile Metrics extension and subsystem are required by this extension to provide Metrics integration, -please follow the instructions in the MicroProfile Metrics Subsystem Configuration section. -If the Metrics subsystem is not available, no metrics data will be collected. -
-
-
-

You can add the extension to a configuration without it either by using the following CLI operations:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.fault-tolerance-smallrye:add
-{"outcome" => "success"}
-
-[standalone@localhost:9990 /] /subsystem=microprofile-fault-tolerance-smallrye:add
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-[standalone@localhost:9990 /] reload
-
-
-
-

Or by adding an element to the application server profile XML to <extensions> section:

-
-
-
-
<extension module="org.wildfly.extension.microprofile.fault-tolerance-smallrye"/>
-
-
-
-

and then the subsystem in the <profile> section:

-
-
-
-
<subsystem xmlns="urn:wildfly:microprofile-fault-tolerance-smallrye:1.0"/>
-
-
-
-

The subsystem itself does not have any configurable elements.

-
-
-
-

7.18.3. Configuration

-
-

Apart from configuration properties defined by the specification, the SmallRye implementation provides the following -configuration properties:

-
- - ----- - - - - - - - - - - - - - - - - - - - -
Table 3. SmallRye Fault Tolerance configuration properties
NameDefaultDescription

io.smallrye.faulttolerance.mainThreadPoolSize

100

Maximum number of threads in the thread pool.

io.smallrye.faulttolerance.mainThreadPoolQueueSize

-1 (unbounded)

Size of the queue that the thread pool should use.

-
-
-
-

7.19. MicroProfile Reactive Streams Operators Subsystem Configuration

-
-

Support for MicroProfile Reactive Streams Operators is -provided as a Tech Preview feature by the microprofile-reactive-streams-operators-smallrye subsystem.

-
-
-

7.19.1. Required Extension

-
-

This extension is not included in the standard configurations included in the WildFly distribution.

-
-
-

You can add the extension to a configuration either by adding -an <extension module="org.wildfly.extension.microprofile.reactive-streams-operators-smallrye"/> -element to the xml or by using the following CLI operation:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.reactive-streams-operators-smallrye:add
-{"outcome" => "success"}
-
-[standalone@localhost:9990 /] /subsystem=microprofile-reactive-streams-operators-smallrye:add
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-

If you provision your own server and include the microprofile-reactive-streams-operators layer, you will get the required modules, and the extension and subsystem will be added to your configuration.

-
-
-
-

7.19.2. Specification

-
-

WildFly’s MicroProfile Reactive Streams Operators subsystem implements MicroProfile Reactive Streams Operators 2.0, which adds support for asynchronous streaming of data. It essentially replicates the the interfaces, and their implementations, that were made available in the java.util.concurrent.Flow class introduced in Java 9. Thus MicroProfile Reactive Streams Operators can be considered a stop-gap until Java 9 and later is ubiquitous.

-
-
-
-

7.19.3. Configuration

-
-

The microprofile-reactive-streams-operators-smallrye subsystem contains no configurable attributes or resources. Its presence makes the interfaces -from the MicroProfile Reactive Streams Operators available to a deployment, and provides the implementation. Additionally it makes an instance of the ReactiveStreamsEngine class available for injection.

-
-
-
Activation
-
-

If the subsystem is present, the MicroProfile Reactive Streams Operators functionality will be available for all deployments on the server.

-
-
-
-
-

7.19.4. Component Reference

-
-

The MicroProfile Reactive Streams Operators implementation is provided by the SmallRye Mutiny project.

-
- -
-
-
-

7.20. MicroProfile Reactive Messaging Subsystem Configuration

-
-
-
:smallrye-reactive-messaging-version:       3.6
-:smallrye-reactive-messaging-tag:           {smallrye-reactive-messaging-version}.0
-:eclipse-mp-reactive-messaging-api-version: 2.0
-
-
-
-

Support for MicroProfile Reactive Messaging is -provided as a Tech Preview feature by the microprofile-reactive-messaging-smallrye subsystem.

-
-
-

7.20.1. Required Extension

-
-

This extension is not included in the standard configurations included in the WildFly distribution.

-
-
-

You can add the extension to a configuration either by adding -an <extension module="org.wildfly.extension.microprofile.reactive-messaging-smallrye"/> -element to the xml or by using the following CLI operation:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.reactive-messaging-smallrye:add
-{"outcome" => "success"}
-
-[standalone@localhost:9990 /] /subsystem=microprofile-reactive-messaging-smallrye:add
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-

To use this subsystem, you must also enable the MicroProfile Reactive Streams Operators extension and subsystem.

-
-
-

If you provision your own server and include the microprofile-reactive-messaging Galleon layer, you will get the required modules, and the extension and subsystem will be added to your configuration.

-
-
-

If you provision the microprofile-reactive-messaging-kafka Galleon layer it includes the modules to enable the Kafka connector functionality. The microprofile-reactive-messaging-kafka layer includes the microprofile-reactive-messaging layer which provides the core MicroProfile Reactive Messaging functionality.

-
-
-
-

7.20.2. Specification

-
-

WildFly’s MicroProfile Reactive Messaging subsystem implements MicroProfile Reactive Messaging {eclipse-mp-reactive-messaging-api-version}, which adds support for asynchronous messaging support based on MicroProfile Reactive Streams Operators.

-
-
-
-

7.20.3. Configuration

-
-

The microprofile-reactive-messaging-smallrye subsystem contains no configurable attributes or resources. For the core MicroProfile Reactive Messaging functionality there is no configuration. For configuration of the connectors to external brokers MicroProfile Config is used.

-
-
-
Activation
-
-

The subsystem will scan all deployments to find classes containing methods with the org.eclipse.microprofile.reactive.messaging.Incoming or org.eclipse.microprofile.reactive.messaging.Outgoing annotations. If these annotations are found, Reactive Messaging will be enabled for the deployment.

-
-
-
-
Programming model and Limitations
-
-

See the spec for more thorough examples, this section just attempts to summarize the highlights.

-
-
-

Version 1.0 of the MicroProfile Reactive Messaging specification introduced the @Incoming and @Outgoing annotations. They are intended for use in an @ApplicationScoped (or @Dependent) CDI bean:

-
-
-
-
@ApplicationScoped
-public class MyBean {
-    @Outgoing("in-memory")
-    public String generate() {
-        return ...; // Do some generation of values
-    }
-
-    @Incoming("in-memory")
-    public void consume(String value) {
-        System.out.println(value);
-    }
-}
-
-
-
-

Values generated by the generate() method will be received by the consume() method. In this basic setup where the channel names match, the streams are dealt with in-memory. We’ll see how to have them handled by Kafka later on.

-
-
-

In the above example, we are essentially generating values and consuming them with no user-interaction. MicroProfile Reactive Messaging 2.0 introduces a @Channel annotation, which can be used to inject a Publisher for receiving values sent on streams, and an Emitter which can be used to send values to a stream. This makes it easier to send/receive values from code paths resulting from user interaction:

-
-
-
-
@ApplicationScoped
-public class MyBean {
-    @Inject
-    @Channel("in-memory")
-    Emitter<String> emitter;
-
-    @Inject
-    @Channel("in-memory")
-    Publisher<String> publisher;
-
-    void send(String value) {
-        emitter.send(value);
-    }
-}
-
-
-
-

In the above example we can now easily send data to the Reactive Messaging streams by calling Emitter.send(). Similarly, we can subscribe to the Publisher and receive the data. However, receiving still has a few shortcomings:

-
-
-
    -
  • -

    The above example will not work out of the box. When trying to send on the Emitter, you will get an error that there are no subscibers (which in turn runs the risk of causing overflow). This can be worked around by creating a subscription on the Publisher.

    -
  • -
  • -

    At present there can only be one subscription on the injected Publisher.

    -
  • -
-
-
-

The above points means that this Publisher is not usable directly as an asynchronous return value for e.g. a Jakarta RESTFul Webservices endpoint. As the Jakarta RESTFul Webservices request is what will create the subscription such a call would need to happen before calling Emitter.send().

-
-
-

If we replace the Emitter with the generate() method from the original method our example will work. However, if we return the Publisher to more than one Jakarta RESTFul Webservices request, we end up with more than one subscriptions which will not all receive every single value.

-
-
-

User’s applications intended to return published values to users via e.g. Jakarta RESTFul Webservices will need to do their own subscriptions and buffering of the data. Care must be taken to not let the cache grow uncontrolled, which could cause OutOfMemoryErrors.

-
-
-
-
Connectors
-
-

MicroProfile Reactive Messaging is designed to be flexible enough to integrate with a wide variety of external messaging systems. This functionality is provided via 'connectors'.

-
-
-

The only included connector at the moment is the Kafka connector.

-
-
-

Connectors are configured using MicroProfile Config. The property keys for the methods have some prefixes mandated by the MicroProfile Reactive Messaging Specification which lists these as:

-
-
-
    -
  • -

    mp.messaging.incoming.[channel-name].[attribute]=[value]

    -
  • -
  • -

    mp.messaging.outgoing.[channel-name].[attribute]=[value]

    -
  • -
  • -

    mp.messaging.connector.[connector-name].[attribute]=[value]

    -
  • -
-
-
-

Essentially channel-name is the @Incoming.value() or the @Outgoing.value().

-
-
-

If we have the following pair of methods:

-
-
-
-
@Outgoing("to")
-public int send() {
-    int i = // Randomly generated...
-}
-
-@Incoming("from")
-public void receive(int i) {
-    // Process payload
-}
-
-
-
-

Then the property prefixes mandated by the MicroProfile Reactive Messaging specifications are:

-
-
-
    -
  • -

    mp.messaging.incoming.from. - this would pick out the property as configuration of the receive() method.

    -
  • -
  • -

    mp.messaging.outgoing.to. - this would pick out the property as configuration of the send() method.

    -
  • -
-
-
-

Note that although these prefixes are understood by the subsystem, the full set depends on the connector you want to configure. Different connectors understand different properties.

-
-
-
Kafka Connector
-
-

An example of a minimal microprofile-config.properties file for Kafka for the example application shown previously:

-
-
-
-
kafka.bootstrap.servers=kafka:9092
-
-mp.messaging.outgoing.to.connector=smallrye-kafka
-mp.messaging.outgoing.to.topic=my-topic
-mp.messaging.outgoing.to.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer
-
-mp.messaging.incoming.from.connector=smallrye-kafka
-mp.messaging.incoming.from.topic=my-topic
-mp.messaging.incoming.from.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer
-
-
-
-

Next we will briefly discuss each of these entries. Remember the to channel is on the send() method, and the from channel is on the receive() method.

-
-
-

kafka.bootstrap.servers=kafka:9092 sets the URL of the Kafka broker to connect to for the whole application. It could also be done for just the to channel by setting mp.messaging.outgoing.to.bootstrap.servers=kafka:9092 instead.

-
-
-

mp.messaging.outgoing.to.connector=smallrye-kafka says that we want to use Kafka to back the to channel. Note that the value smallrye-kafka is SmallRye Reactive Messaging specific, and will only be understood if the Kafka connector is enabled.

-
-
-

mp.messaging.outgoing.to.topic=my-topic says that we will send data to the Kafka topic called my-topic.

-
-
-

mp.messaging.outgoing.to.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer tells the connector to use IntegerSerializer to serialize the values output by the send() method when writing to the topic. Kafka provides serializers for the standard Java types. You may implement your own serializer by writing a class implementing org.apache.kafka.common.serialization.Serializer and including it in the deployment.

-
-
-

mp.messaging.incoming.from.connector=smallrye-kafka says that we want to use Kafka to back the from channel. As above, the value smallrye-kafka is SmallRye Reactive Messaging specific.

-
-
-

mp.messaging.incoming.from.topic=my-topic says that we will read data from the Kafka topic called my-topic.

-
-
-

mp.messaging.incoming.from.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer tells the connector to use IntegerDeserializer to deserialize the values from the topic before calling the receive() method. You may implement your own deserializer by writing a class implementing org.apache.kafka.common.serialization.Deserializer and including it in the deployment.

-
-
-

In addition to the above, Apache Kafka, and SmallRye Reactive Messaging’s Kafka connector understand a lot more properties. These can be found in the SmallRye Reactive Messaging Kafka connector documentation, and in the Apache Kafka documentation for the producers and the consumers.

-
-
-

The prefixes discussed above are stripped off before passing the property to Kafka. The same happens for other configuration properties. See the Kafka documentation for more details about how to configure Kafka consumers and producers.

-
-
-Connecting to secure Kafka -
-

If connecting to a Kafka instance secured with SSL and SASL, the following example 'microprofile-config.properties' will help you get started. There are a few new properties. We are showing them on the connector level but they could equally well be defined on the channel level (i.e. with the mp.messaging.outgoing.to-kafka. and mp.messaging.incoming.from-kafka. prefixes from the previous examples rather than the connector-wide mp.messaging.connector.smallrye-kafka prefix).

-
-
-
-
mp.messaging.connector.smallrye-kafka.bootstrap.servers=localhost:9092
-mp.messaging.connector.smallrye-kafka.sasl.mechanism=PLAIN
-mp.messaging.connector.smallrye-kafka.security.protocol=SASL_SSL
-mp.messaging.connector.smallrye-kafka.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
-  username="${USER}" \
-  password="${PASSWORD}";
-mp.messaging.connector.smallrye-kafka.wildfly.elytron.ssl.context=test
-
-# Channel configuration would follow here, but is left out for brevity
-
-
-
-

Each of these lines has the following meaning:

-
-
-
    -
  • -

    mp.messaging.connector.smallrye-kafka.bootstrap.servers=localhost:9092 - specifies the Kafka servers to connect to. This is the same as in the previous examples

    -
  • -
  • -

    mp.messaging.connector.smallrye-kafka.sasl.mechanism=PLAIN - specifies the SASL mechanism to use. See sasl.mechanism in the Kafka documentation for other choices.

    -
  • -
  • -

    mp.messaging.connector.smallrye-kafka.security.protocol - specifies the protocol mechanism to use. See security.protocol in the Kafka documentation for other choices. In this case we are using SASL_SSL which means that communication is over SSL, and that SASL is used to authenticate

    -
  • -
  • -

    mp.messaging.connector.smallrye-kafka.sasl.jaas.config=…​ - specifies how we will authenticate with Kafka. In order to not hardcode the credentials in our microprofile-config.properties file we are using the property substitution feature of MicroProfile Config. In this case, if you have defined the USER and PASSWORD environment variables they will be passed in as part of the configuration

    -
  • -
  • -

    mp.messaging.connector.smallrye-kafka.wildfly.elytron.ssl.context=test - this is not needed if Kafka is secured with a CA signed certificate. If you are using self-signed certificates, you will need to specify a truststore in the Elytron subsystem, and create an SSLContext referencing that. The value of this property is used to look up the SSLContext in the Elytron subsystem under /subsystem=elytron/client-ssl-context=* in the WildFly management model. In this case the property value is test, so we look up the SSLContext defined by /subsystem=elytron/client-ssl-context=test and use that configure the truststore to use for the connection to Kafka.

    -
  • -
-
-
-
-Kafka User API -
-

In order to be able to get more information about messages received from Kafka, and to be able to influence how Kafka handles messages, there is a user API for Kafka. This API lives in the io/smallrye/reactive/messaging/kafka/api package.

-
-
-

The API consists of the following classes:

-
-
-
    -
  • -

    IncomingKafkaRecordMetadata - This metadata contains information such as:

    -
    -
      -
    • -

      the key of the Kafka record represented by a Message

      -
    • -
    • -

      the Kafka topic and partition used for the Message, and the offset within those

      -
    • -
    • -

      the Message timestamp and timestampType

      -
    • -
    • -

      the Message headers - these are pieces of information the application can attach on the producing side, and receive on the consuming side. They are stored and forwarded on by Kafka but have no meaning to Kafka itself.

      -
    • -
    -
    -
  • -
  • -

    OutgoingKafkaRecordMetadata - This is constructed via the builder returned via the builder() method, and allows you to specify/override how Kafka will handle the messages. Similar to the IncomingKafkaRecordMetadata case, you can set:

    -
    -
      -
    • -

      the key. Kafka will then treat this entry as the key of the message

      -
    • -
    • -

      the topic, as already seen we typically use the microprofile-config.properties configuration to specify the topic to use for a channel backed by Kafka. However, in some cases the code sending the message might need to make some choices (for example depending on values contained in the data) about which topic to send to. Specifying this here will make Kafka use that topic.

      -
    • -
    • -

      the partition. Generally, it is best to let Kafka’s partitioner choose the partition, but for cases where it is essential to be able to specify it this can be done

      -
    • -
    • -

      the timestamp if you don’t want the one auto-generated by Kafka

      -
    • -
    • -

      headers - you can attach headers for the consumer, as mentioned for IncomingKafkaRecordMetadata

      -
    • -
    -
    -
  • -
  • -

    KafkaMetadataUtil contains utility methods to write OutgoingKafkaRecordMetadata to a Message, and to read IncomingKafkaRecordMetadata from a Message. Note that if you write OutgoingKafkaRecordMetadata to a Message which is sent to a channel not handled by Kafka it will be ignored, and if you attempt to read IncomingKafkaRecordMetadata from a Message arriving from a channel no handled by Kafka it will be null.

    -
  • -
-
-
-

The following example shows how to write and read the key from a message:

-
-
-
-
@Inject
-@Channel("from-user")
-Emitter<Integer> emitter;
-
-@Incoming("from-user")
-@Outgoing("to-kafka")
-public Message<Integer> send(Message<Integer> msg) {
-    // Set the key in the metadata
-    OutgoingKafkaRecordMetadata<String> md =
-            OutgoingKafkaRecordMetadata.<String>builder()
-                .withKey("KEY-" + i)
-                .build();
-    // Note that Message is immutable so the copy returned by this method
-    // call is not the same as the parameter to the method
-    return KafkaMetadataUtil.writeOutgoingKafkaMetadata(msg, md);
-}
-
-@Incoming("from-kafka")
-public CompletionStage<Void> receive(Message<Integer> msg) {
-    IncomingKafkaRecordMetadata<String, Integer> metadata =
-        KafkaMetadataUtil.readIncomingKafkaMetadata(msg).get();
-
-    // We can now read the Kafka record key
-    String key = metadata.getKey();
-
-    // When using the Message wrapper around the payload we need to explicitly ack
-    // them
-    return msg.ack();
-}
-
-
-
-

To configure the Kafka mapping we need a microprofile-config.properties

-
-
-
-
kafka.bootstrap.servers=kafka:9092
-
-mp.messaging.outgoing.to-kafka.connector=smallrye-kafka
-mp.messaging.outgoing.to-kafka.topic=some-topic
-mp.messaging.outgoing.to-kafka.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer
-mp.messaging.outgoing.to-kafka.key.serializer=org.apache.kafka.common.serialization.StringSerializer
-
-mp.messaging.incoming.from-kafka.connector=smallrye-kafka
-mp.messaging.incoming.from-kafka.topic=some-topic
-mp.messaging.incoming.from-kafka.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer
-mp.messaging.incoming.from-kafka.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
-
-
-
-

This configuration looks a lot like the previous configuration that we saw, but note that we need to specify the key.serializer for the outgoing channel, and the key.deserializer for the incoming channel. As before, they are implementations of org.apache.kafka.common.serialization.Serializer and org.apache.kafka.common.serialization.Deserializer respectively. Kafka provides implementations for basic types, and you may write your own and include them in the deployment.

-
-
-
-A note on org.apache.kafka classes -
-

While we do expose the Kafka Clients jar in our BOMs, its usage is limited to

-
-
-
    -
  • -

    Classes/interfaces exposed via the Kafka User API, e.g.:

    -
    -
      -
    • -

      org.apache.kafka.common.header.Header and org.apache.kafka.common.header.Headers and implementations of those that are considered public API as per the Apache Kafka documentation.

      -
    • -
    • -

      org.apache.kafka.clients.consumer.ConsumerRecord

      -
    • -
    • -

      org.apache.kafka.common.record.TimestampType

      -
    • -
    -
    -
  • -
  • -

    Classes/interfaces needed for serialization and deserialization:

    -
    -
      -
    • -

      org.apache.kafka.common.serialization.Deserializer

      -
    • -
    • -

      org.apache.kafka.common.serialization.Serializer

      -
    • -
    • -

      Implementatations of org.apache.kafka.common.serialization.Deserializer and org.apache.kafka.common.serialization.Serializer in the org.apache.kafka.common.serialization package

      -
    • -
    -
    -
  • -
-
-
-
-
-
-
-

7.20.4. Component Reference

-
-

The MicroProfile Reactive Messaging implementation is provided by the SmallRye Reactive Messaging project.

-
- -
-
-
-

7.21. MicroProfile Telemetry Subsystem Configuration

-
-

Support for MicroProfile Telemetry is provided by the microprofile-telemetry subsystem.

-
-
-

The MicroProfile Telemetry specification describes how OpenTelemetry can be integrated into a MicroProfile application.

-
-
-

7.21.1. Subsystem

-
-

The MicroProfile Telemetry integration is provided by the microprofle-telemetry subsystem, and is included in the default configuration. If not no present, the subsystem can be added using the following CLI commands.

-
-
- - - - - -
- - -
-

The MicroProfile Telemetry subsystem depends on the OpenTelemetry subsystem, so it must be added prior to adding MicroProfile Telemetry.

-
-
-
-
-
-
$ jboss-cli.sh -c <<EOF
-    if (outcome != success) of /subsystem=opentelemetry:read-resource
-        /extension=org.wildfly.extension.opentelemetry:add()
-        /subsystem=opentelemetry:add()
-    end-if
-    /extension=org.wildfly.extension.microprofile.telemetry:add
-    /subsystem=microprofile-telemetry:add
-    reload
-EOF
-
-
-
-
-

7.21.2. Configuration

-
-

The MicroProfile Telemetry subsystem contains no configurable attributes or resources. Any server configuration related to OpenTelemetry should be made to the opentelemetry subsystem, the documentation for which can be found in the relevant section of the Administration Guide.

-
-
-

The MicroProfile Telemetry subsystem does, however, allow for individual applications to override any server configuration via MicroProfile Config. For example, the default service name used in exported traces is derived from the deployment name, so if the deployment archive is my-application-1.0.war, the service name will be my-application-1.0.war. This can be overridden using the standard OpenTelemetry configuration properties (documented here):

-
-
-
-
otel.service.name=My Application
-
-
-
-

Note also that, per spec requirements, MicroProfile Telemetry is disabled by default and must be manually enabled on a per-application basis:

-
-
-
-
otel.sdk.disabled=false
-
-
-
-
-
-

7.22. MicroProfile LRA Subsystems Configuration

-
-
-
:narayana-version: 6.0.0.Final
-:eclipse-mp-lra-api-version: 2.0
-
-
-
-

Support for MicroProfile LRA (Long Running Actions) is -provided by the microprofile-lra-coordinator and microprofile-lra-participant subsystems.

-
-
-

The microprofile-lra-coordinator subsystem provides the LRA Coordinator capabilities required for the coordination of the distributed transactions.

-
-
-

The microprofile-lra-participant subsystem provides capabilities required to define services that participate in the LRAs by executing transactional actions and compensations. They communicate with the LRA Coordinator in order to process distributed transactions.

-
-
-

7.22.1. Required Extension

-
-

These extensions are not included in the standard configurations included in the WildFly distribution.

-
-
-

You can add the extensions to a configuration either by adding -a relevant extensions elements to the xml or by using CLI operations.

-
-
-
LRA Coordinator
-
-

You can add the extension to a configuration either by adding -an <extension module="org.wildfly.extension.microprofile.lra-coordinator"/> -element to the xml or by using the following CLI operation:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.lra-coordinator:add()
-{"outcome" => "success"}
-
-[standalone@localhost:9990 /] /subsystem=microprofile-lra-coordinator:add
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-

If you provision your own server and include the microprofile-lra-coordinator Galleon layer, you will get the required modules, and the extension and subsystem will be added to your configuration.

-
-
-
-
LRA Participant
-
-

You can add the extension to a configuration either by adding -an <extension module="org.wildfly.extension.microprofile.lra-participant"/> -element to the xml or by using the following CLI operation:

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.lra-participant:add()
-{"outcome" => "success"}
-
-[standalone@localhost:9990 /] /subsystem=microprofile-lra-participant:add
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-

If you provision your own server and include the microprofile-lra-participant Galleon layer, you will get the required modules, and the extension and subsystem will be added to your configuration.

-
-
-
-
-

7.22.2. Specification

-
-

WildFly’s MicroProfile LRA Participant subsystem implements MicroProfile -LRA {eclipse-mp-lra-api-version}, which adds support for Long Running Actions based on the saga pattern. The MicroProfile LRA Coordinator subsystem is used to provide coordination of such transactions which LRA Participants contact in order to enlist into the LRAs.

-
-
-

Tha LRA Coordinator can also run independently in the distributed system and can be started with for instance Docker like this:

-
-
-
-
$ docker run -p 8080:8080 quay.io/jbosstm/lra-coordinator
-
-
-
-
-

7.22.3. Management model

-
-

The /subsystem=microprofile-lra-coordinator resource defines two attributes:

-
-
-
    -
  • -

    host - Represents the name of the Undertow subsystem 'host' resource that the LRA Coordinator is deployed to.

    -
  • -
  • -

    server - Represents the name of the Undertow subsystem 'server' resource that the LRA Coordinator is deployed to.

    -
  • -
-
-
-

The /subsystem=microprofile-lra-participant resource defines one attribute:

-
-
-
    -
  • -

    lra-coordinator-url - The configuration of the LRA Coordinator URL required in order for this participant to connect to the coordinator.

    -
  • -
  • -

    proxy-host - Represents the name of the Undertow subsystem 'host' resource that the LRA Participant proxy deploys to.

    -
  • -
  • -

    proxy-server - Represents the name of the Undertow subsystem 'server' resource that the LRA Participant proxy deploys to.

    -
  • -
-
-
-
-

7.22.4. Component Reference

-
-

The MicroProfile LRA implementation is provided by the Narayana project - https://www.narayana.io/.

-
- -
-
-
-

7.23. Web services configuration

-
-

JBossWS components are provided to the application server through the -webservices subsystem. JBossWS components handle the processing of WS -endpoints. The subsystem supports the configuration of published -endpoint addresses, and endpoint handler chains. A default webservice -subsystem is provided in the server’s domain and standalone -configuration files.

-
-
-

7.23.1. Structure of the webservices subsystem

-
-
Published endpoint address
-
-

JBossWS supports the rewriting of the <soap:address> element of -endpoints published in WSDL contracts. This feature is useful for -controlling the server address that is advertised to clients for each -endpoint.

-
-
-

The following elements are available and can be modified (all are -optional):

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription

modify-wsdl-address

boolean

This boolean enables and disables the -address rewrite functionality.When modify-wsdl-address is set to true -and the content of <soap:address> is a valid URL, JBossWS will rewrite -the URL using the values of wsdl-host and wsdl-port or -wsdl-secure-port.When modify-wsdl-address is set to false and the -content of <soap:address> is a valid URL, JBossWS will not rewrite the -URL. The <soap:address> URL will be used.When the content of -<soap:address> is not a valid URL, JBossWS will rewrite it no matter -what the setting of modify-wsdl-address.If modify-wsdl-address is set to -true and wsdl-host is not defined or explicitly set to -'jbossws.undefined.host' the content of <soap:address> URL is use. -JBossWS uses the requester’s host when rewriting the <soap:address>When -modify-wsdl-address is not defined JBossWS uses a default value of true.

wsdl-host

string

The hostname / IP address to be used for rewriting -<soap:address>.If wsdl-host is set to jbossws.undefined.host, JBossWS -uses the requester’s host when rewriting the <soap:address>When -wsdl-host is not defined JBossWS uses a default value of -'jbossws.undefined.host'.

wsdl-port

int

Set this property to explicitly define the HTTP port -that will be used for rewriting the SOAP address.Otherwise the HTTP port -will be identified by querying the list of installed HTTP connectors.

wsdl-secure-port

int

Set this property to explicitly define the HTTPS -port that will be used for rewriting the SOAP address.Otherwise the -HTTPS port will be identified by querying the list of installed HTTPS -connectors.

wsdl-uri-scheme

string

This property explicitly sets the URI scheme -to use for rewriting <soap:address> . Valid values are http and https. -This configuration overrides scheme computed by processing the endpoint -(even if a transport guaranteeis specified). The provided values for -wsdl-port and wsdl-secure-port (or their default values) are used -depending on specified scheme.

wsdl-path-rewrite-rule

string

This string defines a SED substitution -command (e.g., 's/regexp/replacement/g') that JBossWS executes against -the path component of each <soap:address> URL published from the -server.When wsdl-path-rewrite-rule is not defined, JBossWS retains the -original path component of each <soap:address> URL.When -'modify-wsdl-address' is set to "false" this element is ignored.

-
-
-
Predefined endpoint configurations
-
-

JBossWS enables extra setup configuration data to be predefined and -associated with an endpoint implementation. Predefined endpoint -configurations can be used for Jakarta XML Web Services client and Jakarta XML Web Services endpoint setup. -Endpoint configurations can include Jakarta XML Web Services handlers and key/value -properties declarations. This feature provides a convenient way to add -handlers to WS endpoints and to set key/value properties that control -JBossWS and Apache CXF internals ( -see -Apache CXF configuration).

-
-
-

The webservices subsystem provides -schema -to support the definition of named sets of endpoint configuration data. -Annotation, org.jboss.ws.api.annotation.EndpointConfig is provided to -map the named configuration to the endpoint implementation.

-
-
-

There is no limit to the number of endpoint configurations that can be -defined within the webservices subsystem. Each endpoint configuration -must have a name that is unique within the webservices subsystem. -Endpoint configurations defined in the webservices subsystem are -available for reference by name through the annotation to any endpoint -in a deployed application.

-
-
-

WildFly ships with two predefined endpoint configurations. -Standard-Endpoint-Config is the default configuration. -Recording-Endpoint-Config is an example of custom endpoint configuration -and includes a recording handler.

-
-
-
-
[standalone@localhost:9999 /] /subsystem=webservices:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "endpoint" => {},
-        "modify-wsdl-address" => true,
-        "wsdl-host" => expression "${jboss.bind.address:127.0.0.1}",
-        "endpoint-config" => {
-            "Standard-Endpoint-Config" => undefined,
-            "Recording-Endpoint-Config" => undefined
-        }
-    }
-}
-
-
-
- - - - - -
- - -The Standard-Endpoint-Config is a special endpoint configuration. It -is used for any endpoint that does not have an explicitly assigned -endpoint configuration. -
-
-
-
Endpoint configs
-
-

Endpoint configs are defined using the endpoint-config element. Each -endpoint configuration may include properties and handlers set to the -endpoints associated to the configuration.

-
-
-
-
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=Recording-Endpoint-Config:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "post-handler-chain" => undefined,
-        "property" => undefined,
-        "pre-handler-chain" => {"recording-handlers" => undefined}
-    }
-}
-
-
-
-

A new endpoint configuration can be added as follows:

-
-
-
-
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=My-Endpoint-Config:add
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-restart" => true,
-        "process-state" => "restart-required"
-    }
-}
-
-
-
-
-
Handler chains
-
-

Each endpoint configuration may be associated with zero or more PRE and -POST handler chains. Each handler chain may include JAXWS handlers. For -outbound messages the PRE handler chains are executed before any handler -that is attached to the endpoint using the standard means, such as with -annotation @HandlerChain, and POST handler chains are executed after -those objects have executed. For inbound messages the POST handler -chains are executed before any handler that is attached to the endpoint -using the standard means and the PRE handler chains are executed after -those objects have executed.

-
-
-
-
* Server inbound messages
-Client --> ... --> POST HANDLER --> ENDPOINT HANDLERS --> PRE HANDLERS --> Endpoint
-
-* Server outbound messages
-Endpoint --> PRE HANDLER --> ENDPOINT HANDLERS --> POST HANDLERS --> ... --> Client
-
-
-
-

The protocol-binding attribute must be used to set the protocols for -which the chain will be triggered.

-
-
-
-
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=Recording-Endpoint-Config/pre-handler-chain=recording-handlers:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "protocol-bindings" => "##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM",
-        "handler" => {"RecordingHandler" => undefined}
-    },
-    "response-headers" => {"process-state" => "restart-required"}
-}
-
-
-
-

A new handler chain can be added as follows:

-
-
-
-
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-handlers:add(protocol-bindings="##SOAP11_HTTP")
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-restart" => true,
-        "process-state" => "restart-required"
-    }
-}
-[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-handlers:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "handler" => undefined,
-        "protocol-bindings" => "##SOAP11_HTTP"
-    },
-    "response-headers" => {"process-state" => "restart-required"}
-}
-
-
-
-
-
Handlers
-
-

JAXWS handler can be added in handler chains:

-
-
-
-
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=Recording-Endpoint-Config/pre-handler-chain=recording-handlers/handler=RecordingHandler:read-resource
-{
-    "outcome" => "success",
-    "result" => {"class" => "org.jboss.ws.common.invocation.RecordingServerHandler"},
-    "response-headers" => {"process-state" => "restart-required"}
-}
-[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-handlers/handler=foo-handler:add(class="org.jboss.ws.common.invocation.RecordingServerHandler")
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-restart" => true,
-        "process-state" => "restart-required"
-    }
-}
-
-
-
-

Endpoint-config handler classloading

-
-
- - - - - -
- - -The class attribute is used to provide the fully qualified class name -of the handler. At deploy time, an instance of the class is created for -each referencing deployment. For class creation to succeed, the -deployment classloader must to be able to load the handler class. -
-
-
-
-
-
-

7.23.2. Runtime information

-
-

Each web service endpoint is exposed through the deployment that -provides the endpoint implementation. Each endpoint can be queried as a -deployment resource. For further information please consult the chapter -"Application Deployment". Each web service endpoint specifies a web -context and a WSDL Url:

-
-
-
-
[standalone@localhost:9999 /] /deployment="*"/subsystem=webservices/endpoint="*":read-resource
-{
-   "outcome" => "success",
-   "result" => [{
-       "address" => [
-           ("deployment" => "jaxws-samples-handlerchain.war"),
-           ("subsystem" => "webservices"),
-           ("endpoint" => "jaxws-samples-handlerchain:TestService")
-       ],
-       "outcome" => "success",
-       "result" => {
-           "class" => "org.jboss.test.ws.jaxws.samples.handlerchain.EndpointImpl",
-           "context" => "jaxws-samples-handlerchain",
-           "name" => "TestService",
-           "type" => "JAXWS_JSE",
-           "wsdl-url" => "http://localhost:8080/jaxws-samples-handlerchain?wsdl"
-       }
-   }]
-}
-
-
-
-
-

7.23.3. Component Reference

-
-

The web service subsystem is provided by the JBossWS project. For a -detailed description of the available configuration properties, please -consult the project documentation.

-
-
-
-
- -
-
-
-
-
-
-

7.24. Resource adapters

-
-

Resource adapters are configured through the resource-adapters -subsystem. Declaring a new resource adapter consists of two separate -steps: You would need to deploy the .rar archive and define a resource -adapter entry in the subsystem.

-
-
-

7.24.1. Resource Adapter Definitions

-
-

The resource adapter itself is defined within the subsystem -resource-adapters:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
-    <resource-adapters>
-       <resource-adapter>
-          <archive>eis.rar</archive>
-          <!-- Resource adapter level config-property -->
-          <config-property name="Server">localhost</config-property>
-          <config-property name="Port">19000</config-property>
-          <transaction-support>XATransaction</transaction-support>
-          <connection-definitions>
-             <connection-definition class-name="com.acme.eis.ra.EISManagedConnectionFactory"
-                                    jndi-name="java:/eis/AcmeConnectionFactory"
-                                    pool-name="AcmeConnectionFactory">
-                <!-- Managed connection factory level config-property -->
-                <config-property name="Name">Acme Inc</config-property>
-                <pool>
-                   <min-pool-size>10</min-pool-size>
-                   <max-pool-size>100</max-pool-size>
-                </pool>
-                <security>
-                   <application/>
-                </security>
-             </connection-definition>
-         </connection-definitions>
-         <admin-objects>
-             <admin-object class-name="com.acme.eis.ra.EISAdminObjectImpl"
-                           jndi-name="java:/eis/AcmeAdminObject">
-                <config-property name="Threshold">10</config-property>
-             </admin-object>
-         </admin-objects>
-       </resource-adapter>
-    </resource-adapters>
-</subsystem>
-
-
-
-

Note, that only JNDI bindings under java:/ or java:jboss/ are supported.

-
-
-

(See standalone/configuration/standalone.xml )

-
-
-
-

7.24.2. Automatic activation of resource adapter archives

-
-

A resource adapter archive can be automatically activated with a -configuration by including an META-INF/ironjacamar.xml in the archive.

-
- -
-
-

7.24.3. Component Reference

-
-

The resource adapter subsystem is provided by the -IronJacamar project. For a detailed -description of the available configuration properties, please consult -the project documentation.

-
- -
-
-
-

7.25. Jakarta Batch Subsystem Configuration

-
-
-The batch subsystem is used to configure an environment for running -batch applications. WildFly uses -JBeret for it’s batch implementation. -Specific information about JBeret can be found in the -user guide. The -resource path, in CLI notation, for the subsystem -is subsystem=batch-jberet. -
-
-
-

7.25.1. Default Subsystem Configuration

-
-

For up to date information about subsystem configuration options see the -WildFly model reference.

-
-
-
-

7.25.2. Security

-
-

A new security-domain attribute was added to the batch-jberet -subsystem to allow batch jobs to be executed under that security domain. -Jobs that are stopped as part of a suspend operation will be restarted -on execution of a resume with the original user that started job.

-
-
-

There was a -org.wildfly.extension.batch.jberet.deployment.BatchPermission added to -allow a security restraint to various batch functions. The following -functions can be controlled with this permission.

-
-
-
    -
  • -

    start

    -
  • -
  • -

    stop

    -
  • -
  • -

    restart

    -
  • -
  • -

    abandon

    -
  • -
  • -

    read

    -
  • -
-
-
-

The read function allows users to use the getter methods from the -jakarta.batch.operations.JobOperator or read the batch-jberet -deployment resource, for example -/deployment=my.war/subsystem=batch-jberet:read-resource.

-
-
-
-

7.25.3. Job Repository

-
-

The batch subsystem supports 2 types of job repository:

-
-
-
    -
  • -

    in-memory job repository: all job execution data are kept in the memory -of WildFly instance. When the server shuts down, all job execution data -are lost. In a clustered environment, each WildFly server instance has its -own in-memory job repository, and it is not possible to share job execution -data between WildFly instances. This is the default job repository in -batch subsystem.

    -
  • -
  • -

    jdbc job repository: all job execution data are saved in a relational -database accessed via jdbc. In a clustered environment, a jdbc job repository -can be used to share job execution data between WildFly instances. -For example, one may start a job execution in one instance, stop and restart -it from a different WildFly instance.

    -
  • -
-
-
-
Handling Large Job Repositories
-
-

In some cases, when a job repository accumulates a large number of job -execution records (say hundreds of thousands), application deployment times may -be negatively impacted. This is relevant mainly to persistent job repository -implementations, like the jdbc job repository.

-
-
-

In order to avoid accumulating too high a number of job execution records, the -application can delete old executions via -JobOperator.abandon(long executionId), or other means like pruning the -database tables can be employed.

-
-
-

If it’s no possible to avoid storing large number of job execution records, -the job repositories can be configured to limit the number of job executions -that is returned by them by setting the execution-records-limit attribute. -If the attribute is set, Wildfly will only load specified maximum number of -job executions from the backing storage mechanism.

-
-
-
-
-

7.25.4. Deployment Descriptors

-
-

There are no deployment descriptors for configuring a batch environment -defined by the JSR-352 -specification. In WildFly you can use a -jboss-all.xml deployment descriptor to define aspects of the batch -environment for your deployment.

-
-
-

In the jboss-all.xml deployment descriptor you can define a named job -repository, a new job repository and/or a named thread pool. A named job -repository and named thread pool are resources defined on the batch -subsystem. Only a named thread pool is allowed to be defined in the -deployment descriptor.

-
-
-
Example Named Job Repository and Thread Pool
-
-
<jboss xmlns="urn:jboss:1.0">
-    <batch xmlns="urn:jboss:domain:batch-jberet:2.0">
-      <job-repository>
-        <named name="batch-ds"/>
-      </job-repository>
-      <thread-pool name="deployment-thread-pool"/>
-    </batch>
-</jboss>
-
-
-
-
Example new Job Repository
-
-
<jboss xmlns="urn:jboss:1.0">
-    <batch xmlns="urn:jboss:domain:batch-jberet:2.0">
-        <job-repository>
-            <jdbc data-source="batch-ds"/>
-        </job-repository>
-    </batch>
-</jboss>
-
-
-
-
-

7.25.5. Deployment Resources

-
-

Some subsystems in WildFly register runtime -resources for deployments. The batch subsystem registers jobs and -executions. The jobs are registered using the job name, this is not -the job XML name. Executions are registered using the execution id.

-
-
-
Batch application in a standalone server
-
-
[standalone@localhost:9990 /] /deployment=batch-jdbc-chunk.war/subsystem=batch-jberet:read-resource(recursive=true,include-runtime=true)
-{
-    "outcome" => "success",
-    "result" => {"job" => {
-        "reader-3" => {
-            "instance-count" => 1,
-            "running-executions" => 0,
-            "execution" => {"1" => {
-                "batch-status" => "COMPLETED",
-                "create-time" => "2015-08-07T15:37:06.416-0700",
-                "end-time" => "2015-08-07T15:37:06.519-0700",
-                "exit-status" => "COMPLETED",
-                "instance-id" => 1L,
-                "last-updated-time" => "2015-08-07T15:37:06.519-0700",
-                "start-time" => "2015-08-07T15:37:06.425-0700"
-            }}
-        },
-        "reader-5" => {
-            "instance-count" => 0,
-            "running-executions" => 0,
-            "execution" => undefined
-        }
-    }}
-}
-
-
-
-

The batch subsystem resource on a deployment also has 3 operations to -interact with batch jobs on the selected deployment. There is a -start-job, stop-job and restart-job operation. The execution -resource also has a stop-job and restart-job operation.

-
-
-
Example start-job
-
-
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:start-job(job-xml-name=simple, properties={writer.sleep=5000})
-{
-    "outcome" => "success",
-    "result" => 1L
-}
-
-
-
-
Example stop-job
-
-
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:stop-job(execution-id=2)
-
-
-
-
Example restart-job
-
-
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:restart-job(execution-id=2)
-{
-    "outcome" => "success",
-    "result" => 3L
-}
-
-
-
-
Result of resource after the 3 executions
-
-
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:read-resource(recursive=true, include-runtime=true)
-{
-    "outcome" => "success",
-    "result" => {"job" => {"chunkPartition" => {
-        "instance-count" => 2,
-        "running-executions" => 0,
-        "execution" => {
-            "1" => {
-                "batch-status" => "COMPLETED",
-                "create-time" => "2015-08-07T15:41:55.504-0700",
-                "end-time" => "2015-08-07T15:42:15.513-0700",
-                "exit-status" => "COMPLETED",
-                "instance-id" => 1L,
-                "last-updated-time" => "2015-08-07T15:42:15.513-0700",
-                "start-time" => "2015-08-07T15:41:55.504-0700"
-            },
-            "2" => {
-                "batch-status" => "STOPPED",
-                "create-time" => "2015-08-07T15:44:39.879-0700",
-                "end-time" => "2015-08-07T15:44:54.882-0700",
-                "exit-status" => "STOPPED",
-                "instance-id" => 2L,
-                "last-updated-time" => "2015-08-07T15:44:54.882-0700",
-                "start-time" => "2015-08-07T15:44:39.879-0700"
-            },
-            "3" => {
-                "batch-status" => "COMPLETED",
-                "create-time" => "2015-08-07T15:45:48.162-0700",
-                "end-time" => "2015-08-07T15:45:53.165-0700",
-                "exit-status" => "COMPLETED",
-                "instance-id" => 2L,
-                "last-updated-time" => "2015-08-07T15:45:53.165-0700",
-                "start-time" => "2015-08-07T15:45:48.163-0700"
-            }
-        }
-    }}}
-}
-
-
-
-

Pro Tip

-
-
- - - - - -
- - -You can filter jobs by an attribute on the execution resource with the -query operation. -
-
-
-
View all stopped jobs
-
-
/deployment=batch-chunk.war/subsystem=batch-jberet/job=*/execution=*:query(where=["batch-status", "STOPPED"])
-
-
-
-

As with all operations you can see details about the operation using the -:read-operation-description operation.

-
-
-

Tab completion

-
-
- - - - - -
- - -Don’t forget that CLI has tab completion which will complete operations -and attributes (arguments) on operations. -
-
-
-
Example start-job operation description
-
-
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:read-operation-description(name=start-job)
-{
-    "outcome" => "success",
-    "result" => {
-        "operation-name" => "start-job",
-        "description" => "Starts a batch job.",
-        "request-properties" => {
-            "job-xml-name" => {
-                "type" => STRING,
-                "description" => "The name of the job XML file to use when starting the job.",
-                "expressions-allowed" => false,
-                "required" => true,
-                "nillable" => false,
-                "min-length" => 1L,
-                "max-length" => 2147483647L
-            },
-            "properties" => {
-                "type" => OBJECT,
-                "description" => "Optional properties to use when starting the batch job.",
-                "expressions-allowed" => false,
-                "required" => false,
-                "nillable" => true,
-                "value-type" => STRING
-            }
-        },
-        "reply-properties" => {"type" => LONG},
-        "read-only" => false,
-        "runtime-only" => true
-    }
-}
-
-
-
-
-
-

7.26. Jakarta Faces Configuration

-
-

Jakarta Faces configuration is handled by the jsf subsystem. The jsf subsystem -allows multiple Jakarta Faces implementations to be installed on the same WildFly server. In particular, any -version that implements spec level 4.0 or higher can be installed. For each Jakarta Faces -implementation, a new slot needs to be created under jakarta.faces.impl, jakarta.faces.api, and -org.jboss.as.jsf-injection. When the jsf subsystem starts up, it scans the module path to find all -the Jakarta Faces implementations that have been installed. The default Jakarta Faces implementation that -WildFly should use is defined by the default-jsf-impl-slot subsystem attribute.

-
-
-

7.26.1. Installing a new Jakarta Faces implementation via a feature pack

-
-

WildFly supports provisioning a server using the Galleon tool, which allows an administrator to provision a server with -only the desired features, which are delivered as feature packs. For more information, see Provisioning WildFly with Galleon. -For an example of such a feature pack, see the WildFly MyFaces Feature Pack -project in the WildFly Extras GitHub organization.

-
-
-

As a quick start, to provision a server using this feature pack, one might use a commandline like the following:

-
-
-
-
$ galleon.sh provision myfaces_server.xml --dir=$SERVER_DIR
-
-
-
-
myfaces_server.xml
-
-
<?xml version="1.0" ?>
-<installation xmlns="urn:jboss:galleon:provisioning:3.0">
-  <feature-pack location="org.wildfly:wildfly-galleon-pack:{wildfly.version}">
-    <default-configs inherit="true"/>
-    <packages inherit="true"/>
-  </feature-pack>
-  <feature-pack location="org.wildfly:wildfly-myfaces-feature-pack:{feature-pack.version}">
-    <default-configs inherit="true"/>
-    <packages inherit="true"/>
-  </feature-pack>
-  <config model="standalone" name="standalone.xml">
-    <layers>
-      <!-- Base layer -->
-      <include name="management"/>
-      <include name="myfaces"/>
-    </layers>
-  </config>
-  <options>
-    <option name="optional-packages" value="passive+"/>
-    <option name="jboss-fork-embedded" value="true"/>
-  </options>
-</installation>
-
-
-
-
Start the server
-
-

After starting the server, the following CLI command can be used to verify that your new Jakarta Faces -implementation has been installed successfully. The new Jakarta Faces implementation should appear in the output -of this command.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=jsf:list-active-jsf-impls()
-
-
-
-
-
-

7.26.2. Changing the default Jakarta Faces implementation

-
-

The following CLI command can be used to make a newly installed Jakarta Faces implementation the default Jakarta -Server Faces implementation used by WildFly:

-
-
-
-
/subsystem=jsf/:write-attribute(name=default-jsf-impl-slot,value=<JSF_IMPL_NAME>-<JSF_VERSION>)
-
-
-
-

A server restart will be required for this change to take effect.

-
-
-
-

7.26.3. Configuring a Jakarta Faces app to use a non-default Jakarta Faces implementation

-
-

A Jakarta Faces app can be configured to use an installed Jakarta Faces implementation that’s not the -default implementation by adding a org.jboss.jbossfaces.JSF_CONFIG_NAME context parameter to its web.xml file. For -example, to indicate that a Jakarta Faces app should use MyFaces 4.0.0 (assuming MyFaces 4.0.0 has been installed -on the server), the following context parameter would need to be added:

-
-
-
-
<context-param>
-  <param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
-  <param-value>myfaces-4.0.0</param-value>
-</context-param>
-
-
-
-

If a Jakarta Faces app does not specify this context parameter, the default Jakarta Faces implementation -will be used for that app.

-
-
-
-

7.26.4. Disallowing DOCTYPE declarations

-
-

The following CLI commands can be used to disallow DOCTYPE declarations in Jakarta Faces deployments:

-
-
-
-
/subsystem=jsf:write-attribute(name=disallow-doctype-decl, value=true)
-reload
-
-
-
-

This setting can be overridden for a particular Jakarta Faces deployment by adding the -com.sun.faces.disallowDoctypeDecl context parameter to the deployment’s web.xml file:

-
-
-
-
<context-param>
-  <param-name>com.sun.faces.disallowDoctypeDecl</param-name>
-  <param-value>false</param-value>
-</context-param>
-
-
-
-
-
-

7.27. JMX subsystem configuration

-
-

The JMX subsystem registers a service with the Remoting endpoint so that -remote access to JMX can be obtained over the exposed Remoting -connector.

-
-
-

This is switched on by default in standalone mode and accessible over -port 9990 but in domain mode is switched off so needs to be enabled - in -domain mode the port will be the port of the Remoting connector for the -WildFly instance to be monitored.

-
-
-

To use the connector you can access it in the standard way using a -service:jmx URL:

-
-
-
-
import javax.management.MBeanServerConnection;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXConnectorFactory;
-import javax.management.remote.JMXServiceURL;
- 
-public class JMXExample {
- 
-    public static void main(String[] args) throws Exception {
-        //Get a connection to the WildFly MBean server on localhost
-        String host = "localhost";
-        int port = 9990;  // management-web port
-        String urlString =
-            System.getProperty("jmx.service.url","service:jmx:remote+http://" + host + ":" + port);
-        JMXServiceURL serviceURL = new JMXServiceURL(urlString);
-        JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, null);
-        MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
- 
-        //Invoke on the WildFly MBean server
-        int count = connection.getMBeanCount();
-        System.out.println(count);
-        jmxConnector.close();
-    }
-}
-
-
-
-

You also need to set your classpath when running the above example. The -following script covers Linux. If your environment is much different, -paste your script when you have it working.

-
-
-
-
!/bin/bash
-
-# specify your WildFly folder +
-export YOUR_JBOSS_HOME=~/WildFly
-
-java -classpath $YOUR_JBOSS_HOME/bin/client/jboss-client.jar:./
-JMXExample
-
-
-
-

You can also connect using jconsole.

-
-
- - - - - -
- - -If using jconsole use the jconsole.sh and jconsole.bat scripts -included in the /bin directory of the WildFly distribution as these set -the classpath as required to connect over Remoting. -
-
-
-

In addition to the standard JVM MBeans, the WildFly MBean server -contains the following MBeans:

-
- ---- - - - - - - - - - - - - - - - - - - - - -
JMX ObjectNameDescription

jboss.msc:type=container,name=jboss-as

Exposes management operations -on the JBoss Modular Service Container, which is the dependency -injection framework at the heart of WildFly. It is useful for debugging -dependency problems, for example if you are integrating your own -subsystems, as it exposes operations to dump all services and their -current states

jboss.naming:type=JNDIView

Shows what is bound in JNDI

jboss.modules:type=ModuleLoader,name=*

This collection of MBeans -exposes management operations on JBoss Modules classloading layer. It is -useful for debugging dependency problems arising from missing module -dependencies

-
-

7.27.1. Audit logging

-
-

Audit logging for the JMX MBean server managed by the JMX subsystem. The -resource is at /subsystem=jmx/configuration=audit-log and its -attributes are similar to the ones mentioned for -/core-service=management/access=audit/logger=audit-log in -Audit logging.

-
- ---- - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

enabled

true to enable logging of the JMX operations

log-boot

true to log the JMX operations when booting the server, false -otherwise

log-read-only

If true all operations will be audit logged, if false -only operations that change the model will be logged

-
-

Then which handlers are used to log the management operations are -configured as handler=* children of the logger. These handlers and -their formatters are defined in the global -/core-service=management/access=audit section mentioned in -Audit logging.

-
-
-
JSON Formatter
-
-

The same JSON Formatter is used as described in -Audit logging. However the records for MBean -Server invocations have slightly different fields from those logged for -the core management layer.

-
-
-
-
2013-08-29 18:26:29 - {
-    "type" : "jmx",
-    "r/o" : false,
-    "booting" : false,
-    "version" : "10.0.0.Final",
-    "user" : "$local",
-    "domainUUID" : null,
-    "access" : "JMX",
-    "remote-address" : "127.0.0.1/127.0.0.1",
-    "method" : "invoke",
-    "sig" : [
-        "javax.management.ObjectName",
-        "java.lang.String",
-        "[Ljava.lang.Object;",
-        "[Ljava.lang.String;"
-    ],
-    "params" : [
-        "java.lang:type=Threading",
-        "getThreadInfo",
-        "[Ljava.lang.Object;@5e6c33c",
-        "[Ljava.lang.String;@4b681c69"
-    ]
-}
-
-
-
-

It includes an optional timestamp and then the following information in -the json record

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Field nameDescription

type

This will have the value jmx meaning it comes from the jmx -subsystem

r/o

true if the operation has read only impact on the MBean(s)

booting

true if the operation was executed during the bootup process, -false if it was executed once the server is up and running

version

The version number of the WildFly instance

user

The username of the authenticated user.

domainUUID

This is not currently populated for JMX operations

access

This can have one of the following values:*NATIVE - The -operation came in through the native management interface, for example -the CLI*HTTP - The operation came in through the domain HTTP interface, -for example the admin console*JMX - The operation came in through the -JMX subsystem. See JMX for how to configure audit logging for JMX.

remote-address

The address of the client executing this operation

method

The name of the called MBeanServer method

sig

The signature of the called called MBeanServer method

params

The actual parameters passed in to the MBeanServer method, a -simple Object.toString() is called on each parameter.

error

If calling the MBeanServer method resulted in an error, this -field will be populated with Throwable.getMessage()

-
-
-
-
-

7.28. Deployment Scanner configuration

-
-

The deployment scanner is only used in standalone mode. Its job is to -monitor a directory for new files and to deploy those files. It can be -found in standalone.xml:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">
-   <deployment-scanner scan-interval="5000"
-      relative-to="jboss.server.base.dir" path="deployments" />
-</subsystem>
-
-
-
-

You can define more deployment-scanner entries to scan for deployments -from more locations. The configuration showed will scan the -JBOSS_HOME/standalone/deployments directory every five seconds. The -runtime model is shown below, and uses default values for attributes not -specified in the xml:

-
-
-
-
[standalone@localhost:9999 /] /subsystem=deployment-scanner:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {"scanner" => {"default" => {
-        "auto-deploy-exploded" => false,
-        "auto-deploy-zipped" => true,
-        "deployment-timeout" => 60L,
-        "name" => "default",
-        "path" => "deployments",
-        "relative-to" => "jboss.server.base.dir",
-        "scan-enabled" => true,
-        "scan-interval" => 5000
-    }}}
-}
-
-
-
-

The attributes are

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription

name

STRING

The name of the scanner. default is used if not specified

path

STRING

The actual filesystem path to be scanned. Treated as an -absolute path, unless the 'relative-to' attribute is specified, in which -case the value is treated as relative to that path.

relative-to

STRING

Reference to a filesystem path defined in the -"paths" section of the server configuration, or one of the system -properties specified on startup. In the example above -jboss.server.base.dir resolves to JBOSS_HOME/standalone

scan-enabled

BOOLEAN

If true scanning is enabled

scan-interval

INT

Periodic interval, in milliseconds, at which the -repository should be scanned for changes. A value of less than 1 -indicates the repository should only be scanned at initial startup.

auto-deploy-zipped

BOOLEAN

Controls whether zipped deployment content -should be automatically deployed by the scanner without requiring the -user to add a .dodeploy marker file.

auto-deploy-exploded

BOOLEAN

Controls whether exploded deployment -content should be automatically deployed by the scanner without -requiring the user to add a .dodeploy marker file. Setting this to -'true' is not recommended for anything but basic development scenarios, -as there is no way to ensure that deployment will not occur in the -middle of changes to the content.

auto-deploy-xml

BOOLEAN

Controls whether XML content should be -automatically deployed by the scanner without requiring a .dodeploy -marker file.

deployment-timeout

LONG

Timeout, in seconds, a deployment is allows -to execute before being canceled. The default is 60 seconds.

-
-

Deployment scanners can be added by modifying standalone.xml before -starting up the server or they can be added and removed at runtime using -the CLI

-
-
-
-
[standalone@localhost:9990 /] /subsystem=deployment-scanner/scanner=new:add(scan-interval=10000,relative-to="jboss.server.base.dir",path="other-deployments")
-{"outcome" => "success"}
-[standalone@localhost:9990 /] /subsystem=deployment-scanner/scanner=new:remove
-{"outcome" => "success"}
-
-
-
-

You can also change the attributes at runtime, so for example to turn -off scanning you can do

-
-
-
-
[standalone@localhost:9990 /] /subsystem=deployment-scanner/scanner=default:write-attribute(name="scan-enabled",value=false)
-{"outcome" => "success"}
-[standalone@localhost:9990 /] /subsystem=deployment-scanner:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {"scanner" => {"default" => {
-        "auto-deploy-exploded" => false,
-        "auto-deploy-zipped" => true,
-        "deployment-timeout" => 60L,
-        "name" => "default",
-        "path" => "deployments",
-        "relative-to" => "jboss.server.base.dir",
-        "scan-enabled" => false,
-        "scan-interval" => 5000
-    }}}
-}
-
-
-
-
-

7.29. Core Management Subsystem Configuration

-
-

The core management subsystem is composed services used to manage the -server or monitor its status.
-The core management subsystem configuration may be used to:

-
-
-
    -
  • -

    register a listener for a server lifecycle events.

    -
  • -
  • -

    list the last configuration changes on a server.

    -
  • -
-
-
-

7.29.1. Lifecycle listener

-
-

You can create an implementation of -org.wildfly.extension.core.management.client.ProcessStateListener -which will be notified on running and runtime configuration state -changes thus enabling the developer to react to those changes.

-
-
-

In order to use this feature you need to create your own module then -configure and deploy it using the core management subsystem.

-
-
-

For example let’s create a simple listener :

-
-
-
-
 public class SimpleListener implements ProcessStateListener {
- 
-    private File file;
-    private FileWriter fileWriter;
-    private ProcessStateListenerInitParameters parameters;
- 
-    @Override
-    public void init(ProcessStateListenerInitParameters parameters) {
-        this.parameters = parameters;
-        this.file = new File(parameters.getInitProperties().get("file"));
-        try {
-            fileWriter = new FileWriter(file, true);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
- 
-    @Override
-    public void cleanup() {
-        try {
-            fileWriter.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        } finally {
-            fileWriter = null;
-        }
-    }
- 
-    @Override
-    public void runtimeConfigurationStateChanged(RuntimeConfigurationStateChangeEvent evt) {
-        try {
-            fileWriter.write(String.format("%s %s %s %s\n", parameters.getProcessType(), parameters.getRunningMode(), evt.getOldState(), evt.getNewState()));
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
- 
-    @Override
-    public void runningStateChanged(RunningStateChangeEvent evt) {
-        try {
-            fileWriter.write(String.format("%s %s %s %s\n", parameters.getProcessType(), parameters.getRunningMode(), evt.getOldState(), evt.getNewState()));
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-}
-
-
-
-

To compile it you need to depend on the -org.wildfly.core:wildfly-core-management-client maven module. Now -let’s add the module to the wildfly modules :

-
-
-
-
module add --name=org.simple.lifecycle.events.listener --dependencies=org.wildfly.extension.core-management-client --resources=/home/ehsavoie/dev/demo/simple-listener/target/simple-process-state-listener.jar
-
-
-
-

Now we can register or listener :

-
-
-
-
/subsystem=core-management/process-state-listener=simple-listener:add(class=org.simple.lifecycle.events.listener.SimpleListener, module=org.simple.lifecycle.events.listener, properties={file=/home/wildfly/tmp/events.txt})
-
-
-
-
-

7.29.2. Configuration changes

-
-

You can use the core management subsystem to enable and configure an -in-memory history of the last configuration changes.
-For example to track the last 5 configuration changes let’s active this -:

-
-
-
-
/subsystem=core-management/service=configuration-changes:add(max-history=5)
-
-
-
-

Now we can list the last configuration changes :

-
-
-
-
/subsystem=core-management/service=configuration-changes:list-changes()
-{
-    "outcome" => "success",
-    "result" => [{
-        "operation-date" => "2016-12-05T11:05:12.867Z",
-        "access-mechanism" => "NATIVE",
-        "remote-address" => "/127.0.0.1",
-        "outcome" => "success",
-        "operations" => [{
-            "address" => [
-                ("subsystem" => "core-management"),
-                ("service" => "configuration-changes")
-            ],
-            "operation" => "add",
-            "max-history" => 5,
-            "operation-headers" => {
-                "caller-type" => "user",
-                "access-mechanism" => "NATIVE"
-            }
-        }]
-    }]
-}
-
-
-
-
-

7.29.3. JAXRS Subsystem Configuration

-
-

The jaxrs subsystem represents Jakarta RESTful Web Services. -RESTEasy is the implementation.

-
-
-
Required Extension:
-
-

The required extension is in the module org.jboss.as.jaxrs. In most cases the extension should be present. However, if it -is not you can add it with CLI.

-
-
-
-
/extension=org.jboss.as.jaxrs:add
-
-
-
-

This adds the following configuration entry:

-
-
-
-
<extension module="org.jboss.as.jaxrs"/>
-
-
-
-
-
Basic Subsystem Configuration Example:
-
-

By default the jaxrs subsystem is empty which results in default configuration values being used.

-
-
-

This can be changed with a management client such as the CLI or the web console. You can get detailed information about the -"Configuration switches" in section 3.5 of the RESTEasy User Guide.

-
-
-

An example configuring the subsystem with the CLI:

-
-
-
-
/subsystem=jaxrs:write-attribute(name=resteasy-add-charset, value=true)
-/subsystem=jaxrs:write-attribute(name=resteasy-gzip-max-input, value=17)
-/subsystem=jaxrs:write-attribute(name=resteasy-gzip-max-input, value=17)
-/subsystem=jaxrs:write-attribute(name=resteasy-jndi-resources, value=["java:global/jaxrsnoap/EJB_Resource1", "java:global/jaxrsnoap/EJB_Resource2"])
-/subsystem=jaxrs:write-attribute(name=resteasy-language-mappings, value={"es"="es", "fr"="fr", "en"="en-US"})
-/subsystem=jaxrs:write-attribute(name=resteasy-media-type-param-mapping, value=mt)
-/subsystem=jaxrs:write-attribute(name=resteasy-providers, value=["com.bluemonkey.reader", "com.bluemonkey.writer"])
-
-
-
-

This generates the following XML configuration.

-
-
-
-
<subsystem xmlns="urn:jboss:domain:jaxrs:2.0">
-    <resteasy-add-charset>true</resteasy-add-charset>
-    <resteasy-gzip-max-input>17</resteasy-gzip-max-input>
-    <resteasy-jndi-resources>
-        <jndi>
-            java:global/jaxrsnoap/EJB_Resource1
-        </jndi>
-        <jndi>
-            java:global/jaxrsnoap/EJB_Resource2
-        </jndi>
-    </resteasy-jndi-resources>
-    <resteasy-language-mappings>
-        <entry key="es">
-            es
-        </entry>
-        <entry key="fr">
-            fr
-        </entry>
-        <entry key="en">
-            en-US
-        </entry>
-    </resteasy-language-mappings>
-    <resteasy-media-type-param-mapping>mt</resteasy-media-type-param-mapping>
-    <resteasy-providers>
-        <class>
-            com.bluemonkey.reader
-        </class>
-        <class>
-            com.bluemonkey.writer
-        </class>
-    </resteasy-providers>
-</subsystem>
-
-
-
- - - - - -
- - -
-

The use of hyphens is a WildFly convention. The hyphens are translated into periods before -the parameters are passed into RESTEasy so that they conform to the RESTEasy parameter names.

-
-
-

For a discussion of the various parameters, see the RESTEasy User Guide.

-
-
-
-
- - - - - -
- - -One important thing to understand is that these parameters are global. That is, they apply to all deployments. -Since these parameters are global, the classes referred to in "resteasy.providers" and "resteasy.disable.providers" -must be available to all deployments. In practice, then, they are meant to enable -or disable RESTEasy providers. Note that they can be used in conjunction with -"resteasy-use-builtin-providers" to tailor a set of available providers. -
-
-
- - - - - -
- - -Another important fact is that once parameters are changed via some management interface the changes require - a redeployment of any applications previously deployed. -
-
-
- - - - - -
- - -RESTEasy has introduced a new treatment of jakarta.ws.rs.WebApplicationException's thrown by a -Jakarta REST client or MicroProfile REST Client running inside a RESTful resource, in which the embedded -jakarta.ws.rs.core.Response is "sanitized" before being returned to prevent the risk of information leaking from a -third party. The original behavior can be restored by setting the parameter -"resteasy.original.webapplicationexception.behavior" to "true". See the RESTEasy User Guide -chapter "Resteasy WebApplicationExceptions" for more information. -
-
-
-
-
-
-

7.30. Elytron OpenID Connect Client Subsystem Configuration

-
-

The ability to secure applications using OpenID Connect is -provided by the elytron-oidc-client subsystem.

-
-
-

7.30.1. Subsystem

-
-

The elytron-oidc-client subsystem is included in the default configuration. If not present, the subsystem can be -added using the following CLI commands.

-
-
-
-
[standalone@localhost:9990 /] /extension=org.wildfly.extension.elytron-oidc-client:add
-
-[standalone@localhost:9990 /] /subsystem=elytron-oidc-client:add
-
-[standalone@localhost:9990 /] reload
-
-
-
-
-

7.30.2. Configuration

-
-

By default, the elytron-oidc-client subsystem does not contain any configured resources or attributes.

-
-
-

The configuration required to secure an application with OpenID Connect can either be provided within the -application itself or within the elytron-oidc-client subsystem.

-
-
-
Deployment Configuration
-
-

The configuration required to secure an application with OpenID Connect can be specified in the deployment.

-
-
-

The first step is to create an oidc.json configuration file in the WEB-INF directory of the application. -The second step is to set the auth-method to OIDC in the application’s web.xml file.

-
-
-

Here is an example of an oidc.json configuration file:

-
-
-
-
{
-  "client-id" : "customer-portal",
-  "provider-url" : "http://localhost:8180/auth/realms/demo",
-  "ssl-required" : "external",
-  "use-resource-role-mappings" : false,
-  "enable-cors" : true,
-  "cors-max-age" : 1000,
-  "cors-allowed-methods" : "POST, PUT, DELETE, GET",
-  "cors-exposed-headers" : "WWW-Authenticate, My-custom-exposed-Header",
-  "enable-basic-auth" : false,
-  "expose-token" : true,
-  "verify-token-audience" : true,
-   "credentials" : {
-      "secret" : "234234-234234-234234"
-   },
-
-   "connection-pool-size" : 20,
-   "socket-timeout-millis": 5000,
-   "connection-timeout-millis": 6000,
-   "connection-ttl-millis": 500,
-   "disable-trust-manager": false,
-   "allow-any-hostname" : false,
-   "truststore" : "path/to/truststore.pkcs12",
-   "truststore-password" : "geheim",
-   "client-keystore" : "path/to/client-keystore.pkcs12",
-   "client-keystore-password" : "geheim",
-   "client-key-password" : "geheim",
-   "token-minimum-time-to-live" : 10,
-   "min-time-between-jwks-requests" : 10,
-   "public-key-cache-ttl": 86400,
-   "redirect-rewrite-rules" : {
-   "^/wsmain/api/(.*)$" : "/api/$1"
-   }
-}
-
-
-
-
-
Subsystem Configuration
-
-

Instead of adding configuration to your deployment to secure it with OpenID Connect as described in the -previous section, another option is to add configuration to the elytron-oidc-client subsystem instead.

-
-
-

The following example shows how to add configuration to the elytron-oidc-client subsystem.

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0">
-    <secure-deployment name="DEPLOYMENT_RUNTIME_NAME.war">
-        <client-id>customer-portal</client-id>
-        <provider-url>http://localhost:8180/auth/realms/demo</provider-url>
-        <ssl-required>external</ssl-required>
-        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
-    </secure-deployment>
-</subsystem>
-
-
-
-

The secure-deployment resource allows you to provide configuration for a specific deployment. In -the example above, the secure-deployment resource is providing the configuration that should be used -for the DEPLOYMENT_RUNTIME_NAME.war deployment, where DEPLOYMENT_RUNTIME_NAME corresponds to -the runtime-name for the deployment.

-
-
-

The various configuration options that can be specified in the secure-deployment configuration -correspond to the same options that can be specified in the oidc.json configuration that was -explained in the previous section.

-
-
-

If you have multiple applications that are being secured using the same OpenID provider, -the provider configuration can be defined separately as shown in the example below:

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0">
-    <provider name="keycloak">
-        <provider-url>http://localhost:8080/auth/realms/demo</provider-url>
-        <ssl-required>external</ssl-required>
-    </realm>
-    <secure-deployment name="customer-portal.war">
-        <provider>keycloak</provider>
-        <client-id>customer-portal</client-id>
-        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
-    </secure-deployment>
-    <secure-deployment name="product-portal.war">
-        <provider>keycloak</provider>
-        <client-id>product-portal</client-id>
-        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
-    </secure-deployment>
-</subsystem>
-
-
-
-
-
Activation
-
-

The elytron-oidc-client subsystem will scan deployments to detect if the OIDC authentication mechanism -is required for any web components (i.e., for each deployment, the subsystem will determine if OIDC configuration -has either been found within the deployment or if there is OIDC configuration for the deployment in the subsystem -configuration). If the subsystem detects that the OIDC mechanism is indeed required, the subsystem will -activate the authentication mechanism automatically. Otherwise, no activation will occur and deployment -will continue normally.

-
-
-
-
-

7.30.3. Virtual Security

-
-

The purpose of using OpenID Connect is to verify a user’s identity based on the authentication that’s been -performed by the OpenID provider. For this reason, OpenID Connect deployments do not depend on security-domain -resources that have been defined in the Elytron subsystem, like traditional deployments do. Instead, -the elytron-oidc-client subsystem will automatically create and make use of its own virtual security domain -across the deployment. No further managed configuration is required.

-
-
- - - - - -
- - -
-

To propagate an identity from a virtual security domain, additional configuration might be required -depending on your use case. See Identity Propagation for more details.

-
-
-
-
-
-

7.30.4. OpenID Providers

-
-

The provider-url attribute in the oidc.json configuration and in the elytron-oidc-client -subsystem configuration allows you to specify the URL for the OpenID provider that you’d like to use. -For WildFly 25, the elytron-oidc-client subsystem has been tested with the Keycloak OpenID provider. -Other OpenID providers haven’t been extensively tested yet so the use of other OpenID providers should -be considered experimental for now and should not be used in a production environment yet. Proper support -for other OpenID providers will be added in a future WildFly release.

-
-
-
Disabling "typ" Claim Validation
-
-

By default, when verifying an access token, the elytron-oidc-client subsystem expects the token -to contain a typ claim with value Bearer. Access tokens provided by the Keycloak OpenID provider -contain this claim. However, access tokens provided by other OpenID providers might not include this -claim, causing token validation to fail. When using an OpenID provider other than Keycloak, -it is possible to disable the typ claim validation by setting the wildfly.elytron.oidc.disable.typ.claim.validation -system property to true.

-
-
-
-
-

7.30.5. Multi-Tenancy Support

-
-

In some cases, it might be desirable to secure an application using multiple oidc.json configuration files. -For example, you might want a different oidc.json file to be used depending on the request in order to authenticate -users from multiple Keycloak realms. The elytron-oidc-client subsystem makes it possible to use a custom configuration -resolver so you can define which configuration file to use for each request.

-
-
-

To make use of the multi-tenancy feature, you need to create a class that implements the -org.wildfly.security.http.oidc.OidcClientConfigurationResolver interface, as shown in the example below:

-
-
-
-
package example;
-
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.wildfly.security.http.oidc.OidcClientConfiguration;
-import org.wildfly.security.http.oidc.OidcClientConfigurationBuilder;
-import org.wildfly.security.http.oidc.OidcClientConfigurationResolver;
-import org.wildfly.security.http.oidc.OidcHttpFacade;
-
-public class MyCustomConfigResolver implements OidcClientConfigurationResolver {
-
-    private final Map<String, OidcClientConfiguration> cache = new ConcurrentHashMap<>();
-
-    @Override
-    public OidcClientConfiguration resolve(OidcHttpFacade.Request request) {
-        String path = request.getURI();
-        String realm = ... // determine which Keycloak realm to use based on the request path
-        OidcClientConfiguration clientConfiguration = cache.get(realm);
-        if (clientConfiguration == null) {
-            InputStream is = getClass().getResourceAsStream("/oidc-" + realm + ".json"); // config to use based on the realm
-            clientConfiguration = OidcClientConfigurationBuilder.build(is);
-            cache.put(realm, clientConfiguration);
-        }
-        return clientConfiguration;
-    }
-
-}
-
-
-
-

Once you’ve created your OidcClientConfigurationResolver `, you can specify that you want to make -use of your custom configuration resolver by setting the `oidc.config.resolver context-param in -your application’s web.xml file, as shown in the example below:

-
-
-
-
<web-app>
-    ...
-    <context-param>
-        <param-name>oidc.config.resolver</param-name>
-        <param-value>example.MyCustomConfigResolver</param-value>
-    </context-param>
-    ...
-</web-app>
-
-
-
-
-

7.30.6. Identity Propagation

-
-

When securing an application with OpenID Connect, the elytron-oidc-client subsystem will automatically -create a virtual security domain for you. If your application invokes an EJB, additional configuration -might be required to propagate the security identity from the virtual security domain depending on how -the EJB is being secured.

-
-
-
Securing an EJB using a different security domain
-
-

If your application secured with OpenID Connect invokes an EJB within the same deployment (e.g., -within the same WAR or EAR) or invokes an EJB in a separate deployment (e.g., across EARs) -and you’d like to secure the EJB using a different security domain from your servlet, -additional configuration will be needed to outflow the security identities established by -the virtual security domain to another security domain.

-
-
-

The virtual-security-domain resource allows you to specify that security identities -established by a virtual security domain should automatically be outflowed to other -security domains. A virtual-security-domain resource has a few attributes, as -described below:

-
-
-
    -
  • -

    name - This is the runtime name of a deployment associated with a virtual security domain (e.g., -DEPLOYMENT_NAME.ear, a deployment that has a subdeployment that is secured using OpenID Connect).

    -
  • -
  • -

    outflow-security-domains - This is the list of security-domains that security identities from -the virtual security domain should be automatically outflowed to.

    -
  • -
  • -

    outflow-anonymous - When outflowing to a security domain, if outflow is not possible, should the -anonymous identity be used? Outflow to a security domain might not be possible if the domain does -not trust this domain or if the identity being outflowed to a domain does not exist in that domain. -Outflowing anonymous has the effect of clearing any identity already established for that domain. -This attribute defaults to false.

    -
  • -
-
-
-

In addition to configuring a virtual-security-domain resource, you’ll also need to update the -security-domain configuration for your EJB to indicate that it should trust security identities established -by the virtual-security-domain. This can be specified by configuring the trusted-virtual-security-domains -attribute for a security-domain (e.g., setting the trusted-virtual-security-domains attribute to -DEPLOYMENT_NAME.ear for a security-domain would indicate that this security-domain -should trust the virtual security domain associated with the DEPLOYMENT_NAME.ear deployment).

-
-
-

The virtual-security-domain configuration and trusted-virtual-security-domains configuration -will allow security identities established by a virtual security domain to be successfully -outflowed to a security-domain being used to secure the EJB.

-
-
-
-
Securing an EJB using the same virtual security domain
-
-
Within the same deployment
-
-

If your application secured with OpenID Connect invokes an EJB within the same deployment (e.g., -within the same WAR or EAR), and you’d like to secure the EJB using the same virtual security -domain as your servlet, no additional configuration is required. This means that if no security -domain configuration has been explicitly specified for the EJB, the virtual security domain will -automatically be used to secure the EJB.

-
-
-
-
Across deployments
-
-

If your application secured with OpenID Connect invokes an EJB in a separate deployment (e.g., across EARs) -and you’d like to secure the EJB using the same virtual security domain as your servlet, -additional configuration will be needed. In particular, the EJB will need to reference the virtual -security domain explicitly.

-
-
-

The virtual-security-domain resource allows you to reference the virtual security domain -from the security domain configuration for the EJB. As an example, a virtual-security-domain -resource could be added as follows:

-
-
-

/subsystem=elytron/virtual-security-domain=DEPLOYMENT_NAME.ear:add()

-
-
-

An annotation like @SecurityDomain(DEPLOYMENT_NAME.ear) can then be added to the EJB, -where DEPLOYMENT_NAME.ear is a reference to the virtual-security-domain defined above.

-
-
-

This configuration indicates that the virtual security domain associated with DEPLOYMENT_NAME.ear -should be used to secure the EJB.

-
-
-
-
-
-

7.30.7. Securing the management console with OpenID Connect

-
-

The management console can be secured with OpenID Connect using the Keycloak OpenID provider.

-
-
- - - - - -
- - -
-

The ability to secure the management console with the Keycloak OpenID provider is only available when -running a standalone server and is not supported when running a managed domain. The management -CLI cannot be secured with OpenID Connect.

-
-
-
-
-

To secure the management console with OpenID Connect, configuration is required on the Keycloak side -and in the elytron-oidc-client subsystem.

-
-
-
Keycloak Configuration
-
-

Follow the steps in Keycloak’s getting started guide to -add a new realm called wildfly-infra.

-
-
-

Then, create a new OpenID Connect client called wildfly-console. Set the Valid Redirect URIs using -the URI used to access the WildFly management console, e.g., http://localhost:9990/console/. Similarly, you’ll -also need to set *Web Origins using the management port for your WildFly instance, e.g., -http://localhost:9990.

-
-
-

Next, create a second OpenID Connect client called wildfly-management. This will be a bearer-only client so in -the Capability configuration, be sure to uncheck the Standard flow and Direct access grants.

-
-
-

If you will be configuring WildFly to enable Role Based Access Control (RBAC), you can also create -a new Realm role (e.g., Administrator) and assign it to a user.

-
-
-
-
Elytron OIDC Client Subsystem Configuration
-
-

We need to add a secure-deployment resource that references the wildfly-management client that was created -in the previous section.

-
-
-

A secure-server that references the wildfly-console client is also needed.

-
-
-

Some example CLI commands that add these resources can be seen here:

-
-
-
-
# Configure the Keycloak provider
-/subsystem=elytron-oidc-client/provider=keycloak:add(provider-url=http://localhost:8180/realms/wildfly-infra)
-
-# Create a secure-deployment in order to protect mgmt interface
-/subsystem=elytron-oidc-client/secure-deployment=wildfly-management:add(provider=keycloak,client-id=wildfly-management,principal-attribute=preferred_username,bearer-only=true,ssl-required=EXTERNAL)
-
-# Enable RBAC where roles are obtained from the identity
-/core-service=management/access=authorization:write-attribute(name=provider,value=rbac)
-/core-service=management/access=authorization:write-attribute(name=use-identity-roles,value=true)
-
-# Create a secure-server in order to publish the management console configuration via mgmt interface
-/subsystem=elytron-oidc-client/secure-server=wildfly-console:add(provider=keycloak,client-id=wildfly-console,public-client=true)
-
-# reload
-reload
-
-
-
-
-
-

7.30.8. Accessing the management console

-
-

With the above configuration in place, when you access the management console (e.g., http://localhost:9990/console/), -you will be redirected to Keycloak to log in, and will then be redirected back to the management console upon successful -authentication.

-
-
-
-
-

7.31. Simple configuration subsystems

-
-

The following subsystems currently have no configuration beyond its root -element in the configuration

-
-
-
-
<subsystem xmlns="urn:jboss:domain:jdr:1.0"/>
-<subsystem xmlns="urn:jboss:domain:pojo:1.0"/>
-<subsystem xmlns="urn:jboss:domain:sar:1.0"/>
-
-
-
-

The presence of each of these turns on a piece of functionality:

-
- ---- - - - - - - - - - - - - - - - - - - - - -
NameDescription

jdr

Enables the gathering of diagnostic data for use in remote -analysis of error conditions. Although the data is in a simple format -and could be useful to anyone, primarily useful for JBoss EAP -subscribers who would provide the data to Red Hat when requesting -support

pojo

Enables the deployment of applications containing JBoss -Microcontainer services, as supported by previous versions of JBoss -Application Server

sar

Enables the deployment of .SAR archives containing MBean services, -as supported by previous versions of JBoss Application Server

-
-
-
-
-

8. Domain Setup

-
-
-

To run a group of servers as a managed domain you need to configure both -the domain controller and each host that joins the domain. This sections -focuses on the network configuration for the domain and host controller -components. For background information users are encouraged to review -the Operating modes and -Configuration -Files sections.

-
-
-

8.1. Domain Controller Configuration

-
-

The domain controller is the central government for a managed domain. A -domain controller configuration requires two steps:

-
-
-
    -
  • -

    A host needs to be configured to act as the Domain Controller for the -whole domain

    -
  • -
  • -

    The host must expose an addressable management interface binding for -the managed hosts to communicate with it

    -
  • -
-
-
-

Example IP Addresses

-
-
- - - - - -
- - -In this example the domain controller uses 192.168.0.101 and the host -controller 192.168.0.10 -
-
-
-

Configuring a host to act as the Domain Controller is done through the -domain-controller declaration in host.xml. If it includes the -<local/> element, then this host will become the domain controller:

-
-
-
-
<domain-controller>
-   <local/>
-</domain-controller>
-
-
-
-

~(See domain/configuration/host.xml)~

-
-
-

A host acting as the Domain Controller must expose a management -interface on an address accessible to the other hosts in the domain. -Exposing an HTTP(S) management interface is not required, but is -recommended as it allows the Administration Console to work:

-
-
-
-
<management-interfaces>
-    <native-interface sasl-authentication-factory="management-sasl-authentication">
-        <socket interface="management" port="9999"/>
-    </native-interface>
-    <http-interface http-authentication-factory="management-http-authentication">
-        <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
-        <socket interface="management" port="${jboss.management.http.port:9990}"/>
-    </http-interface>
-</management-interfaces>
-
-
-
-

The interface attributes above refer to a named interface declaration -later in the host.xml file. This interface declaration will be used to -resolve a corresponding network interface.

-
-
-
-
<interfaces>
-   <interface name="management">
-       <inet-address value="192.168.0.101"/>
-   </interface>
-</interfaces>
-
-
-
-

~(See domain/configuration/host.xml)~

-
-
-

Please consult the chapter "Interface Configuration" for a more detailed -explanation on how to configure network interfaces.

-
-
-

Next by default the Domain Controller is configured to require -authentication so a user needs to be added that can be used by the secondary -Host Controller to connect.

-
-
-

Make use of the add-user utility to add a new user, for this example I -am adding a new user called "secondary".

-
-
- - - - - -
- - -add-user MUST be run on the Domain Controller and NOT the -secondary Host Controller. -
-
-
-
-

8.2. Host Controller Configuration

-
-

Once the Domain Controller is configured correctly you can proceed with -any host that should join the domain. The Host Controller configuration -requires three steps:

-
-
-
    -
  • -

    The logical host name (within the domain) needs to be distinct

    -
  • -
  • -

    The Host Controller needs to know the Domain Controller IP address

    -
  • -
-
-
-

Provide a distinct, logical name for the host. In the following example -we simply name it "secondary":

-
-
-
-
<host xmlns="urn:jboss:domain:3.0"
-     name="secondary">
-[...]
-</host>
-
-
-
-

~(See domain/configuration/host.xml)~

-
-
-

If the name attribute is not set, the default name for the host will -be the value of the jboss.host.name system property. If that is not -set, the value of the HOSTNAME or COMPUTERNAME environment variable -will be used, one of which will be set on most operating systems. If -neither is set the name will be the value of -InetAddress.getLocalHost().getHostName().

-
-
-

An authentication-context needs to be defined in the elytron subsystem -to contain the identity of the host controller.

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron:15.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-    <authentication-client>
-        <authentication-configuration sasl-mechanism-selector="DIGEST-MD5"
-                                      name="hostAuthConfig"
-                                      authentication-name="secondary"
-                                      realm="ManagementRealm">
-            <credential-reference clear-text="host_us3r_password"/>
-        </authentication-configuration>
-        <authentication-context name="hcAuthContext">
-            <match-rule authentication-configuration="hostAuthConfig"/>
-        </authentication-context>
-    </authentication-client>
-....
-
-
-
-

Tell it how to find the Domain Controller, so it can register itself with -the domain:

-
-
-
-
<domain-controller>
-   <remote protocol="remote" host="192.168.0.101" port="9999" authentication-context="hcAuthContext"/>
-</domain-controller>
-
-
-
-

Since we have also exposed the HTTP management interface we could also -use:

-
-
-
-
<domain-controller>
-   <remote protocol="http-remoting" host="192.168.0.101" port="9990" username="secondary" authentication-context="hcAuthContext"/>
-</domain-controller>
-
-
-
-

~(See domain/configuration/host.xml)~

-
-
- - - - - -
- - -The name of each host needs to be unique when registering with the -Domain Controller, however the username does not - using the username -attribute allows the same account to be used by multiple hosts if this -makes sense in your environment. -
-
-
-

8.2.1. Ignoring domain wide resources

-
-

WildFly 10 and later make it easy for secondary Host Controllers to "ignore" -parts of the domain wide configuration. What does the mean and why is it -useful?

-
-
-

One of the responsibilities of the Domain Controller is ensuring that -all running Host Controllers have a consistent local copy of the domain -wide configuration (i.e. those resources whose address does not begin -with /host=*, i.e. those that are persisted in domain.xml. Having -that local copy allows a user to do the following things:

-
-
-
    -
  • -

    Ask the secondary Host Controller to launch its already configured servers, even if the -Domain Controller is not running.

    -
  • -
  • -

    Configured new servers, using different server groups from those -current running, and ask the secondary Host Controller to launch them, even if the Domain -Controller is not running.

    -
  • -
  • -

    Reconfigure the secondary Host Controller to act as the Domain Controller, allowing it to -take over as the Domain Controller if the previous Domain Controller has failed or been shut -down.

    -
  • -
-
-
-

However, of these three things only the latter two require that the -secondary Host Controller maintain a complete copy of the domain wide configuration. The -first only requires the secondary Host Controller to have the portion of the domain wide -configuration that is relevant to its current servers. And the first use -case is the most common one. A secondary Host Controller that is only meant to support the -first use case can safely "ignore" portions of the domain wide -configuration. And there are benefits to ignoring some resources:

-
-
-
    -
  • -

    If a server group is ignored, and the deployments mapped to that -server group aren’t mapped to other non-ignored groups, then the secondary Host Controller -does not need to pull down a copy of the deployment content from the -Domain Controller. That can save disk space on the secondary Host Controller, improve the speed of -starting new hosts and reduce network traffic.

    -
  • -
  • -

    WildFly supports "mixed domains" where a later version Domain -Controller can manage secondary Host Controllers running previous versions. But those -"legacy" secondary Host Controllers cannot understand configuration resources, attributes -and operations introduced in newer versions. So any attempt to use newer -things in the domain wide configuration will fail unless the legacy -secondary Host Controllers are ignoring the relevant resources. But ignoring resources will -allow the legacy secondary Host Controllers to work fine managing servers using profiles -without new concepts, while other hosts can run servers with profiles -that take advantage of the latest features.

    -
  • -
-
-
-

Prior to WildFly 10, a secondary Host Controller could be configured to ignore some -resources, but the mechanism was not particularly user friendly:

-
-
-
    -
  • -

    The resources to be ignored had to be listed in a fair amount of -detail in each host’s configuration.

    -
  • -
  • -

    If a new resource is added and needs to be ignored, then each host -that needs to ignore that must be updated to record that.

    -
  • -
-
-
-

Starting with WildFly 10, this kind of detailed configuration is no -longer required. Instead, with the standard versions of host.xml, the -secondary Host Controller will behave as follows:

-
-
-
    -
  • -

    If the secondary Host Controller was started with the --backup command line parameter, -the behavior will be the same as releases prior to 10; i.e. only -resources specifically configured to be ignored will be ignored.

    -
  • -
  • -

    Otherwise, the secondary Host Controller will "ignore unused resources".

    -
  • -
-
-
-

What does "ignoring unused resources" mean?

-
-
-
    -
  • -

    Any server-group that is not referenced by one of the host’s -server-config resources is ignored.

    -
  • -
  • -

    Any profile that is not referenced by a non-ignored server-group, -either directly or indirectly via the profile resource’s 'include' -attribute, is ignored

    -
  • -
  • -

    Any socket-binding-group that is not directly referenced by one of the -host’s server-config resources, or referenced by a non-ignored -server-group, is ignored

    -
  • -
  • -

    Extension resources will not be automatically ignored, even if no -non-ignored profile uses the extension. Ignoring an extension requires -explicit configuration. Perhaps in a future release extensions will be -explicitly ignored.

    -
  • -
  • -

    If a change is made to the secondary Host Controller host’s configuration or to the domain -wide configuration that reduces the set of ignored resources, then as -part of handling that change the secondary Host Controller will contact the Domain Controller to pull -down the missing pieces of configuration and will integrate those pieces -in its local copy of the management model. Examples of such changes -include adding a new server-config that references a previously ignored -server-group or socket-binding-group, changing the server-group or -socket-binding-group assigned to a server-config, changing the profile -or socket-binding-group assigned to a non-ignored server-group, or -adding a profile or socket-binding-group to the set of those included -directly or indirectly by a non-ignored profile or socket-binding-group.

    -
  • -
-
-
-

The default behavior can be changed, either to always ignore unused -resources, even if --backup is used, or to not ignore unused -resources, by updating the domain-controller element in the host-xml -file and setting the ignore-unused-configuration attribute:

-
-
-
-
<domain-controller>
-    <remote authentication-context="hcAuthContext" ignore-unused-configuration="false">
-        <discovery-options>
-            <static-discovery name="primary" protocol="${jboss.domain.primary.protocol:remote}" host="${jboss.domain.primary.address}" port="${jboss.domain.primary.port:9999}"/>
-        </discovery-options>
-    </remote>
-</domain-controller>
-
-
-
-

The "ignore unused resources" behavior can be used in combination with -the pre-WildFly 10 detailed specification of what to ignore. If that is -done both the unused resources and the explicitly declared resources -will be ignored. Here’s an example of such a configuration, one where -the secondary Host Controller cannot use the "org.example.foo" extension that has been -installed on the Domain Controller and on some secondary Host Controllers, but not this one:

-
-
-
-
<domain-controller>
-    <remote authentication-context="hcAuthContext" ignore-unused-configuration="true">
-        <ignored-resources type="extension">
-            <instance name="org.example.foo"/>
-        </ignored-resources>
-        <discovery-options>
-            <static-discovery name="primary" protocol="${jboss.domain.primary.protocol:remote}" host="${jboss.domain.primary.address}" port="${jboss.domain.primary.port:9999}"/>
-        </discovery-options>
-    </remote>
-</domain-controller>
-
-
-
-
-
-

8.3. Server groups

-
-

The Domain Controller defines one or more server groups and associates -each of these with a profile and a socket binding group, and also:

-
-
-
-
<server-groups>
-    <server-group name="main-server-group" profile="default">
-        <jvm name="default">
-           <heap size="64m" max-size="512m"/>
-           <permgen size="128m" max-size="128m"/>
-        </jvm>
-        <socket-binding-group ref="standard-sockets"/>
-    </server-group>
-    <server-group name="other-server-group" profile="bigger">
-        <jvm name="default">
-            <heap size="64m" max-size="512m"/>
-        </jvm>
-        <socket-binding-group ref="bigger-sockets"/>
-    </server-group>
-</server-groups>
-
-
-
-

~(See domain/configuration/domain.xml)~

-
-
-

The Domain Controller also defines the socket binding groups and the -profiles. The socket binding groups define the default socket bindings -that are used:

-
-
-
-
<socket-binding-groups>
-    <socket-binding-group name="standard-sockets" default-interface="public">
-        <socket-binding name="http" port="8080"/>
-        [...]
-    </socket-binding-group>
-    <socket-binding-group name="bigger-sockets" include="standard-sockets" default-interface="public">
-        <socket-binding name="unique-to-bigger" port="8123"/>
-    </socket-binding-group>
-</socket-binding-groups>
-
-
-
-

~(See domain/configuration/domain.xml)~
-In this example the bigger-sockets group includes all the socket -bindings defined in the standard-sockets groups and then defines an -extra socket binding of its own.

-
-
-

A profile is a collection of subsystems, and these subsystems are what -implement the functionality people expect of an application server.

-
-
-
-
<profiles>
-    <profile name="default">
-        <subsystem xmlns="urn:jboss:domain:web:1.0">
-            <connector name="http" scheme="http" protocol="HTTP/1.1" socket-binding="http"/>
-            [...]
-        </subsystem>
-        <\!-\- The rest of the subsystems here \-->
-        [...]
-    </profile>
-    <profile name="bigger">
-        <subsystem xmlns="urn:jboss:domain:web:1.0">
-            <connector name="http" scheme="http" protocol="HTTP/1.1" socket-binding="http"/>
-            [...]
-        </subsystem>
-        <\!-\- The same subsystems as defined by 'default' here \-->
-        [...]
-        <subsystem xmlns="urn:jboss:domain:fictional-example:1.0">
-            <socket-to-use name="unique-to-bigger"/>
-        </subsystem>
-    </profile>
-</profiles>
-
-
-
-

~(See domain/configuration/domain.xml)~
-Here we have two profiles. The bigger profile contains all the same -subsystems as the default profile (although the parameters for the -various subsystems could be different in each profile), and adds the -fictional-example subsystem which references the unique-to-bigger -socket binding.

-
-
-
-

8.4. Servers

-
-

The Host Controller defines one or more servers:

-
-
-
-
<servers>
-    <server name="server-one" group="main-server-group">
-        <\!-\- server-one inherits the default socket-group declared in the server-group \-->
-        <jvm name="default"/>
-    </server>
- 
-    <server name="server-two" group="main-server-group" auto-start="true">
-        <socket-binding-group ref="standard-sockets" port-offset="150"/>
-        <jvm name="default">
-            <heap size="64m" max-size="256m"/>
-        </jvm>
-    </server>
- 
-    <server name="server-three" group="other-server-group" auto-start="false">
-        <socket-binding-group ref="bigger-sockets" port-offset="250"/>
-    </server>
-</servers>
-
-
-
-

~(See domain/configuration/host.xml)~

-
-
-

server-one and server-two both are associated with -main-server-group so that means they both run the subsystems defined -by the default profile, and have the socket bindings defined by the -standard-sockets socket binding group. Since all the servers defined -by a host will be run on the same physical host we would get port -conflicts unless we used -<socket-binding-group ref="standard-sockets" port-offset="150"/> for -server-two. This means that server-two will use the socket bindings -defined by standard-sockets but it will add 150 to each port number -defined, so the value used for http will be 8230 for server-two.

-
-
-

server-three will not be started due to its auto-start="false". The -default value if no auto-start is given is true so both server-one -and server-two will be started when the host controller is started. -server-three belongs to other-server-group, so if its auto-start -were changed to true it would start up using the subsystems from the -bigger profile, and it would use the bigger-sockets socket binding -group.

-
-
-

8.4.1. JVM

-
-

The Host Controller contains the main jvm definitions with arguments:

-
-
-
-
<jvms>
-    <jvm name="default">
-        <heap size="64m" max-size="128m"/>
-    </jvm>
-</jvms>
-
-
-
-

~(See domain/configuration/host.xml)~
-From the preceding examples we can see that we also had a jvm -reference at server group level in the Domain Controller. The jvm’s name -must match one of the definitions in the Host Controller. The values -supplied at Domain Controller and Host Controller level are combined, -with the Host Controller taking precedence if the same parameter is -given in both places.

-
-
-

Finally, as seen, we can also override the jvm at server level. Again, -the jvm’s name must match one of the definitions in the Host Controller. -The values are combined with the ones coming in from Domain -Controller and Host Controller level, this time the server definition -takes precedence if the same parameter is given in all places.

-
-
-

Following these rules the jvm parameters to start each server would be

-
- ---- - - - - - - - - - - - - - - - - - - - - -
ServerJVM parameters

server-one

-Xms64m -Xmx128m

server-two

-Xms64m -Xmx256m

server-three

-Xms64m -Xmx128m

-
-
-
-
-
-

9. Management tasks

-
-
-

9.1. Command line parameters

-
-

To start up a WildFly managed domain, execute the -$JBOSS_HOME/bin/domain.sh script. To start up a standalone server, -execute the $JBOSS_HOME/bin/standalone.sh. With no arguments, the -default configuration is used. You can override the default -configuration by providing arguments on the command line, or in your -calling script.

-
-
-

9.1.1. System properties

-
-

To set a system property, pass its new value using the standard jvm --Dkey=value options:

-
-
-
-
$JBOSS_HOME/bin/standalone.sh -Djboss.home.dir=some/location/wildFly \
-    -Djboss.server.config.dir=some/location/wildFly/custom-standalone
-
-
-
-

This command starts up a standalone server instance using a non-standard -AS home directory and a custom configuration directory. For specific -information about system properties, refer to the definitions below.

-
-
-

Instead of passing the parameters directly, you can put them into a -properties file, and pass the properties file to the script, as in the -two examples below.

-
-
-
-
$JBOSS_HOME/bin/domain.sh --properties=/some/location/jboss.properties
-$JBOSS_HOME/bin/domain.sh -P=/some/location/jboss.properties
-
-
-
-

Note however, that properties set this way are not processed as part of -JVM launch. They are processed early in the boot process, but this -mechanism should not be used for setting properties that control JVM -behavior (e.g. java.net.perferIPv4Stack) or the behavior of the JBoss -Modules classloading system.

-
-
-

The syntax for passing in parameters and properties files is the same -regardless of whether you are running the domain.sh, standalone.sh, -or the Microsoft Windows scripts domain.bat or standalone.bat.

-
-
-

The properties file is a standard Java property file containing -key=value pairs:

-
-
-
-
jboss.home.dir=/some/location/wildFly
-jboss.domain.config.dir=/some/location/wildFly/custom-domain
-
-
-
-

System properties can also be set via the xml configuration files. Note -however that for a standalone server properties set this way will not be -set until the xml configuration is parsed and the commands created by -the parser have been executed. So this mechanism should not be used for -setting properties whose value needs to be set before this point.

-
-
-
Controlling filesystem locations with system properties
-
-

The standalone and the managed domain modes each use a default -configuration which expects various files and writable directories to -exist in standard locations. Each of these standard locations is -associated with a system property, which has a default value. To -override a system property, pass its new value using the one of the -mechanisms above. The locations which can be controlled via system -property are:

-
-
-
Standalone
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Property nameUsageDefault value

java.ext.dirs

The JDK extension directory paths

null

jboss.home.dir

The root directory of the WildFly installation.

Set by -standalone.sh to $JBOSS_HOME

jboss.server.base.dir

The base directory for server content.

jboss.home.dir/standalone

jboss.server.config.dir

The base configuration directory.

jboss.server.base.dir/configuration

jboss.server.data.dir

The directory used for persistent data file -storage.

jboss.server.base.dir/data

jboss.server.log.dir

The directory containing the server.log file.

jboss.server.base.dir/log

jboss.server.temp.dir

The directory used for temporary file storage.

jboss.server.base.dir/tmp

jboss.server.content.dir

The directory used to store deployed content

jboss.server.data.dir/content

-
-
-
Managed Domain
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Property nameUsageDefault value

jboss.home.dir

The root directory of the WildFly installation.

Set by -domain.sh to $JBOSS_HOME

jboss.domain.base.dir

The base directory for domain content.

jboss.home.dir/domain

jboss.domain.config.dir

The base configuration directory

jboss.domain.base.dir/configuration

jboss.domain.data.dir

The directory used for persistent data file -storage.

jboss.domain.base.dir/data

jboss.domain.log.dir

The directory containing the host-controller.log -and process-controller.log files

jboss.domain.base.dir/log

jboss.domain.temp.dir

The directory used for temporary file storage

jboss.domain.base.dir/tmp

jboss.domain.deployment.dir

The directory used to store deployed -content

jboss.domain.base.dir/content

jboss.domain.servers.dir

The directory containing the output for the -managed server instances

jboss.domain.base.dir/servers

-
-
-
-
-

9.1.2. Other command line parameters

-
-

The first acceptable format for command line arguments to the WildFly -launch scripts is

-
-
-
-
--name=value
-
-
-
-

For example:

-
-
-
-
$JBOSS_HOME/bin/standalone.sh --server-config=standalone-ha.xml
-
-
-
-

If the parameter name is a single character, it is prefixed by a single -'-' instead of two. Some parameters have both a long and short option.

-
-
-
-
-x=value
-
-
-
-

For example:

-
-
-
-
$JBOSS_HOME/bin/standalone.sh -P=/some/location/jboss.properties
-
-
-
-

For some command line arguments frequently used in previous major -releases of WildFly, replacing the "=" in the above examples with a -space is supported, for compatibility.

-
-
-
-
-b 192.168.100.10
-
-
-
-

If possible, use the -x=value syntax. New parameters will always -support this syntax.

-
-
-

The sections below describe the command line parameter names that are -available in standalone and domain mode.

-
-
-
Standalone
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDefault if absentValue

--admin-only

-

Set the server’s running type to ADMIN_ONLY causing it -to open administrative interfaces and accept management requests but not -start other runtime services or accept end user requests.

--server-config -c

standalone.xml

A relative path which is interpreted -to be relative to jboss.server.config.dir. The name of the configuration -file to use.

--read-only-server-config

-

A relative path which is interpreted to -be relative to jboss.server.config.dir. This is similar to ---server-config but if this alternative is specified the server will not -overwrite the file when the management model is changed. However, a full -versioned history is maintained of the file.

--graceful-startup

true

Start the servers in gracefully, queuing or cleanly rejecting incoming requests until the server is fully started.

--git-repo

-

remote Git repository URL to use for configuration directory and content repository content or local if only a local repository is to be used.

--git-branch

master

The Git branch or tag to be used. If a tag name is used then the future commits will go into the detached state.

--git-auth

-

A URL to an Elytron configuration file containing the credentials to be used for connecting to the Git repository.

-
-
-
Managed Domain
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDefault if absentValue

--admin-only

-

Set the host controller’s running type to ADMIN_ONLY causing it to open -administrative interfaces and accept management requests but not start servers or, if this -host controller is the primary for the domain, accept incoming connections from secondary -host controllers.

--domain-config -c

domain.xml

A relative path which is interpreted to -be relative to jboss.domain.config.dir. The name of the domain wide -configuration file to use.

--read-only-domain-config

-

A relative path which is interpreted to -be relative to jboss.domain.config.dir. This is similar to ---domain-config but if this alternative is specified the host -controller will not overwrite the file when the management model is -changed. However, a full versioned history is maintained of the file.

--host-config

host.xml

A relative path which is interpreted to be -relative to jboss.domain.config.dir. The name of the host-specific -configuration file to use.

--read-only-host-config

-

A relative path which is interpreted to be -relative to jboss.domain.config.dir. This is similar to --host-config -but if this alternative is specified the host controller will not -overwrite the file when the management model is changed. However, a full -versioned history is maintained of the file.

-
-

The following parameters take no value and are only usable on secondary host -controllers (i.e. hosts configured to connect to a remote domain -controller.)

-
- ---- - - - - - - - - - - - - - - - - -
NameFunction

--backup

Causes the secondary host controller to create and maintain a -local copy (domain.cached-remote.xml) of the domain configuration. If -ignore-unused-configuration is unset in host.xml,a complete copy of the -domain configuration will be stored locally, otherwise the configured -value of ignore-unused-configuration in host.xml will be used. (See -ignore-unused-configuration for more details.)

--cached-dc

If the secondary host controller is unable to contact the -domain controller to get its configuration at boot, this option -will allow the secondary host controller to boot and become operational using -a previously cached copy of the domain configuration -(domain.cached-remote.xml.) If the cached configuration is not present, -this boot will fail. This file is created using one of the -following methods:- A previously successful connection to the -domain controller using --backup or --cached-dc.- Copying the domain -configuration from an alternative host to -domain/configuration/domain.cached-remote.xml.The unavailable -domain controller will be polled periodically for availability, and once -becoming available, the secondary host controller will reconnect to the -domain controller and synchronize the domain configuration. During -the interval the domain controller is unavailable, the secondary host -controller will not be able to make any modifications to the domain -configuration, but it may launch servers and handle requests to deployed -applications etc.

-
-
-
Common parameters
-
-

These parameters apply in both standalone or managed domain mode:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameFunction

-b=<value>

Sets system property jboss.bind.address to <value>. See -Controlling the Bind Address with -b for further details.

-b<name>=<value>

Sets system property jboss.bind.address.<name> to -<value> where name can vary. See Controlling the Bind Address with -b -for further details.

-u=<value>

Sets system property jboss.default.multicast.address to -<value>. See Controlling the Default Multicast Address with -u for -further details.

--version -v -V

Prints the version of WildFly to standard output and -exits the JVM.

--help-h

Prints a help message explaining the options and exits the -JVM.

-
-
-
-

9.1.3. Controlling the Bind Address with -b

-
-

WildFly binds sockets to the IP addresses and interfaces contained in -the <interfaces> elements in standalone.xml, domain.xml and -host.xml. (See -Interfaces -and -Socket -Bindings for further information on these elements.) The standard -configurations that ship with WildFly includes two interface -configurations:

-
-
-
-
<interfaces>
-    <interface name="management">
-        <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
-    </interface>
-    <interface name="public">
-       <inet-address value="${jboss.bind.address:127.0.0.1}"/>
-    </interface>
-</interfaces>
-
-
-
-

Those configurations use the values of system properties -jboss.bind.address.management and jboss.bind.address if they are -set. If they are not set, 127.0.0.1 is used for each value.

-
-
-

As noted in -Common -Parameters, the AS supports the -b and -b<name> command line -switches. The only function of these switches is to set system -properties jboss.bind.address and jboss.bind.address.<name> -respectively. However, because of the way the standard WildFly -configuration files are set up, using the -b switches can indirectly -control how the AS binds sockets.

-
-
-

If your interface configurations match those shown above, using this -as your launch command causes all sockets associated with interface -named "public" to be bound to 192.168.100.10.

-
-
-
-
$JBOSS_HOME/bin/standalone.sh -b=192.168.100.10
-
-
-
-

In the standard config files, public interfaces are those not associated -with server management. Public interfaces handle normal end-user -requests.

-
-
- - - - - -
- - -The interface named "public" is not inherently special. It is provided -as a convenience. You can name your interfaces to suit your environment. -
-
-
-

To bind the public interfaces to all IPv4 addresses (the IPv4 wildcard -address), use the following syntax:

-
-
-
-
$JBOSS_HOME/bin/standalone.sh -b=0.0.0.0
-
-
-
-

You can also bind the management interfaces, as follows:

-
-
-
-
$JBOSS_HOME/bin/standalone.sh -bmanagement=192.168.100.10
-
-
-
-

In the standard config files, management interfaces are those sockets -associated with server management, such as the socket used by the CLI, -the HTTP socket used by the admin console, and the JMX connector socket.

-
-
- - - - - -
- - -The -b switch only controls the interface bindings because the -standard config files that ship with WildFly sets things up that way. If -you change the <interfaces> section in your configuration to no longer -use the system properties controlled by -b, then setting -b in your -launch command will have no effect. -
-
-
-

For example, this perfectly valid setting for the "public" interface -causes -b to have no effect on the "public" interface:

-
-
-
-
<interface name="public">
-   <nic name="eth0"/>
-</interface>
-
-
-
-

The key point is the contents of the configuration files determine the -configuration. Settings like -b are not overrides of the -configuration files. They only provide a shorter syntax for setting a -system properties that may or may not be referenced in the configuration -files. They are provided as a convenience, and you can choose to modify -your configuration to ignore them.

-
-
-
-

9.1.4. Controlling the Default Multicast Address with -u

-
-

WildFly may use multicast communication for some services, particularly -those involving high availability clustering. The multicast addresses -and ports used are configured using the socket-binding elements in -standalone.xml and domain.xml. (See -Socket -Bindings for further information on these elements.) The standard HA -configurations that ship with WildFly include two socket binding -configurations that use a default multicast address:

-
-
-
-
<socket-binding name="jgroups-mping" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
-<socket-binding name="jgroups-udp" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
-
-
-
-

Those configurations use the values of system property -jboss.default.multicast.address if it is set. If it is not set, -230.0.0.4 is used for each value. (The configuration may include other -socket bindings for multicast-based services that are not meant to use -the default multicast address; e.g. a binding the mod-cluster services -use to communicate on a separate address/port with Apache httpd -servers.)

-
-
-

As noted in -Common Parameters, the AS supports the -u command line switch. The only -function of this switch is to set system property jboss.default.multicast.address. However, because of the way the -standard AS configuration files are set up, using the -u switches can indirectly control how the AS uses multicast.

-
-
-

If your socket binding configurations match those shown above, using -this as your launch command causes the service using those sockets -configurations to be communicate over multicast address 230.0.1.2.

-
-
-
-
$JBOSS_HOME/bin/standalone.sh -u=230.0.1.2
-
-
-
- - - - - -
- - -As with the -b switch, the -u switch only controls the multicast -address used because the standard config files that ship with WildFly -sets things up that way. If you change the <socket-binding> sections -in your configuration to no longer use the system properties controlled -by -u, then setting -u in your launch command will have no effect. -
-
-
-
-
-

9.2. Suspend, Resume and Graceful shutdown

-
-

9.2.1. Core Concepts

-
-

WildFly introduces the ability to suspend and resume servers. This can -be combined with shutdown to enable the server to gracefully finish -processing all active requests and then shut down. When a server is -suspended it will immediately stop accepting new requests, but wait for -existing requests to complete. A suspended server can be resumed at any -point, and will begin processing requests immediately. Suspending and -resuming has no effect on deployment state (e.g. if a server is -suspended singleton Jakarta Enterprise Beans’s will not be destroyed). As of WildFly 11 it is -also possible to start a server in suspended mode which means it will -not accept requests until it has been resumed. Servers will also be -suspended during the boot process, so no requests will be accepted until -the startup process is 100% complete.

-
-
-

Suspend/Resume has no effect on management operations; management -operations can still be performed while a server is suspended. If you -wish to perform a management operation that will affect the operation of -the server you can suspend the server, perform the operation, and then -resume the server. This allows all requests to finish, and makes sure -that no requests are running while the management changes are taking -place.

-
-
- - - - - -
- - -
-

If you perform a management operation while the server is suspended, -and the response to that operation includes the -operation-requires-reload or operation-requires-restart response -headers, then the operation will not take full effect until that -reload or restart is done. Simply resuming the server will not be -sufficient to cause the change to take effect.

-
-
-
-
-

When a server is suspending it goes through four different states:

-
-
-
    -
  • -

    RUNNING - The normal state, the server is accepting requests and -running normally

    -
  • -
  • -

    PRE_SUSPEND - In PRE_SUSPEND the server will notify external parties -that it is about to suspend, for example mod_cluster will notify the -load balancer that the deployment is suspending. Requests are still -accepted in this phase.

    -
  • -
  • -

    SUSPENDING - All new requests are rejected, and the server is -waiting for all active requests to finish. If there are no active -requests at suspend time this phase will be skipped.

    -
  • -
  • -

    SUSPENDED - All requests have completed, and the server is -suspended.

    -
  • -
-
-
-
-

9.2.2. Starting Suspended

-
-

In order to start into suspended mode when using a standalone server you -need to add --start-mode=suspend to the command line. It is also -possible to specify the start-mode in the reload operation to cause -the server to reload into suspended mode (other possible values for -start-mode are normal and admin-only).

-
-
-

In domain mode servers can be started in suspended mode by passing the -suspend=true parameter to any command that causes a server to start, -restart or reload (e.g. :start-servers(suspend=true)).

-
-
-
-

9.2.3. The Request Controller Subsystem

-
-

WildFly introduces a new subsystem called the Request Controller -Subsystem. This optional subsystem tracks all requests at their entry -point, which is how the graceful shutdown mechanism knows when all requests -are done. (It also allows you to provide a global limit on the total -number of running requests).

-
-
-

If this subsystem is not present suspend/resume will be limited. In -general things that happen in the PRE_SUSPEND phase will work as normal -(stopping message delivery, notifying the load balancer); however the -server will not wait for all requests to complete and instead will move -straight to SUSPENDED mode.

-
-
-

There is a small performance penalty associated with the request -controller subsystem (about on par with enabling statistics), so if you -do not require the suspend/resume functionality this subsystem can be -removed to get a small performance boost.

-
-
-
-

9.2.4. Subsystem Integrations

-
-

Suspend/Resume is a service provided by the WildFly platform that any -subsystem may choose to integrate with. Some subsystems integrate -directly with the suspend controller, while others integrate through the -request controller subsystem.

-
-
-

The following subsystems support graceful shutdown. Note that only -subsystems that provide an external entry point to the server need -graceful shutdown support. For example the Jakarta RESTful Web Services subsystem does not -require suspend/resume support as all access to Jakarta RESTful Web Services is through the -web connector.

-
-
-
    -
  • -

    Undertow - Undertow will wait for all requests to finish.

    -
  • -
  • -

    mod_cluster - The mod_cluster subsystem will notify the load -balancer that the server is suspending in the PRE_SUSPEND phase.

    -
  • -
  • -

    Jakarta Enterprise Beans - Jakarta Enterprise Beans will wait -for all remote Jakarta Enterprise Beans requests and MDB message -deliveries to finish. Delivery to MDB’s is stopped in the PRE_SUSPEND -phase. Jakarta Enterprise Beans timers are suspended, and missed timers will be activated -when the server is resumed.

    -
  • -
  • -

    Batch - Batch jobs will be stopped at a checkpoint while the server -is suspending. They will be restarted from that checkpoint when the -server returns to running mode.

    -
  • -
  • -

    EE Concurrency - The server will wait for all active jobs to finish. -All jobs that have already been queued will be skipped.

    -
  • -
  • -

    Transactions - The transaction subsystem waits for all running -transactions to finish while the server is suspending. During that time -the server refuses to start any new transaction. But any in-flight -transaction will be serviced - e.g. the server will accept any -incoming remote call which carries the context of a transaction already -started at the suspending server.

    -
  • -
-
-
-
Transactions and Jakarta Enterprise Beans
-
-

When you work with Jakarta Enterprise Beans you have to enable the graceful shutdown -functionality by setting the attribute enable-graceful-txn-shutdown to -true. For example, in the ejb3 subsystem section of standalone.xml:

-
-
-
-
<enable-graceful-txn-shutdown value="false"/>
-
-
-
-

By default graceful shutdown is disabled for the ejb subsystem. -The reason for this is that the behavior might be unwelcome in cluster -environments, as the server notifies remote clients that the node is no -longer available for remote calls only after the transactions are -finished. During that brief window of time, the client of a cluster may -send a new request to a node that is shutting down and it will refuse the -request because it is not related to an existing transaction. -If this attribute enable-graceful-txn-shutdown is set to false, we -disable the graceful behavior and Jakarta Enterprise Beans clients will not attempt to invoke -the node when it suspends, regardless of active transactions.

-
-
-
-
-

9.2.5. Standalone Mode

-
-

Suspend/Resume can be controlled via the following CLI operations -and commands in standalone mode:

-
-
-

:suspend(suspend-timeout=x)

-
-
-

Suspends the server. If the timeout is specified it will wait in the -SUSPENDING phase up to the specified number of seconds for all requests -to finish. If there is no timeout specified or the value is less than -zero it will wait indefinitely.

-
-
-

:resume

-
-
-

Resumes a previously suspended server. The server should be able to -begin serving requests immediately.

-
-
-

:read-attribute(name=suspend-state)

-
-
-

Returns the current suspend state of the server.

-
-
-

shutdown --suspend-timeout=x

-
-
-

If a timeout parameter is passed to the shutdown command then a graceful -shutdown will be performed. The server will be suspended, and will wait -in SUSPENDING state up to the specified number of seconds for all requests -to finish before shutting down. A timeout value of less than zero means -it will wait indefinitely.

-
-
-
-

9.2.6. Domain Mode

-
-

Domain mode has similar operations as standalone mode, however they can be -applied at global, server group, server and host levels:

-
-
-

Whole Domain

-
-
-

:suspend-servers(suspend-timeout=x)

-
-
-

:resume-servers

-
-
-

:stop-servers(suspend-timeout=x)

-
-
-

Server Group

-
-
-

/server-group=main-server-group:suspend-servers(suspend-timeout=x)

-
-
-

/server-group=main-server-group:resume-servers

-
-
-

/server-group=main-server-group:stop-servers(suspend-timeout=x)

-
-
-

Server

-
-
-

/host=primary/server-config=server-one:suspend(suspend-timeout=x)

-
-
-

/host=primary/server-config=server-one:resume

-
-
-

/host=primary/server-config=server-one:stop(suspend-timeout=x)

-
-
-

Host level

-
-
-

/host=primary:suspend-servers(suspend-timeout=x)

-
-
-

/host=primary:resume-servers

-
-
-

/host=primary:shutdown(suspend-timeout=x)

-
-
-

Note that even though the host controller itself is being shut down, the suspend-timeout attribute for the shutdown operation at host level is applied to the servers only and not to the host controller itself.

-
-
-
-

9.2.7. Graceful Shutdown via an OS Signal

-
-

If you use an OS signal like TERM to shut down your WildFly standalone server -process, e.g. via kill -15 <pid>, the WildFly server will shut down gracefully. -By default, the behavior will be analogous to a CLI shutdown --suspend-timeout=0 command; -that is the process will not wait in SUSPENDING state for in-flight requests to -complete before proceeding to SUSPENDED state and then shutting down. A different -timeout can be configured by setting the org.wildfly.sigterm.suspend.timeout -system property. The value of the property should be an integer indicating the maximum -number of seconds to wait for in-flight requests to complete. A value of -1 means -the server should wait indefinitely.

-
-
-

Graceful shutdown via an OS signal will not work if the server JVM is configured -to disable signal handling (i.e. with the -Xrs argument to java). It also won’t -work if the method used to terminate the process doesn’t result in a signal the -JVM can respond to (e.g. kill -9).

-
-
-

In a managed domain, Process Controller and Host Controller processes will not attempt -any sort of graceful shutdown in response to a signal. A domain mode server may, but -the proper way to control the lifecycle of a domain mode server process is via the -management API and its managing Host Controller, not via direct signals to the server -process.

-
-
-
-

9.2.8. Non-graceful Startup

-
-

By default, WildFly starts up gracefully, meaning that incoming requests are queued or cleanly rejected -until the server is ready to process them. In some instances, though, it may be desirable to allow the -server to begin to process requests at the earliest possible moment. One such example might be -when two deployed applications need to interact with one another during the deployment or -application startup. In one such scenario, Application A needs to make a REST request to -Application B to get information vital to its own startup. Under a graceful startup, the request -to Application B will block until the server is fully started. However, the server can’t fully -start, as Application A is waiting for data from Application B before its deploy/startup can -complete. In this situation, a deadlock occurs, and the server startup times out.

-
-
-

A non-graceful startup is intended to address this situation in that it will allow WildFly to -begin attempting to answer requests as soon as possible. In the scenario above, assuming -Application B has successfully deployed/started, Application A can also start immediately, as its -request will be fulfilled. Note, however, that a race condition can occur: if Application B is -not yet deployed (e.g., the deploy order is incorrect, or B has not finished starting), then -Application A may still fail to start since Application B is not available. WildFly users making -use of non-graceful startups must be aware of this and take steps to remedy those scenarios. With -a non-graceful startup, however, WildFly will no longer be the cause of a deployment failure in -such a configuration.

-
-
-

Some discussion here of how this relates to reloading and restarting, as well as to suspended starts, is -important. When reloading, the ApplicationServerService is stopped, and a new one started. It is equivalent -to if it was being started the first time: all the same stuff happens, but it happens faster because a lot of -classloading and static initialization doesn’t have to happen again. This includes honoring the value of -graceful-startup, so if the server was initially started non-gracefully, it will be reloaded in the same manner.

-
-
-

Restarting the server is similar. A restart means a new JVM, so all the initialization happens again, exactly -as it did on the first start. When restarting in domain mode, the Host Controller simply rereads the config -file and does the same thing it did the first time. In standalone, the restart is driven by standalone.[sh|ps1|bat]. -The running JVM exits with a specific exit code, which the script recognizes and starts a new server, using the -same parameters as the first start, so if you start a server non-gracefully, you will restart a server -non-gracefully.

-
-
-

Finally, there’s start-mode=suspend. In the event that an administrator specifies a suspended start as well as a -non-graceful start, the suspended start will "win". That is to say, the server will start in a suspended mode, -the graceful-start=false will be disregarded, and the server will log a message indicating that this is happening.

-
-
-
-
-

9.3. Starting and Stopping Servers in a Managed Domain

-
-

Starting a standalone server is done through the bin/standalone.sh -script. However in a managed domain server instances are managed by the -domain controller and need to be started through the management layer:

-
-
-

First of all, get to know which servers are configured on a particular -host:

-
-
-
-
[domain@localhost:9990 /] :read-children-names(child-type=host)
-{
-   "outcome" => "success",
-   "result" => ["local"]
-}
- 
- 
-[domain@localhost:9990 /] /host=local:read-children-names(child-type=server-config)
-{
-   "outcome" => "success",
-   "result" => [
-       "my-server",
-       "server-one",
-       "server-three"
-   ]
-}
-
-
-
-

Now that we know, that there are two servers configured on host " -local", we can go ahead and check their status:

-
-
-
-
[domain@localhost:9990 /] /host=local/server-config=server-one:read-resource(include-runtime=true)
-{
-   "outcome" => "success",
-   "result" => {
-       "auto-start" => true,
-       "group" => "main-server-group",
-       "interface" => undefined,
-       "name" => "server-one",
-       "path" => undefined,
-       "socket-binding-group" => undefined,
-       "socket-binding-port-offset" => undefined,
-       "status" => "STARTED",
-       "system-property" => undefined,
-       "jvm" => {"default" => undefined}
-   }
-}
-
-
-
-

You can change the server state through the " start" and " stop" -operations

-
-
-
-
[domain@localhost:9990 /] /host=local/server-config=server-one:stop
-{
-   "outcome" => "success",
-   "result" => "STOPPING"
-}
-
-
-
- - - - - -
- - -Navigating through the domain topology is much more simple when you use -the web interface. -
-
-
-
-

9.4. JVM settings

-
-

Configuration of the JVM settings is different for a managed domain and -a standalone server. In a managed domain, the domain controller -components are responsible for starting and stopping server processes and -hence determine the JVM settings. For a standalone server, it’s the -responsibility of the process that started the server (e.g. passing them -as command line arguments).

-
-
-

9.4.1. Managed Domain

-
-

In a managed domain the JVM settings can be declared at different -scopes: For a specific server group, for a host or for a particular -server. If not declared, the settings are inherited from the parent -scope. This allows you to customize or extend the JVM settings within -every layer.

-
-
-

Let’s take a look at the JVM declaration for a server group:

-
-
-
-
<server-groups>
-       <server-group name="main-server-group" profile="default">
-           <jvm name="default">
-               <heap size="64m" max-size="512m"/>
-           </jvm>
-           <socket-binding-group ref="standard-sockets"/>
-       </server-group>
-       <server-group name="other-server-group" profile="default">
-           <jvm name="default">
-               <heap size="64m" max-size="512m"/>
-           </jvm>
-           <socket-binding-group ref="standard-sockets"/>
-       </server-group>
-</server-groups>
-
-
-
-

(See domain/configuration/domain.xml )

-
-
-

In this example the server group "main-server-group" declares a heap -size of 64m and a maximum heap size of 512m. Any server that belongs -to this group will inherit these settings. You can change these settings -for the group as a whole, or a specific server or host:

-
-
-
-
<servers>
-       <server name="server-one" group="main-server-group" auto-start="true">
-           <jvm name="default"/>
-       </server>
-       <server name="server-two" group="main-server-group" auto-start="true">
-           <jvm name="default">
-               <heap size="64m" max-size="256m"/>
-           </jvm>
-           <socket-binding-group ref="standard-sockets" port-offset="150"/>
-       </server>
-       <server name="server-three" group="other-server-group" auto-start="false">
-           <socket-binding-group ref="standard-sockets" port-offset="250"/>
-       </server>
-</servers>
-
-
-
-

~(See domain/configuration/host.xml)~

-
-
-

In this case, server-two, belongs to the main-server-group and -inherits the JVM settings named default, but declares a lower maximum -heap size.

-
-
-
-
[domain@localhost:9999 /] /host=local/server-config=server-two/jvm=default:read-resource
-{
-   "outcome" => "success",
-   "result" => {
-       "heap-size" => "64m",
-       "max-heap-size" => "256m",
-   }
-}
-
-
-
-
Using filesystem locations as JVM options on domain mode
-
-

The Controlling filesystem locations with system properties section describes the available system properties associated with relevant WildFly file system paths. In addition to all the domain mode properties, the following server specific properties are also available for resolution as JVM options:

-
-
-
    -
  • -

    jboss.server.base.dir

    -
  • -
  • -

    jboss.server.log.dir

    -
  • -
  • -

    jboss.server.data.dir

    -
  • -
  • -

    jboss.server.temp.dir

    -
  • -
-
-
-

This ability is useful when you need to configure JVM settings without specifying a specific server name. For example, if you want to redirect the GC logging to a file to the default log server directory, you can configure the following JVM option at host level:

-
-
-
-
[domain@localhost:9990 /] /host=primary/jvm=default:add-jvm-option(jvm-option="-Xlog:gc:file=${jboss.server.log.dir}/gc.log")
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {"primary" => {"server-two" => {"response" => {
-        "outcome" => "success",
-        "response-headers" => {
-            "operation-requires-restart" => true,
-            "process-state" => "restart-required"
-        }
-    }}}}}}
-}
-
-
-
-
-
-

9.4.2. Standalone Server

-
-

For a standalone sever you have to pass in the JVM settings either as -command line arguments when executing the -$JBOSS_HOME/bin/standalone.sh script, or by declaring them in -$JBOSS_HOME/bin/standalone.conf. (For Windows users, the script to -execute is %JBOSS_HOME%/bin/standalone.bat while the JVM settings can -be declared in %JBOSS_HOME%/bin/standalone.conf.bat.)

-
-
-
-
-

9.5. Audit logging

-
-

WildFly comes with audit logging built in for management operations -affecting the management model. By default it is turned off. The -information is output as JSON records.

-
-
-

The default configuration of audit logging in standalone.xml looks as -follows:

-
-
-
-
    <management>
-        <audit-log>
-            <formatters>
-                <json-formatter name="json-formatter"/>
-            </formatters>
-            <handlers>
-                <file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
-            </handlers>
-            <logger log-boot="true" log-read-only="true" enabled="false">
-                <handlers>
-                    <handler name="file"/>
-                </handlers>
-            </logger>
-        </audit-log>
-...
-
-
-
-

Looking at this via the CLI it looks like

-
-
-
-
[standalone@localhost:9990 /] /core-service=management/access=audit:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "file-handler" => {"file" => {
-            "formatter" => "json-formatter",
-            "max-failure-count" => 10,
-            "path" => "audit-log.log",
-            "relative-to" => "jboss.server.data.dir"
-        }},
-        "json-formatter" => {"json-formatter" => {
-            "compact" => false,
-            "date-format" => "yyyy-MM-dd HH:mm:ss",
-            "date-separator" => " - ",
-            "escape-control-characters" => false,
-            "escape-new-line" => false,
-            "include-date" => true
-        }},
-        "logger" => {"audit-log" => {
-            "enabled" => false,
-            "log-boot" => true,
-            "log-read-only" => false,
-            "handler" => {"file" => {}}
-        }},
-        "syslog-handler" => undefined
-    }
-}
-
-
-
-

To enable it via CLI you need just

-
-
-
-
[standalone@localhost:9990 /] /core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)
-{"outcome" => "success"}
-
-
-
-

Audit data are stored in standalone/data/audit-log.log.

-
-
- - - - - -
- - -The audit logging subsystem has a lot of internal dependencies, and it -logs operations changing, enabling and disabling its components. When -configuring or changing things at runtime it is a good idea to make -these changes as part of a CLI batch. For example if you are adding a -syslog handler you need to add the handler and its information as one -step. Similarly if you are using a file handler, and want to change its -path and relative-to attributes, that needs to happen as one step. -
-
-
-

9.5.1. JSON Formatter

-
-

The first thing that needs configuring is the formatter, we currently -support outputting log records as JSON. You can define several -formatters, for use with different handlers. A log record has the -following format, and it is the formatter’s job to format the data -presented:

-
-
-
-
2013-08-12 11:01:12 - {
-    "type" : "core",
-    "r/o" : false,
-    "booting" : false,
-    "version" : "8.0.0.Alpha4",
-    "user" : "$local",
-    "domainUUID" : null,
-    "access" : "NATIVE",
-    "remote-address" : "127.0.0.1/127.0.0.1",
-    "success" : true,
-    "ops" : [JMX|WFLY8:JMX subsystem configuration],
-        "operation" : "write-attribute",
-        "name" : "enabled",
-        "value" : true,
-        "operation-headers" : {"caller-type" : "user"}
-    }]
-}
-
-
-
-

It includes an optional timestamp and then the following information in -the json record

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Field nameDescription

type

This can have the values core, meaning it is a management -operation, or jmx meaning it comes from the jmx subsystem (see the jmx -subsystem for configuration of the jmx subsystem’s audit logging)

r/o

true if the operation does not change the management model, false -otherwise

booting

true if the operation was executed during the bootup process, -false if it was executed once the server is up and running

version

The version number of the WildFly instance

user

The username of the authenticated user. In this case the -operation has been logged via the CLI on the same machine as the running -server, so the special $local user is used

domainUUID

An ID to link together all operations as they are -propagated from the Domain Controller to its servers, secondary Host -Controllers, and secondary Host Controller servers

access

This can have one of the following values:*NATIVE - The -operation came in through the native management interface, for example -the CLI*HTTP - The operation came in through the domain HTTP interface, -for example the admin console*JMX - The operation came in through the -JMX subsystem. See JMX for how to configure audit logging for JMX.

remote-address

The address of the client executing this operation

success

true if the operation succeeded, false if it was rolled back

ops

The operations being executed. This is a list of the operations -serialized to JSON. At boot this will be all the operations resulting -from parsing the xml. Once booted the list will typically just contain a -single entry

-
-

The json formatter resource has the following attributes:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

include-date

Boolan toggling whether or not to include the timestamp -in the formatted log records

date-separator

A string containing characters to separate the date and -the rest of the formatted log message. Will be ignored if -include-date=false

date-format

The date format to use for the timestamp as understood by -java.text.SimpleDateFormat. Will be ignored if include-date=false

compact

If true will format the JSON on one line. There may still be -values containing new lines, so if having the whole record on one line -is important, set escape-new-line or escape-control-characters to true

escape-control-characters

If true it will escape all control -characters (ascii entries with a decimal value < 32) with the ascii code -in octal, e.g. a new line becomes '#012'. If this is true, it will -override escape-new-line=false

escape-new-line

If true it will escape all new lines with the ascii -code in octal, e.g. "#012".

-
-
-

9.5.2. Handlers

-
-

A handler is responsible for taking the formatted data and logging it to -a location. There are currently two types of handlers, File and Syslog. -You can configure several of each type of handler and use them to log -information.

-
-
-
File handler
-
-

The file handlers log the audit log records to a file on the server. The -attributes for the file handler are

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionRead Only

formatter

The name of a JSON formatter to use to format the log -records

false

path

The path of the audit log file

false

relative-to

The name of another previously named path, or of one of -the standard paths provided by the system. If relative-to is provided, -the value of the path attribute is treated as relative to the path -specified by this attribute

false

failure-count

The number of logging failures since the handler was -initialized

true

max-failure-count

The maximum number of logging failures before -disabling this handler

false

disabled-due-to-failure

true if this handler was disabled due to -logging failures

true

-
-

In our standard configuration path=audit-log.log and -relative-to=jboss.server.data.dir, typically this will be -$JBOSS_HOME/standalone/data/audit-log.log

-
-
-
-
Syslog handler
-
-

The default configuration does not have syslog audit logging set up. -Syslog is a better choice for audit logging since you can log to a -remote syslog server, and secure the authentication to happen over TLS -with client certificate authentication. Syslog servers vary a lot in -their capabilities so not all settings in this section apply to all -syslog servers. We have tested with rsyslog.

-
-
-

The address for the syslog handler is -/core-service=management/access=audit/syslog-handler=* and just like -file handlers you can add as many syslog entries as you like. The syslog -handler resources reference the main RFC’s for syslog a fair bit, for -reference they can be found at:
-* http://www.ietf.org/rfc/rfc3164.txt
-* http://www.ietf.org/rfc/rfc5424.txt
-* http://www.ietf.org/rfc/rfc6587.txt

-
-
-

The syslog handler resource has the following attributes:

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
formatterThe name of a JSON formatter to use to format the log -recordsfalse

failure-count

The number of logging failures since the handler was -initialized

true

max-failure-count

The maximum number of logging failures before -disabling this handler

false

disabled-due-to-failure

true if this handler was disabled due to -logging failures

true

syslog-format

Whether to set the syslog format to the one specified in -RFC-5424 or RFC-3164

false

max-length

The maximum length in bytes a log message, including the -header, is allowed to be. If undefined, it will default to 1024 bytes if -the syslog-format is RFC3164, or 2048 bytes if the syslog-format is -RFC5424.

false

truncate

Whether or not a message, including the header, should -truncate the message if the length in bytes is greater than the maximum -length. If set to false messages will be split and sent with the same -header values

false

-
-

When adding a syslog handler you also need to add the protocol it will -use to communicate with the syslog server. The valid choices for -protocol are UDP, TCP and TLS. The protocol must be added at the -same time as you add the syslog handler, or it will fail. Also, you can -only add one protocol for the handler.

-
-
-
UDP
-
-

Configures the handler to use UDP to communicate with the syslog server. -The address of the UDP resource is -/core-service=management/access=audit/syslog-handler=*/protocol=udp. -The attributes of the UDP resource are:

-
- ---- - - - - - - - - - - - - - - - - -
AttributeDescription

host

The host of the syslog server for the udp requests

port

The port of the syslog server listening for the udp requests

-
-
-
TCP
-
-

Configures the handler to use TCP to communicate with the syslog server. -The address of the TCP resource is -/core-service=management/access=audit/syslog-handler=*/protocol=tcp. -The attributes of the TCP resource are:

-
- ---- - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

host

The host of the syslog server for the tcp requests

port

The port of the syslog server listening for the tcp requests

message-transfer

The message transfer setting as described in section -3.4 of RFC-6587. This can either be OCTET_COUNTING as described in -section 3.4.1 of RFC-6587, or NON_TRANSPARENT_FRAMING as described in -section 3.4.1 of RFC-6587

-
-
-
TLS
-
-

Configures the handler to use TLC to communicate securely with the -syslog server. The address of the TLS resource is -/core-service=management/access=audit/syslog-handler=*/protocol=tls. -The attributes of the TLS resource are the same as for TCP:

-
- ---- - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

host

The host of the syslog server for the tls requests

port

The port of the syslog server listening for the tls requests

message-transfer

The message transfer setting as described in section -3.4 of RFC-6587. This can either be OCTET_COUNTING as described in -section 3.4.1 of RFC-6587, or NON_TRANSPARENT_FRAMING as described in -section 3.4.1 of RFC-6587

-
-

If the syslog server’s TLS certificate is not signed by a certificate -signing authority, you will need to set up a truststore to trust the -certificate. The resource for the trust store is a child of the TLS -resource, and the full address is -/core-service=management/access=audit/syslog-handler=*/protocol=tls/authentication=truststore. -The attributes of the truststore resource are:

-
- ---- - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

keystore-password

The password for the truststore

keystore-path

The path of the truststore

keystore-relative-to

The name of another previously named path, or of -one of the standard paths provided by the system. If -keystore-relative-to is provided, the value of the keystore-path -attribute is treated as relative to the path specified by this attribute

-
-TLS with Client certificate authentication. -
-

If you have set up the syslog server to require client certificate -authentication, when creating your handler you will also need to set up -a client certificate store containing the certificate to be presented to -the syslog server. The address of the client certificate store resource -is -/core-service=management/access=audit/syslog-handler=*/protocol=tls/authentication=client-certificate-store -and its attributes are:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

keystore-password

The password for the keystore

key-password

The password for the keystore key

keystore-path

The path of the keystore

keystore-relative-to

The name of another previously named path, or of -one of the standard paths provided by the system. If -keystore-relative-to is provided, the value of the keystore-path -attribute is treated as relative to the path specified by this attribute

-
-
-
-
-
-

9.5.3. Logger configuration

-
-

The final part that needs configuring is the logger for the management -operations. This references one or more handlers and is configured at -/core-service=management/access=audit/logger=audit-log. The attributes -for this resource are:

-
- ---- - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

enabled

true to enable logging of the management operations

log-boot

true to log the management operations when booting the -server, false otherwise

log-read-only

If true all operations will be audit logged, if false -only operations that change the model will be logged

-
-

Then which handlers are used to log the management operations are -configured as handler=* children of the logger.

-
-
-
-

9.5.4. Domain Mode (host specific configuration)

-
-

In domain mode audit logging is configured for each host in its -host.xml file. This means that when connecting to the DC, the -configuration of the audit logging is under the host’s entry, e.g. here -is the default configuration:

-
-
-
-
[domain@localhost:9990 /] /host=primary/core-service=management/access=audit:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "file-handler" => {
-            "host-file" => {
-                "formatter" => "json-formatter",
-                "max-failure-count" => 10,
-                "path" => "audit-log.log",
-                "relative-to" => "jboss.domain.data.dir"
-            },
-            "server-file" => {
-                "formatter" => "json-formatter",
-                "max-failure-count" => 10,
-                "path" => "audit-log.log",
-                "relative-to" => "jboss.server.data.dir"
-            }
-        },
-        "json-formatter" => {"json-formatter" => {
-            "compact" => false,
-            "date-format" => "yyyy-MM-dd HH:mm:ss",
-            "date-separator" => " - ",
-            "escape-control-characters" => false,
-            "escape-new-line" => false,
-            "include-date" => true
-        }},
-        "logger" => {"audit-log" => {
-            "enabled" => false,
-            "log-boot" => true,
-            "log-read-only" => false,
-            "handler" => {"host-file" => {}}
-        }},
-        "server-logger" => {"audit-log" => {
-            "enabled" => false,
-            "log-boot" => true,
-            "log-read-only" => false,
-            "handler" => {"server-file" => {}}
-        }},
-        "syslog-handler" => undefined
-    }
-}
-
-
-
-

We now have two file handlers, one called host-file used to configure -the file to log management operations on the host, and one called -server-file used to log management operations executed on the servers. -Then logger=audit-log is used to configure the logger for the host -controller, referencing the host-file handler. -server-logger=audit-log is used to configure the logger for the -managed servers, referencing the server-file handler. The attributes -for server-logger=audit-log are the same as for -server-logger=audit-log in the previous section. Having the host -controller and server loggers configured independently means we can -control audit logging for managed servers and the host controller -independently.

-
-
-
-
-

9.6. Canceling Management Operations

-
-

WildFly includes the ability to use the CLI to cancel management -requests that are not proceeding normally.

-
-
-

9.6.1. The cancel-non-progressing-operation operation

-
-

The cancel-non-progressing-operation operation instructs the target -process to find any operation that isn’t proceeding normally and cancel -it.

-
-
-

On a standalone server:

-
-
-
-
[standalone@localhost:9990 /] /core-service=management/service=management-operations:cancel-non-progressing-operation
-{
-    "outcome" => "success",
-    "result" => "-1155777943"
-}
-
-
-
-

The result value is an internal identification number for the operation -that was cancelled.

-
-
-

On a managed domain host controller, the equivalent resource is in the -host=<hostname> portion of the management resource tree:

-
-
-
-
[domain@localhost:9990 /] /host=host-a/core-service=management/service=management-operations:cancel-non-progressing-operation
-{
-    "outcome" => "success",
-    "result" => "2156877946"
-}
-
-
-
-

An operation can be cancelled on an individual managed domain server as -well:

-
-
-
-
[domain@localhost:9990 /] /host=host-a/server=server-one/core-service=management/service=management-operations:cancel-non-progressing-operation
-{
-    "outcome" => "success",
-    "result" => "6497786512"
-}
-
-
-
-

An operation is considered to be not proceeding normally if it has been -executing with the exclusive operation lock held for longer than 15 -seconds. Read-only operations do not acquire the exclusive operation -lock, so this operation will not cancel read-only operations. Operations -blocking waiting for another operation to release the exclusive lock -will also not be cancelled.

-
-
-

If there isn’t any operation that is failing to proceed normally, there -will be a failure response:

-
-
-
-
[standalone@localhost:9990 /] /core-service=management/service=management-operations:cancel-non-progressing-operation
-{
-    "outcome" => "failed",
-    "failure-description" => "WFLYDM0089: No operation was found that has been holding the operation execution write lock for long than [15] seconds",
-    "rolled-back" => true
-}
-
-
-
-
-

9.6.2. The find-non-progressing-operation operation

-
-

To simply learn the id of an operation that isn’t proceeding normally, -but not cancel it, use the find-non-progressing-operation operation:

-
-
-
-
[standalone@localhost:9990 /] /core-service=management/service=management-operations:find-non-progressing-operation
-{
-    "outcome" => "success",
-    "result" => "-1155777943"
-}
-
-
-
-

If there is no non-progressing operation, the outcome will still be -success but the result will be undefined.

-
-
-

Once the id of the operation is known, the management resource for the -operation can be examined to learn more about its status.

-
-
-
-

9.6.3. Examining the status of an active operation

-
-

There is a management resource for any currently executing operation -that can be queried:

-
-
-
-
[standalone@localhost:9990 /] /core-service=management/service=management-operations/active-operation=-1155777943:read-resource(include-runtime=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "access-mechanism" => "undefined",
-        "address" => [
-            ("deployment" => "example")
-        ],
-        "caller-thread" => "management-handler-thread - 24",
-        "cancelled" => false,
-        "exclusive-running-time" => 101918273645L,
-        "execution-status" => "awaiting-stability",
-        "operation" => "deploy",
-        "running-time" => 101918279999L
-    }
-}
-
-
-
-

The response includes the following attributes:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldMeaning

access-mechanism

The mechanism used to submit a request to the server. -NATIVE, JMX, HTTP

address

The address of the resource targeted by the operation. The -value in the final element of the address will be '<hidden>' if the -caller is not authorized to address the operation’s target resource.

caller-thread

The name of the thread that is executing the operation.

cancelled

Whether the operation has been cancelled.

exclusive-status

Amount of time in nanoseconds the operation has -been executing with the exclusive operation execution lock held, or -1 -if the operation does not hold the exclusive execution lock.

execution-status

The current activity of the operation. See below for -details.

operation

The name of the operation, or '<hidden>' if the caller is -not authorized to address the operation’s target resource.

running-time

Amount of time the operation has been executing, in -nanoseconds.

-
-

The following are the values for the exclusive-running-time attribute:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning

executing

The caller thread is actively executing

awaiting-other-operation

The caller thread is blocking waiting for -another operation to release the exclusive execution lock

awaiting-stability

The caller thread has made changes to the service -container and is waiting for the service container to stabilize

completing

The operation is committed and is completing execution

rolling-back

The operation is rolling back

-
-

All currently executing operations can be viewed in one request using -the read-children-resources operation:

-
-
-
-
[standalone@localhost:9990 /] /core-service=management/service=management-operations:read-children-resources(child-type=active-operation)
-{
-    "outcome" => "success",
-    "result" => {"-1155777943" => {
-        "access-mechanism" => "undefined",
-        "address" => [
-            ("deployment" => "example")
-        ],
-        "caller-thread" => "management-handler-thread - 24",
-        "cancelled" => false,
-        "exclusive-running-time" => 101918273645L,
-        "execution-status" => "awaiting-stability",
-        "operation" => "deploy",
-        "running-time" => 101918279999L
-    },
-    {"-1246693202" => {
-        "access-mechanism" => "undefined",
-        "address" => [
-            ("core-service" => "management"),
-            ("service" => "management-operations")
-        ],
-        "caller-thread" => "management-handler-thread - 30",
-        "cancelled" => false,
-        "exclusive-running-time" => -1L,
-        "execution-status" => "executing",
-        "operation" => "read-children-resources",
-        "running-time" => 3356000L
-    }}
-}
-
-
-
-
-

9.6.4. Canceling a specific operation

-
-

The cancel-non-progressing-operation operation is a convenience -operation for identifying and canceling an operation. However, an -administrator can examine the active-operation resources to identify any -operation, and then directly cancel it by invoking the cancel -operation on the resource for the desired operation.

-
-
-
-
[standalone@localhost:9990 /] /core-service=management/service=management-operations/active-operation=-1155777943:cancel
-{
-    "outcome" => "success",
-    "result" => undefined
-}
-
-
-
-
-

9.6.5. Controlling operation blocking time

-
-

As an operation executes, the execution thread may block at various -points, particularly while waiting for the service container to -stabilize following any changes. Since an operation may be holding the -exclusive execution lock while blocking, in WildFly execution behavior -was changed to ensure that blocking will eventually time out, resulting -in roll back of the operation.

-
-
-

The default blocking timeout is 300 seconds. This is intentionally long, -as the idea is to only trigger a timeout when something has definitely -gone wrong with the operation, without any false positives.

-
-
-

An administrator can control the blocking timeout for an individual -operation by using the blocking-timeout operation header. For example, -if a particular deployment is known to take an extremely long time to -deploy, the default 300 second timeout could be increased:

-
-
-
-
[standalone@localhost:9990 /] deploy /tmp/mega.war --headers={blocking-timeout=450}
-
-
-
-

Note the blocking timeout is not a guaranteed maximum execution time -for an operation. If it only a timeout that will be enforced at various -points during operation execution.

-
-
-
-
-

9.7. Configuration file history

-
-

The management operations may modify the model. When this occurs the xml -backing the model is written out again reflecting the latest changes. In -addition a full history of the file is maintained. The history of the -file goes in a separate directory under the configuration directory.

-
-
-

As mentioned in Command line parameters the default -configuration file can be selected using a command-line parameter. For a -standalone server instance the history of the active standalone.xml is -kept in jboss.server.config.dir/standalone_xml_history (See -Command line parameters#standalone_system_properties -for more details). For a domain the active domain.xml and host.xml -histories are kept in jboss.domain.config.dir/domain_xml_history and -jboss.domain.config.dir/host_xml_history.

-
-
-

The rest of this section will only discuss the history for -standalone.xml. The concepts are exactly the same for domain.xml and -host.xml.

-
-
-

Within standalone_xml_history itself following a successful first time -boot we end up with three new files:

-
-
-
    -
  • -

    standalone.initial.xml - This contains the original configuration -that was used the first time we successfully booted. This file will -never be overwritten. You may of course delete the history directory and -any files in it at any stage.

    -
  • -
  • -

    standalone.boot.xml - This contains the original configuration that -was used for the last successful boot of the server. This gets -overwritten every time we boot the server successfully.

    -
  • -
  • -

    standalone.last.xml - At this stage the contents will be identical -to standalone.boot.xml. This file gets overwritten each time the -server successfully writes the configuration, if there was an unexpected -failure writing the configuration this file is the last known successful -write.

    -
  • -
-
-
-

standalone_xml_history contains a directory called current which -should be empty. Now if we execute a management operation that modifies -the model, for example adding a new system property using the CLI:

-
-
-
-
[standalone@localhost:9990 /] /system-property=test:add(value="test123")
-{"outcome" => "success"}
-
-
-
-

What happens is:

-
-
-
    -
  • -

    The original configuration file is backed up to -standalone_xml_history/current/standalone.v1.xml. The next change to -the model would result in a file called standalone.v2.xml etc. The 100 -most recent of these files are kept.

    -
  • -
  • -

    The change is applied to the original configuration file

    -
  • -
  • -

    The changed original configuration file is copied to -standalone.last.xml

    -
  • -
-
-
-

When restarting the server, any existing -standalone_xml_history/current directory is moved to a new timestamped -folder within the standalone_xml_history, and a new current folder -is created. These timestamped folders are kept for 30 days.

-
-
-

9.7.1. Snapshots

-
-

In addition to the backups taken by the server as described above you -can manually take snapshots which will be stored in the snapshot -folder under the _xml_history folder, the automatic backups described -above are subject to automatic house keeping so will eventually be -automatically removed, the snapshots on the other hand can be entirely -managed by the administrator.

-
-
-

You may also take your own snapshots using the CLI:

-
-
-
-
[standalone@localhost:9990 /] :take-snapshot
-{
-    "outcome" => "success",
-    "result" => {"name" => "/Users/kabir/wildfly/standalone/configuration/standalone_xml_history/snapshot/20110630-172258657standalone.xml"}
-}
-
-
-
-

You can also use the CLI to list all the snapshots

-
-
-
-
[standalone@localhost:9990 /] :list-snapshots
-{
-    "outcome" => "success",
-    "result" => {
-        "directory" => "/Users/kabir/wildfly/standalone/configuration/standalone_xml_history/snapshot",
-        "names" => [
-            "20110630-165714239standalone.xml",
-            "20110630-165821795standalone.xml",
-            "20110630-170113581standalone.xml",
-            "20110630-171411463standalone.xml",
-            "20110630-171908397standalone.xml",
-            "20110630-172258657standalone.xml"
-        ]
-    }
-}
-
-
-
-

To delete a particular snapshot:

-
-
-
-
[standalone@localhost:9990 /] :delete-snapshot(name="20110630-165714239standalone.xml")
-{"outcome" => "success"}
-
-
-
-

and to delete all snapshots:

-
-
-
-
[standalone@localhost:9990 /] :delete-snapshot(name="all")
-{"outcome" => "success"}
-
-
-
-

In domain mode executing the snapshot operations against the root node -will work against the domain model. To do this for a host model you need -to navigate to the host in question:

-
-
-
-
[domain@localhost:9990 /] /host=primary:list-snapshots
-{
-    "outcome" => "success",
-    "result" => {
-        "domain-results" => {"step-1" => {
-            "directory" => "/Users/kabir/wildfly/domain/configuration/host_xml_history/snapshot",
-            "names" => [
-                "20110630-141129571host.xml",
-                "20110630-172522225host.xml"
-            ]
-        }},
-        "server-operations" => undefined
-    }
-}
-
-
-
-
-

9.7.2. Subsequent Starts

-
-

For subsequent server starts it may be desirable to take the state of -the server back to one of the previously known states, for a number of -items an abbreviated reverence to the file can be used:

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AbbreviationParameterDescription

initial

--server-config=initial

This will start the server using the -initial configuration first used to start the server.

boot

--server-config=boot

This will use the configuration from the -last successful boot of the server.

last

--server-config=last

This will start the server using the -configuration backed up from the last successful save.

v?

--server-config=v?

This will server the _xml_history/current -folder for the configuration where ? is the number of the backup to use.

-?

--server-config=-?

The server will be started after searching the -snapshot folder for the configuration which matches this prefix.

-
-

In addition to this the --server-config parameter can always be used -to specify a configuration relative to the jboss.server.config.dir and -finally if no matching configuration is found an attempt to locate the -configuration as an absolute path will be made.

-
-
-
-
-

9.8. Git Configuration file history

-
-

To enhance the initial configuration file history we have now a native Git support to manage the configuration history. This feature goes a little farther than the initial configuration file history in that it also manages content repository content and all the configuration files (such as properties). This feature only work for standalone servers using the default directory layout.

-
-
-

As mentioned in Command line parameters we support the usage of a remote Git repository to pull the configuration from or create or use a local Git repository. -In fact if a .git directory exists under jboss.server.base.dir then using Git for managing configuration files will be automatically activated. -Each modification of the content or the configuration will result in a new commit when the operation is successful and there are changes to commit. If there is an authenticated user then it will be stored as the author of the commit. -Please note that this is a real Git repository so using a native Git client you can manipulate it.

-
-
-

Now if we execute a management operation that modifies -the model, for example adding a new system property using the CLI:

-
-
-
-
[standalone@localhost:9990 /] /system-property=test:add(value="test123")
-{"outcome" => "success"}
-
-
-
-

What happens is:

-
-
-
    -
  • -

    The change is applied to the configuration file.

    -
  • -
  • -

    The configuration file is added to a new commit.

    -
  • -
-
-
-

9.8.1. Local Git Repository

-
-

Starting the server with the option --git-repo=local will initiate a Git repository if none exists or use the current Git repository. When initiating the local Git repository a .gitignore file will be created and added to the initial commit.

-
-
-

If a --git-branch parameter is added then the repository will be checked out on the supplied branch. Please note that the branch will not be automatically created and must exist in the repository already. By default, if no parameter is specified, the branch master will be used.

-
-
-
-

9.8.2. Remote Git Repository

-
-

If a remote Git repository is provided then the server will try to pull from it at boot. If this is the first time we are pulling then local files will be deleted to avoid the pull to fail because of the need to overwrite those existing files. -The parameter for --git-repo can be a URL or a remote alias provided you have manually added it to the local git configuration.

-
-
-

If a --git-branch parameter is added then the branch will be pulled, otherwise it will default to master.

-
-
-

For example this is an elytron configuration file that you could use to connect to GitHub via the --git-auth parameter:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <authentication-rules>
-            <rule use-configuration="test-login">
-            </rule>
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="test-login">
-                <sasl-mechanism-selector selector="BASIC" />
-                <set-user-name name="ehsavoie" />
-                <credentials>
-                    <clear-password password="my_api_key" />
-                </credentials>
-                <set-mechanism-realm name="testRealm" />
-            </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-

Sample command line to start the server using the standalone-full.xml file pulled from Github and being authenticated via the Elytron configuration file github-wildfly-config.xml:

-
-
-
-
./standalone.sh --git-repo=https://github.com/wildfly/wildfly-config.git --git-auth=file:///home/ehsavoie/tmp/github-wildfly-config.xml -c standalone-full.xml
-
-
-
-
-

9.8.3. Snapshots

-
-

In addition to the commits taken by the server as described above you -can manually take snapshots which will be stored as tags in the Git repository. -You can choose the tag name and the commit message attached to this tag.

-
-
-

You may also take your own snapshots using the CLI:

-
-
-
-
[standalone@localhost:9990 /] :take-snapshot(name="snapshot", comment="1st snapshot")
-{
-    "outcome" => "success",
-    "result" => "1st snapshot"
-}
-
-
-
-

You can also use the CLI to list all the snapshots

-
-
-
-
[standalone@localhost:9990 /] :list-snapshots
-{
-    "outcome" => "success",
-    "result" => {
-        "directory" => "",
-        "names" => [
-            "snapshot : 1st snapshot",
-            "refs/tags/snapshot",
-            "snapshot2 : 2nd snapshot",
-            "refs/tags/snapshot2"
-        ]
-    }
-}
-
-
-
-

To delete a particular snapshot:

-
-
-
-
[standalone@localhost:9990 /] :delete-snapshot(name="snapshot2")
-{"outcome" => "success"}
-
-
-
-
-

9.8.4. Remote push

-
-

You may need to push your repository changes to a remote repository so you can share them.

-
-
-
-
[standalone@localhost:9990 /] :publish-configuration(location="origin")
-{"outcome" => "success"}
-
-
-
-
-

9.8.5. SSH Authentication

-
-

Users may also connect to an SSH git server. In order to connect to any SSH git server to manage your configuration file history, you must use an Elytron configuration -file to specify your SSH credentials. The following example shows how to specify an SSH url and a wildfly-config.xml file -containing SSH credentials:

-
-
-
-
./standalone.sh --git-repo=git@github.com:wildfly/wildfly-config.git --git-auth=file:///home/user/github-wildfly-config.xml
-
-
-
-

There are a number of ways to specify your SSH credentials in the wildfly-config.xml file:

-
-
-
SSH Key Location Credential
-
-

It is possible to reference a file containing your SSH keys as follows:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-    <authentication-client xmlns="urn:elytron:client:1.6">
-        <authentication-rules>
-            <rule use-configuration="test-login">
-            </rule>
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="test-login">
-                <credentials>
-                    <ssh-credential ssh-directory="/home/user/git-persistence/" private-key-file="id_ec_test" known-hosts-file="known_hosts">
-                        <clear-password password="secret"/>
-                    </ssh-private-key>
-                </credentials>
-            </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-

This configuration indicates that the private key to be used for SSH authentication is in the file id_ec_test in the -directory /home/user/git-persistence and the passphrase "secret" is needed to decrypt the key.

-
-
-

The ssh-credential accepts the following attributes:

-
-
-
    -
  • -

    ssh-directory - the path to the directory containing the private key file and the known hosts file. The default value -is [user.home]/.ssh.

    -
  • -
  • -

    private-key-file - the name of the file containing the private key. The default private key file names used are: id_rsa, -id_dsa, and id_ecdsa.

    -
  • -
  • -

    known-hosts-file - the name of the file containing the known SSH hosts you trust. The default value is known_hosts

    -
  • -
-
-
-

One of the following child elements may also be used to specify the passphrase to be used to decrypt the private key (if applicable):

-
-
-
-
<ssh-credential ...>
-    <credential-store-reference store="..." alias="..." clear-text="..." />
-    <clear-password password="..." />
-    <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-</ssh-credential>
-
-
-
-
-
Key Pair Credential
-
-

It is also possible to specify your SSH credentials as a KeyPairCredential as follows:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-    <authentication-client xmlns="urn:elytron:client:1.6">
-        <authentication-rules>
-            <rule use-configuration="test-login">
-            </rule>
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="test-login">
-                <credentials>
-                    <key-pair>
-                        <openssh-private-key pem="-----BEGIN OPENSSH PRIVATE KEY-----
-                        b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCdRswttV
-                        UNQ6nKb6ojozTGAAAAEAAAAAEAAABoAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlz
-                        dHAyNTYAAABBBAKxnsRT7n6qJLKoD3mFfAvcH5ZFUyTzJVW8t60pNgNaXO4q5S4qL9yCCZ
-                        cKyg6QtVgRuVxkUSseuR3fiubyTnkAAADQq3vrkvuSfm4n345STr/i/29FZEFUd0qD++B2
-                        ZoWGPKU/xzvxH7S2GxREb5oXcIYO889jY6mdZT8LZm6ZZig3rqoEAqdPyllHmEadb7hY+y
-                        jwcQ4Wr1ekGgVwNHCNu2in3cYXxbrYGMHc33WmdNrbGRDUzK+EEUM2cwUiM7Pkrw5s88Ff
-                        IWI0V+567Ob9LxxIUO/QvSbKMJGbMM4jZ1V9V2Ti/GziGJ107CBudZr/7wNwxIK86BBAEg
-                        hfnrhYBIaOLrtP8R+96i8iu4iZAvcIbQ==
-                        -----END OPENSSH PRIVATE KEY-----">
-                            <clear-password password="secret"/>
-                        </openssh-private-key>
-                    </key-pair>
-                </credentials>
-            </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-

Along with the key-pair credential, if your known SSH hosts are not in ~/.ssh/known_hosts, you should specify an ssh-credential -with the ssh-directory and known-hosts-file attributes defined to specify the location and name of your known hosts file.

-
-
-

When specifying keys in OpenSSH format, it is only necessary to specify the private key and the public key will be parsed -from the private key string. When specifying key pairs in PKCS format, it is necessary to specify both the private and -public keys using the following elements:

-
-
-
-
<key-pair>
-    <private-key-pem>-----BEGIN PRIVATE KEY-----
-                     MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgj+ToYNaHz/pISg/Z
-                     I9BjdhcTre/SJpIxASY19XtOV1ehRANCAASngcxUTBf2atGC5lQWCupsQGRNwwnK
-                     6Ww9Xt37SmaHv0bX5n1KnsAal0ykJVKZsD0Z09jVF95jL6udwaKpWQwb
-                     -----END PRIVATE KEY-----</private-key>
-    <public-key-pem>-----BEGIN PUBLIC KEY-----
-                     MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEp4HMVEwX9mrRguZUFgrqbEBkTcMJ
-                     yulsPV7d+0pmh79G1+Z9Sp7AGpdMpCVSmbA9GdPY1RfeYy+rncGiqVkMGw==
-                     -----END PUBLIC KEY-----</public-key>
-</key-pair>
-
-
-
-

When using a key pair credential in OpenSSH format, it is also possible to specify a passphrase to be used to decrypt -the private key:

-
-
-
-
<openssh-private-key pem="...">
-    <credential-store-reference store="..." alias="..." clear-text="..." />
-    <clear-password password="..." />
-    <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-</ssh-private-key-file>
-
-
-
-

When using PKCS formatted keys, the keys should not be encrypted with a passphrase

-
-
-
-
Credential Store Reference
-
-

It is possible to specify your SSH credentials as a reference to a credential store entry. -See: Adding a Credential -to a credential store and Referencing Credentials -stored in a credential store.

-
-
-
-
-
-

9.9. YAML Configuration file

-
-

A common way to manage WildFly installations over time is to start with a standard configuration file (e.g. the out-of-the-box standalone.xml file that comes with each WildFly release) and then apply installation specific customizations to it (e.g. add datasource resources and Elytron security realm resources to integrate with the company’s own services). As the standard configuration file evolves over time (with new releases) the goal is to efficiently re-apply the installation specific customizations. Users have several ways to apply their customizations: edit the XML manually or with XML manipulation tools (neither of which is recommended), create jboss-cli scripts that you can run on each upgrade, or use WildFly’s YAML configuration file feature.

-
-
-

With the YAML configuration file approach, you provide one or more YAML files that specify the resources that you want WildFly to add to its running configuration, along with any configuration attribute values that should differ from what’s in standalone.xml. Using YAML files has advantages over using CLI scripts:

-
-
-
    -
  • -

    CLI scripts can be tricky to write as they usually aren’t idempotent. If you run a script that adds a datasource, that datasource is now in the standalone.xml file, so if you run the script again, it will fail due to attempting to add an existing resource. This can be worked around by using the --read-ony-server-config command line flag instead of the usual -c / --server-config. Or you can write more complex CLI scripts that check whether resources already exist before attempting to add them. Both of these approaches can work, but they can be tricky to do correctly. The YAML configuration file approach is idempotent. The WildFly server reads the YAML at boot and updates its running configuration, but it does not update the standalone.xml file, so the same thing can be done repeatedly.

    -
  • -
  • -

    Applying a CLI script usually involves launching a separate Java process (the WildFly CLI). Needing to do this can be a poor fit for configuration customization workflows. With the YAML configuration file approach, the WildFly server process itself process the YAML as part of boot.

    -
  • -
-
-
-

9.9.1. Starting with YAML files

-
-

Using the --yaml or -y argument you can pass a list of YAML files. Each path needs to be separated by the File.pathSeparator. It is a semicolon (;) on Windows and colon (:) on Mac and Unix-based operating systems. -Paths can be absolute, relative to the current execution directory or relative to the standalone configuration directory.

-
-
-
-
./standalone.sh -y=/home/ehsavoie/dev/wildfly/config2.yml:config.yml -c standalone-full.xml
-
-
-
-
-

9.9.2. What is in the YAML

-
-

The YAML root node must be wildfly-configuration, then you can follow the model tree to add or update resources.

-
-
-

Sample YAML file to define a new PostGresql datasource:

-
-
-
-
wildfly-configuration:
-  subsystem:
-    datasources:
-      jdbc-driver:
-        postgresql:
-          driver-name: postgresql
-          driver-xa-datasource-class-name: org.postgresql.xa.PGXADataSource
-          driver-module-name: org.postgresql.jdbc
-      data-source:
-        PostgreSQLDS:
-          enabled: true
-          exception-sorter-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
-          jndi-name: java:jboss/datasources/PostgreSQLDS
-          jta: true
-          max-pool-size: 20
-          min-pool-size: 0
-          connection-url: "jdbc:postgresql://localhost:5432}/demo"
-          driver-name: postgresql
-          user-name: postgres
-          password: postgres
-          validate-on-match: true
-          background-validation: false
-          background-validation-millis: 10000
-          flush-strategy: FailingConnectionOnly
-          statistics-enable: false
-          stale-connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.novendor.NullStaleConnectionChecker
-          valid-connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
-          transaction-isolation: TRANSACTION_READ_COMMITTED
-
-
-
-

We also provide three operations using tags:

-
-
-
    -
  • -

    !undefine: to undefine an attribute

    -
  • -
-
-
-

Sample YAML file to undefine the CONSOLE logger level:

-
-
-
-
wildfly-configuration:
-    subsystem:
-        logging:
-          console-handler:
-            CONSOLE:
-              level: !undefine
-
-
-
-
    -
  • -

    !remove: to remove the resource

    -
  • -
-
-
-

Sample YAML file to remove the MicroProfile Smallrye JWT subsystem:

-
-
-
-
wildfly-configuration:
-    subsystem:
-        microprofile-jwt-smallrye: !remove
-
-
-
-
    -
  • -

    !list-add: to add an element to a list (with an optionnal index).

    -
  • -
-
-
-

Sample YAML file to add a RemoteTransactionPermission to the permissions list at the position 0:

-
-
-
-
wildfly-configuration:
-    subsystem:
-        elytron:
-          permission-set:
-           default-permissions:
-             permissions: !list-add
-              - class-name: org.wildfly.transaction.client.RemoteTransactionPermission
-                module: org.wildfly.transaction.client
-                target-name: "*"
-                index: 0
-
-
-
-
-
-
-
-

10. Management API reference

-
-
-

This section is an in depth reference to the WildFly management API. -Readers are encouraged to read the -Management clients and -Core management concepts sections -for fundamental background information, as well as the -Management tasks and -Domain setup sections for key task oriented -information. This section is meant as an in depth reference to delve -into some of the key details.

-
-
-

10.1. Global operations

-
-

The WildFly management API includes a number of operations that apply to -every resource.

-
-
-

10.1.1. The read-resource operation

-
-

Reads a management resource’s attribute values along with either basic -or complete information about any child resources. Supports the following -parameters, none of which are required:

-
-
-
    -
  • -

    recursive – (boolean, default is false) – whether to include -complete information about child resources, recursively.

    -
  • -
  • -

    recursive-depth – (int) – The depth to which information about child -resources should be included if recursive is true. If not set, the -depth will be unlimited; i.e. all descendant resources will be included.

    -
  • -
  • -

    proxies – (boolean, default is false) – whether to include remote -resources in a recursive query (i.e. host level resources from secondary -Host Controllers in a query of the Domain Controller; running server -resources in a query of a host).

    -
  • -
  • -

    include-runtime – (boolean, default is false) – whether to include -runtime attributes (i.e. those whose value does not come from the -persistent configuration) in the response.

    -
  • -
  • -

    include-defaults – (boolean, default is true) – whether to include -in the result default values not set by users. Many attributes have a -default value that will be used in the runtime if the users have not -provided an explicit value. If this parameter is false the value for -such attributes in the result will be undefined. If true the result -will include the default value for such parameters.

    -
  • -
-
-
-
-

10.1.2. The read-attribute operation

-
-

Reads the value of an individual attribute. Takes a single, required, -parameter:

-
-
-
    -
  • -

    name – (string) – the name of the attribute to read.

    -
  • -
  • -

    include-defaults – (boolean, default is true) – whether to include -in the result default values not set by users. Many attributes have a -default value that will be used in the runtime if the users have not -provided an explicit value. If this parameter is false the value for -such attributes in the result will be undefined. If true the result -will include the default value for such parameters.

    -
  • -
-
-
-
-

10.1.3. The write-attribute operation

-
-

Writes the value of an individual attribute. Takes two required -parameters:

-
-
-
    -
  • -

    name – (string) – the name of the attribute to write.

    -
  • -
  • -

    value – (type depends on the attribute being written) – the new -value.

    -
  • -
-
-
-
-

10.1.4. The undefine-attribute operation

-
-

Sets the value of an individual attribute to the undefined value, if -such a value is allowed for the attribute. The operation will fail if -the undefined value is not allowed. Takes a single required parameter:

-
-
-
    -
  • -

    name – (string) – the name of the attribute to write.

    -
  • -
-
-
-
-

10.1.5. The list-add operation

-
-

Adds an element to the value of a list attribute, adding the element to -the end of the list unless the optional attribute index is passed:

-
-
-
    -
  • -

    name – (string) – the name of the list attribute to add new value -to.

    -
  • -
  • -

    value – (type depends on the element being written) – the new -element to be added to the attribute value.

    -
  • -
  • -

    index – (int, optional) – index where in the list to add the new -element. By default it is undefined meaning add at the end. Index is -zero based.

    -
  • -
-
-
-

This operation will fail if the specified attribute is not a list.

-
-
-
-

10.1.6. The list-remove operation

-
-

Removes an element from the value of a list attribute, either the -element at a specified index, or the first element whose value matches -a specified value:

-
-
-
    -
  • -

    name – (string) – the name of the list attribute to add new value -to.

    -
  • -
  • -

    value – (type depends on the element being written, optional) – the -element to be removed. Optional and ignored if index is specified.

    -
  • -
  • -

    index – (int, optional) – index in the list whose element should be -removed. By default it is undefined, meaning value should be -specified.

    -
  • -
-
-
-

This operation will fail if the specified attribute is not a list.

-
-
-
-

10.1.7. The list-get operation

-
-

Gets one element from a list attribute by its index

-
-
-
    -
  • -

    name – (string) – the name of the list attribute

    -
  • -
  • -

    index – (int, required) – index of element to get from list

    -
  • -
-
-
-

This operation will fail if the specified attribute is not a list.

-
-
-
-

10.1.8. The list-clear operation

-
-

Empties the list attribute. It is different from :undefine-attribute -as it results in attribute of type list with 0 elements, whereas -:undefine-attribute results in an undefined value for the attribute

-
-
-
    -
  • -

    name – (string) – the name of the list attribute

    -
  • -
-
-
-

This operation will fail if the specified attribute is not a list.

-
-
-
-

10.1.9. The map-put operation

-
-

Adds an key/value pair entry to the value of a map attribute:

-
-
-
    -
  • -

    name – (string) – the name of the map attribute to add the new entry -to.

    -
  • -
  • -

    key – (string) – the key of the new entry to be added.

    -
  • -
  • -

    value – (type depends on the entry being written) – the value of the -new entry to be added to the attribute value.

    -
  • -
-
-
-

This operation will fail if the specified attribute is not a map.

-
-
-
-

10.1.10. The map-remove operation

-
-

Removes an entry from the value of a map attribute:

-
-
-
    -
  • -

    name – (string) – the name of the map attribute to remove the new -entry from.

    -
  • -
  • -

    key – (string) – the key of the entry to be removed.

    -
  • -
-
-
-

This operation will fail if the specified attribute is not a map.

-
-
-
-

10.1.11. The map-get operation

-
-

Gets the value of one entry from a map attribute

-
-
-
    -
  • -

    name – (string) – the name of the map attribute

    -
  • -
  • -

    key – (string) – the key of the entry.

    -
  • -
-
-
-

This operation will fail if the specified attribute is not a map.

-
-
-
-

10.1.12. The map-clear operation

-
-

Empties the map attribute. It is different from :undefine-attribute as -it results in attribute of type map with 0 entries, whereas -:undefine-attribute results in an undefined value for the attribute

-
-
-
    -
  • -

    name – (string) – the name of the map attribute

    -
  • -
-
-
-

This operation will fail if the specified attribute is not a map.

-
-
-
-

10.1.13. The read-resource-description operation

-
-

Returns the description of a resource’s attributes, types of children -and, optionally, operations. Supports the
-following parameters, none of which are required:

-
-
-
    -
  • -

    recursive – (boolean, default is false) – whether to include -information about child resources, recursively.

    -
  • -
  • -

    proxies – (boolean, default is false) – whether to include remote -resources in a recursive query (i.e. host level resources from secondary -Host Controllers in a query of the Domain Controller; running server -resources in a query of a host)

    -
  • -
  • -

    operations – (boolean, default is false) – whether to include -descriptions of the resource’s operations

    -
  • -
  • -

    inherited – (boolean, default is true) – if operations is -true, whether to include descriptions of operations inherited from -higher level resources. The global operations described in this section -are themselves inherited from the root resource, so the primary effect -of setting inherited to false is to exclude the descriptions of the -global operations from the output.

    -
  • -
-
-
-

See Description of the -Management Model for details on the result of this operation.

-
-
-
-

10.1.14. The read-operation-names operation

-
-

Returns a list of the names of all the operations the resource supports. -Takes no parameters.

-
-
-
-

10.1.15. The read-operation-description operation

-
-

Returns the description of an operation, along with details of its -parameter types and its return value. Takes a single, required, -parameter:

-
-
-
    -
  • -

    name – (string) – the name of the operation

    -
  • -
-
-
-

See Description of the -Management Model for details on the result of this operation.

-
-
-
-

10.1.16. The read-children-types operation

-
-

Returns a list of the -types of child resources the resource supports. Takes two optional -parameters:

-
-
-
    -
  • -

    include-aliases – (boolean, default is false) – whether to include -alias children (i.e. those which are aliases of other sub-resources) in -the response.

    -
  • -
  • -

    include-singletons – (boolean, default is false) – whether to -include singleton children (i.e. those are children that acts as -resource aggregate and are registered with a wildcard name) in the -response -wildfly-dev -discussion around this topic.

    -
  • -
-
-
-
-

10.1.17. The read-children-names operation

-
-

Returns a list of the names of all child resources of a given -type. -Takes a single, required, parameter:

-
-
-
    -
  • -

    child-type – (string) – the name of the type

    -
  • -
-
-
-
-

10.1.18. The read-children-resources operation

-
-

Returns information about all of a resource’s children that are of a -given type. -For each child resource, the returned information is equivalent to -executing the read-resource operation on that resource. Takes the -following parameters, of which only \{{child-type} is required:

-
-
-
    -
  • -

    child-type – (string) – the name of the type of child resource

    -
  • -
  • -

    recursive – (boolean, default is false) – whether to include -complete information about child resources, recursively.

    -
  • -
  • -

    recursive-depth – (int) – The depth to which information about child -resources should be included if recursive is \{{true}. If not set, -the depth will be unlimited; i.e. all descendant resources will be -included.

    -
  • -
  • -

    proxies – (boolean, default is false) – whether to include remote -resources in a recursive query (i.e. host level resources from secondary -Host Controllers in a query of the Domain Controller; running server -resources in a query of a host)

    -
  • -
  • -

    include-runtime – (boolean, default is false) – whether to include -runtime attributes (i.e. those whose value does not come from the -persistent configuration) in the response.

    -
  • -
  • -

    include-defaults – (boolean, default is true) – whether to include -in the result default values not set by users. Many attributes have a -default value that will be used in the runtime if the users have not -provided an explicit value. If this parameter is false the value for -such attributes in the result will be undefined. If true the result -will include the default value for such parameters.

    -
  • -
-
-
-
-

10.1.19. The read-attribute-group operation

-
-

Returns a list of attributes of a -type for a given attribute group name. For each attribute the returned -information is equivalent to executing the read-attribute operation of -that resource. Takes the following parameters, of which only \{{name} -is required:

-
-
-
    -
  • -

    name – (string) – the name of the attribute group to read.

    -
  • -
  • -

    include-defaults – (boolean, default is true) – whether to include -in the result default values not set by users. Many attributes have a -default value that will be used in the runtime if the users have not -provided an explicit value. If this parameter is false the value for -such attributes in the result will be undefined. If true the result -will include the default value for such parameters.

    -
  • -
  • -

    include-runtime – (boolean, default is false) – whether to include -runtime attributes (i.e. those whose value does not come from the -persistent configuration) in the response.

    -
  • -
  • -

    include-aliases – (boolean, default is false) – whether to include -alias attributes (i.e. those which are alias of other attributes) in the -response.

    -
  • -
-
-
-
-

10.1.20. The read-attribute-group-names operation

-
-

Returns a list of attribute groups names for a given type. -Takes no parameters.

-
-
-
-

10.1.21. Standard Operations

-
-

Besides the global operations described above, by convention nearly -every resource should expose an add operation and a remove -operation. Exceptions to this convention are the root resource, and -resources that do not store persistent configuration and are created -dynamically at runtime (e.g. resources representing the JVM’s platform -mbeans or resources representing aspects of the running state of a -deployment.)

-
-
-
The add operation
-
-

The operation that creates a new resource must be named add. The -operation may take zero or more parameters; what those parameters are -depends on the resource being created.

-
-
-
-
The remove operation
-
-

The operation that removes an existing resource must be named remove. -The operation should take no parameters.

-
-
-
-
-
-

10.2. Detyped management and the jboss-dmr library

-
-

The management model exposed by WildFly is very large and complex. There -are dozens, probably hundreds of logical concepts involved – hosts, -server groups, servers, subsystems, datasources, web connectors, and on -and on – each of which in a classic objected oriented API design could -be represented by a Java type (i.e. a Java class or interface.) -However, a primary goal in the development of WildFly’s native -management API was to ensure that clients built to use the API had as -few compile-time and run-time dependencies on JBoss-provided classes as -possible, and that the API exposed by those libraries be powerful but -also simple and stable. A management client running with the management -libraries created for an earlier version of WildFly should still work if -used to manage a later version domain. The management client libraries -needed to be forward compatible.

-
-
-

It is highly unlikely that an API that consists of hundreds of Java -types could be kept forward compatible. Instead, the WildFly management -API is a detyped API. A detyped API is like decaffeinated coffee – it -still has a little bit of caffeine, but not enough to keep you awake at -night. WildFly’s management API still has a few Java types in it (it’s -impossible for a Java library to have no types!) but not enough to keep -you (or us) up at night worrying that your management clients won’t be -forward compatible.

-
-
-

A detyped API works by making it possible to build up arbitrarily -complex data structures using a small number of Java types. All of the -parameter values and return values in the API are expressed using those -few types. Ideally, most of the types are basic JDK types, like -java.lang.String, java.lang.Integer, etc. In addition to the basic -JDK types, WildFly’s detyped management API uses a small library called -jboss-dmr. The purpose of this section is to provide a basic overview -of the jboss-dmr library.

-
-
-

Even if you don’t use jboss-dmr directly (probably the case for all but -a few users), some of the information in this section may be useful. -When you invoke operations using the application server’s Command Line -Interface, the return values are just the text representation of of a -jboss-dmr ModelNode. If your CLI commands require complex parameter -values, you may yourself end up writing the text representation of a -ModelNode. And if you use the HTTP management API, all response bodies -as well as the request body for any POST will be a JSON representation -of a ModelNode.

-
-
-

The source code for jboss-dmr is available on -Github. The maven coordinates for -a jboss-dmr release are org.jboss.jboss-dmr:jboss-dmr.

-
-
-

10.2.1. ModelNode and ModelType

-
-

The public API exposed by jboss-dmr is very simple: just three classes, -one of which is an enum!

-
-
-

The primary class is org.jboss.dmr.ModelNode. A ModelNode is -essentially just a wrapper around some value; the value is typically -some basic JDK type. A ModelNode exposes a getType() method. This -method returns a value of type org.jboss.dmr.ModelType, which is an -enum of all the valid types of values. And that’s 95% of the public API; -a class and an enum. (We’ll get to the third class, Property, below.)

-
-
-
Basic ModelNode manipulation
-
-

To illustrate how to work with ModelNode s, we’ll use the -Beanshell scripting library. We won’t get into -many details of beanshell here; it’s a simple and intuitive tool and -hopefully the following examples are as well.

-
-
-

We’ll start by launching a beanshell interpreter, with the jboss-dmr -library available on the classpath. Then we’ll tell beanshell to import -all the jboss-dmr classes so they are available for use:

-
-
-
-
$ java -cp bsh-2.0b4.jar:jboss-dmr-1.0.0.Final.jar bsh.Interpreter
-BeanShell 2.0b4 - by Pat Niemeyer (pat@pat.net)
-bsh % import org.jboss.dmr.*;
-bsh %
-
-
-
-

Next, create a ModelNode and use the beanshell print function to -output what type it is:

-
-
-
-
bsh % ModelNode node = new ModelNode();
-bsh % print(node.getType());
-UNDEFINED
-
-
-
-

A new ModelNode has no value stored, so its type is -ModelType.UNDEFINED.

-
-
-

Use one of the overloaded set method variants to assign a node’s -value:

-
-
-
-
bsh % node.set(1);
-bsh % print(node.getType());
-INT
-bsh % node.set(true);
-bsh % print(node.getType());
-BOOLEAN
-bsh % node.set("Hello, world");
-bsh % print(node.getType());
-STRING
-
-
-
-

Use one of the asXXX() methods to retrieve the value:

-
-
-
-
bsh % node.set(2);
-bsh % print(node.asInt());
-2
-bsh % node.set("A string");
-bsh % print(node.asString());
-A string
-
-
-
-

ModelNode will attempt to perform type conversions when you invoke the -asXXX methods:

-
-
-
-
bsh % node.set(1);
-bsh % print(node.asString());
-1
-bsh % print(node.asBoolean());
-true
-bsh % node.set(0);
-bsh % print(node.asBoolean());
-false
-bsh % node.set("true");
-bsh % print(node.asBoolean());
-true
-
-
-
-

Not all type conversions are possible:

-
-
-
-
bsh % node.set("A string");
-bsh % print(node.asInt());
-// Error: // Uncaught Exception: Method Invocation node.asInt : at Line: 20 : in file: <unknown file> : node .asInt ( )
- 
-Target exception: java.lang.NumberFormatException: For input string: "A string"
- 
-java.lang.NumberFormatException: For input string: "A string"
- at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
- at java.lang.Integer.parseInt(Integer.java:449)
- at java.lang.Integer.parseInt(Integer.java:499)
- at org.jboss.dmr.StringModelValue.asInt(StringModelValue.java:61)
- at org.jboss.dmr.ModelNode.asInt(ModelNode.java:117)
-        ....
-
-
-
-

The ModelNode.getType() method can be used to ensure a node has an -expected value type before attempting a type conversion.

-
-
-

One set variant takes another ModelNode as its argument. The value -of the passed in node is copied, so there is no shared state between the -two model nodes:

-
-
-
-
bsh % node.set("A string");
-bsh % ModelNode another = new ModelNode();
-bsh % another.set(node);
-bsh % print(another.asString());
-A string
-bsh % node.set("changed");
-bsh % print(node.asString());
-changed
-bsh % print(another.asString());
-A string
-
-
-
-

A ModelNode can be cloned. Again, there is no shared state between the -original node and its clone:

-
-
-
-
bsh % ModelNode clone = another.clone();
-bsh % print(clone.asString());
-A string
-bsh % another.set(42);
-bsh % print(another.asString());
-42
-bsh % print(clone.asString());
-A string
-
-
-
-

Use the protect() method to make a ModelNode immutable:

-
-
-
-
bsh % clone.protect();
-bsh % clone.set("A different string");
-// Error: // Uncaught Exception: Method Invocation clone.set : at Line: 15 : in file: <unknown file> : clone .set ( "A different string" )
- 
-Target exception: java.lang.UnsupportedOperationException
- 
-java.lang.UnsupportedOperationException
- at org.jboss.dmr.ModelNode.checkProtect(ModelNode.java:1441)
- at org.jboss.dmr.ModelNode.set(ModelNode.java:351)
-        ....
-
-
-
-
-
Lists
-
-

The above examples aren’t particularly interesting; if all we can do -with a ModelNode is wrap a simple Java primitive, what use is that? -However, a ModelNode’s value can be more complex than a simple -primitive, and using these more complex types we can build complex data -structures. The first more complex type is `ModelType.LIST.

-
-
-

Use the add methods to initialize a node’s value as a list and add to -the list:

-
-
-
-
bsh % ModelNode list = new ModelNode();
-bsh % list.add(5);
-bsh % list.add(10);
-bsh % print(list.getType());
-LIST
-
-
-
-

Use asInt() to find the size of the list:

-
-
-
-
bsh % print(list.asInt());
-2
-
-
-
-

Use the overloaded get method variant that takes an int param to -retrieve an item. The item is returned as a ModelNode:

-
-
-
-
bsh % ModelNode child = list.get(1);
-bsh % print(child.asInt());
-10
-
-
-
-

Elements in a list need not all be of the same type:

-
-
-
-
bsh % list.add("A string");
-bsh % print(list.get(1).getType());
-INT
-bsh % print(list.get(2).getType());
-STRING
-
-
-
-

Here’s one of the trickiest things about jboss-dmr: The get -methods actually mutate state; they are not "read-only". For example, -calling get with an index that does not exist yet in the list will -actually create a child of type ModelType.UNDEFINED at that index (and -will create UNDEFINED children for any intervening indices.)

-
-
-
-
bsh % ModelNode four = list.get(4);
-bsh % print(four.getType());
-UNDEFINED
-bsh % print(list.asInt());
-6
-
-
-
-

Since the get call always returns a ModelNode and never null it is -safe to manipulate the return value:

-
-
-
-
bsh % list.get(5).set(30);
-bsh % print(list.get(5).asInt());
-30
-
-
-
-

That’s not so interesting in the above example, but later on with node -of type ModelType.OBJECT we’ll see how that kind of method chaining -can let you build up fairly complex data structures with a minimum of -code.

-
-
-

Use the asList() method to get a List<ModelNode> of the children:

-
-
-
-
bsh % for (ModelNode element : list.asList()) {
-print(element.getType());
-}
-INT
-INT
-STRING
-UNDEFINED
-UNDEFINED
-INT
-
-
-
-

The asString() and toString() methods provide slightly differently -formatted text representations of a ModelType.LIST node:

-
-
-
-
bsh % print(list.asString());
-[5,10,"A string",undefined,undefined,30]
-bsh % print(list.toString());
-[
-    5,
-    10,
-    "A string",
-    undefined,
-    undefined,
-    30
-]
-
-
-
-

Finally, if you’ve previously used set to assign a node’s value to -some non-list type, you cannot use the add method:

-
-
-
-
bsh % node.add(5);
-// Error: // Uncaught Exception: Method Invocation node.add : at Line: 18 : in file: <unknown file> : node .add ( 5 )
- 
-Target exception: java.lang.IllegalArgumentException
- 
-java.lang.IllegalArgumentException
- at org.jboss.dmr.ModelValue.addChild(ModelValue.java:120)
- at org.jboss.dmr.ModelNode.add(ModelNode.java:1007)
- at org.jboss.dmr.ModelNode.add(ModelNode.java:761)
-        ...
-
-
-
-

You can, however, use the setEmptyList() method to change the node’s -type, and then use add:

-
-
-
-
bsh % node.setEmptyList();
-bsh % node.add(5);
-bsh % print(node.toString());
-[5]
-
-
-
-
-
Properties
-
-

The third public class in the jboss-dmr library is -org.jboss.dmr.Property. A Property is a String ⇒ ModelNode tuple.

-
-
-
-
bsh % Property prop = new Property("stuff", list);
-bsh % print(prop.toString());
-org.jboss.dmr.Property@79a5f739
-bsh % print(prop.getName());
-stuff
-bsh % print(prop.getValue());
-[
-    5,
-    10,
-    "A string",
-    undefined,
-    undefined,
-    30
-]
-
-
-
-

The property can be passed to ModelNode.set:

-
-
-
-
bsh % node.set(prop);
-bsh % print(node.getType());
-PROPERTY
-
-
-
-

The text format for a node of ModelType.PROPERTY is:

-
-
-
-
bsh % print(node.toString());
-("stuff" => [
-    5,
-    10,
-    "A string",
-    undefined,
-    undefined,
-    30
-])
-
-
-
-

Directly instantiating a Property via its constructor is not common. -More typically one of the two argument ModelNode.add or -ModelNode.set variants is used. The first argument is the property -name:

-
-
-
-
bsh % ModelNode simpleProp = new ModelNode();
-bsh % simpleProp.set("enabled", true);
-bsh % print(simpleProp.toString());
-("enabled" => true)
-bsh % print(simpleProp.getType());
-PROPERTY
-bsh % ModelNode propList = new ModelNode();
-bsh % propList.add("min", 1);
-bsh % propList.add("max", 10);
-bsh % print(propList.toString());
-[
-    ("min" => 1),
-    ("max" => 10)
-]
-bsh % print(propList.getType());
-LIST
-bsh % print(propList.get(0).getType());
-PROPERTY
-
-
-
-

The asPropertyList() method provides easy access to a -List<Property>:

-
-
-
-
bsh % for (Property prop : propList.asPropertyList()) {
-print(prop.getName() + " = " + prop.getValue());
-}
-min = 1
-max = 10
-
-
-
-
-
ModelType.OBJECT
-
-

The most powerful and most commonly used complex value type in jboss-dmr -is ModelType.OBJECT. A ModelNode whose value is ModelType.OBJECT -internally maintains a Map<String, ModelNode.

-
-
-

Use the get method variant that takes a string argument to add an -entry to the map. If no entry exists under the given name, a new entry -is added with a the value being a ModelType.UNDEFINED node. The node -is returned:

-
-
-
-
bsh % ModelNode range = new ModelNode();
-bsh % ModelNode min = range.get("min");
-bsh % print(range.toString());
-{"min" => undefined}
-bsh % min.set(2);
-bsh % print(range.toString());
-{"min" => 2}
-
-
-
-

Again it is important to remember that the get operation may mutate -the state of a model node by adding a new entry. It is not a read-only -operation.

-
-
-

Since get will never return null, a common pattern is to use method -chaining to create the key/value pair:

-
-
-
-
bsh % range.get("max").set(10);
-bsh % print(range.toString());
-{
-    "min" => 2,
-    "max" => 10
-}
-
-
-
-

A call to get passing an already existing key will of course return -the same model node as was returned the first time get was called with -that key:

-
-
-
-
bsh % print(min == range.get("min"));
-true
-
-
-
-

Multiple parameters can be passed to get. This is a simple way to -traverse a tree made up of ModelType.OBJECT nodes. Again, get may -mutate the node on which it is invoked; e.g. it will actually create the -tree if nodes do not exist. This next example uses a workaround to get -beanshell to handle the overloaded get method that takes a variable -number of arguments:

-
-
-
-
bsh % String[] varargs = { "US", "Missouri", "St. Louis" };
-bsh % salesTerritories.get(varargs).set("Brian");
-bsh % print(salesTerritories.toString());
-{"US" => {"Missouri" => {"St. Louis" => "Brian"}}}
-
-
-
-

The normal syntax would be:

-
-
-
-
salesTerritories.get("US", "Missouri", "St. Louis").set("Brian");
-
-
-
-

The key/value pairs in the map can be accessed as a List<Property:

-
-
-
-
bsh % for (Property prop : range.asPropertyList()) {
-print(prop.getName() + " = " + prop.getValue());
-}
-min = 2
-
-
-
-

The semantics of the backing map in a node of ModelType.OBJECT are -those of a LinkedHashMap. The map remembers the order in which -key/value pairs are added. This is relevant when iterating over the -pairs after calling asPropertyList() and for controlling the order in -which key/value pairs appear in the output from toString().

-
-
-

Since the get method will actually mutate the state of a node if the -given key does not exist, ModelNode provides a couple methods to let -you check whether the entry is there. The has method simply does that:

-
-
-
-
bsh % print(range.has("unit"));
-false
-bsh % print(range.has("min"));
-true
-
-
-
-

Very often, the need is to not only know whether the key/value pair -exists, but whether the value is defined (i.e. not -ModelType.UNDEFINED. This kind of check is analogous to checking -whether a field in a Java class has a null value. The hasDefined lets -you do this:

-
-
-
-
bsh % print(range.hasDefined("unit"));
-false
-bsh % // Establish an undefined child 'unit';
-bsh % range.get("unit");
-bsh % print(range.toString());
-{
-    "min" => 2,
-    "max" => 10,
-    "unit" => undefined
-}
-bsh % print(range.hasDefined("unit"));
-false
-bsh % range.get("unit").set("meters");
-bsh % print(range.hasDefined("unit"));
-true
-
-
-
-
-
ModelType.EXPRESSION
-
-

A value of type ModelType.EXPRESSION is stored as a string, but can -later be resolved to different value. The string has a special syntax -that should be familiar to those who have used the system property -substitution feature in previous JBoss AS releases.

-
-
-
-
[<prefix>][${<system-property-name>[:<default-value>]}][<suffix>]*
-
-
-
-

For example:

-
-
-
-
${queue.length}
-http://${host}
-http://${host:localhost}:${port:8080}/index.html
-
-
-
-

Use the setExpression method to set a node’s value to type expression:

-
-
-
-
bsh % ModelNode expression = new ModelNode();
-bsh % expression.setExpression("${queue.length}");
-bsh % print(expression.getType());
-EXPRESSION
-
-
-
-

Calling asString() returns the same string that was input:

-
-
-
-
bsh % print(expression.asString());
-${queue.length}
-
-
-
-

However, calling toString() tells you that this node’s value is not of -ModelType.STRING:

-
-
-
-
bsh % print(expression.toString());
-expression "${queue.length}"
-
-
-
-

When the resolve operation is called, the string is parsed and any -embedded system properties are resolved against the JVM’s current system -property values. A new ModelNode is returned whose value is the -resolved string:

-
-
-
-
bsh % System.setProperty("queue.length", "10");
-bsh % ModelNode resolved = expression.resolve();
-bsh % print(resolved.asInt());
-10
-
-
-
-

Note that the type of the ModelNode returned by resolve() is -ModelType.STRING:

-
-
-
-
bsh % print(resolved.getType());
-STRING
-
-
-
-

The resolved.asInt() call in the previous example only worked because -the string "10" happens to be convertible into the int 10.

-
-
-

Calling resolve() has no effect on the value of the node on which the -method is invoked:

-
-
-
-
bsh % resolved = expression.resolve();
-bsh % print(resolved.toString());
-"10"
-bsh % print(expression.toString());
-expression "${queue.length}"
-
-
-
-

If an expression cannot be resolved, resolve just uses the original -string. The string can include more than one system property -substitution:

-
-
-
-
bsh % expression.setExpression("http://${host}:${port}/index.html");
-bsh % resolved = expression.resolve();
-bsh % print(resolved.asString());
-http://${host}:${port}/index.html
-
-
-
-

The expression can optionally include a default value, separated from -the name of the system property by a colon:

-
-
-
-
bsh % expression.setExpression("http://${host:localhost}:${port:8080}/index.html");
-bsh % resolved = expression.resolve();
-bsh % print(resolved.asString());
-http://localhost:8080/index.html
-
-
-
-

Actually including a system property substitution in the expression is -not required:

-
-
-
-
bsh % expression.setExpression("no system property");
-bsh % resolved = expression.resolve();
-bsh % print(resolved.asString());
-no system property
-bsh % print(expression.toString());
-expression "no system property"
-
-
-
-

The resolve method works on nodes of other types as well; it returns a -copy without attempting any real resolution:

-
-
-
-
bsh % ModelNode basic = new ModelNode();
-bsh % basic.set(10);
-bsh % resolved = basic.resolve();
-bsh % print(resolved.getType());
-INT
-bsh % resolved.set(5);
-bsh % print(resolved.asInt());
-5
-bsh % print(basic.asInt());
-10
-
-
-
-

In addition to system properties, in the above examples, we also support substituting -from environment variables. See the Expression Resolution -subsection for a more thorough description of how this works in practice.

-
-
-
-
ModelType.TYPE
-
-

You can also pass one of the values of the ModelType enum to set:

-
-
-
-
bsh % ModelNode type = new ModelNode();
-bsh % type.set(ModelType.LIST);
-bsh % print(type.getType());
-TYPE
-bsh % print(type.toString());
-LIST
-
-
-
-

This is useful when using a ModelNode data structure to describe -another ModelNode data structure.

-
-
-
-
Full list of ModelNode types
-
-

BIG_DECIMAL
-BIG_INTEGER
-BOOLEAN
-BYTES
-DOUBLE
-EXPRESSION
-INT
-LIST
-LONG
-OBJECT
-PROPERTY
-STRING
-TYPE
-UNDEFINED

-
-
-
-
Text representation of a ModelNode
-
-

TODO – document the grammar

-
-
-
-
JSON representation of a ModelNode
-
-

TODO – document the grammar

-
-
-
-
-
-

10.3. Description of the Management Model

-
-

A detailed description of the resources, attributes and operations that -make up the management model provided by an individual WildFly instance -or by any Domain Controller or secondary Host Controller process can be -queried using the read-resource-description, read-operation-names, -read-operation-description and read-child-types operations described -in the Global operations section. In this -section we provide details on what’s included in those descriptions.

-
-
-

10.3.1. Description of the WildFly Managed Resources

-
-

All portions of the management model exposed by WildFly are addressable -via an ordered list of key/value pairs. For each addressable -Management Resource, the following -descriptive information will be available:

-
-
-
    -
  • -

    description – String – text description of this portion of the model

    -
  • -
  • -

    min-occurs – int, either 0 or 1 – Minimum number of resources of -this type that must exist in a valid model. If not present, the default -value is 0.

    -
  • -
  • -

    max-occurs – int – Maximum number of resources of this type that may -exist in a valid model. If not present, the default value depends upon -the value of the final key/value pair in the address of the described -resource. If this value is '*', the default value is Integer.MAX_VALUE, -i.e. there is no limit. If this value is some other string, the default -value is 1.

    -
  • -
  • -

    attributes – Map of String (the attribute name) to complex structure -– the configuration attributes available in this portion of the model. -See the Description of an Attribute section -for the representation of each attribute.

    -
  • -
  • -

    operations – Map of String (the operation name) to complex structure -– the operations that can be targeted at this address. See the -Description of an Operation section -for the representation of each operation.

    -
  • -
  • -

    children – Map of String (the type of child) to complex structure – -the relationship of this portion of the model to other addressable -portions of the model. See the -Description of Parent/Child Relationships -section for the representation of each child relationship.

    -
  • -
  • -

    head-comment-allowed – boolean – This description key is for -possible future use.

    -
  • -
  • -

    tail-comment-allowed – boolean – This description key is for -possible future use.

    -
  • -
-
-
-

For example:

-
-
-
-
{
-     "description => "A manageable resource",
-     "tail-comment-allowed" => false,
-     "attributes" => {
-          "foo" => {
-               .... details of attribute foo
-          }
-      },
-     "operations" => {
-          "start" => {
-               .... details of the start operation
-          }
-      },
-     "children" => {
-          "bar" => {
-               .... details of the relationship with children of type "bar"
-          }
-      }
-}
-
-
-
-
Description of an Attribute
-
-

An attribute is a portion of the management model that is not directly -addressable. Instead, it is conceptually a property of an addressable -management resource. For -each attribute in the model, the following descriptive information will -be available:

-
-
-
    -
  • -

    description – String – text description of the attribute

    -
  • -
  • -

    typeorg.jboss.dmr.ModelType – the type of the attribute value. -One of the enum values BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, -INT, LIST, LONG, OBJECT, PROPERTY, STRING. Most of these are -self-explanatory. An OBJECT will be represented in the detyped model as -a map of string keys to values of some other legal type, conceptually -similar to a javax.management.openmbean.CompositeData. A PROPERTY is a -single key/value pair, where the key is a string, and the value is of -some other legal type.

    -
  • -
  • -

    value-type – ModelType or complex structure – Only present if type -is LIST or OBJECT. If all elements in the LIST or all the values of the -OBJECT type are of the same type, this will be one of the ModelType -enums BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, INT, LONG, -STRING. Otherwise, value-type will detail the structure of the -attribute value, enumerating the value’s fields and the type of their -value. So, an attribute with a type of LIST and a value-type value -of ModelType.STRING is analogous to a Java List<String>, while one -with a value-type value of ModelType.INT is analogous to a Java -List<Integer>. An attribute with a type of OBJECT and a value-type -value of ModelType.STRING is analogous to a Java -Map<String, String>. An attribute with a type of OBJECT and a -value-type whose value is not of type ModelType represents a -fully-defined complex object, with the object’s legal fields and their -values described.

    -
  • -
  • -

    expressions-allowed – boolean – indicates whether the value of the -attribute may be of type ModelType.EXPRESSION, instead of its standard -type (see type and value-type above for discussion of an attribute’s -standard type.) A value of ModelType.EXPRESSION contains a -system-property or environment variable -substitution expression that the server will resolve -against the server-side system property map before using the value. For -example, an attribute named max-threads may have an expression value of -${example.pool.max-threads:10} instead of just 10. Default value if -not present is false. -See the Expression Resolution subsection -for a more thorough description.

    -
  • -
  • -

    required – boolean – true if the attribute must have a defined value -in a representation of its portion of the model unless another attribute -included in a list of alternatives is defined; false if it may be -undefined (implying a null value) even in the absence of alternatives. -If not present, true is the default.

    -
  • -
  • -

    nillable – boolean – true if the attribute might not have a defined -value in a representation of its portion of the model. A nillable -attribute may
    -be undefined either because it is not required or because it is -required but has alternatives and one of the alternatives is defined.

    -
  • -
  • -

    storage – String – Either "configuration" or "runtime". If -"configuration", the attribute’s value is stored as part of the -persistent configuration (e.g. in domain.xml, host.xml or -standalone.xml.) If "runtime" the attribute’s value is not stored in the -persistent configuration; the value only exists as long as the resource -is running.

    -
  • -
  • -

    access-type – String – One of "read-only", "read-write" or "metric". -Whether an attribute value can be written, or can only read. A "metric" -is a read-only attribute whose value is not stored in the persistent -configuration, and whose value may change due to activity on the server. -If an attribute is "read-write", the resource will expose an operation -named "write-attribute" whose "name" parameter will accept this -attribute’s name and whose "value" parameter will accept a valid value -for this attribute. That operation will be the standard means of -updating this attribute’s value.

    -
  • -
  • -

    restart-required – String – One of "no-services", "all-services", -"resource-services" or "jvm". Only relevant to attributes whose -access-type is read-write. Indicates whether execution of a -write-attribute operation whose name parameter specifies this attribute -requires a restart of services (or an entire JVM) in order for the -change to take effect in the runtime . See the discussion of -Applying -Updates to Runtime Services below. Default value is "no-services".

    -
  • -
  • -

    default – the default value for the attribute that will be used in -runtime services if the attribute is not explicitly defined and no other -attributes listed as alternatives are defined.

    -
  • -
  • -

    alternatives – List of string – Indicates an exclusive relationship -between attributes. If this attribute is defined, the other attributes -listed in this descriptor’s value should be undefined, even if their -required descriptor says true; i.e. the presence of this attribute -satisfies the requirement. Note that an attribute that is not explicitly -configured but has a default value is still regarded as not being -defined for purposes of checking whether the exclusive relationship has -been violated. Default is undefined; i.e. this does not apply to most -attributes.

    -
  • -
  • -

    requires – List of string – Indicates that if this attribute has a -value (other than undefined), the other attributes listed in this -descriptor’s value must also have a value, even if their required -descriptor says false. This would typically be used in conjunction with -alternatives. For example, attributes "a" and "b" are required, but are -alternatives to each other; "c" and "d" are optional. But "b" requires -"c" and "d", so if "b" is used, "c" and "d" must also be defined. -Default is undefined; i.e. this does not apply to most attributes.

    -
  • -
  • -

    capability-reference – string – if defined indicates that this -attribute’s value specifies the dynamic portion of the name of the -specified capability provided by another resource. This indicates the -attribute is a reference to another area of the management model. (Note -that at present some attributes that reference other areas of the model -may not provide this information.)

    -
  • -
  • -

    head-comment-allowed – boolean – This description key is for -possible future use.

    -
  • -
  • -

    tail-comment-allowed – boolean – This description key is for -possible future use.

    -
  • -
  • -

    arbitrary key/value pairs that further describe the attribute value, -e.g. "max" ⇒ 2. See the Arbitrary -Descriptors section.

    -
  • -
-
-
-

Some examples:

-
-
-
-
"foo" => {
-     "description" => "The foo",
-     "type" => INT,
-     "max" => 2
-}
-
-
-
-
-
"bar" => {
-     "description" => "The bar",
-     "type" => OBJECT,
-     "value-type" => {
-          "size" => INT,
-          "color" => STRING
-     }
-}
-
-
-
-
-
Description of an Operation
-
-

A management resource may have operations associated with it. The -description of an operation will include the following information:

-
-
-
    -
  • -

    operation-name – String – the name of the operation

    -
  • -
  • -

    description – String – text description of the operation

    -
  • -
  • -

    request-properties – Map of String to complex structure – -description of the parameters of the operation. Keys are the names of -the parameters, values are descriptions of the parameter value types. -See -below -for details on the description of parameter value types.

    -
  • -
  • -

    reply-properties – complex structure, or empty – description of the -return value of the operation, with an empty node meaning void. See -below -for details on the description of operation return value types.

    -
  • -
  • -

    restart-required – String – One of "no-services", "all-services", -"resource-services" or "jvm". Indicates whether the operation makes a -configuration change that requires a restart of services (or an entire -JVM) in order for the change to take effect in the runtime. See -the discussion of Applying -Updates to Runtime Services below. Default value is "no-services".

    -
  • -
-
-
-
Description of an Operation Parameter or Return Value
-
-
    -
  • -

    description – String – text description of the parameter or return -value

    -
  • -
  • -

    typeorg.jboss.dmr.ModelType – the type of the parameter or -return value. One of the enum values BIG_DECIMAL, BIG_INTEGER, BOOLEAN, -BYTES, DOUBLE, INT, LIST, LONG, OBJECT, PROPERTY, STRING.

    -
  • -
  • -

    value-typeModelType or complex structure – Only present if type -is LIST or OBJECT. If all elements in the LIST or all the values of the -OBJECT type are of the same type, this will be one of the ModelType -enums BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, INT, LIST, LONG, -PROPERTY, STRING. Otherwise, value-type will detail the structure of the -attribute value, enumerating the value’s fields and the type of their -value.So, a parameter with a type of LIST and a value-type value of -ModelType.STRING is analogous to a Java List<String>, while one with -a value-type value of ModelType.INT is analogous to a Java -List<Integer>. A parameter with a type of OBJECT and a value-type -value of ModelType.STRING is analogous to a Java -Map<String, String>. A parameter with a type of OBJECT and a -value-type whose value is not of type ModelType represents a -fully-defined complex object, with the object’s legal fields and their -values described.

    -
  • -
  • -

    expressions-allowed – boolean – indicates whether the value of the -the parameter or return value may be of type ModelType.EXPRESSION, -instead its standard type (see type and value-type above for discussion -of the standard type.) A value of ModelType.EXPRESSION contains a -system-property or environment variable -substitution expression that the server will resolve -against the server-side system property map before using the value. For -example, a parameter named max-threads may have an expression value of -${example.pool.max-threads:10} instead of just 10. Default value if -not present is false. -See the Expression Resolution subsection -for a more thorough description.

    -
  • -
  • -

    required – boolean – true if the parameter or return value must have -a defined value in the operation or response unless another item -included in a list of alternatives is defined; false if it may be -undefined (implying a null value) even in the absence of alternatives. -If not present, true is the default.

    -
  • -
  • -

    nillable – boolean – true if the parameter or return value might not -have a defined value in a representation of its portion of the model. A -nillable parameter or return value may be undefined either because it is -not required or because it is required but has alternatives and one -of the alternatives is defined.

    -
  • -
  • -

    default – the default value for the parameter that will be used in -runtime services if the parameter is not explicitly defined and no other -parameters listed as alternatives are defined.

    -
  • -
  • -

    restart-required – String – One of "no-services", "all-services", -"resource-services" or "jvm". Only relevant to attributes whose -access-type is read-write. Indicates whether execution of a -write-attribute operation whose name parameter specifies this attribute -requires a restart of services (or an entire JVM) in order for the -change to take effect in the runtime . See the discussion of -Applying -Updates to Runtime Services below. Default value is "no-services".

    -
  • -
  • -

    alternatives – List of string – Indicates an exclusive relationship -between parameters. If this attribute is defined, the other parameters -listed in this descriptor’s value should be undefined, even if their -required descriptor says true; i.e. the presence of this parameter -satisfies the requirement. Note that an parameer that is not explicitly -configured but has a default value is still regarded as not being -defined for purposes of checking whether the exclusive relationship has -been violated. Default is undefined; i.e. this does not apply to most -parameters.

    -
  • -
  • -

    requires – List of string – Indicates that if this parameter has a -value (other than undefined), the other parameters listed in this -descriptor’s value must also have a value, even if their required -descriptor says false. This would typically be used in conjunction with -alternatives. For example, parameters "a" and "b" are required, but are -alternatives to each other; "c" and "d" are optional. But "b" requires -"c" and "d", so if "b" is used, "c" and "d" must also be defined. -Default is undefined; i.e. this does not apply to most parameters.

    -
  • -
  • -

    arbitrary key/value pairs that further describe the attribute value, -e.g. "max" ⇒2. See the Arbitrary Descriptors -section.

    -
  • -
-
-
-
-
-
Arbitrary Descriptors
-
-

The description of an attribute, operation parameter or operation return -value type can include arbitrary key/value pairs that provide extra -information. Whether a particular key/value pair is present depends on -the context, e.g. a pair with key "max" would probably only occur as -part of the description of some numeric type.

-
-
-

Following are standard keys and their expected value type. If descriptor -authors want to add an arbitrary key/value pair to some descriptor and -the semantic matches the meaning of one of the following items, the -standard key/value type must be used.

-
-
-
    -
  • -

    min – int – the minimum value of some numeric type. The absence of -this item implies there is no minimum value.

    -
  • -
  • -

    max – int – the maximum value of some numeric type. The absence of -this item implies there is no maximum value.

    -
  • -
  • -

    min-length – int – the minimum length of some string, list or byte[] -type. The absence of this item implies a minimum length of zero.

    -
  • -
  • -

    max-length – int – the maximum length of some string, list or -byte[]. The absence of this item implies there is no maximum value.

    -
  • -
  • -

    allowed – List – a list of legal values. The type of the elements in -the list should match the type of the attribute.

    -
  • -
  • -

    unit - The unit of the value, if one is applicable - e.g. ns, ms, s, -m, h, KB, MB, TB. See the -org.jboss.as.controller.client.helpers.MeasurementUnit in the -org.jboss.as:jboss-as-controller-client artifact for a listing of legal -measurement units..

    -
  • -
  • -

    filesystem-path – boolean – a flag to indicate that the attribute is a -path on the filesystem.

    -
  • -
  • -

    attached-streams – boolean – a flag to indicate that the attribute is a -stream id to an attached stream.

    -
  • -
  • -

    relative-to – boolean – a flag to indicate that the attribute is a -relative path.

    -
  • -
  • -

    feature-reference – boolean – a flag to indicate that the attribute is a -reference to a provisioning feature via a capability.

    -
  • -
-
-
-

Some examples:

-
-
-
-
{
-     "operation-name" => "incrementFoo",
-     "description" => "Increase the value of the 'foo' attribute by the given amount",
-     "request-properties" => {
-          "increment" => {
-               "type" => INT,
-               "description" => "The amount to increment",
-               "required" => true
-     }},
-     "reply-properties" => {
-               "type" => INT,
-               "description" => "The new value",
-     }
-}
-
-
-
-
-
{
-     "operation-name" => "start",
-     "description" => "Starts the thing",
-     "request-properties" => {},
-     "reply-properties" => {}
-}
-
-
-
-
-
Description of Parent/Child Relationships
-
-

The address used to target an addressable portion of the model must be -an ordered list of key value pairs. The effect of this requirement is -the addressable portions of the model naturally form a tree structure, -with parent nodes in the tree defining what the valid keys are and the -children defining what the valid values are. The parent node also -defines the cardinality of the relationship. The description of the -parent node includes a children element that describes these -relationships:

-
-
-
-
{
-     ....
-     "children" => {
-          "connector" => {
-               .... description of the relationship with children of type "connector"
-          },
-          "virtual-host" => {
-               .... description of the relationship with children of type "virtual-host"
-          }
-}
-
-
-
-

The description of each relationship will include the following -elements:

-
-
-
    -
  • -

    description – String – text description of the relationship

    -
  • -
  • -

    model-description – either "undefined" or a complex structure – This -is a node of ModelType.OBJECT, the keys of which are legal values for -the value portion of the address of a resource of this type, with the -special character '*' indicating the value portion can have an arbitrary -value. The values in the node are the full description of the particular -child resource (its text description, attributes, operations, children) -as detailed above. This model-description may also be "undefined", -i.e. a null value, if the query that asked for the parent node’s -description did not include the "recursive" param set to true.

    -
  • -
-
-
-

Example with if the recursive flag was set to true:

-
-
-
-
{
-     "description" => "The connectors used to handle client connections",
-     "model-description" => {
-          "*" => {
-              "description" => "Handles client connections",
-              "min-occurs" => 1,
-              "attributes => {
-                   ... details of children as documented above
-              },
-              "operations" => {
-                   .... details of operations as documented above
-              },
-              "children" => {
-                   .... details of the children's children
-              }
-          }
-     }
-}
-
-
-
-

If the recursive flag was false:

-
-
-
-
{
-     "description" => "The connectors used to handle client connections",
-     "model-description" => undefined
-}
-
-
-
-
-
Applying Updates to Runtime Services
-
-

An attribute or operation description may include a restart-required -descriptor; this section is an explanation of the -meaning of that descriptor.

-
-
-

An operation that changes a management resource’s persistent -configuration usually can also also affect a runtime service associated -with the resource. For example, there is a runtime service associated -with any host.xml or standalone.xml <interface> element; other -services in the runtime depend on that service to provide the -InetAddress associated with the interface. In many cases, an update to -a resource’s persistent configuration can be immediately applied to the -associated runtime service. The runtime service’s state is updated to -reflect the new value(s).

-
-
-

However, in many cases the runtime service’s state cannot be updated -without restarting the service. Restarting a service can have broad -effects. A restart of a service A will trigger a restart of other -services B, C and D that depend on A, triggering a restart of services that -depend on B, C and D, etc. Those service restarts may very well disrupt -handling of end-user requests.

-
-
-

Because restarting a service can be disruptive to end-user request -handling, the handlers for management operations will not restart any -service without some form of explicit instruction from the end user -indicating a service restart is desired. In a few cases, simply -executing the operation is an indication the user wants services to -restart (e.g. a /host=primary/server-config=server-one:restart -operation in a managed domain, or a /:reload operation on a standalone -server.) For all other cases, if an operation (or attribute write) -cannot be performed without restarting a service, the metadata -describing the operation or attribute will include a restart-required -descriptor whose value indicates what is necessary -for the operation to affect the runtime:

-
-
-
    -
  • -

    no-services – Applying the operation to the runtime does not require -the restart of any services. This value is the default if the -restart-required descriptor is not present.

    -
  • -
  • -

    all-services – The operation can only immediately update the -persistent configuration; applying the operation to the runtime will -require a subsequent restart of all services in the affected VM. -Executing the operation will put the server into a reload-required -state. Until a restart of all services is performed the response to this -operation and to any subsequent operation will include a response header -"process-state" ⇒ "reload-required". For a standalone server, a -restart of all services can be accomplished by executing the reload -CLI command. For a server in a managed domain, restarting all services -is done via a reload operation targeting the particular server (e.g. -/host=primary/server=server-one:reload).

    -
  • -
  • -

    jvm --The operation can only immediately update the persistent -configuration; applying the operation to the runtime will require a full -process restart (i.e. stop the JVM and launch a new JVM). Executing the -operation will put the server into a restart-required state. Until -a restart is performed the response to this operation and to any -subsequent operation will include a response header -"process-state" ⇒ "restart-required". For a standalone server, a full -process restart requires first stopping the server via OS-level -operations (Ctrl-C, kill) or via the shutdown CLI command, and then -starting the server again from the command line. For a server in a -managed domain, restarting a server requires executing the -/host=<host>/server-config=<server>:restart operation.

    -
  • -
  • -

    resource-services – The operation can only immediately update the -persistent configuration; applying the operation to the runtime will -require a subsequent restart of some services associated with the -resource. If the operation includes the request header -"allow-resource-service-restart" ⇒ true, the handler for the -operation will go ahead and restart the runtime service. Otherwise -executing the operation will put the server into a reload-required -state. (See the discussion of all-services above for more on the -reload-required state.)

    -
  • -
-
-
-
-
-

10.3.2. Expression Resolution

-
-

When resolving an expression in the model the following locations are checked. -For this example we will use the expression ${my.example-expr}.

-
-
-
    -
  • -

    First we check if there is a system property with the name -my.example-expr. -If there is, we use its value as the result of the resolution. -If not, we continue checking the next locations.

    -
  • -
  • -

    We convert the name my.example-expr to upper case, and replace all -non-alphanumeric characters with underscores, ending up with -MY_EXAMPLE_EXPR. We check if there is an environment variable with that -name. If there is, we use its value as the result of the resolution. -If not, we continue checking the next location.

    -
  • -
-
-
- - - - - -
- - -This step was introduced for WildFly 25, and has the scope to introduce some issues in special cases. Say you have an environment variable COMMON_VAR_NAME=foo already in use, and you use ${common-var-name:bar} in the wildfly configuration. Prior to WildFly 25, the default value (i.e. bar) will be used. In WildFly 25 and later, the value from the environment variable (i.e. foo) will be used. -
-
-
-
    -
  • -

    If (and only if) the original name starts with env. we trim the prefix -and look for an environment variable called what we are left with, with no -conversion performed (e.g. if the original name was env.example, we look for -an environment variable called example; if the original name was -env.MY_EXAMPLE_EXPR, we look for an environment variable called MY_EXAMPLE_EXPR). -If there is such an environmet variable, we use its value as the result of the resolution.

    -
  • -
  • -

    If none of the above checks yielded a result, the resolution failed. The -final step is to check if the expression provided a default. Our ${my.example-expr} -example provided no default, so the expression could not be resolved. If -we had specified a default in the expression the default is returned (e.g. for -${my.example-expr:hello}, the value hello is returned).

    -
  • -
-
-
-
-
-

10.4. The HTTP management API

-
-

10.4.1. Introduction

-
-

The Management API in WildFly is accessible through multiple channels, -one of them being HTTP and JSON.

-
-
-

Even if you haven’t used a curl command line you might already have used -this channel since it is how the web console interact with the -Management API.

-
-
-

WildFly is distributed secured by default, the default security -mechanism is username / password based making use of HTTP Digest for -the authentication process.

-
-
-

Thus you need to create a user with the add-user.sh script.

-
-
-
-

10.4.2. Interacting with the model

-
-

Since we must be authenticated , the client will have to support HTTP -Digest authentication.

-
-
-

For example this can be activated in curl using the --digest option.

-
-
-

The WildFly HTTP Management API adheres to the REST principles so the -GET operations must be idempotent.

-
-
-

This means that using a request with method GET can be used to read -the model but you won’t be able to change it.

-
-
-

You must use POST to change the model or read it. A POST request may -contain the operation either in DMR or in JSON format as its body.

-
-
-

You have to define the Content-Type=application/json header in the -request to specify that you are using some JSON.

-
-
-

If you want to submit DMR in the request body then the Content-Type or -the Accept header should be "application/dmr-encoded".

-
-
-
-

10.4.3. GET for Reading

-
-

While you can do everything with POST, some operations can be called -through a 'classical' GET request.

-
-
-

These are the supported operations for a GET :

-
-
-
    -
  • -

    attribute : for a read-attribute operation

    -
  • -
  • -

    resource : for a read-resource operation

    -
  • -
  • -

    resource-description : for a read-resource-description operation

    -
  • -
  • -

    snapshots : for the list-snapshots operation

    -
  • -
  • -

    operation-description : for a read-operation-description operation

    -
  • -
  • -

    operation-names : for ad read-operation-names operation

    -
  • -
-
-
-

The URL format is the following one : http://server:9990/management/ -<path_to_resource>?operation=<operation_name>&operation_parameter=<value>…​

-
-
-

path_to_resource is the path to the wanted resource replacing all '=' -with '/' : thus for example subsystem=undertow/server=default-server -becomes subsystem/undertow/server/default-server.

-
-
-

So to read the server-state :

-
-
-
-
http://localhost:9990/management?operation=attribute&name=server-state&json.pretty=1
-
-
-
-
-

10.4.4. Let’s read some resource

-
-
    -
  • -

    This is simple operation that is equivalent of running -:read-attribute(name=server-state) with CLI in root directory

    -
    -
      -
    • -

      Using GET

      -
      -
      -
      http://localhost:9990/management?operation=attribute&name=server-state&json.pretty=1
      -
      -
      -
    • -
    • -

      Using POST

      -
      -
      -
      $ curl --digest -L -D - http://localhost:9990/management --header "Content-Type: application/json" -d '{"operation":"read-attribute","name":"server-state","json.pretty":1}' -u admin
      -Enter host password for user 'admin':
      -HTTP/1.1 401 Unauthorized
      -Connection: keep-alive
      -WWW-Authenticate: Digest realm="ManagementRealm",domain="/management",nonce="P80WU3BANtQNMTQwNjg5Mzc5MDQ2MlpjmRaZ+Vlp1OVeNEGBeXg=",opaque="00000000000000000000000000000000",algorithm=MD5
      -Content-Length: 77
      -Content-Type: text/html
      -Date: Fri, 01 Aug 2014 11:49:50 GMT
      -
      -HTTP/1.1 200 OK
      -Connection: keep-alive
      -Authentication-Info: nextnonce="M+h9aADejeINMTQwNjg5Mzc5MDQ2OPQbHKdAS8pRE8BbGEDY5uI="
      -Content-Type: application/json; charset=utf-8
      -Content-Length: 55
      -Date: Fri, 01 Aug 2014 11:49:50 GMT
      -
      -{
      -    "outcome" : "success",
      -    "result" : "running"
      -}
      -
      -
      -
    • -
    -
    -
  • -
  • -

    Here’s an example of an operation on a resource with a nested address -and passed parameters. This is same as if you would run -/host=primary/server=server-01:read-attribute(name=server-state)

    -
  • -
-
-
-
-
$ curl --digest -L -D - http://localhost:9990/management --header "Content-Type: application/json" -d '{"operation":"read-attribute","address":[{"host":"primary"},{"server":"server-01"}],"name":"server-state","json.pretty":1}'
-HTTP/1.1 200 OK
-Transfer-encoding: chunked
-Content-type: application/json
-Date: Tue, 17 Apr 2012 04:02:24 GMT
-
-{
- "outcome" : "success",
- "result" : "running"
-}
-
-
-
-
    -
  • -

    Following example will get us information from http connection in -undertow subsystem including run-time attributes
    -This is the same as running -/subsystem=undertow/server=default-server:read-resource(include-runtime=true,recursive=true) -in CLI

    -
    -
      -
    • -

      Using GET

      -
      -
      -
      http://localhost:9990/management/subsystem/undertow/server/default-server?operation=resource&recursive=true&json.pretty=1
      -
      -{
      -    "default-host" : "default-host",
      -    "servlet-container" : "default",
      -    "ajp-listener" : null,
      -    "host" : {"default-host" : {
      -        "alias" : ["localhost"],
      -        "default-web-module" : "ROOT.war",
      -        "filter-ref" : {
      -            "server-header" : {"predicate" : null},
      -            "x-powered-by-header" : {"predicate" : null}
      -        },
      -        "location" : {"/" : {
      -            "handler" : "welcome-content",
      -            "filter-ref" : null
      -        }},
      -        "setting" : null
      -    }},
      -    "http-listener" : {"default" : {
      -        "allow-encoded-slash" : false,
      -        "allow-equals-in-cookie-value" : false,
      -        "always-set-keep-alive" : true,
      -        "buffer-pipelined-data" : true,
      -        "buffer-pool" : "default",
      -        "certificate-forwarding" : false,
      -        "decode-url" : true,
      -        "enabled" : true,
      -        "max-buffered-request-size" : 16384,
      -        "max-cookies" : 200,
      -        "max-header-size" : 51200,
      -        "max-headers" : 200,
      -        "max-parameters" : 1000,
      -        "max-post-size" : 10485760,
      -        "proxy-address-forwarding" : false,
      -        "read-timeout" : null,
      -        "receive-buffer" : null,
      -        "record-request-start-time" : false,
      -        "redirect-socket" : "https",
      -        "send-buffer" : null,
      -        "socket-binding" : "http",
      -        "tcp-backlog" : null,
      -        "tcp-keep-alive" : null,
      -        "url-charset" : "UTF-8",
      -        "worker" : "default",
      -        "write-timeout" : null
      -    }},
      -    "https-listener" : null
      -}
      -
      -
      -
    • -
    • -

      Using POST

      -
      -
      -
      $ curl --digest -D - http://localhost:9990/management --header "Content-Type: application/json" -d '{"operation":"read-resource", "include-runtime":"true" , "recursive":"true", "address":["subsystem","undertow","server","default-server"], "json.pretty":1}' -u admin:admin
      -HTTP/1.1 401 Unauthorized
      -Connection: keep-alive
      -WWW-Authenticate: Digest realm="ManagementRealm",domain="/management",nonce="a3paQ9E0/l8NMTQwNjg5OTU0NDk4OKjmim2lopZNc5zCevjYWpk=",opaque="00000000000000000000000000000000",algorithm=MD5
      -Content-Length: 77
      -Content-Type: text/html
      -Date: Fri, 01 Aug 2014 13:25:44 GMT
      -
      -HTTP/1.1 200 OK
      -Connection: keep-alive
      -Authentication-Info: nextnonce="nTOSJd3ufO4NMTQwNjg5OTU0NDk5MeUsRw5rKXUT4Qvk1nbrG5c="
      -Content-Type: application/json; charset=utf-8
      -Content-Length: 1729
      -Date: Fri, 01 Aug 2014 13:25:45 GMT
      -
      -{
      -    "outcome" : "success",
      -    "result" : {
      -        "default-host" : "default-host",
      -        "servlet-container" : "default",
      -        "ajp-listener" : null,
      -        "host" : {"default-host" : {
      -            "alias" : ["localhost"],
      -            "default-web-module" : "ROOT.war",
      -            "filter-ref" : {
      -                "server-header" : {"predicate" : null},
      -                "x-powered-by-header" : {"predicate" : null}
      -            },
      -            "location" : {"/" : {
      -                "handler" : "welcome-content",
      -                "filter-ref" : null
      -            }},
      -            "setting" : null
      -        }},
      -        "http-listener" : {"default" : {
      -            "allow-encoded-slash" : false,
      -            "allow-equals-in-cookie-value" : false,
      -            "always-set-keep-alive" : true,
      -            "buffer-pipelined-data" : true,
      -            "buffer-pool" : "default",
      -            "certificate-forwarding" : false,
      -            "decode-url" : true,
      -            "enabled" : true,
      -            "max-buffered-request-size" : 16384,
      -            "max-cookies" : 200,
      -            "max-header-size" : 51200,
      -            "max-headers" : 200,
      -            "max-parameters" : 1000,
      -            "max-post-size" : 10485760,
      -            "proxy-address-forwarding" : false,
      -            "read-timeout" : null,
      -            "receive-buffer" : null,
      -            "record-request-start-time" : false,
      -            "redirect-socket" : "https",
      -            "send-buffer" : null,
      -            "socket-binding" : "http",
      -            "tcp-backlog" : null,
      -            "tcp-keep-alive" : null,
      -            "url-charset" : "UTF-8",
      -            "worker" : "default",
      -            "write-timeout" : null
      -        }},
      -        "https-listener" : null
      -    }
      -}
      -
      -
      -
    • -
    -
    -
  • -
  • -

    You may also used some encoded DMR but the result won’t be human -readable

    -
    -
    -
    curl --digest -u admin:admin --header "Content-Type: application/dmr-encoded" -d bwAAAAMACW9wZXJhdGlvbnMADXJlYWQtcmVzb3VyY2UAB2FkZHJlc3NsAAAAAAAHcmVjdXJzZVoB  http://localhost:9990/management
    -
    -
    -
  • -
  • -

    You can deploy applications on the server

    -
    -
      -
    • -

      First upload the file which will create a managed content. You will -have to use http://localhost:9990/management/add-content

      -
      -
      -
      curl --digest -u admin:admin --form file=@tiny-webapp.war  http://localhost:9990/management/add-content
      -{"outcome" : "success", "result" : { "BYTES_VALUE" : "+QJlHTDrogO9pm/57GkT/vxWNz0=" }}
      -
      -
      -
    • -
    • -

      Now let’s deploy the application

      -
      -
      -
      curl --digest -u admin:admin -L --header "Content-Type: application/json" -d '{"content":[{"hash": {"BYTES_VALUE" : "+QJlHTDrogO9pm/57GkT/vxWNz0="}}], "address": [{"deployment":"tiny-webapp.war"}], "operation":"add", "enabled":"true"}' http://localhost:9990/management
      -{"outcome" : "success"}
      -
      -
      -
    • -
    -
    -
  • -
-
-
-
-

10.4.5. Using some Jakarta RESTful Web Services code

-
-
-
HttpAuthenticationFeature feature = HttpAuthenticationFeature.digest("admin", "admin");
-Client client = ClientBuilder.newClient();
-client.register(feature);
-Entity<SimpleOperation> operation = Entity.entity(
-    new SimpleOperation("read-resource", true, "subsystem", "undertow", "server", "default-server"),
-    MediaType.APPLICATION_JSON_TYPE);
-WebTarget managementResource = client.target("http://localhost:9990/management");
-String response = managementResource.request(MediaType.APPLICATION_JSON_TYPE)
-    .header("Content-type", MediaType.APPLICATION_JSON)
-    .post(operation, String.class);
-System.out.println(response);
-
-
-{"outcome" : "success", "result" : {"default-host" : "default-host", "servlet-container" : "default", "ajp-listener" : null, "host" : {"default-host" : {"alias" : ["localhost"], "default-web-module" : "ROOT.war", "filter-ref" : {"server-header" : {"predicate" : null}, "x-powered-by-header" : {"predicate" : null}}, "location" : {"/" : {"handler" : "welcome-content", "filter-ref" : null}}, "setting" : null}}, "http-listener" : {"default" : {"allow-encoded-slash" : false, "allow-equals-in-cookie-value" : false, "always-set-keep-alive" : true, "buffer-pipelined-data" : true, "buffer-pool" : "default", "certificate-forwarding" : false, "decode-url" : true, "enabled" : true, "max-buffered-request-size" : 16384, "max-cookies" : 200, "max-header-size" : 51200, "max-headers" : 200, "max-parameters" : 1000, "max-post-size" : 10485760, "proxy-address-forwarding" : false, "read-timeout" : null, "receive-buffer" : null, "record-request-start-time" : false, "redirect-socket" : "https", "send-buffer" : null, "socket-binding" : "http", "tcp-backlog" : null, "tcp-keep-alive" : null, "url-charset" : "UTF-8", "worker" : "default", "write-timeout" : null}}, "https-listener" : null}}
-
-
-
-
-
-

10.5. The native management API

-
-

A standalone WildFly process, or a managed domain Domain Controller or -secondary Host Controller process can be configured to listen for remote -management requests using its "native management interface":

-
-
-
-
<native-interface interface="management" port="9999" sasl-authentication-factory="management-sasl-authentication"/>
-
-
-
-

~(See standalone/configuration/standalone.xml or -domain/configuration/host.xml)~

-
-
-

The CLI tool that comes with the application server uses this interface, -and user can develop custom clients that use it as well. In this section -we’ll cover the basics on how to develop such a client. We’ll also cover -details on the format of low-level management operation requests and -responses – information that should prove useful for users of the CLI -tool as well.

-
-
-

10.5.1. Native Management Client Dependencies

-
-

The native management interface uses an open protocol based on the JBoss -Remoting library. JBoss Remoting is used to establish a communication -channel from the client to the process being managed. Once the -communication channel is established the primary traffic over the -channel is management requests initiated by the client and asynchronous -responses from the target process.

-
-
-

A custom Java-based client should have the maven artifact -org.jboss.as:jboss-as-controller-client and its dependencies on the -classpath. The other dependencies are:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Maven ArtifactPurpose

org.jboss.remoting:jboss-remoting

Remote communication

org.jboss:jboss-dmr

Detyped representation of the management model

org.jboss.as:jboss-as-protocol

Wire protocol for remote WildFly -management

org.jboss.sasl:jboss-sasl

SASL authentication

org.jboss.xnio:xnio-api

Non-blocking IO

org.jboss.xnio:xnio-nio

Non-blocking IO

org.jboss.logging:jboss-logging

Logging

org.jboss.threads:jboss-threads

Thread management

org.jboss.marshalling:jboss-marshalling

Marshalling and unmarshalling -data to/from streams

-
-

The client API is entirely within the -org.jboss.as:jboss-as-controller-client artifact; the other -dependencies are part of the internal implementation of -org.jboss.as:jboss-as-controller-client and are not compile-time -dependencies of any custom client based on it.

-
-
-

The management protocol is an open protocol, so a completely custom -client could be developed without using these libraries (e.g. using -Python or some other language.)

-
-
-
-

10.5.2. Working with a ModelControllerClient

-
-

The org.jboss.as.controller.client.ModelControllerClient class is the -main class a custom client would use to manage a WildFly server instance -or a Domain Controller or secondary Host Controller.

-
-
-

The custom client must have maven artifact -org.jboss.as:jboss-as-controller-client and its dependencies on the -classpath.

-
-
-
Creating the ModelControllerClient
-
-

To create a management client that can connect to your target process’s -native management socket, simply:

-
-
-
-
ModelControllerClient client = ModelControllerClient.Factory.create(InetAddress.getByName("localhost"), 9999);
-
-
-
-

The address and port are what is configured in the target process' -<management><management-interfaces><native-interface…​/> element.

-
-
-

Typically, however, the native management interface will be secured, -requiring clients to authenticate. On the client side, the custom client -will need to provide the user’s authentication credentials, obtained in -whatever manner is appropriate for the client (e.g. from a dialog box in -a GUI-based client.) Access to these credentials is provided by passing -in an implementation of the -javax.security.auth.callback.CallbackHandler interface. For example:

-
-
-
-
static ModelControllerClient createClient(final InetAddress host, final int port,
-                  final String username, final char[] password, final String securityRealmName) {
- 
-    final CallbackHandler callbackHandler = new CallbackHandler() {
- 
-        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
-            for (Callback current : callbacks) {
-                if (current instanceof NameCallback) {
-                    NameCallback ncb = (NameCallback) current;
-                    ncb.setName(username);
-                } else if (current instanceof PasswordCallback) {
-                    PasswordCallback pcb = (PasswordCallback) current;
-                    pcb.setPassword(password.toCharArray());
-                } else if (current instanceof RealmCallback) {
-                    RealmCallback rcb = (RealmCallback) current;
-                    rcb.setText(rcb.getDefaultText());
-                } else {
-                    throw new UnsupportedCallbackException(current);
-                }
-            }
-        }
-    };
- 
-    return ModelControllerClient.Factory.create(host, port, callbackHandler);
-}
-
-
-
-
-
Creating an operation request object
-
-

Management requests are formulated using the org.jboss.dmr.ModelNode -class from the jboss-dmr library. The jboss-dmr library allows the -complete WildFly management model to be expressed using a very small -number of Java types. See -Detyped -management and the jboss-dmr library for full details on using this -library.

-
-
-

Let’s show an example of creating an operation request object that can -be used to -read -the resource description for the web subsystem’s HTTP connector:

-
-
-
-
ModelNode op = new ModelNode();
-op.get("operation").set("read-resource-description");
- 
-ModelNode address = op.get("address");
-address.add("subsystem", "web");
-address.add("connector", "http");
- 
-op.get("recursive").set(true);
-op.get("operations").set(true);
-
-
-
-

What we’ve done here is created a ModelNode of type ModelType.OBJECT -with the following fields:

-
-
-
    -
  • -

    operation – the name of the operation to invoke. All operation -requests must include this field and its value must be a String.

    -
  • -
  • -

    address – the address of the resource to invoke the operation -against. This field’s must be of ModelType.LIST with each element in -the list being a ModelType.PROPERTY. If this field is omitted the -operation will target the root resource. The operation can be targeted -at any address in the management model; here we are targeting it at the -resource for the web subsystem’s http connector.

    -
  • -
-
-
-

In this case, the request includes two optional parameters:

-
-
-
    -
  • -

    recursive – true means you want the description of child resources -under this resource. Default is false

    -
  • -
  • -

    operations – true means you want the description of operations -exposed by the resource to be included. Default is false.

    -
  • -
-
-
-

Different operations take different parameters, and some take no -parameters at all.

-
-
-

See Format of a -Detyped Operation Request for full details on the structure of a -ModelNode that will represent an operation request.

-
-
-

The example above produces an operation request ModelNode equivalent to -what the CLI produces internally when it parses and executes the -following low-level CLI command:

-
-
-
-
[localhost:9999 /] /subsystem=web/connector=http:read-resource-description(recursive=true,operations=true)
-
-
-
-
-
Execute the operation and manipulate the result:
-
-

The execute method sends the operation request ModelNode to the -process being managed and returns a ModelNode the contains the process' -response:

-
-
-
-
ModelNode returnVal = client.execute(op);
-System.out.println(returnVal.get("result").toString());
-
-
-
-

See Format of a -Detyped Operation Response for general details on the structure of the -"returnVal" ModelNode.

-
-
-

The execute operation shown above will block the calling thread until -the response is received from the process being managed. -ModelControllerClient also exposes and API allowing asynchronous -invocation:

-
-
-
-
Future<ModelNode> future = client.executeAsync(op);
-. . .  // do other stuff
-ModelNode returnVal = future.get();
-System.out.println(returnVal.get("result").toString());
-
-
-
-
-
Close the ModelControllerClient
-
-

A ModelControllerClient can be reused for multiple requests. Creating -a new ModelControllerClient for each request is an anti-pattern. -However, when the ModelControllerClient is no longer needed, it should -always be explicitly closed, allowing it to close down any connections -to the process it was managing and release other resources:

-
-
-
-
client.close();
-
-
-
-
-
-

10.5.3. Format of a Detyped Operation Request

-
-

The basic method a user of the WildFly 29 programmatic management API -would use is very simple:

-
-
-
-
ModelNode execute(ModelNode operation) throws IOException;
-
-
-
-

where the return value is the detyped representation of the response, -and operation is the detyped representation of the operation being -invoked.

-
-
-

The purpose of this section is to document the structure of operation.

-
-
-

See Format of a -Detyped Operation Response for a discussion of the format of the -response.

-
-
-
Simple Operations
-
-

A text representation of simple operation would look like this:

-
-
-
-
{
-    "operation" => "write-attribute",
-    "address" => [
-        ("profile" => "production"),
-        ("subsystem" => "threads"),
-        ("bounded-queue-thread-pool" => "pool1")
-    ],
-    "name" => "count",
-    "value" => 20
-}
-
-
-
-

Java code to produce that output would be:

-
-
-
-
ModelNode op = new ModelNode();
-op.get("operation").set("write-attribute");
-ModelNode addr = op.get("address");
-addr.add("profile", "production");
-addr.add("subsystem", "threads");
-addr.add("bounded-queue-thread-pool", "pool1");
-op.get("name").set("count");
-op.get("value").set(20);
-System.out.println(op);
-
-
-
-

The order in which the outermost elements appear in the request is not -relevant. The required elements are:

-
-
-
    -
  • -

    operation – String – The name of the operation being invoked.

    -
  • -
  • -

    address – the address of the managed resource against which the -request should be executed. If not set, the address is the root -resource. The address is an ordered list of key-value pairs describing -where the resource resides in the overall management resource tree. -Management resources are organized in a tree, so the order in which -elements in the address occur is important.

    -
  • -
-
-
-

The other key/value pairs are parameter names and their values. The -names and values should match what is specified in the -operation’s -description.

-
-
-

Parameters may have any name, except for the reserved words operation, -address and operation-headers.

-
-
-
-
Operation Headers
-
-

Besides the special operation and address values discussed above, -operation requests can also include special "header" values that help -control how the operation executes. These headers are created under the -special reserved word operation-headers:

-
-
-
-
ModelNode op = new ModelNode();
-op.get("operation").set("write-attribute");
-ModelNode addr = op.get("address");
-addr.add("base", "domain");
-addr.add("profile", "production");
-addr.add("subsystem", "threads");
-addr.add("bounded-queue-thread-pool", "pool1");
-op.get("name").set("count");
-op.get("value").set(20);
-op.get("operation-headers", "rollback-on-runtime-failure").set(false);
-System.out.println(op);
-
-
-
-

This produces:

-
-
-
-
{
-    "operation" => "write-attribute",
-    "address" => [
-        ("profile" => "production"),
-        ("subsystem" => "threads"),
-        ("bounded-queue-thread-pool" => "pool1")
-    ],
-    "name" => "count",
-    "value" => 20,
-    "operation-headers" => {
-        "rollback-on-runtime-failure => false
-    }
-}
-
-
-
-

The following operation headers are supported:

-
-
-
    -
  • -

    rollback-on-runtime-failure – boolean, optional, defaults to true. -Whether an operation that successfully updates the persistent -configuration model should be reverted if it fails to apply to the -runtime. Operations that affect the persistent configuration are applied -in two stages – first to the configuration model and then to the actual -running services. If there is an error applying to the configuration -model the operation will be aborted with no configuration change and no -change to running services will be attempted. However, operations are -allowed to change the configuration model even if there is a failure to -apply the change to the running services – if and only if this -rollback-on-runtime-failure header is set to false. So, this header -only deals with what happens if there is a problem applying an operation -to the running state of a server (e.g. actually increasing the size of a -runtime thread pool.)

    -
  • -
  • -

    rollout-plan – only relevant to requests made to a Domain Controller -or Host Controller. See " -Operations with a -Rollout Plan" for details.

    -
  • -
  • -

    allow-resource-service-restart – boolean, optional, defaults to -false. Whether an operation that requires restarting some runtime -services in order to take effect should do so. See discussion of -resource-services in the -"Applying -Updates to Runtime Services" section of the Description of the -Management Model section for further details.

    -
  • -
  • -

    roles – String or list of strings. Name(s) of RBAC role(s) the -permissions for which should be used when making access control -decisions instead of those from the roles normally associated with the -user invoking the operation. Only respected if the user is normally -associated with a role with all permissions (i.e. SuperUser), meaning -this can only be used to reduce permissions for a caller, not to -increase permissions.

    -
  • -
  • -

    blocking-timeout – int, optional, defaults to 300. Maximum time, in -seconds, that the operation should block at various points waiting for -completion. If this period is exceeded, the operation will roll back. -Does not represent an overall maximum execution time for an operation; -rather it is meant to serve as a sort of fail-safe measure to prevent -problematic operations indefinitely tying up resources.

    -
  • -
-
-
-
-
Composite Operations
-
-

The root resource for a Domain or Host Controller or an individual -server will expose an operation named " `composite`". This operation -executes a list of other operations as an atomic unit (although the -atomicity requirement can be -relaxed. -The structure of the request for the " `composite`" operation has the -same fundamental structure as a simple operation (i.e. operation name, -address, params as key value pairs).

-
-
-
-
{
-    "operation" => "composite",
-    "address" => [],
-    "steps" => [
-         {
-              "operation" => "write-attribute",
-              "address" => [
-                   ("profile" => "production"),
-                   ("subsystem" => "threads"),
-                   ("bounded-queue-thread-pool" => "pool1")
-              ],
-              "count" => "count",
-              "value" => 20
-         },
-         {
-              "operation" => "write-attribute",
-              "address" => [
-                   ("profile" => "production"),
-                   ("subsystem" => "threads"),
-                   ("bounded-queue-thread-pool" => "pool2")
-              ],
-              "name" => "count",
-              "value" => 10
-         }
-    ],
-    "operation-headers" => {
-        "rollback-on-runtime-failure => false
-    }
-}
-
-
-
-

The "composite" operation takes a single parameter:

-
-
-
    -
  • -

    steps – a list, where each item in the list has the same structure -as a simple operation request. In the example above each of the two -steps is modifying the thread pool configuration for a different pool. -There need not be any particular relationship between the steps. Note -that the rollback-on-runtime-failure and rollout-plan operation -headers are not supported for the individual steps in a composite -operation.

    -
    -
    -
     +
    -The `rollback-on-runtime-failure` operation header discussed above has a
    -particular meaning when applied to a composite operation, controlling
    -whether steps that successfully execute should be reverted if other
    -steps fail at runtime. Note that if any steps modify the persistent
    -configuration, and any of those steps fail, all steps will be reverted.
    -Partial/incomplete changes to the persistent configuration are not
    -allowed.
    -
    -
    -
  • -
-
-
-
-
Operations with a Rollout Plan
-
-

Operations targeted at domain or host level resources can potentially -impact multiple servers. Such operations can include a "rollout plan" -detailing the sequence in which the operation should be applied to -servers as well as policies for detailing whether the operation should -be reverted if it fails to execute successfully on some servers.

-
-
-

If the operation includes a rollout plan, the structure is as follows:

-
-
-
-
{
-    "operation" => "write-attribute",
-    "address" => [
-        ("profile" => "production"),
-        ("subsystem" => "threads"),
-        ("bounded-queue-thread-pool" => "pool1")
-    ],
-    "name" => "count",
-    "value" => 20,
-    "operation-headers" => {
-        "rollout-plan" => {
-            "in-series" => [
-                {
-                    "concurrent-groups" => {
-                        "groupA" => {
-                            "rolling-to-servers" => true,
-                            "max-failure-percentage" => 20
-                        },
-                        "groupB" => undefined
-                    }
-                },
-                {
-                   "server-group" => {
-                        "groupC" => {
-                            "rolling-to-servers" => false,
-                            "max-failed-servers" => 1
-                        }
-                    }
-                },
-                {
-                    "concurrent-groups" => {
-                        "groupD" => {
-                            "rolling-to-servers" => true,
-                            "max-failure-percentage" => 20
-                        },
-                        "groupE" => undefined
-                    }
-                }
-            ],
-            "rollback-across-groups" => true
-        }
-    }
-}
-
-
-
-

As you can see, the rollout plan is another structure in the -operation-headers section. The root node of the structure allows two -children:

-
-
-
    -
  • -

    in-series – a list – A list of activities that are to be performed -in series, with each activity reaching completion before the next step -is executed. Each activity involves the application of the operation to -the servers in one or more server groups. See below for details on each -element in the list.

    -
  • -
  • -

    rollback-across-groups – boolean – indicates whether the need to -rollback the operation on all the servers in one server group should -trigger a rollback across all the server groups. This is an optional -setting, and defaults to false.

    -
  • -
-
-
-

Each element in the list under the in-series node must have one or the -other of the following structures:

-
-
-
    -
  • -

    concurrent-groups – a map of server group names to policies -controlling how the operation should be applied to that server group. -For each server group in the map, the operation may be applied -concurrently. See below for details on the per-server-group policy -configuration.

    -
  • -
  • -

    server-group – a single key/value mapping of a server group name to -a policy controlling how the operation should be applied to that server -group. See below for details on the policy configuration. (Note: there -is no difference in plan execution between this and a " -`concurrent-groups`" map with a single entry.)

    -
  • -
-
-
-

The policy controlling how the operation is applied to the servers -within a server group has the following elements, each of which is -optional:

-
-
-
    -
  • -

    rolling-to-servers – boolean – If true, the operation will be -applied to each server in the group in series. If false or not -specified, the operation will be applied to the servers in the group -concurrently.

    -
  • -
  • -

    max-failed-servers – int – Maximum number of servers in the group -that can fail to apply the operation before it should be reverted on all -servers in the group. The default value if not specified is zero; i.e. -failure on any server triggers rollback across the group.

    -
  • -
  • -

    max-failure-percentage – int between 0 and 100 – Maximum percentage -of the total number of servers in the group that can fail to apply the -operation before it should be reverted on all servers in the group. The -default value if not specified is zero; i.e. failure on any server -triggers rollback across the group.

    -
  • -
-
-
-

If both max-failed-servers and max-failure-percentage are set, -max-failure-percentage takes precedence.

-
-
-

Looking at the (contrived) example above, application of the operation -to the servers in the domain would be done in 3 phases. If the policy -for any server group triggers a rollback of the operation across the -server group, all other server groups will be rolled back as well. The 3 -phases are:

-
-
-
    -
  1. -

    Server groups groupA and groupB will have the operation applied -concurrently. The operation will be applied to the servers in groupA in -series, while all servers in groupB will handle the operation -concurrently. If more than 20% of the servers in groupA fail to apply -the operation, it will be rolled back across that group. If any servers -in groupB fail to apply the operation it will be rolled back across that -group.

    -
  2. -
  3. -

    Once all servers in groupA and groupB are complete, the operation -will be applied to the servers in groupC. Those servers will handle the -operation concurrently. If more than one server in groupC fails to apply -the operation it will be rolled back across that group.

    -
  4. -
  5. -

    Once all servers in groupC are complete, server groups groupD and -groupE will have the operation applied concurrently. The operation will -be applied to the servers in groupD in series, while all servers in -groupE will handle the operation concurrently. If more than 20% of the -servers in groupD fail to apply the operation, it will be rolled back -across that group. If any servers in groupE fail to apply the operation -it will be rolled back across that group.

    -
  6. -
-
-
-
Default Rollout Plan
-
-

All operations that impact multiple servers will be executed with a -rollout plan. However, actually specifying the rollout plan in the -operation request is not required. If no rollout-plan operation header -is specified, a default plan will be generated. The plan will have the -following characteristics:

-
-
-
    -
  • -

    There will only be a single high level phase. All server groups -affected by the operation will have the operation applied concurrently.

    -
  • -
  • -

    Within each server group, the operation will be applied to all servers -concurrently.

    -
  • -
  • -

    Failure on any server in a server group will cause rollback across the -group.

    -
  • -
  • -

    Failure of any server group will result in rollback of all other -server groups.

    -
  • -
-
-
-
-
Creating and reusing a Rollout Plan
-
-

Since a rollout plan may be quite complex, having to pass it as a header -every time can become quickly painful. So instead we can store it in the -model and then reference it when we want to use it.
-To create a rollout plan you can use the operation rollout-plan add -like this :

-
-
-
-
rollout-plan add --name=simple --content={"rollout-plan" => {"in-series" => [{"server-group" => {"main-server-group" => {"rolling-to-servers" => false,"max-failed-servers" => 1}}}, {"server-group" => {"other-server-group" => {"rolling-to-servers" => true,"max-failure-percentage" => 20}}}],"rollback-across-groups" => true}}
-
-
-
-

This will create a rollout plan called simple in the content -repository.

-
-
-
-
[domain@192.168.1.20:9999 /] /management-client-content=rollout-plans/rollout-plan=simple:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "content" => {"rollout-plan" => {
-            "in-series" => [
-                {"server-group" => {"main-server-group" => {
-                    "rolling-to-servers" => false,
-                    "max-failed-servers" => 1
-                }}},
-                {"server-group" => {"other-server-group" => {
-                    "rolling-to-servers" => true,
-                    "max-failure-percentage" => 20
-                }}}
-            ],
-            "rollback-across-groups" => true
-        }},
-        "hash" => bytes {
-            0x13, 0x12, 0x76, 0x65, 0x8a, 0x28, 0xb8, 0xbc,
-            0x34, 0x3c, 0xe9, 0xe6, 0x9f, 0x24, 0x05, 0xd2,
-            0x30, 0xff, 0xa4, 0x34
-        }
-    }
-}
-
-
-
-

Now you may reference the roolout plan in your command by adding a -header just like this :

-
-
-
-
deploy /quickstart/ejb-in-war/target/wildfly-ejb-in-war.war --all-server-groups --headers={rollout name=simple}
-
-
-
-
-
-
-

10.5.4. Format of a Detyped Operation Response

-
-

As noted previously, the basic method a user of the WildFly 29 -programmatic management API would use is very simple:

-
-
-
-
ModelNode execute(ModelNode operation) throws IOException;
-
-
-
-

where the return value is the detyped representation of the response, -and operation is the detyped representation of the operating being -invoked.

-
-
-

The purpose of this section is to document the structure of the return -value.

-
-
-

For the format of the request, see -Format of a -Detyped Operation Request.

-
-
-
Simple Responses
-
-

Simple responses are provided by the following types of operations:

-
-
-
    -
  • -

    Non-composite operations that target a single server. (See below for -more on composite operations).

    -
  • -
  • -

    Non-composite operations that target a Domain Controller or secondary Host -Controller and don’t require the responder to apply the operation on -multiple servers and aggregate their results (e.g. a simple read of a -domain configuration property.)

    -
  • -
-
-
-

The response will always include a simple boolean outcome field, with -one of three possible values:

-
-
-
    -
  • -

    success – the operation executed successfully

    -
  • -
  • -

    failed – the operation failed

    -
  • -
  • -

    cancelled – the execution of the operation was cancelled. (This -would be an unusual outcome for a simple operation which would generally -very rapidly reach a point in its execution where it couldn’t be -cancelled.)

    -
  • -
-
-
-

The other fields in the response will depend on whether the operation -was successful.

-
-
-

The response for a failed operation:

-
-
-
-
{
-    "outcome" => "failed",
-    "failure-description" => "[JBAS-12345] Some failure message"
-}
-
-
-
-

A response for a successful operation will include an additional field:

-
-
-
    -
  • -

    result – the return value, or undefined for void operations or -those that return null

    -
  • -
-
-
-

A non-void result:

-
-
-
-
{
-    "outcome" => "success",
-    "result" => {
-        "name" => "Brian",
-        "age" => 22
-    }
-}
-
-
-
-

A void result:

-
-
-
-
{
-    "outcome" => "success",
-    "result" => undefined
-}
-
-
-
-

The response for a cancelled operation has no other fields:

-
-
-
-
{
-    "outcome" => "cancelled"
-}
-
-
-
-
-
Response Headers
-
-

Besides the standard outcome, result and failure-description -fields described above, the response may also include various headers -that provide more information about the affect of the operation or about -the overall state of the server. The headers will be child element under -a field named response-headers. For example:

-
-
-
-
{
-    "outcome" => "success",
-    "result" => undefined,
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-

A response header is typically related to whether an operation could be -applied to the targeted runtime without requiring a restart of some or -all services, or even of the target process itself. Please see the -"Applying -Updates to Runtime Services" section of the Description of the -Management Model section for a discussion of the basic concepts related -to what happens if an operation requires a service restart to be -applied.

-
-
-

The current possible response headers are:

-
-
-
    -
  • -

    operation-requires-reload – boolean – indicates that the specific -operation that has generated this response requires a restart of all -services in the process in order to take effect in the runtime. This -would typically only have a value of 'true'; the absence of the header -is the same as a value of 'false.'

    -
  • -
  • -

    operation-requires-restart – boolean – indicates that the specific -operation that has generated this response requires a full process -restart in order to take effect in the runtime. This would typically -only have a value of 'true'; the absence of the header is the same as a -value of 'false.'

    -
  • -
  • -

    process-state – enumeration – Provides information about the overall -state of the target process. One of the following values:

    -
    -
      -
    • -

      starting – the process is starting

      -
    • -
    • -

      running – the process is in a normal running state. The -process-state header would typically not be seen with this value; the -absence of the header is the same as a value of 'running'.

      -
    • -
    • -

      reload-required – some operation (not necessarily this one) has -executed that requires a restart of all services in order for a -configuration change to take effect in the runtime.

      -
    • -
    • -

      restart-required – some operation (not necessarily this one) has -executed that requires a full process restart in order for a -configuration change to take effect in the runtime.

      -
    • -
    • -

      stopping – the process is stopping

      -
    • -
    -
    -
  • -
-
-
-
-
Basic Composite Operation Responses
-
-

A composite operation is one that incorporates more than one simple -operation in a list and executes them atomically. See the -"Composite -Operations" section for more information.

-
-
-

Basic composite responses are provided by the following types of -operations:

-
-
-
    -
  • -

    Composite operations that target a single server.

    -
  • -
  • -

    Composite operations that target a Domain Controller or a secondary Host -Controller and don’t require the responder to apply the operation on -multiple servers and aggregate their results (e.g. a list of simple -reads of domain configuration properties.)

    -
  • -
-
-
-

The high level format of a basic composite operation response is largely -the same as that of a simple operation response, although there is an -important semantic difference. For a composite operation, the meaning of -the outcome flag is controlled by the value of the operation request’s -rollback-on-runtime-failure header field. If that field was false -(default is true), the outcome flag will be success if all steps were -successfully applied to the persistent configuration even if none of -the composite operation’s steps was successfully applied to the runtime.

-
-
-

What’s distinctive about a composite operation response is the result -field. First, even if the operation was not successful, the result -field will usually be present. (It won’t be present if there was some -sort of immediate failure that prevented the responder from even -attempting to execute the individual operations.) Second, the content of -the result field will be a map. Each entry in the map will record the -result of an element in the steps parameter of the composite operation -request. The key for each item in the map will be the string " step-X`" -where "X" is the 1-based index of the step’s position in the request’s -`steps list. So each individual operation in the composite operation -will have its result recorded.

-
-
-

The individual operation results will have the same basic format as the -simple operation results described above. However, there are some -differences from the simple operation case when the individual -operation’s outcome flag is failed. These relate to the fact that in -a composite operation, individual operations can be rolled back or not -even attempted.

-
-
-

If an individual operation was not even attempted (because the overall -operation was cancelled or, more likely, a prior operation failed):

-
-
-
-
{
-    "outcome" => "cancelled"
-}
-
-
-
-

An individual operation that failed and was rolled back:

-
-
-
-
{
-    "outcome" => "failed",
-    "failure-description" => "[JBAS-12345] Some failure message",
-    "rolled-back" => true
-}
-
-
-
-

An individual operation that itself succeeded but was rolled back due to -failure of another operation:

-
-
-
-
{
-    "outcome" => "failed",
-    "result" => {
-        "name" => "Brian",
-        "age" => 22
-    },
-    "rolled-back" => true
-}
-
-
-
-

An operation that failed and was rolled back:

-
-
-
-
{
-    "outcome" => "failed",
-    "failure-description" => "[JBAS-12345] Some failure message",
-    "rolled-back" => true
-}
-
-
-
-

Here’s an example of the response for a successful 2 step composite -operation:

-
-
-
-
{
-    "outcome" => "success",
-    "result" => [
-        {
-            "outcome" => "success",
-            "result" => {
-                "name" => "Brian",
-                "age" => 22
-            }
-        },
-        {
-            "outcome" => "success",
-            "result" => undefined
-        }
-    ]
-}
-
-
-
-

And for a failed 3 step composite operation, where the first step -succeeded and the second failed, triggering cancellation of the 3rd and -rollback of the others:

-
-
-
-
{
-    "outcome" => "failed",
-    "failure-description" => "[JBAS-99999] Composite operation failed; see individual operation results for details",
-    "result" => [
-        {
-            "outcome" => "failed",
-            "result" => {
-                "name" => "Brian",
-                "age" => 22
-            },
-            "rolled-back" => true
-        },
-        {
-            "outcome" => "failed",
-            "failure-description" => "[JBAS-12345] Some failure message",
-            "rolled-back" => true
-        },
-        {
-            "outcome" => "cancelled"
-        }
-    ]
-}
-
-
-
-
-
Multi-Server Responses
-
-

Multi-server responses are provided by operations that target a Domain -Controller or secondary Host Controller and require the responder to apply -the operation on multiple servers and aggregate their results (e.g. -nearly all domain or host configuration updates.)

-
-
-

Multi-server operations are executed in several stages.

-
-
-

First, the operation may need to be applied against the authoritative -configuration model maintained by the Domain Controller (for -domain.xml confgurations) or a Host Controller (for a host.xml -configuration). If there is a failure at this stage, the operation is -automatically rolled back, with a response like this:

-
-
-
-
{
-    "outcome" => "failed",
-    "failure-description" => {
-        "domain-failure-description" => "[JBAS-33333] Failed to apply X to the domain model"
-    }
-}
-
-
-
-

If the operation was addressed to the domain model, in the next stage -the Domain Controller will ask each secondary Host Controller to apply it to -its local copy of the domain model. If any Host Controller fails to do -so, the Domain Controller will tell all Host Controllers to revert the -change, and it will revert the change locally as well. The response to -the client will look like this:

-
-
-
-
{
-    "outcome" => "failed",
-    "failure-description" => {
-        "host-failure-descriptions" => {
-            "hostA" => "[DOM-3333] Failed to apply to the domain model",
-            "hostB" => "[DOM-3333] Failed to apply to the domain model"
-        }
-    }
-}
-
-
-
-

If the preceding stages succeed, the operation will be pushed to all -affected servers. If the operation is successful on all servers, the -response will look like this (this example operation has a void -response, hence the result for each server is undefined):

-
-
-
-
{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {
-        "groupA" => {
-            "serverA-1" => {
-                "host" => "host1",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined
-                }
-            },
-            "serverA-2" => {
-                "host" => "host2",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined
-                }
-            }
-        },
-        "groupB" => {
-            "serverB-1" => {
-                "host" => "host1",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined
-                }
-            },
-            "serverB-2" => {
-                "host" => "host2",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined
-                }
-            }
-        }
-    }
-}
-
-
-
-

The operation need not succeed on all servers in order to get an -"outcome" ⇒ "success" result. All that is required is that it succeed -on at least one server without the rollback policies in the rollout plan -triggering a rollback on that server. An example response in such a -situation would look like this:

-
-
-
-
{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {
-        "groupA" => {
-            "serverA-1" => {
-                "host" => "host1",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined
-                }
-            },
-            "serverA-2" => {
-                "host" => "host2",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined
-                }
-            }
-        },
-        "groupB" => {
-            "serverB-1" => {
-                "host" => "host1",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined,
-                    "rolled-back" => true
-                }
-            },
-            "serverB-2" => {
-                "host" => "host2",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined,
-                    "rolled-back" => true
-                }
-            },
-            "serverB-3" => {
-                "host" => "host3",
-                "response" => {
-                    "outcome" => "failed",
-                    "failure-description" => "[DOM-4556] Something didn't work right",
-                    "rolled-back" => true
-                }
-            }
-        }
-    }
-}
-
-
-
-

Finally, if the operation fails or is rolled back on all servers, an -example response would look like this:

-
-
-
-
{
-    "outcome" => "failed",
-    "server-groups" => {
-        "groupA" => {
-            "serverA-1" => {
-                "host" => "host1",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined
-                }
-            },
-            "serverA-2" => {
-                "host" => "host2",
-                "response" => {
-                    "outcome" => "success",
-                    "result" => undefined
-                }
-            }
-        },
-        "groupB" => {
-            "serverB-1" => {
-                "host" => "host1",
-                "response" => {
-                    "outcome" => "failed",
-                    "result" => undefined,
-                    "rolled-back" => true
-                }
-            },
-            "serverB-2" => {
-                "host" => "host2",
-                "response" => {
-                    "outcome" => "failed",
-                    "result" => undefined,
-                    "rolled-back" => true
-                }
-            },
-            "serverB-3" => {
-                "host" => "host3",
-                "response" => {
-                    "outcome" => "failed",
-                    "failure-description" => "[DOM-4556] Something didn't work right",
-                    "rolled-back" => true
-                }
-            }
-        }
-    }
-}
-
-
-
-
-
-
-
-
-

11. CLI Recipes

-
-
-

11.1. Properties

-
-

11.1.1. Adding, reading and removing system property using CLI

-
-

For standalone mode:

-
-
-
-
$ ./bin/jboss-cli.sh --connect controller=IP_ADDRESS
-[standalone@IP_ADDRESS:9990 /] /system-property=foo:add(value=bar)
-[standalone@IP_ADDRESS:9990 /] /system-property=foo:read-resource
-{
-    "outcome" => "success",
-    "result" => {"value" => "bar"}
-}
-[standalone@IP_ADDRESS:9990 /] /system-property=foo:remove
-{"outcome" => "success"}
-
-
-
-

For domain mode the same commands are used, you can add/read/remove -system properties for:
-All hosts and server instances in domain

-
-
-
-
[domain@IP_ADDRESS:9990 /] /system-property=foo:add(value=bar)
-[domain@IP_ADDRESS:9990 /] /system-property=foo:read-resource
-[domain@IP_ADDRESS:9990 /] /system-property=foo:remove
-
-
-
-

Host and its server instances

-
-
-
-
[domain@IP_ADDRESS:9990 /] /host=primary/system-property=foo:add(value=bar)
-[domain@IP_ADDRESS:9990 /] /host=primary/system-property=foo:read-resource
-[domain@IP_ADDRESS:9990 /] /host=primary/system-property=foo:remove
-
-
-
-

Just one server instance

-
-
-
-
[domain@IP_ADDRESS:9990 /] /host=primary/server-config=server-one/system-property=foo:add(value=bar)
-[domain@IP_ADDRESS:9990 /] /host=primary/server-config=server-one/system-property=foo:read-resource
-[domain@IP_ADDRESS:9990 /] /host=primary/server-config=server-one/system-property=foo:remove
-
-
-
-
-

11.1.2. Overview of all system properties

-
-

Overview of all system properties in WildFly including OS system -properties and properties specified on command line using -D, -P or ---properties arguments.

-
-
-

Standalone

-
-
-
-
[standalone@IP_ADDRESS:9990 /] /core-service=platform-mbean/type=runtime:read-attribute(name=system-properties)
-
-
-
-

Domain

-
-
-
-
[domain@IP_ADDRESS:9990 /] /host=primary/core-service=platform-mbean/type=runtime:read-attribute(name=system-properties)
-[domain@IP_ADDRESS:9990 /] /host=primary/server=server-one/core-service=platform-mbean/type=runtime:read-attribute(name=system-properties)
-
-
-
-
-
-

11.2. Configuration

-
-

11.2.1. List Subsystems

-
-
-
[standalone@localhost:9990 /] /:read-children-names(child-type=subsystem)
-{
-    "outcome" => "success",
-    "result" => [
-        "batch",
-        "datasources",
-        "deployment-scanner",
-        "ee",
-        "ejb3",
-        "infinispan",
-        "io",
-        "jaxrs",
-        "jca",
-        "jdr",
-        "jmx",
-        "jpa",
-        "jsf",
-        "logging",
-        "mail",
-        "naming",
-        "pojo",
-        "remoting",
-        "resource-adapters",
-        "sar",
-        "security",
-        "threads",
-        "transactions",
-        "undertow",
-        "webservices",
-        "weld"
-    ]
-}
-
-
-
-
-

11.2.2. List description of available attributes and childs

-
-

Descriptions, possible attribute type and values, permission and whether -expressions ( $\{ …​ } ) are allowed from the underlying model are -shown by the read-resource-description command.

-
-
-
-
/subsystem=datasources/data-source=ExampleDS:read-resource-description
-{
-    "outcome" => "success",
-    "result" => {
-        "description" => "A JDBC data-source configuration",
-        "head-comment-allowed" => true,
-        "tail-comment-allowed" => true,
-        "attributes" => {
-            "connection-url" => {
-                "type" => STRING,
-                "description" => "The JDBC driver connection URL",
-                "expressions-allowed" => true,
-                "nillable" => false,
-                "min-length" => 1L,
-                "max-length" => 2147483647L,
-                "access-type" => "read-write",
-                "storage" => "configuration",
-                "restart-required" => "no-services"
-            },
-            "driver-class" => {
-                "type" => STRING,
-                "description" => "The fully qualified name of the JDBC driver class",
-                "expressions-allowed" => true,
-                "nillable" => true,
-                "min-length" => 1L,
-                "max-length" => 2147483647L,
-                "access-type" => "read-write",
-                "storage" => "configuration",
-                "restart-required" => "no-services"
-            },
-            "datasource-class" => {
-                "type" => STRING,
-                "description" => "The fully qualified name of the JDBC datasource class",
-                "expressions-allowed" => true,
-                "nillable" => true,
-                "min-length" => 1L,
-                "max-length" => 2147483647L,
-                "access-type" => "read-write",
-                "storage" => "configuration",
-                "restart-required" => "no-services"
-            },
-            "jndi-name" => {
-                "type" => STRING,
-                "description" => "Specifies the JNDI name for the datasource",
-                "expressions-allowed" => true,
-                "nillable" => false,
-                "access-type" => "read-write",
-                "storage" => "configuration",
-                "restart-required" => "no-services"
-            },
-           ...
-
-
-
-
-

11.2.3. View configuration as XML for domain model or host model

-
-

Assume you have a host that is called "primary"

-
-
-
-
[domain@localhost:9990 /] /host=primary:read-config-as-xml
-
-
-
-

Just for the domain or standalone

-
-
-
-
[domain@localhost:9990 /] :read-config-as-xml
-
-
-
-
-

11.2.4. Take a snapshot of what the current domain is

-
-
-
[domain@localhost:9990 /] :take-snapshot()
-{
-    "outcome" => "success",
-    "result" => {
-        "domain-results" => {"step-1" => {"name" => "JBOSS_HOME/domain/configuration/domain_xml_history/snapshot/20110908-165222603domain.xml"}},
-        "server-operations" => undefined
-    }
-}
-
-
-
-
-

11.2.5. Take the latest snapshot of the host.xml for a particular host

-
-

Assume you have a host that is called "primary"

-
-
-
-
[domain@localhost:9990 /]  /host=primary:take-snapshot
-{
-    "outcome" => "success",
-    "result" => {
-        "domain-results" => {"step-1" => {"name" => "JBOSS_HOME/domain/configuration/host_xml_history/snapshot/20110908-165640215host.xml"}},
-        "server-operations" => undefined
-    }
-}
-
-
-
-
-

11.2.6. How to get interface address

-
-

The attribute for interface is named "resolved-address". It’s a runtime -attribute so it does not show up in :read-resource by default. You have -to add the "include-runtime" parameter.

-
-
-
-
./jboss-cli.sh --connect
-Connected to standalone controller at localhost:9990
-[standalone@localhost:9990 /] cd interface=public
-[standalone@localhost:9990 interface=public] :read-resource(include-runtime=true)
-{
-     "outcome" => "success",
-     "result" => {
-         "any" => undefined,
-         "any-address" => undefined,
-         "any-ipv4-address" => undefined,
-         "any-ipv6-address" => undefined,
-         "criteria" => [("inet-address" => expression "${jboss.bind.address:127.0.0.1}")],
-         "inet-address" => expression "${jboss.bind.address:127.0.0.1}",
-         "link-local-address" => undefined,
-         "loopback" => undefined,
-         "loopback-address" => undefined,
-         "multicast" => undefined,
-         "name" => "public",
-         "nic" => undefined,
-         "nic-match" => undefined,
-         "not" => undefined,
-         "point-to-point" => undefined,
-         "public-address" => undefined,
-         "resolved-address" => "127.0.0.1",
-         "site-local-address" => undefined,
-         "subnet-match" => undefined,
-         "up" => undefined,
-         "virtual" => undefined
-     }
-}
-[standalone@localhost:9990 interface=public] :read-attribute(name=resolved-address)
-{
-     "outcome" => "success",
-     "result" => "127.0.0.1"
-}
-
-
-
-

It’s similar for domain, just specify path to server instance:

-
-
-
-
[domain@localhost:9990 /] /host=primary/server=server-one/interface=public:read-attribute(name=resolved-address)
-{
-    "outcome" => "success",
-    "result" => "127.0.0.1"
-}
-
-
-
-
-
-

11.3. Runtime

-
-

11.3.1. Get all configuration and runtime details from CLI

-
-
-
./bin/jboss-cli.sh -c command=":read-resource(include-runtime=true, recursive=true, recursive-depth=10)"
-
-
-
-
-
-

11.4. Scripting

-
-

11.4.1. Windows and "Press any key to continue …​" issue

-
-

WildFly scripts for Windows end with "Press any key to continue …​". -This behavior is useful when script is executed by double clicking the -script but not when you need to invoke several commands from custom -script (e.g. 'bin/jboss-admin.bat --connect command=:shutdown').

-
-
-

To avoid "Press any key to continue …​" message you need to specify -NOPAUSE variable. Call 'set NOPAUSE=true' in command line before running -any WildFly 29 .bat script or include it in your custom script before -invoking scripts from WildFly.

-
-
-
-
-

11.5. Statistics

-
-

11.5.1. Read statistics of active datasources

-
-
-
/subsystem=datasources/data-source=ExampleDS/statistics=pool:read-resource(include-runtime=true)
-/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:read-resource(include-runtime=true)
-
-
-
-

or

-
-
-
-
/subsystem=datasources/data-source=ExampleDS:read-resource(include-runtime=true,recursive=true)
-
-
-
-
-
-

11.6. Deployment

-
-

11.6.1. CLI deployment command

-
-

In addition to the legacy deploy, undeploy and deployment-info commands, -that stay un-changed, the CLI offers a deployment command that properly -separates the various use cases encountered when managing deployments. This command -offers a simpler interface and should be the way to go when managing deployments. -New features will be added thanks to the deployment command, legacy commands will not evolve. -This document contains a summary of the capabilities of this command, type help deployment -to display the list of all available actions and help deployment <action> for the detailed -description of an action.

-
-
-

Actions to deploy some content:

-
-
-
    -
  • -

    deployment deploy-file: To deploy a file located on the file system.

    -
  • -
  • -

    deployment deploy-url: To deploy content referenced by an URL.

    -
  • -
  • -

    deployment deploy-cli-achive: To deploy some content thanks to a CLI archive -(.cli file) located on the file system.

    -
  • -
-
-
-

Actions to enable some deployments:

-
-
-
    -
  • -

    deployment enable: To enable a given disabled deployment.

    -
  • -
  • -

    deployment enable-all: To enable all disabled deployments.

    -
  • -
-
-
-

Actions to disable some deployments:

-
-
-
    -
  • -

    deployment disable: To disable a given enabled deployment.

    -
  • -
  • -

    deployment disable-all: To disable all enabled deployments.

    -
  • -
-
-
-

Actions to undeploy some deployments:

-
-
-
    -
  • -

    deployment undeploy: To undeploy a given deployment and remove its content -from the repository.

    -
  • -
  • -

    deployment undeploy-cli-archive: To undeploy some content using a CLI archive -(.cli file) located on the file system.

    -
  • -
-
-
-

Actions to get information on some deployments:

-
-
-
    -
  • -

    deployment info: To display information about single or multiple deployments.

    -
  • -
  • -

    deployment list: To display all the existing deployments.

    -
  • -
-
-
-
-

11.6.2. Incremental deployment with the CLI

-
-

It can be desirable to incrementally create and(or) update a WildFly -deployment. This chapter details how this can be achieved using the -WildFly CLI tool.

-
-
-

Steps to create an empty deployment and add an index html file.

-
-
-
    -
  1. -

    Create an empty deployment named my app:

    -
    -
    -
    [standalone@localhost:9990 /] /deployment=myapp:add(content=[{empty=true}])
    -
    -
    -
  2. -
  3. -

    Add an index.html to my app:

    -
    -
    -
    [standalone@localhost:9990 /] /deployment=myapp:add-content(content=[{input-stream-index=<press TAB>
    -
    -
    -
    -

    Then use completion to navigate to your index.html file.

    -
    -
  4. -
  5. -

    Provide a target name for index.html inside the deployment and -execute the operation:

    -
    -
    -
    [standalone@localhost:9990 /] /deployment=myapp:add-content(content=[{input-stream-index=./index.html, target-path=index.xhtml}]
    -
    -
    -
  6. -
  7. -

    Your content has been added, you can browse the content of a -deployment using the browse-content operation:

    -
    -
    -
    [standalone@localhost:9990 /] /deployment=myapp:browse-content(path=./)
    -
    -
    -
  8. -
  9. -

    You can display (or save) the content of a deployed file using the -attachement command:

    -
    -
    -
    attachment display --operation=/deployment=myapp:read-content(path=index.xhtml)
    -
    -
    -
  10. -
  11. -

    You can remove content from a deployment:

    -
    -
    -
    /deployment=myapp:remove-content(paths=[./index.xhtml])
    -
    -
    -
  12. -
-
-
-

Tips

-
-
-
    -
  • -

    add-content operation allows you to add more than one file ( -content argument is a list of complex types).

    -
  • -
  • -

    CLI offers completion for browse-content’s path and -remove-content's paths argument.

    -
  • -
  • -

    You can safely use operations that are using attached streams in batch -operations. In the case of batch operations, streams are attached to the -composite operation.

    -
  • -
-
-
- - - - - -
- - -On Windows, path separator '\' needs to be escaped, this is a limitation -of CLI handling complex types. The file path completion is automatically -escaping the paths it is proposing. -
-
-
-
Notes for server side operation Handler implementors
-
-

In order to benefit from CLI support for attached file streams and file -system completion, you need to properly structure your operation -arguments. Steps to create an operation that receives a list of file -streams attached to the operation:

-
-
-
    -
  1. -

    Define your operation argument as a LIST of INT (The LIST -value-type must be of type INT).

    -
  2. -
  3. -

    In the description of your argument, add the 2 following boolean -descriptors: filesystem-path and attached-streams

    -
  4. -
-
-
-

When your operation is called from the CLI, file system completion will -be automatically proposed for your argument. At execution time, the file -system paths will be automatically converted onto the index of the -attached streams.

-
-
-
-
-
-

11.7. Downloading files with the CLI

-
-

Some management resources are exposing the content of files in the -matter of streams. Streams returned by a management operation are -attached to the headers of the management response. The CLI command -attachment (see CLI help for a detailed description of this command) -allows to display or save the content of the attached streams.

-
-
-
    -
  • -

    Displaying the content of server.log file:

    -
    -
    -
    attachment display --operation=/subsystem=logging/log-file=server.log:read-resource(include-runtime)
    -
    -
    -
  • -
  • -

    Saving locally the server.log file:

    -
    -
    -
    attachment save --operation=/subsystem=logging/log-file=server.log:read-resource(include-runtime) --file=./server.log
    -
    -
    -
  • -
  • -

    Displaying the content of a deployed file:

    -
    -
    -
    attachment display --operation=/deployment=myapp:read-content(path=index.xhtml)
    -
    -
    -
  • -
-
-
-
    -
  • -

    By default existing files will be preserved. Use the option ---overwrite to overwrite existing file.

    -
  • -
  • -

    attachment can be used in batch mode.

    -
  • -
-
-
-
-

11.8. Iteration of Collections

-
-

The command for allows to iterate the content of an operation result. As an -example, this command can be used to display the content of the Manifest files -present in all deployed applications. For example:

-
-
-
-
for deployed in :read-children-names(child-type=deployment)
- echo $deployed Manifest content
- attachment display --operation=/deployment=$deployed:read-content(path=META-INF/MANIFEST.MF)
-done
-
-
-
-

When this for block is executed, the content of all Manifest files is displayed in the CLI console.

-
-
-

Tips

-
-
-
    -
  • -

    The scope of the defined variable is limited to the for block.

    -
  • -
  • -

    If a variable with the same name already exists, the for command will print an error.

    -
  • -
  • -

    If the operation doesn’t return a list, the for command will print an error.

    -
  • -
  • -

    for block can be discarded and not execute by adding the option --discard to done.

    -
  • -
-
-
-
-

11.9. Security Commands

-
-

CLi offers a security command to group all security related management actions -under a single command.

-
-
-
    -
  • -

    security enable-ssl-management: To enable SSL (elytron SSLContext) for the -management interfaces. Type help security enable-ssl-management for a -complete description of the command.

    -
  • -
-
-
-

Among other ways to configure SSL, this command offers an interactive wizard to -help you configure SSL by generating a self-signed certificate. -Example of wizard usage:

-
-
-
-
security enable-ssl-management --interactive
-Please provide required pieces of information to enable SSL:
-Key-store file name (default management.keystore):
-Password (blank generated):
-What is your first and last name? [Unknown]:
-What is the name of your organizational unit? [Unknown]:
-What is the name of your organization? [Unknown]:
-What is the name of your City or Locality? [Unknown]:
-What is the name of your State or Province? [Unknown]:
-What is the two-letter country code for this unit? [Unknown]:
-Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
-Validity (in days, blank default):
-Alias (blank generated):
-Enable SSL Mutual Authentication y/n (blank n):n
-
-SSL options:
-key store file: management.keystore
-distinguished name: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
-password: KRzne5s1
-validity: default
-alias: alias-265e6c6d-ff4e-4b8c-8f10-f015d678eb29
-Server keystore file management.keystore, certificate signing request management.csr and
-certificate file management.keystore.pem will be generated in server configuration directory.
-Do you confirm y/n :y
-
-
-
-

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

-
-
-

This command can also obtain the certificates from the Let’s Encrypt certificate authority -by use of the --lets-encrypt parameter. -Besides the mentioned workflow the user will be prompted to specify more information -(eg: account key store, certificate authority account) to obtain the certificate from Let’s Encrypt.

-
-
-
    -
  • -

    security disable-ssl-management: To disable SSL (elytron SSLContext) for the -management interfaces. Type help security disable-ssl-management for -a complete description of the command.

    -
  • -
  • -

    security enable-ssl-http-server: To enable SSL (elytron SSLContext) for the -undertow server. The same wizard as the enable-ssl-management action is available. -Type help security enable-ssl-http-server for a complete description of the command.

    -
  • -
-
-
-

This command can also obtain the certificates from the Let’s Encrypt certificate authority -by use of the --lets-encrypt parameter. -Besides the mentioned workflow the user will be prompted to specify more information -(eg: account key store, certificate authority account) to obtain the certificate from Let’s Encrypt.

-
-
-
    -
  • -

    security disable-ssl-http-server: To disable SSL (elytron SSLContext) for the -undertow server. Type help security disable-ssl-http-server for a complete -description of the command.

    -
  • -
  • -

    security enable-sasl-management: To enable SASL authentication (elytron SASL factory) for the -management interfaces. Calling this command without any option will have the -effect to associate the out of the box SASL factory to the http-interface. -Type help security enable-sasl-management for a complete description of the command.

    -
  • -
-
-
-

This command supports a subset of SASL mechanisms such as: EXTERNAL, DIGEST-MD5, -JBOSS-LOCAL-USER, SCRAM-*, …​ The CLI completer proposes the set of mechanisms that -can be properly configured using this command. Each mechanism can be associated -to a property file realm, a file-system realm or a trust-store realm according to its nature.

-
-
-

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

-
-
-
    -
  • -

    security disable-sasl-management: To disable SASL for the -management interfaces. If a mechanism is provided, this mechanism will be removed -from the factory, the factory will stay associated to the interface. Without mechanism, the -factory is no more active on the management interface. Type help security disable-sasl-management -for a complete description of the command.

    -
  • -
  • -

    security reorder-sasl-management: To re-order the list of SASL mechanisms present -in the factory. Order of mechanisms is of importance, the first in the list is sent to the client. -Type help security reorder-sasl-management for a complete description of the command.

    -
  • -
  • -

    security enable-http-auth-management: To enable HTTP authentication (elytron HTTP factory) for the -management http-interface. Calling this command without any option will have the -effect to associate the out of the box HTTP Authentication factory to the http-interface. -Type help security enable-http-auth-management for a complete description of the command.

    -
  • -
-
-
-

This command supports a subset of HTTP mechanisms such as: BASIC, CLIENT_CERT, DIGEST, …​ -The CLI completer proposes the set of mechanisms that can be properly configured -using this command. Each mechanism can be associated to a property file realm, -a file-system realm or a trust-store realm according to its nature.

-
-
-

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

-
-
-
    -
  • -

    security disable-http-auth-management: To disable HTTP Authentication for the -http management interface. If a mechanism is provided, this mechanism will be removed -from the factory, the factory will stay associated to the interface. Without mechanism, the -factory is no more active on the management interface. Type help security disable-http-auth-management -for a complete description of the command.

    -
  • -
  • -

    security enable-http-auth-http-server: To enable HTTP authentication (elytron HTTP factory) for the -given undertow security domain. -Type help security enable-http-auth-http-server for a complete description of the command.

    -
  • -
-
-
-

This command supports a subset of HTTP mechanisms such as: BASIC, CLIENT_CERT, DIGEST, …​ -The CLI completer proposes the set of mechanisms that can be properly configured -using this command. Each mechanism can be associated to a property file realm, -a file-system realm or a trust-store realm according to its nature.

-
-
-

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

-
-
-
    -
  • -

    security disable-http-auth-http-server: To disable HTTP Authentication for the -given undertow security domain. If a mechanism is provided, this mechanism will be removed -from the factory, the factory will stay associated to the security domain. Without mechanism, the -factory is no more active on the security-domain. Type help security disable-http-auth-http-server -for a complete description of the command.

    -
  • -
-
-
-
-

11.10. Evolving standard configurations with support for MicroProfile

-
-

The CLI script JBOSS_HOME/docs/examples/enable-microprofile.cli can be applied to a default standalone configuration -to add support for MicroProfile.

-
-
-

Impact on updated configuration:

-
-
-
    -
  • -

    Addition of MicroProfile subsystems.

    -
  • -
  • -

    Removal of security subsystem.

    -
  • -
  • -

    Removal of ManagementRealm.

    -
  • -
  • -

    Elytron security used for management and application entry points.

    -
  • -
-
-
-

By default the script updates standalone.xml configuration. -Thanks to the config=<config name> system property, the script can be applied to another standalone configuration.

-
-
-

NB: this script has to be applied offline with no server running.

-
-
-
    -
  • -

    To update standalone.xml server configuration:

    -
    -
      -
    • -

      ./bin/jboss-cli.sh --file=docs/examples/enable-microprofile.cli

      -
    • -
    -
    -
  • -
  • -

    To update other standalone server configurations:

    -
    -
      -
    • -

      ./bin/jboss-cli.sh --file=docs/examples/enable-microprofile.cli --Dconfig=<standalone-full.xml|standalone-ha.xml|standalone-full-ha.xml>

      -
    • -
    -
    -
  • -
-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Admin_Guide.html

+ \ No newline at end of file diff --git a/29/Bootable_Guide.html b/29/Bootable_Guide.html index 8feadba57..3330d2d22 100644 --- a/29/Bootable_Guide.html +++ b/29/Bootable_Guide.html @@ -1,1473 +1,11 @@ - - - - - - -Bootable JAR Guide - - - - - - - -
-
-
-
-

© 2020 The original authors.

-
- -
-
-

WildFly bootable JAR application development

-
-
-
-

This document details the steps to follow in order to develop a WildFly application -packaged as a bootable JAR. A bootable JAR can be run both on bare-metal and cloud platforms.

-
-
-

Developing an application packaged as a bootable JAR is not different from developing an application for a traditional -WildFly server installation using Maven. -The extra steps required to package your application inside a bootable JAR are handled by the -org.wildfly.plugins:wildfly-jar-maven-plugin Maven plugin.

-
-
-

This document contains the minimal information set required to build and run a WildFly bootable JAR. -Complete information on the Maven plugin usage can be found in the bootable JAR documentation.

-
-
-
-
-

1. Adding the bootable JAR Maven plugin to your pom file

-
-
-

This is done by adding an extra build step to your application deployment Maven pom.xml file.

-
-
-
-
<build>
-  <plugins>
-    <plugin>
-      <groupId>org.wildfly.plugins</groupId>
-      <artifactId>wildfly-jar-maven-plugin</artifactId>
-      <configuration>
-        ...
-      </configuration>
-      <executions>
-        <execution>
-          <goals>
-            <goal>package</goal>
-          </goals>
-        </execution>
-      </executions>
-    </plugin>
-  </plugins>
-</build>
-
-
-
-

The next chapter covers the plugin configuration items that are required to identify the WildFly server version and content.

-
-
-
-
-

2. Galleon configuration

-
-
-

The Bootable JAR Maven plugin depends on Galleon to construct the WildFly server contained in the JAR file.

-
-
-

Galleon is configured thanks to the Maven plugin <configuration> element.

-
-
-

The first required piece of information that Galleon needs is a reference to the WildFly Galleon feature-pack. -The WildFly Galleon feature-pack is a maven artifact that contains everything needed to dynamically provision a server. -This feature-pack, as well as the feature-packs on which its depends, -are deployed in public maven repositories.

-
-
-

When the bootable JAR Maven plugin builds a JAR, WildFly feature-packs are retrieved and -their content is assembled to create the server contained in the JAR.

-
-
-

Once you have identified a WildFly Galleon feature-pack, you need to select a set of -WildFly Layers that are used to compose the server.

-
-
-

The set of Galleon layers to include is driven by the needs of the application you are developing. -The list of WildFly Layers provides details on -the server features that each layer brings. Make sure that the API and server features you are using (eg: Jakarta RESTful Web Services, MicroProfile Config, datasources) -are provided by the layers you are choosing.

-
-
-

If you decide not to specify Galleon layers, a server containing all MicroProfile subsystems is -provisioned. (The server configuration is identical to the standalone-microprofile.xml configuration -in the traditional WildFly server zip.)

-
-
-

Maven Plugin configuration extract example:

-
-
-
-
<build>
-  <plugins>
-    <plugin>
-      <groupId>org.wildfly.plugins</groupId>
-      <artifactId>wildfly-jar-maven-plugin</artifactId>
-      <configuration>
-        <feature-pack-location>wildfly@maven(org.jboss.universe:community-universe)</feature-pack-location> (1)
-        <layers>
-          <layer>jaxrs-server</layer> (2)
-        </layers>
-      </configuration>
-      <executions>
-        <execution>
-          <goals>
-            <goal>package</goal>
-          </goals>
-        </execution>
-      </executions>
-    </plugin>
-  </plugins>
-</build>
-
-
-
-

(1) In this plugin configuration extract, we are retrieving the latest WildFly Galleon feature-pack installed in the - org.jboss.universe:community-universe Galleon universe. In case you would like to provision a specific version of the server, -you would need to specify the server version, for example wildfly@maven(org.jboss.universe:community-universe)#21.0.0.Final

-
-
-

(2) The jaxrs-server layer and all its dependencies are provisioned.

-
-
- - - - - -
- - -
-

If your project is using WildFly Preview, the feature-pack-location to use -is wildfly-preview@maven(org.jboss.universe:community-universe).

-
-
-
-
-

2.1. WildFly Layers

-
-

A Galleon layer is a name that identifies a server capability (e.g.: jaxrs, -ejb, microprofile-config, jpa) or an aggregation of such capabilities. A layer captures a server capability in the form of:

-
-
-
    -
  • -

    A piece of server XML configuration (e.g.: extension, configured subsystem, interfaces) that describes the capability.

    -
  • -
  • -

    A set of modules and other filesystem content that implements the capability.

    -
  • -
-
-
-

When you are using a layer, it delivers these pieces of information in order for -Galleon to assemble a server containing only the required configuration and modules.

-
-
-

In the tables below we provide basic information about all of the layers WildFly provides.

-
-
-

Besides the layer names and a brief description of each, the tables below detail the various dependency relationships -between layers. If the capabilities provided by a layer A require capabilities provided by another layer B, then layer A will depend on layer B. -If you ask for layer A, then Galleon will automatically provide B as well. In some cases A’s dependency on B can be optional; that -is A typically comes with B, but can function without it. In this case if you ask for A by default Galleon will provide B as well, -but you can tell Galleon to exclude B.

-
-
-

Some layers are logical alternatives to other layers. If two layers are alternatives to each other they both provide the same general -capabilities, but with different implementation characteristics. For example a number of layers provide the capability to cache different -types of objects. These layers typically come in pairs of alternatives, where one alternative provides local caching, while the other provides -distributed caching. If a layer you want has an optional dependency on a layer that has an alternative, you can exclude that dependency -and instead specify the alternative. If a layer has an alternative the Description column in the tables below will identify it.

-
-
- - - - - -
- - -
-

If the elytron layer is present, security will be handled by the elytron subsystem. -The undertow and ejb subsystems are configured with an other application-security-domain that references the Elytron ApplicationDomain security domain.

-
-
-
-
-

2.1.1. Foundational Galleon layers

-
-

A single Galleon layer can provide a relatively small set of capabilities, but most users will want to start with a broader set -of capabilities without having to spell out all the details. To help with this WildFly provides a few foundational layers -all of which provide typical core WildFly capabilities like the logging subsystem and a secure remote management interface.

-
-
-

You don’t have to base your WildFly installation on one of these foundational layers, but doing so may be more convenient.

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionDependencies

datasources-web-server

A servlet container with support for datasources.

core-server
-core-tools (optional)
-datasources (optional)
-elytron
-web-server

jaxrs-server

An extension of datasources-web-server with support for Jakarta RESTful Web Services, CDI and JPA.

bean-validation (optional)
-cdi (optional)
-datasources-web-server
-jaxrs (optional)
-jpa (optional)
-microprofile-rest-client (optional)

cloud-server

An extension of jaxrs-server to address common cloud requirements.

ee-security (optional)
-jaxrs-server
-jms-activemq (optional)
-observability (optional)
-resource-adapters (optional)

core-server

A typical manageable server core. This layer could serve as a base for a more -specialized WildFly that doesn’t need the capabilities provided by the other foundational layers.

core-management (optional)
-jmx-remoting (optional)
-logging (optional)
-management (optional)
-request-controller (optional)
-security-manager (optional)

ee-core-profile-server

A Jakarta EE Core Profile server.

core-server
-cdi
-ee-integration
-elytron
-jaxrs-core
-jsonp
-jsonb

-
-
-

2.1.2. Basic Galleon Layers

- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Name

Description

Dependencies

base-server

Empty runnable server.

git-history (optional)

batch-jberet

Support for Jakarta Batch.

cdi
-ee
-elytron
-transactions

bean-validation

Support for Jakarta Bean Validation.

base-server
-cdi (optional)

cdi

Support for Jakarta Contexts and Dependency Injection.

base-server
-bean-validation (optional)

cloud-profile

An aggregation of some basic layers to address cloud use cases.

bean-validation (optional)
-cdi (optional)
-ee-security (optional)
-jaxrs (optional)
-jms-activemq (optional)
-jpa (optional)
-observability (optional)
-resource-adapters (optional)
-web-server

core-management

Support for server management services.

base-server

core-tools

Support for jboss-cli, add-user and elytron-tool launch scripts and configuration files.

management (optional)

datasources

Support for datasources.

transactions

deployment-scanner

Support for deployment directory scanning.

base-server

discovery

Support for discovery.

base-server

ee

Support for common functionality in the Jakarta EE platform and for Jakarta Concurrency.

ee-concurrency (optional)
-ee-integration

ee-concurrency

Support for Jakarta Concurrency.

naming

ee-integration

Support for common functionality in the Jakarta EE platform.

jsonb (optional)
-naming

ee-security

Support for EE Security.

cdi
-elytron

ejb-http-invoker

Support for invoking Jakarta Enterprise Beans over HTTP.

ejb-lite
-elytron
-undertow

ejb

Support for Jakarta Enterprise Beans, excluding the IIOP protocol.

ejb-lite
-messaging-activemq
-remoting
-resource-adapters
-undertow

ejb-dist-cache

Infinispan-based distributed cache for stateful session beans.
-Alternative: ejb-local-cache

transactions

ejb-lite

Support for Jakarta Enterprise Beans Lite.

ejb-local-cache (optional)
-naming
-transactions

ejb-local-cache

Infinispan-based local cache for stateful session beans.
-Alternative: ejb-dist-cache

transactions

elytron

Support for Elytron security.

base-server

embedded-activemq

Support for an embedded Apache Activemq Artemis Jakarta Messaging broker.
-Alternative: remote-activemq

cdi
-ee
-elytron
-naming
-remoting
-messaging-activemq
-undertow

git-history

Support for using git for configuration management.

hibernate-search

Support for Hibernate Search. The jpa dependency can be excluded and jpa-distributed used instead.

jpa (optional)

h2-datasource

Support for an H2 datasource

h2-driver

h2-default-datasource

Support for an H2 datasource set as the ee subsystem default datasource.

h2-datasource

h2-driver

Support for the H2 JDBC driver.

base-server

iiop-openjdk

Support for IIOP

naming

io

Support for XNIO workers and buffer pools.

base-server

jaxrs-core

Support for Jakarta RESTful Web Services.

ee-integration
-servlet

jaxrs

Support for Jakarta RESTful Web Services with optional ee-concurrency and deployment scanner layers.

deployment-scanner (optional)
-ee-concurrency (optional)
-jaxrs-core

jdr

Support for the JBoss Diagnostic Reporting (JDR) subsystem.

base-server
-management (optional)

jms-activemq

Deprecated - use messaging-activemq.

messaging-activemq

jmx

Support for registration of Management Model MBeans.

base-server

jmx-remoting

Support for a JMX remoting connector.

jmx
-management

jpa

Support for JPA (using the latest WildFly supported Hibernate release).
-Alternative: jpa-distributed

bean-validation (optional)
-datasources

jpa-distributed

Support for JPA with a distributed second level cache.
-Alternative: jpa

bean-validation (optional)
-datasources

jsf

Support for Jakarta Faces.

bean-validation (optional)
-cdi
-web-server

jsonb

Support for JSON Binding (Jakarta JSON Binding) provisioning the Jakarta JSON Binding API and Implementation modules.

base-server

jsonp

Support for JSON Processing (Jakarta JSON Processing) provisioning the Jakarta JSON Processing API and Implementation modules.

base-server

logging

Support for the logging subsystem.

base-server

mail

Support for Jakarta Mail.

base-server
-naming

management

Support for remote access to management interfaces secured using Elytron.

elytron

messaging-activemq

Support for connections to a remote Jakarta Messaging broker.

resource-adapters

micrometer

Support for Micrometer

cdi

microprofile-config

Support for MicroProfile Config.

cdi

microprofile-fault-tolerance

Support for MicroProfile Fault Tolerance.

cdi
-microprofile-config

microprofile-health

Support for MicroProfile Health.

management
-microprofile-config

microprofile-jwt

Support for MicroProfile JWT.

ee-security
-microprofile-config

microprofile-openapi

Support for MicroProfile OpenAPI.

jaxrs
-microprofile-config

microprofile-platform

Support for available MicroProfile platform specifications.

microprofile-config (optional)
-microprofile-fault-tolerance (optional)
-microprofile-health (optional)
-microprofile-jwt (optional)
-microprofile-openapi (optional)
-microprofile-rest-client (optional)

microprofile-rest-client

Support for MicroProfile REST client.

microprofile-config

microprofile-reactive-messaging

Support for MicroProfile Reactive Messaging

cdi
-reactive-streams-operators

microprofile-reactive-messaging-kafka

Support for MicroProfile Reactive Messaging Kafka connector

reactive-messaging

microprofile-reactive-streams-operators

Support for MicroProfile Reactive Streams Operators

cdi

microprofile-lra-coordinator

Support for MicroProfile LRA Coordinator

cdi
-jaxrs
-transactions

microprofile-lra-participant

Support for MicroProfile LRA Participant

cdi
-jaxrs

microprofile-telemetry

Support for MicroProfile Telemetry

cdi
-microprofile-config
-opentelemetry

mod_cluster

Support for mod_cluster subsystem.

web-server

naming

Support for JNDI.

base-server

observability

Support for MicroProfile monitoring features.

microprofile-config (optional)
-microprofile-health (optional)

opentelemetry

Support for OpenTelemetry

cdi

pojo

Support for legacy JBoss Microcontainer applications.

base-server

remote-activemq

Support for connections to a remote Apache Activemq Artemis Jakarta Messaging broker.
-Alternative: embedded-activemq

messaging-activemq

remoting

Support for inbound and outbound JBoss Remoting connections, secured using Elytron.

elytron
-io

request-controller

Support for request management

base-server

resource-adapters

Support for deployment of Jakarta Connectors resource adapters.

transactions

sar

Support for SAR archives to deploy MBeans.

base-server
-jmx

security-manager

Support for applying security manager permissions to applications.

base-server

servlet

A servlet container.

ee-integration
-naming
-undertow

transactions

Support for transactions.

ee
-elytron

undertow

Support for the Undertow HTTP server. Provides servlet support but does not provide typical EE integration like resource injection. -Use web-server for a servlet container with EE integration.

base-server
-io

undertow-https

Support for the Undertow HTTPS server secured using the applicationSSC SSLContext.

elytron
-undertow

undertow-load-balancer

Support for Undertow configured as a load balancer.

base-server
-io

web-clustering

Support for distributable web applications. Configures a non-local Infinispan-based container web cache for data session handling suitable to clustering environments.

transactions
-web-server

web-console

Support for loading the HAL web console from the /console context on the HTTP -management interface. Not required to use a HAL console obtained independently -and configured to connect to the server.

management

web-passivation

Support for distributable web applications. Configures a local Infinispan-based container web cache for data session handling suitable to single node environments.

transactions
-web-server

web-server

A servlet container.

deployment-scanner (optional)
-ee
-ee-concurrency (optional)
-naming
-servlet

webservices

Support for Jakarta XML Web Services

ejb-lite (optional)
-messaging-activemq (optional)
-web-server

-
- - - - - -
- - -References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. - References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-
-

3. Additional configuration

-
-
-

The plugin allows you to specify additional configuration items:

-
-
-
    -
  • -

    A set of WildFly CLI scripts to execute to fine tune the server configuration.

    -
  • -
  • -

    Some extra content to be copied inside the bootable JAR (e.g.: server keystore).

    -
  • -
-
-
-

Check this documentation for more details on how to configure execution of -CLI scripts and to package extra content.

-
-
-
-
-

4. Packaging your application

-
-
-

Call ` mvn package` to package both your application and the bootable JAR in the file <project build directory>/<project final name>-bootable.jar

-
-
-

In order to speed-up the development of your application (avoid rebuilding the JAR each time your application is re-compiled), -the Maven plugin offers a development mode that allows you to build and start the bootable JAR only once.

-
-
-

Check this documentation for more details on the development mode.

-
-
-
-
-

5. Running your application

-
-
-

Call java -jar <path to bootable JAR> <arguments>

-
-
-

In additon, you can use the wildfly-jar:run and wildfly-jar:start plugin goals to launch the bootable JAR.

-
-
-

5.1. Bootable JAR arguments

-
-

The following arguments can be used when starting the bootable JAR:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription

-b[interface]=<value>

Set system property jboss.bind.address.<interface> to the given value

-b=<value>

Set system property jboss.bind.address to the given value

-D<name>[=<value>]

Set a system property. The system properties are set by the server. They are not set by the bootable JAR JVM.

--help

Display help then exit

--cli-script=<path to CLI script file>

Path to a CLI script to execute when starting the Bootable JAR

--deployment=<path to WAR/JAR/EAR file or exploded deployment directory>

Application to install in the hollow JAR. Adding a deployment to an bootable JAR already containing a deployment is invalid.

--display-galleon-config

Display the content of the Galleon configuration used to build this bootable JAR.

--install-dir=<path to directory to install server in>

By default a new TEMP directory is created. TEMP directory location is controlled by the Java VM (call to Files.createTempDirectory).

--properties=<url>

Load system properties from the given url

-S<name>[=value]

Set a security property

-secmgr

Activate and install the WildFlySecurityManager.

-u=<value>

Set system property jboss.default.multicast.address to the given value.

--version

Print version and exit.

-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Bootable_Guide.html

+ \ No newline at end of file diff --git a/29/Client_Guide.html b/29/Client_Guide.html index cee63d05d..49c536895 100644 --- a/29/Client_Guide.html +++ b/29/Client_Guide.html @@ -1,2169 +1,11 @@ - - - - - -WildFly Client Configuration - - - - - - - -
-
-
- -
-
-
-

1. Introduction

-
-
-

As of WildFly 11 a common configuration framework has been introduced for use by the client libraries to define configuration, this allows for the configuration to be shared across multiple clients rather than relying on their own configuration files. As an example the configuration used by a Jakarta Enterprise Beans client can be shared with the JBoss CLI, if both of these required SSL configuration this can now be defined once and re-used.

-
-
-

Programmatic APIs are also available for many of the options however this document is focusing on the configuration available within the common wildfly-config.xml configuration file.

-
-
-
-
-

2. wildfly-config.xml Discovery

-
-
-

At the time a client requires access to its configuration, the class path is scanned for a wildfly-config.xml or META-INF/wildfly-config.xml file. Once the file is located the configuration will be parsed to be made available for that client.

-
-
-

Alternatively, the wildfly.config.url system property can also be specified to identify the location of the configuration that should be used.

-
-
-
-
-

3. Configuration Sections

-
-
-

3.1. <authentication-client /> - WildFly Elytron

-
-

The <authentication-client/> element can be added to the wildfly-config.xml configuration to define configuration in relation to authentication configuration for outbound connections and SSL configuration for outbound connections e.g.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-       ...
-    </authentication-client>
-</configuration>
-
-
-
-

Note: A single wildfly-config.xml could be used by multiple projects using multiple versions of WildFly Elytron, newer versions of WildFly Elytron will introduce new configuration using later namespace versions however they will still continue to support the previously released schemas until advertised otherwise. For the configuration to be compatible with this either use a schema and namespace compatible with all the versions in use, or multiple authentication-client elements can be added, these should be added ordered by namespace youngest to oldest. If a configuration with a later namespace is discovered by a newer WildFly Elytron client it will be used and parsing will not look for an older version as well.

-
-
-

The <authentication-client /> configuration can contain the following sections: -

-
-
-
-
<credential-stores />
-
-

Definitions of credential stores to be referenced from elsewhere in the configuration.

-
-
<key-stores />
-
-

Definitions of KeyStores to be referenced elsewhere in the configuration.

-
-
<authentication-rules />
-
-

Rules to be applied for outbound connections to match against an appropriate authentication configuration.

-
-
<authentication-configurations />
-
-

The individual authentication configurations that will be matched by the authentication rules.

-
-
<net-authenticator />
-
-

Flag to enable integration with the [java.net.Authenticator|https://docs.oracle.com/javase/8/docs/api/java/net/Authenticator.html].

-
-
<ssl-context-rules />
-
-

Rules to be applied for outbound connections to match against an appropriate SSL context configuration.

-
-
<ssl-contexts />
-
-

Individual SSL context definitions that will be matched by the ssl context rules.

-
-
<providers/>
-
-

Definition of how [java.security.Provider|https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html] instances will be discovered.

-
-
-
-
-

3.1.1. <credential-stores />

-
-

The <credential-stores /> element can be used to define individual named credential stores that can subsequently be used elsewhere in the configuration to reference stored credentials as an alternative to the credentials being embedded in the configuration.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <credential-stores>
-            <credential-store name="..." type="..." provider="..." >
-                <attributes>
-                    <attribute name="..." value="..." />
-                </attributes>
-                <protection-parameter-credentials>...</protection-parameter-credentials>
-            </credential-store>
-        </credential-stores>
-    </authentication-client>
-</configuration>
-
-
-
-

In addition to the name an individual <credential-store /> definition can contain the following optional attributes: -

-
-
-
-
type
-
-

The type of the credential store, e.g.KeyStoreCredentialStore.

-
-
provider
-
-

The name of the [java.security.Provider|https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html] to use to load the credential store.

-
-
-
-
-

The following child elements can also be added to configure the credential store.

-
-
-
-
<attributes .>
-
-

Definition of configuration attributes used to initialise the credential store.

-
-
-
-
-

e.g.

-
-
-
-
<attributes>
-    <attribute name="..." value="..." />
-</attributes>
-
-
-
-

The <attribute/> element can be repeated as many times as is required for the configuration.

-
-
-
-
<protection-parameter-credentials />
-
-

One or more credentials to be assembled into a protection parameter when initialising the credential store.

-
-
-
-
-

The <protection-paramter-credentials /> element can contain one more more child elements, which of these are actually supported will depend on the credential store implementation: -

-
-
-
-
<protection-parameter-credentials>
-    <key-store-reference>...</key-store-reference>
-    <credential-store-reference store="..." alias="..." clear-text="..." />
-    <clear-password password="..." />
-    <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-    <key-pair>
-        <public-key-pem>...</public-key-pem>
-        <private-key-pem>...</public-key-pem>
-        <openssh-private-key pem="...">
-            <credential-store-reference store="..." alias="..." clear-text="..." />
-            <clear-password password="..." />
-            <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-        </openssh-private-key>
-    </key-pair>
-    <certificate private-key-pem="..." pem="..." />
-    <public-key-pem>...</public-key-pem>
-    <bearer-token value="..." />
-    <oauth2-bearer-token token-endpoint-uri="...">...</oauth2-bearer-token>
-</protection-parameter-credentials>
-
-
-
-

The potential child elements of <protection-parameter-credentials /> are: -

-
-
-
-
<key-store-reference>
-
-

Defines a reference to an entry within a KeyStore for an entry to use.

-
-
-
-
-

The overall structure of this element is: -

-
-
-
-
<key-store-reference key-store-name="..." alias="...">
-   <key-store-clear-password password="..." />
-   <key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-   <credential-store-reference store="..." alias="..." clear-text="..." />
-   <key-store-credential>...</key-store-credential>
-</key-store-reference>
-
-
-
-

This structure is identical to the structure use in [<key-store-credential />|#key-store-credential].

-
-
-
-
<credential-store-reference store="…​" alias="…​" clear-text="…​" />
-
-

Reference to a credential stored in a credential store.

-
-
<clear-password password="…​" />
-
-

A password specified in the clear.

-
-
<masked-password algorithm="…​" key-material="…​" iteration-count="…​" salt="…​" masked-password="…​" initialization-vector="…​" />
-
-

A masked password.

-
-
<key-pair public-key-pem="…​" private-key-pem="…​" />
-
-

A public and private key pair.

-
-
* <certificate private-key-pem="…​" pem="…​" />
-
-

A pem encoded private key and corresponding certificate.

-
-
<public-key-pem>…​</public-key-pem>
-
-

A pem encoded public key.

-
-
* <bearer-token value="…​" />
-
-

A bearer token

-
-
<oauth2-bearer-token>…​</oauth2-bearer-token>
-
-

An oath2 bearer token.

-
-
-
-
-

The full structure of this element is: -

-
-
-
-
<oauth2-bearer-token token-endpoint-uri="...">
-    <client-credentials client-id="..." client-secret="..." />
-    <masked-client-credentials client-id="...">
-        <masked-client-secret algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-    </masked-client-credentials>
-    <resource-owner-credentials name="..." password="..." />
-    <masked-resource-owner-credentials name="...">
-            <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-    </masked-resource-owner-credentials >
-</oauth2-bearer-token>
-
-
-
-
-

3.1.2. <key-stores />

-
-

The <key-stores /> element can be used to define individual key-store definitions that can subsequently be referenced from alternative locations within the configuration.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <key-stores>
-            <key-store name="...">
-               <!-- One of the following to specify where to load the KeyStore from. -->
-               <file-name name="..." />
-               <load-from uri-"..." />
-               <resource name="..." />
-               <!-- One of the following to specify the protection parameter to unlock the KeyStore. -->
-               <key-store-clear-password password="..." />
-               <key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-               <key-store-credential>...</key-store-credential>
-            </key-store>
-        </key-stores>
-       ...
-    </authentication-client>
-</configuration>
-
-
-
-

An individual <key-store /> definition must contain exactly one of the following elements to define where to load the store from.

-
-
-
-
<file name="…​" />*
-
-

Load from file where 'name' is the name of the file.

-
-
<load-from uri="…​" />
-
-

Load the file from the URI specified.

-
-
<resource name="…​" />
-
-

Load as a resource from the Thread context classloader where 'name' is the name of the resource to load.

-
-
-
-
-

Exactly one of the following elements must also be present to specify the protection parameter for initialisation of the KeyStore.

-
-
-
-
<key-store-clear-password password="…​" />
-
-

A password specified in the clear.

-
-
<key-store-masked-password algorithm="…​" key-material="…​" iteration-count="…​" salt="…​" masked-password="…​" initialization-vector="…​" />
-
-

A masked password.

-
-
<key-store-credential>…​</key-store-credential>
-
-

A reference to another KeyStore to obtain an Entry to use as the protection parameter to access this KeyStore.

-
-
-
-
-

The structure of the <key-store-credential /> element is:

-
-
-
-
<key-store-credential key-store-name="..." alias="...">
-   <key-store-clear-password password="..." />
-   <key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-   <credential-store-reference store="..." alias="..." clear-text="..." />
-   <key-store-credential>...</key-store-credential>
-</key-store-credential>
-
-
-
-

This element contains two attributes: -

-
-
-
-
key-store-name
-
-

(Mandatory) - Name of the KeyStore being referenced to load the entry from.

-
-
alias
-
-

(Optional) - The alias of the entry to load from the referenced KeyStore, this can only be omitted for KeyStores that contain only a single entry.

-
-
-
-
-

Java KeyStores also make use of a protection parameter when accessing a single entry in addition to the protection parameter to load the KeyStore, exactly one of the following elements must be present to specify the protection parameter of the entry being loaded.

-
-
-
-
<key-store-clear-password password="…​" />
-
-

A password specified in the clear.

-
-
<key-store-masked-password algorithm="…​" key-material="…​" iteration-count="…​" salt="…​" masked-password="…​" initialization-vector="…​" />
-
-

A masked password.

-
-
<credential-store-reference store="…​" alias="…​" clear-text="…​" />
-
-

Reference to a credential stored in a credential store.

-
-
<key-store-credential>…​</key-store-credential>
-
-

A reference to another KeyStore to obtain an Entry to use as the protection parameter to access the alias.

-
-
-
-
-

The <key-store-credential /> is exactly the same, this means theoretically a chain of references could be used to lead to the unlocking of the required alias.

-
-
-
-

3.1.3. <authentication-rules /> and <ssl-context-rules />

-
-

When either an authentication-configuration or an ssl-context is required the URI of the resources being accessed as well as an optional abstract type and abstract type authority and matched against the rules defined in the configuration to identify which authentication-configuration or ssl-context should be used.

-
-
-

The rules to match <authentication-configuration /> instances are defined within the <authentication-rules /> element.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <authentication-rules>
-            <rule use-configuration="...">
-                ...
-            </rule>
-        </authentication-rules>
-       ...
-    </authentication-client>
-</configuration>
-
-
-
-

The rules to match against the <ssl-context /> definitions are contains within the <ssl-context-rules /> element.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <ssl-context-rules>
-            <rule use-ssl-context="...">
-                ...
-            </rule>
-        </ssl-context-rules>
-       ...
-    </authentication-client>
-</configuration>
-
-
-
-

Overall this means that authentication configuration matching is independent of SSLContext matching. By separating the rules from the configurations is means multiple rules can be defined that match against the same configuration.

-
-
-

The rules applied so first match wins and not most specific match wins, to achieve a most specific match wins configuration place the most specific rules at the beginning leaving the more general matches towards the end.

-
-
-

For both the <authentication-rules /> and the <ssl-context-rules /> the structure of the rules is identical other than one references an authentication configuration and the other references an SSLContext.

-
-
-
-
<rule use-configuration|use-ssl-context="...">
-    <!-- At most one of the following two can be defined. -->
-    <match-no-user />
-    <match-user name="..." />
-    <!-- Each of the following can be defined at most once. -->
-    <match-protocol name="..." />
-    <match-host name="..." />
-    <match-path name="..." />
-    <match-port number="..." />
-    <match-urn name="..." />
-    <match-domain name="..." />
-    <match-abstract-type name="..." authority="..." />
-</rule>
-
-
-
-

Where multiple matches are defined within a rule they must all match for the rule to apply. If a rule is defined with no match elements then it becomes a match all rule and will match anything, these can be useful at the end of the configuration to ensure something matches.

-
-
-

The individual match elements are: -

-
-
-
-
<match-no-user />
-
-

user-info can be embedded within a URI, this rule matches when there is no user-info. -<match-user name="…​" /> - Matches when the user-info embedded in the URI matches the name specified within this element. -<match-protocol name="…​" /> - Matches the protocol within the URI against the name specified in this match element. -<match-host-name name="…​" /> - Matches the host name from within the URI against the name specified in this match element. -<match-path name="…​" /> - Matches the path from the URI against the name specified in this match element. -<match-port number="…​" /> - Matches the port number specified within the URI against the number in this match element. This only matches against the number specified within the URI and not against any default derrived from the protocol. -<match-urn name="…​" />" - Matches the scheme specific part of the URI against the name specified within this element.

-
-
* <match-domain-name name="…​"/>
-
-

Matches where the protocol of the URI is 'domain' and the scheme specific part of the URI is the name specified within this match element.

-
-
<match-abstract-type name="…​" authority="…​" />
-
-

Matches the abstract type and/or authority against the values specified within this match element.

-
-
-
-
-
Elytron client default SSL context security provider
-
-

Elytron client provides a java security provider which can be used to register a JVM wide default SSLContext. The provider can instantiate an SSLContext from an Elytron client configuration file. This SSLContext will then be the one returned when SSLContext.getDefault() is called. When this provider is registered then all client libraries that use SSLContext.getDefault() will use the Elytron client configuration without having to use Elytron client APIs in their code.

-
-
-

To register this org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider provider, a runtime dependency on wildfly-elytron-client and wildfly-client-config is needed. Then it can be registered the usual way, either statically or dynamically.

-
-
-

The provider loads the SSL context from either the current authentication context obtained from the classpath, or from the authentication context obtained from the file whose path is passed into the security provider either programmatically or as an argument in the java.security file. Any arguments passed to the provider directly have precedence over the authentication context from the classpath.

-
-
-

As an example, the SSL context configured to match all rules is the one that will be initialized and returned by this provider:

-
-
-
-
<rule use-ssl-context="ssl-context-for-client-provider" />
-
-
-
-

Or:

-
-
-
-
myAuthenticationContext.withSsl(MatchRule.ALL, myDefaultSslContext);
-
-
-
-

To register the provider programmatically and specify the path to an Elytron client configuration file, the following code can be used:

-
-
-
-
Security.insertProviderAt(new WildFlyElytronClientDefaultSSLContextProvider(CONFIG_FILE_PATH), 1);
-
-
-
-

Alternatively, the provider can be registered in the java.security file and the path to an Elytron client configuration file can be optionally specified as shown below:

-
-
-
-
security.provider.1=org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider CONFIG_FILE_PATH
-
-
-
-

When you have a default SSL context configured and you register this provider with high enough priority, you can make use of it by calling:

-
-
-
-
SSLContext.getDefault();
-
-
-
-

If no default SSL context is configured or there is no configuration present, the provider will be ignored.

-
-
-
-
-

3.1.4. <authentication-configurations />

-
-

The <authentication-configurations /> element contains named configurations that can then be matched from the <authentication-rules />

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <authentication-configurations>
-            <configuration name="...">
-                <!-- Destination Overrides. -->
-                <set-host name="..." />
-                <set-port number="..." />
-                <set-protocol name="..." />
-                <!-- At most one of the following two elements. -->
-                <set-user-name name="..." />
-                <set-anonymous />
-                <set-mechanism-realm name="..." />
-                <rewrite-user-name-regex pattern="..." replacement="..." />
-                <sasl-mechanism-selector selector="..." />
-                <set-mechanism-properties>
-                   <property key="..." value="..." />
-                </set-mechanism-properties>
-                <credentials>...</credentials>
-                <set-authorization-name name="..." />
-                <providers>...</providers>
-                <!-- At most one of the following two elements. -->
-                <use-provider-sasl-factory />
-                <use-service-loader-sasl-factory module-name="..." />
-            </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-

The elements within the <configuration /> element provide the following features: -

-
-
-

The first three elements override the destination.

-
-
-
-
<set-host-name name="…​" />
-
-

Override the host name for the authenticated call.

-
-
<set-port-number number="…​" />
-
-

Override the port number for the authenticated call.

-
-
<set-protocol name="…​"/>
-
-

Override the protocol for the authenticated call.

-
-
-
-
-

The next two are mutually exclusive and can be used to set the name for authentication or switch to anonymous authentication.

-
-
-
-
<set-user-name name="…​"/>
-
-

Set the user name to use for authentication.

-
-
<set-anonymous />
-
-

Switch to anonymous authentication.

-
-
<set-mechanism-realm-name name="…​" />
-
-

Specify the name of the realm that will be selected by the SASL mechanism if required.

-
-
<rewrite-user-name-regex pattern="…​" replacement="…​" />
-
-

A regular expression pattern and replacement to re-write the user name used for authentication.

-
-
<sasl-mechanism-selector selector="…​" />
-
-

A SASL mechanism selector using the syntax from [org.wildfly.security.sasl.SaslMechanismSelector,fromString()|https://github.com/wildfly-security/wildfly-elytron/blob/1.1.4.Final/src/main/java/org/wildfly/security/sasl/SaslMechanismSelector.java#L544]

-
-
<set-mechanism-properties>…​</set-mechanism-properties>
-
-

One or more properties defined as <property key="…​" value="…​" /> to be passed to the authentication mechanisms.

-
-
<credentials>…​</credentials>
-
-

One or more credentials available for use during authentication.

-
-
-
-
-

The content of this element is the same as documented for [<protection-parameter-credentials />|#client-credentials-type]

-
-
-
-
<credentials>
-    <key-store-reference>...</key-store-reference>
-    <credential-store-reference store="..." alias="..." clear-text="..." />
-    <clear-password password="..." />
-    <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-    <key-pair>
-        <public-key-pem>...</public-key-pem>
-        <private-key-pem>...</public-key-pem>
-        <openssh-private-key pem="...">
-            <credential-store-reference store="..." alias="..." clear-text="..." />
-            <clear-password password="..." />
-            <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-        </openssh-private-key>
-    </key-pair>
-    <ssh-credential ssh-directory="..." private-key-file="..." known-hosts-file="...">
-        <credential-store-reference store="..." alias="..." clear-text="..." />
-        <clear-password password="..." />
-        <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-    </ssh-credential>
-    <certificate private-key-pem="..." pem="..." />
-    <public-key-pem>...</public-key-pem>
-    <bearer-token value="..." />
-    <oauth2-bearer-token token-endpoint-uri="...">...</oauth2-bearer-token>
-</credentials>
-
-
-
-
-
<set-authorization-name name="…​" />
-
-

Specify the name that should be used for authorization if different from the authentication identity.

-
-
<providers/>
-
-

This element is described in more detail within [<providers />|#Providers] and overrides the default or inherited provider discovery with a definition specific to this authentication configuration definition.

-
-
-
-
-

The final two elements are mutually exclusive and define how the SASL mechanism factories will be discovered for authentication.

-
-
-
-
<use-provider-sasl-factory />
-
-

The [java.security.Provider|https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html] instances either inherited or defined in this configuration will be used to locate the available SASL client factories.

-
-
<use-service-loader-sasl-factory module-name="…​" />
-
-

SASL client factories will be discovered using service loader discovery on the specified module or if not specified using the ClassLoader loading the configuration.

-
-
-
-
-
-

3.1.5. <net-authenticator />

-
-

This element contains no specific configuration, however if present the [org.wildfly.security.auth.util.ElytronAuthenticator|http://wildfly-security.github.io/wildfly-elytron/1.1.x/org/wildfly/security/auth/util/ElytronAuthenticator.html] will be registered with [java.net.Authenticator.setDefault(Authenticator)|https://docs.oracle.com/javase/8/docs/api/java/net/Authenticator.html#setDefault-java.net.Authenticator-] meaning that the WildFly Elytron authentication client configuration can be used for authentication where the JDK APIs are used for HTTP calls which require authentication.

-
-
-

There are some limitations within this integration as the JDK will cache the authentication JVM wide from the first call so is better used in stand alone processes that don’t require different credentials for different calls to the same URI,

-
-
-
-

3.1.6. <ssl-contexts />

-
-

The <ssl-contexts /> element holds individual names SSLContext definitions that can subsequently be matched by the [<ssl-context-rules />|#Rules].

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.4">
-        <ssl-contexts>
-            <default-ssl-context name="..."/>
-            <ssl-context name="...">
-                <key-store-ssl-certificate>...</key-store-ssl-certificate>
-                <trust-store key-store-name="..." />
-                <cipher-suite selector="..." names="..." />
-                <protocol names="... ..." />
-                <provider-name name="..." />
-                <providers>...</providers>
-                <certificate-revocation-list path="..." maximum-cert-path="..." />
-            </ssl-context>
-        </ssl-contexts>
-    </authentication-client>
-</configuration>
-
-
-
-

The element <default-ssl-context name="…​" /> simply takes the SSLContext obtainable from [javax.net.ssl.SSLContext.getDefault()|https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLContext.html#getDefault--] and assigns it a name so it can referenced from the [<ssl-context-rules />|#Rules]. This element can be repeated meaning the default SSLContext can be referenced using different names.

-
-
-

The element <ssl-context /> is used to define a named configured SSLContext, each of the child elements is optional and can be specified at most once to build up the configuration of the SSLContext.

-
-
-
-
<key-store-ssl-certificate>
-
-

Defines a reference to an entry within a KeyStore for the key and certificate to use in this SSLContext.

-
-
-
-
-

The overall structure of this element is: -

-
-
-
-
<key-store-ssl-certificate key-store-name="..." alias="..." provider-name="..." algorithm="...">
-   <key-store-clear-password password="..." />
-   <key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-   <credential-store-reference store="..." alias="..." clear-text="..." />
-   <key-store-credential>...</key-store-credential>
-</key-store-ssl-certificate>
-
-
-
-

This structure is identical to the structure use in [<key-store-credential />|#key-store-credential], but it is to obtain the entry for the key and certificate. The nested elements however remain the protection parameter to unlock the entry. In comparison with the key-store-credential the key-store-ssl-certificate allows to configure also the TrustManager: -

-
-
-
-
provider-name
-
-

- Name of the provider used to obtain the KeyManagerFactory.

-
-
algorithm
-
-

- The algorithm name of the KeyManagerFactory to obtain.

-
-
<trust-store-key-store-name />
-
-

A reference to a KeyStore that will be used to initialise the TrustManager.

-
-
<cipher-suite selector="…​" names="…​" />
-
-

Configuration to filter the enabled cipher suites. This element must contain at least one of the following two attributes: -

-
-
selector
-
-

(Optional) Used to configure the enabled cipher suites for TLSv1.2 and below. The format of the selector attribute is described in detail -in org.wildfly.security.ssl.CipherSuiteSelector.fromString(selector). -The default value is DEFAULT, which corresponds to all known cipher suites that do not have NULL encryption and excludes any cipher suites that have no authentication.

-
-
names
-
-

(Optional) Used to configure the enabled cipher suites for TLSv1.3. The format of the names attribute is a simple colon (":") -separated list of TLSv1.3 cipher suite names (e.g., TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256). -This attribute must be specified in order for TLSv1.3 to be enabled.

-
-
-
-
-

The following example configuration specifies that the default filtering should be used for TLSv1.2 and below and specifies that the -TLS_AES_128_CCM_8_SHA256 and TLS_AES_256_GCM_SHA384 cipher suites should be used for TLSv1.3.

-
-
-
-
<cipher-suite selector="DEFAULT" names="TLS_AES_128_CCM_8_SHA256:TLS_AES_256_GCM_SHA384"/>
-
-
-
-
-
<protocol names="…​"/>
-
-

Used to define a space separated list of the protocols to be supported. The default value is TLSv1 TLSv1.1 TLSv1.2 TLSv1.3. Note that the TLSv1.3 protocol will only be usable when running against JDK 11 or higher.

-
-
<provider-name />
-
-

Once the available providers have been identified only the provider with the name defined on this element will be used.

-
-
<providers/>
-
-

This element is described in more detail within [<providers />|#Providers] and overrides the default or inherited provider discovery with a definition specific to this SSLContext definition.

-
-
<certificate-revocation-list />
-
-

The presence of this element enabled checking the peer’s certificate against a certificate revocation list, this element defines both a path to the certificate revocation list and also specifies the maximum number of non-self-issued intermediate certificates that may exist in a certification path

-
-
<certificate-revocation-lists />
-
-

This element enables checking the peer’s certificate against multiple certificate revocation lists. This element defines a list of certificate revocation list objects which define a path to the certificate revocation list, -and also the base path of the certificate revocation list file.

-
-
-
-
- - - - - -
- - -The certificate-revocation-list element can be substituted by a certificate-revocation-lists element which in turn allows the -configuration of multiple certificate revocation lists as follows. -
-
-
-
-
<configuration>
-    <authentication-client xmlns="urn:elytron:1.4">
-        <ssl-contexts>
-            <default-ssl-context name="..."/>
-            <ssl-context name="...">
-                ...
-                <certificate-revocation-lists>
-                    <certificate-revocation-list path="..." relative-to="..." />
-                    <certificate-revocation-list path="..." relative-to="..." />
-                </certificate-revocation-lists>
-            </ssl-context>
-        </ssl-contexts>
-    </authentication-client>
-</configuration>
-
-
-
-
Configuring SSLv2Hello
-
-

Older JDK versions use SSLv2Hello during the initial SSL handshake message -where the SSL/TLS version that will be used for the rest of the communication is -negotiated.

-
-
-

Using SSLv2Hello is discouraged, therefore newer JDK versions disable this protocol -on the client by default. However, they do provide the ability to re-enable it if necessary.

-
-
-

SSLv2Hello can be configured as a supported protocol for the SSL context as follows:

-
-
-
-
<protocol names="SSLv2Hello TLSv1">
-
-
-
-
-
WARNING:
-
-
    -
  • -

    The use of SSLv2Hello is strongly discouraged.

    -
  • -
  • -

    SSLv2Hello cannot be configured by itself, as its purpose is to determine -which encryption protocols are supported by the server it connects to. It always -needs to be configured along side another encryption protocol.

    -
  • -
  • -

    Additionally, IBM JDK does not support specifying SSLv2Hello in its client, although a -server side connection always accepts this protocol.

    -
  • -
-
-
-
-
-

3.1.7. <providers />

-
-

The <providers /> element is used to define how [java.security.Provider|https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html] instances are located when required. The other configuration sections of <authentication-client /> are independent of each other, the <providers /> configuration however applies to the current element and it’s children unless overridden, this configuration can be specified in the following locations.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <providers />
-        ...
-        <credential-stores>
-            <credential-store name="..">
-                ...
-                <providers />
-            </credential-store>
-        <credential-stores>
-        ...
-        <authentication-configurations>
-            <authentication-configuration name="...">
-                ...
-                <providers />
-            </authentication-configuration>
-        </authentication-configurations>
-        ...
-        <ssl-contexts>
-            <ssl-context name="...">
-                ...
-                <providers />
-            </ssl-context>
-        </ssl-contexts>
-    </authentication-client>
-</configuration>
-
-
-
-

If an individual <credential-store />, <authentication-configuration />, or <ssl-context /> contains a <providers /> definition that that definition will apply specifically to that instance. If a configured item does not contain a <providers /> definition but a top level <providers /> is defined within <authentication-configuration /> then that will be used instead.

-
-
-

The <providers /> element can be defined as: -

-
-
-
-
<providers>
-    <global />
-    <use-service-loader module-name="..." />
-</providers>
-
-
-
-

Both the child elements are optional, can appear in any order and can be repeated although repeating <global /> would not really be beneficial.

-
-
-
-
<global />
-
-

The providers from [java.security.Security.getProviders()|https://docs.oracle.com/javase/8/docs/api/java/security/Security.html#getProviders--]

-
-
<credential-stores />
-
-

Providers loaded using service loader discovery from the module specified, if no module is specified the ClassLoader which loaded the authentication client is used.

-
-
-
-
-

Where no <provider /> configuration exists the default behaviour is the equivalent of: -

-
-
-
-
<providers>
-    <use-service-loader />
-    <global />
-</providers>
-
-
-
-

This gives the WildFly Elytron Provider priority over any globally registered Providers but also allows for the globally registered providers to be used.

-
-
-
-

3.1.8. Masked Password Types

-
-

The authentication client supports the following masked password types:

-
-
-
-
<masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-<key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-
-<!--In oauth2-bearer-token!-->
-<masked-resource-owner-credentials name="...">
-        <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-</masked-resource-owner-credentials >
-<masked-client-credentials client-id="...">
-    <masked-client-secret algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
-</masked-client-credentials>
-
-
-
-

The following attributes are used to define the masked password:

-
-
-
-
algorithm
-
-

The algorithm that was used to encrypt the password. If this attribute is not specified, the default value is "masked-MD5-DES". -A list of the supported algorithm types can be found in -Masked Password Type

-
-
key-material
-
-

The initial key material that was used to encrypt the password. If this attribute is not specified, the default value is "somearbitrarycrazystringthatdoesnotmatter".

-
-
iteration-count
-
-

The iteration count that was used to encrypt the password. This attribute is required.

-
-
salt
-
-

The salt that was used to encrypt the password. This attribute is required.

-
-
masked-password
-
-

The base64 encrypted password (without the "MASK-" prefix). This attribute is required.

-
-
initialization-vector
-
-

The initialization vector that was used to encrypt the password. This attribute is optional.

-
-
-
-
-
-
-

3.2. jboss-ejb-client

-
-

The jboss-ejb-client.xml can be used to conifure EJB client from within a deployment. The file -should be located in jar’s META-INF directory.

-
-
-
-
<jboss-ejb-client xmlns="urn:jboss:ejb-client:1.4">
-    <client-context invocation-timeout="1000" deployment-node-selector="org.foo.DeploymentNodeSelector" default-compression="5">
-        <ejb-receivers exclude-local-receiver="false" local-receiver-pass-by-value="true">
-            <remoting-ejb-receiver outbound-connection-ref="connection" connection-timeout="3000"/>
-        </ejb-receivers>
-        <http-connections>
-            <http-connection uri="http://localhost:8180/wildfly-services"/>
-        </http-connections>
-        <profile name="test-profile"/>
-    </client-context>
-</jboss-ejb-client>
-
-
-
-

3.2.1. <client-context>

-
-

Configurations that will be used to setup an EJB client context for the deployment.

-
-
-
    -
  • -

    invocation-timeout A timeout, in milliseconds, that will be used for EJB invocations. -A value of zero or a negative value will imply a "wait forever" semantic where the invocation -will never timeout and the client will wait for the invocation result indefinitely.

    -
  • -
  • -

    deployment-node-selector The fully qualified class name of the class which implements the -org.jboss.ejb.client.DeploymentNodeSelector interface. The instance of this class will be used -for selecting nodes, from among multiple eligible nodes within an EJB client context, which can -handle a particular deployment.

    -
  • -
  • -

    default-compression Default compression level (from 0 to 9) of request and response message -payload.

    -
  • -
-
-
-
<ejb-receivers>
-
-

Configures a number of remoting based EJB receivers.

-
-
-
    -
  • -

    exclude-local-receiver Set to true if the local receiver which gets added to the EJB client -context by default, has to be excluded from the context.

    -
  • -
  • -

    local-receiver-pass-by-value Set to false if the local receiver that’s available in the EJB -client context, should use pass-by-reference (instead of pass-by-value) semantics for the EJB invocations.

    -
  • -
-
-
-
<remoting-ejb-receiver>
-
-
    -
  • -

    outbound-connection-ref Reference to an outbound connection configured in the remoting subsystem.

    -
  • -
  • -

    connect-timeout The timeout, in milliseconds, to be used while creating a connection.

    -
  • -
-
-
-
-
-
<http-connections>
-
-

Configures remote http-connection for EJB invocation

-
-
-
<http-connection>
-
-

HTTP Connection for EJB invocation.

-
-
-
    -
  • -

    uri Uniform Resource Identifier for the HTTP connection should be defined.

    -
  • -
-
-
-
-
-
<profile>
-
-

References a remoting profile configured in the remoting subsystem.

-
-
-
    -
  • -

    name The name of the profile.

    -
  • -
-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-

3.3. Remoting Client Configuration

-
-

3.3.1. <endpoint /> - Remoting Client

-
-

You can use the endpoint element, which is in the urn:jboss-remoting:5.0 namespace, to configure a JBoss Remoting client endpoint using the wildfly-config.xml file. This section describes how to configure a JBoss Remoting client using this element.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-...
-    <endpoint xmlns="urn:jboss-remoting:5.0">
-       ...
-    </endpoint>
-...
-</configuration>
-
-
-
-

This section describes the child elements and attributes that can be configured within this element.

-
-
-

The <endpoint /> element contains the following optional attribute:

-
- ---- - - - - - - - - - - - - -
Attribute NameAttribute Description

name

The endpoint name. If not given, an endpoint name will be derived from the system’s host name, if possible.

-
-

The <endpoint /> element can optionally contain the following two child elements, as described in the next sections:

-
-
-
    -
  • -

    <providers />

    -
  • -
  • -

    <connections />

    -
  • -
-
-
-

The configured endpoint will use the default XNIO configuration.

-
-
-
<providers />
-
-

This optional element specifies transport providers for the remote endpoint. It can contain any number of <provider /> sub-elements.

-
-
-
<provider />
-
-

This element defines a remote transport provider provider. It has the following attributes.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
Attribute NameAttribute Description

scheme

The primary URI scheme which corresponds to this provider. This attribute is required.

aliases

A space-separated list of other URI scheme names that are also recognized for this provider . This attribute is optional.

module

The name of the module that contains the provider implementation. This attribute is optional; if not given, the class loader of JBoss Remoting itself will be searched for the provider class.

class

The name of the class that implements the transport provider. This attribute is optional; if not given, the Java java.util.ServiceLoader facility will be used to search for the provider class.

-
-

This element has no content.

-
-
-
-
-
<connections />
-
-

This optional element specifies connections for the remote endpoint. It can contain any number of [#connection] elements.

-
-
-
<connection />
-
-

This element defines a connection for the remote endpoint. It has the following attributes.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Attribute NameAttribute Description

destination

The destination URI for the connection. This attribute is required.

read-timeout

The timeout, in seconds, for read operations on the corresponding socket. This attribute is optional, however it should only be given if a heartbeat-interval is defined.

write-timeout

The timeout, in seconds, for a write operation. This attribute is optional, however it should only be given if a heartbeat-interval is defined..

ip-traffic-class

Defines the numeric IP traffic class to use for this connection’s traffic. This attribute is optional.

tcp-keepalive

Boolean setting that determines whether to use TCP keepalive. This attribute is optional.

heartbeat-interval

The interval, in milliseconds, to use when checking for a connection heartbeat. This attribute is optional.

-
-
-
-
Example Remoting Client Configuration in the wildfly-config.xml File
-
-
-
<configuration>
-...
-    <endpoint xmlns="urn:jboss-remoting:5.0">
-        <connections>
-            <connection destination="remote+http://10.20.30.40:8080" read-timeout="50" write-timeout="50" heartbeat-interval="10000"/>
-        </connections>
-    </endpoint>
-...
-</configuration>
-
-
-
-
-
-
-

3.4. XNIO Client Configuration

-
-

3.4.1. <worker /> - XNIO Client

-
-

You can use the worker element, which is in the urn:xnio:3.5 namespace, to configure a default XNIO worker using the wildfly-config.xml file. This section describes how to do this.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-...
-    <worker xmlns="urn:xnio:3.5">
-       ...
-    </worker>
-...
-</configuration>
-
-
-
-

This section describes the child elements that can be configured within this root worker element.

-
-
-

The <worker /> element can optionally contain the following child elements, as described in the next sections:

-
-
-
    -
  • -

    <daemon-threads />

    -
  • -
  • -

    <worker-name />

    -
  • -
  • -

    <pool-size />

    -
  • -
  • -

    <task-keepalive />

    -
  • -
  • -

    <io-threads />

    -
  • -
  • -

    <stack-size />

    -
  • -
  • -

    <outbound-bind-addresses />

    -
  • -
-
-
-
<daemon-threads />
-
-

This optional element takes a single required attribute:

-
- ---- - - - - - - - - - - - - -
Attribute NameAttribute Description

value

The value of the setting (required). A value of true indicates that worker and task threads should be daemon threads, and false indicates that they should not be daemon threads. If this element is not given, a value of true is assumed.

-
-

This element has no content.

-
-
-
-
<worker-name />
-
-

This element defines the name of the worker. The worker name will appear in thread dumps and in JMX.

-
- ---- - - - - - - - - - - - - -
Attribute NameAttribute Description

value

The worker’s name (required).

-
-

This element has no content.

-
-
-
-
<pool-size />
-
-

This optional element defines the size parameters of the worker’s task thread pool. The following attributes are allowed:

-
- ---- - - - - - - - - - - - - -
Attribute NameAttribute Description

max-threads

A positive integer which specifies the maximum number of threads that should be created (required).

-
-
-
<task-keepalive />
-
-

This optional element establishes the keep-alive time of task threads before they may be expired.

-
- ---- - - - - - - - - - - - - -
Attribute NameAttribute Description

value

A positive integer which represents the minimum number of seconds to keep idle threads alive (required).

-
-
-
<io-threads />
-
-

This optional element determines how many I/O (selector) threads should be maintained. Generally this number should be a small constant multiple of the number of available cores.

-
- ---- - - - - - - - - - - - - -
Attribute NameAttribute Description

value

A positive integer value for the number of I/O threads (required).

-
-
-
<stack-size />
-
-

This optional element establishes the desired minimum thread stack size for worker threads.

-
- ---- - - - - - - - - - - - - -
Attribute NameAttribute Description

value

A positive integer value which indicates the requested stack size, in bytes (required).

-
-
-
<outbound-bind-addresses />
-
-

This optional element specifies bind addresses to use for outbound connections. Each bind address mapping consists of a destination IP address block, and a bind address and optional port number to use for connections to destinations within that block.

-
-
-
<bind-address />
-
-

This element defines an individual bind address mapping.

-
- ---- - - - - - - - - - - - - - - - - - - - - -
Attribute NameAttribute Description

match

The IP address block in CIDR notation to match (required).

bind-address

The IP address to bind to if the address block matches (required).

bind-port

A specific port number to bind to if the address block matches (optional, defaults to 0 meaning "any port").

-
-
-
-
-
-

3.5. webservices-client

-
-

<webservices /> - Webservices Client

-
-
-

The <webservices /> element in a wildfly-config.xml file can be used to specify Web Services Client configuration that will apply during assigning of configurations when building a client. This element is from the “urn:elytron:client:1.5” namespace. Below is the example of use:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-...
-    <webservices>
-       ...
-    </webservices>
-...
-</configuration>
-
-
-
-

The <webservices /> element can optionally contain the following child elements:

-
-
-
    -
  • -

    <set-http-mechanism name="BASIC"/> This element is used to specify an HTTP mechanism that WS client should use to authenticate. Currently only the HTTP Basic authentication is supported and used as default.

    -
  • -
  • -

    <set-ws-security-type name="UsernameToken"/> This element is used to specify WS-Security type that WS client will use to authenticate with the server. Currently only Username Token Profile can be configured.

    -
  • -
-
-
-

These elements will take effect only if both username and password are configured in Elytron client.

-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Client_Guide.html

+ \ No newline at end of file diff --git a/29/Cloud_References.html b/29/Cloud_References.html index 344404611..55e495787 100644 --- a/29/Cloud_References.html +++ b/29/Cloud_References.html @@ -1,544 +1,11 @@ - - - - - -References - - - - - - -
-
-

Helm

- -
-
-

OpenShift

- -
-
-

WildFly

- -
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Cloud_References.html

+ \ No newline at end of file diff --git a/29/Developer_Guide.html b/29/Developer_Guide.html index 31bf00165..23186a366 100644 --- a/29/Developer_Guide.html +++ b/29/Developer_Guide.html @@ -1,25349 +1,11 @@ - - - - - - -Developer Guide - - - - - - - -
-
-
-
-

© 2017 The original authors.

-
- -
-
Target Audience
-

Java Developers

-
-
-
-
-

1. Class Loading in WildFly

-
-
-

Since JBoss AS 7, Class loading is considerably different from previous -versions of JBoss AS. Class loading is based on the -MODULES project. Instead of the more familiar -hierarchical class loading environment, WildFly’s class loading is based -on modules that have to define explicit dependencies on other modules. -Deployments in WildFly are also modules, and do not have access to -classes that are defined in jars in the application server unless an -explicit dependency on those classes is defined.

-
-
-

1.1. Deployment Module Names

-
-

Module names for top level deployments follow the format -deployment.myarchive.war while sub deployments are named like -deployment.myear.ear.mywar.war.

-
-
-

This means that it is possible for a deployment to import classes from -another deployment using the other deployments module name, the details -of how to add an explicit module dependency are explained below.

-
-
-
-

1.2. Automatic Dependencies

-
-

Even though in WildFly modules are isolated by default, as part of the -deployment process some dependencies on modules defined by the -application server are set up for you automatically. For instance, if -you are deploying a Jakarta EE application a dependency on the Java EE -API’s will be added to your module automatically. Similarly, if your -module contains a beans.xml file a dependency on -Weld will be added automatically, along -with any supporting modules that weld needs to operate.

-
-
-

For a complete list of the automatic dependencies that are added, please -see Implicit module dependencies for deployments.

-
-
-

Automatic dependencies can be excluded through the use of -jboss-deployment-structure.xml.

-
-
-
-

1.3. Class Loading Precedence

-
-

A common source of errors in Java applications is including API classes -in a deployment that are also provided by the container. This can result -in multiple versions of the class being created and the deployment -failing to deploy properly. To prevent this in WildFly, module -dependencies are added in a specific order that should prevent this -situation from occurring.

-
-
-

In order of highest priority to lowest priority

-
-
-
    -
  1. -

    System Dependencies - These are dependencies that are added to the -module automatically by the container, including the Jakarta EE api’s.

    -
  2. -
  3. -

    User Dependencies - These are dependencies that are added through -jboss-deployment-structure.xml or through the Dependencies: manifest -entry.

    -
  4. -
  5. -

    Local Resource - Class files packaged up inside the deployment -itself, e.g. class files from WEB-INF/classes or WEB-INF/lib of a -war.

    -
  6. -
  7. -

    Inter deployment dependencies - These are dependencies on other -deployments in an ear deployment. This can include classes in an ear’s -lib directory, or classes defined in other ejb jars.

    -
  8. -
-
-
-
-

1.4. WAR Class Loading

-
-

The war is considered to be a single module, so classes defined in -WEB-INF/lib are treated the same as classes in WEB-INF/classes. All -classes packaged in the war will be loaded with the same class loader.

-
-
-
-

1.5. EAR Class Loading

-
-

Ear deployments are multi-module deployments. This means that not all -classes inside an ear will necessarily have access to all other classes -in the ear, unless explicit dependencies have been defined. By default -the EAR/lib directory is a single module, and every WAR or EJB jar -deployment is also a separate module. Sub deployments (wars and -ejb-jars) always have a dependency on the parent module, which gives -them access to classes in EAR/lib, however they do not always have an -automatic dependency on each other. This behaviour is controlled via the -ear-subdeployments-isolated setting in the ee subsystem configuration:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:ee:1.0" >            
-  <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
-</subsystem>
-
-
-
-

By default this is set to false, which allows the sub-deployments to see -classes belonging to other sub-deployments within the .ear.

-
-
-

For example, consider the following .ear deployment:

-
-
-
-
myapp.ear
- |
- |--- web.war
- |
- |--- ejb1.jar
- |
- |--- ejb2.jar
-
-
-
-

If the ear-subdeployments-isolated is set to false, then the classes in -web.war can access classes belonging to ejb1.jar and ejb2.jar. -Similarly, classes from ejb1.jar can access classes from ejb2.jar (and -vice-versa).

-
-
- - - - - -
- - -The ear-subdeployments-isolated element value has no effect on the -isolated classloader of the .war file(s). i.e. irrespective of whether -this flag is set to true or false, the .war within a .ear will have an -isolated classloader and other sub-deployments within that .ear will not -be able to access classes from that .war. This is as per spec. -
-
-
-

If the ear-subdeployments-isolated is set to true then no automatic -module dependencies between the sub-deployments are set up. User must -manually setup the dependency with Class-Path entries, or by setting -up explicit module dependencies.

-
-
-

Portability

-
-
- - - - - -
- - -The Jakarta EE specification says that portable applications should not -rely on sub deployments having access to other sub deployments unless an -explicit Class-Path entry is set in the MANIFEST.MF. So portable -applications should always use Class-Path entry to explicitly state -their dependencies. -
-
-
- - - - - -
- - -It is also possible to override the ear-subdeployments-isolated element -value at a per deployment level. See the section on -jboss-deployment-structure.xml below. -
-
-
-

1.5.1. Dependencies: Manifest Entries

-
-

Deployments (or more correctly modules within a deployment) may set up -dependencies on other modules by adding a Dependencies: manifest -entry. This entry consists of a comma separated list of module names -that the deployment requires. The available modules can be seen under -the modules directory in the application server distribution. For -example to add a dependency on javassist and apache velocity you can add -a manifest entry as follows:

-
-
-

Dependencies: org.javassist export,org.apache.velocity export services,org.antlr

-
-
-

Each dependency entry may also specify some of the following parameters -by adding them after the module name:

-
-
-
    -
  • -

    export This means that the dependencies will be exported, so any -module that depends on this module will also get access to the -dependency.

    -
  • -
  • -

    services By default items in META-INF of a dependency are not -accessible, this makes items from META-INF/services accessible so -services in -the modules can be loaded.

    -
  • -
  • -

    optional If this is specified the deployment will not fail if the -module is not available.

    -
  • -
  • -

    meta-inf This will make the contents of the META-INF directory -available (unlike services, which just makes META-INF/services -available). In general this will not cause any deployment descriptors in -META-INF to be processed, with the exception of beans.xml. If a -beans.xml file is present this module will be scanned by Weld and any -resulting beans will be available to the application.

    -
  • -
  • -

    annotations If a Jandex index has be created for the module these -annotations will be merged into the deployments annotation index. The -Jandex index can be generated using -the Jandex Ant task or the Jandex Maven plugin, and must be named -META-INF/jandex.idx. Note that it is not -necessary to break open the jar being indexed to add this to the modules -class path, a better approach is to create a jar containing just this -index, and adding it as an additional resource root in the module.xml -file.

    -
  • -
-
-
-

Adding a dependency to all modules in an EAR

-
-
- - - - - -
- - -Using the export parameter it is possible to add a dependency to all -sub deployments in an ear. If a module is exported from a -Dependencies: entry in the top level of the ear (or by a jar in the -ear/lib directory) it will be available to all sub deployments as -well. -
-
-
- - - - - -
- - -To generate a MANIFEST.MF entry when using maven put the following in -your pom.xml: -
-
-
-
pom.xml
-
-
<build>
-   ...
-   <plugins>
-     <plugin>
-       <groupId>org.apache.maven.plugins</groupId>
-       <artifactId>maven-war-plugin</artifactId>
-       <configuration>
-          <archive>
-             <manifestEntries>
-                <Dependencies>org.slf4j</Dependencies>
-             </manifestEntries>
-          </archive>
-       </configuration>
-     </plugin>
-   </plugins>
-</build>
-
-
-
-

If your deployment is a jar you must use the maven-jar-plugin rather -than the maven-war-plugin.

-
-
-
-

1.5.2. Class Path Entries

-
-

It is also possible to add module dependencies on other modules inside -the deployment using the Class-Path manifest entry. This can be used -within an ear to set up dependencies between sub deployments, and also -to allow modules access to additional jars deployed in an ear that are -not sub deployments and are not in the EAR/lib directory. If a jar in -the EAR/lib directory references a jar via Class-Path: then this -additional jar is merged into the parent ear’s module, and is accessible -to all sub deployments in the ear.

-
-
-
-
-

1.6. Global Modules

-
-

It is also possible to set up global modules, that are accessible to all -deployments. This is done by modifying the configuration file -(standalone/domain.xml).

-
-
-

For example, to add javassist to all deployments you can use the -following XML:

-
-
-
standalone.xml/domain.xml
-
-
<subsystem xmlns="urn:jboss:domain:ee:1.0" >            
-  <global-modules>
-    <module name="org.javassist" slot="main" />            
-  </global-modules> 
-</subsystem>
-
-
-
-

Note that the slot field is optional and defaults to main.

-
-
-
-

1.7. Global Directory

-
-

The EE subsystem allows the configuration of a global directory, which represents a directory tree scanned automatically to include .jar files and resources as a single additional dependency. This dependency is added as a system dependency to all deployed application. See Subsystem EE Global Directory to get more information about how to set up a global directory.

-
-
-
-

1.8. JBoss Deployment Structure File

-
-

jboss-deployment-structure.xml is a JBoss specific deployment -descriptor that can be used to control class loading in a fine grained -manner. It should be placed in the top level deployment, in META-INF -(or WEB-INF for web deployments). It can do the following:

-
-
-
    -
  • -

    Prevent automatic dependencies from being added

    -
  • -
  • -

    Add additional dependencies

    -
  • -
  • -

    Define additional modules

    -
  • -
  • -

    Change an EAR deployments isolated class loading behaviour

    -
  • -
  • -

    Add additional resource roots to a module

    -
  • -
-
-
-

An example of a complete jboss-deployment-structure.xml file for an -ear deployment is as follows:

-
-
-
jboss-deployment-structure.xml
-
-
<jboss-deployment-structure>
-  <!-- Make sub deployments isolated by default, so they cannot see each others classes without a Class-Path entry -->
-  <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
-  <!-- This corresponds to the top level deployment. For a war this is the war's module, for an ear -->
-  <!-- This is the top level ear module, which contains all the classes in the EAR's lib folder     -->
-  <deployment>
-     <!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
-     <!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
-     <exclude-subsystems>
-        <subsystem name="logging" />
-    </exclude-subsystems>
-    <!-- Exclusions allow you to prevent the server from automatically adding some dependencies     -->
-    <exclusions>
-        <module name="org.javassist" />
-    </exclusions>
-    <!-- This allows you to define additional dependencies, it is the same as using the Dependencies: manifest attribute -->
-    <dependencies>
-      <module name="deployment.javassist.proxy" />
-      <module name="deployment.myjavassist" />
-      <!-- Import META-INF/services for ServiceLoader impls as well -->
-      <module name="myservicemodule" services="import"/>
-    </dependencies>
-    <!-- These add additional classes to the module. In this case it is the same as including the jar in the EAR's lib directory -->
-    <resources>
-      <resource-root path="my-library.jar" />
-    </resources>
-  </deployment>
-  <sub-deployment name="myapp.war">
-    <!-- This corresponds to the module for a web deployment -->
-    <!-- it can use all the same tags as the <deployment> entry above -->
-    <dependencies>
-      <!-- Adds a dependency on a ejb jar. This could also be done with a Class-Path entry -->
-      <module name="deployment.myear.ear.myejbjar.jar" />
-    </dependencies>
-    <!-- Set's local resources to have the lowest priority -->
-    <!-- If the same class is both in the sub deployment and in another sub deployment that -->
-    <!-- is visible to the war, then the Class from the other deployment will be loaded,  -->
-    <!-- rather than the class actually packaged in the war. -->
-    <!-- This can be used to resolve ClassCastExceptions  if the same class is in multiple sub deployments-->
-    <local-last value="true" />
-  </sub-deployment>
-  <!-- Now we are going to define two additional modules -->
-  <!-- This one is a different version of javassist that we have packaged -->
-  <module name="deployment.myjavassist" >
-    <resources>
-     <resource-root path="javassist.jar" >
-       <!-- We want to use the servers version of javassist.util.proxy.* so we filter it out-->
-       <filter>
-         <exclude path="javassist/util/proxy" />
-       </filter>
-     </resource-root>
-    </resources>
-  </module>
-  <!-- This is a module that re-exports the containers version of javassist.util.proxy -->
-  <!-- This means that there is only one version of the Proxy classes defined          -->
-  <module name="deployment.javassist.proxy" >
-    <dependencies>
-      <module name="org.javassist" >
-        <imports>
-          <include path="javassist/util/proxy" />
-          <exclude path="/**" />
-        </imports>
-      </module>
-    </dependencies>
-  </module>
-</jboss-deployment-structure>
-
-
-
- - - - - -
- - -The xsd for jboss-deployment-structure.xml is available at -jboss-deployment-structure-1_3.xsd -
-
-
-
-

1.9. Accessing JDK classes

-
-

Not all JDK classes are exposed to a deployment by default. If your -deployment uses JDK classes that are not exposed you can get access to -them using jboss-deployment-structure.xml with system dependencies:

-
-
-
Using jboss-deployment-structure.xml to access JDK classes
-
-
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
-    <deployment>
-        <dependencies>
-            <system export="true">
-                <paths>
-                    <path name="com/sun/corba/se/spi/legacy/connection"/>
-                </paths>
-            </system>
-        </dependencies>
-    </deployment>
-</jboss-deployment-structure>
-
-
-
-
-

1.10. The "jboss.api" property and application use of modules shipped with WildFly

-
-

The WildFly distribution includes a large number of modules, a great -many of which are included for use by WildFly internals, with no testing -of the appropriateness of their direct use by applications or any -commitment to continue to ship those modules in future releases if they -are no longer needed by the internals. So how can a user know whether it -is advisable for their application to specify an explicit dependency on -a module WildFly ships? The "jboss.api" property specified in the -module’s module.xml file can tell you:

-
-
-
Example declaration of the jboss.api property
-
-
<module xmlns="urn:jboss:module:1.9" name="com.google.guava">
-    <properties>
-        <property name="jboss.api" value="private"/>
-    </properties>
-
-
-
-

If a module does not have a property element like the above, then it’s -equivalent to one with a value of "public".

-
-
-

Following are the meanings of the various values you may see for the -jboss.api property:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning

public

May be explicitly depended upon by end user applications. Will -continue to be available in future releases within the same major series -and should not have incompatible API changes in future releases within -the same minor series, and ideally not within the same major series.

private

Intended for internal use only. Only tested according to -internal usage. May not be safe for end user applications to use -directly.Could change significantly or be removed in a future release -without notice.

unsupported

If you see this value in a module.xml in a WildFly -release, please file a bug report, as it is not applicable in WildFly. -In EAP it has a meaning equivalent to "private" but that does not mean -the module is "private" in WildFly; it could very easily be "public".

preview

May be explicitly depended upon by end user applications, but -there are no guarantees of continued availability in future releases or -that there will not be incompatible API changes. This is not a common -classification in WildFly. It is not used in WildFly 10.

deprecated

May be explicitly depended upon by end user applications. -Stable and reliable but an alternative should be sought. Will be removed -in a future major release.

-
-

Note that these definitions are only applicable to WildFly. In EAP and -other Red Hat products based on WildFly the same classifiers are used, -with generally similar meaning, but the precise meaning is per the -definitions on the Red Hat customer support portal.

-
-
-

If an application declares a direct dependency on a module marked -"private", "unsupported" or "deprecated", during deployment a WARN -message will be logged. The logging will be in log categories -"org.jboss.as.dependency.private", "org.jboss.as.dependency.unsupported" -and "org.jboss.as.dependency.deprecated" respectively. These categories -are not used for other purposes, so once you feel sufficiently warned -the logging can be safely suppressed by turning the log level for the -relevant category to ERROR or higher.

-
-
-

Other than the WARN messages noted above, declaring a direct dependency -on a non-public module has no impact on how WildFly processes the -deployment.

-
-
-
-

1.11. How to list the module dependencies of a deployed application

-
-

In WildFly it is possible to list the module dependencies added by the container to your deployed application. This task can be achieved via the command line interface, where specific operations are available to list the module dependencies for deployments and ear-subdeployments.

-
-
-

You can list the module dependencies of a deployment using the list-modules operation as below:

-
-
-
-
[standalone@localhost:9990 /] /deployment=test-application.war:list-modules
-
-
-
-

In case of ear-subdeployments, the list-modules operation is also available under the subdeployment resource:

-
-
-
-
[standalone@localhost:9990 /] /deployment=test-application.ear/subdeployment=test-application.war:list-modules
-
-
-
-

If you are running WildFly in domain mode, this operation is available via the server resource at the host level:

-
-
-
-
[domain@localhost:9990 /] /host=primary/server=server-one/deployment=test-application.war:list-modules
-
-
-
-
-
[domain@localhost:9990 /] /host=primary/server=server-one/deployment=test-application.ear/subdeployment=test-application.war:list-modules
-
-
-
-

By default, the list-modules operation shows the list of dependencies in a compact view, including only the module name. You can control this output using the attribute verbose=[false*|true] to enable/disable a detailed response.

-
-
-

The following output shows an example of a detailed view:

-
-
-
-
[standalone@localhost:9990 /] /deployment=test-application.ear:list-modules(verbose=true)
-  {
-      "outcome" => "success",
-      "result" => {
-          "system-dependencies" => [
-              {
-                  "name" => "com.fasterxml.jackson.datatype.jackson-datatype-jdk8",
-                  "optional" => true,
-                  "export" => false,
-                  "import-services" => true
-              },
-              {
-                  "name" => "com.fasterxml.jackson.datatype.jackson-datatype-jsr310",
-                  "optional" => true,
-                  "export" => false,
-                  "import-services" => true
-              },
-              ...
-          ],
-          "local-dependencies" => [
-              {
-                "name" => "deployment.test-application.ear.test-application-ejb.jar",
-                "optional" => false,
-                "export" => false,
-                "import-services" => true
-              },
-              ...
-          ],
-          "user-dependencies" => [
-              {
-                  "name" => "com.fasterxml.jackson.datatype.jackson-datatype-jdk8",
-                  "optional" => false,
-                  "export" => false,
-                  "import-services" => false
-              },
-              {
-                  "name" => "org.hibernate:5.3",
-                  "optional" => false,
-                  "export" => false,
-                  "import-services" => false
-              },
-              ...
-          ]
-      }
-  }
-
-
-
-

The list_modules operation shows information in three different categories:

-
-
-
    -
  • -

    system-dependencies: These are the dependencies added implicitly by the server container.

    -
  • -
  • -

    local-dependencies: These are dependencies on other parts of the deployment.

    -
  • -
  • -

    user-dependencies: These are the dependencies defined by the user via a manifest file or deployment-structure.xml.

    -
  • -
-
-
-

For each module, the following information is shown:

-
-
-
    -
  • -

    name: The module name and, if the slot name is not the default "main" slot, the slot name is concatenated after a ":" character separator.

    -
  • -
  • -

    optional: If the dependency was added as an optional dependency.

    -
  • -
  • -

    export: If the dependency is being exported to other modules.

    -
  • -
  • -

    import-services: If the module for the deployment or subdeployment is allowed to import services from the dependency.

    -
  • -
-
-
-
-
-
-

2. Implicit module dependencies for deployments

-
-
-

As explained in the Class Loading in WildFly article, -WildFly 29 is based on module classloading. A class within a module B -isn’t visible to a class within a module A, unless module B adds a -dependency on module A. Module dependencies can be explicitly (as -explained in that classloading article) or can be "implicit". This -article will explain what implicit module dependencies mean and how, -when and which modules are added as implicit dependencies.

-
-
-

2.1. What’s an implicit module dependency?

-
-

Consider an application deployment which contains Jakarta Enterprise Beans. Jakarta Enterprise Beans typically -need access to classes from the jakarta.ejb.* package and other Jakarta EE -API packages. The jars containing these packages are already shipped in -WildFly and are available as "modules". The module which contains the -jakarta.ejb.* classes has a specific name and so does the module which -contains all the Jakarta EE API classes. For an application to be able to -use these classes, it has to add a dependency on the relevant modules. -Forcing the application developers to add module dependencies like these -(i.e. dependencies which can be "inferred") isn’t a productive approach. -Hence, whenever an application is being deployed, the deployers within -the server, which are processing this deployment "implicitly" add these -module dependencies to the deployment so that these classes are visible -to the deployment at runtime. This way the application developer doesn’t -have to worry about adding them explicitly. How and when these implicit -dependencies are added is explained in the next section.

-
-
-
-

2.2. How and when is an implicit module dependency added?

-
-

When a deployment is being processed by the server, it goes through a -chain of "deployment processors". Each of these processors will have a -way to check if the deployment meets a certain criteria and if it does, -the deployment processor adds an implicit module dependency to that -deployment. Let’s take an example - Consider (again) an Jakarta Enterprise Beans 3 deployment -which has the following class:

-
-
-
MySuperDuperBean.java
-
-
@Stateless
-public class MySuperDuperBean {
- 
-...
- 
-}
-
-
-
-

As can be seen, we have a simple @Stateless Jakarta Enterprise Beans. When the deployment -containing this class is being processed, the Jakarta Enterprise Beans deployment processor -will see that the deployment contains a class with the @Stateless -annotation and thus identifies this as an Jakarta Enterprise Beans deployment. This is just -one of the several ways, various deployment processors can identify a -deployment of some specific type. The Jakarta Enterprise Beans deployment processor will -then add an implicit dependency on the Jakarta EE API module, so that all -the Jakarta EE API classes are visible to the deployment.

-
-
-

Some subsystems will always add API classes, even if the trigger -condition is not met. These are listed separately below.

-
-
-

In the next section, we’ll list down the implicit module dependencies -that are added to a deployment, by various deployers within WildFly.

-
-
-
-

2.3. Which are the implicit module dependencies?

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subsystem responsible for adding the implicit dependencyDependencies -that are always addedDependencies that are added if a trigger -condition is metTrigger which leads to the implicit module dependency -being added

Core Server

java.se org.jboss.vfs

 

 

Batch Subsystem

jakarta.batch.api

 

 implicit

EE Subsystem

javaee.api

 

 

Jakarta Enterprise Beans 3 subsystem

 

javaee.api

The presence of ejb-jar.xml (in valid -locations in the deployment, as specified by spec) or the presence of -annotation based Jakarta Enterprise Beans (ex: @Stateless, @Stateful, @MessageDriven etc)

Jakarta RESTful Web Services (RESTEasy) subsystem

com.fasterxml.jackson.core.jackson-annotations
-com.fasterxml.jackson.core.jackson-core
-com.fasterxml.jackson.core.jackson-databind
-com.fasterxml.jackson.datatype.jackson-datatype-jdk8
-com.fasterxml.jackson.datatype.jackson-datatype-jsr310
-com.fasterxml.jackson.jakarta.jackson-jakarta-json-provider
-jakarta.json.api
-jakarta.ws.rs.api
-jakarta.xml.bind.api
-org.eclipse.microprofile.restclient
-org.jboss.resteasy.resteasy-atom-provider
-org.jboss.resteasy.resteasy-client
-org.jboss.resteasy.resteasy-client-api
-org.jboss.resteasy.resteasy-client-microprofile
-org.jboss.resteasy.resteasy-core
-org.jboss.resteasy.resteasy-core-spi
-org.jboss.resteasy.resteasy-crypto
-org.jboss.resteasy.resteasy-jackson2-provider
-org.jboss.resteasy.resteasy-jaxb-provider
-org.jboss.resteasy.resteasy-jsapi
-org.jboss.resteasy.resteasy-json-binding-provider
-org.jboss.resteasy.resteasy-json-p-provider
-org.jboss.resteasy.resteasy-multipart-provider
-org.jboss.resteasy.resteasy-validator-provider

The presence of Jakarta RESTful Web Services annotations in the deployment

Jakarta Connectors subsystem

jakarta.resource.api

jakarta.jms.api jakarta.validation.api -org.jboss.logging org.jboss.ironjacamar.api org.jboss.ironjacamar.impl -org.hibernate.validator

If the deployment is a resource adaptor (RAR) -deployment.

Jakarta Persistence (Hibernate) subsystem

jakarta.persistence.api

javaee.api -org.jboss.as.jpa org.hibernate

The presence of an @PersistenceUnit or -@PersistenceContext annotation, or a <persistence-unit-ref> or -<persistence-context-ref> in a deployment descriptor..

Logging Subsystem

org.jboss.logging org.apache.commons.logging - org.apache.logging.log4j.api org.slf4j org.jboss.logging.jul-to-slf4j-stub

 

 

SAR Subsystem

 

org.jboss.logging org.jboss.modules

The deployment -is a SAR archive

Security Subsystem

org.picketbox

 

 

Web Subsystem

 

javaee.api jakarta.faces.api jakarta.faces.impl org.hibernate.validator org.jboss.as.web org.jboss.logging

The deployment is a WAR archive. Jakarta Faces -is only added if used. Multiple version options exist for Jakarta Faces.

Web Services Subsystem

org.jboss.ws.api org.jboss.ws.spi

 

 

Weld (CDI) Subsystem

 

jakarta.persistence.api javaee.api org.javassist -org.jboss.interceptor org.jboss.as.weld org.jboss.logging -org.jboss.weld.core org.jboss.weld.api org.jboss.weld.spi

If a -beans.xml file is detected in the deployment

-
-
-
-
-

3. Deployment Descriptors used In WildFly

-
-
-

This page gives a list and a description of all the valid deployment -descriptors that a WildFly deployment can use. This document is a work -in progress.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DescriptorLocationSpecificationDescriptionInfo

jboss-deployment-structure.xml

META-INF or WEB-INF of the top level -deployment

 

This file can be used to control class loading for the -deployment

Class Loading in WildFly

beans.xml

WEB-INF or META-INF

Jakarta Contexts and Dependency Injection

The presence of this descriptor -(even if empty) activates Jakarta Contexts and Dependency Injection

Weld Reference Guide

web.xml

WEB-INF

Servlet

Web deployment descriptor

 

jboss-web.xml

WEB-INF

 

JBoss Web deployment descriptor. This can be -use to override settings from web.xml, and to set WildFly specific -options

 

ejb-jar.xml

WEB-INF of a war, or META-INF of an Jakarta Enterprise Beans jar

Jakarta Enterprise Beans

The Jakarta Enterprise Beans -spec deployment descriptor

ejb-jar.xml schema

jboss-ejb3.xml

WEB-INF of a war, or META-INF of an Jakarta Enterprise Beans jar

 

The -JBoss Jakarta Enterprise Beans deployment descriptor, this can be used to override settings -from ejb-jar.xml, and to set WildFly specific settings

 

application.xml

META-INF of an EAR

Jakarta EE Platform Specification

 

application.xml schema

jboss-app.xml

META-INF of an EAR

 

JBoss application deployment -descriptor, can be used to override settings application.xml, and to set -WildFly specific settings

 

persistence.xml

META-INF

Jakarta Persistence

Jakarta Persistence descriptor used for defining -persistence units

Hibernate Reference Guide

jboss-ejb-client.xml

WEB-INF of a war, or META-INF of an Jakarta Enterprise Beans jar

 

Remote Jakarta Enterprise Beans settings. This file is used to setup the Jakarta Enterprise Beans client context -for a deployment that is used for remote Jakarta Enterprise Beans invocations

Jakarta Enterprise Beans -invocations from a remote server instance

jbosscmp-jdbc.xml

META-INF of an Jakarta Enterprise Beans jar

 

CMP deployment -descriptor. Used to map CMP entity beans to a database. The format is -largely unchanged from previous versions.

 

ra.xml

META-INF of a rar archive

 

Spec deployment descriptor for -resource adaptor deployments

IronJacamar Reference Guide Schema

ironjacamar.xml

META-INF of a rar archive

 

JBoss deployment -descriptor for resource adaptor deployments

IronJacamar Reference Guide

*-jms.xml

META-INF or WEB-INF

 

Jakarta Messaging message destination deployment -descriptor, used to deploy message destinations with a deployment

 

*-ds.xml

META-INF or WEB-INF

 

Datasource deployment descriptor, use -to bundle datasources with a deployment

DataSource Configuration

application-client.xml

META-INF of an application client jar

Jakarta EE -Platform Specification

The spec deployment descriptor for application -client deployments

application-client.xml schema

jboss-client.xml

META-INF of an application client jar

 

The WildFly -specific deployment descriptor for application client deployments

 

jboss-webservices.xml

META-INF for Jakarta Enterprise Beans webservice deployments or -WEB-INF for POJO webservice deployments/Jakarta Enterprise Beans webservice endpoints bundled -in .war

 

The JBossWS 4.0.x specific deployment descriptor for -webservice endpoints

 

-
-
-
- -
-
-

The purpose of this page is to document tips and techniques that will -assist developers in creating fast, secure, and reliable applications. -It is also a place to note what you should avoid doing when developing -applications.

-
-
-
-
-

5. Application Client Reference

-
-
-

As a Jakarta EE compliant server, WildFly 29 contains an application -client. An application client is essentially a cut down server instance, -that allows you to use EE features such as injection in a client side -program.

-
-
- - - - - -
- - -This article is not a tutorial on application client development, rather -it covers the specifics of the WildFly application client. There are -tutorials available elsewhere that cover application client basics, such -as -this -one. -
-
-
- - - - - -
- - -Note that the application client is different from the Jakarta Enterprise Beans client -libraries, it is perfectly possible to write a client application that does -not use the application client, but instead uses the jboss-ejb-client -library directly. -
-
-
-

5.1. Getting Started

-
-

To launch the application client use the appclient.sh or -appclient.bat script in the bin directory. For example:

-
-
-
-
./appclient.sh --host=10.0.0.1 myear.ear#appClient.jar arg1
-
-
-
-

The --host argument tells the appclient the server to connect to. The -next argument is the application client deployment to use, application -clients can only run a single deployment, and this deployment must also -be deployed on the full server instance that the client is connecting -too.

-
-
-

Any arguments after the deployment to use are passed directly through to -the application clients main function.

-
-
-
-

5.2. Connecting to more than one host

-
-

If you want to connect to more than one host or make use of the -clustering functionality then you need to specify a -jboss-ejb-client.properties file rather than a host:

-
-
-
-
./appclient.sh --ejb-client-properties=my-jboss-ejb-client.properties myear.ear#appClient.jar arg1
-
-
-
-
-
-
-

6. Embedded API

-
-
-

The embedded API can be used to launch WildFly Full within a currently running process.

-
-
-

The embedded server can be reinitialized with a different JBoss Home. However the module directory, module.path -system property, and the modules system packages, jboss.modules.system.pkgs system property, are effectively static. -This means that creating a new embedded server or host controller within the same VM will not allow overriding the -modules directory or the system packages.

-
-
-

You can also set a hint to indicate which log manager is being used. The hint attempts to ensure that JBoss Logging -will bind to the correct log manager. It also adds the hinted logging package to the modules system packages.

-
-
- - - - - -
- - -If using the embedded API with Java 11 you’ll need to add --add-module=java.se to your JVM arguments. See -MODULES-372 for details. -
-
-
-

6.1. Standalone API

-
-

A standalone server allows you to manage the lifecycle of a server within the currently running process. The server -can be configured in admin-only mode or fully started and applications can be deployed.

-
-
-

6.1.1. Examples

-
-
Simple Example
-
-
final StandaloneServer server = EmbeddedProcessFactory.createStandaloneServer(Configuration.Builder.of(jbossHome).build());
-server.start();
-
-try {
-    // Print the listening address
-    final ModelControllerClient client = server.getModelControllerClient();
-    final ModelNode address = Operations.createAddress("interface", "public");
-    final ModelNode op = Operations.createReadAttributeOperation(address, "inet-address");
-    op.get("resolve-expressions").set(true);
-    final ModelNode result = client.execute(op);
-    if (!Operations.isSuccessfulOutcome((result))) {
-        throw new RuntimeException("Failed to get the public inet-address: " + Operations.getFailureDescription(result));
-    }
-    System.out.printf("Listening on %s%n", Operations.readResult(result).asString());
-} finally {
-    server.stop();
-}
-
-
-
-
Server in admin-only Example
-
-
final StandaloneServer server = EmbeddedProcessFactory.createStandaloneServer(
-    Configuration.Builder.of(jbossHome)
-        .addCommandArgument("--admin-only")
-        .build());
-server.start();
-
-try {
-    // Print the listening address
-    final ModelControllerClient client = server.getModelControllerClient();
-    final ModelNode address = Operations.createAddress();
-    final ModelNode op = Operations.createReadAttributeOperation(address, "running-mode");
-    op.get("resolve-expressions").set(true);
-    final ModelNode result = client.execute(op);
-    if (!Operations.isSuccessfulOutcome((result))) {
-        throw new RuntimeException("Failed to get the running-mode: " + Operations.getFailureDescription(result));
-    }
-    System.out.printf("Running mode is %s%n", Operations.readResult(result).asString());
-} finally {
-    server.stop();
-}
-
-
-
-
log4j2 Hint
-
-
final StandaloneServer server = EmbeddedProcessFactory.createStandaloneServer(Configuration.Builder.of(jbossHome)
-        .setLoggerHint(Configuration.LoggerHint.LOG4J2)
-        .build()
-);
-server.start();
-
-try {
-    // Print the listening address
-    final ModelControllerClient client = server.getModelControllerClient();
-    final ModelNode address = Operations.createAddress("interface", "public");
-    final ModelNode op = Operations.createReadAttributeOperation(address, "inet-address");
-    op.get("resolve-expressions").set(true);
-    final ModelNode result = client.execute(op);
-    if (!Operations.isSuccessfulOutcome((result))) {
-        throw new RuntimeException("Failed to get the public inet-address: " + Operations.getFailureDescription(result));
-    }
-    org.apache.logging.log4j.LogManager.getFormatterLogger(Main.class).info("Listening on %s%n", Operations.readResult(result).asString());
-} finally {
-    server.stop();
-}
-
-
-
-
-
-

6.2. Host Controller API

-
-

The host controller API creates a host controller in the current process. The host controller is started in admin-only -mode therefore servers within the domain cannot be started. However the server configuration can be altered via -management operations.

-
-
-

6.2.1. Example

-
-
Simple Example
-
-
final HostController server = EmbeddedProcessFactory.createHostController(Configuration.Builder.of(jbossHome).build());
-server.start();
-
-try {
-    // Print the listening address
-    final ModelControllerClient client = server.getModelControllerClient();
-    final ModelNode address = new ModelNode().setEmptyList();
-    final ModelNode op = Operations.createOperation(ClientConstants.READ_CHILDREN_NAMES_OPERATION, address);
-    op.get(ClientConstants.CHILD_TYPE).set(ClientConstants.SERVER_GROUP);
-    final ModelNode result = client.execute(op);
-    if (!Operations.isSuccessfulOutcome(result)) {
-        throw new RuntimeException("Failed to get the public inet-address: " + Operations.getFailureDescription(result));
-    }
-    System.out.println("Available server groups:");
-    for (ModelNode value : Operations.readResult(result).asList()) {
-        System.out.printf("\t%s%n", value.asString());
-    }
-} finally {
-    server.stop();
-}
-
-
-
-
-
-
-
-

7. CDI Reference

-
-
-

WildFly uses Weld, the CDI reference -implementation as its CDI provider. To activate CDI for a deployment -simply add a beans.xml file in any archive in the deployment.

-
-
-

This document is not intended to be a CDI tutorial, it only covers CDI -usage that is specific to WildFly. For some general information on CDI -see the below links:

-
- -
-

7.1. Using CDI Beans from outside the deployment

-
-

For WildFly 29 onwards, it is now possible to have classes outside the -deployment be picked up as CDI beans. In order for this to work, you must -add a dependency on the external deployment that your beans are coming -from, and make sure the META-INF directory of this deployment is -imported, so that your deployment has visibility to the beans.xml file -(To import beans from outside the deployment they must be in an archive -with a beans.xml file).

-
-
-

There are two ways to do this, either using the MANIFEST.MF or using -jboss-deployment-structure.xml.

-
-
-

Using MANIFEST.MF you need to add a Dependencies entry, with -meta-inf specified after the entry, e.g.

-
-
-
-
Dependencies: com.my-cdi-module meta-inf, com.my-other-cdi-module meta-inf
-
-
-
-

Using jboss-deployment-structure.xml you need to add a dependency -entry with meta-inf="import", e.g.

-
-
-
-
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
-    <deployment>
-        <dependencies>
-            <module name="deployment.d1.jar" meta-inf="import"/>
-        </dependencies>
-    </deployment>
-</jboss-deployment-structure>
-
-
-
-

Note that this can be used to create beans from both modules in the -modules directory, and from other deployments.

-
-
-

For more information on class loading and adding dependencies to your -deployment please see the Class -Loading Guide

-
-
-
-

7.2. Suppressing implicit bean archives

-
-

CDI 1.1 brings new options to packaging of CDI-enabled applications. In -addition to well-known explicit bean archives (basically any archive -containing the beans.xml file) the specification introduces implicit -bean archives.

-
-
-

An implicit bean archive is any archive that contains one or more -classes annotated with a bean defining annotation (scope annotation) or -one or more session beans. As a result, the beans.xml file is no longer -required for CDI to work in your application.

-
-
-

In an implicit bean archive only those classes that are either -annotated with bean defining annotations or are session beans are -recognized by CDI as beans (other classes cannot be injected).

-
-
-

This has a side-effect, though. Libraries exist that make use of scope -annotation (bean defining annotations) for their own convenience but are -not designed to run with CDI support. Guava would be an example of such -library. If your application bundles such library it will be recognized -as a CDI archive and may -fail the -deployment.

-
-
-

Fortunately, WildFly makes it possible to suppress implicit bean -archives and only enable CDI in archives that bundle the beans.xml file. -There are two ways to achieve this:

-
-
-

7.2.1. Per-deployment configuration

-
-

You can either set this up for your deployment only by adding the -following content to the META-INF/jboss-all.xml file of your -application:

-
-
-
-
<jboss xmlns="urn:jboss:1.0">
-    <weld xmlns="urn:jboss:weld:1.0" require-bean-descriptor="true"/>
-</jboss>
-
-
-
-
-

7.2.2. Global configuration

-
-

Alternatively, you may configure this for all deployments in your -WildFly instance by executing the following command:

-
-
-
-
/subsystem=weld:write-attribute(name=require-bean-descriptor,value=true)
-
-
-
-
-
-

7.3. Non-portable mode

-
-

CDI 1.1 clarifies some aspects of how CDI protable extensions work. As a -result, some extensions that do not use the API properly (but were -tolerated in CDI 1.0 environment) may stop working with CDI 1.1.If this -is the case of your application you will see an exception like this:

-
-
-
-
org.jboss.weld.exceptions.IllegalStateException: WELD-001332: BeanManager method getBeans() is not available during application initialization
-
-
-
-

Fortunatelly, there is a non-portable mode available in WildFly which -skips some of the API usage checks and therefore allows the legacy -extensions to work as before.

-
-
-

Again, there are two ways to enable the non-portable mode:

-
-
-

7.3.1. Per-deployment configuration

-
-

You can either set this up for your deployment only by adding the -following content to the META-INF/jboss-all.xml file of your -application:

-
-
-
-
<jboss xmlns="urn:jboss:1.0">
-    <weld xmlns="urn:jboss:weld:1.0" non-portable-mode="true" />
-</jboss>
-
-
-
-
-

7.3.2. Global configuration

-
-

Alternatively, you may configure this for all deployments in your -WildFly instance by executing the following command:

-
-
-
-
/subsystem=weld:write-attribute(name=non-portable-mode,value=true)
-
-
-
-

Note that new portable extensions should always use the -BeanManager -API properly and thus never require the non-portable mode. The -non-portable mode only exists to preserve compatibility with legacy -extensions!

-
-
- - - - - -
- - -References in this document to CDI refer to Jakarta Contexts and Dependency Injection unless otherwise noted. -
-
-
-
-
-
-
-

8. EE Concurrency Utilities

-
-
-
-EE Concurrency Utilities (JSR 236) is a technology introduced with Java -EE 7, which adapts well known Java SE concurrency utilities to the Java -EE application environment specifics. The Jakarta EE application server is -responsible for the creation (and shutdown) of every instance of the EE -Concurrency Utilities, and provide these to the applications, ready to -use. -
-
-
-

The EE Concurrency Utilities support the propagation of the invocation -context, capturing the existent context in the application threads to -use in their own threads, the same way a logged-in user principal is -propagated when a servlet invokes an Jakarta Enterprise Beans asynchronously. The propagation -of the invocation context includes, by default, the class loading, JNDI -and security contexts.

-
-
-

WildFly creates a single default instance of each EE Concurrency Utility -type in all configurations within the distribution, as mandated by the -specification, but additional instances, perhaps customised to better -serve a specific usage, may be created through WildFly’s EE Subsystem -Configuration. To learn how to configure EE Concurrency Utilities please -refer to EE Concurrency -Utilities Configuration. Additionally, the EE subsystem configuration -also includes the configuration of which instance should be considered -the default instance mandated by the Jakarta EE specification, and such -configuration is covered by -Default EE Bindings Configuration.

-
-
-

8.1. Context Service

-
-

The Context Service ( jakarta.enterprise.concurrent.ContextService) is a -brand new concurrency utility, which applications may use to build -contextual proxies from existing objects.

-
-
-

A contextual proxy is an object that sets an invocation context, captured -when created, whenever is invoked, before delegating the invocation to -the original object.

-
-
-

Usage example:

-
-
-
-
public void onGet(...) {
-  Runnable task = ...;
-  Runnable contextualTask = contextService.createContextualProxy(task, Runnable.class);
-  // ...
-}
-
-
-
-

WildFly default configurations creates a single default instance of a -Context Service, which may be retrieved through @Resource injection:

-
-
-
-
@Resource
-private ContextService contextService;
-
-
-
- - - - - -
- - -To retrieve instead a non default Context Service instance, -@Resource’s `lookup attribute needs to specify the JNDI name used in -the wanted instance configuration. WildFly will always inject the -default instance, no matter what’s the name attribute value, if the -lookup attribute is not defined. -
-
-
-

Applications may alternatively use instead the standard JNDI API:

-
-
-
-
ContextService contextService = InitialContext.doLookup("java:comp/DefaultContextService");
-
-
-
- - - - - -
- - -As mandated by the Jakarta EE specification, the default Context Service -instance’s JNDI name is java:comp/DefaultContextService. -
-
-
-
-

8.2. Managed Thread Factory

-
-

The Managed Thread Factory ( -jakarta.enterprise.concurrent.ManagedThreadFactory) allows Java EE -applications to create Java threads. It is an extension of Java SE’s -Thread Factory ( java.util.concurrent.ThreadFactory) adapted to the -Jakarta EE platform specifics.

-
-
-

Managed Thread Factory instances are managed by the application server, -thus Jakarta EE applications are forbidden to invoke any lifecycle related -method.

-
-
-

In case the Managed Thread Factory is configured to use a Context -Service, the application’s thread context is captured when a thread -creation is requested, and such context is propagated to the thread’s -Runnable execution.

-
-
-

Managed Thread Factory threads implement -jakarta.enterprise.concurrent.ManageableThread, which allows an -application to learn about termination status.

-
-
-

Usage example:

-
-
-
-
public void onGet(...) {
-  Runnable task = ...;
-  Thread thread = managedThreadFactory.newThread(task);
-  thread.start();
-    // ...
-}
-
-
-
-

WildFly default configurations creates a single default instance of a -Managed Thread Factory, which may be retrieved through @Resource -injection:

-
-
-
-
@Resource
-private ManagedThreadFactory managedThreadFactory;
-
-
-
- - - - - -
- - -To retrieve instead a non default Managed Thread Factory instance, -@Resource’s `lookup attribute needs to specify the JNDI name used in -the wanted instance configuration. WildFly will always inject the -default instance, no matter what’s the name attribute value, in case -the lookup attribute is not defined. -
-
-
-

Applications may alternatively use instead the standard JNDI API:

-
-
-
-
ManagedThreadFactory managedThreadFactory = InitialContext.doLookup("java:comp/DefaultManagedThreadFactory");
-
-
-
- - - - - -
- - -As mandated by the Jakarta EE specification, the default Managed Thread -Factory instance’s JNDI name is java:comp/DefaultManagedThreadFactory. -
-
-
-
-

8.3. Managed Executor Service

-
-

The Managed Executor Service ( -jakarta.enterprise.concurrent.ManagedExecutorService) allows Java EE -applications to submit tasks for asynchronous execution. It is an -extension of Java SE’s Executor Service ( -java.util.concurrent.ExecutorService) adapted to the Jakarta EE platform -requirements.

-
-
-

Managed Executor Service instances are managed by the application -server, thus Jakarta EE applications are forbidden to invoke any lifecycle -related method.

-
-
-

In case the Managed Executor Service is configured to use a Context -Service, the application’s thread context is captured when the task is -submitted, and propagated to the executor thread responsible for the -task execution.

-
-
-

Usage example:

-
-
-
-
public void onGet(...) {
-    Runnable task = ...;
-    Future future = managedExecutorService.submit(task);
-    // ...
-}
-
-
-
-

WildFly default configurations creates a single default instance of a -Managed Executor Service, which may be retrieved through @Resource -injection:

-
-
-
-
@Resource
-private ManagedExecutorService managedExecutorService;
-
-
-
- - - - - -
- - -To retrieve instead a non default Managed Executor Service instance, -@Resource’s `lookup attribute needs to specify the JNDI name used in -the wanted instance configuration. WildFly will always inject the -default instance, no matter what’s the name attribute value, in case -the lookup attribute is not defined. -
-
-
-

Applications may alternatively use instead the standard JNDI API:

-
-
-
-
ManagedExecutorService managedExecutorService = InitialContext.doLookup("java:comp/DefaultManagedExecutorService");
-
-
-
- - - - - -
- - -As mandated by the Jakarta EE specification, the default Managed Executor -Service instance’s JNDI name is -java:comp/DefaultManagedExecutorService. -
-
-
-
-

8.4. Managed Scheduled Executor Service

-
-

The Managed Scheduled Executor Service ( -jakarta.enterprise.concurrent.ManagedScheduledExecutorService) allows -Jakarta EE applications to schedule tasks for asynchronous execution. It is -an extension of Java SE’s Executor Service ( -java.util.concurrent.ScheduledExecutorService) adapted to the Java EE -platform requirements.

-
-
-

Managed Scheduled Executor Service instances are managed by the -application server, thus Jakarta EE applications are forbidden to invoke -any lifecycle related method.

-
-
-

In case the Managed Scheduled Executor Service is configured to use a -Context Service, the application’s thread context is captured when the -task is scheduled, and propagated to the executor thread responsible for -the task execution.

-
-
-

Usage example:

-
-
-
-
public void onGet(...) {
-    Runnable task = ...;
-    ScheduledFuture future = managedScheduledExecutorService.schedule(task, 60, TimeUnit.SECONDS);
-    // ...
-}
-
-
-
-

WildFly default configurations creates a single default instance of a -Managed Scheduled Executor Service, which may be retrieved through -@Resource injection:

-
-
-
-
@Resource
-private ManagedScheduledExecutorService managedScheduledExecutorService;
-
-
-
- - - - - -
- - -To retrieve instead a non default Managed Scheduled Executor Service -instance, @Resource’s `lookup attribute needs to specify the JNDI -name used in the wanted instance configuration. WildFly will always -inject the default instance, no matter what’s the name attribute -value, in case the lookup attribute is not defined. -
-
-
-

Applications may alternatively use instead the standard JNDI API:

-
-
-
-
ManagedScheduledExecutorService managedScheduledExecutorService = InitialContext.doLookup("java:comp/DefaultManagedScheduledExecutorService");
-
-
-
- - - - - -
- - -As mandated by the Jakarta EE specification, the default Managed Scheduled -Executor Service instance’s JNDI name is -java:comp/DefaultManagedScheduledExecutorService. -
-
-
-
-
-
-

9. Jakarta Enterprise Beans 3 Reference Guide

-
-
-

This chapter details the extensions that are available when developing -Enterprise Java Beans tm on WildFly 29.

-
-
-

Currently, there is no support for configuring the extensions using an -implementation specific descriptor file.

-
-
-

9.1. Resource Adapter for Message Driven Beans

-
-

Each Message Driven Bean must be connected to a resource adapter.

-
-
-

9.1.1. Specification of Resource Adapter using Metadata Annotations

-
-

The ResourceAdapter annotation is used to specify the resource adapter -with which the MDB should connect.

-
-
-

The value of the annotation is the name of the deployment unit -containing the resource adapter. For example jms-ra.rar.

-
-
-

For example:

-
-
-
-
@MessageDriven(messageListenerInterface = PostmanPat.class)
-@ResourceAdapter("ejb3-rar.rar")
-
-
-
-
-
-

9.2. Run-as Principal

-
-

Whenever a run-as role is specified for a given method invocation the -default anonymous principal is used as the caller principal. This -principal can be overridden by specifying a run-as principal.

-
-
-

9.2.1. Specification of Run-as Principal using Metadata Annotations

-
-

The RunAsPrincipal annotation is used to specify the run-as principal -to use for a given method invocation.

-
-
-

The value of the annotation specifies the name of the principal to -use. The actual type of the principal is undefined and should not be -relied upon.

-
-
-

Using this annotation without specifying a run-as role is considered an -error.

-
-
-

For example:

-
-
-
-
@RunAs("admin")
-@RunAsPrincipal("MyBean")
-
-
-
-
-
-

9.3. Security Domain

-
-

Each Enterprise Java Bean tm can be associated with a security domain. -Only when an Jakarta Enterprise Beans are associated with a security domain will -authentication and authorization be enforced.

-
-
-

9.3.1. Specification of Security Domain using Metadata Annotations

-
-

The SecurityDomain annotation is used to specify the security domain -to associate with the Jakarta Enterprise Beans.

-
-
-

The value of the annotation is the name of the security domain to be -used.

-
-
-

For example:

-
-
-
-
@SecurityDomain("other")
-
-
-
-
-
-

9.4. Transaction Timeout

-
-

For any newly started transaction a transaction timeout can be specified -in seconds.

-
-
-

When a transaction timeout of 0 is used, then the actual transaction -timeout will default to the domain configured default.
-TODO: add link to tx subsystem

-
-
-

Although this is only applicable when using transaction attribute -REQUIRED or REQUIRES_NEW the application server will not detect -invalid setups.

-
-
-

New Transactions

-
-
- - - - - -
- - -Take care that even when transaction attribute REQUIRED is specified, -the timeout will only be applicable if a new transaction is started. -
-
-
-

9.4.1. Specification of Transaction Timeout with Metadata Annotations

-
-

The TransactionTimeout annotation is used to specify the transaction -timeout for a given method.

-
-
-

The value of the annotation is the timeout used in the given unit -granularity. It must be a positive integer or 0. Whenever 0 is specified -the default domain configured timeout is used.

-
-
-

The unit specifies the granularity of the value. The actual value -used is converted to seconds. Specifying a granularity lower than -SECONDS is considered an error, even when the computed value will -result in an even amount of seconds.

-
-
-

For example:@TransactionTimeout(value = 10, unit = TimeUnit.SECONDS)

-
-
-
-

9.4.2. Specification of Transaction Timeout in the Deployment Descriptor

-
-

The trans-timeout element is used to define the transaction timeout -for business, home, component, and message-listener interface methods; -no-interface view methods; web service endpoint methods; and timeout -callback methods.

-
-
-

The trans-timeout element resides in the urn:trans-timeout namespace -and is part of the standard container-transaction element as defined -in the jboss namespace.

-
-
-

For the rules when a container-transaction is applicable please refer -to EJB 3.1 FR 13.3.7.2.1.

-
-
-
Example of trans-timeout
-
-

jboss-ejb3.xml

-
-
-
-
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-               xmlns="http://java.sun.com/xml/ns/javaee"
-               xmlns:tx="urn:trans-timeout"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd
-http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd
-urn:trans-timeout http://www.jboss.org/j2ee/schema/trans-timeout-1_0.xsd"
-               version="3.1"
-               impl-version="2.0">
-    <assembly-descriptor>
-        <container-transaction>
-            <method>
-                <ejb-name>BeanWithTimeoutValue</ejb-name>
-                <method-name>*</method-name>
-                <method-intf>Local</method-intf>
-            </method>
-            <tx:trans-timeout>
-                <tx:timeout>10</tx:timeout>
-                <tx:unit>Seconds</tx:unit>
-            </tx:trans-timeout>
-        </container-transaction>
-    </assembly-descriptor>
-</jboss:ejb-jar>
-
-
-
-
-
-
-

9.5. Timer service

-
-

The service is responsible to call the registered timeout methods of the -different session beans.

-
-
- - - - - -
- - -A persistent timer will be identified by the name of the EAR, the name -of the sub-deployment JAR and the Bean’s name.
-If one of those names are changed (e.g. EAR name contain a version) the -timer entry became orphaned and the timer event will not longer be -fired. -
-
-
-

9.5.1. Single event timer

-
-

The timer is will be started once at the specified time.

-
-
-

In case of a server restart the timeout method of a persistent timer -will only be called directly if the specified time is elapsed.
-If the timer is not persistent, it will no longer be available -if JBoss is restarted or the application is redeployed.

-
-
-
-

9.5.2. Recurring timer

-
-

The timer will be started at the specified first occurrence and after -that point at each time if the interval is elapsed.
-If the timer will be started during the last execution is not finished -the execution will be suppressed with a warning to avoid concurrent -execution.

-
-
-

In case of server downtime for a persistent timer, the timeout method -will be called only once if one, or more than one, interval is -elapsed.
-If the timer is not persistent, it will no longer be active -after the server is restarted or the application is redeployed.

-
-
-
-

9.5.3. Calendar timer

-
-

The timer will be started if the schedule expression match. It will be -automatically deactivated and removed if there will be no next -expiration possible, i.e. If you set a specific year.

-
-
-

For example:

-
-
-
-
@Schedule( ... dayOfMonth="1", month="1", year="2012") +
-// start once at 01-01-2012 00:00:00
-
-
-
-
Programmatic calendar timer
-
-

If the timer is persistent it will be fetched at server start and the -missed timeouts are called concurrent.
-If a persistent timer contains an end date it will be executed once -nevertheless how many times the execution was missed. Also a retry will -be suppressed if the timeout method throw an Exception.
-In case of such expired timer access to the given Timer object might -throw a NoMoreTimeoutExcption or NoSuchObjectException.

-
-
-

If the timer is non persistent it will not longer be active after the -server is restarted or the application is redeployed.

-
-
-

TODO: clarify whether this should happen concurrently/blocked or even -fired only once like a recurring timer!

-
-
-
-
Annotated calendar timer
-
-

If the timer is non persistent it will not activated for missed events -during the server is down. In case of server start the timer is -scheduled based on the @Schedule annotation.

-
-
-

If the timer is persistent (default if not deactivated by annotation) -all missed events are fetched at server start and the annotated timeout -method is called concurrent.

-
-
-

TODO: clarify whether this should happen concurrently/blocked or even -fired only once like a recurring timer!

-
-
-
-
-
-

9.6. Container interceptors

-
-
-JBoss AS versions prior to WildFly8 allowed a JBoss specific way to -plug-in user application specific interceptors on the server side so -that those interceptors get invoked during an EJB invocation. Such -interceptors differed from the typical (portable) spec provided Jakarta EE -interceptors. The Jakarta Interceptors are expected to run after the -container has done necessary invocation processing which involves -security context propagation, transaction management and other such -duties. As a result, these Jakarta Interceptors come too late into the -picture, if the user applications have to intercept the call before -certain container specific interceptor(s) are run. -
-
-
-

9.6.1. Typical EJB invocation call path on the server

-
-

A typical EJB invocation looks like this:

-
-
-

Client application

-
-
-
-
MyBeanInterface bean = lookupBean();
- 
-bean.doSomething();
-
-
-
-

The invocation on the bean.doSomething() triggers the following (only -relevant portion of the flow shown below):

-
-
-
    -
  1. -

    WildFly specific interceptor (a.k.a container interceptor) 1

    -
  2. -
  3. -

    WildFly specific interceptor (a.k.a container interceptor) 2

    -
  4. -
  5. -

    …​.

    -
  6. -
  7. -

    WildFly specific interceptor (a.k.a container interceptor) N

    -
  8. -
  9. -

    User application specific Jakarta EE interceptor(s) (if any)

    -
  10. -
  11. -

    Invocation on the EJB instance’s method

    -
  12. -
-
-
-

The WildFly specific interceptors include the security context -propagation, transaction management and other container provided -services. In some cases, the " `container interceptors`" (let’s call -them that) might even decide break the invocation flow and not let the -invocation proceed (for example: due to the invoking caller not being -among the allowed user roles who can invoke the method on the bean).

-
-
-

Previous versions of JBoss AS allowed a way to plug-in the user -application specific interceptors (which relied on JBoss AS specific -libraries) into this invocation flow so that they do run some -application specific logic before the control reaches step#5 above. For -example, AS5 allowed the use of JBoss AOP interceptors to do this.

-
-
-

As of WildFly 8, this feature was implemented.

-
-
-
-

9.6.2. Configuring container interceptors

-
-

As you can see from the JIRA https://issues.redhat.com/browse/AS7-5897, -one of the goals of this feature implementation was to make sure that we -don’t introduce any new WildFly specific library dependencies for the -container interceptors. So we decided to allow the Jakarta Interceptors -(which are just POJO classes with lifecycle callback annotations) to be -used as container interceptors. As such you won’t need any dependency on -any WildFly specific libraries. That will allow us to support this -feature for a longer time in future versions of WildFly.

-
-
-

Furthermore, configuring these container interceptors is similar to -configuring the Jakarta Interceptors for EJBs. In fact, it uses the same -xsd elements that are allowed in ejb-jar.xml for 3.1 version of ejb-jar -deployment descriptor.

-
-
- - - - - -
- - -Container interceptors can only be configured via deployment -descriptors. There’s no annotation based way to configure container -interceptors. This was an intentional decision, taken to avoid -introducing any WildFly specific library dependency for the annotation. -
-
-
-

Configuring the container interceptors can be done in jboss-ejb3.xml -file, which then gets placed under the META-INF folder of the EJB -deployment, just like the ejb-jar.xml. Here’s an example of how the -container interceptor(s) can be configured in jboss-ejb3.xml:

-
-
-
jboss-ejb3.xml
-
-
<jboss xmlns="http://www.jboss.com/xml/ns/javaee"
-       xmlns:jee="http://java.sun.com/xml/ns/javaee"
-       xmlns:ci ="urn:container-interceptors:1.0">
-    <jee:assembly-descriptor>
-        <ci:container-interceptors>
-            <!-- Default interceptor -->
-            <jee:interceptor-binding>
-                <ejb-name>*</ejb-name>
-                <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.ContainerInterceptorOne</interceptor-class>
-            </jee:interceptor-binding>
-            <!-- Class level container-interceptor -->
-            <jee:interceptor-binding>
-                <ejb-name>AnotherFlowTrackingBean</ejb-name>
-                <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.ClassLevelContainerInterceptor</interceptor-class>
-            </jee:interceptor-binding>
-            <!-- Method specific container-interceptor -->
-            <jee:interceptor-binding>
-                <ejb-name>AnotherFlowTrackingBean</ejb-name>
-                <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.MethodSpecificContainerInterceptor</interceptor-class>
-                <method>
-                    <method-name>echoWithMethodSpecificContainerInterceptor</method-name>
-                </method>
-            </jee:interceptor-binding>
-            <!-- container interceptors in a specific order -->
-            <jee:interceptor-binding>
-                <ejb-name>AnotherFlowTrackingBean</ejb-name>
-                <interceptor-order>
-                    <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.ClassLevelContainerInterceptor</interceptor-class>
-                    <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.MethodSpecificContainerInterceptor</interceptor-class>
-                    <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.ContainerInterceptorOne</interceptor-class>
-                </interceptor-order>
-                <method>
-                    <method-name>echoInSpecificOrderOfContainerInterceptors</method-name>
-                </method>
-            </jee:interceptor-binding>
-        </ci:container-interceptors>
-    </jee:assembly-descriptor>
-</jboss>
-
-
-
-
    -
  • -

    The usage of urn:container-interceptors:1.0 namespace which allows the -container-interceptors elements to be configured

    -
  • -
  • -

    The container-interceptors element which contain the interceptor -bindings

    -
  • -
  • -

    The interceptor bindings themselves are the same elements as what the -EJB3.1 xsd allows for standard Jakarta Interceptors

    -
  • -
  • -

    The interceptors can be bound either to all EJBs in the deployment -(using the * wildcard) or individual bean level (using the specific -EJB name) or at specific method level for the EJBs.

    -
  • -
-
-
- - - - - -
- - -The xsd for the urn:container-interceptors:1.0 namespace is available -here -https://github.com/wildfly/wildfly/blob/main/ejb3/src/main/resources/schema/jboss-ejb-container-interceptors_1_0.xsd -
-
-
-

The interceptor classes themselves are simple POJOs and use the -@jakarta.annotation.AroundInvoke to mark the around invoke method which -will get invoked during the invocation on the bean. Here’s an example of -the interceptor:

-
-
-
Example of container interceptor
-
-
public class ClassLevelContainerInterceptor {
-    @AroundInvoke
-    private Object iAmAround(final InvocationContext invocationContext) throws Exception {
-        return this.getClass().getName() + " " + invocationContext.proceed();
-    }
-}
-
-
-
-
-

9.6.3. Container interceptor positioning in the interceptor chain

-
-

The container interceptors configured for a EJB are guaranteed to be run -before the WildFly provided security interceptors, transaction -management interceptors and other such interceptors thus allowing the -user application specific container interceptors to setup any relevant -context data before the invocation proceeds.

-
-
-
-

9.6.4. Semantic difference between container interceptor(s) and Jakarta Interceptors API

-
-

Although the container interceptors are modeled to be similar to the -Jakarta Interceptors, there are some differences in the API semantics. -One such difference is that invoking on -jakarta.interceptor.InvocationContext.getTarget() method is illegal for -container interceptors since these interceptors are invoked way before -the EJB components are setup or instantiated.

-
-
-
-

9.6.5. Testcase

-
-

This testcase in the WildFly codebase can be used for reference for -implementing container interceptors in user applications -https://github.com/wildfly/wildfly/blob/main/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/container/interceptor/ContainerInterceptorsTestCase.java

-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-

9.7. Jakarta Enterprise Beans 3 Database Persistent Timers

-
-
-WildFly now supports persistent timers backed by a shared database. High-availability -support is provided through the database, and as a result it is not -intended to be a super high performance solution that supports thousands -of timers going off a second, however properly tuned it should provide -sufficient performance for most use cases. -
-
-
- - - - - -
- - -Note that for this to work correctly the underlying database must -support the READ_COMMITTED or SERIALIZABLE isolation mode and the -datasource must be configured accordingly -
-
-
-

9.7.1. Setup

-
-

In order to use clustered timers it is necessary to add a database -backed timer store. This can be done from the CLI with the following -command:

-
-
-
-
/subsystem=ejb3/service=timer-service/database-data-store=my-clustered-store:add(allow-execution=true, datasource-jndi-name="java:/MyDatasource", refresh-interval=60000, database=postgresql, partition=mypartition)
-
-
-
-

An explanation of the parameters is below:

-
-
-
    -
  • -

    allow-execution - If this node is allowed to execute timers. If this -is false then timers added on this node will be added to the database -for another node to execute. This allows you to limit timer execution to -a few nodes in a cluster, which can greatly reduce database load for -large clusters.

    -
  • -
  • -

    datasource-jndi-name - The datasource to use

    -
  • -
  • -

    refresh-interval - The refresh interval in milliseconds. This is the -period of time that must elapse before this node will check the database -for new timers added by other nodes. A smaller value means that timers -will be picked up more quickly, however it will result in more load on -the database. This is most important to tune if you are adding timers -that will expire quickly. If the node that added the timer cannot -execute it (e.g. because it has failed or because allow-execution is -false), this timer may not be executed until a node has refreshed.

    -
  • -
  • -

    database - Define the type of database that is in use. Some SQL -statements are customised by database, and this tells the data store -which version of the SQL to use.
    -Without this attribute the server try to detected the type -automatically, current supported types are postgresql, mysql, oracle, -db2, hsql and h2.
    -Note that this SQL resides in the file -modules/system/layers/base/org/jboss/as/ejb3/main/timers/timer-sql.properties
    -And as such is it possible to modify the SQL that is executed or add -support for new databases by adding new DB specific SQL to this file (if -you do add support for a new database it would be greatly appreciated if -you could contribute the SQL back to the project).

    -
  • -
  • -

    partition - A node will only see timers from other nodes that have -the same partition name. This allows you to break a large cluster up -into several smaller clusters, which should improve performance. e.g. -instead of having a cluster of 100 nodes, where all hundred are trying -to execute and refresh the same timers, you can create 20 clusters of 5 -nodes by giving ever group of 5 a different partition name.

    -
  • -
-
-
-
Non clustered timers
-
-

Note that you can still use the database data store for non-clustered -timers, in which case set the refresh interval to zero and make sure -that every node has a unique partition name (or uses a different -database).

-
-
-
-
-

9.7.2. Using clustered timers in a deployment

-
-

It is possible to use the data store as default for all applications by -changing the default-data-store within the ejb3 subsystem:

-
-
-
-
    <timer-service thread-pool-name="timer" default-data-store="clustered-store">
-        <data-stores>
-            <database-data-store name="clustered-store" datasource-jndi-name="java:jboss/datasources/ExampleDS" partition="timer"/>
-        </data-stores>
-    </timer-service>
-
-
-
-

Another option is to use a separate data store for specific -applications, all that is required is to set the timer data store name -in jboss-ejb3.xml:

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-               xmlns="http://java.sun.com/xml/ns/javaee"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xmlns:timer="urn:timer-service:1.0"
-               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd
-                     http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
-               version="3.1"
-               impl-version="2.0">
-    <assembly-descriptor>
-            <timer:timer>
-                <ejb-name>*</ejb-name>
-                <timer:persistence-store-name>my-clustered-store</timer:persistence-store-name>
-            </timer:timer>
-        </assembly-descriptor>
-</jboss:ejb-jar>
-
-
-
-
-

9.7.3. Programmatically Refresh Timer

-
-

In a clustered deployment, multiple nodes updating timer datastore may cause the in-memory timer state to be temporarily -out of sync. Some application may find the refresh-interval configuration not sufficient in some cases, and -need to programmatically refresh timers. This can be done with Jakarta Interceptors configured for those business methods -that need this capability, as illustrated in the following steps:

-
-
-
    -
  • -

    Implement an Jakarta Interceptors that enables wildfly.ejb.timer.refresh.enabled to true. For example,

    -
  • -
-
-
-
-
import jakarta.interceptor.AroundInvoke;
-import jakarta.interceptor.Interceptor;
-import jakarta.interceptor.InvocationContext;
-
-/**
- * An interceptor to enable programmatic timer refresh across multiple nodes.
- */
-@Interceptor
-public class RefreshInterceptor {
-    @AroundInvoke
-    public Object intercept(InvocationContext context) throws Exception {
-        context.getContextData().put("wildfly.ejb.timer.refresh.enabled", Boolean.TRUE);
-        return context.proceed();
-    }
-}
-
-
-
-
    -
  • -

    Configure the Jakarta Interceptors to the target stateless or singleton bean business methods. -When wildfly.ejb.timer.refresh.enabled is set to true, calling TimerService.getAllTimers() -will first refresh from timer datastore before returning timers. For example,

    -
  • -
-
-
-
-
@Singleton
-public class RefreshBean1 ... {
-
-    @Interceptors(RefreshInterceptor.class)
-    public void businessMethod1() {
-        ...
-        // since wildfly.ejb.timer.refresh.enabled is set to true in interceptor for this business method,
-        // calling timerService.getAllTimers() will first refresh from timer datastore before returning timers.
-        final Collection<Timer> allTimers = timerService.getAllTimers();
-        ...
-    }
-}
-
-
-
-
    -
  • -

    Applications may configure such an interceptor to certain business methods that require this capability. -Alternatively, applications may implement a dedicated business method to programmatically refresh timers, to -be invoked by other parts of the application when needed. For example,

    -
  • -
-
-
-
-
    @Interceptors(RefreshInterceptor.class)
-    public List<Timer> getAllTimerInfoWithRefresh() {
-        return timerService.getAllTimers();
-    }
-
-    public void businessMethod1() {
-        final LocalBusinessInterface businessObject = sessionContext.getBusinessObject(LocalBusinessInterface.class);
-        businessObject.getAllTimerInfoWithRefresh();
-
-        // timer has been programmatically refreshed from datastore.
-        // continue with other business logic...
-    }
-
-
-
-
-

9.7.4. Technical details

-
-

Internally every node that is allowed to execute timers schedules a -timeout for every timer is knows about. When this timeout expires then -this node attempts to 'lock' the timer, by updating its state to -running. The query this executes looks like:

-
-
-
-
UPDATE JBOSS_EJB_TIMER SET TIMER_STATE=? WHERE ID=? AND TIMER_STATE<>? AND NEXT_DATE=?;
-
-
-
-

Due to the use of a transaction and READ_COMMITTED or SERIALIZABLE -isolation mode only one node will succeed in updating the row, and this -is the node that the timer will run on.

-
-
-
-
-

9.8. Jakarta Enterprise Beans Distributed Timers

-
-
-WildFly now supports distributed timers backed by an embedded Infinispan cache. -The Infinispan cache not only provides an HA solution for persistent timer metadata, in the case of a server crash or restart, -but also distributes timer execution evenly between cluster members. -Consequently, this solution generally provides better performance and scalability than the existing database solution. -
-
-
-

This feature can also be used to provide file, database, or remote Infinispan cluster persistence of timer metadata for single server architectures, effectively replacing the existing file-store and database-store TimerService facilities. -Additionally, this feature can also provide passivation support for non-persistent timers to allow the creation of large number of transient timers without the risk of running out of memory.

-
-
-

9.8.1. Setup

-
-

Distributed timer behavior is configured via the distributable-ejb subsystem, and can be configured globally via the ejb3 subsystem or customized per EJB via the timer-service EJB deployment descriptor namespace.

-
-
-

WildFly’s HA profiles (e.g. standalone-ha.xml) are configured to use the distributable timer service by default to handle both persistent and non-persistent timers.

-
-
-

To enable the use of distributable timer service within a non-HA profile (e.g. standalone.xml), one must first disable the existing data store mechanism, and then specify the timer management to use for persistent timers, which references a timer management resource from the distributable-ejb subsystem.

-
-
-
-
batch
- /subsystem=ejb3/service=timer-service:undefine-attribute(name=default-data-store)
- /subsystem=ejb3/service=timer-service:write-attribute(name=default-persistent-timer-management, value=persistent)
-run-batch
-
-
-
-

To use distributable timer management for transient (i.e. non-persistent) timers, remove the thread-pool-name attribute, and then specify the timer management to use for transient timers, which references a timer management resource from the distributable-ejb subsystem.

-
-
-
-
batch
- /subsystem=ejb3/service=timer-service:undefine-attribute(name=thread-pool)
- /subsystem=ejb3/service=timer-service:write-attribute(name=default-transient-timer-management, value=transient)
-run-batch
-
-
-
-

Alternatively, distributable timer management can be enabled via the timer-service deployment descriptor namespace, either globally, or per EJB. -e.g.

-
-
-
-
<t:timer-service>
-    <ejb-name>*</ejb-name>
-    <t:persistent-timer-management>distributed</t:persistent-timer-management>
-    <t:transient-timer-management>transient</t:transient-timer-management>
-</t:timer-service>
-
-
-
-

The <persistent-timer-management/> and <transient-timer-management/> elements above each reference a named timer management resource defined within the distributable-ejb subsystem.

-
-
-

To customize distributed EJB timer behavior, please refer to the distributable-ejb subsystem documentation.

-
-
-
-
-

9.9. Jakarta Enterprise Beans IIOP Guide

-
-

9.9.1. Enabling IIOP

-
-

To enable IIOP you must have the JacORB subsystem installed, and the -<iiop/> element present in the ejb3 subsystem configuration. The -standalone-full.xml configuration that comes with the distribution has -both of these enabled.

-
-
-

The <iiop/> element takes two attributes that control the default -behaviour of the server, for full details see EJB3 -subsystem configuration guide.

-
-
-
-

9.9.2. Enabling JTS

-
-

To enable JTS simply add a <jts/> element to the transactions -subsystem configuration.

-
-
-

It is also necessary to enable the JacORB transactions interceptor as -shown below.

-
-
-
-
<subsystem xmlns="urn:jboss:domain:jacorb:1.1">
-  <orb>
-    <initializers transactions="on"/>
-  </orb>
-</subsystem>
-
-
-
-
-

9.9.3. Dynamic Stub’s

-
-

Downloading stubs directly from the server is no longer supported. If -you do not wish to pre-generate your stub classes JDK Dynamic stubs can -be used instead. The enable JDK dynamic stubs simply set the -com.sun.CORBA.ORBUseDynamicStub system property to true.

-
-
-
-

9.9.4. Configuring Jakarta Enterprise Beans IIOP settings via jboss-ejb3.xml

-
-

TODO

-
-
-
-
-

9.10. Jakarta Enterprise Beans over HTTP

-
-

Beginning with WildFly 11 it is now possible to use HTTP as the -transport (instead of remoting) for remote Jakarta Enterprise Beans and JNDI invocations.

-
-
-

Everything mentioned below is applicable for both JNDI and Jakarta Enterprise Beans -functionality.

-
-
-

9.10.1. Server Configuration

-
-

In order to configure the server the http-invoker needs to be enabled on -each virtual host you wish to use in the Undertow subsystem. This is -enabled by default in standard configs, but if it has been removed it -can be added via:

-
-
-
-
/subsystem=undertow/server=default-server/host=default-host/setting=http-invoker:add(http-authentication-factory=myfactory, path="/wildfly-services")
-
-
-
-

The Hhttp-invoker takes two parameters, a path (which defaults to -/wildfly-services) and a http-authentication-factory which must be a -reference to an Elytron http-authentication-factory.

-
-
-

Note that any deployment that wishes to use this must use Elytron -security with the same security domain that corresponds to the HTTP -authentication factory.

-
-
-
-

9.10.2. Performing Invocations

-
-

The mechanism for performing invocations is exactly the same as for the -remoting based Jakarta Enterprise Beans client, the only difference is that instead of a -'remote+http' URI you use a 'http' URI (which must include the path that -was configured in the invoker). For example if you are currently using -'remote+ http://localhost:8080' as the target URI, you would change this -to 'http://localhost:8080/wildfly-services'.

-
-
-
-

9.10.3. Implementation details

- -
-
-
-

9.11. jboss-ejb3.xml Reference

-
-

jboss-ejb3.xml is a custom deployment descriptor that can be placed in -either ejb-jar or war archives. If it is placed in an ejb-jar then it -must be placed in the META-INF folder, in a web archive it must be -placed in the WEB-INF folder.

-
-
-

The contents of jboss-ejb3.xml are merged with the contents of -ejb-jar.xml, with the jboss-ejb3.xml items taking precedence.

-
-
-

9.11.1. Example File

-
-

A simple example is shown below:

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-               xmlns="http://java.sun.com/xml/ns/javaee"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xmlns:s="urn:security:1.1"
-               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd"
-               version="3.1"
-               impl-version="2.0">
-    <enterprise-beans>
-        <message-driven>
-            <ejb-name>ReplyingMDB</ejb-name>
-            <ejb-class>org.jboss.as.test.integration.ejb.mdb.messagedestination.ReplyingMDB</ejb-class>
-            <activation-config>
-                <activation-config-property>
-                    <activation-config-property-name>destination</activation-config-property-name>
-                    <activation-config-property-value>java:jboss/mdbtest/messageDestinationQueue
-                    </activation-config-property-value>
-                </activation-config-property>
-            </activation-config>
-        </message-driven>
-    </enterprise-beans>
-    <assembly-descriptor>
-        <s:security>
-            <ejb-name>DDMyDomainSFSB</ejb-name>
-            <s:security-domain>myDomain</s:security-domain>
-            <s:run-as-principal>myPrincipal</s:run-as-principal>
-        </s:security>
-    </assembly-descriptor>
-</jboss:ejb-jar>
-
-
-
-

As you can see the format is largely similar to ejb-jar.xml, in fact -they even use the same namespaces, however jboss-ejb3.xml adds some -additional namespaces of its own to allow for configuring non-spec info. -The format of the standard http://java.sun.com/xml/ns/javaee is well -documented elsewhere, this document will cover the non-standard -namespaces.

-
-
- - - - - -
- - -Namespace "http://www.jboss.com/xml/ns/javaee" is bound to "jboss-ejb3-spec-2_0.xsd": this file redefines some elements of "ejb-jar_3_1.xml" -
-
-
-
The root namespace http://www.jboss.com/xml/ns/javaee
- -
-
-
Assembly descriptor namespaces
-
-

The following namespaces can all be used in the <assembly-descriptor> -element. They can be used to apply their configuration to a single bean, -or to all beans in the deployment by using * as the ejb-name.

-
-
-
The security namespace urn:security
-
-

This allows you to set the security domain and the run-as principal for -an Jakarta Enterprise Beans.

-
-
-
-
<s:security>
-  <ejb-name>*</ejb-name>
-  <s:security-domain>myDomain</s:security-domain>
-  <s:run-as-principal>myPrincipal</s:run-as-principal>
-</s:security>
-
-
-
-
-
The resource adaptor namespace urn:resource-adapter-binding
-
-

This allows you to set the resource adaptor for an MDB.

-
-
-
-
<r:resource-adapter-binding>
-  <ejb-name>*</ejb-name>
-  <r:resource-adapter-name>myResourceAdaptor</r:resource-adapter-name>
-</r:resource-adapter-binding>
-
-
-
-
-
The IIOP namespace urn:iiop
-
-

The IIOP namespace is where IIOP settings are configured. As there are -quite a large number of options these are covered in the -IIOP guide.

-
-
-
-
The pool namespace urn:ejb-pool:1.0
-
-

This allows you to select the pool that is used by the SLSB or MDB. -Pools are defined in the server configuration (i.e. standalone.xml or -domain.xml)

-
-
-
-
<p:pool>
-  <ejb-name>*</ejb-name>
-  <p:bean-instance-pool-ref>my-pool</p:bean-instance-pool-ref>
-</p:pool>
-
-
-
-
-
The cache namespace urn:ejb-cache:1.0
-
-

This allows you to select the cache that is used by the SFSB. Caches are -defined in the server configuration (i.e. standalone.xml or -domain.xml)

-
-
-
-
<c:cache>
-  <ejb-name>*</ejb-name>
-  <c:cache-ref>my-cache</c:cache-ref>
-</c:cache>
-
-
-
-
-
The clustering namespace urn:clustering:1.0
-
-

This namespace is deprecated and as of WildFly 29 its use has no effect. -The clustering behavior of Jakarta Enterprise Beans are determined by the profile in use on -the server.

-
-
-
-
The timer-service namespace urn:timer-service:2.0
-
-

This allows you to customize the TimerService behavior for a given EJB.

-
-
-

e.g.

-
-
-
-
<t:timer-service>
-    <ejb-name>*</ejb-name>
-    <t:persistent-timer-management>persistent</t:persistent-timer-management>
-    <t:transient-timer-management>transient</t:transient-timer-management>
-</t:timer-service>
-
-
-
-
-
-
-
-

9.12. Message Driven Beans Controlled Delivery

-
-

There are three mechanisms in WildFly that allow controlling if a -specific MDB is actively receiving or not messages:

-
-
-
    -
  • -

    delivery active

    -
  • -
  • -

    delivery groups

    -
  • -
  • -

    clustered singleton

    -
  • -
-
-
-

We will see each one of them in the following sections.

-
-
-

9.12.1. Delivery Active

-
-

Delivery active is simply an attribute associated with the MDB that -indicates if the MDB is receiving messages or not. If an MDB is not -currently receiving messages, the messages will be saved in the queue or -topic for later, according to the rules of the topic/queue.

-
-
-

You can configure delivery active using xml or annotations, and you can -change its value after deployment using the cli.

-
-
-
    -
  • -

    jboss-ejb3.xml:

    -
  • -
-
-
-

In the jboss-ejb3 xml file, configure the value of active as false to -mark that the MDB will not be receiving messages as soon as it is -deployed:

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-               xmlns="http://java.sun.com/xml/ns/javaee"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xmlns:d="urn:delivery-active:1.2"
-               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"                version="3.1"
-               impl-version="2.0">
-    <assembly-descriptor>
-        <d:delivery>
-            <ejb-name>HelloWorldQueueMDB</ejb-name>
-            <d:active>false</d:active>
-        </d:delivery>
-    </assembly-descriptor>
-</jboss:ejb-jar>
-
-
-
-

You can use a wildcard "*" in the place of ejb-name if you want to apply -that active value to all MDBs in your application.

-
-
-
    -
  • -

    annotation

    -
  • -
-
-
-

Alternatively, you can use the org.jboss.ejb3.annotation.DeliveryActive -annotation, as in the example below:

-
-
-
-
@MessageDriven(name = "HelloWorldMDB", activationConfig = {
-
- @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
-
- @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
-
- @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
-
-@DeliveryActive(false)
-
-public class HelloWorldMDB implements MessageListener {
-    public void onMessage(Message rcvMessage) {
-      // ...
-    }
-}
-
-
-
-
Start-delivery and Stop-Delivery
-
-

These management operations dynamically change the value of the active -attribute, enabling or disabling delivery for the MDB. at runtime To use -them, connect to the WildFly instance you want to manage, then enter the -path of the MDB you want to manage delivery for:

-
-
-
-
[standalone@localhost:9990 /] cd deployment=jboss-helloworld-mdb.war/subsystem=ejb3/message-driven-bean=HelloWorldMDB
-
-[standalone@localhost:9990 message-driven-bean=HelloWorldMDB] :stop-delivery
-{"outcome" => "success"}
-
-[standalone@localhost:9990 message-driven-bean=HelloWorldMDB] :start-delivery
-{"outcome" => "success"}
-
-
-
-
-
-

9.12.2. Delivery Groups

-
-

Delivery groups provide a straightforward way to manage delivery for a -group of MDBs. Every MDB belonging to a delivery group has delivery -active if that group is active, and has delivery inactive -whenever the group is not active.

-
-
-

You can add a delivery group to the ejb3 subsystem using either the -subsystem xml or cli. Next, we will see examples of each case. In those -examples we will add only a single delivery group, but keep in mind that -you can add as many delivery groups as you need to a WildFly instance.

-
-
-
    -
  • -

    the ejb3 subsystem xml (located in your configuration xml, such as -standalone.xml)

    -
  • -
-
-
-
-
<subsystem xmlns="urn:jboss:domain:ejb3:4.0">
-    ...
-    <mdb>
-        ...
-        <delivery-groups>
-            <delivery-group name="mdb-group-name" active="true"/>
-        </delivery-groups>
-    </mdb>
-    ...
-</subsystem>
-
-
-
-

The example above adds a delivery group named "mdb-group-name" (you can -use whatever name suits you best as the group name). The "true" active -attribute indicates that all MDBs belonging to that group will have -delivery active right after deployment. If you mark that attribute as -false, you are indicating that every MDB belonging to the group will not -start receiving messages after deployment, a condition that will remain -until the group becomes active.

-
-
-
    -
  • -

    jboss-cli

    -
  • -
-
-
-

You can add a mdb-delivery-group using the add command as below:

-
-
-
-
[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:add
-{"outcome" => "success"}
-
-
-
-
Reading and Writing the Delivery State of a Delivery Group
-
-

You can check whether delivery is active for a group by reading the -active attribute, which defaults to true:

-
-
-
-
[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:read-attribute(name=active)
-{ "outcome" => "success", "result" => true }
-
-
-
-

To make the the delivery-group inactive, just write the active attribute -with a false value:

-
-
-
-
[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:write-attribute(name=active,value=false)
-{"outcome" => "success"}
-
-[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:read-attribute(name=active)
-{ "outcome" => "success", "result" => false }
-
-
-
-

To make it active again, write the attribute with a true value:

-
-
-
-
[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:write-attribute(name=active,value=true)
-{"outcome" => "success"}
-
-[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:read-attribute(name=active)
-{ "outcome" => "success", "result" => true }
-
-
-
-
-
Using Delivery Groups
-
-

To mark that an MDB belongs to a delivery-group, declare so in the -jboss-ejb3.xml file:

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-
-<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-               xmlns="http://java.sun.com/xml/ns/javaee"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xmlns:d="urn:delivery-active:1.2"
-               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
-               version="3.1"
-               impl-version="2.0">
-    <assembly-descriptor>
-        <d:delivery>
-            <ejb-name>HelloWorldMDB</ejb-name>
-            <d:group>mdb-delivery-group</d:group>
-        </d:delivery>
-    </assembly-descriptor>
-</jboss:ejb-jar>
-
-
-
-

You can also use a wildcard to mark that all MDBs in your application -belong to a delivery-group. In the following example, we add all MDBs in -the application to group1, except for HelloWorldMDB, that is added to -group2:

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-               xmlns="http://java.sun.com/xml/ns/javaee"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xmlns:d="urn:delivery-active:1.2"
-               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
-               version="3.1"
-               impl-version="2.0">
-    <assembly-descriptor>
-        <d:delivery>
-            <ejb-name>*</ejb-name>
-            <d:group>group1</d:group>
-        </d:delivery>
-        <d:delivery>
-            <ejb-name>HelloWorldMDB</ejb-name>
-            <d:group>group2</d:group>
-        </d:delivery>
-    </assembly-descriptor>
-</jboss:ejb-jar>
-
-
-
-

Another option is to use org.jboss.ejb3.annotation.DeliveryGroup -annotation on each MDB class belonging to a group:

-
-
-
-
@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
- @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
- @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
- @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
-
-@DeliveryGroup("group2")
-
-public class HelloWorldMDB implements MessageListener {
-    ...
-}
-
-
-
-

A MDB can belong to more than one delivery group. See the following example:

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-
-<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-               xmlns="http://java.sun.com/xml/ns/javaee"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xmlns:d="urn:delivery-active:1.2"
-               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
-               version="3.1"
-               impl-version="2.0">
-    <assembly-descriptor>
-        <d:delivery>
-            <ejb-name>*</ejb-name>
-            <d:group>mdb-delivery-group1</d:group>
-        </d:delivery>
-        <d:delivery>
-            <ejb-name>HelloWorldMDB</ejb-name>
-            <d:group>mdb-delivery-group2</d:group>
-            <d:group>mdb-delivery-group3</d:group>
-        </d:delivery>
-    </assembly-descriptor>
-</jboss:ejb-jar>
-
-
-
-

In the example above, we use the wildcard to specify that every MDB in the -ejb-jar will belong to mdb-delivery-group1. -That means that, in order for delivery of messages to be active for those MDBs, -mdb-delivery-group1 must be active.

-
-
-

In addition, the configuration above specifies that HelloWorldMDB belongs also -to mdb-delivery-group2 and mdb-delivery-group3. So, delivery of messages to - HelloWorldMDB will only be active when mdb-delivery-group1, - mdb-delivery-group2, and mdb-delivery-group3 are all active.

-
-
-

The same could be specified using the @DeliveryGroup annotation:

-
-
-
-
@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
- @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
- @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
- @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
-
-@DeliveryGroup("mdb-delivery-group2")
-@DeliveryGroup("mdb-delivery-group3")
-
-public class HelloWorldMDB implements MessageListener {
-    ...
-}
-
-
-
-

Notice that all the delivery-groups used by an application must be installed in -the WildFly server upon deployment, or the deployment will fail with a message -stating that the delivery-group is missing.

-
-
-
-
-

9.12.3. Clustered Singleton Delivery

-
-

Delivery can be marked as singleton in a clustered environment. In this -case, only one node in the cluster will have delivery active for that -MDB, whereas in all other nodes, delivery will be inactive. This option -can be used for applications that are deployed in all nodes of the -cluster. Such applications will be active in all nodes of the cluster, -except for the MDBs that are marked as clustered singleton. For those -MDBs, only one cluster node will be processing their messages. In case -that node stops, another node will have delivery activated, guaranteeing -that there is always one node processing the messages. This node is what -we call primary singleton provider of the MDB.

-
-
-

Notice that applications using clustered singleton delivery can only be -deployed in clustered WildFly servers (i.e., servers that are using the -ha configuration).

-
-
-

To mark delivery as clustered singleton, you can use the jboss-ejb3.xml -or the @ClusteredSingleton annotation:

-
-
-
    -
  • -

    jboss-ejb3.xml:

    -
  • -
-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-               xmlns="http://java.sun.com/xml/ns/javaee"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xmlns:c="urn:clustering:1.1"
-               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
-               version="3.1"
-               impl-version="2.0">
-    <assembly-descriptor>
-        <c:clustering>
-            <ejb-name>HelloWorldMDB</ejb-name>
-            <c:clustered-singleton>true</c:clustered-singleton>
-        </c:clustering>
-    </assembly-descriptor>
-</jboss:ejb-jar>
-
-
-
-

As in the previous jboss-ejb3.xml examples, a wildcard can be used in -the place of the ejb-name to indicate that all MDBs in the application -are singleton clustered.

-
-
-
    -
  • -

    annotation

    -
  • -
-
-
-

You can use the org.jboss.ejb3.annotation.ClusteredSingleton annotation -to mark an MDB as clustered singleton:

-
-
-
-
@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
- @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
- @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
- @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
-
-@ClusteredSingleton
-
-public class HelloWorldMDB implements MessageListener { ... }
-
-
-
-
-

9.12.4. Using Multiple MDB Delivery Control Mechanisms

-
-

The previous delivery control mechanisms can be used together in a -single MDB. In this case, they work as a set of restrictions for -delivery to be active in a MDB.

-
-
-

For example, if an MDB belongs to one or more delivery groups and is also a -clustered singleton MDB, the delivery will be active for that MDB only -if the delivery groups are active in the cluster node that was elected as -the primary singleton provider.

-
-
-

Also, if you use jboss-cli to stopDelivery on a MDB that belongs to one or more -delivery groups, the MDB will stop receiving messages in case all groups -were active. If one or more of the groups associated with the MDB was not active, -the MDB will continue in the same, inactive state. But, once all groups become active, -the MDB will still be prevented from receiving messages, unless a startDelivery -operation is executed to revert the previously executed stopDelivery operation.

-
-
-

Invoking stopDelivery on an MDB that is marked as clustered singleton -will work in a similar way: no visible effect if the current node is not -the primary singleton provider; but it will stop delivery of messages -for that MDB if the current node is the primary singleton provider. If -the current node is not the primary singleton provider, but eventually becomes so, the -delivery of messages will not be active for that MDB, unless a -startDelivery operation is invoked.

-
-
-

In other words, when more than one delivery control mechanism is used in -conjunction, they act as a set of restrictions that need all to be true -in order for the MDB to receive messages:

-
-
-
    -
  • -

    MDB belongs to one delivery-group + stop-delivery was invoked: the delivery group -needs to be active and the delivery needs to be restarted (via start-delivery) in order -for that MDB to start receiving messages;

    -
  • -
  • -

    MDB belongs to one delivery-group + MDB is clustered singleton: the delivery group -needs to be active and the current node needs to be the primary singleton provider -node in order for that MDB to start receiving messages;

    -
  • -
  • -

    MDB belongs to one delivery-group + MDB is clustered singleton + stop-delivery was invoked: -as above, the delivery-group has to be active, the current cluster node must be the -primary singleton provider node, plus, start-delivery needs to be invoked on that MDB, -only with these three factors being true the MDB will start receiving messages.

    -
  • -
  • -

    MDB belongs to multiple delivery-groups + stop-delivery was invoked: all the delivery -groups need to be active and the delivery needs to be restarted (via start-delivery) in -order for that MDB to start receiving messages;

    -
  • -
  • -

    MDB belongs to multiple delivery-groups + MDB is clustered singleton: all the delivery -groups need to be active and the current node needs to be the primary singleton -provider node in order for that MDB to start receiving messages;

    -
  • -
  • -

    MDB belongs to multiple delivery-groups + MDB is clustered singleton + stop-delivery was -invoked: as above, all delivery-groups must be active, and current cluster node has to be the -primary singleton provider node, plus, start-delivery needs to be invoked on that MDB, only -with these three factors being true the MDB will start receiving messages.

    -
  • -
-
-
-
-
-

9.13. Securing Jakarta Enterprise Beans

-
-

The Jakarta EE spec specifies certain annotations (like @RolesAllowed, -@PermitAll, @DenyAll) which can be used on Jakarta Enterprise Beans implementation classes -and/or the business method implementations of the beans. Like with all -other configurations, these security related configurations can also be -done via the deployment descriptor (ejb-jar.xml). We won’t be going -into the details of Jakarta EE specific annotations/deployment descriptor -configurations in this chapter but instead will be looking at the vendor -specific extensions to the security configurations.

-
-
-

9.13.1. Security Domain

-
-

The Jakarta EE spec doesn’t mandate a specific way to configure security -domain for a bean. It leaves it to the vendor implementations to allow -such configurations, the way they wish. In WildFly 29, the use of -@org.jboss.ejb3.annotation.SecurityDomain annotation allows the -developer to configure the security domain for a bean. Here’s an -example:

-
-
-
-
import org.jboss.ejb3.annotation.SecurityDomain;
- 
-import jakarta.ejb.Stateless;
- 
-@Stateless
-@SecurityDomain("other")
-public class MyBean ...
-{
-   ...
-}
-
-
-
-

The use of @SecurityDomain annotation lets the developer to point the -container to the name of the security domain which is configured in the -Jakarta Enterprise Beans 3 subsystem in the standalone/domain configuration. The configuration -of the security domain in the Jakarta Enterprise Beans 3 subsystem is out of the scope of this -chapter.

-
-
-

An alternate way of configuring a security domain, instead of using -annotation, is to use jboss-ejb3.xml deployment descriptor. Here’s an -example of how the configuration will look like:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jboss:jboss
-        xmlns="http://java.sun.com/xml/ns/javaee"
-        xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xmlns:s="urn:security:1.1"
-         xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd"
-         version="3.1" impl-version="2.0">
- 
-    <assembly-descriptor>
-        <s:security>
-   <!-- Even wildcard * is supported -->
-            <ejb-name>MyBean</ejb-name>
-            <!-- Name of the security domain which is configured in the EJB3 subsystem -->
-            <s:security-domain>other</s:security-domain>
-        </s:security>
-    </assembly-descriptor>
-</jboss:jboss>
-
-
-
-

As you can see we use the security-domain element to configure the -security domain.

-
-
- - - - - -
- - -The jboss-ejb3.xml is expected to be placed in the .jar/META-INF folder -of a .jar deployment or .war/WEB-INF folder of a .war deployment. -
-
-
-
-

9.13.2. Absence of security domain configuration but presence of other

-
-

security metadata

-
-
-

Let’s consider the following example bean:

-
-
-
-
@Stateless
-public class FooBean {
- 
- @RolesAllowed("bar")
- public void doSomething() {
-  ..
- }
-...
-}
-
-
-
-

As you can see the doSomething method is configured to be accessible -for users with role "bar". However, the bean isn’t configured for any -specific security domain. Prior to WildFly 29, the absence of an -explicitly configured security domain on the bean would leave the bean -unsecured, which meant that even if the doSomething method was -configured with @RolesAllowed("bar") anyone even without the "bar" -role could invoke on the bean.

-
-
-

In WildFly 29, the presence of any security metadata (like @RolesAllowed, -@PermitAll, @DenyAll, @RunAs, @RunAsPrincipal) on the bean or any -business method of the bean, makes the bean secure, even in the absence -of an explicitly configured security domain. In such cases, the security -domain name is default to "other". Users can explicitly configure an -security domain for the bean if they want to using either the annotation -or deployment descriptor approach explained earlier.

-
-
-
-

9.13.3. Access to methods without explicit security metadata, on a secured

-
-

bean

-
-
-

Consider this example bean:

-
-
-
-
@Stateless
-public class FooBean {
- 
- @RolesAllowed("bar")
- public void doSomething() {
-  ..
- }
- 
- 
- public void helloWorld() {
-  ...
-    }
-}
-
-
-
-

As you can see the doSomething method is marked for access for only -users with role "bar". That enables security on the bean (with security -domain defaulted to "other"). However, notice that the method -helloWorld doesn’t have any specific security configurations.

-
-
-

In WildFly 29, such methods which have no explicit security -configurations, in a secured bean, will be treated similar to a method -with @DenyAll configuration. What that means is, no one is allowed -access to the helloWorld method. This behaviour can be controlled via -the jboss-ejb3.xml deployment descriptor at a per bean level or a per -deployment level as follows:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jboss:jboss
-        xmlns="http://java.sun.com/xml/ns/javaee"
-        xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xmlns:s="urn:security:1.1"
-        xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd"
-        version="3.1" impl-version="2.0">
- 
-    <assembly-descriptor>
-        <s:security>
-   <!-- Even wildcard * is supported where * is equivalent to all EJBs in the deployment -->
-            <ejb-name>FooBean</ejb-name>
-            <s:missing-method-permissions-deny-access>false</s:missing-method-permissions-deny-access>
-        </s:security>
-    </assembly-descriptor>
-</jboss:jboss>
-
-
-
-

Notice the use of <missing-method-permissions-deny-access> element. -The value for this element can either be true or false. If this element -isn’t configured then it is equivalent to a value of true i.e. no one is -allowed access to methods, which have no explicit security -configurations, on secured beans. Setting this to false allows access to -such methods for all users i.e. the behaviour will be switched to be -similar to @PermitAll.

-
-
-

This behaviour can also be configured at the Jakarta Enterprise Beans 3 subsystem level so -that it applies to all Jakarta Enterprise Beans 3 deployments on the server, as follows:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:ejb3:1.4">
-...
-            <default-missing-method-permissions-deny-access value="true"/>
-...
-</subsystem>
-
-
-
-

Again, the default-missing-method-permissions-deny-access element -accepts either a true or false value. A value of true makes the -behaviour similar to @DenyAll and a value of false makes it behave -like @PermitAll

-
-
-
-
-

9.14. Jakarta Enterprise Beans Client Interceptors

-
-

9.14.1. Implementing Client Interceptors

-
-

The Jakarta Enterprise Beans client supports the notion of client side interceptors. These are interceptors -that are run before an invocation is dispatched, and can modify various properties of -the request before it is sent, as well as modifying parameters and the return value.

-
-
-

These interceptors are represented by the class org.jboss.ejb.client.EJBClientInterceptor, -and are generally registered placing interceptor class names in -META-INF/services/org.jboss.ejb.client.EJBClientInterceptor.

-
-
-

For more details about what can be modified refer to the Jakarta Enterprise Beans client JavaDoc.

-
-
-
-

9.14.2. Accessing invocation context data

-
-

It is possible for client interceptors to access data from the invocation context data map used in the server -invocation (i.e. InvocationContext.getContextData()). To access a specific key you must call -org.jboss.ejb.client.EJBClientInvocationContext.addReturnedContextDataKey(String key) with -the name of the key you are interested in. This method must be called from the handleInvocation method -of the interceptor.

-
-
-

If there is data in the context map under this specific key then it will be sent back to the client -and will be available in the handleInvocationResult in the client invocations context data map.

-
-
-
-
-

9.15. Jakarta Enterprise Beans on Kubernetes

-
-

If the WildFly server is deployed on Kubernetes then there are several -points that you need to bear in mind when you use EJBs.

-
-
- - - - - -
- - -When deploying on Kubernetes you should consider the use of the WildFly Operator. - It manages the Kubernetes objects in WildFly friendly way. - For example, it uses StatefulSet for the correct handling of EJB remoting and transaction recovery processing. -
-
-
-

The rest of this chapter assumes the StatefulSet is used -as the Kubernetes API object for managing the WildFly server.

-
-
-

The StatefulSet provides a guarantee of persistent storage and network hostname stability -over the restarts of the pod.

-
-
-

These two guarantees are particularly important for the transaction manager which is a stateful component. -The persistent storage over restarts is needed as the transaction log is usually stored at the file system. -If the transaction manager creates a transaction log record it’s created only at the transaction log particular to the WildFly instance. -The hostname stability is needed as the WildFly may be contacted via EJB remote call with transaction propagation. -The WildFly has to be reachable under the same hostname even after pod restarts. -As the transaction log is bound to the particular WildFly instance it may be finished only there.

-
-
-

9.15.1. EJB calls on Kubernetes

-
-

The EJB caller has two options on how to configure the remote call. -It can be defined either as a remote outbound connection (see details at Admin Guide, section Outbound Connections) -or you may use a direct InitialContext lookup in your code.

-
-
-

If you use either case then for the Kubernetes you need to adjust the configuration of the target node. -For the target hostname, you need to use the DNS name of the very first pod managed by StatefulSet.

-
-
-

The StatefulSet guarantees depend on the ordering of the pods. The pods are named in the prescribed order. -If you scale your application up to 3 replicas you may expect -your pods will have names such as wildfly-server-0, wildfly-server-1, wildfly-server-2.

-
-
-

It’s expected a headless services -to be used along with the StatefulSet. With the headless service, there is ensured the DNS hostname for the pod. -If the application uses the WildFly Operator, a headless service will be created with a name such as wildfly-server-headless. -Then the DNS name of the very first pod will be wildfly-server-0.wildfly-server-headless.

-
-
-

The use of the hosname wildfly-server-0.wildfly-server-headless -guarantees that the EJB call may reach any WildFly instance connected to the cluster. -It’s a bootstrap connection which is used to initialize the EJB client -which gathers the structure of the WildFly cluster as the next step.

-
-
-
-

9.15.2. EJB configuration for Kubernetes

-
-

These are steps you need to process in order to run EJB remote calls. -Some steps are related to the server configuration, the other ones -on your application.

-
-
-
    -
  • -

    The clustering has to be set correctly, see the High Availability Guide, section of Kubernetes discovery.

    -
  • -
  • -

    All the socket-binding must define the client mapping for the DNS value mapped by StatefulSet headless service. -For example if the application is named wildfly-server and the StatefulSet headless service is named wildfly-server-headless -then the http socket binding has to be defined in the following way:

    -
  • -
-
-
-
-
<socket-binding name="http" port="${jboss.http.port:8080}">
-   <client-mapping destination-address="${jboss.node.name}.wildfly-server-headless"/>
-</socket-binding>
-
-
-
-
    -
  • -

    A small workaround is needed for the remote EJB transaction recovery on Kubernetes -(the issue could be tracked at WFCORE-4668). -The WildFly application server has to be configured with property wildfly.config.url. -The wildfly.config.url points to a XML configuration file. If we consider one being placed at $JBOSS_HOME/standalone/configuration/wildfly-config.xml -then the property is setup as JAVA_OPTS="$JAVA_OPTS -Dwildfly.config.url=$JBOSS_HOME/standalone/configuration/wildfly-config.xml". -The wildfly-config.xml defines the EJB recovery authentication to be used during transaction recovery for remote EJB calls. -The target server has to configure a user that is permitted to receive the EJB remote calls. -Such a user is then configured by standard means of security configuration. -Let’s say there is configured a user on the target server. -The user is created with script $JBOSS_HOME/bin/add-user.sh under the ApplicationRealm. -Then the caller WildFly uses the configuration in wildfly-config.xml this way -(you may copy the content below, but replace the >>PASTE_…​_HERE<< with user and password you configured):

    -
  • -
-
-
-
-
<configuration>
-  <authentication-client xmlns="urn:elytron:1.0">
-  <authentication-rules>
-          <rule use-configuration="jta">
-              <match-abstract-type name="jta" authority="jboss"/>
-      </rule>
-      </authentication-rules>
-      <authentication-configurations>
-       <configuration name="jta">
-               <sasl-mechanism-selector selector="DIGEST-MD5"/>
-               <providers>
-                   <use-service-loader />
-           </providers>
-       <set-user-name name=">>PASTE_USER_NAME_HERE<<"/>
-           <credentials>
-                    <clear-password password=">>PASTE_PASSWORD_HERE<<"/>
-           </credentials>
-               <set-mechanism-realm name="ApplicationRealm" />
-           </configuration>
-      </authentication-configurations>
-  </authentication-client>
-</configuration>
-
-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-

9.16. Jakarta Enterprise Beans Deployment Runtime Resources

-
-

Enterprise bean deployment exposes certain management runtime resources to help users inspect enterprise bean metadata -and monitor invocation statistics. Bean metadata is configured in the application via deployment descriptor and -annotations. Stateless, stateful, singleton session beans and message-driven beans support a common set of resources, -and also resources specific to the bean type. For example, these are some of the common enterprise bean resources:

-
-
-
    -
  • -

    jndi-names

    -
  • -
  • -

    component-class-name

    -
  • -
  • -

    declared-roles

    -
  • -
  • -

    transaction-type

    -
  • -
  • -

    stateful-timeout

    -
  • -
  • -

    activation-config

    -
  • -
-
-
-

Users can view these enterprise bean resources via WildFly CLI or Administration Console. The following sections -provides sample CLI and Administration Console output for each enterprise bean type. For complete details, refer to -WildFly Model Reference Documentation

-
-
-

9.16.1. Stateless Session Bean Runtime Resources

-
-

To view the management runtime resources for a deployed stateless session bean in CLI, run the following CLI command:

-
-
-
-
/deployment=<DEPLOYMENT-NAME>/subsystem=ejb3/stateless-session-bean=<BEAN-NAME>:read-resource(include-runtime)
-
-
-
-

The following is a sample output for a stateless session bean named ManagedStatelessBean in deployment ejb-management.jar:

-
-
-
-
/deployment=ejb-management.jar/subsystem=ejb3/stateless-session-bean=ManagedStatelessBean:read-resource(include-runtime)
-{
-    "outcome" => "success",
-    "result" => {
-        "async-methods" => ["void async(int, int)"],
-        "business-local" => ["sample.ManagedStatelessBean"],
-        "business-remote" => ["sample.BusinessInterface"],
-        "component-class-name" => "sample.ManagedStatelessBean",
-        "declared-roles" => [
-            "Role3",
-            "Role2",
-            "Role1"
-        ],
-        "execution-time" => 160L,
-        "invocations" => 3L,
-        "jndi-names" => [
-            "java:global/ejb-management/ManagedStatelessBean!sample.BusinessInterface",
-            "java:module/ManagedStatelessBean!sample.BusinessInterface",
-            "java:app/ejb-management/ManagedStatelessBean!sample.BusinessInterface",
-            "java:global/ejb-management/ManagedStatelessBean!sample.ManagedStatelessBean",
-            "java:module/ManagedStatelessBean!sample.ManagedStatelessBean",
-            "java:app/ejb-management/ManagedStatelessBean!sample.ManagedStatelessBean"
-        ],
-        "methods" => {"doIt" => {
-            "execution-time" => 160L,
-            "invocations" => 3L,
-            "wait-time" => 10L
-        }},
-        "peak-concurrent-invocations" => 1L,
-        "pool-available-count" => 64,
-        "pool-create-count" => 1,
-        "pool-current-size" => 1,
-        "pool-max-size" => 64,
-        "pool-name" => "slsb-strict-max-pool",
-        "pool-remove-count" => 0,
-        "run-as-role" => "Role3",
-        "security-domain" => "other",
-        "timeout-method" => "public void sample.ManagedStatelessBean.timeout(jakarta.ejb.Timer)",
-        "timers" => [{
-            "time-remaining" => 4735224L,
-            "next-timeout" => 1577768415000L,
-            "calendar-timer" => true,
-            "persistent" => false,
-            "info" => "timer1",
-            "schedule" => {
-                "year" => "*",
-                "month" => "*",
-                "day-of-month" => "*",
-                "day-of-week" => "*",
-                "hour" => "0",
-                "minute" => "0",
-                "second" => "15",
-                "timezone" => undefined,
-                "start" => undefined,
-                "end" => undefined
-            }
-        }],
-        "transaction-type" => "CONTAINER",
-        "wait-time" => 10L,
-        "service" => {"timer-service" => undefined}
-    }
-}
-
-
-
-

To view it in WildFly Administration Console, go to the Management Model section of the target deployment. For example,

-
-
-

ejb/stateless-management-resource.png

-
-
-
-

9.16.2. Stateful Session Bean Runtime Resources

-
-

To view the management runtime resources for a deployed stateful session bean in CLI, run the following CLI command:

-
-
-
-
/deployment=<DEPLOYMENT-NAME>/subsystem=ejb3/stateful-session-bean=<BEAN-NAME>:read-resource(include-runtime)
-
-
-
-

The following is a sample output for a stateful session bean named ManagedStatefulBean2 in deployment ejb-management.jar:

-
-
-
-
/deployment=ejb-management.jar/subsystem=ejb3/stateful-session-bean=ManagedStatefulBean2:read-resource(include-runtime)
-{
-    "outcome" => "success",
-    "result" => {
-        "after-begin-method" => "private void sample.ManagedStatefulBean2.afterBegin()",
-        "after-completion-method" => "private void sample.ManagedStatefulBean2.afterCompletion()",
-        "async-methods" => ["void async(int, int)"],
-        "before-completion-method" => "private void sample.ManagedStatefulBean2.beforeCompletion()",
-        "business-local" => ["sample.ManagedStatefulBean2"],
-        "business-remote" => ["sample.BusinessInterface"],
-        "cache-size" => 0,
-        "component-class-name" => "sample.ManagedStatefulBean2",
-        "declared-roles" => [
-            "Role3",
-            "Role2",
-            "Role1"
-        ],
-        "execution-time" => 163L,
-        "invocations" => 4L,
-        "jndi-names" => [
-            "java:app/ejb-management/ManagedStatefulBean2!sample.BusinessInterface",
-            "java:global/ejb-management/ManagedStatefulBean2!sample.BusinessInterface",
-            "java:module/ManagedStatefulBean2!sample.BusinessInterface",
-            "java:app/ejb-management/ManagedStatefulBean2!sample.ManagedStatefulBean2",
-            "java:global/ejb-management/ManagedStatefulBean2!sample.ManagedStatefulBean2",
-            "java:module/ManagedStatefulBean2!sample.ManagedStatefulBean2"
-        ],
-        "methods" => {
-            "doIt" => {
-                "execution-time" => 163L,
-                "invocations" => 3L,
-                "wait-time" => 3L
-            },
-            "remove" => {
-                "execution-time" => 0L,
-                "invocations" => 1L,
-                "wait-time" => 1L
-            }
-        },
-        "passivated-count" => 0,
-        "passivation-capable" => false,
-        "peak-concurrent-invocations" => 1L,
-        "remove-methods" => [
-            {
-                "bean-method" => "void remove()",
-                "retain-if-exception" => false
-            },
-            {
-                "bean-method" => "void removeTrue()",
-                "retain-if-exception" => true
-            },
-            {
-                "bean-method" => "void removeFalse()",
-                "retain-if-exception" => false
-            }
-        ],
-        "run-as-role" => "Role3",
-        "security-domain" => "other",
-        "stateful-timeout" => "2 HOURS",
-        "total-size" => 0,
-        "transaction-type" => "BEAN",
-        "wait-time" => 4L,
-        "service" => undefined
-    }
-}
-
-
-
-

To view it in WildFly Administration Console, go to the Management Model section of the target deployment. For example,

-
-
-

ejb/stateful-management-resource.png

-
-
-
-

9.16.3. Singleton Bean Runtime Resources

-
-

To view the management runtime resources for a deployed singleton bean in CLI, run the following CLI command:

-
-
-
-
/deployment=<DEPLOYMENT-NAME>/subsystem=ejb3/singleton-bean=<BEAN-NAME>:read-resource(include-runtime)
-
-
-
-

The following is a sample output for a singleton bean named ManagedSingletonBean in deployment ejb-management.jar:

-
-
-
-
/deployment=ejb-management.jar/subsystem=ejb3/singleton-bean=ManagedSingletonBean:read-resource(include-runtime)
-{
-    "outcome" => "success",
-    "result" => {
-        "async-methods" => ["void async(int, int)"],
-        "business-local" => ["sample.ManagedSingletonBean"],
-        "business-remote" => ["sample.BusinessInterface"],
-        "component-class-name" => "sample.ManagedSingletonBean",
-        "concurrency-management-type" => undefined,
-        "declared-roles" => [
-            "Role3",
-            "Role2",
-            "Role1"
-        ],
-        "depends-on" => undefined,
-        "execution-time" => 156L,
-        "init-on-startup" => false,
-        "invocations" => 3L,
-        "jndi-names" => [
-            "java:module/ManagedSingletonBean!sample.ManagedSingletonBean",
-            "java:global/ejb-management/ManagedSingletonBean!sample.ManagedSingletonBean",
-            "java:app/ejb-management/ManagedSingletonBean!sample.ManagedSingletonBean",
-            "java:app/ejb-management/ManagedSingletonBean!sample.BusinessInterface",
-            "java:global/ejb-management/ManagedSingletonBean!sample.BusinessInterface",
-            "java:module/ManagedSingletonBean!sample.BusinessInterface"
-        ],
-        "methods" => {"doIt" => {
-            "execution-time" => 156L,
-            "invocations" => 3L,
-            "wait-time" => 0L
-        }},
-        "peak-concurrent-invocations" => 1L,
-        "run-as-role" => "Role3",
-        "security-domain" => "other",
-        "timeout-method" => "public void sample.ManagedSingletonBean.timeout(jakarta.ejb.Timer)",
-        "timers" => [{
-            "time-remaining" => 4304279L,
-            "next-timeout" => 1577768415000L,
-            "calendar-timer" => true,
-            "persistent" => false,
-            "info" => "timer1",
-            "schedule" => {
-                "year" => "*",
-                "month" => "*",
-                "day-of-month" => "*",
-                "day-of-week" => "*",
-                "hour" => "0",
-                "minute" => "0",
-                "second" => "15",
-                "timezone" => undefined,
-                "start" => undefined,
-                "end" => undefined
-            }
-        }],
-        "transaction-type" => "CONTAINER",
-        "wait-time" => 0L,
-        "service" => {"timer-service" => undefined}
-    }
-}
-
-
-
-

To view it in WildFly Administration Console, go to the Management Model section of the target deployment. For example,

-
-
-

ejb/singleton-management-resource.png

-
-
-
-

9.16.4. Message-driven Bean Runtime Resources

-
-

To view the management runtime resources for a deployed message-driven bean in CLI, run the following CLI command:

-
-
-
-
/deployment=<DEPLOYMENT-NAME>/subsystem=ejb3/message-driven-bean=<BEAN-NAME>:read-resource(include-runtime)
-
-
-
-

The following is a sample output for a message-driven bean named ManagedMDB in deployment ejb-management.jar:

-
-
-
-
/deployment=ejb-management.jar/subsystem=ejb3/message-driven-bean=ManagedMDB:read-resource(include-runtime)
-{
-    "outcome" => "success",
-    "result" => {
-        "activation-config" => [
-            ("destinationType" => "jakarta.jms.Queue"),
-            ("destination" => "java:/queue/ManagedMDB-queue")
-        ],
-        "component-class-name" => "sample.ManagedMDB",
-        "declared-roles" => [
-            "Role3",
-            "Role2",
-            "Role1"
-        ],
-        "delivery-active" => true,
-        "execution-time" => 0L,
-        "invocations" => 0L,
-        "message-destination-link" => undefined,
-        "message-destination-type" => undefined,
-        "messaging-type" => "jakarta.jms.MessageListener",
-        "methods" => {},
-        "peak-concurrent-invocations" => 0L,
-        "pool-available-count" => 16,
-        "pool-create-count" => 0,
-        "pool-current-size" => 0,
-        "pool-max-size" => 16,
-        "pool-name" => "mdb-strict-max-pool",
-        "pool-remove-count" => 0,
-        "run-as-role" => "Role3",
-        "security-domain" => "other",
-        "timeout-method" => "public void sample.ManagedMDB.timeout(jakarta.ejb.Timer)",
-        "timers" => [{
-            "time-remaining" => 4213581L,
-            "next-timeout" => 1577768415000L,
-            "calendar-timer" => true,
-            "persistent" => false,
-            "info" => "timer1",
-            "schedule" => {
-                "year" => "*",
-                "month" => "*",
-                "day-of-month" => "*",
-                "day-of-week" => "*",
-                "hour" => "0",
-                "minute" => "0",
-                "second" => "15",
-                "timezone" => undefined,
-                "start" => undefined,
-                "end" => undefined
-            }
-        }],
-        "transaction-type" => "CONTAINER",
-        "wait-time" => 0L,
-        "service" => {"timer-service" => undefined}
-    }
-}
-
-
-
-

To view it in WildFly Administration Console, go to the Management Model section of the target deployment. For example,

-
-
-

ejb/mdb-management-resource.png

-
-
-
-
-
-
-

10. JPA Reference Guide

-
-
-

10.1. Introduction

-
-

The WildFly JPA subsystem implements the Jakarta Persistence 3.1 container-managed -requirements. Deploys the persistence unit definitions, the persistence -unit/context annotations and persistence unit/context references in the -deployment descriptor. JPA Applications use the Hibernate (version 5.3) -persistence provider, which is included with WildFly. The JPA subsystem -uses the standard SPI (jakarta.persistence.spi.PersistenceProvider) to -access the Hibernate persistence provider and some additional extensions -as well.

-
-
-

During application deployment, JPA use is detected (e.g. persistence.xml -or @PersistenceContext/Unit annotations) and injects Hibernate -dependencies into the application deployment. This makes it easy to -deploy JPA applications.

-
-
-

In the remainder of this documentation, "entity manager" refers to an -instance of the jakarta.persistence.EntityManager class. -Javadoc -for the JPA interfacesand JPA 2.2 -specification.

-
-
-

The index of the Hibernate documentation is at -https://hibernate.org/orm/documentation/6.1/

-
-
-
-

10.2. Update your Persistence.xml for Hibernate

-
-

The persistence provider class name in Hibernate is -org.hibernate.jpa.HibernatePersistenceProvider.

-
-
-

Your persistence.xml can specify:

-
-
-

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

-
-
-

Or remove the persistence provider class name from your persistence.xml -(so the default provider will be used).

-
-
-
-

10.3. Entity manager

-
-

The entity manager (jakarta.persistence.EntityManager class) is similar to -the Hibernate Session class; applications use it to -create/read/update/delete data (and related operations). Applications -can use application-managed or container-managed entity managers. Keep -in mind that the entity manager is not thread safe, don’t share the same -entity manager instance with multiple threads.

-
-
-

Internally, the entity manager, has a persistence context for managing -entities. You can think of the persistence context as being closely -associated with the entity manager.

-
-
-
-

10.4. Container-managed entity manager

-
-

When you inject a container-managed entity managers into an application -variable, it is treated like an (EE container controlled) Java proxy -object, that will be associated with an underlying EntityManager -instance, for each started JTA transaction and is flushed/closed when -the JTA transaction commits. Such that when your application code -invokes EntityManager.anyMethod(), the current JTA transaction is -searched (using persistence unit name as key) for the underlying -EntityManager instance, if not found, a new EntityManager instance is -created and associated with the current JTA transaction, to be reused -for the next EntityManager invocation. Use the @PersistenceContext -annotation, to inject a container-managed entity manager into a -jakarta.persistence.EntityManager variable.

-
-
-
-

10.5. Application-managed entity manager

-
-

An application-managed entity manager is kept around until the -application closes it. The scope of the application-managed entity -manager is from when the application creates it and lasts until the -application closes it. Use the @PersistenceUnit annotation, to inject -a persistence unit into a jakarta.persistence.EntityManagerFactory -variable. The EntityManagerFactory can return an application-managed -entity manager.

-
-
-
-

10.6. Persistence Context

-
-

The JPA persistence context contains the entities managed by the entity -manager (via the JPA persistence provider). The underlying entity -manager maintains the persistence context. The persistence context acts -like a first level (transactional) cache for interacting with the -datasource. Loaded entities are placed into the persistence context -before being returned to the application. Entities changes are also -placed into the persistence context (to be saved in the database when -the transaction commits).

-
-
-
-

10.7. Transaction-scoped Persistence Context

-
-

The transaction-scoped persistence context coordinates with the (active) -JTA transaction. When the transaction commits, the persistence context -is flushed to the datasource (entity objects are detached but may still -be referenced by application code). All entity changes that are expected -to be saved to the datasource, must be made during a transaction. -Entities read outside of a transaction will be detached when the entity -manager invocation completes. Example transaction-scoped persistence -context is below.

-
-
-
-
@Stateful  // will use container managed transactions
-public class CustomerManager {
-  @PersistenceContext(unitName = "customerPU") // default type is PersistenceContextType.TRANSACTION
-  EntityManager em;
-  public customer createCustomer(String name, String address) {
-    Customer customer = new Customer(name, address);
-    em.persist(customer);  // persist new Customer when JTA transaction completes (when method ends).
-                           // internally:
-                           //    1. Look for existing "customerPU" persistence context in active JTA transaction and use if found.
-                           //    2. Else create new "customerPU" persistence context (e.g. instance of org.hibernate.ejb.HibernatePersistence)
-                           //       and put in current active JTA transaction.
-    return customer;       // return Customer entity (will be detached from the persistence context when caller gets control)
-  }  // Transaction.commit will be called, Customer entity will be persisted to the database and "customerPU" persistence context closed
-
-
-
-
-

10.8. Extended Persistence Context

-
-

The (ee container managed) extended persistence context can span -multiple transactions and allows data modifications to be queued up -(without an active JTA transaction), to be applied -during completion of next JTA transaction. The Container-managed extended persistence -context can only be injected into a stateful session bean.

-
-
-
-
@PersistenceContext(type = PersistenceContextType.EXTENDED, unitName = "inventoryPU")
-EntityManager em;
-
-
-
-

10.8.1. Extended Persistence Context Inheritance

-
-
-
JPA 2.2 specification section 7.6.3.1
- 
-If a stateful session bean instantiates a stateful session bean (executing in the same EJB container instance) which also has such an extended persistence context with the same synchronization type, the extended persistence context of the first stateful session bean is inherited by the second stateful session bean and bound to it, and this rule recursively applies independently of whether transactions are active or not at the point of the creation of the stateful session beans. If the stateful session beans differ in declared synchronization type, the EJBException is thrown by the container.  If the persistence context has been inherited by any stateful session beans, the container does not close the persistence context until all such stateful session beans have been removed or otherwise destroyed.
-
-
-
-

By default, the current stateful session bean being created, will ( -deeply) inherit the extended persistence context from any stateful -session bean executing in the current Java thread. The deep -inheritance of extended persistence context includes walking multiple -levels up the stateful bean call stack (inheriting from parent beans). -The deep inheritance of extended persistence context includes sibling -beans. For example, parentA references child beans beanBwithXPC & -beanCwithXPC. Even though parentA doesn’t have an extended persistence -context, beanBwithXPC & beanCwithXPC will share the same extended -persistence context.

-
-
-

Some other EE application servers, use shallow inheritance, where -stateful session bean only inherit from the parent stateful session bean -(if there is a parent bean). Sibling beans do not share the same -extended persistence context unless their (common) parent bean also has -the same extended persistence context.

-
-
-

Applications can include a (top-level) jboss-all.xml deployment -descriptor that specifies either the (default) DEEP extended -persistence context inheritance or SHALLOW.

-
-
-

The WF/docs/schema/jboss-jpa_1_0.xsd describes the jboss-jpa -deployment descriptor that may be included in the jboss-all.xml. Below -is an example of using SHALLOW extended persistence context -inheritance:

-
-
-
-
-

<jboss>
-<jboss-jpa xmlns="http://www.jboss.com/xml/ns/javaee">
-<extended-persistence inheritance="SHALLOW"/>
-</jboss-jpa>
-</jboss>

-
-
-
-
-

Below is an example of using DEEP extended persistence inheritance:

-
-
-
-
-

<jboss>
-<jboss-jpa xmlns="http://www.jboss.com/xml/ns/javaee">
-<extended-persistence inheritance="DEEP"/>
-</jboss-jpa>
-</jboss>

-
-
-
-
-

The AS console/cli can change the default extended persistence context -setting (DEEP or SHALLOW). The following cli commands will read the -current JPA settings and enable SHALLOW extended persistence context -inheritance for applications that do not include the jboss-jpa -deployment descriptor:

-
-
-
-
-
/jboss-cli.sh
-

cd subsystem=jpa
-:read-resource
-:write-attribute(name=default-extended-persistence-inheritance,value="SHALLOW")

-
-
-
-
-
-
-

10.9. Entities

-
-

JPA allows use of your (pojo) plain old Java class to represent a -database table row.

-
-
-
-
@PersistenceContext EntityManager em;
-Integer bomPk = getIndexKeyValue();
-BillOfMaterials bom = em.find(BillOfMaterials.class, bomPk); // read existing table row into BillOfMaterials class
- 
-BillOfMaterials createdBom = new BillOfMaterials("...");     // create new entity
-em.persist(createdBom);  // createdBom is now managed and will be saved to database when the current JTA transaction completes
-
-
-
-

The entity lifecycle is managed by the underlying persistence provider.

-
-
-
    -
  • -

    New (transient): an entity is new if it has just been instantiated -using the new operator, and it is not associated with a persistence -context. It has no persistent representation in the database and no -identifier value has been assigned.

    -
  • -
  • -

    Managed (persistent): a managed entity instance is an instance with a -persistent identity that is currently associated with a persistence -context.

    -
  • -
  • -

    Detached: the entity instance is an instance with a persistent -identity that is no longer associated with a persistence context, -usually because the persistence context was closed or the instance was -evicted from the context.

    -
  • -
  • -

    Removed: a removed entity instance is an instance with a persistent -identity, associated with a persistence context, but scheduled for -removal from the database.

    -
  • -
-
-
-
-

10.10. Deployment

-
-

The persistence.xml contains the persistence unit configuration (e.g. -datasource name) and as described in the JPA 2.0 spec (section 8.2), the -jar file or directory whose META-INF directory contains the -persistence.xml file is termed the root of the persistence unit. In Java -EE environments, the root of a persistence unit must be one of the -following (quoted directly from the JPA 2.0 specification):

-
-
-

"

-
-
-
    -
  • -

    an EJB-JAR file

    -
  • -
  • -

    the WEB-INF/classes directory of a WAR file

    -
  • -
  • -

    a jar file in the WEB-INF/lib directory of a WAR file

    -
  • -
  • -

    a jar file in the EAR library directory

    -
  • -
  • -

    an application client jar file

    -
  • -
-
-
-

The persistence.xml can specify either a JTA datasource or a non-JTA -datasource. The JTA datasource is expected to be used within the EE -environment (even when reading data without an active transaction). If a -datasource is not specified, the default-datasource will instead be used -(must be configured).

-
-
- - - - - -
- - -Java Persistence 1.0 supported use of a jar file in the root of -the EAR as the root of a persistence unit. This use is no longer -supported. Portable applications should use the EAR library directory -for this case instead. -
-
-
-

"

-
-
-

Question: Can you have a EAR/META-INF/persistence.xml?

-
-
-

Answer: No, the above may deploy but it could include other archives -also in the EAR, so you may have deployment issues for other reasons. -Better to put the persistence.xml in an EAR/lib/somePuJar.jar.

-
-
-
-

10.11. Troubleshooting

-
-

The org.jboss.as.jpa logging can be enabled to get the following -information:

-
-
-
    -
  • -

    INFO - when persistence.xml has been parsed, starting of persistence -unit service (per deployed persistence.xml), stopping of persistence -unit service

    -
  • -
  • -

    DEBUG - informs about entity managers being injected, creating/reusing -transaction scoped entity manager for active transaction

    -
  • -
  • -

    TRACE - shows how long each entity manager operation took in -milliseconds, application searches for a persistence unit, parsing of -persistence.xml

    -
  • -
-
-
-

To enable TRACE, open the as/standalone/configuration/standalone.xml (or -as/domain/configuration/domain.xml) file. Search for <subsystem -xmlns="urn:jboss:domain:logging:1.0"> and add the org.jboss.as.jpa -category. You need to change the console-handler level from INFO to -TRACE.

-
-
-
-
<subsystem xmlns="urn:jboss:domain:logging:1.0">
-     <console-handler name="CONSOLE">
-      <level name="TRACE" />
-      ...
-     </console-handler>
- 
-     </periodic-rotating-file-handler>
-     <logger category="com.arjuna">
-        <level name="WARN" />
-     </logger>
- 
-     <logger category="org.jboss.as.jpa">
-        <level name="TRACE" />
-     </logger>
- 
-     <logger category="org.apache.tomcat.util.modeler">
-        <level name="WARN" />
-     </logger>
-     ...
-
-
-
-

To see what is going on at the JDBC level, enable jboss.jdbc.spy TRACE -and add spy="true" to the datasource.

-
-
-
-
<datasource jndi-name="java:jboss/datasources/..." pool-name="..." enabled="true" spy="true">
-<logger category="jboss.jdbc.spy">
-  <level name="TRACE"/>
-</logger>
-
-
-
-

To troubleshoot issues with the Hibernate second level cache, try -enabling trace for org.hibernate.SQL + org.hibernate.cache.infinispan
-org.infinispan:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:logging:1.0">
-     <console-handler name="CONSOLE">
-      <level name="TRACE" />
-      ...
-     </console-handler>
- 
-     </periodic-rotating-file-handler>
-     <logger category="com.arjuna">
-        <level name="WARN" />
-     </logger>
- 
-     <logger category="org.hibernate.SQL">
-        <level name="TRACE" />
-     </logger>
- 
-     <logger category="org.hibernate">
-        <level name="TRACE" />
-     </logger>
-      <logger category="org.infinispan">
-        <level name="TRACE" />
-     </logger>
- 
-     <logger category="org.apache.tomcat.util.modeler">
-        <level name="WARN" />
-     </logger>
-     ...
-
-
-
-
-

10.12. Using the Infinispan second level cache

-
-

To enable the second level cache with Hibernate, just set the -hibernate.cache.use_second_level_cache property to true or -set shared-cache-mode to one of the following:

-
-
-
    -
  • -

    ENABLE_SELECTIVE

    -
  • -
  • -

    DISABLE_SELECTIVE

    -
  • -
  • -

    ALL

    -
  • -
-
-
-

Infinispan is the cache provider for JPA applications, so you don’t need to specify -anything in addition. The Infinispan version that is included in -WildFly is expected to work with the Hibernate version that is included -with WildFly. Example persistence.xml settings:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
-<persistence-unit name="2lc_example_pu">
-   <description>example of enabling the second level cache.</description>
-   <jta-data-source>java:jboss/datasources/mydatasource</jta-data-source>
-   <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
-</persistence-unit>
-</persistence>
-
-
-
-

Here is an example of enabling the second level cache for a Hibernate -native API hibernate.cfg.xml file:

-
-
-
-
<property name="hibernate.cache.region.factory_class" value="org.infinispan.hibernate.cache.v53.InfinispanRegionFactory"/>
-<property name="hibernate.cache.infinispan.shared" value="false"/>
-<property name="hibernate.cache.use_second_level_cache" value="true"/>
-
-
-
-

The Hibernate native API application will also need a MANIFEST.MF:

-
-
-
-
Dependencies: org.infinispan,org.hibernate
-
-
-
-

Infinispan -Hibernate/JPA second level cache provider documentation contains -advanced configuration information but you should bear in mind that when -Hibernate runs within WildFly 29, some of those configuration options, -such as region factory, are not needed. Moreover, the application server -providers you with option of selecting a different cache container for -Infinispan via hibernate.cache.infinispan.container persistence -property. To reiterate, this property is not mandatory and a default -container is already deployed for by the application server to host the -second level cache.

-
-
-

Here is an example of what the Hibernate cache settings may currently be -in your standalone.xml:

-
-
-
-
 <cache-container name="hibernate" module="org.infinispan.hibernate-cache">
-     <local-cache name="entity">
-         <transaction mode="NON_XA"/>
-         <object-memory size="10000"/>
-         <expiration max-idle="100000"/>
-     </local-cache>
-     <local-cache name="local-query">
-         <object-memory size="10000"/>
-         <expiration max-idle="100000"/>
-     </local-cache>
-     <local-cache name="timestamps"/>
- </cache-container>
-
-
-
-

Below is an example of customizing the "entity", "immutable-entity", -"local-query", "pending-puts", "timestamps" cache configuration may look -like:

-
-
-
-
 <cache-container name="hibernate" module="org.infinispan.hibernate-cache" default-cache="immutable-entity">
-    <local-cache name="entity">
-        <transaction mode="NONE"/>
-        <eviction max-entries="-1"/>
-        <expiration max-idle="120000"/>
-    </local-cache>
-    <local-cache name="immutable-entity">
-        <transaction mode="NONE"/>
-        <eviction max-entries="-1"/>
-        <expiration max-idle="120000"/>
-    </local-cache>
-    <local-cache name="local-query">
-        <eviction max-entries="-1"/>
-        <expiration max-idle="300000"/>
-    </local-cache>
-    <local-cache name="pending-puts">
-        <transaction mode="NONE"/>
-        <eviction strategy="NONE"/>
-        <expiration max-idle="60000"/>
-    </local-cache>
-    <local-cache name="timestamps">
-        <transaction mode="NONE"/>
-        <eviction strategy="NONE"/>
-    </local-cache>
-</cache-container>
-
-
-
-

Persistence.xml to use the above custom settings:

-
-
-
-
<properties>
-    <property name="hibernate.cache.use_second_level_cache" value="true"/>
-    <property name="hibernate.cache.use_query_cache" value="true"/>
-    <property name="hibernate.cache.infinispan.immutable-entity.cfg" value="immutable-entity"/>
-    <property name="hibernate.cache.infinispan.timestamps.cfg" value="timestamps"/>
-    <property name="hibernate.cache.infinispan.pending-puts.cfg" value="pending-puts"/>
-</properties>
-
-
-
-
- -
-

WildFly includes Hibernate Search. -If you want to use the bundled version of Hibernate Search, which requires to use the default Hibernate ORM persistence provider:

-
-
-
    -
  • -

    Ensure at least one entity in your application is annotated with org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed, -so that WildFly will make the module org.hibernate.search.mapper.orm:main available to your deployment.

    -
  • -
  • -

    Ensure you set the configuration property hibernate.search.backend.type to lucene, -so that WildFly will make the module org.hibernate.search.backend.lucene:main available to your deployment.

    -
  • -
  • -

    Alternatively, add dependencies to those modules explicitly, -for example using a manifest entry. -Do not forget to append the services keyword, otherwise Hibernate Search may not detect these modules.

    -
    -

    For example:

    -
    -
  • -
-
-
-
-
Dependencies: org.hibernate.search.mapper.orm services,org.hibernate.search.backend.lucene services
-
-
-
-

If you do not want Hibernate Search to be exposed to your deployment, set the persistence property wildfly.jpa.hibernate.search.module to either none to not automatically inject any Hibernate Search module, or to any other module identifier to inject a different module. For example you could set wildfly.jpa.hibernate.search.module=org.hibernate.search.mapper.orm:6.1.0.Beta1 to use the experimental version 6.1.0.Beta1 instead of the provided module; in this case you’ll have to download and add the custom modules to the application server as other versions are not included. When setting wildfly.jpa.hibernate.search.module=none you might also opt to include Hibernate Search and its dependencies within your application but we highly recommend the modules approach.

-
-
-
-

10.14. Packaging the Hibernate JPA persistence provider with your application

-
-

WildFly allows the packaging of Hibernate persistence provider jars with -the application. The JPA deployer will detect the presence of a -persistence provider in the application and -jboss.as.jpa.providerModule needs to be set to application.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?> +
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-version="1.0"> +
-<persistence-unit name="myOwnORMVersion_pu"> +
-<description>Hibernate Persistence Unit.</description> +
-<jta-data-source>java:jboss/datasources/PlannerDS</jta-data-source> +
-<properties> +
-<property name="jboss.as.jpa.providerModule" value="application" /> +
-</properties> +
-</persistence-unit> +
-</persistence>
-
-
-
-
- -
-

You need to copy the EclipseLink (3.0 or newer) jar into the WildFly -modules/org/eclipse/persistence/main folder and update -modules/org/eclipse/persistence/main/module.xml to include the -EclipseLink jar (take care to use the jar name that you copied in). If -you happen to leave the EclipseLink version number in the jar name, the -module.xml should reflect that. This will help you get your application -that depends on EclipseLink, to deploy on WildFly.

-
-
-
-
 <module xmlns="urn:jboss:module:1.9" name="org.eclipse.persistence">
-    <resources>
-        <resource-root path="jipijapa-eclipselink-jakarta-27.0.0.Final.jar"/>
-        <resource-root path="eclipselink.jar">           <filter>
-              <exclude path="jakarta/**" />
-           </filter>
-        </resource-root>
-    </resources>
- 
-    <dependencies>
-        <module name="java.logging"/>
-        <module name="java.management"/>
-        <module name="java.naming"/>
-        <module name="jakarta.annotation.api"/>
-        <module name="jakarta.enterprise.api"/>
-        <module name="jakarta.json.api" optional="true"/>
-        <module name="jakarta.persistence.api"/>
-        <module name="jakarta.transaction.api"/>
-        <module name="jakarta.validation.api"/>
-        <module name="jakarta.xml.bind.api"/>
-        <module name="org.antlr"/>
-        <module name="org.jboss.as.jpa.spi"/>
-        <module name="org.jboss.logging"/>
-        <module name="org.jboss.vfs"/>
-    </dependencies>
-</module>
-
-
-
-

You should then be able to deploy applications with persistence.xml that -include;

-
-
-
-
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-
- -
-
-

10.16. Native Hibernate use

-
-

Applications that use the Hibernate API directly, can be referred to -as native Hibernate applications. Native Hibernate applications, can -choose to use the Hibernate jars included with WildFly or they can -package their own copy of the Hibernate jars. Applications that utilize -JPA will automatically have the Hibernate classes injected onto the -application deployment classpath. Meaning that JPA applications, should -expect to use the Hibernate jars included in WildFly.

-
-
-

Example MANIFEST.MF entry to add dependency for Hibernate native -applications:

-
-
-
-
Manifest-Version: 1.0
-...
-Dependencies: org.hibernate
-
-
-
-
-

10.17. Injection of Hibernate Session and SessionFactory

-
-

You can inject a org.hibernate.Session and org.hibernate.SessionFactory -directly, just as you can do with EntityManagers and -EntityManagerFactorys.

-
-
-
-
import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-@Stateful public class MyStatefulBean ... {
-   @PersistenceContext(unitName="crm") Session session1;
-   @PersistenceContext(unitName="crm2", type=EXTENDED) Session extendedpc;
-   @PersistenceUnit(unitName="crm") SessionFactory factory;
-}
-
-
-
-
-

10.18. Hibernate ORM 5.1 native API bytecode transformer was removed

-
-

If your application references the Hibernate ORM 5.1 native API bytecode transformer, you should remove references to org.jboss.as.hibernate.Hibernate51CompatibilityTransformer -in any jboss-deployment-structure.xml files in your application. The Hibernate51CompatibilityTransformer system property is now ignored.

-
-
-

For the following example Hibernate51CompatibilityTransformer.xml, you need to remove each transformer:

-
-
-
-
<jboss-deployment-structure>
-    <deployment>
-        <transformers>
-            <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/>
-        </transformers>
-        <dependencies>
-            <module name="org.hibernate" export="true" />
-        </dependencies>
-    </deployment>
-    <sub-deployment name="main.war">
-        <transformers>
-            <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/>
-        </transformers>
-    </sub-deployment>
-</jboss-deployment-structure>
-
-
-
-

Updated jboss-deployment-structure.xml:

-
-
-
-
<jboss-deployment-structure>
-    <deployment>
-        <dependencies>
-            <module name="org.hibernate" export="true" />
-        </dependencies>
-    </deployment>
-</jboss-deployment-structure>
-
-
-
-
-

10.19. Hibernate properties

-
-

WildFly automatically sets or checks the following Hibernate properties (if -not already set in persistence unit definition):

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyPurpose

hibernate.id.new_generator_mappings

Can no longer be set to false by applications as per the Hibernate 6 change to only support hibernate.id.new_generator_mappings=true.

hibernate.transaction.jta.platform= instance of -org.hibernate.service.jta.platform.spi.JtaPlatform interface

The -transaction manager, user transaction and transaction synchronization -registry is passed into Hibernate via this class.

hibernate.session_factory_name = qualified persistence unit name

Is -set to the application name + persistence unit name (application can -specify a different value but it needs to be unique across all -application deployments on the AS instance).

hibernate.session_factory_name_is_jndi = false

only set if the -application didn’t specify a value for hibernate.session_factory_name.

hibernate.entitymanager_factory_name = qualified persistence unit -name

Is set to the application name + persistence unit name -(application can specify a different value but it needs to be unique -across all application deployments on the AS instance). -This replaces the hibernate.ejb.entitymanager_factory_name property which is no longer supported.

hibernate.query.jpaql_strict_compliance=true

 

hibernate.auto_quote_keyword=false

 

hibernate.implicit_naming_strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl

hibernate.model.generator_name_as_sequence_name=true

hibernate.jpa.compliance=true

Sets all of the various hibernate.jpa.* properties to true (hibernate.jpa.compliance.transaction, hibernate.jpa.compliance.closed,hibernate.jpa.compliance.query, hibernate.jpa.compliance.list, hibernate.jpa.compliance.caching, hibernate.jpa.compliance.proxy

hibernate.enable_lazy_load_no_trans=false

-
-
-

10.20. Persistence unit properties

-
-

The following properties are supported in the persistence unit -definition (in the persistence.xml file):

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyPurpose

jboss.as.jpa.providerModule

name of the persistence provider module -(default is org.hibernate). Should be application, if a persistence -provider is packaged with the application. See note below about some -module names that are built in (based on the provider).

jboss.as.jpa.adapterModule

name of the integration classes that help -WildFly to work with the persistence provider.

jboss.as.jpa.adapterClass

class name of the integration adapter.

jboss.as.jpa.managed

set to false to disable container managed JPA -access to the persistence unit. The default is true, which enables -container managed JPA access to the persistence unit. This is typically -set to false for Spring applications.

jboss.as.jpa.classtransformer

set to false to disable class -transformers for the persistence unit. Set to true, to allow entity -class enhancing/rewriting.

wildfly.jpa.default-unit

set to true to choose the default persistence -unit in an application. This is useful if you inject a persistence -context without specifying the unitName (@PersistenceContext -EntityManager em) but have multiple persistence units specified in your -persistence.xml.

wildfly.jpa.twophasebootstrap

persistence providers (like Hibernate -ORM 4.3+ via EntityManagerFactoryBuilder), allow a two phase persistence -unit bootstrap, which improves JPA integration with Jakarta Contexts and Dependency Injection. Setting the -wildfly.jpa.twophasebootstrap hint to false, disables the two phase -bootstrap (for the persistence unit that contains the hint).

wildfly.jpa.applicationdatasource

set to true when using an application defined DataSource or resource reference to a global DataSource.

wildfly.jpa.allowdefaultdatasourceuse

set to false to prevent -persistence unit from using the default data source. Defaults to true. -This is only important for persistence units that do not specify a -datasource.

jboss.as.jpa.deferdetach

Controls whether a transaction scoped -persistence context used in a non-JTA transaction thread will detach -loaded entities after each EntityManager invocation or when the -persistence context is closed (e.g. business method ends). Defaults to -false (entities are cleared after EntityManager invocation) and if set -to true, the detach is deferred until the context is closed.

wildfly.jpa.skipquerydetach

Controls whether a transaction scoped -persistence context used in a non-JTA transaction thread will detach -Query results immediately. Defaults to -false (Query results are detached immediately) and if set -to true, the detach is deferred until the persistence context is closed.

wildfly.jpa.hibernate.search.module

Controls which version of -Hibernate Search to include on classpath. Only makes sense when using -Hibernate as JPA implementation. The default is auto; other valid values -are none or a full module identifier to use an alternative version.

jboss.as.jpa.scopedname

Specify the qualified (application scoped) -persistence unit name to be used. By default, this is internally set to -the application name + persistence unit name. The -hibernate.cache.region_prefix will default to whatever you set -jboss.as.jpa.scopedname to. Make sure you set the -jboss.as.jpa.scopedname value to a value not already in use by other -applications deployed on the same application server instance.

wildfly.jpa.allowjoinedunsync

If set to true, allows an -SynchronizationType.UNSYNCHRONIZED persistence context that has been -joined to the active JTA transaction, to be propagated into a -SynchronizationType.SYNCHRONIZED persistence context. Otherwise, an -IllegalStateException exception would of been thrown that complains that -an unsychronized persistence context cannot be propagated into a -synchronized persistence context. Defaults to false.

wildfly.jpa.skipmixedsynctypechecking

Set to true to disable the -throwing of an IllegalStateException exception when propagating an -SynchronizationType.UNSYNCHRONIZED persistence context into a -SynchronizationType.SYNCHRONIZED persistence context. This is a -workaround intended to allow applications that used to incorrectly not -get IllegalStateException exception with extended persistence contexts, -to avoid the IllegalStateException, so they don’t have to change their -application right away (for compatibility purposes). This hint may be -deprecated in a future release. See WFLY-7108 for more details. Defaults -to false.

wildfly.jpa.regionfactory

Only applies to Hibernate ORM 5.3+, set to false to disable automatic use of Infinispan as second level cache (hibernate.cache.region.factory_class).

wildfly.jpa.jtaplatform

Only applies to Hibernate ORM 5.3+, set to false to disable automatic configuring of the JTA integration platform (hibernate.transaction.jta.platform).

-
-
-

10.21. Determine the persistence provider module

-
-

As mentioned above, if the jboss.as.jpa.providerModule property is not -specified, the provider module name is determined by the provider name -specified in the persistence.xml. The mapping is:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Provider NameModule name

blank

org.hibernate

org.hibernate.jpa.HibernatePersistenceProvider

org.hibernate

org.hibernate.ogm.jpa.HibernateOgmPersistence

org.hibernate.ogm

oracle.toplink.essentials.PersistenceProvider

oracle.toplink

oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider

oracle.toplink

org.eclipse.persistence.jpa.PersistenceProvider

org.eclipse.persistence

org.datanucleus.api.jpa.PersistenceProviderImpl

org.datanucleus

org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider

org.datanucleus:appengine

org.apache.openjpa.persistence.PersistenceProviderImpl

org.apache.openjpa

-
-
-

10.22. Binding EntityManagerFactory/EntityManager to JNDI

-
-

By default WildFly does not bind the entity manager factory to JNDI. -However, you can explicitly configure this in the persistence.xml of -your application by setting the jboss.entity.manager.factory.jndi.name -hint. The value of that property should be the JNDI name to which the entity manager factory should be bound.

-
-
-

You can also bind a container managed (transaction scoped) entity manager to JNDI as well, }}via hint -jboss.entity.manager.jndi.name\{ -}{{. As a reminder, a transaction scoped entity manager (persistence context), acts as a proxy that always gets an unique underlying entity manager (at the persistence provider level).

-
-
-

Here’s an example:

-
-
-

persistence.xml

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<persistence version="2.0"
-   xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="
-        http://java.sun.com/xml/ns/persistence
-        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-   <persistence-unit name="myPU">
-      <!-- If you are running in a production environment, add a managed
-         data source, the example data source is just for proofs of concept! -->
-      <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
-      <properties>
-         <!-- Bind entity manager factory to JNDI at java:jboss/myEntityManagerFactory -->
-         <property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/myEntityManagerFactory" />
-         <property name="jboss.entity.manager.jndi.name" value="java:/myEntityManager"/>
-       </properties>
-   </persistence-unit>
-</persistence>
-
-
-
-
-
@Stateful
-public class ExampleSFSB {
-  public void createSomeEntityWithTransactionScopedEM(String name) {
-    Context context = new InitialContext();
-    jakarta.persistence.EntityManager entityManager = (jakarta.persistence.EntityManager) context.lookup("java:/myEntityManager");
-    SomeEntity someEntity = new SomeEntity();
-    someEntity.setName(name);    entityManager.persist(name);
-  }
-}
-
-
-
- - - - - -
- - -References in this document to Java Transaction API (JTA) refer to Jakarta Transactions unless otherwise noted. - References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. -
-
-
-
-
-
-

11. JTA Reference

-
-
-

WildFly uses Narayana as the implementation of the JTA specification. -Narayana manages transactions in the application server.

-
-
-

11.1. Transactions in Enterprise Java applications

-
-

Transactions are one of the core functionalities provided by the container -for the applications. A developer can manage transactions either with -the programmatic approach - with API defined by JTA specification. -Or he can use annotations. There are two types.

-
-
-
    -
  • -

    first - EJB annotations, their meaning and capabilities are defined under -EJB specification and are valid when used in the EJB component

    -
  • -
  • -

    second - CDI annotations, their meaning is defined under JTA specification

    -
  • -
-
-
-

11.1.1. Transactions managed with programmatic JTA API

-
-

The JTA API is defined under -jakarta.transaction -package. The package could be considered a bit misguiding as it presents classes -which are expected to be used by application developer. These classes -are intended as an API for the application server (as the WildFly is).

-
-
-

The user is expected to interact with -jakarta.transaction.UserTransaction -which defines the transaction boundaries. The UserTransaction could be used -in case the transaction is not defined by annotation at the method -- aka. the transaction is not managed by the container. Those are places like -servlets, CDI bean which is not annotated with @Transactional and -EJBs defined as bean managed.

-
-
-

UserTransaction is available via CDI injection

-
-
-
-
@Inject
-UserTransaction txn;
-
-
-
-

or with EJB @Resource injection where you can additionally define the JNDI -name to be looked-up. The specification says it’s java:comp/UserTransaction.

-
-
-
-
@Resource(lookup = "java:comp/UserTransaction")
-UserTransaction txn;
-
-
-
-

The code can then look like

-
-
-
-
@WebServlet(name="TestServlet", urlPatterns={"/"})
-public class TestServlet extends HttpServlet {
-    private static final Logger LOG = Logger.getLogger(TestServlet.class);
-
-    @Inject
-    private UserTransaction txn;
-
-    @PersistenceContext
-    private EntityManager em;
-
-    @Override
-    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        try {
-            txn.begin();
-
-            em.persist(new TestEntity(1, "Mr. Transaction"));
-
-            txn.commit();
-          } catch (NotSupportedException beginExceptions) {
-              LOG.errorf(beginExceptions, "Cannot start transaction: '%s'", txn);
-          } catch (SecurityException | IllegalStateException | RollbackException
-                  | HeuristicMixedException | HeuristicRollbackException commitExceptions) {
-              LOG.errorf(commitExceptions, "Cannot commit transaction: '%s'", txn);
-          } catch (SystemException systemException) {
-              LOG.errorf(systemException, "Unexpected error condition on work with transaction: '%s'", txn);
-          }
-    }
-}
-
-
-
-

jakarta.transaction.TransactionManager -is not meant to be used by business logic but if you need to register -a synchronization -or you need to change transaction timeout (before the begin() method is called) -then it will be the option for you.

-
-
-

The TransactionManager could be taken with injection -and looked-up with the JNDI name

-
-
-
-
@Inject
-TransactionManager tm;
-
-// or
-
-@Resource(lookup = "java:/TransactionManager")
-TransactionManager tm;
-
-
-
-
-

11.1.2. Transactions in CDI beans

-
-

If you start using CDI beans then you can manage transactions either programmatically -or you can use annotations. -The @Transactional -defines transaction boundaries -(start of the method starts the transaction, while the transaction is finished at its end). -If the method finishes sucessfully the transaction is committed. -If the transaction ends with RuntimeException then it’s rolled-back.

-
-
-

When you define the method to be @Transactional you define the behaviour -of incoming (or non-existent) transactional context. -Please refer the to documentation for -Transactional.TxType.

-
-
-

It’s important to note that the TxType influences the transaction management -only when called with the managed CDI bean. If you call the method directly - -without the CDI container wraps the invocation then the TxType has no effect.

-
-
-
-
@RequestScope
-public class MyCDIBean {
-  @Inject
-  MyCDIBean myBean;
-
-  @Transactional(TxType.REQUIRED)
-  public void mainMethod() {
-    // CDI container does not wrap the invocation
-    // no new transaction is started
-    innerFunctionality();
-
-    // CDI container starts a new transaction
-    // the method uses TxType.REQUIRES_NEW and is called from the CDI bean
-    myBean.innerFunctionality();
-  }
-
-  @Transactional(TxType.REQUIRES_NEW)
-  private void innerFunctionality() {
-    // some business logic
-  }
-}
-
-
-
- - - - - -
- - -the exception handling could be influenced by attributes - rollbackOn and dontRollbackOn (of the @Transactional annotation) -
-
-
- - - - - -
- - -if you use the @Transactional for managing transactions boundaries - you won’t be permitted to use the UserTransaction methods. - If you do so you can expect a runtime exception being thrown. -
-
-
-

CDI introduces as well a scope for use with transactions - -@TransactionScoped.

-
-
-
-

11.1.3. Transactions in EJBs

-
-

Transaction management in EJB is administered with two annotations: -@TransactionManagement -@TransactionAttribute.

-
-
- - - - - -
- - -you can define the same behaviour when you use the ejb-jar.xml - descriptor instead of the annotations -
-
-
-

The WildFly provides specific annotation org.jboss.ejb3.annotation.TransactionTimeout -which gives you the chance to change the transaction timeout for a particular bean/method.

-
-
- - - - - -
- - -when you use message-driven bean then the @TransactionTimeout does not work - and you need to define the timeout through the @ActivationConfigProperty: - @ActivationConfigProperty(propertyName="transactionTimeout", propertyValue="1") -
-
-
-

The default behaviour of an EJB is to be

-
-
-
    -
  • -

    container managed - transaction boundaries are driven by annotations

    -
  • -
  • -

    when the EJB method is invoked - a new transaction is started when no transaction context is available, -or the method joins the existing transactions when the transaction context is passed by the call

    -
  • -
-
-
-

It’s the same transactional behaviour as if the EJB is annotated with

-
-
-
-
@TransactionManagement(TransactionManagementType.CONTAINER)
-@TransactionAttribute(TransactionAttributeType.REQUIRED)
-
-
-
-
Container managed transactions
-
-

Using the @TransactionManagement(TransactionManagementType.CONTAINER) means -the container is responsible to manage transactions. The boundary of the transaction -is defined by the start and end of the method and you influence the behaviour by using -@TransactionAttribute.

-
-
-

If java.lang.RuntimeException is thrown the transaction is rolled back. -EJBContext -could be used to define the transaction should be rolled-back -by the end of the method when setRollbackOnly is used.

-
-
-
-
@Stateless
-public class MyBean {
-  @PersistenceContext
-  private EntityManager em;
-
-  @Resource
-  EJBContext ctx;
-
-  public void method() {
-    em.persist(new TestEntity());
-    // at the end of the method the rollback is called
-    ctx.setRollbackOnly();
-  }
-}
-
-
-
- - - - - -
- - -the EJBContext let you get the UserTransaction but you are not allowed - to do any operation with that when you run container managed transaction. - You can expect to receive a runtime exception in such case. -
-
-
-
-
Bean managed transactions
-
-

Using the @TransactionManagement(TransactionManagementType.BEAN) means -the transaction will be managed manually with the use of the JTA API. -That’s with the UserTransaction injections and methods on it. -You can inject the EJBContext to get the UserTransaction instance too.

-
-
- - - - - -
- - -if a call is made from the container-managed method, - passing the transaction context to the bean managed method - then the context is suspended. It’s similar(!) to - call transaction managed bean annotated with - @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) -
-
-
-
-
Transaction synchronization
-
-

JTA API gives a chance to react to the event of a finishing transaction. -The definition says that transaction manager announces the even of beforeCompletion and afterCompletion -which are defined by the interface jakarta.transaction.Synchronization. -The beforeCompletion -callback is invoked at time the transaction manager starts to commit the global transaction. The invocation is processed in the transaction context. -The afterCompletion -is invoked after the transaction is committed or rolled-back (and is processed outside of the transaction context).

-
-
-

The user needs just to create a simple Java POJO and implement the interface.

-
-
-
-
public class MySynchronization
-        implements jakarta.transaction.Synchronization {
-  @Override
-  public void beforeCompletion() {
-    System.out.println("Transaction is about to be finished"):
-  }
-
-  @Override
-  public void afterCompletion(int status) {
-    System.out.println("Transaction finished with status " + status):
-  }
-}
-
-
-
-

For registration of the synchronization callback, the user can inject the -jakarta.transaction.TransactionSynchronizationRegistry. -(the mandated JNDI location for the object is at java:comp/TransactionSynchronizationRegistry) and then to register -the synchronization instance. The instance is bound to the currently active transaction.

-
-
-
-
@Resource
-TransactionSynchronizationRegistry transactionSynchronizationRegistry;
-
-public void method() {
-  transactionSynchronizationRegistry
-    .registerInterposedSynchronization(new MySynchronization());
-}
-
-
-
-

The transaction synchronization registry adds other useful methods which are putResource(Object key, Object value) -and getResource(Object key). Their purpose is saving data objects alongside the transaction context. -When the transaction is active you can store and retrieve the saved data. When the transaction is finished -and there is no transaction context available (e.g. at afterCompletion) the java.lang.IllegalStateException -is thrown.

-
-
-

The other option for the user is to use the transaction object -to register the synchronization.

-
-
-
-
@Resource(lookup = "java:/TransactionManager")
-TransactionManager tm;
-
-public void method() {
-tm.getTransaction().registerSynchronization(new MySynchronization());
-
-
-
-

When the user runs the Stateful Session Bean he can implement -interface jakarta.ejb.SessionSynchronization -(or to use annotations) for the definition of the synchronization callbacks onto the bean. -The session synchronization defines three methods. -Of these three methods afterBegin is not connected to the transaction synchronization so we will not discuss it further. -The following example works with annotations but the bean may just implement the SessionSynchronization -interface and it would work the same way.

-
-
-
-
// only(!) SFSB can use the capability of SessionSynchronization
-@Stateful
-public class MyStatefulBean {
-  public void method() {
-    System.out.println("Running an important business logic...");
-    Thread.sleep(42000);
-  }
-
-  @BeforeCompletion
-  public void beforeCompletion() {
-    System.out.println("Transaction is about to be finished"):
-  }
-
-  @AfterCompletion
-  public void afterCompletion(boolean committed) {
-    System.out.println("Transaction finished with the outcome "
-      + (committed ? "committed" : "rolled-back")):
-  }
-}
-
-
-
- - - - - -
- - -for more information about CDI and registration of transaction synchronization - look at the article about Narayana integration of CDI events. -
-
-
-
-
-
-

11.2. Transactions subsystem class loading

-
-

The WildFly classloading is based -on the jboss modules -which define the modular class loading system. -The transactions for CDI comes as the extension and because of it -this extension has to be available at the application classpath. -If the application/deployment uses annotations @Transactional -or @TransactionScoped then class loading handling is done automatically.

-
-
-

There is one limitation with the CDI with this approach. -If your application adds the transactional annotations dynamically -(you adds the annotations dynamically during runtime) then the -transaction module has to be -explicitly added -to the application classpath.

-
-
-

This can be done with creating META-INF/MANIFEST.MF or -with use of jboss-deployment-structure.xml descriptor. The MANIFEST.MF -could look like

-
-
-
-
Manifest-Version: 1.0
-Dependencies: org.jboss.jts export services
-
-
-
-
-

11.3. Transactions troubleshooting

-
-

The Narayana component is configured to log only messages with level WARN -(see category com.arjuna in the standalone-*.xml). -If you struggle issues of the transactional handling -you can get a better insight into transaction processing by setting the level to TRACE.

-
-
-
-
/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=TRACE)
-
-
-
-

The TRACE could overwhelm you with information from the transactions subsystem. -Let’s quickly review what are the most important points to look at in the log.

-
-
- - - - - -
- - -It’s beneficial to understand how - the two-phase commit works. -
-
-
-

An example of the log messages produces by Narayana is (the content is shortened for sake of brevity)

-
-
-
-
[section 1]
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.jta] (default task-1) BaseTransaction.begin
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) StateManager::StateManager( 2, 0 )
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::BasicAction()
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::Begin() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::actionInitialise() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) ActionHierarchy::ActionHierarchy(1)
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) ActionHierarchy::add(0:ffff0a28050c:-a09a5fe:5c598d64:3b, 1)
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::addChildThread () action 0:ffff0a28050c:-a09a5fe:5c598d64:3b adding Thread[default task-1,5,main]
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::addChildThread () action 0:ffff0a28050c:-a09a5fe:5c598d64:3b adding Thread[default task-1,5,main] result = true
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) TransactionReaper::insert ( BasicAction: 0:ffff0a28050c:-a09a5fe:5c598d64:3b status: ActionStatus.RUNNING, 300 )
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) ReaperElement::ReaperElement ( BasicAction: 0:ffff0a28050c:-a09a5fe:5c598d64:3b status: ActionStatus.RUNNING, 300 )
-2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.registerSynchronization - Class: class org.wildfly.transaction.client.AbstractTransaction$AssociatingSynchronization HashCode: 1114413551 toString: org.wildfly.transaction.client.AbstractTransaction$AssociatingSynchronization@426c99ef
-
-
-[section 2]
-TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.enlistResource ( TestXAResource(TestXAResourceCommon(id:944, xid:null, timeout:299, prepareReturn:0)) )
-TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.getStatus: jakarta.transaction.Status.STATUS_ACTIVE
-TRACE [com.arjuna.ats.arjuna] (default task-1) OutputObjectState::OutputObjectState()
-TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.write_committed(0:ffff0a28050c:-a09a5fe:5c598d64:43, EISNAME)
-TRACE [com.arjuna.ats.arjuna] (default task-1) ShadowingStore.write_state(0:ffff0a28050c:-a09a5fe:5c598d64:43, EISNAME, StateType.OS_ORIGINAL)
-TRACE [com.arjuna.ats.arjuna] (default task-1) ShadowingStore.genPathName(0:ffff0a28050c:-a09a5fe:5c598d64:43, EISNAME, StateType.OS_ORIGINAL)
-TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.genPathName(0:ffff0a28050c:-a09a5fe:5c598d64:43, EISNAME, 11)
-TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.openAndLock(data/tx-object-store/ShadowNoFileLockStore/defaultStore/EISNAME/0_ffff0a28050c_-a09a5fe_5c598d64_43, FileLock.F_WRLCK, true)
-TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.closeAndUnlock(data/tx-object-store/ShadowNoFileLockStore/defaultStore/EISNAME/0_ffff0a28050c_-a09a5fe_5c598d64_43, null, java.io.FileOutputStream@72d0d91)
-TRACE [com.arjuna.ats.arjuna] (default task-1) StateManager::StateManager( 1, 0 )
-TRACE [com.arjuna.ats.arjuna] (default task-1) AbstractRecord::AbstractRecord (0:ffff0a28050c:-a09a5fe:5c598d64:45, 1)
-TRACE [com.arjuna.ats.jta] (default task-1) XAResourceRecord.XAResourceRecord ( < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, TestXAResource(TestXAResourceCommon(id:944, xid:null, timeout:300, prepareReturn:0)) ), record id=0:ffff0a28050c:-a09a5fe:5c598d64:45
-TRACE [com.arjuna.ats.arjuna] (default task-1) RecordList::insert(RecordList: empty) : appending /StateManager/AbstractRecord/XAResourceRecord for 0:ffff0a28050c:-a09a5fe:5c598d64:45
-
-[section 3]
-TRACE [com.arjuna.ats.jta] (default task-1) BaseTransaction.commit
-TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.commitAndDisassociate
-TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.getStatus: jakarta.transaction.Status.STATUS_ACTIVE
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::End() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
-
-[section 4]
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::prepare () for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
-TRACE [com.arjuna.ats.jta] (default task-1) XAResourceRecord.topLevelPrepare for XAResourceRecord < resource:TestXAResource(TestXAResourceCommon(id:944, xid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, timeout:300, prepareReturn:0)), txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, heuristic: TwoPhaseOutcome.FINISH_OK, product: Crash Recovery Test/EAP Test, jndiName: java:/TestXAResource com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6454bcb3 >, record id=0:ffff0a28050c:-a09a5fe:5c598d64:45
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::doPrepare() result for action-id (0:ffff0a28050c:-a09a5fe:5c598d64:3b) on record id: (0:ffff0a28050c:-a09a5fe:5c598d64:45) is (TwoPhaseOutcome.PREPARE_OK) node id: (1)
-TRACE [com.arjuna.ats.arjuna] (default task-1) RecordList::insert(RecordList: empty) : appending /StateManager/AbstractRecord/XAResourceRecord for 0:ffff0a28050c:-a09a5fe:5c598d64:45
-TRACE [com.arjuna.ats.arjuna] (default task-1) OutputObjectState::OutputObjectState(0:ffff0a28050c:-a09a5fe:5c598d64:3b, /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction)
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::save_state ()
-TRACE [com.arjuna.ats.arjuna] (default task-1) StateManager.packHeader for object-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b birth-date 1549372780127
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::save_state - next record to pack is a 171 record /StateManager/AbstractRecord/XAResourceRecord should save it? = true
-
-[section 5]
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::phase2Commit() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::doCommit (XAResourceRecord < resource:TestXAResource(TestXAResourceCommon(id:944, xid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, timeout:300, prepareReturn:0)), txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, heuristic: TwoPhaseOutcome.FINISH_OK, product: Crash Recovery Test/EAP Test, jndiName: java:/TestXAResource com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6454bcb3 >)
-TRACE [com.arjuna.ats.jta] (default task-1) XAResourceRecord.topLevelCommit for XAResourceRecord < resource:TestXAResource(TestXAResourceCommon(id:944, xid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, timeout:300, prepareReturn:0)), txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, heuristic: TwoPhaseOutcome.FINISH_OK, product: Crash Recovery Test/EAP Test, jndiName: java:/TestXAResource com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6454bcb3 >, record id=0:ffff0a28050c:-a09a5fe:5c598d64:45
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::doCommit() result for action-id (0:ffff0a28050c:-a09a5fe:5c598d64:3b) on record id: (0:ffff0a28050c:-a09a5fe:5c598d64:45) is (TwoPhaseOutcome.FINISH_OK) node id: (1)
-
-[section 6]
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::updateState() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
-TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.remove_committed(0:ffff0a28050c:-a09a5fe:5c598d64:3b, /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction)
-TRACE [com.arjuna.ats.arjuna] (default task-1) ShadowingStore.remove_state(0:ffff0a28050c:-a09a5fe:5c598d64:3b, /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction, StateType.OS_ORIGINAL)
-TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.closeAndUnlock(data/tx-object-store/ShadowNoFileLockStore/defaultStore/StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction/0_ffff0a28050c_-a09a5fe_5c598d64_3b, null, null)
-TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::End() result for action-id (0:ffff0a28050c:-a09a5fe:5c598d64:3b) is (TwoPhaseOutcome.FINISH_OK) node id: (1)
-TRACE [com.arjuna.ats.jta] (default task-1) SynchronizationImple.afterCompletion - Class: class org.wildfly.transaction.client.AbstractTransaction$AssociatingSynchronization HashCode: 1685304571 toString: org.wildfly.transaction.client.AbstractTransaction$AssociatingSynchronization@6473b4fb
-TRACE [com.arjuna.ats.jta] (default task-1) SynchronizationImple.afterCompletion - Class: class org.wildfly.transaction.client.provider.jboss.JBossLocalTransactionProvider$1 HashCode: 1429380276 toString: org.wildfly.transaction.client.provider.jboss.JBossLocalTransactionProvider$1@55329cb4
-TRACE [com.arjuna.ats.arjuna] (default task-1) TransactionReaper::remove ( BasicAction: 0:ffff0a28050c:-a09a5fe:5c598d64:3b status: ActionStatus.COMMITTED )
-
-
-
-
    -
  • -

    It’s good to consider to follow with the thread id (in the log above it’s default-task-1). -The transaction could be suspended and started at the different thread -but it’s not usual.

    -
  • -
  • -

    The log shows the Narayana processes the two-phase commit. Bear in mind that the example above -shows only one resource to be part of the two-phase commit handling. -That’s intentional for the log not being too long.

    -
  • -
  • -

    the section-1 refers to the point where the transaction is started. The -JTA synchronizations - are registered and the transaction is added to be handled by transaction reaper - (the transaction reaper is an independent thread taking care of transaction timeouts, - see more at section Transaction timeouts - in the Narayana documentation).

    -
  • -
  • -

    At this place consider the BasicAction (a Narayana abstraction for the transaction) -is identified by string 0:ffff0a28050c:-a09a5fe:5c598d64:3b. -It refers to the transaction id. You can track it through the log and follow -what is happening with the particular transaction.

    -
  • -
  • -

    the section-2 refers to the part of business logic processing. That’s the time -when a database insertion is run or Jakarta Messaging sends a message to a queue. -That’s where you spot message containing enlistResource. After the resource -is enlisted to the transaction the transaction manager saves a record -persistently under transaction log store.

    -
  • -
  • -

    the section-3 refers to the time when the transaction is about to be committed. -That means all business logic was finished (that could be the time a method -annotated with @Transactional reached its end).

    -
  • -
  • -

    the section-4 refers to the first phase of 2PC which is prepare. You can see -XAResourceRecord.topLevelPrepare informing what’s the global transaction id -(already defined at the start of the transaction) and the branch id -(particular to each resource). The resource is then prepared.

    -
  • -
  • -

    when whole prepare phase finishes Narayana saves the state into object store

    -
  • -
  • -

    the section-5 refers to the second phase of 2PC which is commit. You can see -XAResourceRecord.topLevelCommit with similar information as for prepare.

    -
  • -
  • -

    the section-6 shows the transaction is finished, information about the transaction -is removed from the Narayana object store and unregistered from the transaction reaper.

    -
  • -
-
-
-

For more grained troubleshooting you can consider using -Byteman tool.

-
-
-
-

11.4. Transactions configuration

-
-

Configuration related to the behaviour of the Narayana transaction manager -is covered under transactions subsystem. For the details refer to -Admin Guide Transactions subsystem.

-
-
-

To check the subsystem model you can use the WildFly model reference -or list all the configuration options of the subsystem in jboss-cli

-
-
-
-
/subsystem=transactions:read-resource-description(recursive=true)
-
-
-
- - - - - -
- - -References in this document to CDI refer to Jakarta Contexts and Dependency Injection unless otherwise noted. - References in this document to Java Transaction API (JTA) refer to Jakarta Transactions unless otherwise noted. - References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-

12. JNDI Reference

-
-
-
-WildFly offers several mechanisms to retrieve components by name. Every -WildFly instance has it’s own local JNDI namespace ( java:) which is -unique per JVM. The layout of this namespace is primarily governed by -the Jakarta EE specification. Applications which share the same WildFly -instance can use this namespace to intercommunicate. In addition to -local JNDI, a variety of mechanisms exist to access remote components. -
-
-
-
    -
  • -

    Client JNDI - This is a mechanism by which remote components can be -accessed using the JNDI APIs, but without network round-trips . This -approach is the most efficient, and removes a potential single point -of failure . For this reason, it is highly recommended to use Client -JNDI over traditional remote JNDI access. However, to make this -possible, it does require that all names follow a strict layout, so user -customizations are not possible. Currently only access to remote Jakarta Enterprise Beans -are supported via the ejb: namespace. Future revisions will likely add a -Jakarta Messaging client JNDI namespace.

    -
  • -
  • -

    Traditional Remote JNDI - This is a more familiar approach to EE -application developers, where the client performs a remote component -name lookup against a server, and a proxy/stub to the component is -serialized as part of the name lookup and returned to the client. The -client then invokes a method on the proxy which results in another -remote network call to the underlying service. In a nutshell, -traditional remote JNDI involves two calls to invoke an EE component, -whereas Client JNDI requires one. It does however allow for customized -names, and for a centralised directory for multiple application servers. -This centralized directory is, however, a single point of failure.

    -
  • -
  • -

    EE Application Client / Server-To-Server Delegation - This approach is -where local names are bound as an alias to a remote name using one of -the above mechanisms. This is useful in that it allows applications to -only ever reference standard portable Jakarta EE names in both code and -deployment descriptors. It also allows for the application to be unaware -of network topology details/ This can even work with Java SE clients by -using the little known EE Application Client feature. This feature -allows you to run an extremely minimal AS server around your -application, so that you can take advantage of certain core services -such as naming and injection.

    -
  • -
-
-
-
-
-

13. Local JNDI

-
-
-

The Jakarta EE platform specification defines the following JNDI contexts:

-
-
-
    -
  • -

    java:comp - The namespace is scoped to the current component (i.e. -Jakarta Enterprise Beans)

    -
  • -
  • -

    java:module - Scoped to the current module

    -
  • -
  • -

    java:app - Scoped to the current application

    -
  • -
  • -

    java:global - Scoped to the application server

    -
  • -
-
-
-

In addition to the standard namespaces, WildFly also provides the -following two global namespaces:

-
-
-
    -
  • -

    java:jboss

    -
  • -
  • -

    java:/

    -
  • -
-
-
- - - - - -
- - -Only entries within the java:jboss/exported context are accessible -over remote JNDI. -
-
-
- - - - - -
- - -For web deployments java:comp is aliased to java:module, so Jakarta Enterprise Beans’s -deployed in a war do not have their own comp namespace. -
-
-
-

13.1. Binding entries to JNDI

-
-

There are several methods that can be used to bind entries into JNDI in -WildFly.

-
-
-

13.1.1. Using a deployment descriptor

-
-

For Jakarta EE applications the recommended way is to use a -deployment descriptor to create the binding. For -example the following web.xml binds the string "Hello World" to -java:global/mystring and the string "Hello Module" to -java:comp/env/hello (any non absolute JNDI name is relative to -java:comp/env context).

-
-
-
-
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
-         version="3.1">
-    <env-entry>
-        <env-entry-name>java:global/mystring</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>Hello World</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <env-entry-name>hello</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>Hello Module</env-entry-value>
-    </env-entry>
-</web-app>
-
-
-
-

For more details, see the Java EE -Platform Specification.

-
-
-
-

13.1.2. Programmatically

-
-
Jakarta EE Applications
-
-

Standard Jakarta EE applications may use the standard JNDI API, included -with Java SE, to bind entries in the global namespaces (the standard -java:comp, java:module and java:app namespaces are read-only, as -mandated by the Jakarta EE Platform Specification).

-
-
-
-
  InitialContext initialContext = new InitialContext();
-  initialContext.bind("java:global/a", 100);
-
-
-
- - - - - -
- - -There is no need to unbind entries created programmatically, since -WildFly tracks which bindings belong to a deployment, and the bindings -are automatically removed when the deployment is undeployed. -
-
-
-
-
WildFly Modules and Extensions
-
-

With respect to code in WildFly Modules/Extensions, which is executed -out of a Jakarta EE application context, using the standard JNDI API may -result in a UnsupportedOperationException if the target namespace uses a -WritableServiceBasedNamingStore. To work around that, the bind() -invocation needs to be wrapped using WildFly proprietary APIs:

-
-
-
-
  InitialContext initialContext = new InitialContext();
-  WritableServiceBasedNamingStore.pushOwner(serviceTarget);
-  try {
-    initialContext.bind("java:global/a", 100);
-  } finally {
-    WritableServiceBasedNamingStore.popOwner();
-  }
-
-
-
- - - - - -
- - -The ServiceTarget removes the bind when uninstalled, thus using one out -of the module/extension domain usage should be avoided, unless entries -are removed using unbind(). -
-
-
-
-
-

13.1.3. Naming Subsystem Configuration

-
-

It is also possible to bind to one of the three global namespaces using -configuration in the naming subsystem. This can be done by either -editing the standalone.xml/domain.xml file directly, or through the -management API.

-
-
-

Four different types of bindings are supported:

-
-
-
    -
  • -

    Simple - A primitive or java.net.URL entry (default is -java.lang.String).

    -
  • -
  • -

    Object Factory - This allows to specify the -javax.naming.spi.ObjectFactory that is used to create the looked up -value.

    -
  • -
  • -

    External Context - An external context to federate, such as an LDAP -Directory Service

    -
  • -
  • -

    Lookup - The allows to create JNDI aliases, when this entry is looked -up it will lookup the target and return the result.

    -
  • -
-
-
-

An example standalone.xml might look like:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:naming:2.0" >
-  <bindings>
-    <simple name="java:global/a" value="100" type="int" />
-    <simple name="java:global/jbossDocs" value="https://docs.jboss.org" type="java.net.URL" /><object-factory name="java:global/b" module="com.acme" class="org.acme.MyObjectFactory" />
-    <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
-      <environment>
-        <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
-        <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
-        <property name="java.naming.security.authentication" value="simple" />
-        <property name="java.naming.security.principal" value="uid=admin,ou=system" />
-        <property name="java.naming.security.credentials" value="secret" />
-      </environment>
-    </external-context>
-    <lookup name="java:global/c" lookup="java:global/b" />
- </bindings>
-</subsystem>
-
-
-
-

The CLI may also be used to bind an entry. As an example:

-
-
-
-
/subsystem=naming/binding=java\:global\/mybinding:add(binding-type=simple, type=long, value=1000)
-
-
-
- - - - - -
- - -WildFly’s Administrator Guide includes a section describing in detail -the Naming subsystem configuration. -
-
-
-
-
-

13.2. Retrieving entries from JNDI

-
-

13.2.1. Resource Injection

-
-

For Jakarta EE applications the recommended way to lookup a JNDI entry is -to use @Resource injection:

-
-
-
-
  @Resource(lookup = "java:global/mystring")
-  private String myString;
- 
-  @Resource(name = "hello")
-  private String hello;
- 
-  @Resource
-  ManagedExecutorService executor;
-
-
-
-

Note that @Resource is more than a JNDI lookup, it also binds an entry -in the component’s JNDI environment. The new bind JNDI name is defined -by @Resource’s `name attribute, which value, if unspecified, is the -Java type concatenated with / and the field’s name, for instance -java.lang.String/myString. More, similar to when using deployment -descriptors to bind JNDI entries. unless the name is an absolute JNDI -name, it is considered relative to java:comp/env. For instance, with -respect to the field named myString above, the @Resource’s `lookup -attribute instructs WildFly to lookup the value in -java:global/mystring, bind it in -java:comp/env/java.lang.String/myString, and then inject such value -into the field.

-
-
-

With respect to the field named hello, there is no lookup attribute -value defined, so the responsibility to provide the entry’s value is -delegated to the deployment descriptor. Considering that the deployment -descriptor was the web.xml previously shown, which defines an -environment entry with same hello name, then WildFly inject the valued -defined in the deployment descriptor into the field.

-
-
-

The executor field has no attributes specified, so the bind’s name -would default to -java:comp/env/jakarta.enterprise.concurrent.ManagedExecutorService/executor, -but there is no such entry in the deployment descriptor, and when that -happens it’s up to WildFly to provide a default value or null, depending -on the field’s Java type. In this particular case WildFly would inject -the default instance of a managed executor service, the value in -java:comp/DefaultManagedExecutorService, as mandated by the EE -Concurrency Utilities 1.0 Specification (JSR 236).

-
-
-
-

13.2.2. Standard Java SE JNDI API

-
-

Jakarta EE applications may use, without any additional configuration -needed, the standard JNDI API to lookup an entry from JNDI:

-
-
-
-
  String myString = (String) new InitialContext().lookup("java:global/mystring");
-
-
-
-

or simply

-
-
-
-
  String myString = InitialContext.doLookup("java:global/mystring");
-
-
-
-
-
-
-
-

14. Remote JNDI Access

-
-
-

WildFly supports two different types of remote JNDI.

-
-
-

14.1. http-remoting:

-
-

The http-remoting: protocol implementation is provided by JBoss Remote -Naming project, and uses http upgrade to lookup items from the servers -local JNDI. To use it, you must have the appropriate jars on the class -path, if you are maven user can be done simply by adding the following -to your pom.xml dependencies:

-
-
-
-
<dependency>
-  <groupId>org.wildfly</groupId>
-  <artifactId>wildfly-ejb-client-bom</artifactId>
-  <version>11.0.0.Final</version>
-  <type>pom</type>
-</dependency>
-
-
-
-

If you are not using maven a shaded jar that contains all required -classes
-can be found in the bin/client directory of WildFly’s distribution.

-
-
-
-
final Properties env = new Properties();
-env.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
-env.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
-// the property below is required ONLY if there is no ejb client configuration loaded (such as a
-// jboss-ejb-client.properties in the class path) and the context will be used to lookup EJBs
-env.put("jboss.naming.client.ejb.context", true);
-InitialContext remoteContext = new InitialContext(env);
-RemoteCalculator ejb = (RemoteCalculator) remoteContext.lookup("wildfly-http-remoting-ejb/CalculatorBean!"
-                + RemoteCalculator.class.getName());
-
-
-
- - - - - -
- - -The http-remoting client assumes JNDI names in remote lookups are -relative to java:jboss/exported namespace, a lookup of an absolute JNDI -name will fail. -
-
-
-
-

14.2. ejb:

-
-

The ejb: namespace implementation is provided by the jboss-ejb-client -library, and allows the lookup of EJB’s using their application name, -module name, ejb name and interface type. To use it, you must have the -appropriate jars on the class path, if you are maven user can be done -simply by adding the following to your pom.xml dependencies:

-
-
-
-
<dependency>
-  <groupId>org.wildfly</groupId>
-  <artifactId>wildfly-ejb-client-bom</artifactId>
-  <version>11.0.0.Final</version>
-  <type>pom</type>
-</dependency>
-
-
-
-

If you are not using maven a shaded jar that contains all required -classes
-can be found in the bin/client directory of WildFly’s distribution.

-
-
-

This is a client side JNDI implementation. Instead of looking up an EJB -on the server the lookup name contains enough information for the client -side library to generate a proxy with the EJB information. When you -invoke a method on this proxy it will use the current EJB client context -to perform the invocation. If the current context does not have a -connection to a server with the specified EJB deployed then an error -will occur. Using this protocol it is possible to look up EJB’s that do -not actually exist, and no error will be thrown until the proxy is -actually used. The exception to this is stateful session beans, which -need to connect to a server when they are created in order to create the -session bean instance on the server.

-
-
-
-
final Properties env = new Properties();
-env.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
-InitialContext remoteContext = new InitialContext(env);
-MyRemoteInterface myRemote = (MyRemoteInterface) remoteContext.lookup("ejb:myapp/myejbjar/MyEjbName\!com.test.MyRemoteInterface");
-MyStatefulRemoteInterface myStatefulRemote = (MyStatefulRemoteInterface) remoteContext.lookup("ejb:myapp/myejbjar/MyStatefulName\!comp.test.MyStatefulRemoteInterface?stateful");
-
-
-
-

The first example is a lookup of a singleton, stateless or EJB 2.x home -interface. This lookup will not hit the server, instead a proxy will be -generated for the remote interface specified in the name. The second -example is for a stateful session bean, in this case the JNDI lookup -will hit the server, in order to tell the server to create the SFSB -session.

-
-
- - - - - -
- - -For more details on how the server connections are configured, including -the required jboss ejb client setup, please see -EJB invocations from a remote client using JNDI. -
-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-

15. Jakarta RESTful Web Services Reference Guide

-
-
-

RESTEasy is the Jakarta RESTful Web Services implementation used in WildFly Full. For detailed documentation see the -RESTEasy 6.2.4.Final documentation.

-
-
-

15.1. Jakarta RESTful Web Services Activation

-
-

This section outlines the three options you have for deploying Jakarta RESTful Web Services -applications in WildFly 29. These three methods are specified in the -Jakarta RESTful Web Services 3.1 specification in section 2.3.2.

-
-
-

15.1.1. Subclassing jakarta.ws.rs.core.Application and using @ApplicationPath

-
-

This is the easiest way and does not require any xml configuration. -Simply include a subclass of jakarta.ws.rs.core.Application in your -application, and annotate it with the path that you want your JAX-RS -classes to be available. For example:

-
-
-
-
@ApplicationPath("/mypath")
-public class MyApplication extends Application {
-}
-
-
-
-

This will make your Jakarta RESTful Web Services resources available under / -mywebappcontext /mypath.

-
-
- - - - - -
- - -Note that that the path is /mypath not /mypath/* -
-
-
-
-

15.1.2. Subclassing jakarta.ws.rs.core.Application and using web.xml

-
-

If you do not wish to use @ApplicationPath but still need to subclass -Application you can set up the Jakarta RESTful Web Services mapping in web.xml:

-
-
-
-
public class MyApplication extends Application {
-}
-
-
-
-
-
<servlet-mapping>
-   <servlet-name>com.acme.MyApplication</servlet-name>
-   <url-pattern>/hello/*</url-pattern>
-</servlet-mapping>
-
-
-
-

This will make your Jakarta RESTful Web Services resources available under / -mywebappcontext /hello.

-
-
- - - - - -
- - -You can also use this approach to override an application path set with -the @ApplicationPath annotation. -
-
-
-
-

15.1.3. Using web.xml

-
-

If you don’t wan’t to subclass Application you can set the Jakarta RESTful Web Services -mapping in web.xml as follows:

-
-
-
-
<servlet-mapping>
-   <servlet-name>jakarta.ws.rs.core.Application</servlet-name>
-   <url-pattern>/hello/*</url-pattern>
-</servlet-mapping>
-
-
-
-

This will make your Jakarta RESTful Web Services resources available under / -mywebappcontext /hello.

-
-
- - - - - -
- - -Note that you only have to add the mapping, not the corresponding -servlet. The server is responsible for adding the corresponding servlet -automatically. -
-
-
-
-
-

15.2. Using Jackson for serialization

-
-

By default, for JSON processing the Jakarta JSON Processing API is used. However, you can use Jackson instead. This can -be achieved by setting the resteasy.preferJacksonOverJsonB property as a system property or as a -context property in the deployment’s web.xml. There is also a subsystem attribute, resteasy-prefer-jackson-over-jsonb, -which can be set to true. Finally, if no value is set for the context and system properties, the subsystem scans Jakarta -RESTful Web Services deployments for Jackson annotations and sets the property to true if any of those annotations are -found.

-
-
-

15.2.1. Custom ObjectMapper

-
-

In some cases you may want to or need to create a custom ObjectMapper. This can be achieved by creating a -jakarta.ws.rs.ext.ContextResolver which creates the ObjectMapper. The following example creates an ObjectMapper -which allows JSR-310 date/times.

-
-
-
-
import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.ext.ContextResolver;
-import jakarta.ws.rs.ext.Provider;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.json.JsonMapper;
-
-@Provider
-@Produces(MediaType.APPLICATION_JSON)
-public class JacksonDatatypeJacksonProducer implements ContextResolver<ObjectMapper> {
-
-    private final ObjectMapper json;
-
-    public JacksonDatatypeJacksonProducer() {
-        this.json = JsonMapper.builder()
-                .findAndAddModules()
-                .build();
-    }
-
-    @Override
-    public ObjectMapper getContext(Class<?> objectType) {
-        return json;
-    }
-}
-
-
-
-

As of WildFly 27 and RESTEasy 6.2 to get the Jakarta XML Binding annotations to work with Jackson for JSON serialization -you need to use a custom ObjectMapper. An example of this ObjectMapper would look like:

-
-
-
-
import jakarta.ws.rs.ext.ContextResolver;
-import jakarta.ws.rs.ext.Provider;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.json.JsonMapper;
-import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;
-
-@Provider
-public class JaxbJsonObjectMapperProvider implements ContextResolver<ObjectMapper> {
-    private static final JsonMapper MAPPER = JsonMapper.builder()
-            .addModule(new JakartaXmlBindAnnotationModule())
-            .build();
-
-    @Override
-    public ObjectMapper getContext(final Class<?> type) {
-        return MAPPER;
-    }
-}
-
-
-
-
-
-

15.3. Using the Tracing Feature

-
-

The tracing feature provides more internal states of the Jakarta RESTful Web Services container. For example, it could -be able to show what filters a request is going through, or how long time a request is processed and other kinds of information.

-
-
-

The tracing feature can be enabled by setting the tracing-type attribute to ALL or ON_DEMAND. You can also control -the threshold with the tracing-threshold attribute. The following is an example of enabling tracing using CLI:

-
-
-
-
/subsystem=jaxrs:write-attribute(name=tracing-type, value=ALL)
-:reload
-
-
-
-

You can also configure the tracing feature with the context parameters resteasy.server.tracing.type and -resteasy.server.tracing.threshold in your deployments web.xml file.

-
-
- - - - - -
- - -The tracing feature should not be used in production environments. Data can be exposed to clients via HTTP headers. -
-
-
-
-

15.4. RESTEasy Spring Framework Integration

-
-

WildFly generally includes support for Jakarta Context and Dependency Injection (CDI). The Spring Framework, however, -does not support CDI. You may need to exclude some subsystems and modules for Spring applications to work with Jakarta -RESTful Web Services.

-
-
-

The following is an example jboss-deployment-structure.xml that may be needed.

-
-
-
-
<?xml version="1.0"?>
-<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"
-                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-    <deployment>
-        <exclusions>
-            <module name="org.jboss.resteasy.resteasy-cdi"/>
-        </exclusions>
-    </deployment>
-</jboss-deployment-structure>
-
-
-
-

The org.jboss.resteasy.resteasy-cdi module adds CDI support for the RESTEasy implementation. Excluding this -should allow Spring deployments to work.

-
-
- - - - - -
- - -References in this document to Java API for RESTful Web Services (JAX-RS) refer to Jakarta RESTful Web Services unless otherwise noted. -
-
-
-
-
-
-

16. Sharing sessions between wars in an ear

-
-
-

Undertow allows you to share sessions between wars in an ear, if it is -explicitly configured to do so. Note that if you use this feature your -applications may not be portable, as this is not a standard servlet -feature.

-
-
-

In order to enable this you must include a shared-session-config -element in the jboss-all.xml file in the META-INF directory of the -ear:

-
-
-
-
<jboss xmlns="urn:jboss:1.0">
-    <shared-session-config xmlns="urn:jboss:shared-session-config:2.0">
-        <session-config>
-            <cookie-config>
-                <path>/</path>
-            </cookie-config>
-        </session-config>
-    </shared-session-config>
-</jboss>
-
-
-
-

This element is used to configure the shared session manager that will -be used by all wars in the ear. For full details of all the options -provided by this file please see the schema at -https://github.com/wildfly/wildfly/blob/main/undertow/src/main/resources/schema/shared-session-config_2_0.xsd, -however in general it mimics the options that are available in -jboss-web.xml for configuring the session.

-
-
-
-
-

17. Webservices reference guide

-
-
-

The Web Services functionalities of WildFly are provided by the JBossWS -project integration.

-
-
-

The latest project documentation is available -here.

-
-
-

This section covers the most relevant topics for the JBossWS version -available on WildFly 29.

-
-
-

17.1. Jakarta XML Web Services User Guide

-
-

The Java API for XML-Based Web -Services (JAX-WS / JSR-224) defines the mapping between WSDL and Java -as well as the classes to be used for accessing webservices and -publishing them. JBossWS implements the latest JAX-WS specification, -hence users can reference it for any vendor agnostic webservice usage -need. Below is a brief overview of the most basic functionalities.

-
-
-

17.1.1. Web Service Endpoints

-
-

Jakarta XML Web Services simplifies the development model for a web service endpoint a -great deal. In short, an endpoint implementation bean is annotated with -Jakarta XML Web Services annotations and deployed to the server. The server automatically -generates and publishes the abstract contract (i.e. wsdl+schema) for -client consumption. All marshalling/unmarshalling is delegated to -JAXB.

-
-
-
Plain old Java Object (POJO)
-
-

Let’s take a look at simple POJO endpoint implementation. All endpoint -associated metadata is provided via -JSR-181 annotations

-
-
-
-
@WebService
-@SOAPBinding(style = SOAPBinding.Style.RPC)
-public class JSEBean01
-{
-   @WebMethod
-   public String echo(String input)
-   {
-      ...
-   }
-}
-
-
-
-
The endpoint as a web application
-
-

A Jakarta XML Web Services java service endpoint (JSE) is deployed as a web application. -Here is a sample web.xml descriptor:

-
-
-
-
<web-app ...>
-  <servlet>
-    <servlet-name>TestService</servlet-name>
-    <servlet-class>org.jboss.test.ws.jaxws.samples.jsr181pojo.JSEBean01</servlet-class>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>TestService</servlet-name>
-    <url-pattern>/*</url-pattern>
-  </servlet-mapping>
-</web-app>
-
-
-
-
-
Packaging the endpoint
-
-

A JSR-181 java service endpoint (JSE) is packaged as a web application -in a war file.

-
-
-
-
<war warfile="${build.dir}/libs/jbossws-samples-jsr181pojo.war" webxml="${build.resources.dir}/samples/jsr181pojo/WEB-INF/web.xml">
-  <classes dir="${build.dir}/classes">
-    <include name="org/jboss/test/ws/samples/jsr181pojo/JSEBean01.class"/>
-  </classes>
-</war>
-
-
-
-

Note, only the endpoint implementation bean and web.xml are required.

-
-
-
-
Accessing the generated WSDL
-
-

A successfully deployed service endpoint will show up in the WildFly -managent console. You can get the deployed endpoint wsdl address there -too.

-
-
- - - - - -
- - -Note, it is also possible to generate the abstract contract off line -using JBossWS tools. For details of that please see Bottom-Up (Java to -WSDL). -
-
-
-
-
-
Jakarta Enterprise Beans 3 Stateless Session Bean (SLSB)
-
-

The Jakarta XML Web Services programming model supports the same set of annotations on -Jakarta Enterprise Beans 3 stateless session beans as on POJO endpoints.

-
-
-
-
@Stateless
-@Remote(EJB3RemoteInterface.class)
-@RemoteBinding(jndiBinding = "/ejb3/EJB3EndpointInterface")
-
-@WebService
-@SOAPBinding(style = SOAPBinding.Style.RPC)
-public class EJB3Bean01 implements EJB3RemoteInterface
-{
-   @WebMethod
-   public String echo(String input)
-   {
-      ...
-   }
-}
-
-
-
-

Above you see an Enterprise Beans-3.0 stateless session bean that exposes one method -both on the remote interface and as an endpoint operation.

-
-
-
Packaging the endpoint
-
-

A JSR-181 Jakarta Enterprise Beans service endpoint is packaged as an ordinary ejb -deployment.

-
-
-
-
<jar jarfile="${build.dir}/libs/jbossws-samples-jsr181ejb.jar">
-  <fileset dir="${build.dir}/classes">
-    <include name="org/jboss/test/ws/samples/jsr181ejb/EJB3Bean01.class"/>
-    <include name="org/jboss/test/ws/samples/jsr181ejb/EJB3RemoteInterface.class"/>
-  </fileset>
-</jar>
-
-
-
-
-
Accessing the generated WSDL
-
-

A successfully deployed service endpoint will show up in the WildFly -managent console. You can get the deployed endpoint wsdl address there -too.

-
-
- - - - - -
- - -Note, it is also possible to generate the abstract contract off line -using JBossWS tools. For details of that please see Bottom-Up (Java to -WSDL). -
-
-
-
-
-
Endpoint Provider
-
-

Jakarta XML Web Services services typically implement a native Java service endpoint -interface (SEI), perhaps mapped from a WSDL port type, either directly -or via the use of annotations.

-
-
-

Java SEIs provide a high level Java-centric abstraction that hides the -details of converting between Java objects and their XML representations -for use in XML-based messages. However, in some cases it is desirable -for services to be able to operate at the XML message level. The -Provider interface offers an alternative to SEIs and may be implemented -by services wishing to work at the XML message level.

-
-
-

A Provider based service instances invoke method is called for each -message received for the service.

-
-
-
-
@WebServiceProvider(wsdlLocation = "WEB-INF/wsdl/Provider.wsdl")
-@ServiceMode(value = Service.Mode.PAYLOAD)
-public class ProviderBeanPayload implements Provider<Source>
-{
-   public Source invoke(Source req)
-   {
-      // Access the entire request PAYLOAD and return the response PAYLOAD
-   }
-}
-
-
-
-

Note, Service.Mode.PAYLOAD is the default and does not have to be -declared explicitly. You can also use Service.Mode.MESSAGE to access -the entire SOAP message (i.e. with MESSAGE the Provider can also see -SOAP Headers)

-
-
-

The abstract contract for a provider endpoint cannot be -derived/generated automatically. Therefore it is necessary to specify -the wsdlLocation with the @ WebServiceProvider annotation.

-
-
-
-
-

17.1.2. Web Service Clients

-
-
Service
-
-

Service is an abstraction that represents a WSDL service. A WSDL -service is a collection of related ports, each of which consists of a -port type bound to a particular protocol and available at a particular -endpoint address.

-
-
-

For most clients, you will start with a set of stubs generated from the -WSDL. One of these will be the service, and you will create objects of -that class in order to work with the service (see "static case" below).

-
-
-
Service Usage
-
-Static case -
-

Most clients will start with a WSDL file, and generate some stubs using -JBossWS tools like wsconsume. This usually gives a mass of files, one -of which is the top of the tree. This is the service implementation -class.

-
-
-

The generated implementation class can be recognised as it will have two -public constructors, one with no arguments and one with two arguments, -representing the wsdl location (a java.net.URL) and the service name -(a javax.xml.namespace.QName) respectively.

-
-
-

Usually you will use the no-argument constructor. In this case the WSDL -location and service name are those found in the WSDL. These are set -implicitly from the @WebServiceClient annotation that decorates the -generated class.

-
-
-

The following code snippet shows the generated constructors from the -generated class:

-
-
-
-
// Generated Service Class
-
-@WebServiceClient(name="StockQuoteService", targetNamespace="http://example.com/stocks", wsdlLocation="http://example.com/stocks.wsdl")
-public class StockQuoteService extends jakarta.xml.ws.Service
-{
-   public StockQuoteService()
-   {
-      super(new URL("http://example.com/stocks.wsdl"), new QName("http://example.com/stocks", "StockQuoteService"));
-   }
-
-   public StockQuoteService(String wsdlLocation, QName serviceName)
-   {
-      super(wsdlLocation, serviceName);
-   }
-
-   ...
-}
-
-
-
-

Section Dynamic Proxy explains how to obtain a port from the service and -how to invoke an operation on the port. If you need to work with the XML -payload directly or with the XML representation of the entire SOAP -message, have a look at Dispatch.

-
-
-
-Dynamic case -
-

In the dynamic case, when nothing is generated, a web service client -uses Service.create to create Service instances, the following code -illustrates this process.

-
-
-
-
URL wsdlLocation = new URL("http://example.org/my.wsdl");
-QName serviceName = new QName("http://example.org/sample", "MyService");
-Service service = Service.create(wsdlLocation, serviceName);
-
-
-
-
-
-
Handler Resolver
-
-

Jakarta XML Web Services provides a flexible plug-in framework for message processing -modules, known as handlers, that may be used to extend the capabilities -of a Jakarta XML Web Services runtime system. Handler Framework describes the handler -framework in detail. A Service instance provides access to a -HandlerResolver via a pair of getHandlerResolver / -setHandlerResolver methods that may be used to configure a set of -handlers on a per-service, per-port or per-protocol binding basis.

-
-
-

When a Service instance is used to create a proxy or a Dispatch instance -then the handler resolver currently registered with the service is used -to create the required handler chain. Subsequent changes to the handler -resolver configured for a Service instance do not affect the handlers on -previously created proxies, or Dispatch instances.

-
-
-
-
Executor
-
-

Service instances can be configured with a -java.util.concurrent.Executor. The executor will then be used to -invoke any asynchronous callbacks requested by the application. The -setExecutor and getExecutor methods of Service can be used to -modify and retrieve the executor configured for a service.

-
-
-
-
-
Dynamic Proxy
-
-

You can create an instance of a client proxy using one of getPort -methods on the Service.

-
-
-
-
/**
- * The getPort method returns a proxy. A service client
- * uses this proxy to invoke operations on the target
- * service endpoint. The <code>serviceEndpointInterface</code>
- * specifies the service endpoint interface that is supported by
- * the created dynamic proxy instance.
- **/
-public <T> T getPort(QName portName, Class<T> serviceEndpointInterface)
-{
-   ...
-}
-
-/**
- * The getPort method returns a proxy. The parameter
- * <code>serviceEndpointInterface</code> specifies the service
- * endpoint interface that is supported by the returned proxy.
- * In the implementation of this method, the Jakarta XML Web Services
- * runtime system takes the responsibility of selecting a protocol
- * binding (and a port) and configuring the proxy accordingly.
- * The returned proxy should not be reconfigured by the client.
- *
- **/
-public <T> T getPort(Class<T> serviceEndpointInterface)
-{
-   ...
-}
-
-
-
-

The service endpoint interface (SEI) is usually generated using tools. -For details see Top Down (WSDL to Java)

-
-
-

A generated static Service usually also offers typed methods to get -ports. These methods also return dynamic proxies that implement the SEI.

-
-
-
-
@WebServiceClient(name = "TestEndpointService", targetNamespace = "http://org.jboss.ws/wsref",
-   wsdlLocation = "http://localhost.localdomain:8080/jaxws-samples-webserviceref?wsdl")
-
-public class TestEndpointService extends Service
-{
-    ...
-
-    public TestEndpointService(URL wsdlLocation, QName serviceName) {
-        super(wsdlLocation, serviceName);
-    }
-
-    @WebEndpoint(name = "TestEndpointPort")
-    public TestEndpoint getTestEndpointPort()
-    {
-        return (TestEndpoint)super.getPort(TESTENDPOINTPORT, TestEndpoint.class);
-    }
-}
-
-
-
-
-
WebServiceRef
-
-

The @WebServiceRef annotation is used to declare a reference to a Web -service. It follows the resource pattern exemplified by the -jakarta.annotation.Resource annotation in -JSR-250.

-
-
-

There are two uses to the WebServiceRef annotation:

-
-
-
    -
  1. -

    To define a reference whose type is a generated service class. In -this case, the type and value element will both refer to the generated -service class type. Moreover, if the reference type can be inferred by -the field/method declaration the annotation is applied to, the type and -value elements MAY have the default value (Object.class, that is). If -the type cannot be inferred, then at least the type element MUST be -present with a non-default value.

    -
  2. -
  3. -

    To define a reference whose type is a SEI. In this case, the type -element MAY be present with its default value if the type of the -reference can be inferred from the annotated field/method declaration, -but the value element MUST always be present and refer to a generated -service class type (a subtype of jakarta.xml.ws.Service). The wsdlLocation -element, if present, overrides theWSDL location information specified in -the WebService annotation of the referenced generated service class.

    -
    -
    -
    public class EJB3Client implements EJB3Remote
    -{
    -   @WebServiceRef
    -   public TestEndpointService service4;
    -
    -   @WebServiceRef
    -   public TestEndpoint port3;
    -
    -
    -
  4. -
-
-
-
-
Dispatch
-
-

XMLWeb Services use XML messages for communication between services and -service clients. The higher level Jakarta XML Web Services APIs are designed to hide the -details of converting between Java method invocations and the -corresponding XML messages, but in some cases operating at the XML -message level is desirable. The Dispatch interface provides support for -this mode of interaction.

-
-
-

Dispatch supports two usage modes, identified by the constants -jakarta.xml.ws.Service.Mode.MESSAGE and -jakarta.xml.ws.Service.Mode.PAYLOAD respectively:

-
-
-

Message In this mode, client applications work directly with -protocol-specific message structures. E.g., when used with a SOAP -protocol binding, a client application would work directly with a SOAP -message.

-
-
-

Message Payload In this mode, client applications work with the -payload of messages rather than the messages themselves. E.g., when used -with a SOAP protocol binding, a client application would work with the -contents of the SOAP Body rather than the SOAP message as a whole.

-
-
-

Dispatch is a low level API that requires clients to construct messages -or message payloads as XML and requires an intimate knowledge of the -desired message or payload structure. Dispatch is a generic class that -supports input and output of messages or message payloads of any type.

-
-
-
-
Service service = Service.create(wsdlURL, serviceName);
-Dispatch dispatch = service.createDispatch(portName, StreamSource.class, Mode.PAYLOAD);
-
-String payload = "<ns1:ping xmlns:ns1='http://oneway.samples.jaxws.ws.test.jboss.org/'/>";
-dispatch.invokeOneWay(new StreamSource(new StringReader(payload)));
-
-payload = "<ns1:feedback xmlns:ns1='http://oneway.samples.jaxws.ws.test.jboss.org/'/>";
-Source retObj = (Source)dispatch.invoke(new StreamSource(new StringReader(payload)));
-
-
-
-
-
Asynchronous Invocations
-
-

The BindingProvider interface represents a component that provides a -protocol binding for use by clients, it is implemented by proxies and is -extended by the Dispatch interface.

-
-
-

BindingProvider instances may provide asynchronous operation -capabilities. When used, asynchronous operation invocations are -decoupled from the BindingProvider instance at invocation time such -that the response context is not updated when the operation completes. -Instead a separate response context is made available using the -Response interface.

-
-
-
-
public void testInvokeAsync() throws Exception
-{
-   URL wsdlURL = new URL("http://" + getServerHost() + ":8080/jaxws-samples-asynchronous?wsdl");
-   QName serviceName = new QName(targetNS, "TestEndpointService");
-   Service service = Service.create(wsdlURL, serviceName);
-   TestEndpoint port = service.getPort(TestEndpoint.class);
-   Response response = port.echoAsync("Async");
-   // access future
-   String retStr = (String) response.get();
-   assertEquals("Async", retStr);
-}
-
-
-
-
-
Oneway Invocations
-
-

@Oneway indicates that the given web method has only an input message -and no output. Typically, a oneway method returns the thread of control -to the calling application prior to executing the actual business -method.

-
-
-
-
@WebService (name="PingEndpoint")
-@SOAPBinding(style = SOAPBinding.Style.RPC)
-public class PingEndpointImpl
-{
-   private static String feedback;
-
-   @WebMethod
-   @Oneway
-   publicvoid ping()
-   {
-      log.info("ping");
-      feedback = "ok";
-   }
-
-   @WebMethod
-   public String feedback()
-   {
-      log.info("feedback");
-      return feedback;
-   }
-}
-
-
-
-
-
Timeout Configuration
-
-

There are two properties to configure the http connection timeout and -client receive time out:

-
-
-
-
public void testConfigureTimeout() throws Exception
-{
-   //Set timeout until a connection is established
-   ((BindingProvider)port).getRequestContext().put("jakarta.xml.ws.client.connectionTimeout", "6000");
-
-   //Set timeout until the response is received
-   ((BindingProvider) port).getRequestContext().put("jakarta.xml.ws.client.receiveTimeout", "1000");
-
-   port.echo("testTimeout");
-}
-
-
-
-
-
-

17.1.3. Common API

-
-

This sections describes concepts that apply equally to Web Service -Endpoints and Web Service Clients.

-
-
-
Handler Framework
-
-

The handler framework is implemented by a Jakarta XML Web Services protocol binding in -both client and server side runtimes. Proxies, and Dispatch instances, -known collectively as binding providers, each use protocol bindings to -bind their abstract functionality to specific protocols.

-
-
-

Client and server-side handlers are organized into an ordered list known -as a handler chain. The handlers within a handler chain are invoked each -time a message is sent or received. Inbound messages are processed by -handlers prior to binding provider processing. Outbound messages are -processed by handlers after any binding provider processing.

-
-
-

Handlers are invoked with a message context that provides methods to -access and modify inbound and outbound messages and to manage a set of -properties. Message context properties may be used to facilitate -communication between individual handlers and between handlers and -client and service implementations. Different types of handlers are -invoked with different types of message context.

-
-
-
Logical Handler
-
-

Handlers that only operate on message context properties and message -payloads. Logical handlers are protocol agnostic and are unable to -affect protocol specific parts of a message. Logical handlers are -handlers that implement jakarta.xml.ws.handler.LogicalHandler.

-
-
-
-
Protocol Handler
-
-

Handlers that operate on message context properties and protocol -specific messages. Protocol handlers are specific to a particular -protocol and may access and change protocol specific aspects of a -message. Protocol handlers are handlers that implement any interface -derived from jakarta.xml.ws.handler.Handler except -jakarta.xml.ws.handler.LogicalHandler.

-
-
-
-
Service endpoint handlers
-
-

On the service endpoint, handlers are defined using the @HandlerChain -annotation.

-
-
-
-
@WebService
-@HandlerChain(file = "jaxws-server-source-handlers.xml")
-public class SOAPEndpointSourceImpl
-{
-   ...
-}
-
-
-
-

The location of the handler chain file supports 2 formats

-
-
-

\1. An absolute java.net.URL in externalForm. (ex: -http://myhandlers.foo.com/handlerfile1.xml)

-
-
-

\2. A relative path from the source file or class file. (ex: -bar/handlerfile1.xml)

-
-
-
-
Service client handlers
-
-

On the client side, handler can be configured using the @HandlerChain -annotation on the SEI or dynamically using the API.

-
-
-
-
Service service = Service.create(wsdlURL, serviceName);
-Endpoint port = (Endpoint)service.getPort(Endpoint.class);
-
-BindingProvider bindingProvider = (BindingProvider)port;
-List<Handler> handlerChain = new ArrayList<Handler>();
-handlerChain.add(new LogHandler());
-handlerChain.add(new AuthorizationHandler());
-handlerChain.add(new RoutingHandler());
-bindingProvider.getBinding().setHandlerChain(handlerChain); // important!
-
-
-
-
-
-
Message Context
-
-

MessageContext is the super interface for all Jakarta XML Web Services message contexts. -It extends Map<String,Object> with additional methods and constants to -manage a set of properties that enable handlers in a handler chain to -share processing related state. For example, a handler may use the put -method to insert a property in the message context that one or more -other handlers in the handler chain may subsequently obtain via the get -method.

-
-
-

Properties are scoped as either APPLICATION or HANDLER. All properties -are available to all handlers for an instance of an MEP on a particular -endpoint. E.g., if a logical handler puts a property in the message -context, that property will also be available to any protocol handlers -in the chain during the execution of an MEP instance. APPLICATION scoped -properties are also made available to client applications (see section -4.2.1) and service endpoint implementations. The defaultscope for a -property is HANDLER.

-
-
-
Logical Message Context
-
-

Logical Handlers are passed a message context of type -LogicalMessageContext when invoked. LogicalMessageContext extends -MessageContext with methods to obtain and modify the message payload, -it does not provide access to the protocol specific aspects of amessage. -A protocol binding defines what component of a message are available via -a logical message context. The SOAP binding defines that a logical -handler deployed in a SOAP binding can access the contents of the SOAP -body but not the SOAP headers whereas the XML/HTTP binding defines that -a logical handler can access the entire XML payload of a message.

-
-
-
-
SOAP Message Context
-
-

SOAP handlers are passed a SOAPMessageContext when invoked. -SOAPMessageContext extends MessageContext with methods to obtain and -modify the SOAP message payload.

-
-
-
-
-
Fault Handling
-
-

An implementation may thow a SOAPFaultException

-
-
-
-
public void throwSoapFaultException()
-{
-   SOAPFactory factory = SOAPFactory.newInstance();
-   SOAPFault fault = factory.createFault("this is a fault string!", new QName("http://foo", "FooCode"));
-   fault.setFaultActor("mr.actor");
-   fault.addDetail().addChildElement("test");
-   thrownew SOAPFaultException(fault);
-}
-
-
-
-

or an application specific user exception

-
-
-
-
public void throwApplicationException() throws UserException
-{
-   thrownew UserException("validation", 123, "Some validation error");
-}
-
-
-
- - - - - -
- - -In case of the latter, JBossWS generates the required fault wrapper -beans at runtime if they are not part of the deployment -
-
-
-
-
-

17.1.4. Jakarta XML Web Services Annotations

- -
-
jakarta.xml.ws.ServiceMode
-
-

The ServiceMode annotation is used to specify the mode for a provider -class, i.e. whether a provider wants to have access to protocol message -payloads (e.g. a SOAP body) or the entire protocol messages (e.g. a SOAP -envelope).

-
-
-
-
jakarta.xml.ws.WebFault
-
-

The WebFault annotation is used when mapping WSDL faults to Java -exceptions, see section 2.5. It is used to capture the name of the fault -element used when marshalling the Jakarta XML Binding type generated from the global -element referenced by the WSDL fault message. It can also be used to -customize the mapping of service specific exceptions to WSDL faults.

-
-
-
-
jakarta.xml.ws.RequestWrapper
-
-

The RequestWrapper annotation is applied to the methods of an SEI. It -is used to capture the Jakarta XML Binding generated request wrapper bean and the -element name and namespace for marshalling / unmarshalling the bean. The -default value of localName element is the operationName as defined in -WebMethod annotation and the default value for the targetNamespace -element is the target namespace of the SEI.When starting from Java, this -annotation is used to resolve overloading conflicts in document literal -mode. Only the className element is required in this case.

-
-
-
-
jakarta.xml.ws.ResponseWrapper
-
-

The ResponseWrapper annotation is applied to the methods of an SEI. It -is used to capture the Jakarta XML Binding generated response wrapper bean and the -element name and namespace for marshalling / unmarshalling the bean. The -default value of the localName element is the operationName as defined -in the WebMethod appended with "Response" and the default value of the -targetNamespace element is the target namespace of the SEI. When -starting from Java, this annotation is used to resolve overloading -conflicts in document literal mode. Only the className element is -required in this case.

-
-
-
-
jakarta.xml.ws.WebServiceClient
-
-

The WebServiceClient annotation is specified on a generated service -class (see 2.7). It is used to associate a class with a specific Web -service, identify by a URL to a WSDL document and the qualified name of -a wsdl:service element.

-
-
-
-
jakarta.xml.ws.WebEndpoint
-
-

The WebEndpoint annotation is specified on the getPortName() methods -of a generated service class (see 2.7). It is used to associate a get -method with a specific wsdl:port, identified by its local name (a -NCName).

-
-
-
-
jakarta.xml.ws.WebServiceProvider
-
-

The WebServiceProvider annotation is specified on classes that -implement a strongly typed jakarta.xml.ws.Provider. It is used to -declare that a class that satisfies the requirements for a provider (see -5.1) does indeed define a Web service endpoint, much like the -WebService annotation does for SEI-based endpoints.

-
-
-

The WebServiceProvider and WebService annotations are mutually -exclusive.

-
-
-
-
jakarta.xml.ws.BindingType
-
-

The BindingType annotation is applied to an endpoint implementation -class. It specifies the binding to use when publishing an endpoint of -this type.

-
-
-

The default binding for an endpoint is the SOAP 1.1/HTTP one.

-
-
-
-
jakarta.xml.ws.WebServiceRef
-
-

The WebServiceRef annotation is used to declare a reference to a Web -service. It follows the resource pattern exemplified by the -jakarta.annotation.Resource annotation in JSR-250 [JBWS:32]. The -WebServiceRef annotation is required to be honored when running on the -Jakarta EE platform, where it is subject to the common resource injection -rules described by the platform specification [JBWS:33].

-
-
-
-
jakarta.xml.ws.WebServiceRefs
-
-

The WebServiceRefs annotation is used to declare multiple references -to Web services on a single class. It is necessary to work around the -limition against specifying repeated annotations of the same type on any -given class, which prevents listing multiple jakarta.ws.WebServiceRef -annotations one after the other. This annotation follows the resource -pattern exemplified by the jakarta.annotation.Resources annotation in -JSR-250.

-
-
-

Since no name and type can be inferred in this case, each -WebServiceRef annotation inside a WebServiceRefs MUST contain name and -type elements with non-default values. The WebServiceRef annotation is -required to be honored when running on the Jakarta EE platform, where it -is subject to the common resource injection rules described by the -platform specification.

-
-
-
-
jakarta.xml.ws.Action
-
-

The Action annotation is applied to the methods of a SEI. It used to -generate the wsa:Action on wsdl:input and wsdl:output of each -wsdl:operation mapped from the annotated methods.

-
-
-
-
jakarta.xml.ws.FaultAction
-
-

The FaultAction annotation is used within the Action annotation to -generate the wsa:Action element on the wsdl:fault element of each -wsdl:operation mapped from the annotated methods.

-
-
-
-
-

17.1.5. JSR-181 Annotations

-
-

JSR-181 defines the syntax and semantics of Java Web Service (JWS) -metadata and default values.

-
- -
-
jakarta.jws.WebService
-
-

Marks a Java class as implementing a Web Service, or a Java interface as -defining a Web Service interface.

-
-
-
-
jakarta.jws.WebMethod
-
-

Customizes a method that is exposed as a Web Service operation.

-
-
-
-
jakarta.jws.OneWay
-
-

Indicates that the given web method has only an input message and no -output. Typically, a oneway method returns the thread of control to the -calling application prior to executing the actual business method. A -JSR-181 processor is REQUIRED to report an error if an operation marked -@Oneway has a return value, declares any checked exceptions or has any -INOUT or OUT parameters.

-
-
-
-
jakarta.jws.WebParam
-
-

Customizes the mapping of an individual parameter to a Web Service -message part and XML element.

-
-
-
-
jakarta.jws.WebResult
-
-

Customizes the mapping of the return value to a WSDL part and XML -element.

-
-
-
-
jakarta.jws.SOAPBinding
-
-

Specifies the mapping of the Web Service onto the SOAP message protocol.

-
-
-

The SOAPBinding annotation has a target of TYPE and METHOD. The -annotation may be placed on a method if and only if the -SOAPBinding.style is DOCUMENT. Implementations MUST report an error -if the SOAPBinding annotation is placed on a method with a -SOAPBinding.style of RPC. Methods that do not have a SOAPBinding -annotation accept the SOAPBinding behavior defined on the type.

-
-
-
-
jakarta.jws.HandlerChain
-
-

The @HandlerChain annotation associates the Web Service with an -externally defined handler chain.

-
-
-

It is an error to combine this annotation with the -@SOAPMessageHandlers annotation.

-
-
-

The @HandlerChain annotation MAY be present on the endpoint interface -and service implementation bean. The service implementation bean’s -@HandlerChain is used if @HandlerChain is present on both.

-
-
-

The @HandlerChain annotation MAY be specified on the type only. The -annotation target includes METHOD and FIELD for use by Jakarta XML Web Services Specification-2.x.

-
-
- - - - - -
- - -References in this document to Java API for XML-Based Web Services (JAX-WS) refer to the Jakarta XML Web Services unless otherwise noted -
-
-
-
-
-
-

17.2. Jakarta XML Web Services Tools

-
-

The Jakarta XML Web Services tools provided by JBossWS can be used in a variety of ways. -First we will look at server-side development strategies, and then -proceed to the client.

-
-
-

17.2.1. Server side

-
-

When developing a Web Service Endpoint (the server-side) you have the -option of starting from Java ( bottom-up development), or from the -abstact contract (WSDL) that defines your service ( top-down -development). If this is a new service (no existing contract), the -bottom-up approach is the fastest route; you only need to add a few -annotations to your classes to get a service up and running. However, if -you are developing a service with an already defined contract, it is far -simpler to use the top-down approach, since the provided tool will -generate the annotated code for you.

-
-
-

Bottom-up use cases:

-
-
-
    -
  • -

    Exposing an already existing Jakarta Enterprise Beans 3 bean as a Web Service

    -
  • -
  • -

    Providing a new service, and you want the contract to be generated for -you

    -
  • -
-
-
-

Top-down use cases:

-
-
-
    -
  • -

    Replacing the implementation of an existing Web Service, and you can’t -break compatibility with older clients

    -
  • -
  • -

    Exposing a service that conforms to a contract specified by a third -party (e.g. a vender that calls you back using an already defined -protocol).

    -
  • -
  • -

    Creating a service that adheres to the XML Schema and WSDL you -developed by hand up front

    -
  • -
-
-
-

The following Jakarta XML Web Services command line tools are included in JBossWS:

-
- ---- - - - - - - - - - - - - - - - - -
CommandDescription

wsprovide

Generates Jakarta XML Web Services portable artifacts, and provides the -abstract contract. Used for bottom-up development.

wsconsume

Consumes the abstract contract (WSDL and Schema files), and -produces artifacts for both a server and client. Used for top-down and -client development

-
-
Bottom-Up (Using wsprovide)
-
-

The bottom-up strategy involves developing the Java code for your -service, and then annotating it using Jakarta XML Web Services annotations. These -annotations can be used to customize the contract that is generated for -your service. For example, you can change the operation name to map to -anything you like. However, all of the annotations have sensible -defaults, so only the @WebService annotation is required.

-
-
-

This can be as simple as creating a single class:

-
-
-
-
package echo;
- 
-@jakarta.jws.WebService
-public class Echo
-{
-   public String echo(String input)
-   {
-      return input;
-   }
-}
-
-
-
-

A JSE or Jakarta Enterprise Beans 3 deployment can be built using this class, and it is the -only Java code needed to deploy on JBossWS. The WSDL, and all other Java -artifacts called "wrapper classes" will be generated for you at deploy -time. This actually goes beyond the Jakarta XML Web Services specification, which requires -that wrapper classes be generated using an offline tool. The reason for -this requirement is purely a vender implementation problem, and since we -do not believe in burdening a developer with a bunch of additional -steps, we generate these as well. However, if you want your deployment -to be portable to other application servers, you will unfortunately need -to use a tool and add the generated classes to your deployment.

-
-
-

This is the primary purpose of the wsprovide tool, to generate -portable Jakarta XML Web Services artifacts. Additionally, it can be used to "provide" the -abstract contract (WSDL file) for your service. This can be obtained by -invoking wsprovide using the "-w" option:

-
-
-
-
$ javac -d . -classpath jboss-jaxws.jar Echo.java
-$ wsprovide -w echo.Echo
-Generating WSDL:
-EchoService.wsdl
-Writing Classes:
-echo/jaxws/Echo.class
-echo/jaxws/EchoResponse.class
-
-
-
-

Inspecting the WSDL reveals a service called EchoService:

-
-
-
-
<service name='EchoService'>
- <port binding='tns:EchoBinding' name='EchoPort'>
-  <soap:address location='REPLACE_WITH_ACTUAL_URL'/>
- </port>
-</service>
-
-
-
-

As expected, this service defines one operation, " echo":

-
-
-
-
<portType name='Echo'>
- <operation name='echo' parameterOrder='echo'>
-  <input message='tns:Echo_echo'/>
-  <output message='tns:Echo_echoResponse'/>
- </operation>
-</portType>
-
-
-
- - - - - -
- - -Remember that when deploying on JBossWS you do not need to run this -tool. You only need it for generating portable artifacts and/or the -abstract contract for your service. -
-
-
-

Let’s create a POJO endpoint for deployment on WildFly. A simple -web.xml needs to be created:

-
-
-
-
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
-  version="2.4">
- 
-  <servlet>
-    <servlet-name>Echo</servlet-name>
-    <servlet-class>echo.Echo</servlet-class>
-  </servlet>
- 
-  <servlet-mapping>
-    <servlet-name>Echo</servlet-name>
-    <url-pattern>/Echo</url-pattern>
-  </servlet-mapping>
-</web-app>
-
-
-
-

The web.xml and the single class can now be used to create a war:

-
-
-
-
$ mkdir -p WEB-INF/classes
-$ cp -rp echo WEB-INF/classes/
-$ cp web.xml WEB-INF
-$ jar cvf echo.war WEB-INF
-added manifest
-adding: WEB-INF/(in = 0) (out= 0)(stored 0%)
-adding: WEB-INF/classes/(in = 0) (out= 0)(stored 0%)
-adding: WEB-INF/classes/echo/(in = 0) (out= 0)(stored 0%)
-adding: WEB-INF/classes/echo/Echo.class(in = 340) (out= 247)(deflated 27%)
-adding: WEB-INF/web.xml(in = 576) (out= 271)(deflated 52%)
-
-
-
-

The war can then be deployed to the JBoss Application Server.The war can -then be deployed to the JBoss Application Server; this will internally -invoke wsprovide, which will generate the WSDL. If deployment was -successful, and you are using the default settings, it should be -available in the server management console.

-
-
-

For a portable Jakarta XML Web Services deployment, the wrapper classes generated earlier -could be added to the deployment.

-
-
-
-
Top-Down (Using wsconsume)
-
-

The top-down development strategy begins with the abstract contract for -the service, which includes the WSDL file and zero or more schema files. -The wsconsume tool is then used to consume this contract, and produce -annotated Java classes (and optionally sources) that define it.

-
-
- - - - - -
- - -wsconsume may have problems with symlinks on Unix systems -
-
-
-

Using the WSDL file from the bottom-up example, a new Java -implementation that adheres to this service can be generated. The "-k" -option is passed to wsconsume to preserve the Java source files that -are generated, instead of providing just classes:

-
-
-
-
$ wsconsume -k EchoService.wsdl
-echo/Echo.java
-echo/EchoResponse.java
-echo/EchoService.java
-echo/Echo_Type.java
-echo/ObjectFactory.java
-echo/package-info.java
-echo/Echo.java
-echo/EchoResponse.java
-echo/EchoService.java
-echo/Echo_Type.java
-echo/ObjectFactory.java
-echo/package-info.java
-
-
-
-

The following table shows the purpose of each generated file:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FilePurpose

Echo.java

Service Endpoint Interface

Echo_Type.java

Wrapper bean for request message

EchoResponse.java

Wrapper bean for response message

ObjectFactory.java

Jakarta XML Binding XML Registry

package-info.java

Holder for Jakarta XML Binding package annotations

EchoService.java

Used only by Jakarta XML Web Services clients

-
-

Examining the Service Endpoint Interface reveals annotations that are -more explicit than in the class written by hand in the bottom-up -example, however, these evaluate to the same contract:

-
-
-
-
@WebService(name = "Echo", targetNamespace = "http://echo/")
-public interface Echo {
-    @WebMethod
-    @WebResult(targetNamespace = "")
-    @RequestWrapper(localName = "echo", targetNamespace = "http://echo/", className = "echo.Echo_Type")
-    @ResponseWrapper(localName = "echoResponse", targetNamespace = "http://echo/", className = "echo.EchoResponse")
-    public String echo(
-        @WebParam(name = "arg0", targetNamespace = "")
-        String arg0);
- 
-}
-
-
-
-

The only missing piece (besides for packaging) is the implementation -class, which can now be written, using the above interface.

-
-
-
-
package echo;
- 
-@jakarta.jws.WebService(endpointInterface="echo.Echo")
-public class EchoImpl implements Echo
-{
-   public String echo(String arg0)
-   {
-      return arg0;
-   }
-}
-
-
-
-
-
-

17.2.2. Client Side

-
-

Before going to detail on the client-side it is important to understand -the decoupling concept that is central to Web Services. Web Services are -not the best fit for internal RPC, even though they can be used in this -way. There are much better technologies for this (CORBA, and RMI for -example). Web Services were designed specifically for interoperable -coarse-grained correspondence. There is no expectation or guarantee that -any party participating in a Web Service interaction will be at any -particular location, running on any particular OS, or written in any -particular programming language. So because of this, it is important to -clearly separate client and server implementations. The only thing they -should have in common is the abstract contract definition. If, for -whatever reason, your software does not adhere to this principal, then -you should not be using Web Services. For the above reasons, the -recommended methodology for developing a client is to follow the -top-down approach , even if the client is running on the same server.

-
-
-

Let’s repeat the process of the top-down section, although using the -deployed WSDL, instead of the one generated offline by wsprovide. The -reason why we do this is just to get the right value for soap:address. -This value must be computed at deploy time, since it is based on -container configuration specifics. You could of course edit the WSDL -file yourself, although you need to ensure that the path is correct.

-
-
-

Offline version:

-
-
-
-
<service name='EchoService'>
-  <port binding='tns:EchoBinding' name='EchoPort'>
-   <soap:address location='REPLACE_WITH_ACTUAL_URL'/>
-  </port>
-</service>
-
-
-
-

Online version:

-
-
-
-
<service name="EchoService">
-  <port binding="tns:EchoBinding" name="EchoPort">
-    <soap:address location="http://localhost.localdomain:8080/echo/Echo"/>
-  </port>
-</service>
-
-
-
-

Using the online deployed version with wsconsume:

-
-
-
-
$ wsconsume -k http://localhost:8080/echo/Echo?wsdl
-echo/Echo.java
-echo/EchoResponse.java
-echo/EchoService.java
-echo/Echo_Type.java
-echo/ObjectFactory.java
-echo/package-info.java
-echo/Echo.java
-echo/EchoResponse.java
-echo/EchoService.java
-echo/Echo_Type.java
-echo/ObjectFactory.java
-echo/package-info.java
-
-
-
-

The one class that was not examined in the top-down section, was -EchoService.java. Notice how it stores the location the WSDL was -obtained from.

-
-
-
-
@WebServiceClient(name = "EchoService", targetNamespace = "http://echo/", wsdlLocation = "http://localhost:8080/echo/Echo?wsdl")
-public class EchoService extends Service
-{
-    private final static URL ECHOSERVICE_WSDL_LOCATION;
- 
-    static {
-        URL url = null;
-        try
-        {
-           url = new URL("http://localhost:8080/echo/Echo?wsdl");
-        }
-        catch (MalformedURLException e)
-        {
-           e.printStackTrace();
-        }
-        ECHOSERVICE_WSDL_LOCATION = url;
-    }
- 
-    public EchoService(URL wsdlLocation, QName serviceName)
-    {
-         super(wsdlLocation, serviceName);
-    }
- 
-    public EchoService()
-    {
-         super(ECHOSERVICE_WSDL_LOCATION, new QName("http://echo/", "EchoService"));
-    }
- 
-    @WebEndpoint(name = "EchoPort")
-    public Echo getEchoPort()
-    {
-         return (Echo)super.getPort(new QName("http://echo/", "EchoPort"), Echo.class);
-    }
-}
-
-
-
-

As you can see, this generated class extends the main client entry point -in Jakarta XML Web Services, jakarta.xml.ws.Service. While you can use Service directly, -this is far simpler since it provides the configuration info for you. -The only method we really care about is the getEchoPort() method, -which returns an instance of our Service Endpoint Interface. Any WS -operation can then be called by just invoking a method on the returned -interface.

-
-
- - - - - -
- - -It’s not recommended to refer to a remote WSDL URL in a production -application. This causes network I/O every time you instantiate the -Service Object. Instead, use the tool on a saved local copy, or use the -URL version of the constructor to provide a new WSDL location. -
-
-
-

All that is left to do, is write and compile the client:

-
-
-
-
import echo.*;
- 
-public class EchoClient
-{
-   public static void main(String args[])
-   {
-      if (args.length != 1)
-      {
-          System.err.println("usage: EchoClient <message>");
-          System.exit(1);
-      }
- 
-      EchoService service = new EchoService();
-      Echo echo = service.getEchoPort();
-      System.out.println("Server said: " + echo.echo(args0));
-   }
-}
-
-
-
-

It is easy to change the endpoint address of your operation at runtime, -setting the ENDPOINT_ADDRESS_PROPERTY as shown below:

-
-
-
-
EchoService service = new EchoService();
-      Echo echo = service.getEchoPort();
- 
-      /* Set NEW Endpoint Location */
-      String endpointURL = "http://NEW_ENDPOINT_URL";
-      BindingProvider bp = (BindingProvider)echo;
-      bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
- 
-      System.out.println("Server said: " + echo.echo(args0));
-
-
-
-
-
-

17.3. wsconsume

-
-

wsconsume is a command line tool and ant task that "consumes" the -abstract contract (WSDL file) and produces portable Jakarta XML Web Services and -client artifacts.

-
-
-

17.3.1. Command Line Tool

-
-

The command line tool has the following usage:

-
-
-
-
usage: wsconsume [options] <wsdl-url>
-options:
-  -h, --help                  Show this help message
-  -b, --binding=<file>        One or more Jakarta XML Web Services or Jakarta XML Binding binding files
-  -k, --keep                  Keep/Generate Java source
-  -c  --catalog=<file>        Oasis XML Catalog file for entity resolution
-  -j  --clientjar=<name>      Create a jar file of the generated artifacts for calling the webservice
-  -p  --package=<name>        The target package for generated source
-  -w  --wsdlLocation=<loc>    Value to use for @WebServiceClient.wsdlLocation
-  -o, --output=<directory>    The directory to put generated artifacts
-  -s, --source=<directory>    The directory to put Java source
-  -t, --target=<2.0|2.1|2.2>  The Jakarta XML Web Services specification target
-  -q, --quiet                 Be somewhat more quiet
-  -v, --verbose               Show full exception stack traces
-  -l, --load-consumer         Load the consumer and exit (debug utility)
-  -e, --extension             Enable SOAP 1.2 binding extension
-  -a, --additionalHeaders     Enables processing of implicit SOAP headers
-  -n, --nocompile             Do not compile generated sources
-
-
-
- - - - - -
- - -The wsdlLocation is used when creating the Service to be used by clients -and will be added to the @WebServiceClient annotation, for an endpoint -implementation based on the generated service endpoint interface you -will need to manually add the wsdlLocation to the @WebService annotation -on your web service implementation and not the service endpoint -interface. -
-
-
-
Examples
-
-

Generate artifacts in Java class form only:

-
-
-
-
wsconsume Example.wsdl
-
-
-
-

Generate source and class files:

-
-
-
-
wsconsume -k Example.wsdl
-
-
-
-

Generate source and class files in a custom directory:

-
-
-
-
wsconsume -k -o custom Example.wsdl
-
-
-
-

Generate source and class files in the org.foo package:

-
-
-
-
wsconsume -k -p org.foo Example.wsdl
-
-
-
-

Generate source and class files using multiple binding files:

-
-
-
-
wsconsume -k -b wsdl-binding.xml -b schema1-binding.xml -b schema2-binding.xml
-
-
-
-
-
-

17.3.2. Maven Plugin

-
-

The wsconsume tools is included in the -org.jboss.ws.plugins:jaxws-tools-maven-plugin plugin. The plugin has -two goals for running the tool, wsconsume and wsconsume-test, which -basically do the same during different maven build phases (the former -triggers the sources generation during generate-sources phase, the -latter during the generate-test-sources one).

-
-
-

The wsconsume plugin has the following parameters:

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault

bindingFiles

Jakarta XML Web Services or Jakarta XML Binding binding file

true

classpathElements

Each classpathElement provides alibrary file to be -added to classpath

$\{project.compileClasspathElements}or$\{project.testClasspathElements}

catalog

Oasis XML Catalog file for entity resolution

none

targetPackage

The target Java package for generated code.

generated

bindingFiles

One or more Jakarta XML Web Services or Jakarta XML Binding binding file

none

wsdlLocation

Value to use for @WebServiceClient.wsdlLocation

generated

outputDirectory

The output directory for generated artifacts.

$\{project.build.outputDirectory}or$\{project.build.testOutputDirectory}

sourceDirectory

The output directory for Java source.

$\{project.build.directory}/wsconsume/java

verbose

Enables more informational output about command progress.

false

wsdls

The WSDL files or URLs to consume

n/a

extension

Enable SOAP 1.2 binding extension.

false

encoding

The charset encoding to use for generated sources.

$\{project.build.sourceEncoding}

argLine

An optional additional argline to be used when running in fork -mode;can be used to set endorse dir, enable debugging, -etc.Example<argLine>-Djava.endorsed.dirs=…​</argLine>

none

fork

Whether or not to run the generation task in a separate VM.

false

target

A preference for the Jakarta XML Web Services specification target

Depends on -the underlying stack and endorsed dirs if any

-
-
Examples
-
-

You can use wsconsume in your own project build simply referencing the -jaxws-tools-maven-plugin in the configured plugins in your pom.xml -file.

-
-
-

The following example makes the plugin consume the test.wsdl file and -generate SEI and wrappers' java sources. The generated sources are then -compiled together with the other project classes.

-
-
-
-
<build>
-  <plugins>
-    <plugin>
-      <groupId>org.jboss.ws.plugins</groupId>
-      <artifactId>jaxws-tools-maven-plugin</artifactId>
-      <version>1.2.0.Beta1</version>
-      <configuration>
-        <wsdls>
-          <wsdl>${basedir}/test.wsdl</wsdl>
-        </wsdls>
-      </configuration>
-      <executions>
-        <execution>
-          <goals>
-            <goal>wsconsume</goal>
-          </goals>
-        </execution>
-      </executions>
-    </plugin>
-  </plugins>
-</build>
-
-
-
-

You can also specify multiple wsdl files, as well as force the target -package, enable SOAP 1.2 binding and turn the tool’s verbose mode on:

-
-
-
-
<build>
-  <plugins>
-    <plugin>
-      <groupId>org.jboss.ws.plugins</groupId>
-      <artifactId>jaxws-tools-maven-plugin</artifactId>
-      <version>1.2.0.Beta1</version>
-      <configuration>
-       <wsdls>
-        <wsdl>${basedir}/test.wsdl</wsdl>
-        <wsdl>${basedir}/test2.wsdl</wsdl>
-       </wsdls>
-       <targetPackage>foo.bar</targetPackage>
-       <extension>true</extension>
-       <verbose>true</verbose>
-      </configuration>
-      <executions>
-        <execution>
-          <goals>
-            <goal>wsconsume</goal>
-          </goals>
-        </execution>
-      </executions>
-    </plugin>
-  </plugins>
-</build>
-
-
-
-

Finally, if the wsconsume invocation is required for consuming a wsdl to -be used in your testsuite only, you might want to use the -wsconsume-test goal as follows:

-
-
-
-
<build>
-  <plugins>
-    <plugin>
-      <groupId>org.jboss.ws.plugins</groupId>
-      <artifactId>jaxws-tools-maven-plugin</artifactId>
-      <version>1.2.0.Beta1</version>
-      <configuration>
-        <wsdls>
-          <wsdl>${basedir}/test.wsdl</wsdl>
-        </wsdls>
-      </configuration>
-      <executions>
-        <execution>
-          <goals>
-            <goal>wsconsume-test</goal>
-          </goals>
-        </execution>
-      </executions>
-    </plugin>
-  </plugins>
-</build>
-
-
-
-

Plugin stack dependencyThe plugin itself does not have an explicit -dependency to a JBossWS stack, as it’s meant for being used with -implementations of any supported version of the JBossWS SPI. So the -user is expected to set a dependency in his own pom.xml to the desired -JBossWS stack version. The plugin will rely on the that for using the -proper tooling.

-
-
-
-
<dependencies>
-  <dependency>
-    <groupId>org.jboss.ws.cxf</groupId>
-    <artifactId>jbossws-cxf-client</artifactId>
-    <version>4.0.0.GA</version>
-  </dependency>
-</dependencies>
-
-
-
- - - - - -
- - -Be careful when using this plugin with the Maven War Plugin as that -include any project dependency into the generated application war -archive. You might want to set <scope>provided</scope> for the -JBossWS stack dependency to avoid that. -
-
-
- - - - - -
- - -Up to version 1.1.2.Final, the artifactId of the plugin was -maven-jaxws-tools-plugin. -
-
-
-
-
-

17.3.3. Ant Task

-
-

The wsconsume Ant task ( org.jboss.ws.tools.ant.WSConsumeTask) has -the following attributes:

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault

fork

Whether or not to run the generation task in a separate VM.

true

keep

Keep/Enable Java source code generation.

false

catalog

Oasis XML Catalog file for entity resolution

none

package

The target Java package for generated code.

generated

binding

A Jakarta XML Web Services or Jakarta XML Binding binding file

none

wsdlLocation

Value to use for @WebServiceClient.wsdlLocation

generated

encoding

The charset encoding to use for generated sources

n/a

destdir

The output directory for generated artifacts.

"output"

sourcedestdir

The output directory for Java source.

value of destdir

target

The Jakarta XML Web Services specification target. Allowed values are 2.0, 2.1 -and 2.2

 

verbose

Enables more informational output about command progress.

false

wsdl

The WSDL file or URL

n/a

extension

Enable SOAP 1.2 binding extension.

false

additionalHeaders

Enables processing of implicit SOAP headers

false

-
- - - - - -
- - -Users also need to put streamBuffer.jar and stax-ex.jar to the classpath -of the ant task to generate the appropriate artefacts. -
-
-
- - - - - -
- - -The wsdlLocation is used when creating the Service to be used by clients -and will be added to the @WebServiceClient annotation, for an endpoint -implementation based on the generated service endpoint interface you -will need to manually add the wsdlLocation to the @WebService annotation -on your web service implementation and not the service endpoint -interface. -
-
-
-

Also, the following nested elements are supported:

-
- ----- - - - - - - - - - - - - - - - - - - - -
ElementDescriptionDefault

binding

A Jakarta XML Web Services or Jakarta XML Binding binding file

none

jvmarg

Allows setting of custom jvm arguments

 

-
-
Examples
-
-

Generate Jakarta XML Web Services source and classes in a separate JVM with separate -directories, a custom wsdl location attribute, and a list of binding -files from foo.wsdl:

-
-
-
-
<wsconsume
-  fork="true"
-  verbose="true"
-  destdir="output"
-  sourcedestdir="gen-src"
-  keep="true"
-  wsdllocation="handEdited.wsdl"
-  wsdl="foo.wsdl">
-  <binding dir="binding-files" includes="*.xml" excludes="bad.xml"/>
-</wsconsume>
-
-
-
-
-
-
-

17.4. wsprovide

-
-

wsprovide is a command line tool, Maven plugin and Ant task that -generates portable Jakarta XML Web Services artifacts for a service endpoint -implementation. It also has the option to "provide" the abstract -contract for offline usage.

-
-
-

17.4.1. Command Line Tool

-
-

The command line tool has the following usage:

-
-
-
-
usage: wsprovide [options] <endpoint class name>
-options:
-  -h, --help                  Show this help message
-  -k, --keep                  Keep/Generate Java source
-  -w, --wsdl                  Enable WSDL file generation
-  -a, --address The generated port soap:address in wsdl
-  -c. --classpath=<path>      The classpath that contains the endpoint
-  -o, --output=<directory>    The directory to put generated artifacts
-  -r, --resource=<directory>  The directory to put resource artifacts
-  -s, --source=<directory>    The directory to put Java source
-  -e, --extension             Enable SOAP 1.2 binding extension
-  -q, --quiet                 Be somewhat more quiet
-  -t, --show-traces           Show full exception stack traces
-
-
-
-
Examples
-
-

Generating wrapper classes for portable artifacts in the "generated" -directory:

-
-
-
-
wsprovide -o generated foo.Endpoint
-
-
-
-

Generating wrapper classes and WSDL in the "generated" directory

-
-
-
-
wsprovide -o generated -w foo.Endpoint
-
-
-
-

Using an endpoint that references other jars

-
-
-
-
wsprovide -o generated -c application1.jar:application2.jar foo.Endpoint
-
-
-
-
-
-

17.4.2. Maven Plugin

-
-

The wsprovide tools is included in the -org.jboss.ws.plugins:jaxws-tools- maven- plugin plugin. The plugin -has two goals for running the tool, wsprovide and wsprovide-test, -which basically do the same during different Maven build phases (the -former triggers the sources generation during process-classes phase, -the latter during the process-test-classes one).

-
-
-

The wsprovide plugin has the following parameters:

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault

testClasspathElements

Each classpathElement provides alibrary file to -be added to classpath

$\{project.compileClasspathElements}or$\{project.testClasspathElements}

outputDirectory

The output directory for generated artifacts.

$\{project.build.outputDirectory}or$\{project.build.testOutputDirectory}

resourceDirectory

The output directory for resource artifacts -(WSDL/XSD).

$\{project.build.directory}/wsprovide/resources

sourceDirectory

The output directory for Java source.

$\{project.build.directory}/wsprovide/java

extension

Enable SOAP 1.2 binding extension.

false

generateWsdl

Whether or not to generate WSDL.

false

verbose

Enables more informational output about command progress.

false

portSoapAddress

The generated port soap:address in the WSDL

 

endpointClass

Service Endpoint Implementation.

 

-
-
Examples
-
-

You can use wsprovide in your own project build simply referencing the -maven-jaxws-tools-plugin in the configured plugins in your pom.xml -file.

-
-
-

The following example makes the plugin provide the wsdl file and -artifact sources for the specified endpoint class:

-
-
-
-
<build>
-  <plugins>
-    <plugin>
-      <groupId>org.jboss.ws.plugins</groupId>
-      <artifactId>jaxws-tools-maven-plugin</artifactId>
-      <version>1.2.0.Beta1</version>
-      <configuration>
-        <verbose>true</verbose>
-        <endpointClass>org.jboss.test.ws.plugins.tools.wsprovide.TestEndpoint</endpointClass>
-        <generateWsdl>true</generateWsdl>
-      </configuration>
-      <executions>
-        <execution>
-          <goals>
-            <goal>wsprovide</goal>
-          </goals>
-        </execution>
-      </executions>
-    </plugin>
-  </plugins>
-</build>
-
-
-
-

The following example does the same, but is meant for use in your own -testsuite:

-
-
-
-
<build>
-  <plugins>
-    <plugin>
-      <groupId>org.jboss.ws.plugins</groupId>
-      <artifactId>jaxws-tools-maven-plugin</artifactId>
-      <version>1.2.0.Beta1</version>
-      <configuration>
-        <verbose>true</verbose>
-        <endpointClass>org.jboss.test.ws.plugins.tools.wsprovide.TestEndpoint2</endpointClass>
-        <generateWsdl>true</generateWsdl>
-      </configuration>
-      <executions>
-        <execution>
-          <goals>
-            <goal>wsprovide-test</goal>
-          </goals>
-        </execution>
-      </executions>
-    </plugin>
-  </plugins>
-</build>
-
-
-
-

Plugin stack dependencyThe plugin itself does not have an explicit -dependency to a JBossWS stack, as it’s meant for being used with -implementations of any supported version of the JBossWS SPI. So the -user is expected to set a dependency in his own pom.xml to the desired -JBossWS stack version. The plugin will rely on the that for using the -proper tooling.

-
-
-
-
<dependencies>
-  <dependency>
-    <groupId>org.jboss.ws.cxf</groupId>
-    <artifactId>jbossws-cxf-client</artifactId>
-    <version>5.0.0.CR1</version>
-  </dependency>
-</dependencies>
-
-
-
- - - - - -
- - -Be careful when using this plugin with the Maven War Plugin as that -include any project dependency into the generated application war -archive. You might want to set <scope>provided</scope> for the -JBossWS stack dependency to avoid that. -
-
-
- - - - - -
- - -Up to version 1.1.2.Final, the artifactId of the plugin was -maven-jaxws-tools-plugin. -
-
-
-
-
-

17.4.3. Ant Task

-
-

The wsprovide ant task ( org.jboss.ws.tools.ant.WSProvideTask) has the -following attributes:

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault

fork

Whether or not to run the generation task in a separate VM.

true

keep

Keep/Enable Java source code generation.

false

destdir

The output directory for generated artifacts.

"output"

resourcedestdir

The output directory for resource artifacts -(WSDL/XSD).

value of destdir

sourcedestdir

The output directory for Java source.

value of destdir

extension

Enable SOAP 1.2 binding extension.

false

genwsdl

Whether or not to generate WSDL.

false

address

The generated port soap:address in wsdl.

 

verbose

Enables more informational output about command progress.

false

sei

Service Endpoint Implementation.

 

classpath

The classpath that contains the service endpoint -implementation.

"."

-
-
Examples
-
-

Executing wsprovide in verbose mode with separate output directories for -source, resources, and classes:

-
-
-
-
<target name="test-wsproivde" depends="init">
-  <taskdef name="wsprovide" classname="org.jboss.ws.tools.ant.WSProvideTask">
-    <classpath refid="core.classpath"/>
-  </taskdef>
-  <wsprovide
-    fork="false"
-    keep="true"
-    destdir="out"
-    resourcedestdir="out-resource"
-    sourcedestdir="out-source"
-    genwsdl="true"
-    verbose="true"
-    sei="org.jboss.test.ws.jaxws.jsr181.soapbinding.DocWrappedServiceImpl">
-    <classpath>
-      <pathelement path="${tests.output.dir}/classes"/>
-    </classpath>
-  </wsprovide>
-</target>
-
-
-
-
-
-
-

17.5. Jakarta XML Web Services Advanced User Guide

-
-

17.5.1. Logging

-
-

Logging of inbound and outbound messages is a common need. Different -approaches are available for achieving that:

-
-
-
Jakarta XML Web Services Handler approach
-
-

A portable way of performing logging is writing a simple Jakarta XML Web Services handler -dumping the messages that are passed in it; the handler can be added to -the desired client/endpoints (programmatically / using @HandlerChain -Jakarta XML Web Services annotation).

-
-
-

The predefined client and endpoint configuration -mechanism allows user to add the logging handler to any client/endpoint -or to some of them only (in which case the @EndpointConfig annotation -/ JBossWS API is required though).

-
-
-
-
Apache CXF approach
-
-

Apache CXF also comes with logging interceptors that can be easily used -to log messages to the console or configured client/server log files. -Those interceptors can be added to client, endpoint and buses in -multiple ways:

-
-
-
System property
-
-

Setting the org.apache.cxf.logging.enabled system property to true -causes the logging interceptors to be added to any Bus instance being -created on the JVM.

-
-
- - - - - -
- - -On WildFly, the system property is easily set by adding what follows to -the standalone / domain server configuration just after the extensions -section: -
-
-
-
-
<system-properties>
-  <property name="org.apache.cxf.logging.enabled" value="true"/>
-</system-properties>
-
-
-
-
-
Manual interceptor addition and logging feature
-
-

Logging interceptors can be selectively added to endpoints using the -Apache CXF annotations @org.apache.cxf.interceptor.InInterceptors and -@org.apache.cxf.interceptor.OutInterceptors. The same is achieved on -client side by programmatically adding new instances of the logging -interceptors to the client or the bus.

-
-
-

Alternatively, Apache CXF also comes with a -org.apache.cxf.feature.LoggingFeature that can be used on clients and -endpoints (either annotating them with -@org.apache.cxf.feature.Features or directly with -@org.apache.cxf.annotations.Logging).

-
-
-

Please refer to the -Apache -CXF documentation for more details.

-
-
-
-
-
-

17.5.2. WS-* support

-
-

JBossWS includes most of the WS-* specification functionalities through -the integration with Apache CXF. In particular, the whole WS-Security -Policy framework is fully supported, enabling full contract driven -configuration of complex features like WS-Security.

-
-
-

In details information available further down in this documentation -book.

-
-
-
-

17.5.3. Address rewrite

-
-

JBossWS allows users to configure the soap:address attribute in the -wsdl contract of deployed services.

-
-
-
Server configuration options
-
-

The configuration options are part of the -webservices -subsystem section of the application server domain model.

-
-
-
-
<subsystem xmlns="urn:jboss:domain:webservices:1.1" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-  xmlns:jaxwsconfig="urn:jboss:jbossws-jaxws-config:4.0">
-  <wsdl-host>localhost</wsdl-host>
-  <modify-wsdl-address>true</modify-wsdl-address>
-<!--
-  <wsdl-port>8080</wsdl-port>
-  <wsdl-secure-port>8443</wsdl-secure-port>
--->
-</subsystem>
-
-
-
-

If the content of <soap:address> in the wsdl is a valid URL, JBossWS -will not rewrite it unless modify-wsdl-address is true. If the content -of <soap:address> is not a valid URL instead, JBossWS will always -rewrite it using the attribute values given below. Please note that the -variable $\{jboss.bind.address} can be used to set the address which -the application is bound to at each startup.

-
-
-

The wsdl-secure-port and wsdl-port attributes are used to explicitly -define the ports to be used for rewriting the SOAP address. If these -attributes are not set, the ports will be identified by querying the -list of installed connectors. If multiple connectors are found the port -of the first connector is used.

-
-
-
-
Dynamic rewrite
-
-

When the application server is bound to multiple addresses or -non-trivial real-world network architectures cause request for different -external addresses to hit the same endpoint, a static rewrite of the -soap:address may not be enough. JBossWS allows for both the soap:address -in the wsdl and the wsdl address in the console to be rewritten with the -host use in the client request. This way, users always get the right -wsdl address assuming they’re connecting to an instance having the -endpoint they’re looking for. To trigger this behaviour, the -jbossws.undefined.host value has to be specified for the wsdl-host -element.

-
-
-
-
<wsdl-host>jbossws.undefined.host</wsdl-host>
-<modify-wsdl-address>true</modify-wsdl-address>
-
-
-
-

Of course, when a confidential transport address is required, the -addresses are always rewritten using https protocol and the port -currently configured for the https/ssl connector.

-
-
-
-
-

17.5.4. Configuration through deployment descriptor

-
-

The jboss-webservices.xml deployment descriptor can be used to provide -additional configuration for a given deployment. The expected location -of it is:

-
-
-
    -
  • -

    META-INF/jboss-webservices.xml for Jakarta Enterprise Beans webservice deployments

    -
  • -
  • -

    WEB-INF/jboss-webservices.xml for POJO webservice deployments and -Jakarta Enterprise Beans webservice endpoints bundled in war archives

    -
  • -
-
-
-

The structure of file is the following (schemas are available -here):

-
-
-
-
<webservices>
-  <context-root/>?
-  <config-name/>?
-  <config-file/>?
-  <property>*
-    <name/>
-    <value/>
-  </property>
-  <port-component>*
-    <ejb-name/>
-    <port-component-name/>
-    <port-component-uri/>?
-    <auth-method/>?
-    <transport-guarantee/>?
-    <secure-wsdl-access/>?
-  </port-component>
-  <webservice-description>*
-    <webservice-description-name/>
-    <wsdl-publish-location/>?
-  </webservice-description>
-</webservices>
-
-
-
-
context-root element
-
-

Element <context-root> can be used to customize context root of -webservices deployment.

-
-
-
-
<webservices>
-  <context-root>foo</context-root>
-</webservices>
-
-
-
-
-
config-name and config-file elements
-
-

Elements <config-name> and <config-file> can be used to associate -any endpoint provided in the deployment with a given -endpoint configuration. Endpoint configuration are -either specified in the referenced config file or in the WildFly domain -model (webservices subsystem). For further details on the endpoint -configurations and their management in the domain model, please see the -related -documentation.

-
-
-
-
<webservices>
-  <config-name>Standard WSSecurity Endpoint</config-name>
-  <config-file>META-INF/custom.xml</config-file>
-</webservices>
-
-
-
-
-
property element
-
-

<property> elements can be used to setup simple property values to -configure the ws stack behavior. Allowed property names and values are -mentioned in the guide under related topics.

-
-
-
-
<property>
-  <name>prop.name</name>
-  <value>prop.value</value>
-</property>
-
-
-
-
-
port-component element
-
-

Element <port-component> can be used to customize Jakarta Enterprise Beans endpoint target -URI or to configure security related properties.

-
-
-
-
<webservices>
-  <port-component>
-    <ejb-name>TestService</ejb-name>
-    <port-component-name>TestServicePort</port-component-name>
-    <port-component-uri>/*</port-component-uri>
-    <auth-method>BASIC</auth-method>
-    <transport-guarantee>NONE</transport-guarantee>
-    <secure-wsdl-access>true</secure-wsdl-access>
-  </port-component>
-</webservices>
-
-
-
-
-
webservice-description element
-
-

Element <webservice-description> can be used to customize (override) -webservice WSDL publish location.

-
-
-
-
<webservices>
-  <webservice-description>
-    <webservice-description-name>TestService</webservice-description-name>
-    <wsdl-publish-location>file:///bar/foo.wsdl</wsdl-publish-location>
-  </webservice-description>
-</webservices>
-
-
-
-
-
-

17.5.5. Schema validation of SOAP messages

-
-

Apache CXF has a feature for validating incoming and outgoing SOAP -messages on both client and server side. The validation is performed -against the relevant schema in the endpoint wsdl contract (server side) -or the wsdl contract used for building up the service proxy (client -side).

-
-
-

Schema validation can be turned on programmatically on client side

-
-
-
-
((BindingProvider)proxy).getRequestContext().put("schema-validation-enabled", true);
-
-
-
-

or using the @org.apache.cxf.annotations.SchemaValidation annotation -on server side

-
-
-
-
import jakarta.jws.WebService;
-import org.apache.cxf.annotations.SchemaValidation;
- 
-@WebService(...)
-@SchemaValidation
-public class ValidatingHelloImpl implements Hello {
-   ...
-}
-
-
-
-

Alternatively, any endpoint and client running in-container can be -associated to a JBossWS predefined configuration -having the schema-validation-enabled property set to true in the -referenced config file.

-
-
-

Finally, JBossWS also allows for server-wide (default) setup of schema -validation by using the Standard-Endpoint-Config and -Standard-Client-Config special configurations (which apply to any -client / endpoint unless a different configuration is specified for -them)

-
-
-
-
<subsystem xmlns="urn:jboss:domain:webservices:1.2">
-    ...
-    <endpoint-config name="Standard-Endpoint-Config">
-        <property name="schema-validation-enabled" value="true"/>
-    </endpoint-config>
-    ...
-    <client-config name="Standard-Client-Config">
-        <property name="schema-validation-enabled" value="true"/>
-    </client-config>
-</subsystem>
-
-
-
-
-

17.5.6. Jakarta XML Binding Introductions

-
-

As Kohsuke Kawaguchi wrote on -his -blog, one common complaint from the Jakarta XML Binding users is the lack of support -for binding 3rd party classes. The scenario is this: you are trying to -annotate your classes with Jakarta XML Binding annotations to make it XML bindable, but -some of the classes are coming from libraries and JDK, and thus you -cannot put necessary Jakarta XML Binding annotations on it.

-
-
-

To solve this Jakarta XML Binding has been designed to provide hooks for programmatic -introduction of annotations to the runtime.

-
-
-

This is currently leveraged by the JBoss Jakarta XML Binding Introductions project, -using which users can define annotations in XML and make Jakarta XML Binding see those -as if those were in the class files (perhaps coming from 3rd party -libraries).

-
-
-

Take a look at the JAXB -Introductions page on the wiki and at the examples in the sources.

-
-
-
-

17.5.7. WSDL system properties expansion

- -
-
-

17.5.8. Predefined client and endpoint configurations

-
-
-JBossWS permits extra setup configuration data to be predefined and -associated with an endpoint or a client. Configurations can include -Jakarta XML Web Services handlers and key/value property declarations that control JBossWS -and Apache CXF internals. Predefined configurations can be used for -Jakarta XML Web Services client and Jakarta XML Web Services endpoint setup. -
-
-
-

Configurations can be defined in the webservice subsystem and in an -application’s deployment descriptor file. There can be many -configuration definitions in the webservice subsystem and in an -application. Each configuration must have a name that is unique within -the server. Configurations defined in an application are local to the -application. Endpoint implementations declare the use of a specific -configuration through the use of the -org.jboss.ws.api.annotation.EndpointConfig annotation. An endpoint -configuration defined in the webservices subsystem is available to all -deployed applications on the server container and can be referenced by -name in the annotation. An endpoint configuration defined in an -application must be referenced by both deployment descriptor file name -and configuration name by the annotation.

-
-
-

Handlers

-
-
-

Each endpoint configuration may be associated with zero or more PRE and -POST handler chains. Each handler chain may include JAXWS handlers. For -outbound messages the PRE handler chains are executed before any handler -that is attached to the endpoint using the standard means, such as with -annotation @HandlerChain, and POST handler chains are executed after -those objects have executed. For inbound messages the POST handler -chains are executed before any handler that is attached to the endpoint -using the standard means and the PRE handler chains are executed after -those objects have executed.

-
-
-
-
* Server inbound messages
-Client --> ... --> POST HANDLER --> ENDPOINT HANDLERS --> PRE HANDLERS --> Endpoint
-
-* Server outbound messages
-Endpoint --> PRE HANDLER --> ENDPOINT HANDLERS --> POST HANDLERS --> ... --> Client
-
-
-
-

The same applies for client configurations.

-
-
-

Properties

-
-
-

Key/value properties are used for controlling both some Apache CXF -internals and some JBossWS options. Specific supported values are -mentioned where relevant in the rest of the documentation.

-
-
-
Assigning configurations
-
-

Endpoints and clients are assigned configuration through different -means. Users can explicitly require a given configuration or rely on -container defaults. The assignment process can be split up as follows:

-
-
-
    -
  • -

    Explicit assignment through annotations (for endpoints) or API -programmatic usage (for clients)

    -
  • -
  • -

    Automatic assignment of configurations from default descriptors

    -
  • -
  • -

    Automatic assignment of configurations from container

    -
  • -
-
-
-
Endpoint configuration assignment
-
-

The explicit configuration assignment is meant for developer that know -in advance their endpoint or client has to be setup according to a -specified configuration. The configuration is either coming from a -descriptor that is included in the application deployment, or is -included in the application server webservices subsystem management -model.

-
-
-
-
Endpoint Configuration Deployment Descriptor
-
-

Jakarta EE archives that can contain Jakarta XML Web Services client and endpoint -implementations can also contain predefined client and endpoint -configuration declarations. All endpoint/client configuration -definitions for a given archive must be provided in a single deployment -descriptor file, which must be an implementation of schema -jbossws-jaxws-config. -Many endpoint/client configurations can be defined in the deployment -descriptor file. Each configuration must have a name that is unique -within the server on which the application is deployed. The -configuration name can’t be referred to by endpoint/client -implementations outside the application. Here is an example of a -descriptor, containing two endpoint configurations:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
-<endpoint-config>
-<config-name>org.jboss.test.ws.jaxws.jbws3282.Endpoint4Impl</config-name>
-<pre-handler-chains>
-<javaee:handler-chain>
-<javaee:handler>
-<javaee:handler-name>Log Handler</javaee:handler-name>
-<javaee:handler-class>org.jboss.test.ws.jaxws.jbws3282.LogHandler</javaee:handler-class>
-</javaee:handler>
-</javaee:handler-chain>
-</pre-handler-chains>
-<post-handler-chains>
-<javaee:handler-chain>
-<javaee:handler>
-<javaee:handler-name>Routing Handler</javaee:handler-name>
-<javaee:handler-class>org.jboss.test.ws.jaxws.jbws3282.RoutingHandler</javaee:handler-class>
-</javaee:handler>
-</javaee:handler-chain>
-</post-handler-chains>
-</endpoint-config>
-<endpoint-config>
-<config-name>EP6-config</config-name>
-<post-handler-chains>
-<javaee:handler-chain>
-<javaee:handler>
-<javaee:handler-name>Authorization Handler</javaee:handler-name>
-<javaee:handler-class>org.jboss.test.ws.jaxws.jbws3282.AuthorizationHandler</javaee:handler-class>
-</javaee:handler>
-</javaee:handler-chain>
-</post-handler-chains>
-</endpoint-config>
-</jaxws-config>
-
-
-
-

Similarly, client configurations can be specified in descriptors (still -implementing the schema mentioned above):

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
-<client-config>
-<config-name>Custom Client Config</config-name>
-<pre-handler-chains>
-<javaee:handler-chain>
-<javaee:handler>
-<javaee:handler-name>Routing Handler</javaee:handler-name>
-<javaee:handler-class>org.jboss.test.ws.jaxws.clientConfig.RoutingHandler</javaee:handler-class>
-</javaee:handler>
-<javaee:handler>
-<javaee:handler-name>Custom Handler</javaee:handler-name>
-<javaee:handler-class>org.jboss.test.ws.jaxws.clientConfig.CustomHandler</javaee:handler-class>
-</javaee:handler>
-</javaee:handler-chain>
-</pre-handler-chains>
-</client-config>
-<client-config>
-<config-name>Another Client Config</config-name>
-<post-handler-chains>
-<javaee:handler-chain>
-<javaee:handler>
-<javaee:handler-name>Routing Handler</javaee:handler-name>
-<javaee:handler-class>org.jboss.test.ws.jaxws.clientConfig.RoutingHandler</javaee:handler-class>
-</javaee:handler>
-</javaee:handler-chain>
-</post-handler-chains>
-</client-config>
-</jaxws-config>
-
-
-
-Application server configurations -
-

WildFly allows declaring JBossWS client and server predefined -configurations in the webservices subsystem section of the server -model. As a consequence it is possible to declare server-wide handlers -to be added to the chain of each endpoint or client assigned to a given -configuration.

-
-
-

Please refer to the -WildFly -documentation for details on managing the webservices subsystem such -as adding, removing and modifying handlers and properties.

-
-
-

The allowed contents in the webservices subsystem are defined by the -schema -included in the application server.

-
-
-Standard configurations -
-

Clients running in-container as well as endpoints are assigned standard -configurations by default. The defaults are used unless different -configurations are set as described on this page. This enables -administrators to tune the default handler chains for client and -endpoint configurations. The names of the default client and endpoint -configurations, used in the webservices subsystem are -Standard-Client-Config and Standard-Endpoint-Config respectively.

-
-
-
-Handlers classloading -
-

When setting a server-wide handler, please note the handler class needs -to be available through each ws deployment classloader. As a consequence -proper module dependencies might need to be specified in the deployments -that are going to leverage a given predefined configuration. A shortcut -is to add a dependency to the module containing the handler class in one -of the modules which are already automatically set as dependencies to -any deployment, for instance org.jboss.ws.spi.

-
-
-
-Examples -
-
JBoss AS 7.2 default configurations
-
-
<subsystem xmlns="urn:jboss:domain:webservices:2.0">
-<!-- ... -->
-<endpoint-config name="Standard-Endpoint-Config"/>
-<endpoint-config name="Recording-Endpoint-Config">
-<pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
-<handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
-</pre-handler-chain>
-</endpoint-config>
-<client-config name="Standard-Client-Config"/>
-</subsystem>
-
-
-
-
A configuration file for a deployment specific ws-security endpoint
-

setup

-
-
-
-
<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
-<endpoint-config>
-<config-name>Custom WS-Security Endpoint</config-name>
-<property>
-<property-name>ws-security.signature.properties</property-name>
-<property-value>bob.properties</property-value>
-</property>
-<property>
-<property-name>ws-security.encryption.properties</property-name>
-<property-value>bob.properties</property-value>
-</property>
-<property>
-<property-name>ws-security.signature.username</property-name>
-<property-value>bob</property-value>
-</property>
-<property>
-<property-name>ws-security.encryption.username</property-name>
-<property-value>alice</property-value>
-</property>
-<property>
-<property-name>ws-security.callback-handler</property-name>
-<property-value>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback</property-value>
-</property>
-</endpoint-config>
-</jaxws-config>
-
-
-
-
JBoss AS 7.2 default configurations modified to default to SOAP
-

messages schema-validation on

-
-
-
-
<subsystem xmlns="urn:jboss:domain:webservices:2.0">
-<!-- ... -->
-<endpoint-config name="Standard-Endpoint-Config">
-<property name="schema-validation-enabled" value="true"/>
-</endpoint-config>
-<!-- ... -->
-<client-config name="Standard-Client-Config">
-<property name="schema-validation-enabled" value="true"/>
-</client-config>
-</subsystem>
-
-
-
-
-
-EndpointConfig annotation -
-

Once a configuration is available to a given application, the -org.jboss.ws.api.annotation.EndpointConfig annotation is used to -assign an endpoint configuration to a Jakarta XML Web Services endpoint implementation. -When assigning a configuration that is defined in the webservices -subsystem only the configuration name is specified. When assigning a -configuration that is defined in the application, the relative path to -the deployment descriptor and the configuration name must be specified.

-
-
-
-
@EndpointConfig(configFile = "WEB-INF/my-endpoint-config.xml", configName = "Custom WS-Security Endpoint")
-public class ServiceImpl implements ServiceIface
-{
-public String sayHello()
-{
-return "Secure Hello World!";
-}
-}
-
-
-
-
-JAXWS Feature -
-

The most practical way of setting a configuration is using -org.jboss.ws.api.configuration.ClientConfigFeature, a JAXWS Feature -extension provided by JBossWS:

-
-
-
-
import org.jboss.ws.api.configuration.ClientConfigFeature;
-
-...
-
-Service service = Service.create(wsdlURL, serviceName);
-Endpoint port = service.getPort(Endpoint.class, new ClientConfigFeature("META-INF/my-client-config.xml", "Custom Client Config"));
-port.echo("Kermit");
-
-... or ....
-
-port = service.getPort(Endpoint.class, new ClientConfigFeature("META-INF/my-client-config.xml", "Custom Client Config"), true); //setup properties too from the configuration
-port.echo("Kermit");
-... or ...
-
-port = service.getPort(Endpoint.class, new ClientConfigFeature(null, testConfigName)); //reads from current container configurations if available
-port.echo("Kermit");
-
-
-
-

JBossWS parses the specified configuration file. The configuration file -must be found as a resource by the classloader of the current thread. -The -jbossws-jaxws-config -schema defines the descriptor contents and is included in the -jbossws-spi artifact.

-
-
-
-Explicit setup through API -
-

Alternatively, JBossWS API comes with facility classes that can be used -for assigning configurations when building a client. JAXWS handlers read -from client configurations as follows:

-
-
-
-
import org.jboss.ws.api.configuration.ClientConfigUtil;
-import org.jboss.ws.api.configuration.ClientConfigurer;
-
-...
-
-Service service = Service.create(wsdlURL, serviceName);
-Endpoint port = service.getPort(Endpoint.class);
-BindingProvider bp = (BindingProvider)port;
-ClientConfigUtil.setConfigHandlers(bp, "META-INF/my-client-config.xml", "Custom Client Config 1");
-port.echo("Kermit");
-
-...
-
-ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer();
-configurer.setConfigHandlers(bp, "META-INF/my-client-config.xml", "Custom Client Config 2");
-port.echo("Kermit");
-
-...
-
-configurer.setConfigHandlers(bp, "META-INF/my-client-config.xml", "Custom Client Config 3");
-port.echo("Kermit");
-
-...
-
-configurer.setConfigHandlers(bp, null, "Container Custom Client Config"); //reads from current container configurations if available
-port.echo("Kermit");
-
-
-
-
    -
  1. -

    similarly, properties are read from client configurations as -follows:

    -
  2. -
-
-
-
-
import org.jboss.ws.api.configuration.ClientConfigUtil;
-import org.jboss.ws.api.configuration.ClientConfigurer;
-
-...
-
-Service service = Service.create(wsdlURL, serviceName);
-Endpoint port = service.getPort(Endpoint.class);
-
-ClientConfigUtil.setConfigProperties(port, "META-INF/my-client-config.xml", "Custom Client Config 1");
-port.echo("Kermit");
-
-...
-
-ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer();
-configurer.setConfigProperties(port, "META-INF/my-client-config.xml", "Custom Client Config 2");
-port.echo("Kermit");
-
-...
-
-configurer.setConfigProperties(port, "META-INF/my-client-config.xml", "Custom Client Config 3");
-port.echo("Kermit");
-
-...
-
-configurer.setConfigProperties(port, null, "Container Custom Client Config"); //reads from current container configurations if available
-port.echo("Kermit");
-
-...
-
-configurer.setConfigProperties(port, null, null); //reads from current Elytron client configuration if available
-port.echo("Kermit");
-
-
-
-

The default ClientConfigurer implementation parses the specified -configuration file, if any, after having resolved it as a resources -using the current thread context classloader. The -jbossws-jaxws-config -schema defines the descriptor contents and is included in the -jbossws-spi artifact.

-
-
-

If WildFly Elytron client configuration is present, the client will automatically use SSL context and credentials (for HTTP Basic authentication or Username Token Profile) from this configuration if these were not already configured.

-
-
-
-
-
Automatic configuration from default descriptors
-
-

In some cases, the application developer might not be aware of the -configuration that will need to be used for its client and endpoint -implementation, perhaps because that’s a concern of the application -deployer. In other cases, explicit usage (compile time dependency) of -JBossWS API might not be accepted. To cope with such scenarios, JBossWS -allows including default client ( jaxws-client-config.xml) and -endpoint ( jaxws-endpoint-config.xml) descriptor within the -application (in its root), which are parsed for getting configurations -any time a configuration file name is not specified.

-
-
-

If the configuration name is also not specified, JBossWS automatically -looks for a configuration named the same as

-
-
-
    -
  • -

    the endpoint implementation class (full qualified name), in case of -Jakarta XML Web Services endpoints;

    -
  • -
  • -

    the service endpoint interface (full qualified name), in case of -Jakarta XML Web Services clients.

    -
  • -
-
-
-

No automatic configuration name is selected for Dispatch clients.

-
-
-

So, for instance, an endpoint implementation class -org.foo.bar.EndpointImpl for which no pre-defined configuration is -explicitly set will cause JBossWS to look for a -org.foo.bar.EndpointImpl named configuration within a -jaxws-endpoint-config.xml descriptor in the root of the application -deployment. Similarly, on client side, a client proxy implementing -org.foo.bar.Endpoint interface (SEI) will have the setup read from a -org.foo.bar.Endpoint named configuration in jaxws-client-config.xml -descriptor.

-
-
-
-
Automatic configuration assignment from container setup
-
-

JBossWS fall-backs to getting predefined configurations from the -container setup whenever no explicit configuration has been provided and -the default descriptors are either not available or do not contain -relevant configurations. This gives additional control on the Jakarta XML Web Services -client and endpoint setup to administrators, as the container setup can -be managed independently from the deployed applications.
-JBossWS hence accesses the webservices subsystem the same as explained -above for explicitly named configuration; the default configuration -names used for look are

-
-
-
    -
  • -

    the endpoint implementation class (full qualified name), in case of -Jakarta XML Web Services endpoints;

    -
  • -
  • -

    the service endpoint interface (full qualified name), in case of -Jakarta XML Web Services clients.
    -Dispatch clients are not automatically configured. If no configuration -is found using names computed as above, the Standard-Client-Config and -Standard-Endpoint-Config configurations are used for clients and -endpoints respectively

    -
  • -
-
-
-
-
-
-

17.5.9. Authentication

-
-
Authentication
-
-

Here the simplest way to authenticate a web service user with JBossWS is -explained.

-
-
-

First we secure the access to the SLSB as we would do for normal (non -web service) invocations: this can be easily done through the -@RolesAllowed, @PermitAll, @DenyAll annotation. The allowed user roles -can be set with these annotations both on the bean class and on any of -its business methods.

-
-
-
-
@Stateless
-@RolesAllowed("friend")
-public class EndpointEJB implements EndpointInterface
-{
-  ...
-}
-
-
-
-

Similarly POJO endpoints are secured the same way as we do for normal -web applications in web.xml:

-
-
-
-
<security-constraint>
-  <web-resource-collection>
-    <web-resource-name>All resources</web-resource-name>
-    <url-pattern>/*</url-pattern>
-  </web-resource-collection>
-  <auth-constraint>
-    <role-name>friend</role-name>
-  </auth-constraint>
-</security-constraint>
- 
-<security-role>
-  <role-name>friend</role-name>
-</security-role>
-
-
-
-
Specify the security domain
-
-

Next, specify the security domain for this deployment. This is performed -using the @SecurityDomain annotation for EJB3 endpoints

-
-
-
-
@Stateless
-@SecurityDomain("JBossWS")
-@RolesAllowed("friend")
-public class EndpointEJB implements EndpointInterface
-{
-  ...
-}
-
-
-
-

or modifying the jboss-web.xml for POJO endpoints

-
-
-
-
<jboss-web>
-<security-domain>JBossWS</security-domain>
-</jboss-web>
-
-
-
-

The security domain as well as its the authentication and authorization -mechanisms are defined differently depending on the application server -version in use.

-
-
-
-
Use BindingProvider to set principal/credential
-
-

A web service client may use the jakarta.xml.ws.BindingProvider -interface to set the username/password combination

-
-
-
-
URL wsdlURL = new File("resources/jaxws/samples/context/WEB-INF/wsdl/TestEndpoint.wsdl").toURL();
-QName qname = new QName("http://org.jboss.ws/jaxws/context", "TestEndpointService");
-Service service = Service.create(wsdlURL, qname);
-port = (TestEndpoint)service.getPort(TestEndpoint.class);
- 
-BindingProvider bp = (BindingProvider)port;
-bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "kermit");
-bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "thefrog");
-
-
-
-
-
Using HTTP Basic Auth for security
-
-

To enable HTTP Basic authentication you use the @WebContext annotation -on the bean class

-
-
-
-
@Stateless
-@SecurityDomain("JBossWS")
-@RolesAllowed("friend")
-@WebContext(contextRoot="/my-cxt", urlPattern="/*", authMethod="BASIC", transportGuarantee="NONE", secureWSDLAccess=false)
-public class EndpointEJB implements EndpointInterface
-{
-  ...
-}
-
-
-
-

For POJO endpoints, we modify the web.xml adding the auth-method -element:

-
-
-
-
<login-config>
-  <auth-method>BASIC</auth-method>
-  <realm-name>Test Realm</realm-name>
-</login-config>
-
-
-
-
-
-
-

17.5.10. Apache CXF integration

-
-
JBossWS integration layer with Apache CXF
-
-

All Jakarta XML Web Services functionalities provided by JBossWS on top of WildFly are -currently served through a proper integration of the JBoss Web Services -stack with most of the Apache CXF project -modules.

-
-
-

Apache CXF is an open source services framework. It allows building and -developing services using frontend programming APIs (including Jakarta XML Web Services), -with services speaking a variety of protocols such as SOAP and XML/HTTP -over a variety of transports such as HTTP and Jakarta Messaging.

-
-
-

The integration layer ( JBossWS-CXF in short hereafter) is mainly -meant for:

-
-
-
    -
  • -

    allowing using standard webservices APIs (including Jakarta XML Web Services) on -WildFly; this is performed internally leveraging Apache CXF without -requiring the user to deal with it;

    -
  • -
  • -

    allowing using Apache CXF advanced features (including WS-*) on top of -WildFly without requiring the user to deal with / setup / care about the -required integration steps for running in such a container.

    -
  • -
-
-
-

In order for achieving the goals above, the JBossWS-CXF integration -supports the JBoss ws endpoint deployment mechanism and comes with many -internal customizations on top of Apache CXF.

-
-
-

In the next sections a list of technical suggestions and notes on the -integration is provided; please also refer to the -Apache CXF official documentation -for in-depth details on the CXF architecture.

-
-
-
-
Building WS applications the JBoss way
-
-

The Apache CXF client and endpoint configuration as explained in the -Apache CXF official user guide is -heavily based on Spring. Apache CXF basically parses Spring cxf.xml -descriptors; those may contain any basic bean plus specific ws client -and endpoint beans which CXF has custom parsers for. Apache CXF can be -used to deploy webservice endpoints on any servlet container by -including its libraries in the deployment; in such a scenario Spring -basically serves as a convenient configuration option, given direct -Apache CXF API usage won’t be very handy. Similar reasoning applies on -client side, where a Spring based descriptor offers a shortcut for -setting up Apache CXF internals.

-
-
-

This said, nowadays almost any Apache CXF functionality can be -configured and used through direct API usage, without Spring. As a -consequence of that and given the considerations in the sections below, -the JBossWS integration with Apache CXF does not rely on Spring -descriptors.

-
-
-
Portable applications
-
-

WildFly is much more then a servlet container; it actually provides -users with a fully compliant target platform for Jakarta EE applications.

-
-
-

Generally speaking, users are encouraged to write portable -applications by relying only on Jakarta XML Web Services specification whenever -possible. That would by the way ensure easy migrations to and from other -compliant platforms. Being a Jakarta EE container, WildFly already comes -with a Jakarta XML Web Services compliant implementation, which is basically Apache CXF -plus the JBossWS-CXF integration layer. So users just need to write -their Jakarta XML Web Services application; no need for embedding any Apache CXF or any -ws related dependency library in user deployments. Please refer to the -Jakarta XML Web Services User Guide section of the documentation for -getting started.

-
-
-

WS-* usage (including WS-Security, WS-Addressing, WS-ReliableMessaging, -…​) should also be configured in the most portable way; that is by -relying on proper WS-Policy assertions on the endpoint WSDL contracts, -so that client and endpoint configuration is basically a matter of -setting few ws context properties. The WS-* related sections of this -documentation cover all the details on configuring applications making -use of WS-* through policies.

-
-
-

As a consequence of the reasoning above, the JBossWS-CXF integration is -currently built directly on the Apache CXF API and aims at allowing -users to configure webservice clients and endpoints without Spring -descriptors.

-
-
-
-
Direct Apache CXF API usage
-
-

Whenever users can’t really meet their application requirements with -Jakarta XML Web Services plus WS-Policy, it is of course still possible to rely on direct -Apache CXF API usage (given that’s included in the AS), loosing the Java -EE portability of the application. That could be the case of a user -needing specific Apache CXF functionalities, or having to consume WS-* -enabled endpoints advertised through legacy wsdl contracts without -WS-Policy assertions.

-
-
-

On server side, direct Apache CXF API usage might not be always possible -or end up being not very easy. For this reason, the JBossWS integration -comes with a convenient alternative through customization options in the -jboss-webservices.xml descriptor described below on this page. -Properties can be declared in jboss-webservices.xml to control Apache -CXF internals like interceptors, features, etc.

-
-
-
-
-
Bus usage
-
-
Creating a Bus instance
-
-

Most of the Apache CXF features are configurable using the -org.apache.cxf.Bus class. While for basic Jakarta XML Web Services usage the user might -never need to explicitly deal with Bus, using Apache CXF specific -features generally requires getting a handle to a org.apache.cxf.Bus -instance. This can happen on client side as well as in a ws endpoint or -handler business code.

-
-
-

New Bus instances are produced by the currently configured -org.apache.cxf.BusFactory implementation the following way:

-
-
-
-
Bus bus = BusFactory.newInstance().createBus();
-
-
-
-

The algorithm for selecting the actual implementation of BusFactory to -be used leverages the Service API, basically looking for optional -configurations in META-INF/services/…​ location using the current -thread context classloader. JBossWS-CXF integration comes with its own -implementation of BusFactory, -org.jboss.wsf.stack.cxf.client.configuration.JBossWSBusFactory, that -allows for seamless setup of JBossWS customizations on top of Apache -CXF. So, assuming the JBossWS-CXF libraries are available in the current -thread context classloader, the JBossWSBusFactory is automatically -retrieved by the BusFactory.newInstance() call above.

-
-
-

JBossWS users willing to explicitly use functionalities of -org.apache.cxf.bus.CXFBusFactory , get the same API with JBossWS -additions through JBossWSBusFactory:

-
-
-
-
Map<Class, Object> myExtensions = new HashMap<Class, Object>();
-myExtensions.put(...);
-Bus bus = new JBossWSBusFactory().createBus(myExtensions);
-
-
-
-
-
Using existing Bus instances
-
-

Apache CXF keeps reference to a global default Bus instance as well as -to a thread default bus for each thread. That is performed through -static members in org.apache.cxf.BusFactory , which also comes with -the following methods in the public API:

-
-
-
-
public static synchronized Bus getDefaultBus()
-public static synchronized Bus getDefaultBus(boolean createIfNeeded)
-public static synchronized void setDefaultBus(Bus bus)
-public static Bus getThreadDefaultBus()
-public static Bus getThreadDefaultBus(boolean createIfNeeded)
-public static void setThreadDefaultBus(Bus bus)
-
-
-
-

Please note that the default behaviour of getDefaultBus() / -getDefaultBus(true) / getThreadDefaultBus() / -getThreadDefaultBus(true) is to create a new Bus instance if that’s -not set yet. Moreover getThreadDefaultBus() and -getThreadDefaultBus(true) first fallback to retrieving the configured -global default bus before actually trying creating a new instance (and -the created new instance is set as global default bus if that was not -set there yet).

-
-
-

The drawback of this mechanism (which is basically fine in JSE -environment) is that when running in WildFly container you need to be -careful in order not to (mis)use a bus over multiple applications -(assuming the Apache CXF classes are loaded by the same classloader, -which is currently the case with WildFly).

-
-
-

Here is a list of general suggestions to avoid problems when running -in-container:

-
-
-
    -
  • -

    forget about the global default bus; you don’t need that, so don’t do -getDefaultBus() / getDefaultBus(true) / setDefaultBus() in -your code;

    -
  • -
  • -

    avoid getThreadDefaultBus() / getThreadDefaultBus(true) unless -you already know for sure the default bus is already set;

    -
  • -
  • -

    keep in mind thread pooling whenever you customize a thread default -bus instance (for instance adding bus scope interceptors, …​), as that -thread and bus might be later reused; so either shutdown the bus when -you’re done or explicitly remove it from the BusFactory thread -association.

    -
  • -
-
-
-

Finally, remember that each time you explictly create a new Bus instance -(factory.createBus()) that is set as thread default bus and global -default bus if those are not set yet. The JAXWS Provider -implementation also creates Bus instances internally, in particular -the JBossWS version of JAXWS Provider makes sure the default bus is -never internally used and instead a new Bus is created if required -(more details on this in the next paragraph).

-
-
-
-
Bus selection strategies for JAXWS clients
-
-

JAXWS clients require an Apache CXF Bus to be available; the client is -registered within the Bus and the Bus affects the client behavior (e.g. -through the configured CXF interceptors). The way a bus is internally -selected for serving a given JAXWS client is very important, especially -for in-container clients; for this reason, JBossWS users can choose the -preferred Bus selection strategy. The strategy is enforced in the -jakarta.xml.ws.spi.Provider implementation from the JBossWS integration, -being that called whenever a JAXWS Service (client) is requested.

-
-
-Thread bus strategy (THREAD_BUS) -
-

Each time the vanilla JAXWS api is used to create a Bus, the JBossWS-CXF -integration will automatically make sure a Bus is currently associated -to the current thread in the BusFactory. If that’s not the case, a new -Bus is created and linked to the current thread (to prevent the user -from relying on the default Bus). The Apache CXF engine will then create -the client using the current thread Bus.

-
-
-

This is the default strategy, and the most straightforward one in Java -SE environments; it lets users automatically reuse a previously created -Bus instance and allows using customized Bus that can possibly be -created and associated to the thread before building up a JAXWS client.

-
-
-

The drawback of the strategy is that the link between the Bus instance -and the thread needs to be eventually cleaned up (when not needed -anymore). This is really evident in a Jakarta EE environment (hence when -running in-container), as threads from pools (e.g. serving web requests) -are re-used.

-
-
-

When relying on this strategy, the safest approach to be sure of -cleaning up the link is to surround the JAXWS client with a -try/finally block as below:

-
-
-
-
try {
-  Service service = Service.create(wsdlURL, serviceQName);
-  MyEndpoint port = service.getPort(MyEndpoint.class);
-  //...
-} finally {
-  BusFactory.setThreadDefaultBus(null);
-  // OR (if you don't need the bus and the client anymore)
-   Bus bus = BusFactory.getThreadDefaultBus(false);
-  bus.shutdown(true);
-}
-
-
-
-
-New bus strategy (NEW_BUS) -
-

Another strategy is to have the JAXWS Provider from the JBossWS -integration create a new Bus each time a JAXWS client is built. The main -benefit of this approach is that a fresh bus won’t rely on any formerly -cached information (e.g. cached WSDL / schemas) which might have changed -after the previous client creation. The main drawback is of course worse -performance as the Bus creation takes time.

-
-
-

If there’s a bus already associated to the current thread before the -JAXWS client creation, that is automatically restored when returning -control to the user; in other words, the newly created bus will be used -only for the created JAXWS client but won’t stay associated to the -current thread at the end of the process. Similarly, if the thread was -not associated to any bus before the client creation, no bus will be -associated to the thread at the end of the client creation.

-
-
-
-Thread context classloader bus strategy (TCCL_BUS) -
-

The last strategy is to have the bus created for serving the client be -associated to the current thread context classloader (TCCL). That -basically means the same Bus instance is shared by JAXWS clients running -when the same TCCL is set. This is particularly interesting as each web -application deployment usually has its own context classloader, so this -strategy is possibly a way to keep the number of created Bus instances -bound to the application number in WildFly container.

-
-
-

If there’s a bus already associated to the current thread before the -JAXWS client creation, that is automatically restored when returning -control to the user; in other words, the bus corresponding to the -current thread context classloader will be used only for the created -JAXWS client but won’t stay associated to the current thread at the end -of the process. If the thread was not associated to any bus before the -client creation, a new bus will be created (and later user for any other -client built with this strategy and the same TCCL in place); no bus will -be associated to the thread at the end of the client creation.

-
-
-
-Strategy configuration -
-

Users can request a given Bus selection strategy to be used for the -client being built by specifying one of the following JBossWS features -(which extend jakarta . xml . ws . WebServiceFeature):

-
- ---- - - - - - - - - - - - - - - - - - - - - -
FeatureStrategy

org.jboss.wsf.stack.cxf.client.UseThreadBusFeature

THREAD_BUS

org.jboss.wsf.stack.cxf.client.UseNewBusFeature

NEW_BUS

org.jboss.wsf.stack.cxf.client.UseTCCLBusFeature

TCCL_BUS

-
-

The feature is specified as follows:

-
-
-
-
Service service = Service.create(wsdlURL, serviceQName, new UseThreadBusFeature());
-
-
-
-

If no feature is explicitly specified, the system default strategy is -used, which can be modified through the -org.jboss.ws.cxf.jaxws-client.bus.strategy system property when -starting the JVM. The valid values for the property are THREAD_BUS, -NEW_BUS and TCCL_BUS. The default is THREAD_BUS.

-
-
-
-
-
-
Server Side Integration Customization
-
-

The JBossWS-CXF server side integration takes care of internally -creating proper Apache CXF structures (including a Bus instance, of -course) for the provided ws deployment. Should the deployment include -multiple endpoints, those would all live within the same Apache CXF Bus, -which would of course be completely separated by the other deployments' -bus instances.

-
-
-

While JBossWS sets sensible defaults for most of the Apache CXF -configuration options on server side, users might want to fine tune the -Bus instance that’s created for their deployment; a -jboss-webservices.xml descriptor can be used for deployment level -customizations.

-
-
-
Deployment descriptor properties
-
-

The jboss-webservices.xml descriptor can be used to -provide property values.

-
-
-
-
<webservices xmlns="http://www.jboss.com/xml/ns/javaee" version="1.2">
-  ...
-  <property>
-    <name>...</name>
-    <value>...</value>
-  </property>
-  ...
-</webservices>
-
-
-
-

JBossWS-CXF integration comes with a set of allowed property names to -control Apache CXF internals.

-
-
-WorkQueue configuration -
-

Apache CXF uses WorkQueue instances for dealing with some operations -(e.g. @Oneway requests processing). A -WorkQueueManager -is installed in the Bus as an extension and allows for adding / removing -queues as well as controlling the existing ones.

-
-
-

On server side, queues can be provided by using the -cxf.queue.<queue-name>.* properties in jboss-webservices.xml (e.g. -cxf.queue.default.maxQueueSize for controlling the max queue size of -the default workqueue). At deployment time, the JBossWS integration -can add new instances of -AutomaticWorkQueueImpl -to the currently configured WorkQueueManager; the properties below are -used to fill in parameter into the -AutomaticWorkQueueImpl -constructor:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDefault value

cxf.queue.<queue-name>.maxQueueSize

256

cxf.queue.<queue-name>.initialThreads

0

cxf.queue.<queue-name>.highWaterMark

25

cxf.queue.<queue-name>.lowWaterMark

5

cxf.queue.<queue-name>.dequeueTimeout

120000

-
-
-Policy alternative selector -
-

The Apache CXF policy engine supports different strategies to deal with -policy alternatives. JBossWS-CXF integration currently defaults to the -MaximalAlternativeSelector, -but still allows for setting different selector implementation using the -cxf.policy.alternativeSelector property in jboss-webservices.xml.

-
-
-
-MBean management -
-

Apache CXF allows managing its MBean objects that are installed into the -WildFly MBean server. The feature is enabled on a deployment basis -through the cxf.management.enabled property in -jboss-webservices.xml. The -cxf.management.installResponseTimeInterceptors property can also be -used to control installation of CXF response time interceptors, which -are added by default when enabling MBean management, but might not be -desired in some cases. Here is an example:

-
-
-
-
<webservices xmlns="http://www.jboss.com/xml/ns/javaee" version="1.2">
-  <property>
-    <name>cxf.management.enabled</name>
-    <value>true</value>
-  </property>
-  <property>
-    <name>cxf.management.installResponseTimeInterceptors</name>
-    <value>false</value>
-  </property>
-</webservices>
-
-
-
-
-Schema validation -
-

Schema validation of exchanged messages can also be enabled in -jboss-webservices.xml. Further details available -here.

-
-
-
-Interceptors -
-

The jboss-webservices.xml descriptor also allows specifying the -cxf.interceptors.in and cxf.interceptors.out properties; those -allows declaring interceptors to be attached to the Bus instance that’s -created for serving the deployment.

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-<webservices
-xmlns="http://www.jboss.com/xml/ns/javaee"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-version="1.2"
-xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee">
- 
-<property>
-<name>cxf.interceptors.in</name>
-<value>org.jboss.test.ws.jaxws.cxf.interceptors.BusInterceptor</value>
-</property>
-<property>
-<name>cxf.interceptors.out</name>
-<value>org.jboss.test.ws.jaxws.cxf.interceptors.BusCounterInterceptor</value>
-</property>
-</webservices>
-
-
-
-
-Features -
-

The jboss-webservices.xml descriptor also allows specifying the -cxf.features property; that allows declaring features to be attached -to any endpoint belonging to the Bus instance that’s created for serving -the deployment.

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-<webservices
-xmlns="http://www.jboss.com/xml/ns/javaee"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-version="1.2"
-xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee">
- 
-<property>
-<name>cxf.features</name>
-<value>org.apache.cxf.feature.FastInfosetFeature</value>
-</property>
-</webservices>
-
-
-
-
-WS-Discovery enablement -
-

WS-Discovery support can be turned on in jboss-webservices for the -current deployment. Further details available here.

-
-
-
-
-
-
Apache CXF interceptors
-
-

Apache CXF supports declaring interceptors using one of the following -approaches:

-
-
-
    -
  • -

    Annotation usage on endpoint classes ( -@org.apache.cxf.interceptor.InInterceptor, -@org.apache.cxf.interceptor.OutInterceptor)

    -
  • -
  • -

    Direct API usage on client side (through the -org.apache.cxf.interceptor.InterceptorProvider interface)

    -
  • -
  • -

    Spring descriptor usage ( cxf.xml)

    -
  • -
-
-
-

As the Spring descriptor usage is not supported, the JBossWS integration -adds an additional descriptor based approach to avoid requiring -modifications to the actual client/endpoint code. Users can declare -interceptors within predefined client and endpoint -configurations by specifying a list of interceptor class names for the -cxf.interceptors.in and cxf.interceptors.out properties.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
-<endpoint-config>
-<config-name>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointImpl</config-name>
-<property>
-<property-name>cxf.interceptors.in</property-name>
-<property-value>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointInterceptor,org.jboss.test.ws.jaxws.cxf.interceptors.FooInterceptor</property-value>
-</property>
-<property>
-<property-name>cxf.interceptors.out</property-name>
-<property-value>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointCounterInterceptor</property-value>
-</property>
-</endpoint-config>
-</jaxws-config>
-
-
-
-

A new instance of each specified interceptor class will be added to the -client or endpoint the configuration is assigned to. The interceptor -classes must have a no-argument constructor.

-
-
-
-
Apache CXF features
-
-

Apache CXF supports declaring features using one of the following -approaches:

-
-
-
    -
  • -

    Annotation usage on endpoint classes ( -@org.apache.cxf.feature.Features)

    -
  • -
  • -

    Direct API usage on client side (through extensions of the -org.apache.cxf.feature.AbstractFeature class)

    -
  • -
  • -

    Spring descriptor usage ( cxf.xml)

    -
  • -
-
-
-

As the Spring descriptor usage is not supported, the JBossWS integration -adds an additional descriptor based approach to avoid requiring -modifications to the actual client/endpoint code. Users can declare -features within predefined client and endpoint -configurations by specifying a list of feature class names for the -cxf.features property.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
-<endpoint-config>
-<config-name>Custom FI Config</config-name>
-<property>
-<property-name>cxf.features</property-name>
-<property-value>org.apache.cxf.feature.FastInfosetFeature</property-value>
-</property>
-</endpoint-config>
-</jaxws-config>
-
-
-
-

A new instance of each specified feature class will be added to the -client or endpoint the configuration is assigned to. The feature classes -must have a no-argument constructor.

-
-
-
-
Properties driven bean creation
-
-

Sections above explain how to declare CXF interceptors and features -through properties either in a client/endpoint predefined configuration -or in a jboss-webservices.xml descriptor. By getting the -feature/interceptor class name only specified, the container simply -tries to create a bean instance using the class default constructor. -This sets a limitation on the feature/interceptor configuration, unless -custom extensions of vanilla CXF classes are provided, with the default -constructor setting properties before eventually using the super -constructor.

-
-
-

To cope with this issue, JBossWS integration comes with a mechanism for -configuring simple bean hierarchies when building them up from -properties. Properties can have bean reference values, that is strings -starting with ##. Property reference keys are used to specify the bean -class name and the value for for each attribute. So for instance the -following properties:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyValue

cxf.features

foo, bar

##foo

org.jboss.Foo

##foo.par

34

##bar

org.jboss.Bar

##bar.color

blue

-
-

would result into the stack installing two feature instances, the same -that would have been created by

-
-
-
-
import org.Bar;
-import org.Foo;
- 
-...
- 
-Foo foo = new Foo();
-foo.setPar(34);
-Bar bar = new Bar();
-bar.setColor("blue");
-
-
-
-

The mechanism assumes that the classes are valid beans with proper -getter and setter methods; value objects are cast to the correct -primitive type by inspecting the class definition. Nested beans can of -course be configured.

-
-
-
-
HTTPConduit configuration
-
-

HTTP transport setup in Apache CXF is achieved through -org.apache.cxf.transport.http.HTTPConduit -configurations. -When running on top of the JBossWS integration, conduits can be -programmatically modified using the Apache CXF API as follows:

-
-
-
-
import org.apache.cxf.frontend.ClientProxy;
-import org.apache.cxf.transport.http.HTTPConduit;
-import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
- 
-//set chunking threshold before using a Jakarta XML Web Services port client
-...
-HTTPConduit conduit = (HTTPConduit)ClientProxy.getClient(port).getConduit();
-HTTPClientPolicy client = conduit.getClient();
- 
-client.setChunkingThreshold(8192);
-...
-
-
-
-

Users can also control the default values for the most common -HTTPConduit parameters by setting specific system properties; the -provided values will override Apache CXF defaut values.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription

cxf.client.allowChunking

A boolean to tell Apache CXF whether to allow -send messages using chunking.

cxf.client.chunkingThreshold

An integer value to tell Apache CXF the -threshold at which switching from non-chunking to chunking mode.

cxf.client.connectionTimeout

A long value to tell Apache CXF how many -milliseconds to set the connection timeout to

cxf.client.receiveTimeout

A long value to tell Apache CXF how many -milliseconds to set the receive timeout to

cxf.client.connection

A string to tell Apache CXF to use Keep-Alive or -close connection type

cxf.tls-client.disableCNCheck

A boolean to tell Apache CXF whether -disabling CN host name check or not

-
-

The vanilla Apache CXF defaults apply when the system properties above -are not set.

-
-
-
-
-

17.5.11. WS-Addressing

-
-

JBoss Web Services inherits full WS-Addressing capabilities from the -underlying Apache CXF implementation. Apache CXF provides support for -2004-08 and 1.0 versions of -WS-Addressing.

-
-
-
Enabling WS-Addressing
-
-

WS-Addressing can be turned on in multiple standard ways:

-
-
-
    -
  • -

    consuming a WSDL contract that specifies a WS-Addressing assertion / -policy

    -
  • -
  • -

    using the @jakarta.xml.ws.soap.Addressing annotation

    -
  • -
  • -

    using the jakarta.xml.ws.soap.AddressingFeature feature

    -
  • -
-
-
- - - - - -
- - -The supported addressing policy elements are: -
-
-
-
-
[http://www.w3.org/2005/02/addressing/wsdl]UsingAddressing
-[http://schemas.xmlsoap.org/ws/2004/08/addressing/policy]UsingAddressing
-[http://www.w3.org/2006/05/addressing/wsdl]UsingAddressing
-[http://www.w3.org/2007/05/addressing/metadata]Addressing
-
-
-
-

Alternatively, Apache CXF proprietary ways are also available:

-
-
-
    -
  • -

    specifying the  [http://cxf.apache.org/ws/addressing]addressing -feature for a given client/endpoint

    -
  • -
  • -

    using the org.apache.cxf.ws.addressing.WSAddressingFeature feature -through the API

    -
  • -
  • -

    manually configuring the Apache CXF addressing interceptors ( -org.apache.cxf.ws.addressing.MAPAggregator and -org.apache.cxf.ws.addressing.soap.MAPCodec)

    -
  • -
  • -

    setting the org.apache.cxf.ws.addressing.using property in the -message context

    -
  • -
-
-
-

Please refer to the the Apache CXF documentation for further information -on the proprietary -WS-Addressing setup and -configuration details.

-
-
-
-
WS-Addressing Policy
-
-

The WS-Addressing support is also perfectly integrated with the Apache -CXF WS-Policy engine.

-
-
-

This basically means that the WSDL contract generation for code-first -endpoint deployment is policy-aware: users can annotate endpoints with -the @ jakarta.xml.ws.soap. Addressing annotation and expect the -published WSDL contract to contain proper WS-Addressing policy (assuming -no wsdlLocation is specified in the endpoint’s @WebService -annotation).

-
-
-

Similarly, on client side users do not need to manually specify the -jakarta.xml.ws.soap.AddressingFeature feature, as the policy engine is -able to properly process the WS-Addressing policy in the consumed WSDL -and turn on addressing as requested.

-
-
-
-
Example
-
-

Here is an example showing how to simply enable WS-Addressing through -WS-Policy.

-
-
-
Endpoint
-
-

A simple Jakarta XML Web Services endpoint is prepared using a java-first approach; -WS-Addressing is enforced through @Addressing annotation and no -wsdlLocation is provided in @WebService:

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsa;
- 
-import jakarta.jws.WebService;
-import jakarta.xml.ws.soap.Addressing;
-import org.jboss.logging.Logger;
- 
-@WebService
-(
-   portName = "AddressingServicePort",
-   serviceName = "AddressingService",
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wsaddressing",
-   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsa.ServiceIface"
-)
-@Addressing(enabled=true, required=true)
-public class ServiceImpl implements ServiceIface
-{
-   private Logger log = Logger.getLogger(this.getClass());
- 
-   public String sayHello(String name)
-   {
-      return "Hello " + name + "!";
-   }
-}
-
-
-
-

The WSDL contract that’s generated at deploy time and published looks -like this:

-
-
-
-
<wsdl:definitions ....>
-...
-  <wsdl:binding name="AddressingServiceSoapBinding" type="tns:ServiceIface">
-    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
-    <wsaw:UsingAddressing wsdl:required="true"/>
-    <wsp:PolicyReference URI="#AddressingServiceSoapBinding_WSAM_Addressing_Policy"/>
- 
-    <wsdl:operation name="sayHello">
-      <soap:operation soapAction="" style="document"/>
-      <wsdl:input name="sayHello">
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output name="sayHelloResponse">
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
- 
-  </wsdl:binding>
-  <wsdl:service name="AddressingService">
-    <wsdl:port binding="tns:AddressingServiceSoapBinding" name="AddressingServicePort">
-      <soap:address location="http://localhost:8080/jaxws-samples-wsa"/>
-    </wsdl:port>
-  </wsdl:service>
-    <wsp:Policy wsu:Id="AddressingServiceSoapBinding_WSAM_Addressing_Policy"
-       xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
-      <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
-        <wsp:Policy/>
-      </wsam:Addressing>
-    </wsp:Policy>
-</wsdl:definitions>
-
-
-
-
-
Client
-
-

Since the WS-Policy engine is on by default, the client side code is -basically a pure Jakarta XML Web Services client app:

-
-
-
-
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wsaddressing", "AddressingService");
-URL wsdlURL = new URL("http://localhost:8080/jaxws-samples-wsa?wsdl");
-Service service = Service.create(wsdlURL, serviceName);
-ServiceIface proxy = (ServiceIface)service.getPort(ServiceIface.class);
-proxy.sayHello("World");
-
-
-
-
-
-
-

17.5.12. WS-Security

-
-
WS-Security overview
-
-

WS-Security provides the means to secure your services beyond transport -level protocols such as HTTPS. Through a number of standards such as -XML-Encryption, and headers defined -in the -WS-Security -standard, it allows you to:

-
-
-
    -
  • -

    Pass authentication tokens between services.

    -
  • -
  • -

    Encrypt messages or parts of messages.

    -
  • -
  • -

    Sign messages.

    -
  • -
  • -

    Timestamp messages.

    -
  • -
-
-
-

WS-Security makes heavy use of public and private key cryptography. It -is helpful to understand these basics to really understand how to -configure WS-Security. With public key cryptography, a user has a pair -of public and private keys. These are generated using a large prime -number and a key function.

-
-
-

Public_key_making.png

-
-
-

The keys are related mathematically, but cannot be derived from one -another. With these keys we can encrypt messages. For example, if Bob -wants to send a message to Alice, he can encrypt a message using her -public key. Alice can then decrypt this message using her private key. -Only Alice can decrypt this message as she is the only one with the -private key.

-
-
-

Public_key_encryption-mod.svg.png

-
-
-

Messages can also be signed. This allows you to ensure the authenticity -of the message. If Alice wants to send a message to Bob, and Bob wants -to be sure that it is from Alice, Alice can sign the message using her -private key. Bob can then verify that the message is from Alice by using -her public key.

-
-
-

250px-Public_key_making.svg.png

-
-
-
-
JBoss WS-Security support
-
-

JBoss Web Services supports many real world scenarios requiring -WS-Security functionalities. This includes signature and encryption -support through X509 certificates, authentication and authorization -through username tokens as well as all ws-security configurations -covered by WS- -SecurityPolicy -specification.

-
-
-

As well as for other WS-* features, the core of -WS-Security functionalities is provided through the Apache CXF engine. -On top of that the JBossWS integration adds few configuration -enhancements to simplify the setup of WS-Security enabled endpoints.

-
-
-
Apache CXF WS-Security implementation
-
-

Apache CXF features a top class WS-Security module supporting multiple -configurations and easily extendible.

-
-
-

The system is based on interceptors that delegate to -Apache WSS4J for the low level security -operations. Interceptors can be configured in different ways, either -through Spring configuration files or directly using Apache CXF client -API. Please refer to the -Apache CXF documentation if -you’re looking for more details.

-
-
-

Recent versions of Apache CXF, however, introduced support for -WS-Security Policy, which aims at moving most of the security -configuration into the service contract (through policies), so that -clients can easily be configured almost completely automatically from -that. This way users do not need to manually deal with configuring / -installing the required interceptors; the Apache CXF WS-Policy engine -internally takes care of that instead.

-
-
-WS-Security Policy support -
-

WS-SecurityPolicy describes the actions that are required to securely -communicate with a service advertised in a given WSDL contract. The WSDL -bindings / operations reference WS-Policy fragments with the security -requirements to interact with the service. The -WS-SecurityPolicy -specification allows for specifying things like asymmetric/symmetric -keys, using transports (https) for encryption, which parts/headers to -encrypt or sign, whether to sign then encrypt or encrypt then sign, -whether to include timestamps, whether to use derived keys, etc.

-
-
-

However some mandatory configuration elements are not covered by -WS-SecurityPolicy, basically because they’re not meant to be public / -part of the published endpoint contract; those include things such as -keystore locations, usernames and passwords, etc. Apache CXF allows -configuring these elements either through Spring xml descriptors or -using the client API / annotations. Below is the list of supported -configuration properties:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ws-security.usernameThe username used for UsernameToken policy -assertions

ws-security.password

The password used for UsernameToken policy -assertions. If not specified, the callback handler will be called.

ws-security.callback-handler

The WSS4J security CallbackHandler that -will be used to retrieve passwords for keystores and UsernameTokens.

ws-security.signature.properties

The properties file/object that -contains the WSS4J properties for configuring the signature keystore and -crypto objects

ws-security.encryption.properties

The properties file/object that -contains the WSS4J properties for configuring the encryption keystore -and crypto objects

ws-security.signature.username

The username or alias for the key in -the signature keystore that will be used. If not specified, it uses the -the default alias set in the properties file. If that’s also not set, -and the keystore only contains a single key, that key will be used.

ws-security.encryption.username

The username or alias for the key in -the encryption keystore that will be used. If not specified, it uses the -the default alias set in the properties file. If that’s also not set, -and the keystore only contains a single key, that key will be used. For -the web service provider, the useReqSigCert keyword can be used to -accept (encrypt to) any client whose public key is in the service’s -truststore (defined in ws-security.encryption.properties.)

ws-security.signature.crypto

Instead of specifying the signature -properties, this can point to the full WSS4J Crypto object. This can -allow easier "programmatic" configuration of the Crypto information."

ws-security.encryption.crypto

Instead of specifying the encryption -properties, this can point to the full WSS4J Crypto object. This can -allow easier "programmatic" configuration of the Crypto information."

ws-security.enable.streaming

Enable streaming (StAX based) processing -of WS-Security messages

-
-

Here is an example of configuration using the client API:

-
-
-
-
Map<String, Object> ctx = ((BindingProvider)port).getRequestContext();
-ctx.put("ws-security.encryption.properties", properties);
-port.echoString("hello");
-
-
-
-

Please refer to the -Apache CXF -documentation for additional configuration details.

-
-
-
-
-
JBossWS configuration additions
-
-

In order for removing the need of Spring on server side for setting up -WS-Security configuration properties not covered by policies, the -JBossWS integration allows for getting those pieces of information from -a defined endpoint configuration. Endpoint -configurationscan include property declarations and endpoint -implementations can be associated with a given endpoint configuration -using the @EndpointConfig annotation.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
-  <endpoint-config>
-    <config-name>Custom WS-Security Endpoint</config-name>
-    <property>
-      <property-name>ws-security.signature.properties</property-name>
-      <property-value>bob.properties</property-value>
-    </property>
-    <property>
-      <property-name>ws-security.encryption.properties</property-name>
-      <property-value>bob.properties</property-value>
-    </property>
-    <property>
-      <property-name>ws-security.signature.username</property-name>
-      <property-value>bob</property-value>
-    </property>
-    <property>
-      <property-name>ws-security.encryption.username</property-name>
-      <property-value>alice</property-value>
-    </property>
-    <property>
-      <property-name>ws-security.callback-handler</property-name>
-      <property-value>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback</property-value>
-    </property>
-  </endpoint-config>
-</jaxws-config>
-
-
-
-
-
import jakarta.jws.WebService;
-import org.jboss.ws.api.annotation.EndpointConfig;
- 
-@WebService
-(
-   portName = "SecurityServicePort",
-   serviceName = "SecurityService",
-   wsdlLocation = "WEB-INF/wsdl/SecurityService.wsdl",
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy",
-   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.basic.ServiceIface"
-)
-@EndpointConfig(configFile = "WEB-INF/jaxws-endpoint-config.xml", configName = "Custom WS-Security Endpoint")
-public class ServiceImpl implements ServiceIface
-{
-   public String sayHello()
-   {
-      return "Secure Hello World!";
-   }
-}
-
-
-
-
-
Apache CXF annotations
-
-

The JBossWS configuration additions allow for a descriptor approach to -the WS-Security Policy engine configuration. If you prefer to provide -the same information through an annotation approach, you can leverage -the Apache CXF @org.apache.cxf.annotations.EndpointProperties -annotation:

-
-
-
-
@WebService(
-   ...
-)
-@EndpointProperties(value = {
-      @EndpointProperty(key = "ws-security.signature.properties", value = "bob.properties"),
-      @EndpointProperty(key = "ws-security.encryption.properties", value = "bob.properties"),
-      @EndpointProperty(key = "ws-security.signature.username", value = "bob"),
-      @EndpointProperty(key = "ws-security.encryption.username", value = "alice"),
-      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback")
-      }
-)
-public class ServiceImpl implements ServiceIface {
-   ...
-}
-
-
-
-
-
-
Examples
-
-

In this section some sample of WS-Security service endpoints and clients -are provided. Please note they’re only meant as tutorials; you should -really careful isolate the ws-security policies / assertion that best -suite your security needs before going to production environment.

-
-
- - - - - -
- - -The following sections provide directions and examples on understanding -some of the configuration options for WS-Security engine. Please note -the implementor remains responsible for assessing the application -requirements and choosing the most suitable security policy for them. -
-
-
-
Signature and encryption
-
-Endpoint -
-

First of all you need to create the web service endpoint using Jakarta XML Web Services. -While this can generally be achieved in different ways, it’s required to -use a contract-first approach when using WS-Security, as the policies -declared in the wsdl are parsed by the Apache CXF engine on both server -and client sides. So, here is an example of WSDL contract enforcing -signature and encryption using X 509 certificates (the referenced schema -is omitted):

-
-
-
-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" name="SecurityService"
-  xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy"
-  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-  xmlns="http://schemas.xmlsoap.org/wsdl/"
-  xmlns:wsp="http://www.w3.org/ns/ws-policy"
-        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-        xmlns:wsaws="http://www.w3.org/2005/08/addressing"
-        xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-  <types>
-    <xsd:schema>
-      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" schemaLocation="SecurityService_schema1.xsd"/>
-    </xsd:schema>
-  </types>
-  <message name="sayHello">
-    <part name="parameters" element="tns:sayHello"/>
-  </message>
-  <message name="sayHelloResponse">
-    <part name="parameters" element="tns:sayHelloResponse"/>
-  </message>
-  <portType name="ServiceIface">
-    <operation name="sayHello">
-      <input message="tns:sayHello"/>
-      <output message="tns:sayHelloResponse"/>
-    </operation>
-  </portType>
-  <binding name="SecurityServicePortBinding" type="tns:ServiceIface">
-    <wsp:PolicyReference URI="#SecurityServiceSignThenEncryptPolicy"/>
-    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
-    <operation name="sayHello">
-      <soap:operation soapAction=""/>
-      <input>
-        <soap:body use="literal"/>
-      </input>
-      <output>
-        <soap:body use="literal"/>
-      </output>
-    </operation>
-  </binding>
-  <service name="SecurityService">
-    <port name="SecurityServicePort" binding="tns:SecurityServicePortBinding">
-      <soap:address location="http://localhost:8080/jaxws-samples-wssePolicy-sign-encrypt"/>
-    </port>
-  </service>
- 
-  <wsp:Policy wsu:Id="SecurityServiceSignThenEncryptPolicy" xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:AsymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy>
-            <sp:InitiatorToken>
-              <wsp:Policy>
-                <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
-                  <wsp:Policy>
-                    <sp:WssX509V1Token11/>
-                  </wsp:Policy>
-                  </sp:X509Token>
-              </wsp:Policy>
-            </sp:InitiatorToken>
-            <sp:RecipientToken>
-              <wsp:Policy>
-                <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
-                  <wsp:Policy>
-                    <sp:WssX509V1Token11/>
-                  </wsp:Policy>
-                </sp:X509Token>
-              </wsp:Policy>
-            </sp:RecipientToken>
-            <sp:AlgorithmSuite>
-              <wsp:Policy>
-                <sp:TripleDesRsa15/>
-              </wsp:Policy>
-            </sp:AlgorithmSuite>
-            <sp:Layout>
-              <wsp:Policy>
-                <sp:Lax/>
-              </wsp:Policy>
-            </sp:Layout>
-            <sp:IncludeTimestamp/>
-            <sp:EncryptSignature/>
-            <sp:OnlySignEntireHeadersAndBody/>
-            <sp:SignBeforeEncrypting/>
-          </wsp:Policy>
-        </sp:AsymmetricBinding>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body/>
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body/>
-        </sp:EncryptedParts>
-        <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy>
-            <sp:MustSupportRefIssuerSerial/>
-          </wsp:Policy>
-        </sp:Wss10>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-</definitions>
-
-
-
-

The service endpoint can be generated using the wsconsume tool and -then enriched with a @EndpointConfig annotation:

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.basic;
- 
-import jakarta.jws.WebService;
-import org.jboss.ws.api.annotation.EndpointConfig;
- 
-@WebService
-(
-   portName = "SecurityServicePort",
-   serviceName = "SecurityService",
-   wsdlLocation = "WEB-INF/wsdl/SecurityService.wsdl",
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy",
-   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.basic.ServiceIface"
-)
-@EndpointConfig(configFile = "WEB-INF/jaxws-endpoint-config.xml", configName = "Custom WS-Security Endpoint")
-public class ServiceImpl implements ServiceIface
-{
-   public String sayHello()
-   {
-      return "Secure Hello World!";
-   }
-}
-
-
-
-

The referenced jaxws-endpoint-config.xml descriptor is used to provide -a custom endpoint configuration with the required server side -configuration properties; this tells the engine which certificate / key -to use for signature / signature verification and for encryption / -decryption:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
-  <endpoint-config>
-    <config-name>Custom WS-Security Endpoint</config-name>
-    <property>
-      <property-name>ws-security.signature.properties</property-name>
-      <property-value>bob.properties</property-value>
-    </property>
-    <property>
-      <property-name>ws-security.encryption.properties</property-name>
-      <property-value>bob.properties</property-value>
-    </property>
-    <property>
-      <property-name>ws-security.signature.username</property-name>
-      <property-value>bob</property-value>
-    </property>
-    <property>
-      <property-name>ws-security.encryption.username</property-name>
-      <property-value>alice</property-value>
-    </property>
-    <property>
-      <property-name>ws-security.callback-handler</property-name>
-      <property-value>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback</property-value>
-    </property>
-  </endpoint-config>
-</jaxws-config>
-
-
-
-
    -
  1. -

    the bob.properties configuration file is also referenced above; it -includes the WSS4J Crypto properties which in turn link to the keystore -file, type and the alias/password to use for accessing it:

    -
  2. -
-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=PKCS
-org.apache.ws.security.crypto.merlin.keystore.password=password
-org.apache.ws.security.crypto.merlin.keystore.alias=bob
-org.apache.ws.security.crypto.merlin.keystore.file=bob.pkcs12
-
-
-
-

A callback handler for the letting Apache CXF access the keystore is -also provided:

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.basic;
- 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import org.apache.ws.security.WSPasswordCallback;
- 
-public class KeystorePasswordCallback implements CallbackHandler {
-   private Map<String, String> passwords = new HashMap<String, String>();
- 
-   public KeystorePasswordCallback() {
-      passwords.put("alice", "password");
-      passwords.put("bob", "password");
-   }
- 
-   /**
-    * It attempts to get the password from the private
-    * alias/passwords map.
-    */
-   public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
-      for (int i = 0; i < callbacks.length; i++) {
-         WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
- 
-         String pass = passwords.get(pc.getIdentifier());
-         if (pass != null) {
-            pc.setPassword(pass);
-            return;
-         }
-      }
-   }
- 
-   /**
-    * Add an alias/password pair to the callback mechanism.
-    */
-   public void setAliasPassword(String alias, String password) {
-      passwords.put(alias, password);
-   }
-}
-
-
-
-

Assuming the bob.pkcs12 keystore has been properly generated and contains -Bob’s (server) full key (private/certificate + public key) as well as -Alice’s (client) public key, we can proceed to packaging the endpoint. -Here is the expected content (the endpoint is a POJO one in a war -archive, but EJB3 endpoints in jar archives are of course also -supported):

-
-
-
-
alessio@inuyasha /dati/jbossws/stack/cxf/trunk $ jar -tvf ./modules/testsuite/cxf-tests/target/test-libs/jaxws-samples-wsse-policy-sign-encrypt.war
-     0 Thu Jun 16 18:50:48 CEST 2011 META-INF/
-   140 Thu Jun 16 18:50:46 CEST 2011 META-INF/MANIFEST.MF
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/
-   586 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/web.xml
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/
-  1687 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/KeystorePasswordCallback.class
-   383 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/ServiceIface.class
-  1070 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/ServiceImpl.class
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/
-   705 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/SayHello.class
-  1069 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/SayHelloResponse.class
-  1225 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/jaxws-endpoint-config.xml
-     0 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/
-  4086 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/SecurityService.wsdl
-   653 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/SecurityService_schema1.xsd
-  1820 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/classes/bob.pkcs12
-   311 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/classes/bob.properties
-
-
-
-

As you can see, the jaxws classes generated by the tools are of course -also included, as well as a basic web.xml referencing the endpoint -bean:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<web-app
-   version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-   <servlet>
-      <servlet-name>TestService</servlet-name>
-      <servlet-class>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.ServiceImpl</servlet-class>
-   </servlet>
-   <servlet-mapping>
-      <servlet-name>TestService</servlet-name>
-      <url-pattern>/*</url-pattern>
-   </servlet-mapping>
-</web-app>
-
-
-
- - - - - -
- - -If you’re deploying the endpoint archive on WildFly, remember to add a -dependency to org.apache.ws.security module in the MANIFEST.MF file. -
-
-
-
-
Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.1
-Created-By: 17.0-b16 (Sun Microsystems Inc.)
-Dependencies: org.apache.ws.security
-
-
-
-
-Client -
-

You start by consuming the published WSDL contract using the wsconsume -tool on client side too. Then you simply invoke the the endpoint as a -standard Jakarta XML Web Services one:

-
-
-
-
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
-URL wsdlURL = new URL(serviceURL + "?wsdl");
-Service service = Service.create(wsdlURL, serviceName);
-ServiceIface proxy = (ServiceIface)service.getPort(ServiceIface.class);
- 
-((BindingProvider)proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, new KeystorePasswordCallback());
-((BindingProvider)proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES,
-     Thread.currentThread().getContextClassLoader().getResource("META-INF/alice.properties"));
-((BindingProvider)proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES,
-     Thread.currentThread().getContextClassLoader().getResource("META-INF/alice.properties"));
-((BindingProvider)proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "alice");
-((BindingProvider)proxy).getRequestContext().put(SecurityConstants.ENCRYPT_USERNAME, "bob");
- 
-proxy.sayHello();
-
-
-
-

As you can see, the WS-Security properties are set in the request -context. Here the KeystorePasswordCallback is the same as on server -side above, you might want/need different implementation in real world -scenarios, of course.
-The alice.properties file is the client side equivalent of the server -side bob.properties and references the alice.pkcs12 keystore file, -which has been populated with Alice’s (client) full key -(private/certificate + public key) as well as Bob’s (server) public key.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=PKCS12
-org.apache.ws.security.crypto.merlin.keystore.password=password
-org.apache.ws.security.crypto.merlin.keystore.alias=alice
-org.apache.ws.security.crypto.merlin.keystore.file=META-INF/alice.pkcs12
-
-
-
-

The Apache CXF WS-Policy engine will digest the security requirements in -the contract and ensure a valid secure communication is in place for -interacting with the server endpoint.

-
-
-
-Endpoint serving multiple clients -
-

The server side configuration described above implies the endpoint is -configured for serving a given client which a service agreement has been -established for. In some real world scenarios though, the same server -might be expected to be able to deal with (including decrypting and -encrypting) messages coming from and being sent to multiple clients. -Apache CXF supports that through the useReqSigCert value for the -ws-security.encryption.username configuration parameter.

-
-
-

Of course the referenced server side keystore then needs to contain the -public key of all the clients that are expected to be served.

-
-
-
-
-
Authentication and authorization
-
-

The Username Token Profile can be used to provide client’s credentials -to a WS-Security enabled target endpoint.

-
-
-

Apache CXF provides means for setting basic password callback handlers -on both client and server sides to set/check passwords; the -ws-security.username and ws-security.callback-handler properties can -be used similarly as shown in the signature and encryption example. -Things become more interesting when requiring a given user to be -authenticated (and authorized) against a security domain on the target -application server.

-
-
-

On server side, you need to install two additional interceptors that act -as bridges towards the application server authentication layer:

-
-
-
    -
  • -

    an interceptor for performing authentication and populating a valid -SecurityContext; the provided interceptor should extend -org.apache.cxf.ws.interceptor.security.AbstractUsernameTokenInInterceptor, -in particular JBossWS integration comes with -org.jboss.wsf.stack.cxf.security.authentication.SubjectCreatingInterceptor -for this;

    -
  • -
  • -

    an interceptor for performing authorization; CXF requires that to -extend -org.apache.cxf.interceptor.security.AbstractAuthorizingInInterceptor, -for instance the SimpleAuthorizingInterceptor can be used for simply -mapping endpoint operations to allowed roles.

    -
  • -
-
-
-

So, here follows an example of WS-SecurityPolicy endpoint using Username -Token Profile for authenticating through the application server security -domain system.

-
-
-Endpoint -
-

As in the other example, we start with a wsdl contract containing the -proper WS-Security Policy:

-
-
-
-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" name="SecurityService"
-  xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy"
-  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-  xmlns="http://schemas.xmlsoap.org/wsdl/"
-  xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
-        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-        xmlns:wsaws="http://www.w3.org/2005/08/addressing">
-  <types>
-    <xsd:schema>
-      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" schemaLocation="SecurityService_schema1.xsd"/>
-    </xsd:schema>
-  </types>
-  <message name="sayHello">
-    <part name="parameters" element="tns:sayHello"/>
-  </message>
-  <message name="sayHelloResponse">
-    <part name="parameters" element="tns:sayHelloResponse"/>
-  </message>
-  <message name="greetMe">
-    <part name="parameters" element="tns:greetMe"/>
-  </message>
-  <message name="greetMeResponse">
-    <part name="parameters" element="tns:greetMeResponse"/>
-  </message>
-  <portType name="ServiceIface">
-    <operation name="sayHello">
-      <input message="tns:sayHello"/>
-      <output message="tns:sayHelloResponse"/>
-    </operation>
-    <operation name="greetMe">
-      <input message="tns:greetMe"/>
-      <output message="tns:greetMeResponse"/>
-    </operation>
-  </portType>
-  <binding name="SecurityServicePortBinding" type="tns:ServiceIface">
-    <wsp:PolicyReference URI="#SecurityServiceUsernameUnsecureTransportPolicy"/>
-    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
-    <operation name="sayHello">
-      <soap:operation soapAction=""/>
-      <input>
-        <soap:body use="literal"/>
-      </input>
-      <output>
-        <soap:body use="literal"/>
-      </output>
-    </operation>
-    <operation name="greetMe">
-      <soap:operation soapAction=""/>
-      <input>
-        <soap:body use="literal"/>
-      </input>
-      <output>
-        <soap:body use="literal"/>
-      </output>
-    </operation>
-  </binding>
-  <service name="SecurityService">
-    <port name="SecurityServicePort" binding="tns:SecurityServicePortBinding">
-      <soap:address location="http://localhost:8080/jaxws-samples-wsse-username-jaas"/>
-    </port>
-  </service>
- 
-  <wsp:Policy wsu:Id="SecurityServiceUsernameUnsecureTransportPolicy">
-        <wsp:ExactlyOne>
-            <wsp:All>
-                <sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-                    <wsp:Policy>
-                        <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-                            <wsp:Policy>
-                                <sp:WssUsernameToken10/>
-                            </wsp:Policy>
-                        </sp:UsernameToken>
-                    </wsp:Policy>
-                </sp:SupportingTokens>
-            </wsp:All>
-        </wsp:ExactlyOne>
-    </wsp:Policy>
- 
-</definitions>
-
-
-
- - - - - -
- - -If you want to send hash / digest passwords, you can use a policy such -as what follows: -
-
-
-
-
<wsp:Policy wsu:Id="SecurityServiceUsernameHashPasswordPolicy">
-    <wsp:ExactlyOne>
-        <wsp:All>
-            <sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-                <wsp:Policy>
-                    <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-                        <wsp:Policy>
-                            <sp:HashPassword/>
-                        </wsp:Policy>
-                    </sp:UsernameToken>
-                </wsp:Policy>
-            </sp:SupportingTokens>
-        </wsp:All>
-    </wsp:ExactlyOne>
-</wsp:Policy>
-
-
-
-

Please note the specified JBoss security domain needs to be properly -configured for computing digests.

-
-
-

The service endpoint can be generated using the wsconsume tool and -then enriched with a @EndpointConfig annotation and @InInterceptors -annotation to add the two interceptors mentioned above for JAAS -integration:

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.jaas;
- 
-import jakarta.jws.WebService;
-import org.apache.cxf.interceptor.InInterceptors;
-import org.jboss.ws.api.annotation.EndpointConfig;
- 
-@WebService
-(
-   portName = "SecurityServicePort",
-   serviceName = "SecurityService",
-   wsdlLocation = "WEB-INF/wsdl/SecurityService.wsdl",
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy",
-   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.jaas.ServiceIface"
-)
-@EndpointConfig(configFile = "WEB-INF/jaxws-endpoint-config.xml", configName = "Custom WS-Security Endpoint")
-@InInterceptors(interceptors = {
-      "org.jboss.wsf.stack.cxf.security.authentication.SubjectCreatingPolicyInterceptor",
-      "org.jboss.test.ws.jaxws.samples.wsse.policy.jaas.POJOEndpointAuthorizationInterceptor"}
-)
-public class ServiceImpl implements ServiceIface
-{
-   public String sayHello()
-   {
-      return "Secure Hello World!";
-   }
- 
-   public String greetMe()
-   {
-      return "Greetings!";
-   }
-}
-
-
-
-

The POJOEndpointAuthorizationInterceptor is included into the -deployment and deals with the roles cheks:

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.jaas;
- 
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.cxf.interceptor.security.SimpleAuthorizingInterceptor;
- 
-public class POJOEndpointAuthorizationInterceptor extends SimpleAuthorizingInterceptor
-{
- 
-   public POJOEndpointAuthorizationInterceptor()
-   {
-      super();
-      readRoles();
-   }
- 
-   private void readRoles()
-   {
-      //just an example, this might read from a configuration file or such
-      Map<String, String> roles = new HashMap<String, String>();
-      roles.put("sayHello", "friend");
-      roles.put("greetMe", "snoopies");
-      setMethodRolesMap(roles);
-   }
-}
-
-
-
-

The jaxws-endpoint-config.xml descriptor is used to provide a custom -endpoint configuration with the required server side configuration -properties; in particular for this Username Token case that’s just a CXF -configuration option for leaving the username token validation to the -configured interceptors:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
-  <endpoint-config>
-    <config-name>Custom WS-Security Endpoint</config-name>
-    <property>
-      <property-name>ws-security.validate.token</property-name>
-      <property-value>false</property-value>
-    </property>
-  </endpoint-config>
-</jaxws-config>
-
-
-
-

In order for requiring a given JBoss security domain to be used to -protect access to the endpoint (a POJO one in this case), we declare -that in a jboss-web.xml descriptor (the JBossWS security domain is -used):

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_4_0.dtd">
-<jboss-web>
-   <security-domain>java:/jaas/JBossWS</security-domain>
-</jboss-web
-
-
-
-

Finally, the web.xml is as simple as usual:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<web-app
-   version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-   <servlet>
-      <servlet-name>TestService</servlet-name>
-      <servlet-class>org.jboss.test.ws.jaxws.samples.wsse.policy.jaas.ServiceImpl</servlet-class>
-   </servlet>
-   <servlet-mapping>
-      <servlet-name>TestService</servlet-name>
-      <url-pattern>/*</url-pattern>
-   </servlet-mapping>
-</web-app>
-
-
-
-

The endpoint is packaged into a war archive, including the JAXWS classes -generated by wsconsume:

-
-
-
-
alessio@inuyasha /dati/jbossws/stack/cxf/trunk $ jar -tvf ./modules/testsuite/cxf-tests/target/test-libs/jaxws-samples-wsse-policy-username-jaas.war
-     0 Thu Jun 16 18:50:48 CEST 2011 META-INF/
-   155 Thu Jun 16 18:50:46 CEST 2011 META-INF/MANIFEST.MF
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/
-   585 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/web.xml
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaas/
-   982 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaas/POJOEndpointAuthorizationInterceptor.class
-   412 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaas/ServiceIface.class
-  1398 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaas/ServiceImpl.class
-     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/
-   701 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/GreetMe.class
-  1065 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/GreetMeResponse.class
-   705 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/SayHello.class
-  1069 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/SayHelloResponse.class
-   556 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/jaxws-endpoint-config.xml
-   241 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/jboss-web.xml
-     0 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/
-  3183 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/SecurityService.wsdl
-  1012 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/SecurityService_schema1.xsd
-
-
-
- - - - - -
- - -If you’re deploying the endpoint archive on WildFly, remember to add a -dependency to org.apache.ws.security and org.apache.cxf module (due -to the @InInterceptor annotation) in the MANIFEST.MF file. -
-
-
-
-
Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.1
-Created-By: 17.0-b16 (Sun Microsystems Inc.)
-Dependencies: org.apache.ws.security,org.apache.cxf
-
-
-
-
-Client -
-

Here too you start by consuming the published WSDL contract using the -wsconsume tool. Then you simply invoke the the endpoint as a standard -Jakarta XML Web Services one:

-
-
-
-
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
-URL wsdlURL = new URL(serviceURL + "?wsdl");
-Service service = Service.create(wsdlURL, serviceName);
-ServiceIface proxy = (ServiceIface)service.getPort(ServiceIface.class);
- 
-((BindingProvider)proxy).getRequestContext().put(SecurityConstants.USERNAME, "kermit");
-((BindingProvider)proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER,
-      "org.jboss.test.ws.jaxws.samples.wsse.policy.jaas.UsernamePasswordCallback");
- 
-proxy.sayHello();
-
-
-
-

The UsernamePasswordCallback class is shown below and is responsible -for setting the passwords on client side just before performing the -invocations:

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.jaas;
- 
-import java.io.IOException;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import org.apache.ws.security.WSPasswordCallback;
- 
-public class UsernamePasswordCallback implements CallbackHandler
-{
-   public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
-   {
-      WSPasswordCallback pc = (WSPasswordCallback)callbacks[0];
-      if ("kermit".equals(pc.getIdentifier()))
-         pc.setPassword("thefrog");
-   }
-}
-
-
-
-

If everything has been done properly, you should expect to calls to -sayHello() fail when done with user "snoopy" and pass with user -"kermit" (and credential "thefrog"); moreover, you should get an -authorization error when trying to call greetMe() with user "kermit", -as that does not have the "snoopies" role.

-
-
-
-
-
Secure transport
-
-

Another quite common use case is using WS-Security Username Token -Profile over a secure transport (HTTPS). A scenario like this is -implemented similarly to what’s described in the previous example, -except for few differences explained below.

-
-
-

First of all, here is an excerpt of a wsdl wth a sample security policy -for Username Token over HTTPS:

-
-
-
-
...
- 
-<binding name="SecurityServicePortBinding" type="tns:ServiceIface"><wsp:PolicyReference URI="#SecurityServiceBindingPolicy"/><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><operation name="sayHello">
-    <soap:operation soapAction=""/>
-    <input>
-      <soap:body use="literal"/>
-    </input>
-    <output>
-      <soap:body use="literal"/>
-    </output></operation>
-</binding>
-<service name="SecurityService">
-   <port name="SecurityServicePort" binding="tns:SecurityServicePortBinding">
-      <soap:address location="https://localhost:8443/jaxws-samples-wsse-policy-username"/>
-   </port>
-</service>
- 
-<wsp:Policy wsu:Id="SecurityServiceBindingPolicy">
-   <wsp:ExactlyOne>
-      <wsp:All>
-         <foo:unknownPolicy xmlns:foo="http://cxf.apache.org/not/a/policy"/>
-      </wsp:All>
-      <wsp:All>
-         <wsaws:UsingAddressing xmlns:wsaws="http://www.w3.org/2006/05/addressing/wsdl"/>
-         <sp:TransportBinding>
-            <wsp:Policy>
-               <sp:TransportToken>
-                  <wsp:Policy>
-                     <sp:HttpsToken RequireClientCertificate="false"/>
-                  </wsp:Policy>
-               </sp:TransportToken>
-               <sp:Layout>
-                  <wsp:Policy>
-                     <sp:Lax/>
-                  </wsp:Policy>
-               </sp:Layout>
-               <sp:IncludeTimestamp/>
-               <sp:AlgorithmSuite>
-                  <wsp:Policy>
-                     <sp:Basic128/>
-                  </wsp:Policy>
-               </sp:AlgorithmSuite>
-            </wsp:Policy>
-         </sp:TransportBinding>
-         <sp:Wss10>
-            <wsp:Policy>
-               <sp:MustSupportRefKeyIdentifier/>
-            </wsp:Policy>
-         </sp:Wss10>
-         <sp:SignedSupportingTokens>
-            <wsp:Policy>
-               <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
-                  <wsp:Policy>
-                     <sp:WssUsernameToken10/>
-                  </wsp:Policy>
-               </sp:UsernameToken>
-            </wsp:Policy>
-         </sp:SignedSupportingTokens>
-      </wsp:All>
-   </wsp:ExactlyOne>
-</wsp:Policy>
-
-
-
-

The endpoint then needs of course to be actually available on HTTPS -only, so we have a web.xml setting the transport-guarantee such as -below:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<web-app
-   version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-   <servlet>
-      <servlet-name>TestService</servlet-name>
-      <servlet-class>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.ServiceImpl</servlet-class>
-   </servlet>
-   <servlet-mapping>
-      <servlet-name>TestService</servlet-name>
-      <url-pattern>/*</url-pattern>
-   </servlet-mapping>
- 
-   <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>TestService</web-resource-name>
-      <url-pattern>/*</url-pattern>
-    </web-resource-collection>
-    <user-data-constraint>
-      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
-    </user-data-constraint>
-  </security-constraint>
-</web-app>
-
-
-
-
-
Secure conversation
-
-

Apache CXF supports -WS-SecureConversation -specification, which is about improving performance by allowing client -and server to negotiate initial security keys to be used for later -communication encryption/signature. This is done by having two policies -in the wsdl contract, an outer one setting the security requirements to -actually communicate with the endpoint and a bootstrap one, related to -the communication for establishing the secure conversation keys. The -client will be automatically sending an initial message to the server -for negotiating the keys, then the actual communication to the endpoint -takes place. As a consequence, Apache CXF needs a way to specify which -WS-Security configuration properties are intended for the bootstrap -policy and which are intended for the actual service policy. To -accomplish this, properties intended for the bootstrap policy are -appended with .sct.

-
-
-
-
...
-((BindingProvider)proxy).getRequestContext().put("ws-security.signature.username.sct", "alice");
-((BindingProvider)proxy).getRequestContext().put("ws-security.encryption.username.sct", "bob");
-...
-
-
-
-
-
@WebService(
-   ...
-)
-@EndpointProperties(value = {
-      @EndpointProperty(key = "ws-security.encryption.properties.sct", value = "bob.properties"),
-      @EndpointProperty(key = "ws-security.signature.properties.sct", value = "bob.properties"),
-      ...
-      }
-)
-public class ServiceImpl implements ServiceIface {
-   ...
-}
-
-
-
-
-
-
-

17.5.13. WS-Trust and STS

-
-
WS-Trust overview
-
-

WS-Trust is a Web -service specification that defines extensions to WS-Security. It is a -general framework for implementing security in a distributed system. The -standard is based on a centralized Security Token Service, STS, which is -capable of authenticating clients and issuing tokens containing various -kinds of authentication and authorization data. The specification -describes a protocol used for issuance, exchange, and validation of -security tokens, however the following specifications play an important -role in the WS-Trust architecture: -WS-SecurityPolicy -1.2, -SAML -2.0, -Username -Token Profile, -X.509 -Token Profile, -SAML -Token Profile, and -Kerberos -Token Profile.

-
-
-

The WS-Trust extensions address the needs of applications that span -multiple domains and requires the sharing of security keys by providing -a standards based trusted third party web service (STS) to broker trust -relationships between a Web service requester and a Web service -provider. This architecture also alleviates the pain of service updates -that require credential changes by providing a common location for this -information. The STS is the common access point from which both the -requester and provider retrieves and verifies security tokens.

-
-
-

There are three main components of the WS-Trust specification.

-
-
-
    -
  • -

    The Security Token Service (STS), a web service that issues, renews, -and validates security tokens.

    -
  • -
  • -

    The message formats for security token requests and responses.

    -
  • -
  • -

    The mechanisms for key exchange

    -
  • -
-
-
-
-
Security Token Service
-
-

The Security Token Service, STS, is the core of the WS-Trust -specification. It is a standards based mechanism for authentication and -authorization. The STS is an implementation of the WS-Trust -specification’s protocol for issuing, exchanging, and validating -security tokens, based on token format, namespace, or trust boundaries. -The STS is a web service that acts as a trusted third party to broker -trust relationships between a Web service requester and a Web service -provider. It is a common access point trusted by both requester and -provider to provide interoperable security tokens. It removes the need -for a direct relationship between the two. Because the STS is a -standards based mechanism for authentication, it helps ensure -interoperability across realms and between different platforms.

-
-
-

The STS’s WSDL contract defines how other applications and processes -interact with it. In particular the WSDL defines the WS-Trust and -WS-Security policies that a requester must fulfill in order to -successfully communicate with the STS’s endpoints. A web service -requester consumes the STS’s WSDL and with the aid of an STSClient -utility, generates a message request compliant with the stated security -policies and submits it to the STS endpoint. The STS validates the -request and returns an appropriate response.

-
-
-
-
Apache CXF support
-
-

Apache CXF is an open-source, fully featured Web services framework. The -JBossWS open source project integrates the JBoss Web Services (JBossWS) -stack with the Apache CXF project modules thus providing WS-Trust and -other Jakarta XML Web Services functionality in WildFly. This integration makes it easy to -deploy CXF STS implementations, however WildFly can run any WS-Trust -compliant STS. In addition the Apache CXF API provides a STSClient -utility to facilitate web service requester communication with its STS.

-
-
-

Detailed information about the Apache CXF’s WS-Trust implementation can -be found -here.

-
-
-
-
A Basic WS-Trust Scenario
-
-

Here is an example of a basic WS-Trust scenario. It is comprised of a -Web service requester (ws-requester), a Web service provider -(ws-provider), and a Security Token Service (STS). The ws-provider -requires a SAML 2.0 token issued from a designed STS to be presented by -the ws-requester using asymmetric binding. These communication -requirements are declared in the ws-provider’s WSDL. The STS requires -ws-requester credentials be provided in a WSS UsernameToken format -request using symmetric binding. The STS’s response is provided -containing a SAML 2.0 token. These communication requirements are -declared in the STS’s WSDL.

-
-
-
    -
  1. -

    A ws-requester contacts the ws-provider and consumes its WSDL. Upon -finding the security token issuer requirement, it creates and configures -a STSClient with the information it requires to generate a proper -request.

    -
  2. -
  3. -

    The STSClient contacts the STS and consumes its WSDL. The security -policies are discovered. The STSClient creates and sends an -authentication request, with appropriate credentials.

    -
  4. -
  5. -

    The STS verifies the credentials.

    -
  6. -
  7. -

    In response, the STS issues a security token that provides proof -that the ws-requester has authenticated with the STS.

    -
  8. -
  9. -

    The STClient presents a message with the security token to the -ws-provider.

    -
  10. -
  11. -

    The ws-provider verifies the token was issued by the STS, thus -proving the ws-requester has successfully authenticated with the STS.

    -
  12. -
  13. -

    The ws-provider executes the requested service and returns the -results to the the ws-requester.

    -
  14. -
-
-
-
Web service provider
-
-

This section examines the crucial elements in providing endpoint -security in the web service provider described in the basic WS-Trust -scenario. The components that will be discussed are.

-
-
-
    -
  • -

    web service provider’s WSDL

    -
  • -
  • -

    web service provider’s Interface and Implementation classes.

    -
  • -
  • -

    ServerCallbackHandler class

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
  • -

    MANIFEST.MF

    -
  • -
-
-
-Web service provider WSDL -
-

The web service provider is a contract-first endpoint. All the WS-trust -and security policies for it are declared in the WSDL, -SecurityService.wsdl. For this scenario a ws-requester is required to -present a SAML 2.0 token issued from a designed STS. The address of the -STS is provided in the WSDL. An asymmetric binding policy is used to -encrypt and sign the SOAP body of messages that pass back and forth -between ws-requester and ws-provider. X.509 certificates are use for the -asymmetric binding. The rules for sharing the public and private keys in -the SOAP request and response messages are declared. A detailed -explanation of the security settings are provided in the comments in the -listing below.

-
-
-
-
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" name="SecurityService"
-        xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy"
-        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-        xmlns="http://schemas.xmlsoap.org/wsdl/"
-        xmlns:wsp="http://www.w3.org/ns/ws-policy"
-        xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
-        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-        xmlns:wsaws="http://www.w3.org/2005/08/addressing"
-        xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
-        xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
-  <types>
-    <xsd:schema>
-      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" schemaLocation="SecurityService_schema1.xsd"/>
-    </xsd:schema>
-  </types>
-  <message name="sayHello">
-    <part name="parameters" element="tns:sayHello"/>
-  </message>
-  <message name="sayHelloResponse">
-    <part name="parameters" element="tns:sayHelloResponse"/>
-  </message>
-  <portType name="ServiceIface">
-    <operation name="sayHello">
-      <input message="tns:sayHello"/>
-      <output message="tns:sayHelloResponse"/>
-    </operation>
-  </portType>
-  <!--
-        The wsp:PolicyReference binds the security requirments on all the STS endpoints.
-        The wsp:Policy wsu:Id="#AsymmetricSAML2Policy" element is defined later in this file.
-  -->
-  <binding name="SecurityServicePortBinding" type="tns:ServiceIface">
-    <wsp:PolicyReference URI="#AsymmetricSAML2Policy" />
-    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
-    <operation name="sayHello">
-      <soap:operation soapAction=""/>
-      <input>
-        <soap:body use="literal"/>
-        <wsp:PolicyReference URI="#Input_Policy" />
-      </input>
-      <output>
-        <soap:body use="literal"/>
-        <wsp:PolicyReference URI="#Output_Policy" />
-      </output>
-    </operation>
-  </binding>
-  <service name="SecurityService">
-    <port name="SecurityServicePort" binding="tns:SecurityServicePortBinding">
-      <soap:address location="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust/SecurityService"/>
-    </port>
-  </service>
-
-  <wsp:Policy wsu:Id="AsymmetricSAML2Policy">
-        <wsp:ExactlyOne>
-            <wsp:All>
-  <!--
-        The wsam:Addressing element, indicates that the endpoints of this
-        web service MUST conform to the WS-Addressing specification.  The
-        attribute wsp:Optional="false" enforces this assertion.
-  -->
-                <wsam:Addressing wsp:Optional="false">
-                    <wsp:Policy />
-                </wsam:Addressing>
-  <!--
-        The sp:AsymmetricBinding element indicates that security is provided
-        at the SOAP layer. A public/private key combinations is required to
-        protect the message.  The initiator will use it's private key to sign
-        the message and the recipient's public key is used to encrypt the message.
-        The recipient of the message will use it's private key to decrypt it and
-        initiator's public key to verify the signature.
-  -->
-                <sp:AsymmetricBinding>
-                    <wsp:Policy>
-  <!--
-        The sp:InitiatorToken element specifies the elements required in
-        generating the initiator request to the ws-provider's service.
-  -->
-                        <sp:InitiatorToken>
-                            <wsp:Policy>
-  <!--
-        The sp:IssuedToken element asserts that a SAML 2.0 security token is
-        expected from the STS using a public key type.  The
-        sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-        attribute instructs the runtime to include the initiator's public key
-        with every message sent to the recipient.
-
-        The sp:RequestSecurityTokenTemplate element directs that all of the
-        children of this element will be copied directly into the body of the
-        RequestSecurityToken (RST) message that is sent to the STS when the
-        initiator asks the STS to issue a token.
-  -->
-                                <sp:IssuedToken
-                                    sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-                                    <sp:RequestSecurityTokenTemplate>
-                                        <t:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</t:TokenType>
-                                        <t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/PublicKey</t:KeyType>
-                                    </sp:RequestSecurityTokenTemplate>
-                                    <wsp:Policy>
-                                        <sp:RequireInternalReference />
-                                    </wsp:Policy>
-  <!--
-        The sp:Issuer element defines the STS's address and endpoint information
-        This information is used by the STSClient.
-  -->
-                                    <sp:Issuer>
-                                        <wsaws:Address>http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts/SecurityTokenService</wsaws:Address>
-                                        <wsaws:Metadata xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
-                                                        wsdli:wsdlLocation="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts/SecurityTokenService?wsdl">
-                                            <wsaw:ServiceName xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
-                                                            xmlns:stsns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-                                                            EndpointName="UT_Port">stsns:SecurityTokenService</wsaw:ServiceName>
-                                        </wsaws:Metadata>
-                                    </sp:Issuer>
-                                </sp:IssuedToken>
-                            </wsp:Policy>
-                        </sp:InitiatorToken>
-  <!--
-        The sp:RecipientToken element asserts the type of public/private key-pair
-        expected from the recipient.  The
-        sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
-        attribute indicates that the initiator's public key will never be included
-        in the reply messages.
- 
-        The sp:WssX509V3Token10 element indicates that an X509 Version 3 token
-        should be used in the message.
-  -->
-                        <sp:RecipientToken>
-                            <wsp:Policy>
-                                <sp:X509Token
-                                    sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
-                                    <wsp:Policy>
-                                        <sp:WssX509V3Token10 />
-                                        <sp:RequireIssuerSerialReference />
-                                    </wsp:Policy>
-                                </sp:X509Token>
-                            </wsp:Policy>
-                        </sp:RecipientToken>
-<!--
-     The sp:Layout element,  indicates the layout rules to apply when adding
-     items to the security header.  The sp:Lax sub-element indicates items
-     are added to the security header in any order that conforms to
-     WSS: SOAP Message Security.
--->
-                        <sp:Layout>
-                            <wsp:Policy>
-                                <sp:Lax />
-                            </wsp:Policy>
-                        </sp:Layout>
-                        <sp:IncludeTimestamp />
-                        <sp:OnlySignEntireHeadersAndBody />
- <!--
-     The sp:AlgorithmSuite element, requires the Basic256 algorithm suite
-     be used in performing cryptographic operations.
--->
-                        <sp:AlgorithmSuite>
-                            <wsp:Policy>
-                                <sp:Basic256 />
-                            </wsp:Policy>
-                        </sp:AlgorithmSuite>
-                    </wsp:Policy>
-                </sp:AsymmetricBinding>
-<!--
-    The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
-    to be supported by the STS.  These particular elements generally refer
-    to how keys are referenced within the SOAP envelope.  These are normally
-    handled by CXF.
--->
-                <sp:Wss11>
-                    <wsp:Policy>
-                        <sp:MustSupportRefIssuerSerial />
-                        <sp:MustSupportRefThumbprint />
-                        <sp:MustSupportRefEncryptedKey />
-                    </wsp:Policy>
-                </sp:Wss11>
-<!--
-    The sp:Trust13 element declares controls for WS-Trust 1.3 options.
-    They are policy assertions related to exchanges specifically with
-    client and server challenges and entropy behaviors.  Again these are
-    normally handled by CXF.
--->
-                <sp:Trust13>
-                    <wsp:Policy>
-                        <sp:MustSupportIssuedTokens />
-                        <sp:RequireClientEntropy />
-                        <sp:RequireServerEntropy />
-                    </wsp:Policy>
-                </sp:Trust13>
-            </wsp:All>
-        </wsp:ExactlyOne>
-    </wsp:Policy>
-
-    <wsp:Policy wsu:Id="Input_Policy">
-        <wsp:ExactlyOne>
-            <wsp:All>
-                <sp:EncryptedParts>
-                    <sp:Body />
-                </sp:EncryptedParts>
-                <sp:SignedParts>
-                    <sp:Body />
-                    <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-                </sp:SignedParts>
-            </wsp:All>
-        </wsp:ExactlyOne>
-    </wsp:Policy>
-
-    <wsp:Policy wsu:Id="Output_Policy">
-        <wsp:ExactlyOne>
-            <wsp:All>
-                <sp:EncryptedParts>
-                    <sp:Body />
-                </sp:EncryptedParts>
-                <sp:SignedParts>
-                    <sp:Body />
-                    <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                    <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-                </sp:SignedParts>
-            </wsp:All>
-        </wsp:ExactlyOne>
-    </wsp:Policy>
-</definitions>
-
-
-
-
-Web service provider Interface -
-

The web service provider interface class, ServiceIface, is a simple -straight forward web service definition.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service;
- 
-import jakarta.jws.WebMethod;
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy"
-)
-public interface ServiceIface
-{
-   @WebMethod
-   String sayHello();
-}
-
-
-
-
-Web service provider Implementation -
-

The web service provider implementation class, ServiceImpl, is a simple -POJO. It uses the standard WebService annotation to define the service -endpoint. In addition there are two Apache CXF annotations, -EndpointProperties and EndpointProperty used for configuring the -endpoint for the CXF runtime. These annotations come from the -Apache WSS4J project, which provides a -Java implementation of the primary WS-Security standards for Web -Services. These annotations are programmatically adding properties to -the endpoint. With plain Apache CXF, these properties are often set via -the <jaxws:properties> element on the <jaxws:endpoint> element in the -Spring config; these annotations allow the properties to be configured -in the code.

-
-
-

WSS4J uses the Crypto interface to get keys and certificates for -encryption/decryption and for signature creation/verification. As is -asserted by the WSDL, X509 keys and certificates are required for this -service. The WSS4J configuration information being provided by -ServiceImpl is for Crypto’s Merlin implementation. More information will -be provided about this in the keystore section.

-
-
-

The first EndpointProperty statement in the listing is declaring the -user’s name to use for the message signature. It is used as the alias -name in the keystore to get the user’s cert and private key for -signature. The next two EndpointProperty statements declares the Java -properties file that contains the (Merlin) crypto configuration -information. In this case both for signing and encrypting the messages. -WSS4J reads this file and extra required information for message -handling. The last EndpointProperty statement declares the -ServerCallbackHandler implementation class. It is used to obtain the -user’s password for the certificates in the keystore file.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service;
- 
-import jakarta.jws.WebService;
- 
-import org.apache.cxf.annotations.EndpointProperties;
-import org.apache.cxf.annotations.EndpointProperty;
- 
-@WebService
-(
-   portName = "SecurityServicePort",
-   serviceName = "SecurityService",
-   wsdlLocation = "WEB-INF/wsdl/SecurityService.wsdl",
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy",
-   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service.ServiceIface"
-)
-@EndpointProperties(value = {
-      @EndpointProperty(key = "ws-security.signature.username", value = "myservicekey"),
-      @EndpointProperty(key = "ws-security.signature.properties", value = "serviceKeystore.properties"),
-      @EndpointProperty(key = "ws-security.encryption.properties", value = "serviceKeystore.properties"),
-      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service.ServerCallbackHandler")
-})
-public class ServiceImpl implements ServiceIface
-{
-   public String sayHello()
-   {
-      return "WS-Trust Hello World!";
-   }
-}
-
-
-
-
-ServerCallbackHandler -
-

ServerCallbackHandler is a callback handler for the WSS4J Crypto API. It -is used to obtain the password for the private key in the keystore. This -class enables CXF to retrieve the password of the user name to use for -the message signature. A certificates' password is not discoverable. The -creator of the certificate must record the password he assigns and -provide it when requested through the CallbackHandler. In this scenario -skpass is the password for user myservicekey.

-
-
-
-
 package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service;
- 
-import java.util.HashMap;
-import java.util.Map;
- 
-import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
- 
-public class ServerCallbackHandler extends PasswordCallbackHandler
-{
- 
-   public ServerCallbackHandler()
-   {
-      super(getInitMap());
-   }
- 
-   private static Map<String, String> getInitMap()
-   {
-      Map<String, String> passwords = new HashMap<String, String>();
-      passwords.put("myservicekey", "skpass");
-      return passwords;
-   }
-}
-
-
-
-
-Crypto properties and keystore files -
-

WSS4J’s Crypto implementation is loaded and configured via a Java -properties file that contains Crypto configuration data. The file -contains implementation-specific properties such as a keystore location, -password, default alias and the like. This application is using the -Merlin implementation. File serviceKeystore.properties contains this -information.

-
-
-

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains -self signed certificates for myservicekey and mystskey. Self signed -certificates are not appropriate for production use.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=sspass
-org.apache.ws.security.crypto.merlin.keystore.alias=myservicekey
-org.apache.ws.security.crypto.merlin.keystore.file=servicestore.jks
-
-
-
-
-MANIFEST.MF -
-

When deployed on WildFly this application requires access to the JBossWs -and CXF APIs provided in module org.jboss.ws.cxf.jbossws-cxf-client. The -dependency statement directs the server to provide them at deployment.

-
-
-
-
Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.8.2
-Created-By: 1.7.0_25-b15 (Oracle Corporation)
-Dependencies: org.jboss.ws.cxf.jbossws-cxf-client
-
-
-
-
-
-
Security Token Service (STS)
-
-

This section examines the crucial elements in providing the Security -Token Service functionality described in the basic WS-Trust scenario. -The components that will be discussed are.

-
-
-
    -
  • -

    STS’s WSDL

    -
  • -
  • -

    STS’s implementation class.

    -
  • -
  • -

    STSCallbackHandler class

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
  • -

    MANIFEST.MF

    -
  • -
  • -

    Server configuration files

    -
  • -
-
-
-STS WSDL -
-

The STS is a contract-first endpoint. All the WS-trust and security -policies for it are declared in the WSDL, ws-trust-1.4-service.wsdl. A -symmetric binding policy is used to encrypt and sign the SOAP body of -messages that pass back and forth between ws-requester and the STS. The -ws-requester is required to authenticate itself by providing WSS -UsernameToken credentials. The rules for sharing the public and private -keys in the SOAP request and response messages are declared. A detailed -explanation of the security settings are provided in the comments in the -listing below.

-
-
-
-
 <?xml version="1.0" encoding="UTF-8"?>
-<wsdl:definitions
-        targetNamespace="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-        xmlns:tns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-        xmlns:wstrust="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-        xmlns:wsap10="http://www.w3.org/2006/05/addressing/wsdl"
-        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-        xmlns:wsp="http://www.w3.org/ns/ws-policy"
-    xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
-    xmlns:xs="http://www.w3.org/2001/XMLSchema"
-    xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
- 
-  <wsdl:types>
-    <xs:schema elementFormDefault="qualified" targetNamespace='http://docs.oasis-open.org/ws-sx/ws-trust/200512'>
- 
-      <xs:element name='RequestSecurityToken' type='wst:AbstractRequestSecurityTokenType' />
-      <xs:element name='RequestSecurityTokenResponse' type='wst:AbstractRequestSecurityTokenType' />
- 
-      <xs:complexType name='AbstractRequestSecurityTokenType' >
-        <xs:sequence>
-          <xs:any namespace='##any' processContents='lax' minOccurs='0' maxOccurs='unbounded' />
-        </xs:sequence>
-        <xs:attribute name='Context' type='xs:anyURI' use='optional' />
-        <xs:anyAttribute namespace='##other' processContents='lax' />
-      </xs:complexType>
-      <xs:element name='RequestSecurityTokenCollection' type='wst:RequestSecurityTokenCollectionType' />
-      <xs:complexType name='RequestSecurityTokenCollectionType' >
-        <xs:sequence>
-          <xs:element name='RequestSecurityToken' type='wst:AbstractRequestSecurityTokenType' minOccurs='2' maxOccurs='unbounded'/>
-        </xs:sequence>
-      </xs:complexType>
- 
-      <xs:element name='RequestSecurityTokenResponseCollection' type='wst:RequestSecurityTokenResponseCollectionType' />
-      <xs:complexType name='RequestSecurityTokenResponseCollectionType' >
-        <xs:sequence>
-          <xs:element ref='wst:RequestSecurityTokenResponse' minOccurs='1' maxOccurs='unbounded' />
-        </xs:sequence>
-        <xs:anyAttribute namespace='##other' processContents='lax' />
-      </xs:complexType>
- 
-    </xs:schema>
-  </wsdl:types>
- 
-  <!-- WS-Trust defines the following GEDs -->
-  <wsdl:message name="RequestSecurityTokenMsg">
-    <wsdl:part name="request" element="wst:RequestSecurityToken" />
-  </wsdl:message>
-  <wsdl:message name="RequestSecurityTokenResponseMsg">
-    <wsdl:part name="response"
-            element="wst:RequestSecurityTokenResponse" />
-  </wsdl:message>
-  <wsdl:message name="RequestSecurityTokenCollectionMsg">
-    <wsdl:part name="requestCollection"
-            element="wst:RequestSecurityTokenCollection"/>
-  </wsdl:message>
-  <wsdl:message name="RequestSecurityTokenResponseCollectionMsg">
-    <wsdl:part name="responseCollection"
-            element="wst:RequestSecurityTokenResponseCollection"/>
-  </wsdl:message>
- 
-  <!-- This portType an example of a Requestor (or other) endpoint that
-         Accepts SOAP-based challenges from a Security Token Service -->
-  <wsdl:portType name="WSSecurityRequestor">
-    <wsdl:operation name="Challenge">
-      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
-      <wsdl:output message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-  </wsdl:portType>
- 
- 
-  <!-- This portType is an example of an STS supporting full protocol -->
-<!--
-    The wsdl:portType and data types are XML elements defined by the
-    WS_Trust specification.  The wsdl:portType defines the endpoints
-    supported in the STS implementation.  This WSDL defines all operations
-    that an STS implementation can support.
--->
-  <wsdl:portType name="STS">
-    <wsdl:operation name="Cancel">
-      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel" message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/CancelFinal" message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="Issue">
-      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue" message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal" message="tns:RequestSecurityTokenResponseCollectionMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="Renew">
-      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew" message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/RenewFinal" message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="Validate">
-      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate" message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/ValidateFinal" message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="KeyExchangeToken">
-      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KET" message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/KETFinal" message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="RequestCollection">
-      <wsdl:input message="tns:RequestSecurityTokenCollectionMsg"/>
-      <wsdl:output message="tns:RequestSecurityTokenResponseCollectionMsg"/>
-    </wsdl:operation>
-  </wsdl:portType>
- 
-  <!-- This portType is an example of an endpoint that accepts
-         Unsolicited RequestSecurityTokenResponse messages -->
-  <wsdl:portType name="SecurityTokenResponseService">
-    <wsdl:operation name="RequestSecurityTokenResponse">
-      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-  </wsdl:portType>
- 
-<!--
-    The wsp:PolicyReference binds the security requirments on all the STS endpoints.
-    The wsp:Policy wsu:Id="UT_policy" element is later in this file.
--->
-  <wsdl:binding name="UT_Binding" type="wstrust:STS">
-    <wsp:PolicyReference URI="#UT_policy" />
-      <soap:binding style="document"
-          transport="http://schemas.xmlsoap.org/soap/http" />
-      <wsdl:operation name="Issue">
-          <soap:operation
-              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue" />
-          <wsdl:input>
-              <wsp:PolicyReference
-               URI="#Input_policy" />
-              <soap:body use="literal" />
-          </wsdl:input>
-          <wsdl:output>
-              <wsp:PolicyReference
-               URI="#Output_policy" />
-              <soap:body use="literal" />
-          </wsdl:output>
-      </wsdl:operation>
-      <wsdl:operation name="Validate">
-          <soap:operation
-              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate" />
-          <wsdl:input>
-              <wsp:PolicyReference
-               URI="#Input_policy" />
-              <soap:body use="literal" />
-          </wsdl:input>
-          <wsdl:output>
-              <wsp:PolicyReference
-               URI="#Output_policy" />
-              <soap:body use="literal" />
-          </wsdl:output>
-      </wsdl:operation>
-      <wsdl:operation name="Cancel">
-          <soap:operation
-              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel" />
-          <wsdl:input>
-              <soap:body use="literal" />
-          </wsdl:input>
-          <wsdl:output>
-              <soap:body use="literal" />
-          </wsdl:output>
-      </wsdl:operation>
-      <wsdl:operation name="Renew">
-          <soap:operation
-              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew" />
-          <wsdl:input>
-              <soap:body use="literal" />
-          </wsdl:input>
-          <wsdl:output>
-              <soap:body use="literal" />
-          </wsdl:output>
-      </wsdl:operation>
-      <wsdl:operation name="KeyExchangeToken">
-          <soap:operation
-              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KeyExchangeToken" />
-          <wsdl:input>
-              <soap:body use="literal" />
-          </wsdl:input>
-          <wsdl:output>
-              <soap:body use="literal" />
-          </wsdl:output>
-      </wsdl:operation>
-      <wsdl:operation name="RequestCollection">
-          <soap:operation
-              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/RequestCollection" />
-          <wsdl:input>
-              <soap:body use="literal" />
-          </wsdl:input>
-          <wsdl:output>
-              <soap:body use="literal" />
-          </wsdl:output>
-      </wsdl:operation>
-  </wsdl:binding>
-
-  <wsdl:service name="SecurityTokenService">
-      <wsdl:port name="UT_Port" binding="tns:UT_Binding">
-         <soap:address location="http://localhost:8080/SecurityTokenService/UT" />
-      </wsdl:port>
-  </wsdl:service>
-
-  <wsp:Policy wsu:Id="UT_policy">
-      <wsp:ExactlyOne>
-         <wsp:All>
-<!--
-    The sp:UsingAddressing element, indicates that the endpoints of this
-    web service conforms to the WS-Addressing specification.  More detail
-    can be found here: [http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529]
--->
-            <wsap10:UsingAddressing/>
-<!--
-    The sp:SymmetricBinding element indicates that security is provided
-    at the SOAP layer and any initiator must authenticate itself by providing
-    WSS UsernameToken credentials.
--->
-            <sp:SymmetricBinding
-               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-               <wsp:Policy>
-<!--
-    In a symmetric binding, the keys used for encrypting and signing in both
-    directions are derived from a single key, the one specified by the
-    sp:ProtectionToken element.  The sp:X509Token sub-element declares this
-    key to be a X.509 certificate and the
-    IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never"
-    attribute adds the requirement that the token MUST NOT be included in
-    any messages sent between the initiator and the recipient; rather, an
-    external reference to the token should be used.  Lastly the WssX509V3Token10
-    sub-element declares that the Username token presented by the initiator
-    should be compliant with Web Services Security UsernameToken Profile
-    1.0 specification. [ http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf ]
--->
-                  <sp:ProtectionToken>
-                     <wsp:Policy>
-                        <sp:X509Token
-                           sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
-                           <wsp:Policy>
-                              <sp:RequireDerivedKeys />
-                              <sp:RequireThumbprintReference />
-                              <sp:WssX509V3Token10 />
-                           </wsp:Policy>
-                        </sp:X509Token>
-                     </wsp:Policy>
-                  </sp:ProtectionToken>
-<!--
-    The sp:AlgorithmSuite element, requires the Basic256 algorithm suite
-    be used in performing cryptographic operations.
--->
-                  <sp:AlgorithmSuite>
-                     <wsp:Policy>
-                        <sp:Basic256 />
-                     </wsp:Policy>
-                  </sp:AlgorithmSuite>
-<!--
-    The sp:Layout element,  indicates the layout rules to apply when adding
-    items to the security header.  The sp:Lax sub-element indicates items
-    are added to the security header in any order that conforms to
-    WSS: SOAP Message Security.
--->
-                  <sp:Layout>
-                     <wsp:Policy>
-                        <sp:Lax />
-                     </wsp:Policy>
-                  </sp:Layout>
-                  <sp:IncludeTimestamp />
-                  <sp:EncryptSignature />
-                  <sp:OnlySignEntireHeadersAndBody />
-               </wsp:Policy>
-            </sp:SymmetricBinding>
-<!--
-    The sp:SignedSupportingTokens element declares that the security header
-    of messages must contain a sp:UsernameToken and the token must be signed.
-    The attribute IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"
-    on sp:UsernameToken indicates that the token MUST be included in all
-    messages sent from initiator to the recipient and that the token MUST
-    NOT be included in messages sent from the recipient to the initiator.
-    And finally the element sp:WssUsernameToken10 is a policy assertion
-    indicating the Username token should be as defined in  Web Services
-    Security UsernameToken Profile 1.0
--->
-            <sp:SignedSupportingTokens
-               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-               <wsp:Policy>
-                  <sp:UsernameToken
-                     sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-                     <wsp:Policy>
-                        <sp:WssUsernameToken10 />
-                     </wsp:Policy>
-                  </sp:UsernameToken>
-               </wsp:Policy>
-            </sp:SignedSupportingTokens>
-<!--
-    The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
-    to be supported by the STS.  These particular elements generally refer
-    to how keys are referenced within the SOAP envelope.  These are normally
-    handled by CXF.
--->
-            <sp:Wss11
-               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-               <wsp:Policy>
-                  <sp:MustSupportRefKeyIdentifier />
-                  <sp:MustSupportRefIssuerSerial />
-                  <sp:MustSupportRefThumbprint />
-                  <sp:MustSupportRefEncryptedKey />
-               </wsp:Policy>
-            </sp:Wss11>
-<!--
-    The sp:Trust13 element declares controls for WS-Trust 1.3 options.
-    They are policy assertions related to exchanges specifically with
-    client and server challenges and entropy behaviors.  Again these are
-    normally handled by CXF.
--->
-            <sp:Trust13
-               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-               <wsp:Policy>
-                  <sp:MustSupportIssuedTokens />
-                  <sp:RequireClientEntropy />
-                  <sp:RequireServerEntropy />
-               </wsp:Policy>
-            </sp:Trust13>
-         </wsp:All>
-      </wsp:ExactlyOne>
-   </wsp:Policy>
-
-   <wsp:Policy wsu:Id="Input_policy">
-      <wsp:ExactlyOne>
-         <wsp:All>
-            <sp:SignedParts
-               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-               <sp:Body />
-               <sp:Header Name="To"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="From"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="FaultTo"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="ReplyTo"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="MessageID"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="RelatesTo"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="Action"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-            </sp:SignedParts>
-            <sp:EncryptedParts
-               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-               <sp:Body />
-            </sp:EncryptedParts>
-         </wsp:All>
-      </wsp:ExactlyOne>
-   </wsp:Policy>
-
-   <wsp:Policy wsu:Id="Output_policy">
-      <wsp:ExactlyOne>
-         <wsp:All>
-            <sp:SignedParts
-               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-               <sp:Body />
-               <sp:Header Name="To"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="From"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="FaultTo"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="ReplyTo"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="MessageID"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="RelatesTo"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-               <sp:Header Name="Action"
-                  Namespace="http://www.w3.org/2005/08/addressing" />
-            </sp:SignedParts>
-            <sp:EncryptedParts
-               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-               <sp:Body />
-            </sp:EncryptedParts>
-         </wsp:All>
-      </wsp:ExactlyOne>
-   </wsp:Policy>
- 
-</wsdl:definitions>
-
-
-
-
-STS Implementation -
-

The Apache CXF’s STS, SecurityTokenServiceProvider, is a web service -provider that is compliant with the protocols and functionality defined -by the WS-Trust specification. It has a modular architecture. Many of -its components are configurable or replaceable and there are many -optional features that are enabled by implementing and configuring -plug-ins. Users can customize their own STS by extending from -SecurityTokenServiceProvider and overriding the default settings. -Extensive information about the CXF’s STS configurable and pluggable -components can be found -here.

-
-
-

This STS implementation class, SimpleSTS, is a POJO that extends from -SecurityTokenServiceProvider. Note that the class is defined with a -WebServiceProvider annotation and not a WebService annotation. This -annotation defines the service as a Provider-based endpoint, meaning it -supports a more messaging-oriented approach to Web services. In -particular, it signals that the exchanged messages will be XML documents -of some type. SecurityTokenServiceProvider is an implementation of the -jakarta.xml.ws.Provider interface. In comparison the WebService annotation -defines a (service endpoint interface) SEI-based endpoint which supports -message exchange via SOAP envelopes.

-
-
-

As was done in the ServiceImpl class, the WSS4J annotations -EndpointProperties and EndpointProperty are providing endpoint -configuration for the CXF runtime. This was previous described -here.

-
-
-

The InInterceptors annotation is used to specify a JBossWS integration -interceptor to be used for authenticating incoming requests; JAAS -integration is used here for authentication, the username/passoword -coming from the UsernameToken in the ws-requester message are used for -authenticating the requester against a security domain on the -application server hosting the STS deployment.

-
-
-

In this implementation we are customizing the operations of token -issuance, token validation and their static properties.

-
-
-

StaticSTSProperties is used to set select properties for configuring -resources in the STS. You may think this is a duplication of the -settings made with the WSS4J annotations. The values are the same but -the underlaying structures being set are different, thus this -information must be declared in both places.

-
-
-

The setIssuer setting is important because it uniquely identifies the -issuing STS. The issuer string is embedded in issued tokens and, when -validating tokens, the STS checks the issuer string value. Consequently, -it is important to use the issuer string in a consistent way, so that -the STS can recognize the tokens that it has issued.

-
-
-

The setEndpoints call allows the declaration of a set of allowed token -recipients by address. The addresses are specified as reg-ex patterns.

-
-
-

TokenIssueOperation and TokenValidateOperation have a modular structure. -This allows custom behaviors to be injected into the processing of -messages. In this case we are overriding the -SecurityTokenServiceProvider’s default behavior and performing SAML -token processing and validation. CXF provides an implementation of a -SAMLTokenProvider and SAMLTokenValidator which we are using rather than -writing our own.

-
-
-

Learn more about the SAMLTokenProvider -here.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust;
-
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-import jakarta.xml.ws.WebServiceProvider;
-
-import org.apache.cxf.annotations.EndpointProperties;
-import org.apache.cxf.annotations.EndpointProperty;
-import org.apache.cxf.interceptor.InInterceptors;
-import org.apache.cxf.sts.StaticSTSProperties;
-import org.apache.cxf.sts.operation.TokenIssueOperation;
-import org.apache.cxf.sts.operation.TokenValidateOperation;
-import org.apache.cxf.sts.service.ServiceMBean;
-import org.apache.cxf.sts.service.StaticService;
-import org.apache.cxf.sts.token.provider.SAMLTokenProvider;
-import org.apache.cxf.sts.token.validator.SAMLTokenValidator;
-import org.apache.cxf.ws.security.sts.provider.SecurityTokenServiceProvider;
-
-@WebServiceProvider(serviceName = "SecurityTokenService",
-      portName = "UT_Port",
-      targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/",
-      wsdlLocation = "WEB-INF/wsdl/ws-trust-1.4-service.wsdl")
-@EndpointProperties(value = {
-      @EndpointProperty(key = "ws-security.signature.username", value = "mystskey"),
-      @EndpointProperty(key = "ws-security.signature.properties", value = "stsKeystore.properties"),
-      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.STSCallbackHandler"),
-      //to let the JAAS integration deal with validation through the interceptor below
-      @EndpointProperty(key = "ws-security.validate.token", value = "false")
-
-})
-@InInterceptors(interceptors = {"org.jboss.wsf.stack.cxf.security.authentication.SubjectCreatingPolicyInterceptor"})
-public class SampleSTS extends SecurityTokenServiceProvider
-{
-   public SampleSTS() throws Exception
-   {
-      super();
-
-      StaticSTSProperties props = new StaticSTSProperties();
-      props.setSignaturePropertiesFile("stsKeystore.properties");
-      props.setSignatureUsername("mystskey");
-      props.setCallbackHandlerClass(STSCallbackHandler.class.getName());
-      props.setIssuer("DoubleItSTSIssuer");
-
-      List<ServiceMBean> services = new LinkedList<ServiceMBean>();
-      StaticService service = new StaticService();
-      service.setEndpoints(Arrays.asList(
-              "http://localhost:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
-              "http://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
-              "http://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService"
-              ));
-      services.add(service);
-
-      TokenIssueOperation issueOperation = new TokenIssueOperation();
-      issueOperation.setServices(services);
-      issueOperation.getTokenProviders().add(new SAMLTokenProvider());
-      issueOperation.setStsProperties(props);
-
-      TokenValidateOperation validateOperation = new TokenValidateOperation();
-      validateOperation.getTokenValidators().add(new SAMLTokenValidator());
-      validateOperation.setStsProperties(props);
-
-      this.setIssueOperation(issueOperation);
-      this.setValidateOperation(validateOperation);
-   }
-}
-
-
-
-
-STSCallbackHandler -
-

STSCallbackHandler is a callback handler for the WSS4J Crypto API. It is -used to obtain the password for the private key in the keystore. This -class enables CXF to retrieve the password of the user name to use for -the message signature.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.sts;
- 
-import java.util.HashMap;
-import java.util.Map;
- 
-import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
- 
-public class STSCallbackHandler extends PasswordCallbackHandler
-{
-   public STSCallbackHandler()
-   {
-      super(getInitMap());
-   }
- 
-   private static Map<String, String> getInitMap()
-   {
-      Map<String, String> passwords = new HashMap<String, String>();
-      passwords.put("mystskey", "stskpass");
-      return passwords;
-   }
-}
-
-
-
-
-Crypto properties and keystore files -
-

WSS4J’s Crypto implementation is loaded and configured via a Java -properties file that contains Crypto configuration data. The file -contains implementation-specific properties such as a keystore location, -password, default alias and the like. This application is using the -Merlin implementation. File stsKeystore.properties contains this -information.

-
-
-

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains -self signed certificates for myservicekey and mystskey. Self signed -certificates are not appropriate for production use.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=stsspass
-org.apache.ws.security.crypto.merlin.keystore.file=stsstore.jks
-
-
-
-
-MANIFEST.MF -
-

When deployed on WildFly, this application requires access to the -JBossWs and CXF APIs provided in modules -org.jboss.ws.cxf.jbossws-cxf-client and org.apache.cxf. The Apache CXF -internals, org.apache.cxf.impl, are needed to build the STS -configuration in the SampleSTS constructor. The dependency statement -directs the server to provide them at deployment.

-
-
-
-
Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.8.2
-Created-By: 1.7.0_25-b15 (Oracle Corporation)
-Dependencies: org.jboss.ws.cxf.jbossws-cxf-client,org.apache.cxf.impl
-
-
-
-
-Security Domain -
-

The STS requires a JBoss security domain be configured. The -jboss-web.xml descriptor declares a named security -domain,"JBossWS-trust-sts" to be used by this service for -authentication. This security domain requires two properties files and -the addition of a security-domain declaration in the JBoss server -configuration file.

-
-
-

For this scenario the domain needs to contain user alice, password -clarinet, and role friend. See the listings below for -jbossws-users.properties and jbossws-roles.properties. In addition the -following XML elements must be added to the Elytron subsystem in the -server configuration file. Replace " SOME_PATH" with appropriate -information and then configure authentication with this security domain.

-
-
-
-
<properties-realm name="JBossWS-trust-sts">
-    <users-properties path="/SOME_PATH/usersProperties"/>
-    <groups-properties path="/SOME_PATH/rolesProperties"/>
-</properties-realm>
-...
-<security-domain name="JBossWS-trust-sts" default-realm="JBossWS-trust-sts" permission-mapper="default-permission-mapper">
-    <realm name="JBossWS-trust-sts" role-decoder="groups-to-roles"/>
-</security-domain>
-
-
-
-

jboss-web.xml

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN" ">
-<jboss-web>
-  <security-domain>java:/jaas/JBossWS-trust-sts</security-domain>
-</jboss-web>
-
-
-
-

jbossws-users.properties

-
-
-
-
# A sample users.properties file for use with the UsersRolesLoginModule
-alice=clarinet
-
-
-
-

jbossws-roles.properties

-
-
-
-
# A sample roles.properties file for use with the UsersRolesLoginModule
-alice=friend
-
-
-
-

WS-MetadataExchange and interoperability

-
-
- - - - - -
- - -To achieve better interoperability, you might consider allowing the STS -endpoint to reply to WS-MetadataExchange messages directed to the /mex -URL sub-path (e.g. -http://localhost:8080/jaxws-samples-wsse-policy-trust-sts/SecurityTokenService/mex). -This can be done by tweaking the url-pattern for the underlying -endpoint servlet, for instance by adding a web.xml descriptor as -follows to the deployment:<?xml version="1.0" encoding="UTF-8"?>
-<web-app
-version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://java.sun.com/xml/ns/javaee -http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">;
-<servlet>
-<servlet-name>TestSecurityTokenService</servlet-name>
-<servlet-class>org.jboss.test.ws.jaxws.samples.wsse.policy.trust.SampleSTS</servlet-class>
-</servlet>
-<servlet-mapping>
-<servlet-name>TestSecurityTokenService</servlet-name>
-<url-pattern>/SecurityTokenService/*</url-pattern>
-</servlet-mapping>
-</web-app>
-As a matter of fact, at the time of writing some webservices -implementations (including Metro) assume the /mex URL as the default -choice for directing WS-MetadataExchange requests to and use that to -retrieve STS wsdl contracts. -
-
-
-
-
-
Web service requester
-
-

This section examines the crucial elements in calling a web service that -implements endpoint security as described in the basic WS-Trust -scenario. The components that will be discussed are.

-
-
-
    -
  • -

    web service requester’s implementation

    -
  • -
  • -

    ClientCallbackHandler

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
-
-
-Web service requester Implementation -
-

The ws-requester, the client, uses standard procedures for creating a -reference to the web service in the first four line. To address the -endpoint security requirements, the web service’s "Request Context" is -configured with the information needed in message generation. In -addition, the STSClient that communicates with the STS is configured -with similar values. Note the key strings ending with a ".it" suffix. -This suffix flags these settings as belonging to the STSClient. The -internal CXF code assigns this information to the STSClient that is -auto-generated for this service call.

-
-
-

There is an alternate method of setting up the STSCLient. The user may -provide their own instance of the STSClient. The CXF code will use this -object and not auto-generate one. This is used in the ActAs and -OnBehalfOf examples. When providing the STSClient in this way, the user -must provide a org.apache.cxf.Bus for it and the configuration keys must -not have the ".it" suffix.

-
-
-
-
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
-URL wsdlURL = new URL(serviceURL + "?wsdl");
-Service service = Service.create(wsdlURL, serviceName);
-ServiceIface proxy = (ServiceIface) service.getPort(ServiceIface.class);
-
-// set the security related configuration information for the service "request"
-Map<String, Object> ctx = ((BindingProvider) proxy).getRequestContext();
-ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
-ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
-   Thread.currentThread().getContextClassLoader().getResource(
-   "META-INF/clientKeystore.properties"));
-ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
-   Thread.currentThread().getContextClassLoader().getResource(
-   "META-INF/clientKeystore.properties"));
-ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
-ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
-
-
-//-- Configuration settings that will be transfered to the STSClient
-// "alice" is the name provided for the WSS Username. Her password will
-// be retreived from the ClientCallbackHander by the STSClient.
-ctx.put(SecurityConstants.USERNAME + ".it", "alice");
-ctx.put(SecurityConstants.CALLBACK_HANDLER + ".it", new ClientCallbackHandler());
-ctx.put(SecurityConstants.ENCRYPT_PROPERTIES + ".it",
-   Thread.currentThread().getContextClassLoader().getResource(
-   "META-INF/clientKeystore.properties"));
-ctx.put(SecurityConstants.ENCRYPT_USERNAME + ".it", "mystskey");
-// alias name in the keystore to get the user's public key to send to the STS
-ctx.put(SecurityConstants.STS_TOKEN_USERNAME + ".it", "myclientkey");
-// Crypto property configuration to use for the STS
-ctx.put(SecurityConstants.STS_TOKEN_PROPERTIES + ".it",
-   Thread.currentThread().getContextClassLoader().getResource(
-   "META-INF/clientKeystore.properties"));
-// write out an X509Certificate structure in UseKey/KeyInfo
-ctx.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO + ".it", "true");
-// Setting indicates the  STSclient should not try using the WS-MetadataExchange
-// call using STS EPR WSA address when the endpoint contract does not contain
-// WS-MetadataExchange info.
-ctx.put("ws-security.sts.disable-wsmex-call-using-epr-address", "true");
-
-proxy.sayHello();
-
-
-
-
-ClientCallbackHandler -
-

ClientCallbackHandler is a callback handler for the WSS4J Crypto API. It -is used to obtain the password for the private key in the keystore. This -class enables CXF to retrieve the password of the user name to use for -the message signature. Note that "alice" and her password have been -provided here. This information is not in the (JKS) keystore but -provided in the WildFly security domain. It was declared in file -jbossws-users.properties.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared;
-
-import java.io.IOException;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import org.apache.ws.security.WSPasswordCallback;
-
-public class ClientCallbackHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            if (callbacks[i] instanceof WSPasswordCallback) {
-                WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
-                if ("myclientkey".equals(pc.getIdentifier())) {
-                    pc.setPassword("ckpass");
-                    break;
-                } else if ("alice".equals(pc.getIdentifier())) {
-                    pc.setPassword("clarinet");
-                    break;
-                }
-            }
-        }
-    }
-}
-
-
-
-
-Requester Crypto properties and keystore files -
-

WSS4J’s Crypto implementation is loaded and configured via a Java -properties file that contains Crypto configuration data. The file -contains implementation-specific properties such as a keystore location, -password, default alias and the like. This application is using the -Merlin implementation. File clientKeystore.properties contains this -information.

-
-
-

File clientstore.jks, is a Java KeyStore (JKS) repository. It contains -self signed certificates for myservicekey and mystskey. Self signed -certificates are not appropriate for production use.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=cspass
-org.apache.ws.security.crypto.merlin.keystore.alias=myclientkey
-org.apache.ws.security.crypto.merlin.keystore.file=META-INF/clientstore.jks
-
-
-
-
-
-
-
ActAs WS-Trust Scenario
-
-

The ActAs feature is used in scenarios that require composite -delegation. It is commonly used in multi-tiered systems where an -application calls a service on behalf of a logged in user or a service -calls another service on behalf of the original caller.

-
-
-

ActAs is nothing more than a new sub-element in the RequestSecurityToken -(RST). It provides additional information about the original caller when -a token is negotiated with the STS. The ActAs element usually takes the -form of a token with identity claims such as name, role, and -authorization code, for the client to access the service.

-
-
-

The ActAs scenario is an extension of -the basic -WS-Trust scenario. In this example the ActAs service calls the -ws-service on behalf of a user. There are only a couple of additions to -the basic scenario’s code. An ActAs web service provider and callback -handler have been added. The ActAs web services' WSDL imposes the same -security policies as the ws-provider. UsernameTokenCallbackHandler is -new. It is a utility that generates the content for the ActAs element. -And lastly there are a couple of code additions in the STS to support -the ActAs request.

-
-
-
Web service provider
-
-

This section examines the web service elements from the basic WS-Trust -scenario that have been changed to address the needs of the ActAs -example. The components are

-
-
-
    -
  • -

    ActAs web service provider’s WSDL

    -
  • -
  • -

    ActAs web service provider’s Interface and Implementation classes.

    -
  • -
  • -

    ActAsCallbackHandler class

    -
  • -
  • -

    UsernameTokenCallbackHandler

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
  • -

    MANIFEST.MF

    -
  • -
-
-
-Web service provider WSDL -
-

The ActAs web service provider’s WSDL is a clone of the ws-provider’s -WSDL. The wsp:Policy section is the same. There are changes to the -service endpoint, targetNamespace, portType, binding name, and service.

-
-
-
-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy" name="ActAsService"
-             xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy"
-             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-             xmlns="http://schemas.xmlsoap.org/wsdl/"
-             xmlns:wsp="http://www.w3.org/ns/ws-policy"
-             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
-             xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-             xmlns:wsaws="http://www.w3.org/2005/08/addressing"
-             xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
-             xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
-    <types>
-        <xsd:schema>
-            <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy"
-                    schemaLocation="ActAsService_schema1.xsd"/>
-        </xsd:schema>
-    </types>
-    <message name="sayHello">
-        <part name="parameters" element="tns:sayHello"/>
-    </message>
-    <message name="sayHelloResponse">
-        <part name="parameters" element="tns:sayHelloResponse"/>
-    </message>
-    <portType name="ActAsServiceIface">
-        <operation name="sayHello">
-            <input message="tns:sayHello"/>
-            <output message="tns:sayHelloResponse"/>
-        </operation>
-    </portType>
-    <binding name="ActAsServicePortBinding" type="tns:ActAsServiceIface">
-        <wsp:PolicyReference URI="#AsymmetricSAML2Policy" />
-        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
-        <operation name="sayHello">
-            <soap:operation soapAction=""/>
-            <input>
-                <soap:body use="literal"/>
-                <wsp:PolicyReference URI="#Input_Policy" />
-            </input>
-            <output>
-                <soap:body use="literal"/>
-                <wsp:PolicyReference URI="#Output_Policy" />
-            </output>
-        </operation>
-    </binding>
-    <service name="ActAsService">
-        <port name="ActAsServicePort" binding="tns:ActAsServicePortBinding">
-            <soap:address location="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-actas/ActAsService"/>
-        </port>
-    </service>
- 
-</definitions>
-
-
-
-
-Web Service Interface -
-

The web service provider interface class, ActAsServiceIface, is a simple -web service definition.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas;
- 
-import jakarta.jws.WebMethod;
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy"
-)
-public interface ActAsServiceIface
-{
-   @WebMethod
-   String sayHello();
-}
-
-
-
-
-Web Service Implementation -
-

The web service provider implementation class, ActAsServiceImpl, is a -simple POJO. It uses the standard WebService annotation to define the -service endpoint and two Apache WSS4J annotations, EndpointProperties -and EndpointProperty used for configuring the endpoint for the CXF -runtime. The WSS4J configuration information provided is for WSS4J’s -Crypto Merlin implementation.

-
-
-

ActAsServiceImpl is calling ServiceImpl acting on behalf of the user. -Method setupService performs the requisite configuration setup.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas;
- 
-import org.apache.cxf.Bus;
-import org.apache.cxf.BusFactory;
-import org.apache.cxf.annotations.EndpointProperties;
-import org.apache.cxf.annotations.EndpointProperty;
-import org.apache.cxf.ws.security.SecurityConstants;
-import org.apache.cxf.ws.security.trust.STSClient;
-import org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service.ServiceIface;
-import org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared.WSTrustAppUtils;
- 
-import jakarta.jws.WebService;
-import javax.xml.namespace.QName;
-import jakarta.xml.ws.BindingProvider;
-import jakarta.xml.ws.Service;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Map;
- 
-@WebService
-(
-   portName = "ActAsServicePort",
-   serviceName = "ActAsService",
-   wsdlLocation = "WEB-INF/wsdl/ActAsService.wsdl",
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy",
-   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas.ActAsServiceIface"
-)
- 
-@EndpointProperties(value = {
-      @EndpointProperty(key = "ws-security.signature.username", value = "myactaskey"),
-      @EndpointProperty(key = "ws-security.signature.properties", value =  "actasKeystore.properties"),
-      @EndpointProperty(key = "ws-security.encryption.properties", value = "actasKeystore.properties"),
-      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas.ActAsCallbackHandler")
-})
- 
-public class ActAsServiceImpl implements ActAsServiceIface
-{
-   public String sayHello() {
-      try {
-         ServiceIface proxy = setupService();
-         return "ActAs " + proxy.sayHello();
-      } catch (MalformedURLException e) {
-         e.printStackTrace();
-      }
-      return null;
-   }
- 
-   private  ServiceIface setupService()throws MalformedURLException {
-      ServiceIface proxy = null;
-      Bus bus = BusFactory.newInstance().createBus();
- 
-      try {
-         BusFactory.setThreadDefaultBus(bus);
- 
-         final String serviceURL = "http://" + WSTrustAppUtils.getServerHost() + ":8080/jaxws-samples-wsse-policy-trust/SecurityService";
-         final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
-         final URL wsdlURL = new URL(serviceURL + "?wsdl");
-         Service service = Service.create(wsdlURL, serviceName);
-         proxy = (ServiceIface) service.getPort(ServiceIface.class);
- 
-         Map<String, Object> ctx = ((BindingProvider) proxy).getRequestContext();
-         ctx.put(SecurityConstants.CALLBACK_HANDLER, new ActAsCallbackHandler());
- 
-         ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
-            Thread.currentThread().getContextClassLoader().getResource("actasKeystore.properties" ));
-         ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myactaskey" );
-         ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
-            Thread.currentThread().getContextClassLoader().getResource("../../META-INF/clientKeystore.properties" ));
-         ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
- 
-         STSClient stsClient = new STSClient(bus);
-         Map<String, Object> props = stsClient.getProperties();
-         props.put(SecurityConstants.USERNAME, "alice");
-         props.put(SecurityConstants.ENCRYPT_USERNAME, "mystskey");
-         props.put(SecurityConstants.STS_TOKEN_USERNAME, "myactaskey" );
-         props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
-            Thread.currentThread().getContextClassLoader().getResource("actasKeystore.properties" ));
-         props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
- 
-         ctx.put(SecurityConstants.STS_CLIENT, stsClient);
- 
-      } finally {
-         bus.shutdown(true);
-      }
- 
-      return proxy;
-   }
- 
-}
-
-
-
-
-ActAsCallbackHandler -
-

ActAsCallbackHandler is a callback handler for the WSS4J Crypto API. It -is used to obtain the password for the private key in the keystore. This -class enables CXF to retrieve the password of the user name to use for -the message signature. This class has been revised to return the -passwords for this service, myactaskey and the "actas" user, alice.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas;
- 
-import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
-import java.util.HashMap;
-import java.util.Map;
- 
-public class ActAsCallbackHandler extends PasswordCallbackHandler {
- 
-   public ActAsCallbackHandler()
-   {
-      super(getInitMap());
-   }
- 
-   private static Map<String, String> getInitMap()
-   {
-      Map<String, String> passwords = new HashMap<String, String>();
-      passwords.put("myactaskey", "aspass");
-      passwords.put("alice", "clarinet");
-      return passwords;
-   }
-}
-
-
-
-
-UsernameTokenCallbackHandler -
-

The ActAs and OnBeholdOf sub-elements of the RequestSecurityToken are -required to be defined as WSSE Username Tokens. This utility generates -the properly formated element.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared;
- 
-import org.apache.cxf.helpers.DOMUtils;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.ws.security.SecurityConstants;
-import org.apache.cxf.ws.security.trust.delegation.DelegationCallback;
-import org.apache.ws.security.WSConstants;
-import org.apache.ws.security.message.token.UsernameToken;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.ls.DOMImplementationLS;
-import org.w3c.dom.ls.LSSerializer;
- 
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import java.io.IOException;
-import java.util.Map;
- 
-/**
-* A utility to provide the 3 different input parameter types for jaxws property
-* "ws-security.sts.token.act-as" and "ws-security.sts.token.on-behalf-of".
-* This implementation obtains a username and password via the jaxws property
-* "ws-security.username" and "ws-security.password" respectively, as defined
-* in SecurityConstants.  It creates a wss UsernameToken to be used as the
-* delegation token.
-*/
- 
-public class UsernameTokenCallbackHandler implements CallbackHandler {
- 
-   public void handle(Callback[] callbacks)
-      throws IOException, UnsupportedCallbackException {
-      for (int i = 0; i < callbacks.length; i++) {
-         if (callbacks[i] instanceof DelegationCallback) {
-            DelegationCallback callback = (DelegationCallback) callbacks[i];
-            Message message = callback.getCurrentMessage();
- 
-            String username =
-               (String)message.getContextualProperty(SecurityConstants.USERNAME);
-            String password =
-               (String)message.getContextualProperty(SecurityConstants.PASSWORD);
-            if (username != null) {
-               Node contentNode = message.getContent(Node.class);
-               Document doc = null;
-               if (contentNode != null) {
-                  doc = contentNode.getOwnerDocument();
-               } else {
-                  doc = DOMUtils.createDocument();
-               }
-               UsernameToken usernameToken = createWSSEUsernameToken(username,password, doc);
-               callback.setToken(usernameToken.getElement());
-            }
-         } else {
-            throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback");
-         }
-      }
-   }
- 
-   /**
-    * Provide UsernameToken as a string.
-    * @param ctx
-    * @return
-    */
-   public String getUsernameTokenString(Map<String, Object> ctx){
-      Document doc = DOMUtils.createDocument();
-      String result = null;
-      String username = (String)ctx.get(SecurityConstants.USERNAME);
-      String password = (String)ctx.get(SecurityConstants.PASSWORD);
-      if (username != null) {
-         UsernameToken usernameToken = createWSSEUsernameToken(username,password, doc);
-         result = toString(usernameToken.getElement().getFirstChild().getParentNode());
-      }
-      return result;
-   }
- 
-   /**
-    *
-    * @param username
-    * @param password
-    * @return
-    */
-   public String getUsernameTokenString(String username, String password){
-      Document doc = DOMUtils.createDocument();
-      String result = null;
-      if (username != null) {
-         UsernameToken usernameToken = createWSSEUsernameToken(username,password, doc);
-         result = toString(usernameToken.getElement().getFirstChild().getParentNode());
-      }
-      return result;
-   }
- 
-   /**
-    * Provide UsernameToken as a DOM Element.
-    * @param ctx
-    * @return
-    */
-   public Element getUsernameTokenElement(Map<String, Object> ctx){
-      Document doc = DOMUtils.createDocument();
-      Element result = null;
-      UsernameToken usernameToken = null;
-         String username = (String)ctx.get(SecurityConstants.USERNAME);
-      String password = (String)ctx.get(SecurityConstants.PASSWORD);
-      if (username != null) {
-         usernameToken = createWSSEUsernameToken(username,password, doc);
-         result = usernameToken.getElement();
-      }
-      return result;
-   }
- 
-   /**
-    *
-    * @param username
-    * @param password
-    * @return
-    */
-   public Element getUsernameTokenElement(String username, String password){
-      Document doc = DOMUtils.createDocument();
-      Element result = null;
-      UsernameToken usernameToken = null;
-      if (username != null) {
-         usernameToken = createWSSEUsernameToken(username,password, doc);
-         result = usernameToken.getElement();
-      }
-      return result;
-   }
- 
-   private UsernameToken createWSSEUsernameToken(String username, String password, Document doc) {
- 
-      UsernameToken usernameToken = new UsernameToken(true, doc,
-         (password == null)? null: WSConstants.PASSWORD_TEXT);
-      usernameToken.setName(username);
-      usernameToken.addWSUNamespace();
-      usernameToken.addWSSENamespace();
-      usernameToken.setID("id-" + username);
- 
-      if (password != null){
-         usernameToken.setPassword(password);
-      }
- 
-      return usernameToken;
-   }
- 
- 
-   private String toString(Node node) {
-      String str = null;
- 
-      if (node != null) {
-         DOMImplementationLS lsImpl = (DOMImplementationLS)
-            node.getOwnerDocument().getImplementation().getFeature("LS", "3.0");
-         LSSerializer serializer = lsImpl.createLSSerializer();
-         serializer.getDomConfig().setParameter("xml-declaration", false); //by default its true, so set it to false to get String without xml-declaration
-         str = serializer.writeToString(node);
-      }
-      return str;
-   }
- 
-}
-
-
-
-
-Crypto properties and keystore files -
-

The ActAs service must provide its own credentials. The requisite -properties file, actasKeystore.properties, and keystore, actasstore.jks, -were created.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=aapass
-org.apache.ws.security.crypto.merlin.keystore.alias=myactaskey
-org.apache.ws.security.crypto.merlin.keystore.file=actasstore.jks
-
-
-
-
-MANIFEST.MF -
-

When deployed on WildFly this application requires access to the JBossWs -and CXF APIs provided in modules org.jboss.ws.cxf.jbossws-cxf-client and -org.apache.cxf. The Apache CXF internals, org.apache.cxf.impl, are -needed in handling the ActAs and OnBehalfOf extensions. The dependency -statement directs the server to provide them at deployment.

-
-
-
-
Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.8.2
-Created-By: 1.7.0_25-b15 (Oracle Corporation)
-Dependencies: org.jboss.ws.cxf.jbossws-cxf-client, org.apache.cxf.impl
-
-
-
-
-
-
Security Token Service
-
-

This section examines the STS elements from the basic WS-Trust scenario -that have been changed to address the needs of the ActAs example. The -components are.

-
-
-
    -
  • -

    STS’s implementation class.

    -
  • -
  • -

    STSCallbackHandler class

    -
  • -
-
-
-STS Implementation class -
-

The initial description of SampleSTS can be found -here.

-
-
-

The declaration of the set of allowed token recipients by address has -been extended to accept ActAs addresses and OnBehalfOf addresses. The -addresses are specified as reg-ex patterns.

-
-
-

The TokenIssueOperation requires class, UsernameTokenValidator be -provided in order to validate the contents of the OnBehalfOf claims and -class, UsernameTokenDelegationHandler to be provided in order to process -the token delegation request of the ActAs on OnBehalfOf user.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.sts;
- 
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
- 
-import jakarta.xml.ws.WebServiceProvider;
- 
-import org.apache.cxf.annotations.EndpointProperties;
-import org.apache.cxf.annotations.EndpointProperty;
-import org.apache.cxf.interceptor.InInterceptors;
-import org.apache.cxf.sts.StaticSTSProperties;
-import org.apache.cxf.sts.operation.TokenIssueOperation;
-import org.apache.cxf.sts.operation.TokenValidateOperation;
-import org.apache.cxf.sts.service.ServiceMBean;
-import org.apache.cxf.sts.service.StaticService;
-import org.apache.cxf.sts.token.delegation.UsernameTokenDelegationHandler;
-import org.apache.cxf.sts.token.provider.SAMLTokenProvider;
-import org.apache.cxf.sts.token.validator.SAMLTokenValidator;
-import org.apache.cxf.sts.token.validator.UsernameTokenValidator;
-import org.apache.cxf.ws.security.sts.provider.SecurityTokenServiceProvider;
- 
-@WebServiceProvider(serviceName = "SecurityTokenService",
-      portName = "UT_Port",
-      targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/",
-      wsdlLocation = "WEB-INF/wsdl/ws-trust-1.4-service.wsdl")
-//be sure to have dependency on org.apache.cxf module when on AS7, otherwise Apache CXF annotations are ignored
-@EndpointProperties(value = {
-      @EndpointProperty(key = "ws-security.signature.username", value = "mystskey"),
-      @EndpointProperty(key = "ws-security.signature.properties", value = "stsKeystore.properties"),
-      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.sts.STSCallbackHandler"),
-      @EndpointProperty(key = "ws-security.validate.token", value = "false") //to let the JAAS integration deal with validation through the interceptor below
-})
-@InInterceptors(interceptors = {"org.jboss.wsf.stack.cxf.security.authentication.SubjectCreatingPolicyInterceptor"})
-public class SampleSTS extends SecurityTokenServiceProvider
-{
-   public SampleSTS() throws Exception
-   {
-      super();
- 
-      StaticSTSProperties props = new StaticSTSProperties();
-      props.setSignatureCryptoProperties("stsKeystore.properties");
-      props.setSignatureUsername("mystskey");
-      props.setCallbackHandlerClass(STSCallbackHandler.class.getName());
-      props.setIssuer("DoubleItSTSIssuer");
- 
-      List<ServiceMBean> services = new LinkedList<ServiceMBean>();
-      StaticService service = new StaticService();
-      service.setEndpoints(Arrays.asList(
-         "http://localhost:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
-         "http://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
-         "http://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
- 
-         "http://localhost:(\\d)*/jaxws-samples-wsse-policy-trust-actas/ActAsService",
-         "http://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-actas/ActAsService",
-         "http://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-actas/ActAsService",
- 
-         "http://localhost:(\\d)*/jaxws-samples-wsse-policy-trust-onbehalfof/OnBehalfOfService",
-         "http://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-onbehalfof/OnBehalfOfService",
-         "http://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-onbehalfof/OnBehalfOfService"
-      ));
-      services.add(service);
- 
-      TokenIssueOperation issueOperation = new TokenIssueOperation();
-      issueOperation.setServices(services);
-      issueOperation.getTokenProviders().add(new SAMLTokenProvider());
-      // required for OnBehalfOf
-      issueOperation.getTokenValidators().add(new UsernameTokenValidator());
-      // added for OnBehalfOf and ActAs
-      issueOperation.getDelegationHandlers().add(new UsernameTokenDelegationHandler());
-      issueOperation.setStsProperties(props);
- 
-      TokenValidateOperation validateOperation = new TokenValidateOperation();
-      validateOperation.getTokenValidators().add(new SAMLTokenValidator());
-      validateOperation.setStsProperties(props);
- 
-      this.setIssueOperation(issueOperation);
-      this.setValidateOperation(validateOperation);
-   }
-}
-
-
-
-
-STSCallbackHandler -
-

The user, alice, and corresponding password was required to be added for -the ActAs example.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.sts;
- 
-import java.util.HashMap;
-import java.util.Map;
- 
-import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
- 
-public class STSCallbackHandler extends PasswordCallbackHandler
-{
-   public STSCallbackHandler()
-   {
-      super(getInitMap());
-   }
- 
-   private static Map<String, String> getInitMap()
-   {
-      Map<String, String> passwords = new HashMap<String, String>();
-      passwords.put("mystskey", "stskpass");
-      passwords.put("alice", "clarinet");
-      return passwords;
-   }
-}
-
-
-
-
-
-
Web service requester
-
-

This section examines the ws-requester elements from the basic WS-Trust -scenario that have been changed to address the needs of the ActAs -example. The component is

-
-
-
    -
  • -

    ActAs web service requester implementation class

    -
  • -
-
-
-Web service requester Implementation -
-

The ActAs ws-requester, the client, uses standard procedures for -creating a reference to the web service in the first four lines. To -address the endpoint security requirements, the web service’s "Request -Context" is configured via the BindingProvider. Information needed in -the message generation is provided through it. The ActAs user, -myactaskey, is declared in this section and UsernameTokenCallbackHandler -is used to provide the contents of the ActAs element to the STSClient. -In this example a STSClient object is created and provided to the -proxy’s request context. The alternative is to provide keys tagged with -the ".it" suffix as was done in -the -Basic Scenario client. The use of ActAs is configured through the props -map using the SecurityConstants.STS_TOKEN_ACT_AS key. The alternative is -to use the STSClient.setActAs method.

-
-
-
-
final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy", "ActAsService");
-final URL wsdlURL = new URL(serviceURL + "?wsdl");
-Service service = Service.create(wsdlURL, serviceName);
-ActAsServiceIface proxy = (ActAsServiceIface) service.getPort(ActAsServiceIface.class);
- 
-Bus bus = BusFactory.newInstance().createBus();
-try {
-    BusFactory.setThreadDefaultBus(bus);
- 
-    Map<String, Object> ctx = proxy.getRequestContext();
- 
-    ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
-    ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
-        Thread.currentThread().getContextClassLoader().getResource(
-        "META-INF/clientKeystore.properties"));
-    ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myactaskey");
-    ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
-        Thread.currentThread().getContextClassLoader().getResource(
-        "META-INF/clientKeystore.properties"));
-    ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
- 
-    // Generate the ActAs element contents and pass to the STSClient as a string
-    UsernameTokenCallbackHandler ch = new UsernameTokenCallbackHandler();
-    String str = ch.getUsernameTokenString("alice","clarinet");
-    ctx.put(SecurityConstants.STS_TOKEN_ACT_AS, str);
- 
-    STSClient stsClient = new STSClient(bus);
-    Map<String, Object> props = stsClient.getProperties();
-    props.put(SecurityConstants.USERNAME, "bob");
-    props.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
-    props.put(SecurityConstants.ENCRYPT_PROPERTIES,
-        Thread.currentThread().getContextClassLoader().getResource(
-        "META-INF/clientKeystore.properties"));
-    props.put(SecurityConstants.ENCRYPT_USERNAME, "mystskey");
-    props.put(SecurityConstants.STS_TOKEN_USERNAME, "myclientkey");
-    props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
-        Thread.currentThread().getContextClassLoader().getResource(
-        "META-INF/clientKeystore.properties"));
-    props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
- 
-    ctx.put(SecurityConstants.STS_CLIENT, stsClient);
-} finally {
-    bus.shutdown(true);
-}
-proxy.sayHello();
-
-
-
-
-
-
-
OnBehalfOf WS-Trust Scenario
-
-

The OnBehalfOf feature is used in scenarios that use the proxy pattern. -In such scenarios, the client cannot access the STS directly, instead it -communicates through a proxy gateway. The proxy gateway authenticates -the caller and puts information about the caller into the OnBehalfOf -element of the RequestSecurityToken (RST) sent to the real STS for -processing. The resulting token contains only claims related to the -client of the proxy, making the proxy completely transparent to the -receiver of the issued token.

-
-
-

OnBehalfOf is nothing more than a new sub-element in the RST. It -provides additional information about the original caller when a token -is negotiated with the STS. The OnBehalfOf element usually takes the -form of a token with identity claims such as name, role, and -authorization code, for the client to access the service.

-
-
-

The OnBehalfOf scenario is an extension of -the -basic WS-Trust scenario. In this example the OnBehalfOf service calls -the ws-service on behalf of a user. There are only a couple of additions -to the basic scenario’s code. An OnBehalfOf web service provider and -callback handler have been added. The OnBehalfOf web services' WSDL -imposes the same security policies as the ws-provider. -UsernameTokenCallbackHandler is a utility shared with ActAs. It -generates the content for the OnBehalfOf element. And lastly there are -code additions in the STS that both OnBehalfOf and ActAs share in -common.

-
- -
-
Web service provider
-
-

This section examines the web service elements from the basic WS-Trust -scenario that have been changed to address the needs of the OnBehalfOf -example. The components are.

-
-
-
    -
  • -

    web service provider’s WSDL

    -
  • -
  • -

    web service provider’s Interface and Implementation classes.

    -
  • -
  • -

    OnBehalfOfCallbackHandler class

    -
  • -
-
-
-Web service provider WSDL -
-

The OnBehalfOf web service provider’s WSDL is a clone of the -ws-provider’s WSDL. The wsp:Policy section is the same. There are -changes to the service endpoint, targetNamespace, portType, binding -name, and service.

-
-
-
-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy" name="OnBehalfOfService"
-             xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy"
-             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-             xmlns="http://schemas.xmlsoap.org/wsdl/"
-             xmlns:wsp="http://www.w3.org/ns/ws-policy"
-             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
-             xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-             xmlns:wsaws="http://www.w3.org/2005/08/addressing"
-             xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
-             xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
-    <types>
-        <xsd:schema>
-            <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy"
-                  schemaLocation="OnBehalfOfService_schema1.xsd"/>
-        </xsd:schema>
-    </types>
-    <message name="sayHello">
-        <part name="parameters" element="tns:sayHello"/>
-    </message>
-    <message name="sayHelloResponse">
-        <part name="parameters" element="tns:sayHelloResponse"/>
-    </message>
-    <portType name="OnBehalfOfServiceIface">
-        <operation name="sayHello">
-            <input message="tns:sayHello"/>
-            <output message="tns:sayHelloResponse"/>
-        </operation>
-    </portType>
-    <binding name="OnBehalfOfServicePortBinding" type="tns:OnBehalfOfServiceIface">
-        <wsp:PolicyReference URI="#AsymmetricSAML2Policy" />
-        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
-        <operation name="sayHello">
-            <soap:operation soapAction=""/>
-            <input>
-                <soap:body use="literal"/>
-                <wsp:PolicyReference URI="#Input_Policy" />
-            </input>
-            <output>
-                <soap:body use="literal"/>
-                <wsp:PolicyReference URI="#Output_Policy" />
-            </output>
-        </operation>
-    </binding>
-    <service name="OnBehalfOfService">
-        <port name="OnBehalfOfServicePort" binding="tns:OnBehalfOfServicePortBinding">
-            <soap:address location="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-onbehalfof/OnBehalfOfService"/>
-        </port>
-    </service>
-</definitions>
-
-
-
-
-Web Service Interface -
-

The web service provider interface class, OnBehalfOfServiceIface, is a -simple web service definition.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof;
- 
-import jakarta.jws.WebMethod;
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy"
-)
-public interface OnBehalfOfServiceIface
-{
-   @WebMethod
-   String sayHello();
-}
-
-
-
-
-Web Service Implementation -
-

The web service provider implementation class, OnBehalfOfServiceImpl, is -a simple POJO. It uses the standard WebService annotation to define the -service endpoint and two Apache WSS4J annotations, EndpointProperties -and EndpointProperty used for configuring the endpoint for the CXF -runtime. The WSS4J configuration information provided is for WSS4J’s -Crypto Merlin implementation.

-
-
-

OnBehalfOfServiceImpl is calling the ServiceImpl acting on behalf of the -user. Method setupService performs the requisite configuration setup.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof;
- 
-import org.apache.cxf.Bus;
-import org.apache.cxf.BusFactory;
-import org.apache.cxf.annotations.EndpointProperties;
-import org.apache.cxf.annotations.EndpointProperty;
-import org.apache.cxf.ws.security.SecurityConstants;
-import org.apache.cxf.ws.security.trust.STSClient;
-import org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service.ServiceIface;
-import org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared.WSTrustAppUtils;
- 
-import jakarta.jws.WebService;
-import jakarta.xml.ws.BindingProvider;
-import jakarta.xml.ws.Service;
-import java.net.*;
-import java.util.Map;
-import javax.xml.namespace.QName;
- 
-@WebService
-(
-   portName = "OnBehalfOfServicePort",
-   serviceName = "OnBehalfOfService",
-   wsdlLocation = "WEB-INF/wsdl/OnBehalfOfService.wsdl",
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy",
-   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof.OnBehalfOfServiceIface"
-)
- 
-@EndpointProperties(value = {
-      @EndpointProperty(key = "ws-security.signature.username", value = "myactaskey"),
-      @EndpointProperty(key = "ws-security.signature.properties", value =  "actasKeystore.properties"),
-      @EndpointProperty(key = "ws-security.encryption.properties", value = "actasKeystore.properties"),
-      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof.OnBehalfOfCallbackHandler")
-})
- 
-public class OnBehalfOfServiceImpl implements OnBehalfOfServiceIface
-{
-   public String sayHello() {
-      try {
- 
-         ServiceIface proxy = setupService();
-         return "OnBehalfOf " + proxy.sayHello();
- 
-      } catch (MalformedURLException e) {
-         e.printStackTrace();
-      }
-      return null;
-   }
- 
-   /**
-    *
-    * @return
-    * @throws MalformedURLException
-    */
-   private  ServiceIface setupService()throws MalformedURLException {
-      ServiceIface proxy = null;
-      Bus bus = BusFactory.newInstance().createBus();
- 
-      try {
-         BusFactory.setThreadDefaultBus(bus);
- 
-         final String serviceURL = "http://" + WSTrustAppUtils.getServerHost() + ":8080/jaxws-samples-wsse-policy-trust/SecurityService";
-         final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
-         final URL wsdlURL = new URL(serviceURL + "?wsdl");
-         Service service = Service.create(wsdlURL, serviceName);
-         proxy = (ServiceIface) service.getPort(ServiceIface.class);
- 
-         Map<String, Object> ctx = ((BindingProvider) proxy).getRequestContext();
-         ctx.put(SecurityConstants.CALLBACK_HANDLER, new OnBehalfOfCallbackHandler());
- 
-         ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
-            Thread.currentThread().getContextClassLoader().getResource(
-            "actasKeystore.properties" ));
-         ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myactaskey" );
-         ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
-            Thread.currentThread().getContextClassLoader().getResource(
-            "../../META-INF/clientKeystore.properties" ));
-         ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
- 
-         STSClient stsClient = new STSClient(bus);
-         Map<String, Object> props = stsClient.getProperties();
-         props.put(SecurityConstants.USERNAME, "bob");
-         props.put(SecurityConstants.ENCRYPT_USERNAME, "mystskey");
-         props.put(SecurityConstants.STS_TOKEN_USERNAME, "myactaskey" );
-         props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
-            Thread.currentThread().getContextClassLoader().getResource(
-            "actasKeystore.properties" ));
-         props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
- 
-         ctx.put(SecurityConstants.STS_CLIENT, stsClient);
- 
-      } finally {
-         bus.shutdown(true);
-      }
- 
-      return proxy;
-   }
- 
-}
-
-
-
-
-OnBehalfOfCallbackHandler -
-

OnBehalfOfCallbackHandler is a callback handler for the WSS4J Crypto -API. It is used to obtain the password for the private key in the -keystore. This class enables CXF to retrieve the password of the user -name to use for the message signature. This class has been revised to -return the passwords for this service, myactaskey and the "OnBehalfOf" -user, alice.

-
-
-
-
 package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof;
- 
-import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
-import java.util.HashMap;
-import java.util.Map;
- 
-public class OnBehalfOfCallbackHandler extends PasswordCallbackHandler {
- 
-   public OnBehalfOfCallbackHandler()
-   {
-      super(getInitMap());
-   }
- 
-   private static Map<String, String> getInitMap()
-   {
-      Map<String, String> passwords = new HashMap<String, String>();
-      passwords.put("myactaskey", "aspass");
-      passwords.put("alice", "clarinet");
-      passwords.put("bob", "trombone");
-      return passwords;
-   }
- 
-}
-
-
-
-
-
-
Web service requester
-
-

This section examines the ws-requester elements from the basic WS-Trust -scenario that have been changed to address the needs of the OnBehalfOf -example. The component is

-
-
-
    -
  • -

    OnBehalfOf web service requester implementation class

    -
  • -
-
-
-Web service requester Implementation -
-

The OnBehalfOf ws-requester, the client, uses standard procedures for -creating a reference to the web service in the first four lines. To -address the endpoint security requirements, the web service’s "Request -Context" is configured via the BindingProvider. Information needed in -the message generation is provided through it. The OnBehalfOf user, -alice, is declared in this section and the callbackHandler, -UsernameTokenCallbackHandler is provided to the STSClient for generation -of the contents for the OnBehalfOf message element. In this example a -STSClient object is created and provided to the proxy’s request context. -The alternative is to provide keys tagged with the ".it" suffix as was -done in -the -Basic Scenario client. The use of OnBehalfOf is configured by the -method call stsClient.setOnBehalfOf. The alternative is to use the key -SecurityConstants.STS_TOKEN_ON_BEHALF_OF and a value in the props map.

-
-
-
-
final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy", "OnBehalfOfService");
-final URL wsdlURL = new URL(serviceURL + "?wsdl");
-Service service = Service.create(wsdlURL, serviceName);
-OnBehalfOfServiceIface proxy = (OnBehalfOfServiceIface) service.getPort(OnBehalfOfServiceIface.class);
- 
- 
-Bus bus = BusFactory.newInstance().createBus();
-try {
- 
-    BusFactory.setThreadDefaultBus(bus);
- 
-    Map<String, Object> ctx = proxy.getRequestContext();
- 
-    ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
-    ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
-        Thread.currentThread().getContextClassLoader().getResource(
-        "META-INF/clientKeystore.properties"));
-    ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myactaskey");
-    ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
-        Thread.currentThread().getContextClassLoader().getResource(
-        "META-INF/clientKeystore.properties"));
-    ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
- 
-    // user and password OnBehalfOf user
-    // UsernameTokenCallbackHandler will extract this information when called
-    ctx.put(SecurityConstants.USERNAME,"alice");
-    ctx.put(SecurityConstants.PASSWORD, "clarinet");
- 
-    STSClient stsClient = new STSClient(bus);
- 
-    // Providing the STSClient the mechanism to create the claims contents for OnBehalfOf
-    stsClient.setOnBehalfOf(new UsernameTokenCallbackHandler());
- 
-    Map<String, Object> props = stsClient.getProperties();
-    props.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
-    props.put(SecurityConstants.ENCRYPT_PROPERTIES,
-        Thread.currentThread().getContextClassLoader().getResource(
-        "META-INF/clientKeystore.properties"));
-    props.put(SecurityConstants.ENCRYPT_USERNAME, "mystskey");
-    props.put(SecurityConstants.STS_TOKEN_USERNAME, "myclientkey");
-    props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
-        Thread.currentThread().getContextClassLoader().getResource(
-        "META-INF/clientKeystore.properties"));
-    props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
- 
-    ctx.put(SecurityConstants.STS_CLIENT, stsClient);
- 
-} finally {
-    bus.shutdown(true);
-}
-proxy.sayHello();
-
-
-
-
-
-
-
SAML Bearer Assertion Scenario
-
-

WS-Trust deals with managing software security tokens. A SAML assertion -is a type of security token. In the SAML Bearer scenario, the service -provider automatically trusts that the incoming SOAP request came from -the subject defined in the SAML token after the service verifies the -tokens signature.

-
-
-

Implementation of this scenario has the following requirements.

-
-
-
    -
  • -

    SAML tokens with a Bearer subject confirmation method must be -protected so the token can not be snooped. In most cases, a bearer token -combined with HTTPS is sufficient to prevent "a man in the middle" -getting possession of the token. This means a security policy that uses -a sp:TransportBinding and sp:HttpsToken.

    -
  • -
  • -

    A bearer token has no encryption or signing keys associated with it, -therefore a sp:IssuedToken of bearer keyType should be used with a -sp:SupportingToken or a sp:SignedSupportingTokens.

    -
  • -
-
-
-
Web service Provider
-
-

This section examines the web service elements for the SAML Bearer -scenario. The components are

-
-
-
    -
  • -

    Bearer web service provider’s WSDL

    -
  • -
  • -

    SSL configuration

    -
  • -
  • -

    Bearer web service provider’s Interface and Implementation classes.

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
  • -

    MANIFEST.MF

    -
  • -
-
-
-Web service provider WSDL -
-

The web service provider is a contract-first endpoint. All the WS-trust -and security policies for it are declared in WSDL, BearerService.wsdl. -For this scenario a ws-requester is required to present a SAML 2.0 -Bearer token issued from a designed STS. The address of the STS is -provided in the WSDL. HTTPS, a TransportBinding and HttpsToken policy -are used to protect the SOAP body of messages that pass back and forth -between ws-requester and ws-provider. A detailed explanation of the -security settings are provided in the comments in the listing below.

-
-
-
-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy"
-             name="BearerService"
-             xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy"
-             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-             xmlns="http://schemas.xmlsoap.org/wsdl/"
-             xmlns:wsp="http://www.w3.org/ns/ws-policy"
-             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
-             xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-             xmlns:wsaws="http://www.w3.org/2005/08/addressing"
-             xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"
-             xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
-             xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
- 
-  <types>
-    <xsd:schema>
-      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy"
-                  schemaLocation="BearerService_schema1.xsd"/>
-    </xsd:schema>
-  </types>
-  <message name="sayHello">
-    <part name="parameters" element="tns:sayHello"/>
-  </message>
-  <message name="sayHelloResponse">
-    <part name="parameters" element="tns:sayHelloResponse"/>
-  </message>
-  <portType name="BearerIface">
-    <operation name="sayHello">
-      <input message="tns:sayHello"/>
-      <output message="tns:sayHelloResponse"/>
-    </operation>
-  </portType>
- 
-<!--
-        The wsp:PolicyReference binds the security requirments on all the endpoints.
-        The wsp:Policy wsu:Id="#TransportSAML2BearerPolicy" element is defined later in this file.
--->
-  <binding name="BearerServicePortBinding" type="tns:BearerIface">
-    <wsp:PolicyReference URI="#TransportSAML2BearerPolicy" />
-    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
-    <operation name="sayHello">
-      <soap:operation soapAction=""/>
-      <input>
-        <soap:body use="literal"/>
-      </input>
-      <output>
-        <soap:body use="literal"/>
-      </output>
-    </operation>
-  </binding>
- 
-<!--
-  The soap:address has been defined to use JBoss's https port, 8443.  This is
-  set in conjunction with the sp:TransportBinding policy for https.
--->
-  <service name="BearerService">
-    <port name="BearerServicePort" binding="tns:BearerServicePortBinding">
-      <soap:address location="https://@jboss.bind.address@:8443/jaxws-samples-wsse-policy-trust-bearer/BearerService"/>
-    </port>
-  </service>
- 
- 
-  <wsp:Policy wsu:Id="TransportSAML2BearerPolicy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-  <!--
-        The wsam:Addressing element, indicates that the endpoints of this
-        web service MUST conform to the WS-Addressing specification.  The
-        attribute wsp:Optional="false" enforces this assertion.
-  -->
-        <wsam:Addressing wsp:Optional="false">
-          <wsp:Policy />
-        </wsam:Addressing>
- 
-<!--
-  The sp:TransportBinding element indicates that security is provided by the
-  message exchange transport medium, https.  WS-Security policy specification
-  defines the sp:HttpsToken for use in exchanging messages transmitted over HTTPS.
--->
-        <sp:TransportBinding
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-            <sp:TransportToken>
-              <wsp:Policy>
-                <sp:HttpsToken>
-                  <wsp:Policy/>
-                </sp:HttpsToken>
-              </wsp:Policy>
-            </sp:TransportToken>
-<!--
-     The sp:AlgorithmSuite element, requires the TripleDes algorithm suite
-     be used in performing cryptographic operations.
--->
-            <sp:AlgorithmSuite>
-              <wsp:Policy>
-                <sp:TripleDes />
-              </wsp:Policy>
-            </sp:AlgorithmSuite>
-<!--
-     The sp:Layout element,  indicates the layout rules to apply when adding
-     items to the security header.  The sp:Lax sub-element indicates items
-     are added to the security header in any order that conforms to
-     WSS: SOAP Message Security.
--->
-            <sp:Layout>
-              <wsp:Policy>
-                <sp:Lax />
-              </wsp:Policy>
-            </sp:Layout>
-            <sp:IncludeTimestamp />
-          </wsp:Policy>
-        </sp:TransportBinding>
- 
-<!--
-  The sp:SignedSupportingTokens element causes the supporting tokens
-  to be signed using the primary token that is used to sign the message.
--->
-        <sp:SignedSupportingTokens
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-<!--
-  The sp:IssuedToken element asserts that a SAML 2.0 security token of type
-  Bearer is expected from the STS.  The
-  sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-  attribute instructs the runtime to include the initiator's public key
-  with every message sent to the recipient.
- 
-  The sp:RequestSecurityTokenTemplate element directs that all of the
-  children of this element will be copied directly into the body of the
-  RequestSecurityToken (RST) message that is sent to the STS when the
-  initiator asks the STS to issue a token.
--->
-            <sp:IssuedToken
-              sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-              <sp:RequestSecurityTokenTemplate>
-                <t:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</t:TokenType>
-                <t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</t:KeyType>
-              </sp:RequestSecurityTokenTemplate>
-              <wsp:Policy>
-                <sp:RequireInternalReference />
-              </wsp:Policy>
-<!--
-  The sp:Issuer element defines the STS's address and endpoint information
-  This information is used by the STSClient.
--->
-              <sp:Issuer>
-                <wsaws:Address>http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts-bearer/SecurityTokenService</wsaws:Address>
-                <wsaws:Metadata
-                  xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
-                  wsdli:wsdlLocation="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts-bearer/SecurityTokenService?wsdl">
-                  <wsaw:ServiceName
-                    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
-                    xmlns:stsns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-                    EndpointName="UT_Port">stsns:SecurityTokenService</wsaw:ServiceName>
-                </wsaws:Metadata>
-              </sp:Issuer>
- 
-            </sp:IssuedToken>
-          </wsp:Policy>
-        </sp:SignedSupportingTokens>
-<!--
-    The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
-    to be supported by the STS.  These particular elements generally refer
-    to how keys are referenced within the SOAP envelope.  These are normally
-    handled by CXF.
--->
-        <sp:Wss11>
-          <wsp:Policy>
-            <sp:MustSupportRefIssuerSerial />
-            <sp:MustSupportRefThumbprint />
-            <sp:MustSupportRefEncryptedKey />
-          </wsp:Policy>
-        </sp:Wss11>
-<!--
-    The sp:Trust13 element declares controls for WS-Trust 1.3 options.
-    They are policy assertions related to exchanges specifically with
-    client and server challenges and entropy behaviors.  Again these are
-    normally handled by CXF.
--->
-        <sp:Trust13>
-          <wsp:Policy>
-            <sp:MustSupportIssuedTokens />
-            <sp:RequireClientEntropy />
-            <sp:RequireServerEntropy />
-          </wsp:Policy>
-        </sp:Trust13>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
- 
-</definitions>
-
-
-
-
-SSL configuration -
-

This web service is using https, therefore the JBoss server must be -configured to provide SSL support in the Web subsystem. There are 2 -components to SSL configuration.

-
-
-
    -
  • -

    create a certificate keystore

    -
  • -
  • -

    declare an SSL connector in the Web subsystem of the JBoss server -configuration file.

    -
  • -
-
-
-

Follow the directions for setting up TLS in the WildFly Elytron Security Guide.

-
-
-
-Web service Interface -
-

The web service provider interface class, BearerIface, is a simple -straight forward web service definition.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.bearer;
- 
-import jakarta.jws.WebMethod;
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy"
-)
-public interface BearerIface
-{
-   @WebMethod
-   String sayHello();
-}
-
-
-
-
-Web service Implementation -
-

The web service provider implementation class, BearerImpl, is a simple -POJO. It uses the standard WebService annotation to define the service -endpoint. In addition there are two Apache CXF annotations, -EndpointProperties and EndpointProperty used for configuring the -endpoint for the CXF runtime. These annotations come from the -Apache WSS4J project, which provides a -Java implementation of the primary WS-Security standards for Web -Services. These annotations are programmatically adding properties to -the endpoint. With plain Apache CXF, these properties are often set via -the <jaxws:properties> element on the <jaxws:endpoint> element in the -Spring config; these annotations allow the properties to be configured -in the code.

-
-
-

WSS4J uses the Crypto interface to get keys and certificates for -signature creation/verification, as is asserted by the WSDL for this -service. The WSS4J configuration information being provided by -BearerImpl is for Crypto’s Merlin implementation. More information will -be provided about this in the keystore section.

-
-
-

Because the web service provider automatically trusts that the incoming -SOAP request came from the subject defined in the SAML token there is no -need for a Crypto callbackHandler class or a signature username, unlike -in prior examples, however in order to verify the message signature, the -Java properties file that contains the (Merlin) crypto configuration -information is still required.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.bearer;
- 
-import org.apache.cxf.annotations.EndpointProperties;
-import org.apache.cxf.annotations.EndpointProperty;
- 
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   portName = "BearerServicePort",
-   serviceName = "BearerService",
-   wsdlLocation = "WEB-INF/wsdl/BearerService.wsdl",
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy",
-   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.bearer.BearerIface"
-)
-@EndpointProperties(value = {
-   @EndpointProperty(key = "ws-security.signature.properties", value = "serviceKeystore.properties")
-})
-public class BearerImpl implements BearerIface
-{
-   public String sayHello()
-   {
-      return "Bearer WS-Trust Hello World!";
-   }
-}
-
-
-
-
-Crypto properties and keystore files -
-

WSS4J’s Crypto implementation is loaded and configured via a Java -properties file that contains Crypto configuration data. The file -contains implementation-specific properties such as a keystore location, -password, default alias and the like. This application is using the -Merlin implementation. File serviceKeystore.properties contains this -information.

-
-
-

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains -self signed certificates for myservicekey and mystskey. Self signed -certificates are not appropriate for production use.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=sspass
-org.apache.ws.security.crypto.merlin.keystore.alias=myservicekey
-org.apache.ws.security.crypto.merlin.keystore.file=servicestore.jks
-
-
-
-
-MANIFEST.MF -
-

When deployed on WildFly this application requires access to the JBossWs -and CXF APIs provided in module org.jboss.ws.cxf.jbossws-cxf-client. The -dependency statement directs the server to provide them at deployment.

-
-
-
-
Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.8.2
-Created-By: 1.7.0_25-b15 (Oracle Corporation)
-Dependencies: org.jboss.ws.cxf.jbossws-cxf-client
-
-
-
-
-
-
Bearer Security Token Service
-
-

This section examines the crucial elements in providing the Security -Token Service functionality for providing a SAML Bearer token. The -components that will be discussed are.

-
-
-
    -
  • -

    Security Domain

    -
  • -
  • -

    STS’s WSDL

    -
  • -
  • -

    STS’s implementation class

    -
  • -
  • -

    STSBearerCallbackHandler

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
  • -

    MANIFEST.MF

    -
  • -
-
-
-Security Domain -
-

The STS requires a JBoss security domain be configured. The -jboss-web.xml descriptor declares a named security -domain,"JBossWS-trust-sts" to be used by this service for -authentication. This security domain requires two properties files and -the addition of a security-domain declaration in the JBoss server -configuration file.

-
-
-

For this scenario the domain needs to contain user alice, password -clarinet, and role friend. See the listings below for -jbossws-users.properties and jbossws-roles.properties. In addition the -following XML elements must be added to the Elytron subsystem in the -server configuration file. Replace " SOME_PATH" with appropriate -information and then configure authentication with this security domain.

-
-
-
-
<properties-realm name="JBossWS-trust-sts">
-    <users-properties path="/SOME_PATH/usersProperties"/>
-    <groups-properties path="/SOME_PATH/rolesProperties"/>
-</properties-realm>
-...
-<security-domain name="JBossWS-trust-sts" default-realm="JBossWS-trust-sts" permission-mapper="default-permission-mapper">
-    <realm name="JBossWS-trust-sts" role-decoder="groups-to-roles"/>
-</security-domain>
-
-
-
-

jboss-web.xml

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN" ">
-<jboss-web>
-  <security-domain>java:/jaas/JBossWS-trust-sts</security-domain>
-</jboss-web>
-
-
-
-

jbossws-users.properties

-
-
-
-
# A sample users.properties file for use with the UsersRolesLoginModule
-alice=clarinet
-
-
-
-

jbossws-roles.properties

-
-
-
-
# A sample roles.properties file for use with the UsersRolesLoginModule
-alice=friend
-
-
-
-
-STS’s WSDL -
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<wsdl:definitions
-  targetNamespace="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-  xmlns:tns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-  xmlns:wstrust="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-  xmlns:wsap10="http://www.w3.org/2006/05/addressing/wsdl"
-  xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-  xmlns:wsp="http://www.w3.org/ns/ws-policy"
-  xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
-  xmlns:xs="http://www.w3.org/2001/XMLSchema"
-  xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
- 
-  <wsdl:types>
-    <xs:schema elementFormDefault="qualified"
-               targetNamespace='http://docs.oasis-open.org/ws-sx/ws-trust/200512'>
- 
-      <xs:element name='RequestSecurityToken'
-                  type='wst:AbstractRequestSecurityTokenType'/>
-      <xs:element name='RequestSecurityTokenResponse'
-                  type='wst:AbstractRequestSecurityTokenType'/>
- 
-      <xs:complexType name='AbstractRequestSecurityTokenType'>
-        <xs:sequence>
-          <xs:any namespace='##any' processContents='lax' minOccurs='0'
-                  maxOccurs='unbounded'/>
-        </xs:sequence>
-        <xs:attribute name='Context' type='xs:anyURI' use='optional'/>
-        <xs:anyAttribute namespace='##other' processContents='lax'/>
-      </xs:complexType>
-      <xs:element name='RequestSecurityTokenCollection'
-                  type='wst:RequestSecurityTokenCollectionType'/>
-      <xs:complexType name='RequestSecurityTokenCollectionType'>
-        <xs:sequence>
-          <xs:element name='RequestSecurityToken'
-                      type='wst:AbstractRequestSecurityTokenType' minOccurs='2'
-                      maxOccurs='unbounded'/>
-        </xs:sequence>
-      </xs:complexType>
- 
-      <xs:element name='RequestSecurityTokenResponseCollection'
-                  type='wst:RequestSecurityTokenResponseCollectionType'/>
-      <xs:complexType name='RequestSecurityTokenResponseCollectionType'>
-        <xs:sequence>
-          <xs:element ref='wst:RequestSecurityTokenResponse' minOccurs='1'
-                      maxOccurs='unbounded'/>
-        </xs:sequence>
-        <xs:anyAttribute namespace='##other' processContents='lax'/>
-      </xs:complexType>
- 
-    </xs:schema>
-  </wsdl:types>
- 
-  <!-- WS-Trust defines the following GEDs -->
-  <wsdl:message name="RequestSecurityTokenMsg">
-    <wsdl:part name="request" element="wst:RequestSecurityToken"/>
-  </wsdl:message>
-  <wsdl:message name="RequestSecurityTokenResponseMsg">
-    <wsdl:part name="response"
-               element="wst:RequestSecurityTokenResponse"/>
-  </wsdl:message>
-  <wsdl:message name="RequestSecurityTokenCollectionMsg">
-    <wsdl:part name="requestCollection"
-               element="wst:RequestSecurityTokenCollection"/>
-  </wsdl:message>
-  <wsdl:message name="RequestSecurityTokenResponseCollectionMsg">
-    <wsdl:part name="responseCollection"
-               element="wst:RequestSecurityTokenResponseCollection"/>
-  </wsdl:message>
- 
-  <!-- This portType an example of a Requestor (or other) endpoint that
-  Accepts SOAP-based challenges from a Security Token Service -->
-  <wsdl:portType name="WSSecurityRequestor">
-    <wsdl:operation name="Challenge">
-      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
-      <wsdl:output message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-  </wsdl:portType>
- 
-  <!-- This portType is an example of an STS supporting full protocol -->
-  <!--
-      The wsdl:portType and data types are XML elements defined by the
-      WS_Trust specification.  The wsdl:portType defines the endpoints
-      supported in the STS implementation.  This WSDL defines all operations
-      that an STS implementation can support.
-  -->
-  <wsdl:portType name="STS">
-    <wsdl:operation name="Cancel">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/CancelFinal"
-        message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="Issue">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal"
-        message="tns:RequestSecurityTokenResponseCollectionMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="Renew">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/RenewFinal"
-        message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="Validate">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/ValidateFinal"
-        message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="KeyExchangeToken">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KET"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/KETFinal"
-        message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="RequestCollection">
-      <wsdl:input message="tns:RequestSecurityTokenCollectionMsg"/>
-      <wsdl:output message="tns:RequestSecurityTokenResponseCollectionMsg"/>
-    </wsdl:operation>
-  </wsdl:portType>
- 
-  <!-- This portType is an example of an endpoint that accepts
-  Unsolicited RequestSecurityTokenResponse messages -->
-  <wsdl:portType name="SecurityTokenResponseService">
-    <wsdl:operation name="RequestSecurityTokenResponse">
-      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-  </wsdl:portType>
- 
-  <!--
-      The wsp:PolicyReference binds the security requirments on all the STS endpoints.
-      The wsp:Policy wsu:Id="UT_policy" element is later in this file.
-  -->
-  <wsdl:binding name="UT_Binding" type="wstrust:STS">
-    <wsp:PolicyReference URI="#UT_policy"/>
-    <soap:binding style="document"
-                  transport="http://schemas.xmlsoap.org/soap/http"/>
-    <wsdl:operation name="Issue">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"/>
-      <wsdl:input>
-        <wsp:PolicyReference
-          URI="#Input_policy"/>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference
-          URI="#Output_policy"/>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="Validate">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate"/>
-      <wsdl:input>
-        <wsp:PolicyReference
-          URI="#Input_policy"/>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference
-          URI="#Output_policy"/>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="Cancel">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel"/>
-      <wsdl:input>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="Renew">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew"/>
-      <wsdl:input>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="KeyExchangeToken">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KeyExchangeToken"/>
-      <wsdl:input>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="RequestCollection">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/RequestCollection"/>
-      <wsdl:input>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-  </wsdl:binding>
- 
-  <wsdl:service name="SecurityTokenService">
-    <wsdl:port name="UT_Port" binding="tns:UT_Binding">
-      <soap:address location="http://localhost:8080/SecurityTokenService/UT"/>
-    </wsdl:port>
-  </wsdl:service>
- 
- 
-  <wsp:Policy wsu:Id="UT_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <!--
-            The sp:UsingAddressing element, indicates that the endpoints of this
-            web service conforms to the WS-Addressing specification.  More detail
-            can be found here: [http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529]
-        -->
-        <wsap10:UsingAddressing/>
-        <!--
-            The sp:SymmetricBinding element indicates that security is provided
-            at the SOAP layer and any initiator must authenticate itself by providing
-            WSS UsernameToken credentials.
-        -->
-        <sp:SymmetricBinding
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-            <!--
-                In a symmetric binding, the keys used for encrypting and signing in both
-                directions are derived from a single key, the one specified by the
-                sp:ProtectionToken element.  The sp:X509Token sub-element declares this
-                key to be a X.509 certificate and the
-                IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never"
-                attribute adds the requirement that the token MUST NOT be included in
-                any messages sent between the initiator and the recipient; rather, an
-                external reference to the token should be used.  Lastly the WssX509V3Token10
-                sub-element declares that the Username token presented by the initiator
-                should be compliant with Web Services Security UsernameToken Profile
-                1.0 specification. [ http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf ]
-            -->
-            <sp:ProtectionToken>
-              <wsp:Policy>
-                <sp:X509Token
-                  sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
-                  <wsp:Policy>
-                    <sp:RequireDerivedKeys/>
-                    <sp:RequireThumbprintReference/>
-                    <sp:WssX509V3Token10/>
-                  </wsp:Policy>
-                </sp:X509Token>
-              </wsp:Policy>
-            </sp:ProtectionToken>
-            <!--
-                The sp:AlgorithmSuite element, requires the Basic256 algorithm suite
-                be used in performing cryptographic operations.
-            -->
-            <sp:AlgorithmSuite>
-              <wsp:Policy>
-                <sp:Basic256/>
-              </wsp:Policy>
-            </sp:AlgorithmSuite>
-            <!--
-                The sp:Layout element,  indicates the layout rules to apply when adding
-                items to the security header.  The sp:Lax sub-element indicates items
-                are added to the security header in any order that conforms to
-                WSS: SOAP Message Security.
-            -->
-            <sp:Layout>
-              <wsp:Policy>
-                <sp:Lax/>
-              </wsp:Policy>
-            </sp:Layout>
-            <sp:IncludeTimestamp/>
-            <sp:EncryptSignature/>
-            <sp:OnlySignEntireHeadersAndBody/>
-          </wsp:Policy>
-        </sp:SymmetricBinding>
- 
-        <!--
-            The sp:SignedSupportingTokens element declares that the security header
-            of messages must contain a sp:UsernameToken and the token must be signed.
-            The attribute IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"
-            on sp:UsernameToken indicates that the token MUST be included in all
-            messages sent from initiator to the recipient and that the token MUST
-            NOT be included in messages sent from the recipient to the initiator.
-            And finally the element sp:WssUsernameToken10 is a policy assertion
-            indicating the Username token should be as defined in  Web Services
-            Security UsernameToken Profile 1.0
-        -->
-        <sp:SignedSupportingTokens
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-            <sp:UsernameToken
-              sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-              <wsp:Policy>
-                <sp:WssUsernameToken10/>
-              </wsp:Policy>
-            </sp:UsernameToken>
-          </wsp:Policy>
-        </sp:SignedSupportingTokens>
-        <!--
-            The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
-            to be supported by the STS.  These particular elements generally refer
-            to how keys are referenced within the SOAP envelope.  These are normally
-            handled by CXF.
-        -->
-        <sp:Wss11
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-            <sp:MustSupportRefKeyIdentifier/>
-            <sp:MustSupportRefIssuerSerial/>
-            <sp:MustSupportRefThumbprint/>
-            <sp:MustSupportRefEncryptedKey/>
-          </wsp:Policy>
-        </sp:Wss11>
-        <!--
-            The sp:Trust13 element declares controls for WS-Trust 1.3 options.
-            They are policy assertions related to exchanges specifically with
-            client and server challenges and entropy behaviors.  Again these are
-            normally handled by CXF.
-        -->
-        <sp:Trust13
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-            <sp:MustSupportIssuedTokens/>
-            <sp:RequireClientEntropy/>
-            <sp:RequireServerEntropy/>
-          </wsp:Policy>
-        </sp:Trust13>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
- 
-  <wsp:Policy wsu:Id="Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <sp:Body/>
-          <sp:Header Name="To"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="From"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="FaultTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="ReplyTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="MessageID"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="RelatesTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="Action"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-        </sp:SignedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
- 
-  <wsp:Policy wsu:Id="Output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <sp:Body/>
-          <sp:Header Name="To"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="From"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="FaultTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="ReplyTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="MessageID"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="RelatesTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="Action"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-        </sp:SignedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
- 
-</wsdl:definitions>
-
-
-
-
-STS’s implementation class -
-

The Apache CXF’s STS, SecurityTokenServiceProvider, is a web service -provider that is compliant with the protocols and functionality defined -by the WS-Trust specification. It has a modular architecture. Many of -its components are configurable or replaceable and there are many -optional features that are enabled by implementing and configuring -plug-ins. Users can customize their own STS by extending from -SecurityTokenServiceProvider and overriding the default settings. -Extensive information about the CXF’s STS configurable and pluggable -components can be found -here.

-
-
-

This STS implementation class, SampleSTSBearer, is a POJO that extends -from SecurityTokenServiceProvider. Note that the class is defined with a -WebServiceProvider annotation and not a WebService annotation. This -annotation defines the service as a Provider-based endpoint, meaning it -supports a more messaging-oriented approach to Web services. In -particular, it signals that the exchanged messages will be XML documents -of some type. SecurityTokenServiceProvider is an implementation of the -jakarta.xml.ws.Provider interface. In comparison the WebService annotation -defines a (service endpoint interface) SEI-based endpoint which supports -message exchange via SOAP envelopes.

-
-
-

As was done in the BearerImpl class, the WSS4J annotations -EndpointProperties and EndpointProperty are providing endpoint -configuration for the CXF runtime. The first EndpointProperty statement -in the listing is declaring the user’s name to use for the message -signature. It is used as the alias name in the keystore to get the -user’s cert and private key for signature. The next two EndpointProperty -statements declares the Java properties file that contains the (Merlin) -crypto configuration information. In this case both for signing and -encrypting the messages. WSS4J reads this file and extra required -information for message handling. The last EndpointProperty statement -declares the STSBearerCallbackHandler implementation class. It is used -to obtain the user’s password for the certificates in the keystore file.

-
-
-

In this implementation we are customizing the operations of token -issuance, token validation and their static properties.

-
-
-

StaticSTSProperties is used to set select properties for configuring -resources in the STS. You may think this is a duplication of the -settings made with the WSS4J annotations. The values are the same but -the underlaying structures being set are different, thus this -information must be declared in both places.

-
-
-

The setIssuer setting is important because it uniquely identifies the -issuing STS. The issuer string is embedded in issued tokens and, when -validating tokens, the STS checks the issuer string value. Consequently, -it is important to use the issuer string in a consistent way, so that -the STS can recognize the tokens that it has issued.

-
-
-

The setEndpoints call allows the declaration of a set of allowed token -recipients by address. The addresses are specified as reg-ex patterns.

-
-
-

TokenIssueOperation has a modular structure. This allows custom -behaviors to be injected into the processing of messages. In this case -we are overriding the SecurityTokenServiceProvider’s default behavior -and performing SAML token processing. CXF provides an implementation of -a SAMLTokenProvider which we are using rather than writing our own.

-
-
-

Learn more about the SAMLTokenProvider -here.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsbearer;
- 
-import org.apache.cxf.annotations.EndpointProperties;
-import org.apache.cxf.annotations.EndpointProperty;
-import org.apache.cxf.sts.StaticSTSProperties;
-import org.apache.cxf.sts.operation.TokenIssueOperation;
-import org.apache.cxf.sts.service.ServiceMBean;
-import org.apache.cxf.sts.service.StaticService;
-import org.apache.cxf.sts.token.provider.SAMLTokenProvider;
-import org.apache.cxf.ws.security.sts.provider.SecurityTokenServiceProvider;
- 
-import jakarta.xml.ws.WebServiceProvider;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
- 
-@WebServiceProvider(serviceName = "SecurityTokenService",
-      portName = "UT_Port",
-      targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/",
-      wsdlLocation = "WEB-INF/wsdl/bearer-ws-trust-1.4-service.wsdl")
-//be sure to have dependency on org.apache.cxf module when on AS7, otherwise Apache CXF annotations are ignored
-@EndpointProperties(value = {
-      @EndpointProperty(key = "ws-security.signature.username", value = "mystskey"),
-      @EndpointProperty(key = "ws-security.signature.properties", value = "stsKeystore.properties"),
-      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsbearer.STSBearerCallbackHandler")
-})
-public class SampleSTSBearer extends SecurityTokenServiceProvider
-{
- 
-   public SampleSTSBearer() throws Exception
-   {
-      super();
- 
-      StaticSTSProperties props = new StaticSTSProperties();
-      props.setSignatureCryptoProperties("stsKeystore.properties");
-      props.setSignatureUsername("mystskey");
-      props.setCallbackHandlerClass(STSBearerCallbackHandler.class.getName());
-      props.setEncryptionCryptoProperties("stsKeystore.properties");
-      props.setEncryptionUsername("myservicekey");
-      props.setIssuer("DoubleItSTSIssuer");
- 
-      List<ServiceMBean> services = new LinkedList<ServiceMBean>();
-      StaticService service = new StaticService();
-      service.setEndpoints(Arrays.asList(
-         "https://localhost:(\\d)*/jaxws-samples-wsse-policy-trust-bearer/BearerService",
-         "https://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-bearer/BearerService",
-         "https://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-bearer/BearerService"
-      ));
-      services.add(service);
- 
-      TokenIssueOperation issueOperation = new TokenIssueOperation();
-      issueOperation.getTokenProviders().add(new SAMLTokenProvider());
-      issueOperation.setServices(services);
-      issueOperation.setStsProperties(props);
-      this.setIssueOperation(issueOperation);
-   }
-}
-
-
-
-
-STSBearerCallbackHandler -
-

STSBearerCallbackHandler is a callback handler for the WSS4J Crypto API. -It is used to obtain the password for the private key in the keystore. -This class enables CXF to retrieve the password of the user name to use -for the message signature.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsbearer;
- 
-import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
- 
-import java.util.HashMap;
-import java.util.Map;
- 
-public class STSBearerCallbackHandler extends PasswordCallbackHandler
-{
-   public STSBearerCallbackHandler()
-   {
-      super(getInitMap());
-   }
- 
-   private static Map<String, String> getInitMap()
-   {
-      Map<String, String> passwords = new HashMap<String, String>();
-      passwords.put("mystskey", "stskpass");
-      passwords.put("alice", "clarinet");
-      return passwords;
-   }
-}
-
-
-
-
-Crypto properties and keystore files -
-

WSS4J’s Crypto implementation is loaded and configured via a Java -properties file that contains Crypto configuration data. The file -contains implementation-specific properties such as a keystore location, -password, default alias and the like. This application is using the -Merlin implementation. File stsKeystore.properties contains this -information.

-
-
-

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains -self signed certificates for myservicekey and mystskey. Self signed -certificates are not appropriate for production use.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=stsspass
-org.apache.ws.security.crypto.merlin.keystore.file=stsstore.jks
-
-
-
-
-MANIFEST.MF -
-

When deployed on WildFly, this application requires access to the -JBossWs and CXF APIs provided in modules -org.jboss.ws.cxf.jbossws-cxf-client and org.apache.cxf. The Apache CXF -internals, org.apache.cxf.impl, are needed to build the STS -configuration in the SampleSTS constructor. The dependency statement -directs the server to provide them at deployment.

-
-
-
-
Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.8.2
-Created-By: 1.7.0_25-b15 (Oracle Corporation)
-Dependencies: org.jboss.ws.cxf.jbossws-cxf-client,org.apache.cxf.impl
-
-
-
-
-
-
Web service requester
-
-

This section examines the crucial elements in calling a web service that -implements endpoint security as described in the SAML Bearer scenario. -The components that will be discussed are.

-
-
-
    -
  • -

    Web service requester’s implementation

    -
  • -
  • -

    ClientCallbackHandler

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
-
-
-Web service requester Implementation -
-

The ws-requester, the client, uses standard procedures for creating a -reference to the web service. To address the endpoint security -requirements, the web service’s "Request Context" is configured with the -information needed in message generation. In addition, the STSClient -that communicates with the STS is configured with similar values. Note -the key strings ending with a ".it" suffix. This suffix flags these -settings as belonging to the STSClient. The internal CXF code assigns -this information to the STSClient that is auto-generated for this -service call.

-
-
-

There is an alternate method of setting up the STSCLient. The user may -provide their own instance of the STSClient. The CXF code will use this -object and not auto-generate one. When providing the STSClient in this -way, the user must provide a org.apache.cxf.Bus for it and the -configuration keys must not have the ".it" suffix. This is used in the -ActAs and OnBehalfOf examples.

-
-
-
-
  String serviceURL = "https://" + getServerHost() + ":8443/jaxws-samples-wsse-policy-trust-bearer/BearerService";
- 
-  final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy", "BearerService");
-  Service service = Service.create(new URL(serviceURL + "?wsdl"), serviceName);
-  BearerIface proxy = (BearerIface) service.getPort(BearerIface.class);
- 
-  Map<String, Object> ctx = ((BindingProvider)proxy).getRequestContext();
- 
-  // set the security related configuration information for the service "request"
-  ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
-  ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
-    Thread.currentThread().getContextClassLoader().getResource(
-    "META-INF/clientKeystore.properties"));
-  ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
-    Thread.currentThread().getContextClassLoader().getResource(
-    "META-INF/clientKeystore.properties"));
-  ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
-  ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
- 
-  //-- Configuration settings that will be transfered to the STSClient
-  // "alice" is the name provided for the WSS Username. Her password will
-  // be retreived from the ClientCallbackHander by the STSClient.
-  ctx.put(SecurityConstants.USERNAME + ".it", "alice");
-  ctx.put(SecurityConstants.CALLBACK_HANDLER + ".it", new ClientCallbackHandler());
-  ctx.put(SecurityConstants.ENCRYPT_PROPERTIES + ".it",
-    Thread.currentThread().getContextClassLoader().getResource(
-    "META-INF/clientKeystore.properties"));
-  ctx.put(SecurityConstants.ENCRYPT_USERNAME + ".it", "mystskey");
-  ctx.put(SecurityConstants.STS_TOKEN_USERNAME + ".it", "myclientkey");
-  ctx.put(SecurityConstants.STS_TOKEN_PROPERTIES + ".it",
-    Thread.currentThread().getContextClassLoader().getResource(
-    "META-INF/clientKeystore.properties"));
-  ctx.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO + ".it", "true");
- 
-  proxy.sayHello();
-
-
-
-
-ClientCallbackHandler - -
-

ClientCallbackHandler is a callback handler for the WSS4J Crypto API. It -is used to obtain the password for the private key in the keystore. This -class enables CXF to retrieve the password of the user name to use for -the message signature. Note that "alice" and her password have been -provided here. This information is not in the (JKS) keystore but -provided in the WildFly security domain. It was declared in file -jbossws-users.properties.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared;
- 
-import java.io.IOException;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import org.apache.ws.security.WSPasswordCallback;
- 
-public class ClientCallbackHandler implements CallbackHandler {
- 
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            if (callbacks[i] instanceof WSPasswordCallback) {
-                WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
-                if ("myclientkey".equals(pc.getIdentifier())) {
-                    pc.setPassword("ckpass");
-                    break;
-                } else if ("alice".equals(pc.getIdentifier())) {
-                    pc.setPassword("clarinet");
-                    break;
-                } else if ("bob".equals(pc.getIdentifier())) {
-                    pc.setPassword("trombone");
-                    break;
-                } else if ("myservicekey".equals(pc.getIdentifier())) {  // rls test  added for bearer test
-                   pc.setPassword("skpass");
-                   break;
-                }
-            }
-        }
-    }
-}
-
-
-
-
-Crypto properties and keystore files - -
-

WSS4J’s Crypto implementation is loaded and configured via a Java -properties file that contains Crypto configuration data. The file -contains implementation-specific properties such as a keystore location, -password, default alias and the like. This application is using the -Merlin implementation. File clientKeystore.properties contains this -information.

-
-
-

File clientstore.jks, is a Java KeyStore (JKS) repository. It contains -self signed certificates for myservicekey and mystskey. Self signed -certificates are not appropriate for production use.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=cspass
-org.apache.ws.security.crypto.merlin.keystore.alias=myclientkey
-org.apache.ws.security.crypto.merlin.keystore.file=META-INF/clientstore.jks
-
-
-
-
-
-
-
SAML Holder-Of-Key Assertion Scenario
-
-

WS-Trust deals with managing software security tokens. A SAML assertion -is a type of security token. In the Holder-Of-Key method, the STS -creates a SAML token containing the client’s public key and signs the -SAML token with its private key. The client includes the SAML token and -signs the outgoing soap envelope to the web service with its private -key. The web service validates the SOAP message and the SAML token.

-
-
-

Implementation of this scenario has the following requirements.

-
-
-
    -
  • -

    SAML tokens with a Holder-Of-Key subject confirmation method must be -protected so the token can not be snooped. In most cases, a -Holder-Of-Key token combined with HTTPS is sufficient to prevent "a man -in the middle" getting possession of the token. This means a security -policy that uses a sp:TransportBinding and sp:HttpsToken.

    -
  • -
  • -

    A Holder-Of-Key token has no encryption or signing keys associated -with it, therefore a sp:IssuedToken of SymmetricKey or PublicKey keyType -should be used with a sp:SignedEndorsingSupportingTokens.

    -
  • -
-
-
-
Web service Provider
-
-

This section examines the web service elements for the SAML -Holder-Of-Key scenario. The components are

-
-
-
    -
  • -

    Web service provider’s WSDL

    -
  • -
  • -

    SSL configuration

    -
  • -
  • -

    Web service provider’s Interface and Implementation classes.

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
  • -

    MANIFEST.MF

    -
  • -
-
-
-Web service provider WSDL -
-

The web service provider is a contract-first endpoint. All the WS-trust -and security policies for it are declared in the WSDL, -HolderOfKeyService.wsdl. For this scenario a ws-requester is required to -present a SAML 2.0 token of SymmetricKey keyType, issued from a designed -STS. The address of the STS is provided in the WSDL. A transport binding -policy is used. The token is declared to be signed and endorsed, -sp:SignedEndorsingSupportingTokens. A detailed explanation of the -security settings are provided in the comments in the listing below.

-
-
-
-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy"
-             name="HolderOfKeyService"
-        xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy"
-        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-        xmlns="http://schemas.xmlsoap.org/wsdl/"
-        xmlns:wsp="http://www.w3.org/ns/ws-policy"
-        xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
-    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-    xmlns:wsaws="http://www.w3.org/2005/08/addressing"
-    xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"
-    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
-    xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
- 
-  <types>
-    <xsd:schema>
-      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy"
-                  schemaLocation="HolderOfKeyService_schema1.xsd"/>
-    </xsd:schema>
-  </types>
-  <message name="sayHello">
-    <part name="parameters" element="tns:sayHello"/>
-  </message>
-  <message name="sayHelloResponse">
-    <part name="parameters" element="tns:sayHelloResponse"/>
-  </message>
-  <portType name="HolderOfKeyIface">
-    <operation name="sayHello">
-      <input message="tns:sayHello"/>
-      <output message="tns:sayHelloResponse"/>
-    </operation>
-  </portType>
-<!--
-        The wsp:PolicyReference binds the security requirments on all the endpoints.
-        The wsp:Policy wsu:Id="#TransportSAML2HolderOfKeyPolicy" element is defined later in this file.
--->
-  <binding name="HolderOfKeyServicePortBinding" type="tns:HolderOfKeyIface">
-    <wsp:PolicyReference URI="#TransportSAML2HolderOfKeyPolicy" />
-    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
-    <operation name="sayHello">
-      <soap:operation soapAction=""/>
-      <input>
-        <soap:body use="literal"/>
-      </input>
-      <output>
-        <soap:body use="literal"/>
-      </output>
-    </operation>
-  </binding>
-<!--
-  The soap:address has been defined to use JBoss's https port, 8443.  This is
-  set in conjunction with the sp:TransportBinding policy for https.
--->
-  <service name="HolderOfKeyService">
-    <port name="HolderOfKeyServicePort" binding="tns:HolderOfKeyServicePortBinding">
-      <soap:address location="https://@jboss.bind.address@:8443/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService"/>
-    </port>
-  </service>
- 
- 
-  <wsp:Policy wsu:Id="TransportSAML2HolderOfKeyPolicy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-  <!--
-        The wsam:Addressing element, indicates that the endpoints of this
-        web service MUST conform to the WS-Addressing specification.  The
-        attribute wsp:Optional="false" enforces this assertion.
-  -->
-        <wsam:Addressing wsp:Optional="false">
-          <wsp:Policy />
-        </wsam:Addressing>
-<!--
-  The sp:TransportBinding element indicates that security is provided by the
-  message exchange transport medium, https.  WS-Security policy specification
-  defines the sp:HttpsToken for use in exchanging messages transmitted over HTTPS.
--->
-          <sp:TransportBinding
-            xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-            <wsp:Policy>
-              <sp:TransportToken>
-                <wsp:Policy>
-                  <sp:HttpsToken>
-                    <wsp:Policy/>
-                  </sp:HttpsToken>
-                </wsp:Policy>
-              </sp:TransportToken>
-<!--
-     The sp:AlgorithmSuite element, requires the TripleDes algorithm suite
-     be used in performing cryptographic operations.
--->
-              <sp:AlgorithmSuite>
-                <wsp:Policy>
-                  <sp:TripleDes />
-                </wsp:Policy>
-              </sp:AlgorithmSuite>
-<!--
-     The sp:Layout element,  indicates the layout rules to apply when adding
-     items to the security header.  The sp:Lax sub-element indicates items
-     are added to the security header in any order that conforms to
-     WSS: SOAP Message Security.
--->
-              <sp:Layout>
-                <wsp:Policy>
-                  <sp:Lax />
-                </wsp:Policy>
-              </sp:Layout>
-              <sp:IncludeTimestamp />
-            </wsp:Policy>
-          </sp:TransportBinding>
- 
-<!--
-  The sp:SignedEndorsingSupportingTokens, when transport level security level is
-  used there will be no message signature and the signature generated by the
-  supporting token will sign the Timestamp.
--->
-        <sp:SignedEndorsingSupportingTokens
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-<!--
-  The sp:IssuedToken element asserts that a SAML 2.0 security token of type
-  Bearer is expected from the STS.  The
-  sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-  attribute instructs the runtime to include the initiator's public key
-  with every message sent to the recipient.
- 
-  The sp:RequestSecurityTokenTemplate element directs that all of the
-  children of this element will be copied directly into the body of the
-  RequestSecurityToken (RST) message that is sent to the STS when the
-  initiator asks the STS to issue a token.
--->
-            <sp:IssuedToken
-              sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-              <sp:RequestSecurityTokenTemplate>
-                <t:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</t:TokenType>
- <!--
-   KeyType of "SymmetricKey", the client must prove to the WS service that it
-   possesses a particular symmetric session key.
- -->
-                <t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey</t:KeyType>
-              </sp:RequestSecurityTokenTemplate>
-              <wsp:Policy>
-                <sp:RequireInternalReference />
-              </wsp:Policy>
-<!--
-  The sp:Issuer element defines the STS's address and endpoint information
-  This information is used by the STSClient.
--->
-              <sp:Issuer>
-                <wsaws:Address>http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts-holderofkey/SecurityTokenService</wsaws:Address>
-                <wsaws:Metadata
-                  xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
-                  wsdli:wsdlLocation="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts-holderofkey/SecurityTokenService?wsdl">
-                  <wsaw:ServiceName
-                    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
-                    xmlns:stsns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-                    EndpointName="UT_Port">stsns:SecurityTokenService</wsaw:ServiceName>
-                </wsaws:Metadata>
-              </sp:Issuer>
- 
-            </sp:IssuedToken>
-          </wsp:Policy>
-        </sp:SignedEndorsingSupportingTokens>
-<!--
-    The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
-    to be supported by the STS.  These particular elements generally refer
-    to how keys are referenced within the SOAP envelope.  These are normally
-    handled by CXF.
--->
-        <sp:Wss11>
-          <wsp:Policy>
-            <sp:MustSupportRefIssuerSerial />
-            <sp:MustSupportRefThumbprint />
-            <sp:MustSupportRefEncryptedKey />
-          </wsp:Policy>
-        </sp:Wss11>
-<!--
-    The sp:Trust13 element declares controls for WS-Trust 1.3 options.
-    They are policy assertions related to exchanges specifically with
-    client and server challenges and entropy behaviors.  Again these are
-    normally handled by CXF.
--->
-        <sp:Trust13>
-          <wsp:Policy>
-            <sp:MustSupportIssuedTokens />
-            <sp:RequireClientEntropy />
-            <sp:RequireServerEntropy />
-          </wsp:Policy>
-        </sp:Trust13>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
- 
-</definitions>
-
-
-
-
-SSL configuration - -
-

This web service is using https, therefore the JBoss server must be -configured to provide SSL support in the Web subsystem. There are 2 -components to SSL configuration.

-
-
-
    -
  • -

    create a certificate keystore

    -
  • -
  • -

    declare an SSL connector in the Web subsystem of the JBoss server -configuration file.

    -
  • -
-
-
-

Follow the directions for setting up TLS in the WildFly Elytron Security Guide.

-
-
-
-Web service Interface -
-

The web service provider interface class, HolderOfKeyIface, is a simple -straight forward web service definition.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.holderofkey;
- 
-import jakarta.jws.WebMethod;
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy"
-)
-public interface HolderOfKeyIface {
-   @WebMethod
-   String sayHello();
-}
-
-
-
-
-Web service Implementation -
-

The web service provider implementation class, HolderOfKeyImpl, is a -simple POJO. It uses the standard WebService annotation to define the -service endpoint. In addition there are two Apache CXF annotations, -EndpointProperties and EndpointProperty used for configuring the -endpoint for the CXF runtime. These annotations come from the -Apache WSS4J project, which provides a -Java implementation of the primary WS-Security standards for Web -Services. These annotations are programmatically adding properties to -the endpoint. With plain Apache CXF, these properties are often set via -the <jaxws:properties> element on the <jaxws:endpoint> element in the -Spring config; these annotations allow the properties to be configured -in the code.

-
-
-

WSS4J uses the Crypto interface to get keys and certificates for -signature creation/verification, as is asserted by the WSDL for this -service. The WSS4J configuration information being provided by -HolderOfKeyImpl is for Crypto’s Merlin implementation. More information -will be provided about this in the keystore section.

-
-
-

The first EndpointProperty statement in the listing disables ensurance -of compliance with the Basic Security Profile 1.1. The next -EndpointProperty statements declares the Java properties file that -contains the (Merlin) crypto configuration information. The last -EndpointProperty statement declares the STSHolderOfKeyCallbackHandler -implementation class. It is used to obtain the user’s password for the -certificates in the keystore file.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.holderofkey;
- 
-import org.apache.cxf.annotations.EndpointProperties;
-import org.apache.cxf.annotations.EndpointProperty;
- 
-import jakarta.jws.WebService;
- 
-@WebService
-   (
-      portName = "HolderOfKeyServicePort",
-      serviceName = "HolderOfKeyService",
-      wsdlLocation = "WEB-INF/wsdl/HolderOfKeyService.wsdl",
-      targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy",
-      endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.holderofkey.HolderOfKeyIface"
-   )
-@EndpointProperties(value = {
-   @EndpointProperty(key = "ws-security.is-bsp-compliant", value = "false"),
-   @EndpointProperty(key = "ws-security.signature.properties", value = "serviceKeystore.properties"),
-   @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.holderofkey.HolderOfKeyCallbackHandler")
-})
-public class HolderOfKeyImpl implements HolderOfKeyIface
-{
-   public String sayHello()
-   {
-      return "Holder-Of-Key WS-Trust Hello World!";
-   }
-}
-
-
-
-
-Crypto properties and keystore files -
-

WSS4J’s Crypto implementation is loaded and configured via a Java -properties file that contains Crypto configuration data. The file -contains implementation-specific properties such as a keystore location, -password, default alias and the like. This application is using the -Merlin implementation. File serviceKeystore.properties contains this -information.

-
-
-

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains -self signed certificates for myservicekey and mystskey. Self signed -certificates are not appropriate for production use.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=sspass
-org.apache.ws.security.crypto.merlin.keystore.alias=myservicekey
-org.apache.ws.security.crypto.merlin.keystore.file=servicestore.jks
-
-
-
-
-MANIFEST.MF - -
-

When deployed on WildFly this application requires access to the JBossWs -and CXF APIs provided in module org.jboss.ws.cxf.jbossws-cxf-client. The -dependency statement directs the server to provide them at deployment.

-
-
-
-
Manifest-Version:1.0
-Ant-Version: Apache Ant1.8.2
-Created-By:1.7.0_25-b15 (Oracle Corporation)
-Dependencies: org.jboss.ws.cxf.jbossws-cxf-client
-
-
-
-
-
-
Security Token Service
-
-

This section examines the crucial elements in providing the Security -Token Service functionality for providing a SAML Holder-Of-Key token. -The components that will be discussed are.

-
-
-
    -
  • -

    Security Domain

    -
  • -
  • -

    STS’s WSDL

    -
  • -
  • -

    STS’s implementation class

    -
  • -
  • -

    STSBearerCallbackHandler

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
  • -

    MANIFEST.MF

    -
  • -
-
-
-Security Domain -
-

The STS requires a JBoss security domain be configured. The -jboss-web.xml descriptor declares a named security -domain,"JBossWS-trust-sts" to be used by this service for -authentication. This security domain requires two properties files and -the addition of a security-domain declaration in the JBoss server -configuration file.

-
-
-

For this scenario the domain needs to contain user alice, password -clarinet, and role friend. See the listings below for -jbossws-users.properties and jbossws-roles.properties. In addition the -following XML elements must be added to the Elytron subsystem in the -server configuration file. Replace " SOME_PATH" with appropriate -information and then configure authentication with this security domain.

-
-
-
-
<properties-realm name="JBossWS-trust-sts">
-    <users-properties path="/SOME_PATH/usersProperties"/>
-    <groups-properties path="/SOME_PATH/rolesProperties"/>
-</properties-realm>
-...
-<security-domain name="JBossWS-trust-sts" default-realm="JBossWS-trust-sts" permission-mapper="default-permission-mapper">
-    <realm name="JBossWS-trust-sts" role-decoder="groups-to-roles"/>
-</security-domain>
-
-
-
-

jboss-web.xml

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE jboss-web PUBLIC"-//JBoss//DTD Web Application 2.4//EN" ">
-<jboss-web>
-  <security-domain>java:/jaas/JBossWS-trust-sts</security-domain>
-</jboss-web>
-
-
- --- - - - - - -
 
-
-

jbossws-users.properties

-
-
-
-
# A sample users.properties filefor use with the UsersRolesLoginModule
-alice=clarinet
-
-
- --- - - - - - -
 
-
-

jbossws-roles.properties

-
-
-
-
# A sample roles.properties filefor use with the UsersRolesLoginModule
-alice=friend
-
-
-
-
-STS’s WSDL -
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<wsdl:definitions
-  targetNamespace="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-  xmlns:tns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-  xmlns:wstrust="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
-  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-  xmlns:wsap10="http://www.w3.org/2006/05/addressing/wsdl"
-  xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-  xmlns:wsp="http://www.w3.org/ns/ws-policy"
-  xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
-  xmlns:xs="http://www.w3.org/2001/XMLSchema"
-  xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
- 
-  <wsdl:types>
-    <xs:schema elementFormDefault="qualified"
-               targetNamespace='http://docs.oasis-open.org/ws-sx/ws-trust/200512'>
- 
-      <xs:element name='RequestSecurityToken'
-                  type='wst:AbstractRequestSecurityTokenType'/>
-      <xs:element name='RequestSecurityTokenResponse'
-                  type='wst:AbstractRequestSecurityTokenType'/>
- 
-      <xs:complexType name='AbstractRequestSecurityTokenType'>
-        <xs:sequence>
-          <xs:any namespace='##any' processContents='lax' minOccurs='0'
-                  maxOccurs='unbounded'/>
-        </xs:sequence>
-        <xs:attribute name='Context' type='xs:anyURI' use='optional'/>
-        <xs:anyAttribute namespace='##other' processContents='lax'/>
-      </xs:complexType>
-      <xs:element name='RequestSecurityTokenCollection'
-                  type='wst:RequestSecurityTokenCollectionType'/>
-      <xs:complexType name='RequestSecurityTokenCollectionType'>
-        <xs:sequence>
-          <xs:element name='RequestSecurityToken'
-                      type='wst:AbstractRequestSecurityTokenType' minOccurs='2'
-                      maxOccurs='unbounded'/>
-        </xs:sequence>
-      </xs:complexType>
- 
-      <xs:element name='RequestSecurityTokenResponseCollection'
-                  type='wst:RequestSecurityTokenResponseCollectionType'/>
-      <xs:complexType name='RequestSecurityTokenResponseCollectionType'>
-        <xs:sequence>
-          <xs:element ref='wst:RequestSecurityTokenResponse' minOccurs='1'
-                      maxOccurs='unbounded'/>
-        </xs:sequence>
-        <xs:anyAttribute namespace='##other' processContents='lax'/>
-      </xs:complexType>
- 
-    </xs:schema>
-  </wsdl:types>
- 
-  <!-- WS-Trust defines the following GEDs -->
-  <wsdl:message name="RequestSecurityTokenMsg">
-    <wsdl:part name="request" element="wst:RequestSecurityToken"/>
-  </wsdl:message>
-  <wsdl:message name="RequestSecurityTokenResponseMsg">
-    <wsdl:part name="response"
-               element="wst:RequestSecurityTokenResponse"/>
-  </wsdl:message>
-  <wsdl:message name="RequestSecurityTokenCollectionMsg">
-    <wsdl:part name="requestCollection"
-               element="wst:RequestSecurityTokenCollection"/>
-  </wsdl:message>
-  <wsdl:message name="RequestSecurityTokenResponseCollectionMsg">
-    <wsdl:part name="responseCollection"
-               element="wst:RequestSecurityTokenResponseCollection"/>
-  </wsdl:message>
- 
-  <!-- This portType an example of a Requestor (or other) endpoint that
-         Accepts SOAP-based challenges from a Security Token Service -->
-  <wsdl:portType name="WSSecurityRequestor">
-    <wsdl:operation name="Challenge">
-      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
-      <wsdl:output message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-  </wsdl:portType>
- 
-  <!-- This portType is an example of an STS supporting full protocol -->
-  <wsdl:portType name="STS">
-    <wsdl:operation name="Cancel">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/CancelFinal"
-        message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="Issue">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal"
-        message="tns:RequestSecurityTokenResponseCollectionMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="Renew">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/RenewFinal"
-        message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="Validate">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/ValidateFinal"
-        message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="KeyExchangeToken">
-      <wsdl:input
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KET"
-        message="tns:RequestSecurityTokenMsg"/>
-      <wsdl:output
-        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/KETFinal"
-        message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-    <wsdl:operation name="RequestCollection">
-      <wsdl:input message="tns:RequestSecurityTokenCollectionMsg"/>
-      <wsdl:output message="tns:RequestSecurityTokenResponseCollectionMsg"/>
-    </wsdl:operation>
-  </wsdl:portType>
- 
-  <!-- This portType is an example of an endpoint that accepts
-         Unsolicited RequestSecurityTokenResponse messages -->
-  <wsdl:portType name="SecurityTokenResponseService">
-    <wsdl:operation name="RequestSecurityTokenResponse">
-      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
-    </wsdl:operation>
-  </wsdl:portType>
- 
-  <wsdl:binding name="UT_Binding" type="wstrust:STS">
-    <wsp:PolicyReference URI="#UT_policy"/>
-    <soap:binding style="document"
-                  transport="http://schemas.xmlsoap.org/soap/http"/>
-    <wsdl:operation name="Issue">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"/>
-      <wsdl:input>
-        <wsp:PolicyReference
-          URI="#Input_policy"/>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference
-          URI="#Output_policy"/>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="Validate">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate"/>
-      <wsdl:input>
-        <wsp:PolicyReference
-          URI="#Input_policy"/>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference
-          URI="#Output_policy"/>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="Cancel">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel"/>
-      <wsdl:input>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="Renew">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew"/>
-      <wsdl:input>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="KeyExchangeToken">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KeyExchangeToken"/>
-      <wsdl:input>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="RequestCollection">
-      <soap:operation
-        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/RequestCollection"/>
-      <wsdl:input>
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output>
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-  </wsdl:binding>
- 
-  <wsdl:service name="SecurityTokenService">
-    <wsdl:port name="UT_Port" binding="tns:UT_Binding">
-      <soap:address location="http://localhost:8080/SecurityTokenService/UT"/>
-    </wsdl:port>
-  </wsdl:service>
- 
-  <wsp:Policy wsu:Id="UT_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <wsap10:UsingAddressing/>
-        <sp:SymmetricBinding
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-            <sp:ProtectionToken>
-              <wsp:Policy>
-                <sp:X509Token
-                  sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
-                  <wsp:Policy>
-                    <sp:RequireDerivedKeys/>
-                    <sp:RequireThumbprintReference/>
-                    <sp:WssX509V3Token10/>
-                  </wsp:Policy>
-                </sp:X509Token>
-              </wsp:Policy>
-            </sp:ProtectionToken>
-            <sp:AlgorithmSuite>
-              <wsp:Policy>
-                <sp:Basic256/>
-              </wsp:Policy>
-            </sp:AlgorithmSuite>
-            <sp:Layout>
-              <wsp:Policy>
-                <sp:Lax/>
-              </wsp:Policy>
-            </sp:Layout>
-            <sp:IncludeTimestamp/>
-            <sp:EncryptSignature/>
-            <sp:OnlySignEntireHeadersAndBody/>
-          </wsp:Policy>
-        </sp:SymmetricBinding>
-        <sp:SignedSupportingTokens
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-            <sp:UsernameToken
-              sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
-              <wsp:Policy>
-                <sp:WssUsernameToken10/>
-              </wsp:Policy>
-            </sp:UsernameToken>
-          </wsp:Policy>
-        </sp:SignedSupportingTokens>
-        <sp:Wss11
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-            <sp:MustSupportRefKeyIdentifier/>
-            <sp:MustSupportRefIssuerSerial/>
-            <sp:MustSupportRefThumbprint/>
-            <sp:MustSupportRefEncryptedKey/>
-          </wsp:Policy>
-        </sp:Wss11>
-        <sp:Trust13
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <wsp:Policy>
-            <sp:MustSupportIssuedTokens/>
-            <sp:RequireClientEntropy/>
-            <sp:RequireServerEntropy/>
-          </wsp:Policy>
-        </sp:Trust13>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
- 
-  <wsp:Policy wsu:Id="Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <sp:Body/>
-          <sp:Header Name="To"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="From"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="FaultTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="ReplyTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="MessageID"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="RelatesTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="Action"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-        </sp:SignedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
- 
-  <wsp:Policy wsu:Id="Output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts
-          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
-          <sp:Body/>
-          <sp:Header Name="To"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="From"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="FaultTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="ReplyTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="MessageID"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="RelatesTo"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-          <sp:Header Name="Action"
-                     Namespace="http://www.w3.org/2005/08/addressing"/>
-        </sp:SignedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
- 
-</wsdl:definitions>
-
-
-
-
-STS’s implementation class -
-

The Apache CXF’s STS, SecurityTokenServiceProvider, is a web service -provider that is compliant with the protocols and functionality defined -by the WS-Trust specification. It has a modular architecture. Many of -its components are configurable or replaceable and there are many -optional features that are enabled by implementing and configuring -plug-ins. Users can customize their own STS by extending from -SecurityTokenServiceProvider and overriding the default settings. -Extensive information about the CXF’s STS configurable and pluggable -components can be found -here.

-
-
-

This STS implementation class, SampleSTSHolderOfKey, is a POJO that -extends from SecurityTokenServiceProvider. Note that the class is -defined with a WebServiceProvider annotation and not a WebService -annotation. This annotation defines the service as a Provider-based -endpoint, meaning it supports a more messaging-oriented approach to Web -services. In particular, it signals that the exchanged messages will be -XML documents of some type. SecurityTokenServiceProvider is an -implementation of the jakarta.xml.ws.Provider interface. In comparison the -WebService annotation defines a (service endpoint interface) SEI-based -endpoint which supports message exchange via SOAP envelopes.

-
-
-

As was done in the HolderOfKeyImpl class, the WSS4J annotations -EndpointProperties and EndpointProperty are providing endpoint -configuration for the CXF runtime. The first EndpointProperty statements -declares the Java properties file that contains the (Merlin) crypto -configuration information. WSS4J reads this file and extra required -information for message handling. The last EndpointProperty statement -declares the STSHolderOfKeyCallbackHandler implementation class. It is -used to obtain the user’s password for the certificates in the keystore -file.

-
-
-

In this implementation we are customizing the operations of token -issuance and their static properties.

-
-
-

StaticSTSProperties is used to set select properties for configuring -resources in the STS. You may think this is a duplication of the -settings made with the WSS4J annotations. The values are the same but -the underlaying structures being set are different, thus this -information must be declared in both places.

-
-
-

The setIssuer setting is important because it uniquely identifies the -issuing STS. The issuer string is embedded in issued tokens and, when -validating tokens, the STS checks the issuer string value. Consequently, -it is important to use the issuer string in a consistent way, so that -the STS can recognize the tokens that it has issued.

-
-
-

The setEndpoints call allows the declaration of a set of allowed token -recipients by address. The addresses are specified as reg-ex patterns.

-
-
-

TokenIssueOperation has a modular structure. This allows custom -behaviors to be injected into the processing of messages. In this case -we are overriding the SecurityTokenServiceProvider’s default behavior -and performing SAML token processing. CXF provides an implementation of -a SAMLTokenProvider which we are using rather than writing our own.

-
-
-

Learn more about the SAMLTokenProvider -here.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsholderofkey;
- 
-import org.apache.cxf.annotations.EndpointProperties;
-import org.apache.cxf.annotations.EndpointProperty;
-import org.apache.cxf.sts.StaticSTSProperties;
-import org.apache.cxf.sts.operation.TokenIssueOperation;
-import org.apache.cxf.sts.service.ServiceMBean;
-import org.apache.cxf.sts.service.StaticService;
-import org.apache.cxf.sts.token.provider.SAMLTokenProvider;
-import org.apache.cxf.ws.security.sts.provider.SecurityTokenServiceProvider;
- 
-import jakarta.xml.ws.WebServiceProvider;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
- 
-/**
- * User: rsearls
- * Date: 3/14/14
- */
-@WebServiceProvider(serviceName = "SecurityTokenService",
-   portName = "UT_Port",
-   targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/",
-   wsdlLocation = "WEB-INF/wsdl/holderofkey-ws-trust-1.4-service.wsdl")
-//be sure to have dependency on org.apache.cxf module when on AS7, otherwise Apache CXF annotations are ignored
-@EndpointProperties(value = {
-   @EndpointProperty(key = "ws-security.signature.properties", value = "stsKeystore.properties"),
-   @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsholderofkey.STSHolderOfKeyCallbackHandler")
-})
-public class SampleSTSHolderOfKey extends SecurityTokenServiceProvider
-{
- 
-   public SampleSTSHolderOfKey() throws Exception
-   {
-      super();
- 
-      StaticSTSProperties props = new StaticSTSProperties();
-      props.setSignatureCryptoProperties("stsKeystore.properties");
-      props.setSignatureUsername("mystskey");
-      props.setCallbackHandlerClass(STSHolderOfKeyCallbackHandler.class.getName());
-      props.setEncryptionCryptoProperties("stsKeystore.properties");
-      props.setEncryptionUsername("myservicekey");
-      props.setIssuer("DoubleItSTSIssuer");
- 
-      List<ServiceMBean> services = new LinkedList<ServiceMBean>();
-      StaticService service = new StaticService();
-      service.setEndpoints(Arrays.asList(
-         "https://localhost:(\\d)*/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService",
-         "https://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService",
-         "https://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService"
-      ));
- 
-      services.add(service);
- 
-      TokenIssueOperation issueOperation = new TokenIssueOperation();
-      issueOperation.getTokenProviders().add(new SAMLTokenProvider());
-      issueOperation.setServices(services);
-      issueOperation.setStsProperties(props);
-      this.setIssueOperation(issueOperation);
- 
-   }
-}
-
-
-
-
-HolderOfKeyCallbackHandler -
-

STSHolderOfKeyCallbackHandler is a callback handler for the WSS4J Crypto -API. It is used to obtain the password for the private key in the -keystore. This class enables CXF to retrieve the password of the user -name to use for the message signature.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsholderofkey;
- 
-import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
- 
-import java.util.HashMap;
-import java.util.Map;
- 
-/**
- * User: rsearls
- * Date: 3/19/14
- */
-public class STSHolderOfKeyCallbackHandler extends PasswordCallbackHandler
-{
-   public STSHolderOfKeyCallbackHandler()
-   {
-      super(getInitMap());
-   }
- 
-   private static Map<String, String> getInitMap()
-   {
-      Map<String, String> passwords = new HashMap<String, String>();
-      passwords.put("mystskey", "stskpass");
-      passwords.put("alice", "clarinet");
-      return passwords;
-   }
-}
-
-
-
-
-Crypto properties and keystore files -
-

WSS4J’s Crypto implementation is loaded and configured via a Java -properties file that contains Crypto configuration data. The file -contains implementation-specific properties such as a keystore location, -password, default alias and the like. This application is using the -Merlin implementation. File stsKeystore.properties contains this -information.

-
-
-

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains -self signed certificates for myservicekey and mystskey. Self signed -certificates are not appropriate for production use.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=stsspass
-org.apache.ws.security.crypto.merlin.keystore.file=stsstore.jks
-
-
-
-
-MANIFEST.MF -
-

When deployed on WildFly, this application requires access to the -JBossWs and CXF APIs provided in modules -org.jboss.ws.cxf.jbossws-cxf-client and org.apache.cxf. The Apache CXF -internals, org.apache.cxf.impl, are needed to build the STS -configuration in the SampleSTSHolderOfKey constructor. The dependency -statement directs the server to provide them at deployment.

-
-
-
-
Manifest-Version:1.0
-Ant-Version: Apache Ant1.8.2
-Created-By:1.7.0_25-b15 (Oracle Corporation)
-Dependencies: org.jboss.ws.cxf.jbossws-cxf-client,org.apache.cxf.impl
-
-
-
-
-
-
Web service requester
-
-

This section examines the crucial elements in calling a web service that -implements endpoint security as described in the SAML Holder-Of-Key -scenario. The components that will be discussed are.

-
-
-
    -
  • -

    web service requester’s implementation

    -
  • -
  • -

    ClientCallbackHandler

    -
  • -
  • -

    Crypto properties and keystore files

    -
  • -
-
-
-Web service requester Implementation -
-

The ws-requester, the client, uses standard procedures for creating a -reference to the web service. To address the endpoint security -requirements, the web service’s "Request Context" is configured with the -information needed in message generation. In addition, the STSClient -that communicates with the STS is configured with similar values. Note -the key strings ending with a ".it" suffix. This suffix flags these -settings as belonging to the STSClient. The internal CXF code assigns -this information to the STSClient that is auto-generated for this -service call.

-
-
-

There is an alternate method of setting up the STSCLient. The user may -provide their own instance of the STSClient. The CXF code will use this -object and not auto-generate one. When providing the STSClient in this -way, the user must provide a org.apache.cxf.Bus for it and the -configuration keys must not have the ".it" suffix. This is used in the -ActAs and OnBehalfOf examples.

-
-
-
-
String serviceURL = "https://" + getServerHost() + ":8443/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService";
- 
-final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy", "HolderOfKeyService");
-final URL wsdlURL = new URL(serviceURL + "?wsdl");
-Service service = Service.create(wsdlURL, serviceName);
-HolderOfKeyIface proxy = (HolderOfKeyIface) service.getPort(HolderOfKeyIface.class);
- 
-Map<String, Object> ctx = ((BindingProvider)proxy).getRequestContext();
- 
-// set the security related configuration information for the service "request"
-ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
-ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
-  Thread.currentThread().getContextClassLoader().getResource(
-  "META-INF/clientKeystore.properties"));
-ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
-  Thread.currentThread().getContextClassLoader().getResource(
-  "META-INF/clientKeystore.properties"));
-ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
-ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
- 
-//-- Configuration settings that will be transfered to the STSClient
-// "alice" is the name provided for the WSS Username. Her password will
-// be retreived from the ClientCallbackHander by the STSClient.
-ctx.put(SecurityConstants.USERNAME + ".it", "alice");
-ctx.put(SecurityConstants.CALLBACK_HANDLER + ".it", new ClientCallbackHandler());
-ctx.put(SecurityConstants.ENCRYPT_PROPERTIES + ".it",
-  Thread.currentThread().getContextClassLoader().getResource(
-  "META-INF/clientKeystore.properties"));
-ctx.put(SecurityConstants.ENCRYPT_USERNAME + ".it", "mystskey");
-ctx.put(SecurityConstants.STS_TOKEN_USERNAME + ".it", "myclientkey");
-ctx.put(SecurityConstants.STS_TOKEN_PROPERTIES + ".it",
-  Thread.currentThread().getContextClassLoader().getResource(
-  "META-INF/clientKeystore.properties"));
-ctx.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO + ".it", "true");
- 
-proxy.sayHello();
-
-
-
-
-ClientCallbackHandler -
-

ClientCallbackHandler is a callback handler for the WSS4J Crypto API. It -is used to obtain the password for the private key in the keystore. This -class enables CXF to retrieve the password of the user name to use for -the message signature. Note that "alice" and her password have been -provided here. This information is not in the (JKS) keystore but -provided in the WildFly security domain. It was declared in file -jbossws-users.properties.

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared;
- 
-import java.io.IOException;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import org.apache.ws.security.WSPasswordCallback;
- 
-public class ClientCallbackHandler implements CallbackHandler {
- 
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            if (callbacks[i] instanceof WSPasswordCallback) {
-                WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
-                if ("myclientkey".equals(pc.getIdentifier())) {
-                    pc.setPassword("ckpass");
-                    break;
-                } else if ("alice".equals(pc.getIdentifier())) {
-                    pc.setPassword("clarinet");
-                    break;
-                } else if ("bob".equals(pc.getIdentifier())) {
-                    pc.setPassword("trombone");
-                    break;
-                } else if ("myservicekey".equals(pc.getIdentifier())) {  // rls test  added for bearer test
-                   pc.setPassword("skpass");
-                   break;
-                }
-            }
-        }
-    }
-}
-
-
-
-
-Crypto properties and keystore files -
-

WSS4J’s Crypto implementation is loaded and configured via a Java -properties file that contains Crypto configuration data. The file -contains implementation-specific properties such as a keystore location, -password, default alias and the like. This application is using the -Merlin implementation. File clientKeystore.properties contains this -information.

-
-
-

File clientstore.jks, is a Java KeyStore (JKS) repository. It contains -self signed certificates for myservicekey and mystskey. Self signed -certificates are not appropriate for production use.

-
-
-
-
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=cspass
-org.apache.ws.security.crypto.merlin.keystore.alias=myclientkey
-org.apache.ws.security.crypto.merlin.keystore.file=META-INF/clientstore.jks
-
-
-
-
-
-
-
-

17.5.14. WS-Reliable Messaging

-
-

JBoss Web Services inherits full WS-Reliable Messaging capabilities from -the underlying Apache CXF implementation. At the time of writing, Apache -CXF provides support for the -WS-Reliable Messaging 1.0 -(February 2005) version of the specification.

-
-
-
Enabling WS-Reliable Messaging
-
-

WS-Reliable Messaging is implemented internally in Apache CXF through a -set of interceptors that deal with the low level requirements of the -reliable messaging protocol. In order for enabling WS-Reliable -Messaging, users need to either:

-
-
-
    -
  • -

    consume a WSDL contract that specifies proper WS-Reliable Messaging -policies / assertions

    -
  • -
  • -

    manually add / configure the reliable messaging interceptors

    -
  • -
  • -

    specify the reliable messaging policies in an optional CXF Spring XML -descriptor

    -
  • -
  • -

    specify the Apache CXF reliable messaging feature in an optional CXF -Spring XML descriptor

    -
  • -
-
-
-

The former approach relies on the Apache CXF WS-Policy engine and is the -only portable one. The other approaches are Apache CXF proprietary ones, -however they allow for fine-grained configuration of protocol aspects -that are not covered by the WS-Reliable Messaging Policy. More details -are available in the -Apache CXF -documentation.

-
-
-
-
Example
-
-

In this example we configure WS-Reliable Messaging endpoint and client -through the WS-Policy support.

-
-
-
Endpoint
-
-

We go with a contract-first approach, so we start by creating a proper -WSDL contract, containing the WS-Reliable Messaging and WS-Addressing -policies (the latter is a requirement of the former):

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<wsdl:definitions name="SimpleService" targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wsrm"
-  xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wsrm" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-  xmlns:wsp="http://www.w3.org/2006/07/ws-policy">
- 
-  <wsdl:types>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wsrm"
-  attributeFormDefault="unqualified" elementFormDefault="unqualified"
-  targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wsrm">
-<xsd:element name="ping" type="tns:ping"/>
-<xsd:complexType name="ping">
-<xsd:sequence/>
-</xsd:complexType>
-<xsd:element name="echo" type="tns:echo"/>
-<xsd:complexType name="echo">
-<xsd:sequence>
-<xsd:element minOccurs="0" name="arg0" type="xsd:string"/>
-</xsd:sequence>
-</xsd:complexType>
-<xsd:element name="echoResponse" type="tns:echoResponse"/>
-<xsd:complexType name="echoResponse">
-<xsd:sequence>
-<xsd:element minOccurs="0" name="return" type="xsd:string"/>
-</xsd:sequence>
-</xsd:complexType>
-</xsd:schema>
-  </wsdl:types>
-  <wsdl:message name="echoResponse">
-    <wsdl:part name="parameters" element="tns:echoResponse">
-    </wsdl:part>
-  </wsdl:message>
-  <wsdl:message name="echo">
-    <wsdl:part name="parameters" element="tns:echo">
-    </wsdl:part>
-  </wsdl:message>
-  <wsdl:message name="ping">
-    <wsdl:part name="parameters" element="tns:ping">
-    </wsdl:part>
-  </wsdl:message>
-  <wsdl:portType name="SimpleService">
-    <wsdl:operation name="ping">
-      <wsdl:input name="ping" message="tns:ping">
-    </wsdl:input>
-    </wsdl:operation>
-    <wsdl:operation name="echo">
-      <wsdl:input name="echo" message="tns:echo">
-    </wsdl:input>
-      <wsdl:output name="echoResponse" message="tns:echoResponse">
-    </wsdl:output>
-    </wsdl:operation>
-  </wsdl:portType>
-  <wsdl:binding name="SimpleServiceSoapBinding" type="tns:SimpleService">
-    <wsp:Policy>
-      <!-- WS-Addressing and basic WS-Reliable Messaging policy assertions -->
-      <wswa:UsingAddressing xmlns:wswa="http://www.w3.org/2006/05/addressing/wsdl"/>
-      <wsrmp:RMAssertion xmlns:wsrmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"/>
-      <!-- --------------------------------------------------------------- -->
-    </wsp:Policy>
-    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
-    <wsdl:operation name="ping">
-      <soap:operation soapAction="" style="document"/>
-      <wsdl:input name="ping">
-        <soap:body use="literal"/>
-      </wsdl:input>
-    </wsdl:operation>
-    <wsdl:operation name="echo">
-      <soap:operation soapAction="" style="document"/>
-      <wsdl:input name="echo">
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output name="echoResponse">
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-  </wsdl:binding>
-  <wsdl:service name="SimpleService">
-    <wsdl:port name="SimpleServicePort" binding="tns:SimpleServiceSoapBinding">
-      <soap:address location="http://localhost:8080/jaxws-samples-wsrm-api"/>
-    </wsdl:port>
-  </wsdl:service>
-</wsdl:definitions>
-
-
-
-

Then we use the wsconsume tool to generate both standard Jakarta XML Web Services client -and endpoint.

-
-
-

We provide a basic Jakarta XML Web Services implementation for the endpoint, nothing -special in it:

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsrm.service;
- 
-import jakarta.jws.Oneway;
-import jakarta.jws.WebMethod;
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   name = "SimpleService",
-   serviceName = "SimpleService",
-   wsdlLocation = "WEB-INF/wsdl/SimpleService.wsdl",
-   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wsrm"
-)
-public class SimpleServiceImpl
-{
-   @Oneway
-   @WebMethod
-   public void ping()
-   {
-      System.out.println("ping()");
-   }
- 
-   @WebMethod
-   public String echo(String s)
-   {
-      System.out.println("echo(" + s + ")");
-      return s;
-   }
-}
-
-
-
-

Finally we package the generated POJO endpoint together with a basic -web.xml the usual way and deploy to the application server. The -webservices stack automatically detects the policies and enables -WS-Reliable Messaging.

-
-
-
-
Client
-
-

The endpoint advertises his RM capabilities (and requirements) through -the published WSDL and the client is required to also enable WS-RM for -successfully exchanging messages with the server.

-
-
-

So a regular JAX WS client is enough if the user does not need to tune -any specific detail of the RM subsystem.

-
-
-
-
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wsrm", "SimpleService");
-URL wsdlURL = new URL("http://localhost:8080/jaxws-samples-wsrm-api?wsdl");
-Service service = Service.create(wsdlURL, serviceName);
-proxy = (SimpleService)service.getPort(SimpleService.class);
-proxy.echo("Hello World!");
-
-
-
-
-
Additional configuration
-
-

Fine-grained tuning of WS-Reliable Messaging engine requires setting up -proper RM features and attach them for instance to the client proxy. -Here is an example:

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsrm.client;
- 
-//...
-import jakarta.xml.ws.Service;
-import org.apache.cxf.ws.rm.feature.RMFeature;
-import org.apache.cxf.ws.rm.manager.AcksPolicyType;
-import org.apache.cxf.ws.rm.manager.DestinationPolicyType;
-import org.jboss.test.ws.jaxws.samples.wsrm.generated.SimpleService;
- 
-// ...
-Service service = Service.create(wsdlURL, serviceName);
- 
-RMFeature feature = new RMFeature();
-RMAssertion rma = new RMAssertion();
-RMAssertion.BaseRetransmissionInterval bri = new RMAssertion.BaseRetransmissionInterval();
-bri.setMilliseconds(4000L);
-rma.setBaseRetransmissionInterval(bri);
-AcknowledgementInterval ai = new AcknowledgementInterval();
-ai.setMilliseconds(2000L);
-rma.setAcknowledgementInterval(ai);
-feature.setRMAssertion(rma);
-DestinationPolicyType dp = new DestinationPolicyType();
-AcksPolicyType ap = new AcksPolicyType();
-ap.setIntraMessageThreshold(0);
-dp.setAcksPolicy(ap);
-feature.setDestinationPolicy(dp);
- 
-SimpleService proxy = (SimpleService)service.getPort(SimpleService.class, feature);
-proxy.echo("Hello World");
-
-
-
-

The same can of course be achieved by factoring the feature into a -custom pojo extending org.apache.cxf.ws.rm.feature.RMFeature and -setting the obtained property in a client configuration:

-
-
-
-
package org.jboss.test.ws.jaxws.samples.wsrm.client;
- 
-import org.apache.cxf.ws.rm.feature.RMFeature;
-import org.apache.cxf.ws.rm.manager.AcksPolicyType;
-import org.apache.cxf.ws.rm.manager.DestinationPolicyType;
-import org.apache.cxf.ws.rmp.v200502.RMAssertion;
-import org.apache.cxf.ws.rmp.v200502.RMAssertion.AcknowledgementInterval;
- 
-public class CustomRMFeature extends RMFeature
-{
-  public CustomRMFeature() {
-    super();
-    RMAssertion rma = new RMAssertion();
-    RMAssertion.BaseRetransmissionInterval bri = new RMAssertion.BaseRetransmissionInterval();
-    bri.setMilliseconds(4000L);
-    rma.setBaseRetransmissionInterval(bri);
-    AcknowledgementInterval ai = new AcknowledgementInterval();
-    ai.setMilliseconds(2000L);
-    rma.setAcknowledgementInterval(ai);
-    super.setRMAssertion(rma);
-    DestinationPolicyType dp = new DestinationPolicyType();
-    AcksPolicyType ap = new AcksPolicyType();
-    ap.setIntraMessageThreshold(0);
-    dp.setAcksPolicy(ap);
-    super.setDestinationPolicy(dp);
-  }
-}
-
-
-
-
    -
  1. -

    this is how the jaxws-client-config.xml descriptor would look:

    -
  2. -
-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
- 
-<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
- 
-<client-config>
-<config-name>Custom Client Config</config-name>
-<property>
-<property-name>cxf.features</property-name>
-<property-value>org.jboss.test.ws.jaxws.samples.wsrm.client.CustomRMFeature</property-value>
-</property>
-</client-config>
- 
-</jaxws-config>
-
-
-
-
    -
  1. -

    and this is how the client would set the configuration:

    -
  2. -
-
-
-
-
import org.jboss.ws.api.configuration.ClientConfigUtil;
-import org.jboss.ws.api.configuration.ClientConfigurer;
- 
-//...
-Service service = Service.create(wsdlURL, serviceName);
-SimpleService proxy = (SimpleService)service.getPort(SimpleService.class);
- 
-ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer();
-configurer.setConfigProperties(proxy, "META-INF/jaxws-client-config.xml", "Custom Client Config");
-proxy.echo("Hello World!");
-
-
-
-
-
-
-

17.5.15. SOAP over Jakarta Messaging

-
-

JBoss Web Services allows communication over the Jakarta Messaging transport. The -functionality comes from Apache CXF support for the -SOAP over Java Message Service 1.0 -specification, which is aimed at a set of standards for interoperable -transport of SOAP messages over Jakarta Messaging.

-
-
-

On top of Apache CXF functionalities, the JBossWS integration allows -users to deploy WS archives containing both Jakarta Messaging and HTTP endpoints -the same way as they do for basic HTTP WS endpoints (in war -archives). The webservices layer of WildFly takes care of looking for -Jakarta Messaging enpdoints in the deployed archive and starts them delegating to -the Apache CXF core similarly as with HTTP endpoints.

-
-
-
Configuring SOAP over Jakarta Messaging
-
-

As per specification, the SOAP over Jakarta Messaging transport configuration is -controlled by proper elements and attributes in the binding and -service elements of the WSDL contract. So a Jakarta Messaging endpoint is usually -developed using a contract-first approach.

-
-
-

The Apache CXF -documentation covers all the details of the supported configurations. -The minimum configuration implies:

-
-
-
    -
  • -

    setting a proper Jakarta Messaging URI in the soap:address location [1]

    -
  • -
  • -

    providing a JNDI connection factory name to be used for connecting to -the queues [2]

    -
  • -
  • -

    setting the transport binding [3]

    -
  • -
-
-
-
-
<wsdl:definitions name="HelloWorldService" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms"
-  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-  xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms"
-  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-  xmlns:soapjms="http://www.w3.org/2010/soapjms/"
-  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-...
- 
-<wsdl:binding name="HelloWorldServiceSoapBinding" type="tns:HelloWorld">
-  <soap:binding style="document" transport="http://www.w3.org/2010/soapjms/"/> <!-- 3 -->
-  <wsdl:operation name="echo">
-    <soap:operation soapAction="" style="document"/>
-    <wsdl:input name="echo">
-      <soap:body use="literal"/>
-    </wsdl:input>
-    <wsdl:output name="echoResponse">
-      <soap:body use="literal"/>
-    </wsdl:output>
-  </wsdl:operation>
-</wsdl:binding>
-<wsdl:service name="HelloWorldService">
-  <soapjms:jndiConnectionFactoryName>java:/ConnectionFactory</soapjms:jndiConnectionFactoryName> <!-- 2 -->
-  <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
-    <soap:address location="jms:queue:testQueue"/> <!-- 1 -->
-  </wsdl:port>
-</wsdl:service>
-
-
-
-

Apache CXF takes care of setting up the Jakarta Messaging transport for endpoint -implementations whose @WebService annotation points to a port declared -for Jakarta Messaging transport as explained above.

-
-
- - - - - -
- - -JBossWS currently supports POJO endpoints only for Jakarta Messaging transport use. -The endpoint classes can be deployed as part of jar or war archives. -
-
-
-

The web.xml descriptor in war archives doesn’t need any entry for -Jakarta Messaging endpoints.

-
-
-
-
Examples
-
-
Jakarta Messaging endpoint only deployment
-
-

In this example we create a simple endpoint relying on SOAP over Jakarta Messaging -and deploy it as part of a jar archive.

-
-
-

The endpoint is created using wsconsume tool from a WSDL contract such -as:

-
-
-
-
<?xml version='1.0' encoding='UTF-8'?>
-<wsdl:definitions name="HelloWorldService" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms"
-  xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
-  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-  xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms"
-  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-  xmlns:soapjms="http://www.w3.org/2010/soapjms/"
-  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <wsdl:types>
-<xs:schema elementFormDefault="unqualified" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms" version="1.0" xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-<xs:element name="echo" type="tns:echo"/>
-<xs:element name="echoResponse" type="tns:echoResponse"/>
-<xs:complexType name="echo">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="arg0" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-<xs:complexType name="echoResponse">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="return" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-</xs:schema>
-  </wsdl:types>
-  <wsdl:message name="echoResponse">
-    <wsdl:part element="tns:echoResponse" name="parameters">
-    </wsdl:part>
-  </wsdl:message>
-  <wsdl:message name="echo">
-    <wsdl:part element="tns:echo" name="parameters">
-    </wsdl:part>
-  </wsdl:message>
-  <wsdl:portType name="HelloWorld">
-    <wsdl:operation name="echo">
-      <wsdl:input message="tns:echo" name="echo">
-    </wsdl:input>
-      <wsdl:output message="tns:echoResponse" name="echoResponse">
-    </wsdl:output>
-    </wsdl:operation>
-  </wsdl:portType>
-  <wsdl:binding name="HelloWorldServiceSoapBinding" type="tns:HelloWorld">
-    <soap:binding style="document" transport="http://www.w3.org/2010/soapjms/"/>
-    <wsdl:operation name="echo">
-      <soap:operation soapAction="" style="document"/>
-      <wsdl:input name="echo">
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output name="echoResponse">
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-  </wsdl:binding>
-  <wsdl:service name="HelloWorldService">
-    <soapjms:jndiConnectionFactoryName>java:jms/RemoteConnectionFactory</soapjms:jndiConnectionFactoryName>
-    <soapjms:jndiInitialContextFactory>org.wildfly.naming.client.WildFlyInitialContextFactory</soapjms:jndiInitialContextFactory>
-    <soapjms:jndiURL>http-remoting://myhost:8080</soapjms:jndiURL>
-    <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
-      <soap:address location="jms:queue:testQueue"/>
-    </wsdl:port>
-  </wsdl:service>
-  <wsdl:service name="HelloWorldServiceLocal">
-    <soapjms:jndiConnectionFactoryName>java:/ConnectionFactory</soapjms:jndiConnectionFactoryName>
-    <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
-      <soap:address location="jms:queue:testQueue"/>
-    </wsdl:port>
-  </wsdl:service>
-</wsdl:definitions>
-
-
-
- - - - - -
- - -The HelloWorldImplPort here is meant for using the testQueue that -has to be created before deploying the endpoint. -
-
-
-

At the time of writing, java:/ConnectionFactory is the default -connection factory JNDI location on WildFly

-
-
-

For allowing remote JNDI lookup of the connection factory, a specific -service ( HelloWorldService) for remote clients is added to the WSDL. -The java:jms/RemoteConnectionFactory is the JNDI location of the same -connection factory mentioned above, except it’s exposed for remote -lookup. The soapjms:jndiInitialContextFactory and soap:jmsjndiURL -complete the remote connection configuration, specifying the initial -context factory class to use and the JNDI registry address.

-
-
- - - - - -
- - -Have a look at the application server domain for finding out the -configured connection factory JNDI locations. -
-
-
-

The endpoint implementation is a basic Jakarta XML Web Services POJO using @WebService -annotation to refer to the consumed contract:

-
-
-
-
package org.jboss.test.ws.jaxws.cxf.jms;
- 
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   portName = "HelloWorldImplPort",
-   serviceName = "HelloWorldServiceLocal",
-   wsdlLocation = "META-INF/wsdl/HelloWorldService.wsdl",
-   endpointInterface = "org.jboss.test.ws.jaxws.cxf.jms.HelloWorld",
-   targetNamespace = "http://org.jboss.ws/jaxws/cxf/jms"
-)
-public class HelloWorldImpl implements HelloWorld
-{
-   public String echo(String input)
-   {
-      return input;
-   }
-}
-
-
-
- - - - - -
- - -The endpoint implementation references the HelloWorldServiceLocal wsdl -service, so that the local JNDI connection factory location is used for -starting the endpoint on server side. -
-
-
-

That’s pretty much all. We just need to package the generated service -endpoint interface, the endpoint implementation and the WSDL file in a -jar archive and deploy it:

-
-
-
-
alessio@inuyasha /dati/jbossws/stack/cxf/trunk $ jar -tvf ./modules/testsuite/cxf-tests/target/test-libs/jaxws-cxf-jms-only-deployment.jar
-     0 Thu Jun 23 15:18:44 CEST 2011 META-INF/
-   129 Thu Jun 23 15:18:42 CEST 2011 META-INF/MANIFEST.MF
-     0 Thu Jun 23 15:18:42 CEST 2011 org/
-     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/
-     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/
-     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/
-     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/
-     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/cxf/
-     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/cxf/jms/
-   313 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/cxf/jms/HelloWorld.class
-  1173 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/cxf/jms/HelloWorldImpl.class
-     0 Thu Jun 23 15:18:40 CEST 2011 META-INF/wsdl/
-  3074 Thu Jun 23 15:18:40 CEST 2011 META-INF/wsdl/HelloWorldService.wsdl
-
-
-
- - - - - -
- - -A dependency on org.hornetq module needs to be added in MANIFEST.MF -when deploying to WildFly. -
-
-
-
-
Manifest-Version: 1.0
-
-Ant-Version: Apache Ant 1.7.1
-
-Created-By: 17.0-b16 (Sun Microsystems Inc.)
-
-Dependencies: org.hornetq
-
-
-
-

A Jakarta XML Web Services client can interact with the Jakarta Messaging endpoint the usual way:

-
-
-
-
URL wsdlUrl = ...
-//start another bus to avoid affecting the one that could already be assigned to the current thread - optional but highly suggested
-Bus bus = BusFactory.newInstance().createBus();
-BusFactory.setThreadDefaultBus(bus);
-try
-{
-   QName serviceName = new QName("http://org.jboss.ws/jaxws/cxf/jms", "HelloWorldService");
-   Service service = Service.create(wsdlUrl, serviceName);
-   HelloWorld proxy = (HelloWorld) service.getPort(new QName("http://org.jboss.ws/jaxws/cxf/jms", "HelloWorldImplPort"), HelloWorld.class);
-   setupProxy(proxy);
-   proxy.echo("Hi");
-}
-finally
-{
-   bus.shutdown(true);
-}
-
-
-
- - - - - -
- - -The WSDL location URL needs to be retrieved in a custom way, depending -on the client application. Given the endpoint is Jakarta Messaging only, there’s no -automatically published WSDL contract. -
-
-
-

in order for performing the remote invocation (which internally goes -through remote JNDI lookup of the connection factory), the calling user -credentials need to be set into the Apache CXF JMSConduit:

-
-
-
-
private void setupProxy(HelloWorld proxy) {
-   JMSConduit conduit = (JMSConduit)ClientProxy.getClient(proxy).getConduit();
-   JNDIConfiguration jndiConfig = conduit.getJmsConfig().getJndiConfig();
-   jndiConfig.setConnectionUserName("user");
-   jndiConfig.setConnectionPassword("password");
-   Properties props = conduit.getJmsConfig().getJndiTemplate().getEnvironment();
-   props.put(Context.SECURITY_PRINCIPAL, "user");
-   props.put(Context.SECURITY_CREDENTIALS, "password");
-}
-
-
-
- - - - - -
- - -Have a look at the WildFly domain and messaging configuration for -finding out the actual security requirements. At the time of writing, a -user with guest role is required and that’s internally checked using -the other security domain. -
-
-
-

Of course once the endpoint is exposed over Jakarta Messaging transport, any plain Jakarta Messaging -client can also be used to send messages to the webservice endpoint. You -can have a look at the SOAP over Jakarta Messaging spec details and code the client -similarly to

-
-
-
-
Properties env = new Properties();
-env.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
-env.put(Context.PROVIDER_URL, "http-remoting://myhost:8080");
-env.put(Context.SECURITY_PRINCIPAL, "user");
-env.put(Context.SECURITY_CREDENTIALS, "password");
-InitialContext context = new InitialContext(env);
-QueueConnectionFactory connectionFactory = (QueueConnectionFactory)context.lookup("jms/RemoteConnectionFactory");
-Queue reqQueue = (Queue)context.lookup("jms/queue/test");
-Queue resQueue = (Queue)context.lookup("jms/queue/test");
-QueueConnection con = connectionFactory.createQueueConnection("user", "password");
-QueueSession session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
-QueueReceiver receiver = session.createReceiver(resQueue);
-ResponseListener responseListener = new ResponseListener(); //a custom response listener...
-receiver.setMessageListener(responseListener);
-con.start();
-TextMessage message = session.createTextMessage(reqMessage);
-message.setJMSReplyTo(resQueue);
- 
-//setup SOAP-over-JMS properties...
-message.setStringProperty("SOAPJMS_contentType", "text/xml");
-message.setStringProperty("SOAPJMS_requestURI", "jms:queue:testQueue");
- 
-QueueSender sender = session.createSender(reqQueue);
-sender.send(message);
-sender.close();
- 
-...
-
-
-
-
-
Jakarta Messaging and HTTP endpoints deployment
-
-

In this example we create a deployment containing an endpoint that -serves over both HTTP and Jakarta Messaging transports.

-
-
-

We from a WSDL contract such as below (please note we’ve two binding / -portType for the same service):

-
-
-
-
<?xml version='1.0' encoding='UTF-8'?>
-<wsdl:definitions name="HelloWorldService" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms"
-  xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
-  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-  xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms"
-  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-  xmlns:soapjms="http://www.w3.org/2010/soapjms/"
-  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <wsdl:types>
-<xs:schema elementFormDefault="unqualified" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms" version="1.0"
-  xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-<xs:element name="echo" type="tns:echo"/>
-<xs:element name="echoResponse" type="tns:echoResponse"/>
-<xs:complexType name="echo">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="arg0" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-<xs:complexType name="echoResponse">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="return" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-</xs:schema>
-  </wsdl:types>
-  <wsdl:message name="echoResponse">
-    <wsdl:part element="tns:echoResponse" name="parameters">
-    </wsdl:part>
-  </wsdl:message>
-  <wsdl:message name="echo">
-    <wsdl:part element="tns:echo" name="parameters">
-    </wsdl:part>
-  </wsdl:message>
-  <wsdl:portType name="HelloWorld">
-    <wsdl:operation name="echo">
-      <wsdl:input message="tns:echo" name="echo">
-    </wsdl:input>
-      <wsdl:output message="tns:echoResponse" name="echoResponse">
-    </wsdl:output>
-    </wsdl:operation>
-  </wsdl:portType>
-  <wsdl:binding name="HelloWorldServiceSoapBinding" type="tns:HelloWorld">
-    <soap:binding style="document" transport="http://www.w3.org/2010/soapjms/"/>
-    <wsdl:operation name="echo">
-      <soap:operation soapAction="" style="document"/>
-      <wsdl:input name="echo">
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output name="echoResponse">
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-  </wsdl:binding>
-  <wsdl:binding name="HttpHelloWorldServiceSoapBinding" type="tns:HelloWorld">
-    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
-    <wsdl:operation name="echo">
-      <soap:operation soapAction="" style="document"/>
-      <wsdl:input name="echo">
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output name="echoResponse">
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-  </wsdl:binding>
-  <wsdl:service name="HelloWorldService">
-    <soapjms:jndiConnectionFactoryName>java:jms/RemoteConnectionFactory</soapjms:jndiConnectionFactoryName>
-    <soapjms:jndiInitialContextFactory>org.wildfly.naming.client.WildFlyInitialContextFactory</soapjms:jndiInitialContextFactory>
-    <soapjms:jndiURL>http-remoting://localhost:8080</soapjms:jndiURL>
-    <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
-      <soap:address location="jms:queue:testQueue"/>
-    </wsdl:port>
-    <wsdl:port binding="tns:HttpHelloWorldServiceSoapBinding" name="HttpHelloWorldImplPort">
-      <soap:address location="http://localhost:8080/jaxws-cxf-jms-http-deployment"/>
-    </wsdl:port>
-  </wsdl:service>
-  <wsdl:service name="HelloWorldServiceLocal">
-    <soapjms:jndiConnectionFactoryName>java:/ConnectionFactory</soapjms:jndiConnectionFactoryName>
-    <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
-      <soap:address location="jms:queue:testQueue"/>
-    </wsdl:port>
-</wsdl:definitions>
-
-
-
-

The same considerations of the previous example regarding the Jakarta Messaging queue -and JNDI connection factory still apply.
-Here we can implement the endpoint in multiple ways, either with a -common implementation class that’s extended by the Jakarta Messaging and HTTP ones, or -keep the two implementation classes independent and just have them -implement the same service endpoint interface:

-
-
-
-
package org.jboss.test.ws.jaxws.cxf.jms_http;
- 
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   portName = "HelloWorldImplPort",
-   serviceName = "HelloWorldServiceLocal",
-   wsdlLocation = "WEB-INF/wsdl/HelloWorldService.wsdl",
-   endpointInterface = "org.jboss.test.ws.jaxws.cxf.jms_http.HelloWorld",
-   targetNamespace = "http://org.jboss.ws/jaxws/cxf/jms"
-)
-public class HelloWorldImpl implements HelloWorld
-{
-   public String echo(String input)
-   {
-      System.out.println("input: " + input);
-      return input;
-   }
-}
-
-
-
-
-
package org.jboss.test.ws.jaxws.cxf.jms_http;
- 
-import jakarta.jws.WebService;
- 
-@WebService
-(
-   portName = "HttpHelloWorldImplPort",
-   serviceName = "HelloWorldService",
-   wsdlLocation = "WEB-INF/wsdl/HelloWorldService.wsdl",
-   endpointInterface = "org.jboss.test.ws.jaxws.cxf.jms_http.HelloWorld",
-   targetNamespace = "http://org.jboss.ws/jaxws/cxf/jms"
-)
-public class HttpHelloWorldImpl implements HelloWorld
-{
-   public String echo(String input)
-   {
-      System.out.println("input (http): " + input);
-      return "(http) " + input;
-   }
-}
-
-
-
-

Both classes are packaged together the service endpoint interface and -the WSDL file in a war archive:

-
-
-
-
alessio@inuyasha /dati/jbossws/stack/cxf/trunk $ jar -tvf ./modules/testsuite/cxf-spring-tests/target/test-libs/jaxws-cxf-jms-http-deployment.war
-     0 Thu Jun 23 15:18:44 CEST 2011 META-INF/
-   129 Thu Jun 23 15:18:42 CEST 2011 META-INF/MANIFEST.MF
-     0 Thu Jun 23 15:18:44 CEST 2011 WEB-INF/
-   569 Thu Jun 23 15:18:40 CEST 2011 WEB-INF/web.xml
-     0 Thu Jun 23 15:18:44 CEST 2011 WEB-INF/classes/
-     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/
-     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/
-     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/
-     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/
-     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/
-     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/
-     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/jms_http/
-   318 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/jms_http/HelloWorld.class
-  1192 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/jms_http/HelloWorldImpl.class
-  1246 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/jms_http/HttpHelloWorldImpl.class
-     0 Thu Jun 23 15:18:40 CEST 2011 WEB-INF/wsdl/
-  3068 Thu Jun 23 15:18:40 CEST 2011 WEB-INF/wsdl/HelloWorldService.wsdl
-
-
-
-

A trivial web.xml descriptor is also included to trigger the HTTP -endpoint publish:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
-  version="2.4">
-  <servlet>
-    <servlet-name>EndpointServlet</servlet-name>
-    <servlet-class>org.jboss.test.ws.jaxws.cxf.jms_http.HttpHelloWorldImpl</servlet-class>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>EndpointServlet</servlet-name>
-    <url-pattern>/*</url-pattern>
-  </servlet-mapping>
-</web-app>
-
-
-
- - - - - -
- - -Here too the MANIFEST.MF needs to declare a dependency on org.hornetq -module when deploying to WildFly. -
-
-
-

Finally, the Jakarta XML Web Services client can ineract with both Jakarta Messaging and HTTP endpoints -as usual:

-
-
-
-
//start another bus to avoid affecting the one that could already be assigned to current thread - optional but highly suggested
-Bus bus = BusFactory.newInstance().createBus();
-BusFactory.setThreadDefaultBus(bus);
-try
-{
-   QName serviceName = new QName("http://org.jboss.ws/jaxws/cxf/jms", "HelloWorldService");
-   Service service = Service.create(wsdlUrl, serviceName);
- 
-   //JMS test
-   HelloWorld proxy = (HelloWorld) service.getPort(new QName("http://org.jboss.ws/jaxws/cxf/jms", "HelloWorldImplPort"), HelloWorld.class);
-   setupProxy(proxy);
-   proxy.echo("Hi");
-   //HTTP test
-   HelloWorld httpProxy = (HelloWorld) service.getPort(new QName("http://org.jboss.ws/jaxws/cxf/jms", "HttpHelloWorldImplPort"), HelloWorld.class);
-   httpProxy.echo("Hi");
-}
-finally
-{
-   bus.shutdown(true);
-}
-
-
-
-
-
Use of Endpoint.publish() API
-
-

An alternative to deploying an archive containing Jakarta Messaging endpoints is in -starting them directly using the Jakarta XML Web Services Endpoint.publish(..) API.

-
-
-

That’s as easy as doing:

-
-
-
-
Object implementor = new HelloWorldImpl();
-Endpoint ep = Endpoint.publish("jms:queue:testQueue", implementor);
-try
-{
-   //use or let others use the endpoint
-}
-finally
-{
-   ep.stop();
-}
-
-
-
-

where HelloWorldImpl is a POJO endpoint implementation referencing a -Jakarta Messaging port in a given WSDL contract, as explained in the previous -examples.

-
-
-

The main difference among the deployment approach is in the direct -control and responsibility over the endpoint lifecycle ( start/publish -and stop).

-
-
-
-
-
-

17.5.16. HTTP Proxy

-
-

The HTTP Proxy related functionalities of JBoss Web Services are -provided by the Apache CXF http transport layer.

-
-
-

The suggested configuration mechanism when running JBoss Web Services is -explained below; for further information please refer to the -Apache -CXF documentation.

-
-
-
Configuration
-
-

The HTTP proxy configuration for a given Jakarta XML Web Services client can be set in the -following ways:

-
-
-
    -
  • -

    through the http.proxyHost and http.proxyPort system properties, -or

    -
  • -
  • -

    leveraging the org.apache.cxf.transport.http.HTTPConduit options

    -
  • -
-
-
-

The former is a JVM level configuration; for instance, assuming the http -proxy is currently running at http://localhost:9934, here is the setup:

-
-
-
-
System.getProperties().setProperty("http.proxyHost", "localhost");
-System.getProperties().setProperty("http.proxyPort", 9934);
-
-
-
-

The latter is a client stub/port level configuration: the setup is -performed on the HTTPConduit object that’s part of the Apache CXF -Client abstraction.

-
-
-
-
import org.apache.cxf.configuration.security.ProxyAuthorizationPolicy;
-import org.apache.cxf.endpoint.Client;
-import org.apache.cxf.frontend.ClientProxy;
-import org.apache.cxf.transport.http.HTTPConduit;
-import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
-import org.apache.cxf.transports.http.configuration.ProxyServerType;
-...
- 
-Service service = Service.create(wsdlURL, new QName("http://org.jboss.ws/jaxws/cxf/httpproxy", "HelloWorldService"));
-HelloWorld port = (HelloWorld) service.getPort(new QName("http://org.jboss.ws/jaxws/cxf/httpproxy", "HelloWorldImplPort"), HelloWorld.class);
- 
-Client client = ClientProxy.getClient(port);
-HTTPConduit conduit = (HTTPConduit)client.getConduit();
-ProxyAuthorizationPolicy policy = new ProxyAuthorizationPolicy();
-policy.setAuthorizationType("Basic");
-policy.setUserName(PROXY_USER);
-policy.setPassword(PROXY_PWD);
-conduit.setProxyAuthorization(policy);
- 
-port.echo("Foo");
-
-
-
-

The ProxyAuthorizationPolicy also allows for setting the authotization -type as well as the username / password to be used.

-
-
-

Speaking of authorization and authentication, please note that the JDK -already features the java.net.Authenticator facility, which is used -whenever opening a connection to a given URL requiring a http proxy. -Users might want to set a custom Authenticator for instance when needing -to read WSDL contracts before actually calling into the JBoss Web -Services / Apache CXF code; here is an example:

-
-
-
-
import java.net.Authenticator;
-import java.net.PasswordAuthentication;
-...
-public class ProxyAuthenticator extends Authenticator
-{
-   private String user, password;
- 
-   public ProxyAuthenticator(String user, String password)
-   {
-      this.user = user;
-      this.password = password;
-   }
- 
-   protected PasswordAuthentication getPasswordAuthentication()
-   {
-      return new PasswordAuthentication(user, password.toCharArray());
-   }
-}
- 
-...
- 
-Authenticator.setDefault(new ProxyAuthenticator(PROXY_USER, PROXY_PWD));
-
-
-
-
-
-

17.5.17. WS-Discovery

-
-

Apache CXF includes support for Web Services Dynamic Discovery ( -WS-Discovery), -which is a protocol to enable dynamic discovery of services available on -the local network. The protocol implies using a UDP based multicast -transport to announce new services and probe for existing services. A -managed mode where a discovery proxy is used to reduce the amount of -required multicast traffic is also covered by the protocol.

-
-
-

JBossWS integrates the WS-Discovery -functionalities provided -by Apache CXF into the application server.

-
-
-
Enabling WS-Discovery
-
-

Apache CXF enables WS-Discovery depending on the availability of its -runtime component; given that’s always shipped in the application -server, JBossWS integration requires using the -cxf.ws-discovery.enabled -property -usage for enabling WS-Discovery for a given deployment. By default -WS-Discovery is disabled on the application server. Below is an -example of jboss-webservices.xml descriptor to be used for enabling -WS-Discovery:

-
-
-
-
<webservices xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  version="1.2" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee">
- 
-  <property>
-    <name>cxf.ws-discovery.enabled</name>
-    <value>true</value>
-  </property>
- 
-</webservices>
-
-
-
-

By default, a WS-Discovery service endpoint (SOAP-over-UDP bound) will -be started the first time a WS-Discovery enabled deployment is processed -on the application server. Every ws endpoint belonging to WS-Discovery -enabled deployments will be automatically registered into such a -WS-Discovery service endpoint ( Hello messages). The service will -reply to Probe and Resolve messages received on UDP port 3702 -(including multicast messages sent to IPv4 address 239.255.255.250, -as per -specification). -Endpoints will eventually be automatically unregistered using Bye -messages upon undeployment.

-
-
-
-
Probing services
-
-

Apache CXF comes with a WS-Discovery API that can be used to probe / -resolve services. When running in-container, a JBoss module -dependency to the org.apache.cxf.impl module is to -be set to have access to WS-Discovery client functionalities.

-
-
-

The -org.apache.cxf.ws.discovery.WSDiscoveryClient -class provides the probe and resolve methods which also accepts -filters on scopes. Users can rely on them for locating available -endpoints on the network. Please have a look at the JBossWS testsuite -which includes a -sample -on CXF WS-Discovery usage.

-
-
-
-
-

17.5.18. WS-Policy

-
-
Apache CXF WS-Policy support
-
-

JBossWS policy support rely on the Apache CXF WS-Policy framework, which -is compliant with the -Web Services Policy -1.5 - Framework and -Web Services -Policy 1.5 - Attachment specifications.
-Users can work with policies in different ways:

-
-
-
    -
  • -

    by adding policy assertions to wsdl contracts and letting the runtime -consume them and behave accordingly;

    -
  • -
  • -

    by specifying endpoint policy attachments using either CXF annotations -or features.

    -
  • -
-
-
-

Of course users can also make direct use of the Apache CXF policy -framework, -defining custom -assertions, etc.

-
-
-

Finally, JBossWS provides some additional annotations for simplified -policy attachment.

-
-
-
Contract-first approach
-
-

WS-Policies can be attached and referenced in wsdl elements (the -specifications describe all possible alternatives). Apache CXF -automatically recognizes, reads and uses policies defined in the wsdl.

-
-
-

Users should hence develop endpoints using the contract-first -approach, that is explicitly providing the contract for their services. -Here is a excerpt taken from a wsdl including a WS-Addressing policy:

-
-
-
-
<wsdl:definitions name="Foo" targetNamespace="http://ws.jboss.org/foo"
-...
-<wsdl:service name="FooService">
-    <wsdl:port binding="tns:FooBinding" name="FooPort">
-        <soap:address location="http://localhost:80800/foo"/>
-        <wsp:Policy xmlns:wsp="http://www.w3.org/ns/ws-policy">
-             <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
-                 <wsp:Policy/>
-              </wsam:Addressing>
-         </wsp:Policy>
-    </wsdl:port>
-</wsdl:service>
-</wsdl:definitions>
-
-
-
-

Of course, CXF also acts upon policies specified in wsdl documents -consumed on client side.

-
-
-
-
Code-first approach
-
-

For those preferring code-first (java-first) endpoint development, -Apache CXF comes with org.apache.cxf.annotations.Policy and -org.apache.cxf.annotations.Policies annotations to be used for -attaching policy fragments to the wsdl generated at deploy time.

-
-
-

Here is an example of a code-first endpoint including @Policy -annotation:

-
-
-
-
import jakarta.jws.WebService;
-import org.apache.cxf.annotations.Policy;
- 
-@WebService(portName = "MyServicePort",
-            serviceName = "MyService",
-            name = "MyServiceIface",
-            targetNamespace = "http://www.jboss.org/jbossws/foo")
-@Policy(placement = Policy.Placement.BINDING, uri = "JavaFirstPolicy.xml")
-public class MyServiceImpl {
-   public String sayHello() {
-      return "Hello World!";
-   }
-}
-
-
-
-

The referenced descriptor is to be added to the deployment and will -include the policy to be attached; the attachment position in the -contracts is defined through the placement attribute. Here is a -descriptor example:

-
-
-
-
<?xml version="1.0" encoding="UTF-8" ?>
-<wsp:Policy wsu:Id="MyPolicy" xmlns:wsp="http://www.w3.org/ns/ws-policy"
-    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
-    <wsp:ExactlyOne>
-        <wsp:All>
-            <sp:SupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-                <wsp:Policy>
-                    <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
-                        <wsp:Policy>
-                            <sp:WssUsernameToken10/>
-                        </wsp:Policy>
-                    </sp:UsernameToken>
-                </wsp:Policy>
-            </sp:SupportingTokens>
-        </wsp:All>
-    </wsp:ExactlyOne>
-</wsp:Policy>
-
-
-
-
-
-
JBossWS additions
-
-
Policy sets
-
-

Both approaches above require users to actually write their policies' -assertions; while this offer great flexibility and control of the actual -contract, providing the assertions might end up being quite a -challenging task for complex policies. For this reason, the JBossWS -integration provides policy sets, which are basically pre-defined -groups of policy assertions corresponding to well known / common needs. -Each set has a label allowing users to specify it in the -@org.jboss.ws.api.annotation.PolicySets annotation to have the policy -assertions for that set attached to the annotated endpoint. Multiple -labels can also be specified. Here is an example of the @PolicySets -annotation on a service endpoint interface:

-
-
-
-
import jakarta.jws.WebService;
-import org.jboss.ws.api.annotation.PolicySets;
- 
-@WebService(name = "EndpointTwo", targetNamespace = "http://org.jboss.ws.jaxws.cxf/jbws3648")
-@PolicySets({"WS-RM_Policy_spec_example", "WS-SP-EX223_WSS11_Anonymous_X509_Sign_Encrypt", "WS-Addressing"})
-public interface EndpointTwo
-{
-   String echo(String input);
-}
-
-
-
-

The three sets specified in @PolicySets will cause the wsdl generated -for the endpoint having this interface to be enriched with some policy -assertions for WS-RM, WS-Security and WS-Addressing.

-
-
-

The labels' list of known sets is stored in the -META-INF/policies/org.jboss.wsf.stack.cxf.extensions.policy.PolicyAttachmentStore -file within the jbossws-cxf-client.jar ( -org.jboss.ws.cxf:jbossws-cxf-client maven artifact). Actual policy -fragments for each set are also stored in the same artifact at -META-INF/policies/<set-label>-<attachment-position>.xml.

-
-
-

Here is a list of the available policy sets:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LabelDescription

WS-Addressing

Basic WS-Addressing policy

WS-RM_Policy_spec_example

The basic WS-RM policy example in the WS-RM -specification

WS-SP-EX2121_SSL_UT_Supporting_Token

The group of policy assertions -used in the section 2.1.2.1 example of the WS-Security Policy Examples -1.0 specification

WS-SP-EX213_WSS10_UT_Mutual_Auth_X509_Sign_Encrypt

The group of policy -assertions used in the section 2.1.3 example of the WS-Security Policy -Examples 1.0 specification

WS-SP-EX214_WSS11_User_Name_Cert_Sign_Encrypt

The group of policy -assertions used in the section 2.1.4 example of the WS-Security Policy -Examples 1.0 specification

WS-SP-EX221_WSS10_Mutual_Auth_X509_Sign_Encrypt

The group of policy -assertions used in the section 2.2.1 example of the WS-Security Policy -Examples 1.0 specification

WS-SP-EX222_WSS10_Mutual_Auth_X509_Sign_Encrypt

The group of policy -assertions used in the section 2.2.2 example of the WS-Security Policy -Examples 1.0 specification

WS-SP-EX223_WSS11_Anonymous_X509_Sign_Encrypt

The group of policy -assertions used in the section 2.2.3 example of the WS-Security Policy -Examples 1.0 specification

WS-SP-EX224_WSS11_Mutual_Auth_X509_Sign_Encrypt

The group of policy -assertions used in the section 2.2.4 example of the WS-Security Policy -Examples 1.0 specification

AsymmetricBinding_X509v1_TripleDesRsa15_EncryptBeforeSigning_ProtectTokens

A WS-Security policy for asymmetric binding (encrypt before signing) -using X.509v1 tokens, 3DES + RSA 1.5 algorithms and with token -protections enabled

AsymmetricBinding_X509v1_GCM256OAEP_ProtectTokens

The same as before, -but using custom Apache CXF algorithm suite including GCM 256 + RSA OAEP -algorithms

-
- - - - - -
- - -Always verify the contents of the generated wsdl contract, as policy -sets are potentially subject to updates between JBossWS releases. This -is especially important when dealing with security related policies; the -provided sets are to be considered as convenient configuration options -only; users remain responsible for the policies in their contracts. -
-
-
- - - - - -
- - -The org.jboss.wsf.stack.cxf.extensions.policy.Constants interface has -convenient String constants for the available policy set labels. -
-
-
- - - - - -
- - -If you feel a new set should be added, just propose it by writing the -user forum! -
-
-
-
-
-
-

17.5.19. Published WSDL customization

-
-
Endpoint address rewrite
-
-

JBossWS supports the rewrite of the <soap:address> element of -endpoints published in WSDL contracts. This feature is useful for -controlling the server address that is advertised to clients for each -endpoint. The rewrite mechanism is configured at server level through a -set of elements in the webservices subsystem of the WildFly management -model. Please refer to the container documentation for details on the -options supported in the selected container version. Below is a list of -the elements available in the latest WildFly sources:

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription

modify-wsdl-address

boolean

This boolean enables and disables the -address rewrite functionality.When modify-wsdl-address is set to true -and the content of <soap:address> is a valid URL, JBossWS will rewrite -the URL using the values of wsdl-host and wsdl-port or -wsdl-secure-port.When modify-wsdl-address is set to false and the -content of <soap:address> is a valid URL, JBossWS will not rewrite the -URL. The <soap:address> URL will be used.When the content of -<soap:address> is not a valid URL, JBossWS will rewrite it no matter -what the setting of modify-wsdl-address.If modify-wsdl-address is set to -true and wsdl-host is not defined or explicitly set to -'jbossws.undefined.host' the content of <soap:address> URL is use. -JBossWS uses the requester’s host when rewriting the <soap:address>When -modify-wsdl-address is not defined JBossWS uses a default value of true.

wsdl-host

string

The hostname / IP address to be used for rewriting -<soap:address>.If wsdl-host is set to jbossws.undefined.host, JBossWS -uses the requester’s host when rewriting the <soap:address>When -wsdl-host is not defined JBossWS uses a default value of -'jbossws.undefined.host'.

wsdl-port

int

Set this property to explicitly define the HTTP port -that will be used for rewriting the SOAP address.Otherwise the HTTP port -will be identified by querying the list of installed HTTP connectors.

wsdl-secure-port

int

Set this property to explicitly define the HTTPS -port that will be used for rewriting the SOAP address.Otherwise the -HTTPS port will be identified by querying the list of installed HTTPS -connectors.

wsdl-uri-scheme

string

This property explicitly sets the URI scheme -to use for rewriting <soap:address> . Valid values are http and https. -This configuration overrides scheme computed by processing the endpoint -(even if a transport guaranteeis specified). The provided values for -wsdl-port and wsdl-secure-port (or their default values) are used -depending on specified scheme.

wsdl-path-rewrite-rule

string

This string defines a SED substitution -command (e.g., 's/regexp/replacement/g') that JBossWS executes against -the path component of each <soap:address> URL published from the -server.When wsdl-path-rewrite-rule is not defined, JBossWS retains the -original path component of each <soap:address> URL.When -'modify-wsdl-address' is set to "false" this element is ignored.

-
-

Additionally, users can override the server level configuration by -requesting a specific rewrite behavior for a given endpoint deployment. -That is achieved by setting one of the following properties within a -jboss-webservices.xml descriptor:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyCorresponding server option

wsdl.soapAddress.rewrite.modify-wsdl-address

modify-wsdl-address

wsdl.soapAddress.rewrite.wsdl-host

wsdl-host

wsdl.soapAddress.rewrite.wsdl-port

wsdl-port

wsdl.soapAddress.rewrite.wsdl-secure-port

wsdl-secure-port

wsdl.soapAddress.rewrite.wsdl-path-rewrite-rule

wsdl-path-rewrite-rule

wsdl.soapAddress.rewrite.wsdl-uri-scheme

wsdl-uri-scheme

-
-

Here is an example of partial overriding of the default configuration -for a specific deployment:

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-<webservices version="1.2"
-  xmlns="http://www.jboss.com/xml/ns/javaee"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee">
-  <property>
-    <name>wsdl.soapAddress.rewrite.wsdl-uri-scheme</name>
-    <value>https</value>
-  </property>
-  <property>
-    <name>wsdl.soapAddress.rewrite.wsdl-host</name>
-    <value>foo</value>
-  </property>
-</webservices>
-
-
-
-
-
System property references
-
-

System property references wrapped within "@" characters are expanded -when found in WSDL attribute and element values. This allows for -instance including multiple WS-Policy declarations in the contract and -selecting the policy to use depending on a server wide system property; -here is an example:

-
-
-
-
<wsdl:definitions ...>
-  ...
-  <wsdl:binding name="ServiceOneSoapBinding" type="tns:EndpointOne">
-    ...
-    <wsp:PolicyReference URI="#@org.jboss.wsf.test.JBWS3628TestCase.policy@"/>
-    <wsdl:operation name="echo">
-      ...
-    </wsdl:operation>
-  </wsdl:binding>
-  <wsdl:service name="ServiceOne">
-    <wsdl:port binding="tns:ServiceOneSoapBinding" name="EndpointOnePort">
-      <soap:address location="http://localhost:8080/jaxws-cxf-jbws3628/ServiceOne"/>
-    </wsdl:port>
-  </wsdl:service>
- 
-  <wsp:Policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" wsu:Id="WS-RM_Policy">
- <wsrmp:RMAssertion xmlns:wsrmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
-          ...
-   </wsrmp:RMAssertion>
-  </wsp:Policy>
- 
-  <wsp:Policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy"
-      xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" wsu:Id="WS-Addressing_policy">
-    <wsam:Addressing>
-      <wsp:Policy/>
-    </wsam:Addressing>
-  </wsp:Policy>
-</wsdl:definitions>
-
-
-
-

If the org.jboss.wsf.test.JBWS3628TestCase.policy system property is -defined and set to " WS-Addressing_policy ", WS-Addressing will be -enabled for the endpoint defined by the contract above.

-
-
-
-
-
-

17.6. JBoss Modules and WS applications

-
-

The JBoss Web Services functionalities are provided by a given set of -modules / libraries installed on WildFly, which are organized into JBoss -Modules modules. In particular the org.jboss.as.webservices.* and -org.jboss.ws.* modules belong to the JBossWS - WildFly integration. -Users should not need to change anything in them.

-
-
-

While users are of course allowed to provide their own modules for their -custom needs, below is a brief collection of suggestions and hints -around modules and webservices development on WildFly.

-
-
-

17.6.1. Setting module dependencies

-
-

On WildFly the user deployment classloader does not have any visibility -over JBoss internals; so for instance you can’t directly use JBossWS -implementation classes unless you explicitly set a dependency to the -corresponding module. As a consequence, users need to declare the module -dependencies they want to be added to their deployment.

-
-
- - - - - -
- - -The JBoss Web Services APIs are always available by default whenever the -webservices subsystem is available on AS7. So users just use them, no -need for explicit dependencies declaration for those modules. -
-
-
-
Using MANIFEST.MF
-
-

The convenient method for configuring deployment dependencies is adding -them into the MANIFEST.MF file:

-
-
-
-
Manifest-Version: 1.0
-Dependencies: org.jboss.ws.cxf.jbossws-cxf-client services export,foo.bar
-
-
-
-

Here above org.jboss.ws.cxf.jbossws-cxf-client and foo.bar are the -modules you want to set dependencies to; services tells the modules -framework that you want to also import META-INF/services/.. -declarations from the dependency, while export exports the classes -from the module to any other module that might be depending on the -module implicitly created for your deployment.

-
-
- - - - - -
- - -When using annotations on your endpoints / handlers such as the Apache -CXF ones (@InInterceptor, @GZIP, …​) remember to add the proper module -dependency in your manifest. Otherwise your annotations are not picked -up and added to the annotation index by WildFly, resulting in them being -completely and silently ignored. -
-
-
-
Using Jakarta XML Binding
-
-

In order for successfully directly using Jakarta XML Binding contexts, etc. in your -client or endpoint running in-container, you need to properly setup a -Jakarta XML Binding implementation; that is performed setting the following dependency:

-
-
-
-
Dependencies: com.sun.xml.bind services export
-
-
-
-
-
Using Apache CXF
-
-

In order for using Apache CXF APIs and implementation classes you need -to add a dependency to the org.apache.cxf (API) module and / or -org.apache.cxf.impl (implementation) module:

-
-
-
-
Dependencies: org.apache.cxf services
-
-
-
-

However, please note that would not come with any JBossWS-CXF -customizations nor additional extensions. For this reason, and generally -speaking for simplifying user configuration, a client side aggregation -module is available with all the WS dependencies users might need.

-
-
-
-
Client side WS aggregation module
-
-

Whenever you simply want to use all the JBoss Web Services -feature/functionalities, you can set a dependency to the convenient -client module.

-
-
-
-
Dependencies: org.jboss.ws.cxf.jbossws-cxf-client services
-
-
-
-

Please note the services option above: that’s strictly required in -order for you to get the JBossWS-CXF version of classes that are -retrieved using the Service API, the org.apache.cxf.Bus for -instance.

-
-
- - - - - -
- - -Be careful as issues because of misconfiguration here can be quite hard -to track down, because the Apache CXF behaviour would be sensibly -different. -
-
-
- - - - - -
- - -The services option is almost always needed when declaring -dependencies on org.jboss.ws.cxf.jbossws-cxf-client and -org.apache.cxf modules. The reason for this is in it affecting the -loading of classes through the Service API, which is what is used to -wire most of the JBossWS components as well as all Apache CXF Bus -extensions. -
-
-
-
-
Annotation scanning
-
-

The application server uses an annotation index for detecting Jakarta XML Web Services -endpoints in user deployments. When declaring WS endpoints whose class -belongs to a different module (for instance referring that in the -web.xml descriptor), be sure to have an annotations type dependency -in place. Without that, your endpoints would simply be ignored as they -won’t appear as annotated classes to the webservices subsystem.

-
-
-
-
Dependencies: org.foo annotations
-
-
-
-
-
-
Using jboss-deployment-descriptor.xml
-
-

In some circumstances, the convenient approach of setting module -dependencies in MANIFEST.MF might not work. An example is the need for -importing/exporting specific resources from a given module dependency. -Users should hence add a jboss-deployment-structure.xml descriptor to -their deployment and set module dependencies in it.

-
-
-
-
-
-
-
-

18. Scoped EJB client contexts

-
-
-
-WildFly 29 introduced the EJB client API for managing remote EJB -invocations. The EJB client API works off EJBClientContext(s). An -EJBClientContext can potentially contain any number of EJB receivers. An -EJB receiver is a component which knows how to communicate with a server -which is capable of handling the EJB invocation. Typically EJB remote -applications can be classified into: -
-
-
-
    -
  • -

    A remote client which runs as a standalone Java application

    -
  • -
  • -

    A remote client which runs within another WildFly 29 instance

    -
  • -
-
-
-

Depending on the kind of remote client, from an EJB client API point of -view, there can potentially be more than 1 EJBClientContext(s) within a -JVM.

-
-
-

In case of standalone applications, typically a single EJBClientContext -(backed by any number of EJB receivers) exists. However this isn’t -mandatory. Certain standalone applications can potentially have more -than one EJBClientContext(s) and an EJB client context selector will be -responsible for returning the appropriate context.

-
-
-

In case of remote clients which run within another WildFly 29 instance, -each deployed application will have a corresponding EJB client context. -Whenever that application invokes on another EJB, the corresponding EJB -client context will be used for finding the right EJB receiver and -letting it handle the invocation.

-
-
-

18.1. Potential shortcomings of a single EJB client context

-
-

In the Overview section we briefly looked at the different types of -remote clients. Let’s focus on the standalone remote clients (the ones -that don’t run within another WildFly 29 instance) for some of the next -sections. Like mentioned earlier, typically a remote standalone client -has just one EJB client context backed by any number of EJB receivers. -Consider this example:

-
-
-
-
public class MyApplication {
- 
-    public static void main(String args[]) {
- 
-        final javax.naming.Context ctxOne = new javax.naming.InitialContext();
-        final MyBeanInterface beanOne = ctxOne.lookup("ejb:app/module/distinct/bean!interface");
-        beanOne.doSomething();
-        ...
-    }
-}
-
-
-
-

Now, we have seen in this other chapter -EJB -invocations from a remote client using JNDI that the JNDI lookups are -(typically) backed by jboss-ejb-client.properties file which is used to -setup the EJB client context and the EJB receivers. Let’s assume we have -a jboss-ejb-client.properties with the relevant receivers -configurations. These configurations include the security credentials -that will be used to create an EJB receiver which connects to the AS7 -server. Now when the above code is invoked, the EJB client API looks for -the EJB client context to pick an EJB receiver, to pass on the EJB -invocation request. Since we just have a single EJB client context, that -context is used by the above code to invoke the bean.

-
-
-

Now let’s consider a case where the user application wants to invoke on -the bean more than once, but wants to connect to the WildFly 29 server -using different security credentials. Let’s take a look at the following -code:

-
-
-
-
public class MyApplication {
- 
-    public static void main(String args[]) {
- 
-        // let's say we want to use "foo" security credential while connecting to the AS7 server for invoking on this bean instance
-        final javax.naming.Context ctxOne = new javax.naming.InitialContext();
-        final MyBeanInterface beanOne = ctxOne.lookup("ejb:app/module/distinct/bean!interface");
-        beanOne.doSomething();
-        ...
- 
-        // let's say we want to use "bar" security credential while connecting to the AS7 server for invoking on this bean instance
-        final javax.naming.Context ctxTwo = new javax.naming.InitialContext();
-        final MyBeanInterface beanTwo = ctxTwo.lookup("ejb:app/module/distinct/bean!interface");
-        beanTwo.doSomething();
-        ...
- 
-    }
-}
-
-
-
-

So we have the same application, which wants to connect to the same -server instance for invoking the EJB(s) hosted on that server, but wants -to use two different credentials while connecting to the server. -Remember, the client application has a single EJB client context which -can have atmost 1 EJB receiver for each server instance. Which -effectively means that the above code will end up using just one -credential to connect to the server. So there was no easy way to have -the above code working.

-
-
-

That was one of the use cases which prompted the -https://issues.redhat.com/browse/EJBCLIENT-34 feature request. The -proposal was to introduce a way, where you can have more control over -the EJB client contexts and their association with JNDI contexts which -are typically used for EJB invocations.

-
-
-
-

18.2. Scoped EJB client contexts

-
-

Developers familiar with earlier versions of JBoss AS would remember -that for invoking an EJB, you would typically create a JNDI context -passing it the PROVIDER_URL which would point to the target server. That -way any invocation is done on EJB proxies looked up using that JNDI -context, would end up on that server. If we look back at the example -above, we’ll realize that, we are ultimately aiming for a similar -functionality through https://issues.redhat.com/browse/EJBCLIENT-34. We -want the user applications to have more control over which EJB receiver -gets used for a specific invocation.

-
-
-

Before we introduced https://issues.redhat.com/browse/EJBCLIENT-34 -feature, the EJB client context was typically scoped to the client -application. As part of https://issues.redhat.com/browse/EJBCLIENT-34 we -now allow the EJB client contexts to be scoped with the JNDI contexts. -Consider the following example:

-
-
-
-
public class MyApplication {
- 
-    public static void main(String args[]) {
- 
-        // let's say we want to use "foo" security credential while connecting to the AS7 server for invoking on this bean instance
-        final Properties ejbClientContextPropsOne = getPropsForEJBClientContextOne():
-        final javax.naming.Context ctxOne = new javax.naming.InitialContext(ejbClientContextPropsOne);
-        final MyBeanInterface beanOne = ctxOne.lookup("ejb:app/module/distinct/bean!interface");
-        beanOne.doSomething();
-        ...
-        closeContext(ctxOne); // read on the entire article to understand more about closing scoped EJB client contexts
- 
-        // let's say we want to use "bar" security credential while connecting to the AS7 server for invoking on this bean instance
-        final Properties ejbClientContextPropsTwo = getPropsForEJBClientContextTwo():
-        final javax.naming.Context ctxTwo = new javax.naming.InitialContext(ejbClientContextPropsTwo);
-        final MyBeanInterface beanTwo = ctxTwo.lookup("ejb:app/module/distinct/bean!interface");
-        beanTwo.doSomething();
-        ...
-        closeContext(ctxTwo); // read on the entire article to understand more about closing scoped EJB client contexts
-    }
-}
-
-
-
-

Notice any difference between this code and the earlier one? We now -create and pass EJB client context specific properties to the JNDI -context. So what do the EJB client context properties look like? The -properties are the same that you would pass through the -jboss-ejb-client.properties file, except for one additional property -which is required to scope the EJB client context to the JNDI context. -The name of the property is:

-
-
-

org.jboss.ejb.client.scoped.context

-
-
-

which is expected to have a value true. This property lets the EJB -client API know that it has to created an EJB client context (backed by -EJB receiver(s)) and that created context is then scoped/visible to only -that JNDI context which created it. Lookup and invocation on any EJB -proxies looked up using this JNDI context will only know of the EJB -client context associated with this JNDI context. This effectively means -that the other JNDI contexts which the application uses to lookup and -invoke on EJBs will not know about the other scoped EJB client -contexts at all.

-
-
-

JNDI contexts which aren’t scoped to a EJB client context (for example, -not passing the org.jboss.ejb.client.scoped.context property) will -fallback to the default behaviour of using the "current" EJB client -context which typically is the one tied to the entire application.

-
-
-

This scoping of the EJB client context helps the user applications to -have more control over which JNDI context "talks to" which server and -connects to that server in "what way". This gives the user applications -the flexibility that was associated with the JNP based JNDI invocations -prior to WildFly 29 versions.

-
-
- - - - - -
- - -IMPORTANT: It is very important to remember that scoped EJB client -contexts which are scoped to the JNDI contexts are NOT fire and forget -kind of contexts. What that means is the application program which is -using these contexts is solely responsible for managing their lifecycle -and the application itself is responsible for closing the context at the -right moment. After closing the context the proxies which are bound to -this context are no longer valid and any invocation will throw an -Exception. Not closing the context will end in resource problems as the -underlying physical connection will stay open. -
-
-
-

Read the rest of the sections in this article to understand more about -the lifecycle management of such scoped contexts.

-
-
-
-

18.3. Lifecycle management of scoped EJB client contexts

-
-

Like you saw in the previous sections, in case of scoped EJB client -contexts, the EJB client context is tied to the JNDI context. It’s very -important to understand how the lifecycle of the EJB client context -works in such cases. Especially since any EJB client context is almost -always backed by connections to the server. Not managing the EJB client -context lifecycle correctly can lead to connection leaks in some cases.

-
-
-

When you create a scoped EJB client context, the EJB client context -connects to the server(s) listed in the JNDI properties. An internal -implementation detail of this logic includes the ability of the EJB -client context to cache connections based on certain internal algorithm -it uses. The algorithm itself isn’t publicly documented (yet) since the -chances of it changing or even removal shouldn’t really affect the -client application and instead it’s supposed to be transparent to the -client application.

-
-
-

The connections thus created for an EJB client context are kept open as -long as the EJB client context is open. This allows the EJB client -context to be usable for EJB invocations. The connections associated -with the EJB client context are closed when the EJB client context -itself is closed.

-
-
- - - - - -
- - -The connections that were manually added by the application to the EJB -client context are not managed by the EJB client context. i.e. they -won’t be opened (obviously) nor closed by the EJB client API when the -EJB client context is closed. -
-
-
-

18.3.1. How to close EJB client contexts?

-
-

The answer to that is simple. Use the close() method on the appropriate -EJB client context.

-
-
-
-

18.3.2. How to close scoped EJB client contexts?

-
-

The answer is the same, use the close() method on the EJB client -context. But the real question is how do you get the relevant scoped EJB -client context which is associated with a JNDI context. Before we get to -that, it’s important to understand how the ejb: JNDI namespace that’s -used for EJB lookups and how the JNDI context (typically the -InitialContext that you see in the client code) are related. The JNDI -API provided by Java language allows "URL context factory" to be -registered in the JNDI framework (see this for details -http://docs.oracle.com/javase/jndi/tutorial/provider/url/factory.html). -Like that documentation states, the URL context factory can be used to -resolve URL strings during JNDI lookup. That’s what the ejb: prefix is -when you do a remote EJB lookup. The ejb: URL string is backed by a URL -context factory.

-
-
-

Internally, when a lookup happens for a ejb: URL string, a relevant -javax.naming.Context is created for that ejb: lookup. Let’s see some -code for better understanding:

-
-
-
-
// JNDI context "A"
-Context jndiCtx = new InitialContext(props);
-// Now let's lookup a EJB
-MyBean bean = jndiCtx.lookup("ejb:app/module/distinct/bean!interface");
-
-
-
-

So we first create a JNDI context and then use it to lookup an EJB. The -bean lookup using the ejb: JNDI name, although, is just one statement, -involves a few more things under the hood. What’s actually happening -when you lookup that string is that a separate javax.naming.Context gets -created for the ejb: URL string. This new javax.naming.Context is then -used to lookup the rest of the string in that JNDI name.

-
-
-

Let’s break up that one line into multiple statements to understand -better:

-
-
-
-
// Remember, the ejb: is backed by a URL context factory which returns a Context for the ejb: URL (that's why it's called a context factory)
-final Context ejbNamingContext = (Context) jndiCtx.lookup("ejb:");
-// Use the returned EJB naming context to lookup the rest of the JNDI string for EJB
-final MyBean bean = ejbNamingContext.lookup("app/module/distinct/bean!interface");
-
-
-
-

As you see above, we split up that single statement into a couple of -statements for explaining the details better. So as you can see when the -ejb: URL string is parsed in a JNDI name, it gets hold of a -javax.naming.Context instance. This instance is different from the one -which was used to do the lookup (jndiCtx in this example). This is an -important detail to understand (for reasons explained later). Now this -returned instance is used to lookup the rest of the JNDI string -("app/module/distinct/bean!interface"), which then returns the EJB -proxy. Irrespective of whether the lookup is done in a single statement -or multiple parts, the code works the same. i.e. an instance of -javax.naming.Context gets created for the ejb: URL string.

-
-
-

So why am I explaining all this when the section is titled -"How to close scoped EJB client contexts"? The reason is because -client applications dealing with scoped EJB client contexts which are -associated with a JNDI context would expect the following code to close -the associated EJB client context, but will be surprised that it won’t:

-
-
-
-
final Properties props = new Properties();
-// mark it for scoped EJB client context
-props.put("org.jboss.ejb.client.scoped.context","true");
-// add other properties
-props.put(....);
-...
-Context jndiCtx = new InitialContext(props);
-try {
-      final MyBean bean = jndiCtx.lookup("ejb:app/module/distinct/bean!interface");
-      bean.doSomething();
-} finally {
-  jndiCtx.close();
-}
-
-
-
-

Applications expect that the call to jndiCtx.close() will effectively -close the EJB client context associated with the JNDI context. That -doesn’t happen because as explained previously, the javax.naming.Context -backing the ejb: URL string is a different instance than the one the -code is closing. The JNDI implementation in Java, only just closes the -context on which the close was called. As a result, the other -javax.naming.Context that backs the ejb: URL string is still not closed, -which effectively means that the scoped EJB client context is not closed -too which then ultimately means that the connection to the server(s) in -the EJB client context are not closed too.

-
-
-

So now let’s see how this can be done properly. We know that the ejb: -URL string lookup returns us a javax.naming.Context. All we have to do -is keep a reference to this instance and close it when we are done with -the EJB invocations. So here’s how it’s going to look:

-
-
-
-
final Properties props = new Properties();
-// mark it for scoped EJB client context
-props.put("org.jboss.ejb.client.scoped.context","true");
-// add other properties
-props.put(....);
-...
-Context jndiCtx = new InitialContext(props);
-Context ejbRootNamingContext = (Context) jndiCtx.lookup("ejb:");
-try {
-    final MyBean bean = ejbRootNamingContext.lookup("app/module/distinct/bean!interface"); // the rest of the EJB jndi string
-    bean.doSomething();
-} finally {
-    try {
-        // close the EJB naming JNDI context
-        ejbRootNamingContext.close();
-    } catch (Throwable t) {
-        // log and ignore
-    }
-    try {
-        // also close our other JNDI context since we are done with it too
-        jndiCtx.close();
-    } catch (Throwable t) {
-        // log and ignore
-    }
- 
-}
-
-
-
-

As you see, we changed the code to first do a lookup on just the "ejb:" -string to get hold of the EJB naming context and then used that -ejbRootNamingContext instance to lookup the rest of the EJB JNDI name to -get hold of the EJB proxy. Then when it was time to close the context, -we closed the ejbRootNamingContext (as well as the other JNDI context). -Closing the ejbRootNamingContext ensures that the scoped EJB client -context associated with that JNDI context is closed too. Effectively, -this closes the connection(s) to the server(s) within that EJB client -context.

-
-
-
Can that code be simplified a bit?
-
-

If you are using that JNDI context only for EJB invocations, then yes -you can get rid of some instances and code from the above code. You can -change that code to:

-
-
-
-
final Properties props = new Properties();
-// mark it for scoped EJB client context
-props.put("org.jboss.ejb.client.scoped.context","true");
-// add other properties
-props.put(....);
-...
-Context ejbRootNamingContext = (Context) new InitialContext(props).lookup("ejb:");
-try {
-    final MyBean bean = ejbRootNamingContext.lookup("app/module/distinct/bean!interface"); // the rest of the EJB jndi string
-    bean.doSomething();
-} finally {
-    try {
-        // close the EJB naming JNDI context
-        ejbRootNamingContext.close();
-    } catch (Throwable t) {
-        // log and ignore
-    }
-}
-
-
-
-

Notice that we no longer hold a reference to 2 JNDI contexts and instead -just keep track of the ejbRootNamingContext which is actually the root -JNDI context for our "ejb:" URL string. Of course, this means that you -can only use this context for EJB lookups or any other EJB related JNDI -lookups. So it depends on your application and how it’s coded.

-
-
-
-
-

18.3.3. Can’t the scoped EJB client context be automatically closed by the

-
-

EJB client API when the JNDI context is no longer in scope (i.e. on GC)?

-
-
-

That’s one of the common questions that gets asked. No, the EJB client -API can’t take that decision. i.e. it cannot automatically go ahead and -close the scoped EJB client context by itself when the associated JNDI -context is eligible for GC. The reason is simple as illustrated by the -following code:

-
-
-
-
void doEJBInvocation() {
-    final MyBean bean = lookupEJB();
-    bean.doSomething();
-    bean.doSomeOtherThing();
-    ... // do some other work
-    bean.keepDoingSomething();
-}
- 
-MyBean lookupEJB() {
-    final Properties props = new Properties();
-    // mark it for scoped EJB client context
-    props.put("org.jboss.ejb.client.scoped.context","true");
-    // add other properties
-    props.put(....);
-    ...
-    Context ejbRootNamingContext = (Context) new InitialContext(props).lookup("ejb:");
-    final MyBean bean = ejbRootNamingContext.lookup("app/module/distinct/bean!interface"); // rest of the EJB jndi string
-    return bean;
-}
-
-
-
-

As you can see, the doEJBInvocation() method first calls a lookupEJB() -method which does a lookup of the bean using a JNDI context and then -returns the bean (proxy). The doEJBInvocation() then uses that returned -proxy and keeps doing the invocations on the bean. As you might have -noticed, the JNDI context that was used for lookup (i.e. the -ejbRootNamingContext) is eligible for GC. If the EJB client API had -closed the scoped EJB client context associated with that JNDI context, -when that JNDI context was garbage collected, then the subsequent EJB -invocations on the returned EJB (proxy) would start failing in -doEJBInvocation() since the EJB client context is no longer available.

-
-
-

That’s the reason why the EJB client API doesn’t automatically close the -EJB client context.

-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-
-

19. EJB invocations from a remote client using JNDI

-
-
-

This chapter explains how to invoke EJBs from a remote client by using -the JNDI API to first lookup the bean proxy and then invoke on that -proxy.

-
-
- - - - - -
- - -After you have read this article, do remember to take a look at -Remote -EJB invocations via JNDI - EJB client API or remote-naming project -
-
-
-

Before getting into the details, we would like the users to know that we -have introduced a new EJB client API, which is a WildFly-specific API -and allows invocation on remote EJBs. This client API isn’t based on -JNDI. So remote clients need not rely on JNDI API to invoke on EJBs. A -separate document covering the EJB remote client API will be made -available. For now, you can refer to the javadocs of the EJB client -project at http://docs.jboss.org/ejbclient/. In this document, we’ll -just concentrate on the traditional JNDI based invocation on EJBs. So -let’s get started:

-
-
-

19.1. Deploying your EJBs on the server side:

-
- - - - - -
- - -Users who already have EJBs deployed on the server side can just skip to -the next section. -
-
-
-

As a first step, you’ll have to deploy your application containing the -EJBs on the WildFly server. If you want those EJBs to be remotely -invocable, then you’ll have to expose at least one remote view for that -bean. In this example, let’s consider a simple Calculator stateless bean -which exposes a RemoteCalculator remote business interface. We’ll also -have a simple stateful CounterBean which exposes a RemoteCounter remote -business interface. Here’s the code:

-
-
-
-
package org.jboss.as.quickstarts.ejb.remote.stateless;
- 
-/**
- * @author Jaikiran Pai
- */
-public interface RemoteCalculator {
- 
-    int add(int a, int b);
- 
-    int subtract(int a, int b);
-}
-
-
-
-
-
package org.jboss.as.quickstarts.ejb.remote.stateless;
- 
-import jakarta.ejb.Remote;
-import jakarta.ejb.Stateless;
- 
-/**
- * @author Jaikiran Pai
- */
-@Stateless
-@Remote(RemoteCalculator.class)
-public class CalculatorBean implements RemoteCalculator {
- 
-    @Override
-    public int add(int a, int b) {
-        return a + b;
-    }
- 
-    @Override
-    public int subtract(int a, int b) {
-        return a - b;
-    }
-}
-
-
-
-
-
package org.jboss.as.quickstarts.ejb.remote.stateful;
- 
-/**
- * @author Jaikiran Pai
- */
-public interface RemoteCounter {
- 
-    void increment();
- 
-    void decrement();
- 
-    int getCount();
-}
-
-
-
-
-
package org.jboss.as.quickstarts.ejb.remote.stateful;
- 
-import jakarta.ejb.Remote;
-import jakarta.ejb.Stateful;
- 
-/**
- * @author Jaikiran Pai
- */
-@Stateful
-@Remote(RemoteCounter.class)
-public class CounterBean implements RemoteCounter {
- 
-    private int count = 0;
- 
-    @Override
-    public void increment() {
-        this.count++;
-    }
- 
-    @Override
-    public void decrement() {
-        this.count--;
-    }
- 
-    @Override
-    public int getCount() {
-        return this.count;
-    }
-}
-
-
-
-

Let’s package this in a jar (how you package it in a jar is out of scope -of this chapter) named "jboss-as-ejb-remote-app.jar" and deploy it to -the server. Make sure that your deployment has been processed -successfully and there aren’t any errors.

-
-
-
-

19.2. Writing a remote client application for accessing and invoking the

-
-

EJBs deployed on the server

-
-
-

The next step is to write an application which will invoke the EJBs that -you deployed on the server. In WildFly, you can either choose to use the -WildFly specific EJB client API to do the invocation or use JNDI to -lookup a proxy for your bean and invoke on that returned proxy. In this -chapter we will concentrate on the JNDI lookup and invocation and will -leave the EJB client API for a separate chapter.

-
-
-

So let’s take a look at what the client code looks like for looking up -the JNDI proxy and invoking on it. Here’s the entire client code which -invokes on a stateless bean:

-
-
-
-
package org.jboss.as.quickstarts.ejb.remote.client;
- 
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import java.security.Security;
-import java.util.Hashtable;
- 
-import org.jboss.as.quickstarts.ejb.remote.stateful.CounterBean;
-import org.jboss.as.quickstarts.ejb.remote.stateful.RemoteCounter;
-import org.jboss.as.quickstarts.ejb.remote.stateless.CalculatorBean;
-import org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator;
-import org.jboss.sasl.JBossSaslProvider;
- 
-/**
- * A sample program which acts a remote client for a EJB deployed on WildFly 10 server.
- * This program shows how to lookup stateful and stateless beans via JNDI and then invoke on them
- *
- * @author Jaikiran Pai
- */
-public class RemoteEJBClient {
- 
-    public static void main(String[] args) throws Exception {
-        // Invoke a stateless bean
-        invokeStatelessBean();
- 
-        // Invoke a stateful bean
-        invokeStatefulBean();
-    }
- 
-    /**
-     * Looks up a stateless bean and invokes on it
-     *
-     * @throws NamingException
-     */
-    private static void invokeStatelessBean() throws NamingException {
-        // Let's lookup the remote stateless calculator
-        final RemoteCalculator statelessRemoteCalculator = lookupRemoteStatelessCalculator();
-        System.out.println("Obtained a remote stateless calculator for invocation");
-        // invoke on the remote calculator
-        int a = 204;
-        int b = 340;
-        System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server");
-        int sum = statelessRemoteCalculator.add(a, b);
-        System.out.println("Remote calculator returned sum = " + sum);
-        if (sum != a + b) {
-            throw new RuntimeException("Remote stateless calculator returned an incorrect sum " + sum + " ,expected sum was " + (a + b));
-        }
-        // try one more invocation, this time for subtraction
-        int num1 = 3434;
-        int num2 = 2332;
-        System.out.println("Subtracting " + num2 + " from " + num1 + " via the remote stateless calculator deployed on the server");
-        int difference = statelessRemoteCalculator.subtract(num1, num2);
-        System.out.println("Remote calculator returned difference = " + difference);
-        if (difference != num1 - num2) {
-            throw new RuntimeException("Remote stateless calculator returned an incorrect difference " + difference + " ,expected difference was " + (num1 - num2));
-        }
-    }
- 
-    /**
-     * Looks up a stateful bean and invokes on it
-     *
-     * @throws NamingException
-     */
-    private static void invokeStatefulBean() throws NamingException {
-        // Let's lookup the remote stateful counter
-        final RemoteCounter statefulRemoteCounter = lookupRemoteStatefulCounter();
-        System.out.println("Obtained a remote stateful counter for invocation");
-        // invoke on the remote counter bean
-        final int NUM_TIMES = 20;
-        System.out.println("Counter will now be incremented " + NUM_TIMES + " times");
-        for (int i = 0; i < NUM_TIMES; i++) {
-            System.out.println("Incrementing counter");
-            statefulRemoteCounter.increment();
-            System.out.println("Count after increment is " + statefulRemoteCounter.getCount());
-        }
-        // now decrementing
-        System.out.println("Counter will now be decremented " + NUM_TIMES + " times");
-        for (int i = NUM_TIMES; i > 0; i--) {
-            System.out.println("Decrementing counter");
-            statefulRemoteCounter.decrement();
-            System.out.println("Count after decrement is " + statefulRemoteCounter.getCount());
-        }
-    }
- 
-    /**
-     * Looks up and returns the proxy to remote stateless calculator bean
-     *
-     * @return
-     * @throws NamingException
-     */
-    private static RemoteCalculator lookupRemoteStatelessCalculator() throws NamingException {
-        final Hashtable jndiProperties = new Hashtable();
-        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
-        final Context context = new InitialContext(jndiProperties);
-        // The app name is the application name of the deployed EJBs. This is typically the ear name
-        // without the .ear suffix. However, the application name could be overridden in the application.xml of the
-        // EJB deployment on the server.
-        // Since we haven't deployed the application as a .ear, the app name for us will be an empty string
-        final String appName = "";
-        // This is the module name of the deployed EJBs on the server. This is typically the jar name of the
-        // EJB deployment, without the .jar suffix, but can be overridden via the ejb-jar.xml
-        // In this example, we have deployed the EJBs in a jboss-as-ejb-remote-app.jar, so the module name is
-        // jboss-as-ejb-remote-app
-        final String moduleName = "jboss-as-ejb-remote-app";
-        // AS7 allows each deployment to have an (optional) distinct name. We haven't specified a distinct name for
-        // our EJB deployment, so this is an empty string
-        final String distinctName = "";
-        // The EJB name which by default is the simple class name of the bean implementation class
-        final String beanName = CalculatorBean.class.getSimpleName();
-        // the remote view fully qualified class name
-        final String viewClassName = RemoteCalculator.class.getName();
-        // let's do the lookup
-        return (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
-    }
- 
-    /**
-     * Looks up and returns the proxy to remote stateful counter bean
-     *
-     * @return
-     * @throws NamingException
-     */
-    private static RemoteCounter lookupRemoteStatefulCounter() throws NamingException {
-        final Hashtable jndiProperties = new Hashtable();
-        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
-        final Context context = new InitialContext(jndiProperties);
-        // The app name is the application name of the deployed EJBs. This is typically the ear name
-        // without the .ear suffix. However, the application name could be overridden in the application.xml of the
-        // EJB deployment on the server.
-        // Since we haven't deployed the application as a .ear, the app name for us will be an empty string
-        final String appName = "";
-        // This is the module name of the deployed EJBs on the server. This is typically the jar name of the
-        // EJB deployment, without the .jar suffix, but can be overridden via the ejb-jar.xml
-        // In this example, we have deployed the EJBs in a jboss-as-ejb-remote-app.jar, so the module name is
-        // jboss-as-ejb-remote-app
-        final String moduleName = "jboss-as-ejb-remote-app";
-        // AS7 allows each deployment to have an (optional) distinct name. We haven't specified a distinct name for
-        // our EJB deployment, so this is an empty string
-        final String distinctName = "";
-        // The EJB name which by default is the simple class name of the bean implementation class
-        final String beanName = CounterBean.class.getSimpleName();
-        // the remote view fully qualified class name
-        final String viewClassName = RemoteCounter.class.getName();
-        // let's do the lookup (notice the ?stateful string as the last part of the jndi name for stateful bean lookup)
-        return (RemoteCounter) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful");
-    }
-}
-
-
-
- - - - - -
- - -The entire server side and client side code is hosted at the github repo -here -ejb-remote -
-
-
-

The code has some comments which will help you understand each of those -lines. But we’ll explain here in more detail what the code does. As a -first step in the client code, we’ll do a lookup of the EJB using a JNDI -name. In AS7, for remote access to EJBs, you use the ejb: namespace with -the following syntax:

-
-
-

For stateless beans:

-
-
-
-
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
-
-
-
-

For stateful beans:

-
-
-
-
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
-
-
-
-

The ejb: namespace identifies it as a EJB lookup and is a constant (i.e. -doesn’t change) for doing EJB lookups. The rest of the parts in the jndi -name are as follows:

-
-
-

app-name : This is the name of the .ear (without the .ear suffix) that -you have deployed on the server and contains your EJBs.

-
-
-
    -
  • -

    Jakarta EE allows you to override the application name, to a name of -your choice by setting it in the application.xml. If the deployment uses -uses such an override then the app-name used in the JNDI name should -match that name.

    -
  • -
  • -

    EJBs can also be deployed in a .war or a plain .jar (like we did in -step 1). In such cases where the deployment isn’t an .ear file, then the -app-name must be an empty string, while doing the lookup.

    -
  • -
-
-
-

module-name : This is the name of the .jar (without the .jar suffix) -that you have deployed on the server and the contains your EJBs. If the -EJBs are deployed in a .war then the module name is the .war name -(without the .war suffix).

-
-
-
    -
  • -

    Jakarta EE allows you to override the module name, by setting it in the -ejb-jar.xml/web.xml of your deployment. If the deployment uses such an -override then the module-name used in the JNDI name should match that -name.

    -
  • -
  • -

    Module name part cannot be an empty string in the JNDI name

    -
  • -
-
-
-

distinct-name : This is a WildFly-specific name which can be -optionally assigned to the deployments that are deployed on the server. -More about the purpose and usage of this will be explained in a separate -chapter. If a deployment doesn’t use distinct-name then, use an empty -string in the JNDI name, for distinct-name

-
-
-

bean-name : This is the name of the bean for which you are doing the -lookup. The bean name is typically the unqualified classname of the bean -implementation class, but can be overriden through either ejb-jar.xml or -via annotations. The bean name part cannot be an empty string in the -JNDI name.

-
-
-

fully-qualified-classname-of-the-remote-interface : This is the fully -qualified class name of the interface for which you are doing the -lookup. The interface should be one of the remote interfaces exposed by -the bean on the server. The fully qualified class name part cannot be an -empty string in the JNDI name.

-
-
-

For stateful beans, the JNDI name expects an additional "?stateful" to -be appended after the fully qualified interface name part. This is -because for stateful beans, a new session gets created on JNDI lookup -and the EJB client API implementation doesn’t contact the server during -the JNDI lookup to know what kind of a bean the JNDI name represents -(we’ll come to this in a while). So the JNDI name itself is expected to -indicate that the client is looking up a stateful bean, so that an -appropriate session can be created.

-
-
-

Now that we know the syntax, let’s see our code and check what JNDI name -it uses. Since our stateless EJB named CalculatorBean is deployed in a -jboss-as-ejb-remote-app.jar (without any ear) and since we are looking -up the org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator -remote interface, our JNDI name will be:

-
-
-
-
ejb:/jboss-as-ejb-remote-app//CalculatorBean!org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator
-
-
-
-

That’s what the lookupRemoteStatelessCalculator() method in the above -client code uses.

-
-
-

For the stateful EJB named CounterBean which is deployed in hte same -jboss-as-ejb-remote-app.jar and which exposes the -org.jboss.as.quickstarts.ejb.remote.stateful.RemoteCounter, the JNDI -name will be:

-
-
-
-
ejb:/jboss-as-ejb-remote-app//CounterBean!org.jboss.as.quickstarts.ejb.remote.stateful.RemoteCounter?stateful
-
-
-
-

That’s what the lookupRemoteStatefulCounter() method in the above client -code uses.

-
-
-

Now that we know of the JNDI name, let’s take a look at the following -piece of code in the lookupRemoteStatelessCalculator():

-
-
-
-
final Hashtable jndiProperties = new Hashtable();
-jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
-final Context context = new InitialContext(jndiProperties);
-
-
-
-

Here we are creating a JNDI InitialContext object by passing it some -JNDI properties. The Context.URL_PKG_PREFIXES is set to -org.jboss.ejb.client.naming. This is necessary because we should let the -JNDI API know what handles the ejb: namespace that we use in our JNDI -names for lookup. The "org.jboss.ejb.client.naming" has a -URLContextFactory implementation which will be used by the JNDI APIs to -parse and return an object for ejb: namespace lookups. You can either -pass these properties to the constructor of the InitialContext class or -have a jndi.properites file in the classpath of the client application, -which (atleast) contains the following property:

-
-
-
-
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming
-
-
-
-

So at this point, we have setup the InitialContext and also have the -JNDI name ready to do the lookup. You can now do the lookup and the -appropriate proxy which will be castable to the remote interface that -you used as the fully qualified class name in the JNDI name, will be -returned. Some of you might be wondering, how the JNDI implementation -knew which server address to look, for your deployed EJBs. The answer is -in AS7, the proxies returned via JNDI name lookup for ejb: namespace do -not connect to the server unless an invocation on those proxies is done.

-
-
-

Now let’s get to the point where we invoke on this returned proxy:

-
-
-
-
// Let's lookup the remote stateless calculator
-        final RemoteCalculator statelessRemoteCalculator = lookupRemoteStatelessCalculator();
-        System.out.println("Obtained a remote stateless calculator for invocation");
-        // invoke on the remote calculator
-        int a = 204;
-        int b = 340;
-        System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server");
-        int sum = statelessRemoteCalculator.add(a, b);
-
-
-
-

We can see here that the proxy returned after the lookup is used to -invoke the add(…​) method of the bean. It’s at this point that the JNDI -implementation (which is backed by the EJB client API) needs to know the -server details. So let’s now get to the important part of setting up the -EJB client context properties.

-
-
-
-

19.3. Setting up EJB client context properties

-
-

A EJB client context is a context which contains contextual information -for carrying out remote invocations on EJBs. This is a WildFly-specific -API. The EJB client context can be associated with multiple EJB -receivers. Each EJB receiver is capable of handling invocations on -different EJBs. For example, an EJB receiver "Foo" might be able to -handle invocation on a bean identified by -app-A/module-A/distinctinctName-A/Bar!RemoteBar, whereas a EJB receiver -named "Blah" might be able to handle invocation on a bean identified by -app-B/module-B/distinctName-B/BeanB!RemoteBean. Each such EJB receiver -knows about what set of EJBs it can handle and each of the EJB receiver -knows which server target to use for handling the invocations on the -bean. For example, if you have a AS7 server at 10.20.30.40 IP address -which has its remoting port opened at 4447 and if that’s the server on -which you deployed that CalculatorBean, then you can setup a EJB -receiver which knows its target address is 10.20.30.40:4447. Such an EJB -receiver will be capable enough to communicate to the server via the -JBoss specific EJB remote client protocol (details of which will be -explained in-depth in a separate chapter).

-
-
-

Now that we know what a EJB client context is and what a EJB receiver -is, let’s see how we can setup a client context with 1 EJB receiver -which can connect to 10.20.30.40 IP address at port 4447. That EJB -client context will then be used (internally) by the JNDI implementation -to handle invocations on the bean proxy.

-
-
-

The client will have to place a jboss-ejb-client.properties file in the -classpath of the application. The jboss-ejb-client.properties can -contain the following properties:

-
-
-
-
endpoint.name=client-endpoint
-remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
- 
-remote.connections=default
- 
-remote.connection.default.host=10.20.30.40
-remote.connection.default.port = 8080
-remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
- 
-remote.connection.default.username=appuser
-remote.connection.default.password=apppassword
-
-
-
- - - - - -
- - -This file includes a reference to a default password. Be sure to change -this as soon as possible. -
-
-
- - - - - -
- - -We’ll see what each of it means. -
-
-
-

First the endpoint.name property. We mentioned earlier that the EJB -receivers will communicate with the server for EJB invocations. -Internally, they use JBoss Remoting project to carry out the -communication. The endpoint.name property represents the name that will -be used to create the client side of the enpdoint. The endpoint.name -property is optional and if not specified in the -jboss-ejb-client.properties file, it will default to -"config-based-ejb-client-endpoint" name.

-
-
-

Next is the remote.connectionprovider.create.options.<…​.> properties:

-
-
-
-
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
-
-
-
-

The "remote.connectionprovider.create.options." property prefix can be -used to pass the options that will be used while create the connection -provider which will handle the "remote:" protocol. In this example we -use the "remote.connectionprovider.create.options." property prefix to -pass the "org.xnio.Options.SSL_ENABLED" property value as false. That -property will then be used during the connection provider creation. -Similarly other properties can be passed too, just append it to the -"remote.connectionprovider.create.options." prefix

-
-
-

Next we’ll see:

-
-
-
-
remote.connections=default
-
-
-
-

This is where you define the connections that you want to setup for -communication with the remote server. The "remote.connections" property -uses a comma separated value of connection "names". The connection names -are just logical and are used grouping together the connection -configuration properties later on in the properties file. The example -above sets up a single remote connection named "default". There can be -more than one connections that are configured. For example:

-
-
-
-
remote.connections=one, two
-
-
-
-

Here we are listing 2 connections named "one" and "two". Ultimately, -each of the connections will map to a EJB receiver. So if you have 2 -connections, that will setup 2 EJB receivers that will be added to the -EJB client context. Each of these connections will be configured with -the connection specific properties as follows:

-
-
-
-
remote.connection.default.host=10.20.30.40
-remote.connection.default.port = 8080
-remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
-
-
-
-

As you can see we are using the "remote.connection.<connection-name>." -prefix for specifying the connection specific property. The connection -name here is "default" and we are setting the "host" property of that -connection to point to 10.20.30.40. Similarly we set the "port" for that -connection to 4447.

-
-
-

By default WildFly uses 8080 as the remoting port. The EJB client API -uses the http port, with the http-upgrade functionality, for -communicating with the server for remote invocations, so that’s the port -we use in our client programs (unless the server is configured for some -other http port)

-
-
-
-
remote.connection.default.username=appuser
-remote.connection.default.password=apppassword
-
-
-
-

The given user/password must be set by using the command bin/add-user.sh -(or.bat).
-The user and password must be set because the security-realm is enabled -for the subsystem remoting (see standalone*.xml or domain.xml) by -default.
-If you do not need the security for remoting you might remove the -attribute security-realm in the configuration.

-
-
-

security-realm is enabled by default.

-
-
- - - - - -
- - -We then use the "remote.connection.<connection-name>.connect.options." -property prefix to setup options that will be used during the connection -creation. -
-
-
-

Here’s an example of setting up multiple connections with different -properties for each of those:

-
-
-
-
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
- 
-remote.connections=one, two
- 
-remote.connection.one.host=localhost
-remote.connection.one.port=6999
-remote.connection.one.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
- 
-remote.connection.two.host=localhost
-remote.connection.two.port=7999
-remote.connection.two.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
-
-
-
-

As you can see we setup 2 connections "one" and "two" which both point -to "localhost" as the "host" but different ports. Each of these -connections will internally be used to create the EJB receivers in the -EJB client context.

-
-
-

So that’s how the jboss-ejb-client.properties file can be setup and -placed in the classpath.

-
-
-
-
-

The EJB client code will by default look for jboss-ejb-client.properties -in the classpath. However, you can specify a different file of your -choice by setting the "jboss.ejb.client.properties.file.path" system -property which points to a properties file on your filesystem, -containing the client context configurations. An example for that would -be -"-Djboss.ejb.client.properties.file.path=/home/me/my-client/custom-jboss-ejb-client.properties"

-
-
-
-
-

A jboss-client jar is shipped in the distribution. It’s available at -WILDFLY_HOME/bin/client/jboss-client.jar. Place this jar in the -classpath of your client application.

-
-
-

If you are using Maven to build the client application, then please -follow the instructions in the WILDFLY_HOME/bin/client/README.txt to add -this jar as a Maven dependency.

-
-
-
-

Summary

-
-

In the above examples, we saw what it takes to invoke a EJB from a -remote client. To summarize:

-
-
-
    -
  • -

    On the server side you need to deploy EJBs which expose the remote -views.

    -
  • -
  • -

    On the client side you need a client program which:

    -
    -
      -
    • -

      Has a jboss-ejb-client.properties in its classpath to setup the -server connection information

      -
    • -
    • -

      Either has a jndi.properties to specify the -java.naming.factory.url.pkgs property or passes that as a property to -the InitialContext constructor

      -
    • -
    • -

      Setup the client classpath to include the jboss-client jar that’s -required for remote invocation of the EJBs. The location of the jar is -mentioned above. You’ll also need to have your application’s bean -interface jars and other jars that are required by your application, in -the client classpath

      -
    • -
    -
    -
  • -
-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-

20. EJB invocations from a remote server instance

-
-
-

The purpose of this chapter is to demonstrate how to lookup and invoke -on EJBs deployed on an WildFly server instance from another WildFly -server instance. This is different from invoking the EJBs -from -a remote standalone client

-
-
-

Let’s call the server, from which the invocation happens to the EJB, as -"Client Server" and the server on which the bean is deployed as the -"Destination Server".

-
-
- - - - - -
- - -Note that this chapter deals with the case where the bean is deployed on -the "Destination Server" but not on the "Client Server". -
-
-
-

20.1. Application packaging

-
-

In this example, we’ll consider a EJB which is packaged in a myejb.jar -which is within a myapp.ear. Here’s how it would look like:

-
-
-
-
myapp.ear
-|
-|---- myejb.jar
-|        |
-|        |---- <org.myapp.ejb.*> // EJB classes
-
-
-
- - - - - -
- - -Note that packaging itself isn’t really important in the context of this -article. You can deploy the EJBs in any standard way (.ear, .war or -.jar). -
-
-
-
-

20.2. Beans

-
-

In our example, we’ll consider a simple stateless session bean which is -as follows:

-
-
-
-
package org.myapp.ejb;
- 
-public interface Greeter {
-    
-    String greet(String user);
-}
-
-
-
-
-
package org.myapp.ejb;
- 
-import jakarta.ejb.Remote;
-import jakarta.ejb.Stateless;
- 
-@Stateless
-@Remote (Greeter.class)
-public class GreeterBean implements Greeter {
- 
-    @Override
-    public String greet(String user) {
-        return "Hello " + user + ", have a pleasant day!";
-    }
-}
-
-
-
-
-

20.3. Security

-
-

WildFly 29 is secure by default. What this means is that no communication -can happen with an WildFly instance from a remote client (irrespective -of whether it is a standalone client or another server instance) without -passing the appropriate credentials. Remember that in this example, our -"client server" will be communicating with the "destination server". So -in order to allow this communication to happen successfully, we’ll have -to configure user credentials which we will be using during this -communication. So let’s start with the necessary configurations for -this.

-
-
-
-

20.4. Configuring a user on the "Destination Server"

-
-

As a first step we’ll configure a user on the destination server who -will be allowed to access the destination server. We create the user -using the add-user script that’s available in the JBOSS_HOME/bin -folder. In this example, we’ll be configuring a Application User named -ejb and with a password test in the ApplicationRealm. Running the -add-user script is an interactive process and you will see -questions/output as follows:

-
-
-
add-user
-
-
jpai@jpai-laptop:bin$ ./add-user.sh
- 
-What type of user do you wish to add?
-&nbsp;a) Management User (mgmt-users.properties)
-&nbsp;b) Application User (application-users.properties)
-(a): b
- 
-Enter the details of the new user to add.
-Realm (ApplicationRealm) :
-Username : ejb
-Password :
-Re-enter Password :
-What roles do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)\[&nbsp; \]:
-About to add user 'ejb' for realm 'ApplicationRealm'
-Is this correct yes/no? yes
-Added user 'ejb' to file '/jboss-as-7.1.1.Final/standalone/configuration/application-users.properties'
-Added user 'ejb' to file '/jboss-as-7.1.1.Final/domain/configuration/application-users.properties'
-Added user 'ejb' with roles to file '/jboss-as-7.1.1.Final/standalone/configuration/application-roles.properties'
-Added user 'ejb' with roles to file '/jboss-as-7.1.1.Final/domain/configuration/application-roles.properties'
-
-
-
-

As you can see in the output above we have now configured a user on the -destination server who’ll be allowed to access this server. We’ll use -this user credentials later on in the client server for communicating -with this server. The important bits to remember are the user we have -created in this example is ejb and the password is test.

-
-
- - - - - -
- - -Note that you can use any username and password combination you want to. -
-
-
- - - - - -
- - -You do not require the server to be started to add a user using the -add-user script. -
-
-
-
-

20.5. Start the "Destination Server"

-
-

As a next step towards running this example, we’ll start the -"Destination Server". In this example, we’ll use the standalone server -and use the standalone-full.xml configuration. The startup command -will look like:

-
-
-
-
./standalone.sh -server-config=standalone-full.xml
-
-
-
-

Ensure that the server has started without any errors.

-
-
- - - - - -
- - -It’s very important to note that if you are starting both the server -instances on the same machine, then each of those server instances -must have a unique jboss.node.name system property. You can do that -by passing an appropriate value for -Djboss.node.name system property -to the startup script: -
-
-
-
-
./standalone.sh -server-config=standalone-full.xml -Djboss.node.name=<add appropriate value here>
-
-
-
-
-

20.6. Deploying the application

-
-

The application ( myapp.ear in our case) will be deployed to -"Destination Server". The process of deploying the application is out of -scope of this chapter. You can either use the Command Line Interface or -the Admin console or any IDE or manually copy it to -JBOSS_HOME/standalone/deployments folder (for standalone server). Just -ensure that the application has been deployed successfully.

-
-
-

So far, we have built a EJB application and deployed it on the -"Destination Server". Now let’s move to the "Client Server" which acts -as the client for the deployed EJBs on the "Destination Server".

-
-
-
-

20.7. Configuring the "Client Server" to point to the EJB remoting connector

-
-

on the "Destination Server"

-
-
-

As a first step on the "Client Server", we need to let the server know -about the "Destination Server"'s EJB remoting connector, over which it -can communicate during the EJB invocations. To do that, we’ll have to -add a " remote-outbound-connection" to the remoting subsystem on the -"Client Server". The " remote-outbound-connection" configuration -indicates that a outbound connection will be created to a remote server -instance from that server. The " remote-outbound-connection" will be -backed by a " outbound-socket-binding" which will point to a remote -host and a remote port (of the "Destination Server"). So let’s see how -we create these configurations.

-
-
-
-

20.8. Start the "Client Server"

-
-

In this example, we’ll start the "Client Server" on the same machine as -the "Destination Server". We have copied the entire server installation -to a different folder and while starting the "Client Server" we’ll use a -port-offset (of 100 in this example) to avoid port conflicts:

-
-
-
-
./standalone.sh -server-config=standalone-full.xml -Djboss.socket.binding.port-offset=100
-
-
-
-
-

20.9. Creating an Authentication Context on the Client Server

-
-

The following CLI operations will create a configured authentication context.

-
-
-
-
/subsystem=elytron/authentication-configuration=ejb-user:add(authentication-name=ejb, credential-reference={clear-text=test})
-/subsystem=elytron/authentication-context=ejb-context:add(match-rules=[{authentication-configuration=ejb-user}])
-
-
-
-

Upon successful invocation of this command, the following configuration -will be created in the elytron subsystem:

-
-
-
standalone-full.xml
-
-
<authentication-client>
-    <authentication-configuration name="ejb-user" authentication-name="ejb">
-        <credential-reference clear-text="test"/>
-    </authentication-configuration>
-    <authentication-context name="ejb-context">
-        <match-rule authentication-configuration="ejb-user"/>
-    </authentication-context>
-</authentication-client>
-
-
-
-
-

20.10. Create a outbound-socket-binding on the "Client Server"

-
-

Let’s first create a outbound-socket-binding which points the -"Destination Server"'s host and port. We’ll use the CLI to create this -configuration:

-
-
-
-
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-ejb:add(host=localhost, port=8080)
-
-
-
-

The above command will create a outbound-socket-binding named " -remote-ejb" (we can name it anything) which points to "localhost" as -the host and port 8080 as the destination port. Note that the host -information should match the host/IP of the "Destination Server" (in -this example we are running on the same machine so we use "localhost") -and the port information should match the http-remoting connector port -used by the EJB subsystem (by default it’s 8080). When this command is -run successfully, we’ll see that the standalone-full.xml (the file which -we used to start the server) was updated with the following -outbound-socket-binding in the socket-binding-group:

-
-
-
-
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
-        ...
-        <outbound-socket-binding name="remote-ejb">
-            <remote-destination host="localhost" port="8080"/>
-        </outbound-socket-binding>
-    </socket-binding-group>
-
-
-
-
-

20.11. Create a "remote-outbound-connection" which uses this newly created

-
-

"outbound-socket-binding"

-
-
-

Now let’s create a " remote-outbound-connection" which will use the -newly created outbound-socket-binding (pointing to the EJB remoting -connector of the "Destination Server"). We’ll continue to use the CLI to -create this configuration:

-
-
-
-
/subsystem=remoting/remote-outbound-connection=remote-ejb-connection:add(outbound-socket-binding-ref=remote-ejb, authentication-context=ejb-context)
-
-
-
-

The above command creates a remote-outbound-connection, named " -remote-ejb-connection" (we can name it anything), in the remoting -subsystem and uses the previously created " remote-ejb" -outbound-socket-binding (notice the outbound-socket-binding-ref in that -command) with the http-remoting protocol. Furthermore, we also set the -authentication-context attribute to point to the authentication-context that we created -in the previous step.

-
-
-

What this step does is, it creates a outbound connection, on the client -server, to the remote destination server and sets up the authentication-context which -will be used for authentication. This way when a connection has to be established -from the client server to the destination server, the connection creation logic will -have the necessary security credentials to pass along and setup a successful -secured connection.

-
-
-

Now let’s run the following two operations to set some default -connection creation options for the outbound connection:

-
-
-
-
/subsystem=remoting/remote-outbound-connection=remote-ejb-connection/property=SASL_POLICY_NOANONYMOUS:add(value=false)
-
-
-
-
-
/subsystem=remoting/remote-outbound-connection=remote-ejb-connection/property=SSL_ENABLED:add(value=false)
-
-
-
-

Ultimately, upon successful invocation of this command, the following -configuration will be created in the remoting subsystem:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:remoting:1.1">
-....
-            <outbound-connections>
-                <remote-outbound-connection name="remote-ejb-connection" outbound-socket-binding-ref="remote-ejb" authentication-context="ejb-context">
-                    <properties>
-                        <property name="SASL_POLICY_NOANONYMOUS" value="false"/>
-                        <property name="SSL_ENABLED" value="false"/>
-                    </properties>
-                </remote-outbound-connection>
-            </outbound-connections>
-        </subsystem>
-
-
-
-

From a server configuration point of view, that’s all we need on the -"Client Server". Our next step is to deploy an application on the -"Client Server" which will invoke on the bean deployed on the -"Destination Server".

-
-
-
-

20.12. Packaging the client application on the "Client Server"

-
-

Like on the "Destination Server", we’ll use .ear packaging for the -client application too. But like previously mentioned, that’s not -mandatory. You can even use a .war or .jar deployments. Here’s how our -client application packaging will look like:

-
-
-
-
client-app.ear
-|
-|--- META-INF
-|        |
-|        |--- jboss-ejb-client.xml
-|
-|--- web.war
-|        |
-|        |--- WEB-INF/classes
-|        |        |
-|        |        |---- <org.myapp.FooServlet> // classes in the web app
-
-
-
-

In the client application we’ll use a servlet which invokes on the bean -deployed on the "Destination Server". We can even invoke the bean on the -"Destination Server" from a EJB on the "Client Server". The code remains -the same (JNDI lookup, followed by invocation on the proxy). The -important part to notice in this client application is the file -jboss-ejb-client.xml which is packaged in the META-INF folder of a top -level deployment (in this case our client-app.ear). This -jboss-ejb-client.xml contains the EJB client configurations which will -be used during the EJB invocations for finding the appropriate -destinations (also known as, EJB receivers). The contents of the -jboss-ejb-client.xml are explained next.

-
-
- - - - - -
- - -If your application is deployed as a top level .war deployment, then the -jboss-ejb-client.xml is expected to be placed in .war/WEB-INF/ folder -(i.e. the same location where you place any web.xml file). -
-
-
-
-

20.13. Contents on jboss-ejb-client.xml

-
-

The jboss-ejb-client.xml will look like:

-
-
-
-
<jboss-ejb-client xmlns="urn:jboss:ejb-client:1.0">
-    <client-context>
-        <ejb-receivers>
-            <remoting-ejb-receiver outbound-connection-ref="remote-ejb-connection"/>
-        </ejb-receivers>
-    </client-context>
-</jboss-ejb-client>
-
-
-
-

You’ll notice that we have configured the EJB client context (for this -application) to use a remoting-ejb-receiver which points to our earlier -created " remote-outbound-connection" named " -remote-ejb-connection". This links the EJB client context to use the " -remote-ejb-connection" which ultimately points to the EJB remoting -connector on the "Destination Server".

-
-
-
-

20.14. Deploy the client application

-
-

Let’s deploy the client application on the "Client Server". The process -of deploying the application is out of scope, of this chapter. You can -use either the CLI or the admin console or a IDE or deploy manually to -JBOSS_HOME/standalone/deployments folder. Just ensure that the -application is deployed successfully.

-
-
-
-

20.15. Client code invoking the bean

-
-

We mentioned that we’ll be using a servlet to invoke on the bean, but -the code to invoke the bean isn’t servlet specific and can be used in -other components (like EJB) too. So let’s see how it looks like:

-
-
-
-
import javax.naming.Context;
-import java.util.Hashtable;
-import javax.naming.InitialContext;
- 
-...
-public void invokeOnBean() {
-        try {
-            final Hashtable props = new Hashtable();
-            // setup the ejb: namespace URL factory
-            props.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
-            // create the InitialContext
-            final Context context = new javax.naming.InitialContext(props);
- 
-            // Lookup the Greeter bean using the ejb: namespace syntax which is explained here https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
-            final Greeter bean = (Greeter) context.lookup("ejb:" + "myapp" + "/" + "myejb" + "/" + "" + "/" + "GreeterBean" + "!" + org.myapp.ejb.Greeter.class.getName());
- 
-   // invoke on the bean
-   final String greeting = bean.greet("Tom");
- 
-            System.out.println("Received greeting: " + greeting);
- 
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-}
-
-
-
-

That’s it! The above code will invoke on the bean deployed on the -"Destination Server" and return the result.

-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-

21. Remote Jakarta Enterprise Beans invocations via JNDI - Jakarta Enterprise Beans client API or wildfly-naming-client project

-
-
-

21.1. Purpose

-
-

WildFly provides EJB client API project as well as wildfly-naming-client project(https://github.com/wildfly/wildfly-naming-client) -for invoking on remote objects exposed via JNDI. This article explains -which approach to use when and what the differences and scope of each of -these projects is.

-
-
-
-

21.2. Overview

-
-

Now that we know that for remote client JNDI communication with WildFly -requires wildfly-naming-client project, let’s quickly see what the code -looks like.

-
-
-

21.2.1. Client code relying on jndi.properties in classpath

-
-
-
// Create an InitialContext using the javax.naming.* API
-InitialContext ctx = new InitialContext();
-Blah blah = (Blah) ctx.lookup("foo:blah");
-
-
-
-

As you can see, there’s not much here in terms of code. We first create -a InitialContext which as per the API will look for a jndi.properties in -the classpath of the application. We’ll see what our jndi.properties looks like, later. -Once the InitialContext is created, we just use it to do a lookup on a -JNDI name which we know is bound on the server side. We’ll come back to -the details of this lookup string in a while.

-
-
-

Let’s now see what the jndi.properties in our client classpath looks -like:

-
-
-
-
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory
-java.naming.provider.url=remote+http://localhost:8080
-
-
-
-

Those two properties are important for wildfly-naming-client project to be -used for communicating with the WildFly server. The first property tells -the JNDI API which initial context factory to use. In this case we are -pointing it to the WildFlyInitailContextFactory class supplied by the -wildfly-naming-client project. The other property is the PROVIDER_URL. -which is remote+http:// for wildfly-naming-client. The rest -of the PROVIDER_URL part is the server hostname or IP and the port on -which the remoting connector is exposed on the server side. By default -the http-remoting connector port in WildFly 29 is 8080. That’s what we -have used in our example. The hostname we have used is localhost but -that should point to the server IP or hostname where the server is -running.

-
-
-

So we saw how to setup the JNDI properties in the jndi.properties file. -The JNDI API also allows you to pass these properties to the constructor -of the InitialContext class (please check the javadoc of that class for -more details). Let’s quickly see what the code would look like:

-
-
-
-
Properties props = new Properties();
-props.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
-props.put(Context.PROVIDER_URL, "remote+https://localhost:8080");
-InitialContext ctx = new InitialContext(props);
-Blah blah = (Blah) ctx.lookup("foo:blah");
-
-
-
-

That’s it! You can see that the values that we pass to those properties -are the same as what we did via the jndi.properties. It’s upto the -client application to decide which approach they want to follow.

-
-
-
-

21.2.2. Using the wildfly-config.xml

-
-

The wildfly-config.xml can be used to specify a static configuration for a -standalone client to use. Below is a simple example specifying plaintext -username / password and the remote server connection (host/port). -The wildfly-config.xml goes in the META-INF directory.

-
-
-
-
<configuration>
-  <authentication-client xmlns="urn:elytron:1.0.1">
-    <authentication-rules>
-      <rule use-configuration="default"/>
-    </authentication-rules>
-    <authentication-configurations>
-      <configuration name="default">
-        <set-user-name name="ranabir"/>
-        <credentials>
-          <clear-password password="redhat1!"/>
-        </credentials>
-      </configuration>
-    </authentication-configurations>
-  </authentication-client>
-  <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
-      <connections>
-          <connection uri="remote+http://127.0.0.1:8080" />
-      </connections>
-</jboss-ejb-client>
-</configuration>
-
-
-
-

Using the wildfly-config.xml, the InitialContext creation does not specify -the host/port/user/pass since it is already defined in the wildfly-config.xml. -The EJB lookup

-
-
-
-
public static Context getInitialContext(String host, Integer port, String username, String password) throws NamingException {
-   Properties props = new Properties();
-   props.put(Context.INITIAL_CONTEXT_FACTORY,  "org.wildfly.naming.client.WildFlyInitialContextFactory");
-   return new InitialContext(props);
-}
-public void callRemoteEjb() {
-   HelloRemote remote = getInitialContext(host, port, user, pass).lookup("ejb:helloWorld/helloWorld-ejb/HelloWorldSLSB!org.jboss.examples.ejb.HelloRemote");
-      remote.helloWorld();
-}
-
-
-
-
-

21.2.3. How does wildfly naming client work

-
-

We have so far had an overview of how the client code looks like when -using the wildfly-naming-client project. Let’s now have a brief look at how the wildfly-naming-client project -internally establishes the communication with the server and allows JNDI -operations from the client side.

-
-
-

When the client code creates an InitialContext backed by the -org.wildfly.naming.client.WildFlyInitialContextFactory class, the -org.wildfly.naming.client.WildFlyInitialContextFactory internally looks -for the PROVIDER_URL (and other) properties that are applicable for that -context ( doesn’t matter whether it comes from the jndi.properties -file or whether passed explicitly to the constructor of the -InitialContext). Once it identifies the server and port to connect to, -the wildfly-naming-client project internally sets up a connection using the -remoting APIs with the remoting connector which is exposed on that -port.

-
-
-

It has also increased its support for security configurations. -Every service including the http+remote connector (which -listens by default on port 8080), is secured. -This means that when trying to do JNDI operations like a -lookup, the client has to pass appropriate user credentials. In our -examples so far we haven’t passed any username/pass or any other -credentials while creating the InitialContext. That was just to keep the -examples simple. But let’s now check and use one -of the ways how we pass the user credentials. Let’s at the moment just -assume that the remoting connector on port 8080 is accessible to a user -named " `ranabir`" whose password is expected to be " `redhat1!`".

-
-
-
-
void doLookup() {
-  Properties props = new Properties();
-  props.put(Context.INITIAL_CONTEXT_FACTORY,  "org.wildfly.naming.client.WildFlyInitialContextFactory");
-  props.put(Context.PROVIDER_URL, "remote+https://localhost:8080");
-  // provide an username
-  props.put(Context.SECURITY_PRINCIPAL, "ranabir");
-  // provide a password
-  props.put(Context.SECURITY_CREDENTIALS, "redhat1!");
-  // create a context passing these properties
-  InitialContext ctx = new InitialContext(props);
-  Blah blah = (Blah) ctx.lookup("foo:blah");
-  ...
-}
-
-
-
-

The code is similar to our previous example, except that we now have -added 2 additional properties that are passed to the InitialContext -constructor. The first is Context.SECURITY_PRINCIPAL -which passes the username (ranabir in this case) -and the second is Context.SECURITY_CREDENTIALS -which passes the password (redhat1! in this case). Of course the same -properties can be configured in the jndi.properties file (read the -javadoc of the Context class for appropriate properties to be used in -the jndi.properties) and as well as in wildfly-config.xml. -This is one way of passing the security credentials for JNDI communication with WildFly. -There are some other ways to do this too.

-
-
-

Moreover In order to manage Lookup High Availability, you can provide a list of remote servers -that will be checked for the Initial Lookup of the remote+http call. Here is the updated -PROVIDER_URL format, supposing you were to contact two servers located at localhost:8080 and localhost:8180

-
-
-
-
props.put(Context.PROVIDER_URL, "remote+http://localhost:8080,remote+http://localhost:8180");
-
-
-
-
-

21.2.4. JNDI operations allowed using wildfly-naming-client project

-
-

So far we have mainly concentrated on how the naming context is created -and what it internally does when an instance is created. Let’s now take -this one step further and see what kind of operations are allowed for a -JNDI context backed by the wildfly-naming-client project.

-
-
-

The JNDI Context has various methods that -are exposed for JNDI operations. One important thing to note in case of -wildfly-naming-client project is that, the project’s scope is to allow a client -to communicate with the JNDI backend exposed by the server. As such, the -wildfly-naming-client project does not support many of the methods that are -exposed by the javax.naming.Context class. The wildfly-naming-client project -only supports the read-only kind of methods (like the lookup() method) -and does not support any write kind of methods (like the bind() method). -The client applications are expected to use the wildfly-naming-client project -mainly for lookups of JNDI objects. Neither WildFly nor wildfly-naming-client -project allows writing/binding to the JNDI server from a remote -application.

-
-
-
-

21.2.5. Pre-requisites of remotely accessible JNDI objects

-
-

On the server side, the JNDI can contain numerous objects that are bound -to it. However, not all of those are exposed remotely. The two -conditions that are to be satisfied by the objects bound to JNDI, to be -remotely accessible are:

-
-
-

1) Such objects should be bound under the java:jboss/exported/ -namespace. For example, java:jboss/exported/foo/bar
-2) Objects bound to the java:jboss/exported/ namespace are expected to -be serializable. This allows the objects to be sent over the wire to the -remote clients

-
-
-

Both these conditions are important and are required for the objects to -be remotely accessible via JNDI.

-
-
-
-

21.2.6. JNDI lookup strings for remote clients backed by the wildfly-naming-client project

-
-

In our examples, so far, we have been consistently using " `foo/bar`" as -the JNDI name to lookup from a remote client using the wildfly-naming-client -project. There’s a bit more to understand about the JNDI name and how it -maps to the JNDI name that’s bound on the server side.

-
-
-

First of all, the JNDI names used while using the wildfly-naming-client project -are always relative to the java:jboss/exported/ namespace. So in our -examples, we are using " `foo/bar`" JNDI name for the lookup, that -actually is (internally) " `java:jboss/exported/foo/bar`". The -wildfly-naming-client project expects it to always be relative to the " -`java:jboss/exported/`" namespace. Once connected with the server side, -the wildfly-naming-client project will lookup for "foo/bar" JNDI name under the -" `java:jboss/exported/`" namespace of the server.

-
-
- - - - - -
- - -Note: Since the JNDI name that you use on the client side is always -relative to java:jboss/exported namespace, you shouldn’t be prefixing -the java:jboss/exported/ string to the JNDI name. For example, if you -use the following JNDI name: -
-
-
-

ctx.lookup("java:jboss/exported/helloworld");

-
-
-

then wildfly-naming-client will translate it to

-
-
-

ctx.lookup("java:jboss/exported/java:jboss/exported/helloworld");

-
-
-

and as a result, will fail during lookup.

-
-
-

The wildfly-naming-client implementation perhaps should be smart enough to strip -off the java:jboss/exported/ namespace prefix if supplied. But let’s not -go into that here.

-
-
-
-

21.2.7. How does wildfly-naming-client project implementation transfer the JNDI

-
-

objects to the clients

-
-
-

When a lookup is done on a JNDI string, the wildfly-naming-client implementation -internally uses the connection to the remoting connector (which it has -established based on the properties that were passed to the -InitialContext) to communicate with the server. On the server side, the -implementation then looks for the JNDI name under the -java:jboss/exported/ namespace. Assuming that the JNDI name is -available, under that namespace, the wildfly-naming-client implementation then -passes over the object bound at that address to the client. This is -where the requirement about the JNDI object being serializable comes -into picture. wildfly-naming-client project internally uses jboss-marshalling -project to marshal the JNDI object over to the client. On the client -side the wildfly-naming-client implementation then unmarshalles the object and -returns it to the client application.

-
-
-

So literally, each lookup backed by the wildfly-naming-client project entails a -server side communication/interaction and then marshalling/unmarshalling -of the object graph. This is very important to remember. We’ll come back -to this later, to see why this is important when it comes to using EJB -client API project for doing EJB lookups ( EJB -invocations from a remote client using JNDI) as against using -wildfly-naming-client project for doing the same thing.

-
-
-
-

21.2.8. Few more things

-
-

Unlike the previous jboss-remote-naming project, the connection to -the peer is not requested. Until an operation is performed on the connection, -and all consumers of the same remote URL will share a connection. -The connection lifecycle is independent of any Context instances which reference it.

-
-
-

Multiple services can be looked up via the same context. To register providers, -implement the org.wildfly.naming.client.NamingProvider interface and register the -implementation using the approach described in the java.util.ServiceLoader documentation.

-
-
- - - - - -
- - -Note: One important thing is that jndi.properties should not be packaged in an -app running in Wildfly though you can put it in a standalone java app. -The reason is, when you run in Wildfly , if you do new InitialContext() and -you have jndi.properties in your classpath, it will read those settings -and change the default configuration for the whole wildfly JVM. -
-
-
-
-
-

21.3. Summary

-
-

That pretty much covers whatever is important to know, in the -wildfly-naming-client project, for a typical client application. -This simple JNDI/naming client library abstracts away some of the -pain of JNDI by providing the following features: -Federation support, Class loader based provider extensibility, -A replacement implementation of the jboss-remote-naming protocol, -Abstract context implementations for supporting relative contexts and -federation in custom naming providers.

-
-
-

Those of you who don’t have client applications doing remote EJB -invocations, can just skip the rest of this article if you aren’t -interested in those details.

-
-
-
-

21.4. Remote EJB invocations backed by the wildfly-naming-client project

-
-

In previous sections of this article we saw that whatever is exposed in -the java:jboss/exported/ namespace is accessible remotely to the client -applications under the relative JNDI name. Some of you might already -have started thinking about exposing remote views of EJBs under that -namespace.

-
-
-

It’s important to note that WildFly server side already by default -exposes the remote views of a EJB under the java:jboss/exported/ -namespace (although it isn’t logged in the server logs). So assuming -your server side application has the following stateless bean:

-
-
-
-
package org.myapp.ejb;
-
-@Stateless
-@Remote(Foo.class)
-public class FooBean implements Foo {
-...
- public String sayBar() {
-     return "Baaaaaaaar";
- }
-}
-
-
-
-

Then the " Foo`" remote view is exposed under the -`java:jboss/exported/ namespace under the following JNDI name scheme -(which is similar to that mandated by Jakarta Enterprise Beans 3.2 spec for java:global/ -namespace)

-
-
-

app-name/module-name/bean-name!bean-interface

-
-
-

where,

-
-
-

app-name = the name of the .ear (without the .ear suffix) or the -application name configured via application.xml deployment descriptor. -If the application isn’t packaged in a .ear then there will be no -app-name part to the JNDI string.
-module-name = the name of the .jar or .war (without the .jar/.war -suffix) in which the bean is deployed or the module-name configured in -web.xml/ejb-jar.xml of the deployment. The module name is mandatory part -in the JNDI string.
-bean-name = the name of the bean which by default is the simple name -of the bean implementation class. Of course it can be overridden either -by using the "name" attribute of the bean definining annotation -(@Stateless(name="blah") in this case) or even the ejb-jar.xml -deployment descriptor.
-bean-interface = the fully qualified class name of the interface being -exposed by the bean.

-
-
-

So in our example above, let’s assume the bean is packaged in a -myejbmodule.jar which is within a myapp.ear. So the JNDI name for the -Foo remote view under the java:jboss/exported/ namespace would be:

-
-
-

java:jboss/exported/myapp/myejbmodule/FooBean!org.myapp.ejb.Foo

-
-
-

That’s where WildFly will automatically expose the remote views of the -EJBs under the java:jboss/exported/ namespace, in addition to the -java:global/ java:app/ java:module/ namespaces mandated by the EJB 3.1 -spec.

-
-
- - - - - -
- - -Note that only the java:jboss/exported/ namespace is available to remote -clients. -
-
-
-

So the next logical question would be, are these remote views of EJBs -accessible and invokable using the wildfly-naming-client project on the client -application. The answer is yes! Let’s quickly see the client code for -invoking our FooBean. Again, let’s just use " `ranabir`" and " `redhat1!`" -as username/password for connecting to the remoting connector.

-
-
-
-
void doBeanLookup() {
-  ...
-  Properties props = new Properties();
-  props.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
-  props.put(Context.PROVIDER_URL,"remote+https://localhost:8080");
-  // username
-  props.put(Context.SECURITY_PRINCIPAL, "ranabir");
-  // password
-  props.put(Context.SECURITY_CREDENTIALS, "redhat1!");
-  // This is an important property to set if you want to do EJB invocations via the wildfly-naming-client project
-  props.put("wildfly.naming.client.ejb.context", true);
-  // create a context passing these properties
-  InitialContext ctx = new InitialContext(props);
-  // lookup the bean     Foo
-  beanRemoteInterface = (Foo) ctx.lookup("myapp/myejbmodule/FooBean!org.myapp.ejb.Foo");
-  String bar = beanRemoteInterface.sayBar();
-  System.out.println("Remote Foo bean returned " + bar);
-  ctx.close();
-  // after this point the beanRemoteInterface is not longer valid!
-}
-
-
-
-

As you can see, most of the code is similar to what we have been seeing -so far for setting up a JNDI context backed by the wildfly-naming-client -project. The only parts that change are:

-
-
-

\1) An additional " `wildfly.naming.client.ejb.context`" property that is -added to the properties passed to the InitialContext constructor.
-2) The JNDI name used for the lookup
-3) And subsequently the invocation on the bean interface returned by the -lookup.

-
-
-

Let’s see what the " wildfly.naming.client.ejb.context`" does. In -WildFly, remote access/invocations on EJBs is facilitated by the JBoss -specific EJB client API, which is a project on its own -https://github.com/wildfly/jboss-ejb-client. So no matter, what -mechanism you use (wildfly-naming-client or core EJB client API), the -invocations are ultimately routed through the EJB client API project. In -this case too, the wildfly-naming-client internally uses EJB client API to -handle EJB invocations. From a EJB client API project perspective, for -successful communication with the server, the project expects a -`EJBClientContext backed by (atleast one) EJBReceiver(s). The -EJBReceiver is responsible for handling the EJB invocations. One type -of a EJBReceiver is a RemotingConnectionEJBReceiver which internally -uses jboss-remoting project to communicate with the remote server to -handle the EJB invocations. Such a EJBReceiver expects a connection -backed by the jboss-remoting project. Of course to be able to connect to -the server, such a EJBReceiver would have to know the server address, -port, security credentials and other similar parameters. If you were -using the core EJB client API, then you would have configured all these -properties via the jboss-ejb-client.properties or via programatic API -usage as explained here EJB invocations from a remote -client using JNDI. But in the example above, we are using wildfly-naming-client -project and are not directly interacting with the EJB client API -project.

-
-
-

If you look closely at what’s being passed, via the JNDI properties, to -the wildfly-naming-client project and if you remember the details that we -explained in a previous section about how the wildfly-naming-client project -establishes a connection to the remote server, you’ll realize that these -properties are indeed the same as what the -RemotingConnectionEJBReceiver would expect to be able to establish the -connection to the server. Now this is where the " -wildfly.naming.client.ejb.context`" property comes into picture. When -this is set to true and passed to the InitialContext creation (either -via jndi.properties or via the constructor of that class), the -wildfly-naming-client project internally will do whatever is necessary to setup -a `EJBClientContext, containing a RemotingConnectionEJBReceiver which -is created using the same remoting connection that is created by and -being used by wildfly-naming-client project for its own JNDI communication -usage. So effectively, the InitialContext creation via the wildfly-naming-client -project has now internally triggered the creation of a -EJBClientContext containing a EJBReceiver capable of handling the -EJB invocations (remember, no remote EJB invocations are possible -without the presence of a EJBClientContext containing a EJBReceiver -which can handle the EJB).

-
-
-

So we now know the importance of the " -wildfly.naming.client.ejb.context`" property and its usage. Let’s move on -the next part in that code, the JNDI name. Notice that we have used the -JNDI name relative to the `java:jboss/exported/ namespace while doing -the lookup. And since we know that the Foo view is exposed on that JNDI -name, we cast the returned object back to the Foo interface. Remember -that we earlier explained how each lookup via wildfly-naming-client triggers a -server side communication and a marshalling/unmarshalling process. This -applies for EJB views too. In fact, the wildfly-naming-client project has no -clue (since that’s not in the scope of that project to know) whether -it’s an EJB or some random object.

-
-
-

Once the unmarshalled object is returned (which actually is a proxy to -the bean), the rest is straightforward, we just invoke on that returned -object. Now since the wildfly-naming-client implementation has done the -necessary setup for the EJBClientContext (due to the presence of " -wildfly.naming.client.ejb.context`" property), the invocation on that -proxy will internally use the `EJBClientContext (the proxy is smart -enough to do that) to interact with the server and return back the -result. We won’t go into the details of how the EJB client API handles -the communication/invocation.

-
-
-

Long story short, using the wildfly-naming-client project for doing remote EJB -invocations against WildFly is possible!

-
-
-
-

21.5. Why use the EJB client API approach then?

-
-

I can guess that some of you might already question why/when would one -use the EJB client API style lookups as explained in the -EJB invocations from a remote client using JNDI -article instead of just using (what appears to be a simpler) -wildfly-naming-client style lookups.

-
-
-

Before we answer that, let’s understand a bit about the EJB client -project. The EJB client project was implemented keeping in mind various -optimizations and features that would be possible for handling remote -invocations. One such optimization was to avoid doing unnecessary server -side communication(s) which would typically involve network calls, -marshalling/unmarshalling etc…​ The easiest place where this -optimization can be applied, is to the EJB lookup. Consider the -following code (let’s ignore how the context is created):

-
-
-
-
ctx.lookup("foo/bar");
-
-
-
-

Now foo/bar JNDI name could potentially point to any type of object -on the server side. The jndi name itself won’t have the type/semantic -information of the object bound to that name on the server side. If the -context was setup using the wildfly-naming-client project (like we have seen -earlier in our examples), then the only way for wildfly-naming-client to return -an object for that lookup operation is to communicate with the server -and marshal/unmarshal the object bound on the server side. And that’s -exactly what it does (remember, we explained this earlier).

-
-
-

21.5.1. Is the lookup optimization applicable for all bean types?

-
-

In the previous section we have mentioned that the lookup -optimization by the EJB client API project happens for stateless beans. -This kind of optimization is not possible for stateful beans because -in case of stateful beans, a lookup is expected to create a session for -that stateful bean and for session creation we do have to communicate -with the server since the server is responsible for creating that -session.

-
-
-

That’s exactly why the EJB client API project expects the JNDI name -lookup string for stateful beans to include the " `?stateful`" string at -the end of the JNDI name:

-
-
-
-
context.lookup("ejb:myapp/myejbmodule//StatefulBean!org.myapp.ejb.Counter?stateful");
-
-
-
-

Notice the use of `"?stateful`" in that JNDI name. See -EJB invocations from a remote client using JNDI for -more details about such lookup.

-
-
-

The presence of " ?stateful`" in the JNDI name lookup string is a -directive to the EJB client API to let it know that a stateful bean is -being looked up and it’s necessary to communicate with the server and -create a session during that lookup. Though `?stateful is optional now.

-
-
-

So as you can see, we have managed to optimize certain operations by -using the EJB client API for EJB lookup/invocation as against using the -wildfly-naming-client project. There are other EJB client API implementation -details (and probably more might be added) which are superior when it is -used for remote EJB invocations in client applications as against -wildfly-naming-client project which doesn’t have the intelligence to carry out -such optimizations for EJB invocations. That’s why the wildfly-naming-client -project for remote EJB invocations is considered " deprecated -". Note that if you want to use wildfly-naming-client for looking up and -invoking on non-EJB remote objects then you are free to do so. In fact, -that’s why that project has been provided. You can even use the -wildfly-naming-client project for EJB invocations (like we just saw), if you are -fine with not wanting the optimizations that the EJB client API can do -for you or if you have other restrictions that force you to use that -project.

-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-
-

22. H2 Web Console Integration

-
-
-

The H2 database library provided by WildFly’s com.h2database.h2 module includes an implementation of the Jakarta Servlet HttpServlet interface (org.h2.server.web.JakartaWebServlet) that can be used to expose the H2 project’s web console tool. WildFly users could utilize this servlet in their own application by adding a dependency on the com.h2database.h2 module to their application’s deployment and then adding the servlet to the application’s web.xml. This is certainly not recommended for production use — no use of H2 is recommended in production applications — but developers may find use of the H2 console useful.

-
-
-

WildFly has historically integrated H2 in such a way that this is possible. But beginning with the 26 release, this no longer works out of the box, as the com.h2database.h2 module no longer has out-of-the-box access to the module that exposes the Jakarta Servlet API.

-
-
-

However it is possible for users of WildFly to restore this integration by adding a JBoss Modules module named javax.servlet.api.h2 to their server installation. The steps to do this are as follows:

-
-
-
    -
  • -

    cd $WILDFLY_HOME

    -
  • -
  • -

    mkdir -p modules/javax/servlet/api/h2

    -
  • -
  • -

    In that dir create a module.xml file with the following content:

    -
  • -
-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<module-alias xmlns="urn:jboss:module:1.9"
-              name="javax.servlet.api:h2"
-              target-name="jakarta.servlet.api"/>
-
-
-
-

The com.h2database.h2 module optionally depends on the javax.servlet.api.h2 module, so if one exists and it exposes the Jakarta Servlet API, then H2 JakartaWebServlet integration will work.

-
-
- - - - - -
- - -The relevant servlet implementation class is org.h2.server.web.JakartaWebServlet, and not org.h2.server.web.WebServlet. The latter relies on older versions of the Servlet API no longer provided by WildFly. -
-
-
-
-
-

23. Example Applications - Migrated to WildFly

-
-
-

23.1. Example Applications Migrated from Previous Releases

-
-

The applications in this section were written for a previous version of -the server but have been modified to run on WildFly or JBoss AS 7, -which was based on the same core architecture WildFly uses. Changes were made -to resolve issues that arose during deployment and runtime or to fix -problems with application behaviour. Each example below documents the -changes that were made to get the application to run successfully.

-
-
-

23.1.1. Seam 2 DVD Store example

-
-

For details on how to migrate this demo application, see -Seam -2 DVD Store example on JBoss AS 7 on Marek Novotny’s Blog.

-
-
-
-

23.1.2. Seam 2 Booking example

-
-

For details on how to migrate this demo application, see -Seam -2 Booking example on JBoss AS 7 on Marek Novotny’s Blog.

-
-
-
-

23.1.3. jBPM-Console application

-
-

Kris Verlaenen migrated this application from JBoss AS 5 to JBoss AS 7. For -details about this migration, see jBPM5 on JBoss AS 7 on his Kris’s Blog.

-
-
-
-

23.1.4. Order application used for performance testing

-
-

Andy Miller migrated this application from JBoss AS 5 to JBoss AS 7. For details -about this migration, see Order Application Migration from EAP5.1 to JBoss AS 7.

-
-
-
-

23.1.5. Migrate example application

-
-

A step by step work through of issues, and their solutions, that might -crop up when migrating applications to WildFly 29. See the following -github project for details.

-
-
-
-
-

23.2. Example Applications Based on EE6

-
-

Applications in this section were designed and written specifically to -use the features and functions of EE6.

-
-
-
    -
  • -

    Quickstarts: A number of quickstart applications were written to -demonstrate Jakarta EE and a few additional technologies. They provide -small, specific, working examples that can be used as a reference for -your own project. For more information about the quickstarts, see -Get Started Developing Applications

    -
  • -
-
-
-
-
-
-

24. Porting the Order Application from EAP 5.1 to JBoss AS 7

-
-
-

Andy Miller ported an example Order application that was used for -performance testing from EAP 5.1 to JBoss AS 7. These are the notes he -made during the migration process.

-
-
-

24.1. Overview of the application

-
-

The application is relatively simple. it contains three servlets, some -stateless session beans, a stateful session bean, and some entities.

-
-
-

In addition to application code changes, modifications were made to the -way the EAR was packaged. This is because WildFly removed support of -some proprietary features that were available in EAP 5.1.

-
-
-
-

24.2. Summary of changes

-
-

24.2.1. Code Changes

-
-
Modify JNDI lookup code
-
-

Since this application was first written for EAP 4.2/4.3, which did not -support EJB reference injection, the servlets were using pre-EE 5 -methods for looking up stateless and stateful session bean interfaces. -While migrating to WildFly, it seemed a good time to change the code to -use the @EJB annotation, although this was not a required change.

-
-
-

The real difference is in the lookup name. WildFly only supports the new -EE 6 portable JNDI names rather than the old EAR structure based names. -The JNDI lookup code changed as follows:

-
-
-

Example of code in the EAP 5.1 version:

-
-
-
-
try {
-    context = new InitialContext();
-    distributionCenterManager = (DistributionCenterManager) context.lookup("OrderManagerApp/DistributionCenterManagerBean/local");
-} catch(Exception lookupError) {
-    throw new ServletException("Couldn't find DistributionCenterManager bean", lookupError);
-}
-try {
-    customerManager = (CustomerManager) context.lookup("OrderManagerApp/CustomerManagerBean/local");
-} catch(Exception lookupError) {
-    throw new ServletException("Couldn't find CustomerManager bean", lookupError);
-}
- 
-try {
-    productManager = (ProductManager) context.lookup("OrderManagerApp/ProductManagerBean/local");
-} catch(Exception lookupError) {
-    throw new ServletException("Couldn't find the ProductManager bean", lookupError);
-}
-
-
-
-

Example of how this is now coded in WildFly:

-
-
-
-
@EJB(lookup="java:app/OrderManagerEJB/DistributionCenterManagerBean!services.ejb.DistributionCenterManager")
-private DistributionCenterManager distributionCenterManager;
- 
-@EJB(lookup="java:app/OrderManagerEJB/CustomerManagerBean!services.ejb.CustomerManager")
-private CustomerManager customerManager;
- 
-@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager")
-private ProductManager productManager;
-
-
-
-

In addition to the change to injection, which was supported in EAP -5.1.0, the lookup name changed from:

-
-
-
-
OrderManagerApp/DistributionCenterManagerBean/local
-
-
-
-

to:

-
-
-
-
java:app/OrderManagerEJB/DistributionCenterManagerBean!services.ejb.DistributionCenterManager
-
-
-
-

All the other beans were changed in a similar manner. They are now based -on the portable JNDI names described in EE 6.

-
-
-
-
-

24.2.2. Modify logging code

-
-

The next major change was to logging within the application. The old -version was using the commons logging infrastructure and Log4J that is -bundled in the application server. Rather than bundling third-party -logging, the application was modified to use the new WildFly Logging -infrastructure.

-
-
-

The code changes themselves are rather trivial, as this example -illustrates:

-
-
-

Old JBoss Commons Logging/Log4J:

-
-
-
-
private static Log log = LogFactory.getLog(CustomerManagerBean.class);
-
-
-
-

New WildFly Logging

-
-
-
-
private static Logger logger = Logger.getLogger(CustomerManagerBean.class);
-
-
-
-

Old JBoss Commons Logging/Log4J:

-
-
-
-
if(log.isTraceEnabled()) {
-    log.trace("Just flushed " + batchSize + " rows to the database.");
-    log.trace("Total rows flushed is " + (i+1));
-}
-
-
-
-

New WildFly Logging:

-
-
-
-
if(logger.isLoggable(Level.TRACE)) {
-    logger.log(Level.TRACE, "Just flushed " + batchSize + " rows to the database.");
-    logger.log(Level.TRACE, "Total rows flushed is " + (i+1));
-}
-
-
-
-

In addition to the code changes made to use the WildFly log -manager module, you must add this dependency to the MANIFEST.MF file -as follows:

-
-
-
-
Manifest-Version: 1.0
-Dependencies: org.jboss.logmanager
-
-
-
-
-

24.2.3. Modify the code to use Infinispan for 2nd level cache

-
-

Jboss Cache has been replaced by Infinispan for 2nd level cache. This -requires modification of the persistence.xml file.

-
-
-

This is what the file looked like in EAP 5.1:

-
-
-
-
<properties>
-<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/>
-<property name="hibernate.cache.region.jbc2.cachefactory" value="java:CacheManager"/>
-<property name="hibernate.cache.use_second_level_cache" value="true"/>
-<property name="hibernate.cache.use_query_cache" value="false"/>
-<property name="hibernate.cache.use_minimal_puts" value="true"/>
-<property name="hibernate.cache.region.jbc2.cfg.entity" value="mvcc-entity"/>
-<property name="hibernate.cache.region_prefix" value="services"/>
-</properties>
-
-
-
-

This is how it was modified to use Infinispan for the same -configuration:

-
-
-
-
<properties>
-<property name="hibernate.cache.use_second_level_cache" value="true"/>
-<property name="hibernate.cache.use_minimal_puts" value="true"/>
-</properties>
-<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
-
-
-
-

Most of the properties are removed since they will default to the -correct values for the second level cache. See -"Using -the Infinispan second level cache" for more details.

-
-
-

That was the extent of the code changes required to migrate the -application to AS7.

-
-
-
-

24.2.4. EAR Packaging Changes

-
-

Due to modular class loading changes, the structure of the existing EAR -failed to deploy successfully in WildFly.

-
-
-

The old structure of the EAR was as follows:

-
-
-
-
$ jar tf OrderManagerApp.ear
-META-INF/MANIFEST.MF
-META-INF/application.xml
-OrderManagerWeb.war
-OrderManagerEntities.jar
-OrderManagerEJB.jar
-META-INF/
-
-
-
-

In this structure, the entities and the persistence.xml were in one -jar file, OrderManagerEntities.jar, and the stateless and stateful -session beans were in another jar file, OrderManagerEJB.jar. This did -not work due to modular class loading changes in WildFly. There are a -couple of ways to resolve this issue:

-
-
-
    -
  1. -

    Modify the class path in the MANIFEST.MF

    -
  2. -
  3. -

    Flatten the code and put all the beans in one JAR file.

    -
  4. -
-
-
-

The second approach was selected because it simplified the EAR -structure:

-
-
-
-
$ jar tf OrderManagerApp.ear
-META-INF/application.xml
-OrderManagerWeb.war
-OrderManagerEJB.jar
-META-INF/
-
-
-
-

Since there is no longer an OrderManagerEntities.jar file, the -applcation.xml file was modified to remove the entry.

-
-
-

An entry was added to the MANIFEST.MF file in the -OrderManagerWeb.war to resolve another class loading issue resulting -from the modification to use EJB reference injection in the servlets.

-
-
-
-
Manifest-Version: 1.0
-Dependencies: org.jboss.logmanager
-Class-Path: OrderManagerEJB.jar
-
-
-
-

The Class-Path entry tells the application to look in the -OrderManagerEJB.jar file for the injected beans.

-
-
-
-

24.2.5. Summary

-
-

Although the existing EAR structure could have worked with additional -modifications to the MANIFEST.MF file, this approach seemed more -appealing because it simplified the structure while maintaining the web -tier in its own WAR.

-
-
-

The source files for both versions is attached so you can view the -changes that were made to the application.

-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-
-

25. Spring applications development and migration guide

-
-
-

This document details the main points that need to be considered by -Spring developers that wish to develop new applications or to migrate -existing applications to be run into WildFly 29.

-
-
-

25.1. Dependencies and Modularity

-
-

WildFly 29 has a modular class loading strategy, different from previous -versions of JBoss AS, which enforces a better class loading isolation -between deployments and the application server itself. A detailed -description can be found in the documentation dedicated to -class -loading in WildFly 29.

-
-
-

This reduces significantly the risk of running into a class loading -conflict and allows applications to package their own dependencies if -they choose to do so. This makes it easier for Spring applications that -package their own dependencies - such as logging frameworks or -persistence providers to run on WildFly 29.

-
-
-

At the same time, this does not mean that duplications and conflicts -cannot exist on the classpath. Some module dependencies are implicit, -depending on the type of deployment as shown -here.

-
-
-
-

25.2. Persistence usage guide

-
-

Depending on the strategy being used, Spring applications can be:

-
-
-
    -
  • -

    native Hibernate applications;

    -
  • -
  • -

    Jakarta Persistence based applications;

    -
  • -
  • -

    native JDBC applications;

    -
  • -
-
-
-
-

25.3. Native Spring/Hibernate applications

-
-

Applications that use the Hibernate API directly with Spring (i.e. -through either one of LocalSessionFactoryBean or -AnnotationSessionFactoryBean) may need to use a different version of Hibernate than is provided by WildFly.

-
-
-
-

25.4. Jakarta Persistence based applications

-
-

Spring applications using Jakarta Persistence may choose between:

-
-
-
    -
  • -

    using a server-deployed persistence unit;

    -
  • -
  • -

    using a Spring-managed persistence unit.

    -
  • -
-
-
-

25.4.1. Using server-deployed persistence units

-
-

Applications that use a server-deployed persistence unit must observe -the typical Jakarta EE rules in what concerns dependency management, i.e. -the jakarta.persistence classes and persistence provider (Hibernate) are -contained in modules which are added automatically by the application -when the persistence unit is deployed.

-
-
-

In order to use the server-deployed persistence units from within -Spring, either the persistence context or the persistence unit need to -be registered in JNDI via web.xml as follows:

-
-
-
-
<persistence-context-ref>
-    <persistence-context-ref-name>persistence/petclinic-em</persistence-unit-ref-name>
-    <persistence-unit-name>petclinic</persistence-unit-name>
-</persistence-context-ref>
-
-
-
-

or, respectively:

-
-
-
-
<persistence-unit-ref>
-    <persistence-unit-ref-name>persistence/petclinic-emf</persistence-unit-ref-name>
-    <persistence-unit-name>petclinic</persistence-unit-name>
-</persistence-unit-ref>
-
-
-
-

When doing so, the persistence context or persistence unit are available -to be looked up in JNDI, as follows:

-
-
-
-
<jee:jndi-lookup id="entityManager" jndi-name="java:comp/env/persistence/petclinic-em" 
-            expected-type="jakarta.persistence.EntityManager"/>
-
-
-
-

or

-
-
-
-
<jee:jndi-lookup id="entityManagerFactory" jndi-name="java:comp/env/persistence/petclinic-emf" 
-            expected-type="jakarta.persistence.EntityManagerFactory"/>
-
-
-
-

JNDI binding

-
-
- - - - - -
- - -JNDI binding via persistence.xml properties is not supported in WildFly -8. -
-
-
-
-

25.4.2. Using Spring-managed persistence units

-
-

Spring applications running in WildFly 29 may also create persistence -units on their own, using the LocalContainerEntityManagerFactoryBean. -This is what these applications need to consider:

-
-
-
Placement of the persistence unit definitions
-
-

When the application server encounters a deployment that has a file -named META-INF/persistence.xml (or, for that matter, -WEB-INF/classes/META-INF/persistence.xml), it will attempt to create a -persistence unit based on what is provided in the file. In most cases, -such definition files are not compliant with the Jakarta EE requirements, -mostly because required elements such as the datasource of the -persistence unit are supposed to be provided by the Spring context -definitions, which will fail the deployment of the persistence unit, and -consequently of the entire deployment.

-
-
-

Spring applications can easily avoid this type of conflict, by using a -feature of the LocalContainerEntityManagerFactoryBean which is designed -for this purpose. Persistence unit definition files can exist in other -locations than META-INF/persistence.xml and the location can be -indicated through the persistenceXmlLocation property of the factory -bean class.

-
-
-

Assuming that the persistence unit is in the -META-INF/jpa-persistence.xml, the corresponding definition can be:

-
-
-
-
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
-       <property name="persistenceXmlLocation" value="classpath*:META-INF/jpa-persistence.xml"/> 
-       <!-- other definitions -->
-</bean>
-
-
-
-
-
-

25.4.3. Managing dependencies

-
-

To ensure that Spring applications can use a specific version of Hibernate ORM, exclude the WildFly provided Hibernate ORM version, -instruct the server to exclude the module from -the deployment’s list of dependencies. In order to do so, include a -META-INF/jboss-deployment-structure.xml or, for web applications, -WEB-INF/jboss-deployment-structure.xml with the following content:

-
-
-
-
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
-  <deployment>
-    <exclusions>
-       <module name="org.hibernate"/>
-    </exclusions>
-  </deployment>
-</jboss-deployment-structure>
-
-
-
-
-
-
-
-

26. How do I migrate my application from JBoss AS 7 to WildFly 10

-
-
-

26.1. About this Document

-
-

The purpose of this guide is to document changes that are needed to successfully run and deploy JBoss AS 7 applications on WildFly 10. It provides information on to resolve deployment and runtime problems and how to prevent changes in application behavior. This is the first step in moving to the new platform. Once the application is successfully deployed and running on the new platform, plans can be made to upgrade individual components to use the new functions and features of WildFly.

-
-
-
-

26.2. Overview of WildFly

-
-

The list of WildFly new functionality is extensive, being the most relevant, with respect to server and application migrations:

-
-
-
    -
  • -

    Jakarta EE - WildFly is a certified implementation of Jakarta EE, meeting both the Web and the Full Platform, and already includes support for the latest iterations of CDI (1.2) and Web Sockets (1.1).

    -
  • -
  • -

    Undertow - A new cutting-edge web server in WildFly, designed for maximum throughput and scalability, including environments with over a million connections. And the latest web technologies, such as the new HTTP/2 standard, are already onboard.

    -
  • -
  • -

    Apache ActiveMQ Artemis - WildFly’s new Jakarta Messaging broker. Based on an code donation from HornetQ, this Apache subproject provides outstanding performance based on a proven non-blocking architecture.

    -
  • -
  • -

    IronJacamar 1.2 - The latest IronJacamar provides a stable and feature rich Jakarta Connectors & Datasources support.

    -
  • -
  • -

    JBossWS 5 - The fifth generation of JBossWS, a major leap forward, brings new features and performances improvements to WildFly Web Services

    -
  • -
  • -

    RESTEasy - WildFly which goes beyond the standard Jakarta EE REST APIs (Jakarta RESTful Web Services 2.1), by also providing a number of useful extensions, such as JSON Web Encryption, Jackson, Yaml, Jakarta JSON Processing, and reactive facilities.

    -
  • -
  • -

    OpenJDK ORB - WildFly switched the IIOP implementation from JacORB, to a downstream branch of the OpenJDK Orb, leading to better interoperability with the JVM ORB and the Jakarta EE RI.

    -
  • -
  • -

    Feature Rich Clustering - Clustering support was heavily refactored in WildFly, and includes several APIs for applications

    -
  • -
  • -

    Port Reduction - By utilizing HTTP upgrade, WildFly has moved nearly all of its protocols to be multiplexed over just two HTTP ports: a management port (9990), and an application port (8080).

    -
  • -
  • -

    Enhanced Logging - The management API now supports the ability to list and view the available log files on a server, or even define custom formatters other than the default pattern formatter. Deployment’s logging setup is also greatly enhanced.

    -
  • -
-
-
-

The support for some technologies was removed, due to the high maintenance cost, low community interest, and much better alternative solutions:

-
-
-
    -
  • -

    CMP EJB - Jakarta Persistence offers a much more performant and flexible API

    -
  • -
  • -

    Jakarta XML RPC - Jakarta XML Web Services offer a much more accurate and complete solution

    -
  • -
  • -

    JSR-88 - With very little adoption, the more complete deployment APIs provided by vendors are preferred

    -
  • -
-
-
-
-

26.3. Server Migration

-
-

Migrating a JBoss AS 7 server to WildFly consists of migrating custom configuration files, and some persisted data that may exist.

-
-
-

26.3.1. JacORB Subsystem

-
-

WildFly ORB support is provided by the JDK itself, instead of relying on JacORB. A subsystem configuration migration is required.

-
-
-
JacORB Subsystem Configuration
-
-

The extension’s module org.jboss.as.jacorb is replaced by module org.wildfly.iiop-openjdk, while the subsystem configuration namespace urn:jboss:domain:jacorb:2.0 is replaced by -urn:jboss:domain:iiop-openjdk:1.0.

-
-
-

The XML configuration of the new subsystem accepts only a subset of the legacy elements and attributes. Consider the following example of the JacORB subsystem configuration, containing all valid elements and attributes:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:jacorb:1.3">
-   <orb name="JBoss" print-version="off" use-imr="off" use-bom="off"  cache-typecodes="off"
-       cache-poa-names="off" giop-minor-version ="2" socket-binding="jacorb" ssl-socket-binding="jacorb-ssl">
-       <connection retries="5" retry-interval="500" client-timeout="0" server-timeout="0"
-           max-server-connections="500" max-managed-buf-size="24" outbuf-size="2048"
-           outbuf-cache-timeout="-1"/>
-       <initializers security="off" transactions="spec"/>
-   </orb>
-   <poa monitoring="off" queue-wait="on" queue-min="10" queue-max="100">
-       <request-processors pool-size="10" max-threads="32"/>
-   </poa>
-   <naming root-context="JBoss/Naming/root" export-corbaloc="on"/>
-   <interop sun="on" comet="off" iona="off" chunk-custom-rmi-valuetypes="on"
-       lax-boolean-encoding="off" indirection-encoding-disable="off" strict-check-on-tc-creation="off"/>
-   <security support-ssl="off" add-component-via-interceptor="on" client-supports="MutualAuth"
-       client-requires="None" server-supports="MutualAuth" server-requires="None"/>
-   <properties>
-       <property name="some_property" value="some_value"/>
-   </properties>
-</subsystem>
-
-
-
-

Properties that are not supported and have to be removed:

-
-
-
    -
  • -

    <orb/>: client-timeout, max-managed-buf-size, max-server-connections, outbuf-cache-timeout, outbuf-size, connection-retries, retry-interval, name,server-timeout

    -
  • -
  • -

    <poa/>: queue-min, queue-max, pool-size, max-threads

    -
  • -
-
-
-

On-off properties: have to either be removed or in off mode:

-
-
-
    -
  • -

    <orb/>: cache-poa-names, cache-typecodes, print-version, use-bom, use-imr

    -
  • -
  • -

    <interop/>: all except sun

    -
  • -
  • -

    <poa/>: monitoring, queue-wait

    -
  • -
-
-
-

In case the legacy subsystem configuration is available, such configuration may be migrated to the new subsystem by invoking its migrate operation, using the management CLI:

-
-
-
-
/subsystem=jacorb:migrate
-
-
-
-

There is also a describe-migration operation that returns a list of all the management operations that are performed to migrate from the legacy subsystem to the new one:

-
-
-
-
/subsystem=jacorb:describe-migration
-
-
-
-

Both migrate and describe-migration will also display a list of migration-warnings if there are some resource or attributes that can not be migrated automatically. The following is a list of these warnings:

-
-
-
    -
  • -

    Properties X cannot be emulated using OpenJDK ORB and are not supported

    -
    -

    This warning means that mentioned properties are not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those properties would be nonexistent. Admin has to check whether subsystem is able to operate -correctly without that behavior on the new server.Unsupported properties: cache-poa-names, cache-typecodes, chunk-custom-rmi-valuetypes, client-timeout, comet, indirection-encoding-disable, iona, lax-boolean-encoding, max-managed-buf-size, max-server-connections, max-threads, outbuf-cache-timeout, outbuf-size, queue-max, queue-min, poa-monitoring, print-version, retries, retry-interval, queue-wait, server-timeout, strict-check-on-tc-creation, use-bom, use-imr.

    -
    -
  • -
  • -

    The properties X use expressions. Configuration properties that are used to resolve those expressions should be transformed manually to the new iiop-openjdk subsystem format.

    -
    -

    Admin has to transform all the configuration files to work correctly with the jacorb subsystem. For example, jacorb has a property giop-minor-version whereas iiop-openjdk uses the property giop-version. Let’s suppose we use 1 minor version in jacorb and have it configured in standalone.conf file as system variable: -Diiop-giop-minor-version=1. Admin is responsible for changing this variable to 1.1 after the migration to make sure that the new subsystem will work correctly.

    -
    -
  • -
-
-
-
-
-

26.3.2. JBoss Web Subsystem

-
-

JBoss Web is replaced by Undertow in WildFly, which means that the legacy subsystem configuration should be migrated to WildFly’s Undertow subsystem configuration.

-
-
-
JBoss Web Subsystem Configuration
-
-

The extension’s module org.jboss.as.web is replaced by module org.wildfly.extension.undertow, while the subsystem configuration namespace urn:jboss:domain:web: is replaced by -urn:jboss:domain:undertow:.

-
-
-

The XML configuration of the new subsystem is relatively different. Consider the following example of the JBoss Web subsystem configuration, containing all valid elements and attributes:

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="true" default-session-timeout="30" instance-id="foo">
-    <configuration>
-        <static-resources listings="true"
-                          sendfile="1000"
-                          file-encoding="utf-8"
-                          read-only="true"
-                          webdav="false"
-                          secret="secret"
-                          max-depth="5"
-                          disabled="false"
-                />
-        <jsp-configuration development="true"
-                           disabled="false"
-                           keep-generated="true"
-                           trim-spaces="true"
-                           tag-pooling="true"
-                           mapped-file="true"
-                           check-interval="20"
-                           modification-test-interval="1000"
-                           recompile-on-fail="true"
-                           smap="true"
-                           dump-smap="true"
-                           generate-strings-as-char-arrays="true"
-                           error-on-use-bean-invalid-class-attribute="true"
-                           scratch-dir="/some/dir"
-                           source-vm="1.7"
-                           target-vm="1.7"
-                           java-encoding="utf-8"
-                           x-powered-by="true"
-                           display-source-fragment="true" />
-        <mime-mapping name="ogx" value="application/ogg" />
-        <welcome-file>titi</welcome-file>
-    </configuration>
-    <connector name="http" scheme="http"
-               protocol="HTTP/1.1"
-               socket-binding="http"
-               enabled="true"
-               enable-lookups="false"
-               proxy-binding="reverse-proxy"
-               max-post-size="2097153"
-               max-save-post-size="512"
-               redirect-binding="https"
-               max-connections="300"
-               secure="false"
-               executor="some-executor"
-            />
-    <connector name="https" scheme="https" protocol="HTTP/1.1" secure="true" socket-binding="https">
-        <ssl certificate-key-file="${file-base}/server.keystore"
-             ca-certificate-file="${file-base}/jsse.keystore"
-             key-alias="test"
-             password="changeit"
-             cipher-suite="SSL_RSA_WITH_3DES_EDE_CBC_SHA"
-             protocol="SSLv3"
-             verify-client="true"
-             verify-depth="3"
-             certificate-file="certificate-file.ext"
-             ca-revocation-url="https://example.org/some/url"
-             ca-certificate-password="changeit"
-             keystore-type="JKS"
-             truststore-type="JKS"
-             session-cache-size="512"
-             session-timeout="3000"
-             ssl-protocol="RFC4279"
-                />
-    </connector>
-    <connector name="http-vs" scheme="http" protocol="HTTP/1.1" socket-binding="http" >
-        <virtual-server name="vs1" />
-        <virtual-server name="vs2" />
-    </connector>
-    <virtual-server name="default-host" enable-welcome-root="true" default-web-module="foo.war">
-        <alias name="localhost" />
-        <alias name="example.com" />
-        <access-log resolve-hosts="true" extended="true" pattern="extended" prefix="prefix" rotate="true" >
-            <directory relative-to="jboss.server.base.dir" path="toto" />
-        </access-log>
-        <rewrite name="myrewrite" pattern="^/helloworld(.*)" substitution="/helloworld/test.jsp" flags="L" />
-        <rewrite name="with-conditions" pattern="^/helloworld(.*)" substitution="/helloworld/test.jsp" flags="L" >
-            <condition name="https" pattern="off" test="%{HTTPS}" flags="NC"/>
-            <condition name="user" test="%{USER}" pattern="toto" flags="NC"/>
-            <condition name="no-flags" test="%{USER}" pattern="toto"/>
-        </rewrite>
-        <sso reauthenticate="true" domain="myDomain" cache-name="myCache"
-             cache-container="cache-container" http-only="true"/>
-    </virtual-server>
-    <virtual-server name="vs1" />
-    <virtual-server name="vs2" />
-    <valve name="myvalve" module="org.jboss.some.module" class-name="org.jboss.some.class" enabled="true">
-        <param param-name="param-name" param-value="some-value"/>
-    </valve>
-    <valve name="accessLog" module="org.jboss.as.web" class-name="org.apache.catalina.valves.AccessLogValve">
-        <param param-name="prefix" param-value="myapp_access_log." />
-        <param param-name="suffix" param-value=".log" />
-        <param param-name="rotatable" param-value="true" />
-        <param param-name="fileDateFormat" param-value="yyyy-MM-dd" />
-        <param param-name="pattern" param-value="common" />
-        <param param-name="directory" param-value="${jboss.server.log.dir}" />
-        <param param-name="resolveHosts" param-value="false"/>
-        <param param-name="conditionIf" param-value="log-enabled"/>
-    </valve>
-    <valve name="request-dumper" module="org.jboss.as.web" class-name="org.apache.catalina.valves.RequestDumperValve"/>
-    <valve name="remote-addr" module="org.jboss.as.web" class-name="org.apache.catalina.valves.RemoteAddrValve">
-        <param param-name="allow" param-value="127.0.0.1,127.0.0.2" />
-        <param param-name="deny" param-value="192.168.1.20" />
-    </valve>
-    <valve name="crawler" class-name="org.apache.catalina.valves.CrawlerSessionManagerValve" module="org.jboss.as.web" >
-        <param param-name="sessionInactiveInterval" param-value="1" />
-        <param param-name="crawlerUserAgents" param-value="Google" />
-    </valve>
-    <valve name="proxy" class-name="org.apache.catalina.valves.RemoteIpValve" module="org.jboss.as.web" >
-        <param param-name="internalProxies" param-value="192\.168\.0\.10|192\.168\.0\.11" />
-        <param param-name="remoteIpHeader" param-value="x-forwarded-for" />
-        <param param-name="proxiesHeader" param-value="x-forwarded-by" />
-        <param param-name="trustedProxies" param-value="proxy1|proxy2" />
-    </valve>
-</subsystem>
-
-
-
-

It is possible to do a migration of the legacy subsystem configuration and related persisted data by invoking the legacy subsystem’s migrate operation, using the management CLI:

-
-
-
-
/subsystem=web:migrate
-
-
-
-

There is also a describe-migration operation that returns a list of all the management operations that are performed to migrate from the legacy subsystem to the new one:

-
-
-
-
/subsystem=web:describe-migration
-
-
-
-

Both migrate and describe-migration will also display a list of migration-warnings if there are some resource or attributes that can not be migrated automatically. The following is a list of these warnings:

-
-
-
    -
  • -

    Could not migrate resource X

    -
    -

    This warning means that mentioned resource configuration is not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those resources would be nonexistent. Admin has to check whether subsystem is able to operate correctly without that behavior on the new server.

    -
    -
  • -
  • -

    Could not migrate attribute X from resource Y.

    -
    -

    This warning means that mentioned resource configuration property is not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those properties would be nonexistent. Admin has to check whether subsystem is -able to operate correctly without that behavior on the new server.

    -
    -
  • -
  • -

    Could not migrate SSL connector as no SSL config is defined

    -
  • -
  • -

    Could not migrate verify-client attribute %s to the Undertow equivalent

    -
  • -
  • -

    Could not migrate verify-client expression %s

    -
  • -
  • -

    Could not migrate valve X

    -
    -

    This warning means that mentioned valve configuration is not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those resources would be nonexistent. Admin has to check whether subsystem is able to operate correctly without that behavior on the new server. This warning may happen for:

    -
    -
    -
      -
    • -

      org.apache.catalina.valves.RemoteAddrValve : must have at least one -allowed or denied value.

      -
    • -
    • -

      org.apache.catalina.valves.RemoteHostValve : must have at least one -allowed or denied value.

      -
    • -
    • -

      org.apache.catalina.authenticator.BasicAuthenticator

      -
    • -
    • -

      org.apache.catalina.authenticator.DigestAuthenticator

      -
    • -
    • -

      org.apache.catalina.authenticator.FormAuthenticator

      -
    • -
    • -

      org.apache.catalina.authenticator.SSLAuthenticator

      -
    • -
    • -

      org.apache.catalina.authenticator.SpnegoAuthenticator

      -
    • -
    • -

      custom valves

      -
    • -
    -
    -
  • -
  • -

    Could not migrate attribute X from valve Y

    -
    -

    This warning means that mentioned valve configuration property is not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those properties would be nonexistent. Admin has to check whether subsystem is -able to operate correctly without that behavior on the new server. This warning may happen for :

    -
    -
    -
      -
    • -

      org.apache.catalina.valves.AccessLogValve : if you use the following parameters resolveHosts, fileDateFormat, renameOnRotate, -encoding, locale, requestAttributesEnabled, buffered.

      -
    • -
    • -

      org.apache.catalina.valves.ExtendedAccessLogValve : if you use the following parameters resolveHosts, fileDateFormat, renameOnRotate, encoding, locale, requestAttributesEnabled, buffered.

      -
    • -
    • -

      org.apache.catalina.valves.RemoteIpValve:

      -
      -
        -
      • -

        if remoteIpHeader is defined and isn’t set to "x-forwarded-for".

        -
      • -
      • -

        if protocolHeader is defined and isn’t set to "x-forwarded-proto".

        -
      • -
      • -

        if you use the following parameters httpServerPort and httpsServerPort .

        -
      • -
      -
      -
    • -
    -
    -
  • -
-
-
-

Also, note that Undertow doesn’t support JBoss Web valves, but some of these may be migrated to Undertow handlers, and JBoss Web subsystem’s migrate operation do that too.

-
-
-

Here is a list of those valves and their corresponding Undertow handler:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValveHandler

org.apache.catalina.valves.AccessLogValve

io.undertow.server.handlers.accesslog.AccessLogHandler

org.apache.catalina.valves.ExtendedAccessLogValve

io.undertow.server.handlers.accesslog.AccessLogHandler

org.apache.catalina.valves.RequestDumperValve

io.undertow.server.handlers.RequestDumpingHandler

org.apache.catalina.valves.RewriteValve

io.undertow.server.handlers.SetAttributeHandler

org.apache.catalina.valves.RemoteHostValve

io.undertow.server.handlers.AccessControlListHandler

org.apache.catalina.valves.RemoteAddrValve

io.undertow.server.handlers.IPAddressAccessControlHandler

org.apache.catalina.valves.RemoteIpValve

io.undertow.server.handlers.ProxyPeerAddressHandler

org.apache.catalina.valves.StuckThreadDetectionValve

io.undertow.server.handlers.StuckThreadDetectionHandler

org.apache.catalina.valves.CrawlerSessionManagerValve

io.undertow.servlet.handlers.CrawlerSessionManagerHandler

-
-

The org.apache.catalina.valves.JDBCAccessLogValve can’t be automatically migrated to io.undertow.server.handlers.JDBCLogHandler as the expectations differ.

-
-
-

The migration can be done manually though :

-
-
-
    -
  1. -

    Create the driver module and add the driver to the list of available drivers

    -
  2. -
  3. -

    Create a datasource pointing to the database where the log entries are going to be stored

    -
  4. -
  5. -

    Add an expression-filter definition with the following expression: "jdbc-access-log(datasource='datasource-jndi-name")

    -
    -
    -
    <valve name="jdbc" module="org.jboss.as.web" class-name="org.apache.catalina.valves.JDBCAccessLogValve">
    -    <param param-name="driverName" param-value="com.mysql.jdbc.Driver" />
    -    <param param-name="connectionName" param-value="root" />
    -    <param param-name="connectionPassword" param-value="password" />
    -    <param param-name="connectionURL" param-value="jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull" />
    -    <param param-name="format" param-value="combined" />
    -</valve>
    -
    -
    -
    -

    should become:

    -
    -
    -
    -
    <subsystem xmlns="urn:jboss:domain:datasources:1.2">
    -    <datasources>
    -        <datasource jndi-name="java:jboss/datasources/accessLogDS" pool-name="ccessLogDS" enabled="true" use-java-context="true">
    -            <connection-url>jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull</connection-url>
    -            <driver>mysql</driver>
    -            <security>
    -               <user-name>root</user-name>
    -               <password>password</password>
    -            </security>
    -        </datasource>
    -        ...
    -        <drivers>
    -            <driver name="mysql" module="com.mysql">
    -                <driver-class>com.mysql.jdbc.Driver</driver-class>
    -            </driver>
    -        ...
    -        </drivers>
    -    </datasources>
    -</subsystem>
    -...
    -<subsystem xmlns="urn:jboss:domain:undertow:3.1" default-virtual-host="default-virtual-host" default-servlet-container="myContainer"
    -           default-server="some-server" instance-id="some-id" statistics-enabled="true">
    -    ...
    -    <server name="some-server" default-host="other-host" servlet-container="myContainer">
    -    ...
    -        <host name="other-host" alias="www.mysite.com, ${prop.value:default-alias}" default-web-module="something.war" disable-console-redirect="true">
    -            <location name="/" handler="welcome-content" />
    -            <filter-ref name="jdbc-access"/>
    -        </host>
    -    </server>
    -    ...
    -    <filters>
    -        <expression-filter name="jdbc-access" expression="jdbc-access-log(datasource='java:jboss/datasources/accessLogDS')" />
    -    ...
    -    </filters>
    - 
    -</subsystem>
    -
    -
    -
  6. -
-
-
-

Note that any custom valve won’t be migrated at all and will just be removed from the configuration.

-
-
-

Also the authentication related valves are to be replaced by Undertow authentication mechanisms, and this have to be done manually.

-
-
-
-
WebSockets
-
-

In JBoss AS 7, to use WebSockets, you had to configure the 'http' connector in the web subsystem of the server configuration file to use the NIO2 protocol. The following is an example of the management CLI command to configure WebSockets in the previous releases.

-
-
-
-
/subsystem=web/connector=http/:write-attribute(name=protocol,value=org.apache.coyote.http11.Http11NioProtocol)
-
-
-
-

WebSockets are a requirement of the Jakarta EE specification and the default configuration is included in WildFly. More complex WebSocket configuration is done in the servlet-container of the undertow subsystem of the server configuration file.

-
-
-

You no longer need to configure the server for default WebSocket support.

-
-
-
-
-

26.3.3. Messaging Subsystem

-
-

WildFly JMS support is provided by ActiveMQ Artemis, instead of HornetQ. It’s possible to do a migration of the legacy subsystem configuration, and related persisted data.

-
-
-
Messaging Subsystem Configuration
-
-

The extension’s module org.jboss.as.messaging is replaced by module org.wildfly.extension.messaging-activemq, while the subsystem configuration namespace urn:jboss:domain:messaging:3.0 is replaced by urn:jboss:domain:messaging-activemq:1.0.

-
-
-
Management model
-
-

In most cases, an effort was made to keep resource and attribute names as similar as possible to those used in previous releases. The following table lists some of the changes.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
HornetQ nameActiveMQ name

hornetq-server

server

hornetq-serverType

serverType

connectors

connector

discovery-group-name

discovery-group

-
-

The management operations invoked on the new messaging-subsystem starts with /subsystem=messaging-activemq/server=X while the legacy messaging subsystem was at /subsystem=messaging/hornetq-server=X.

-
-
-

In case the legacy subsystem configuration is available, such configuration may be migrated to the new subsystem by invoking its migrate operation, using the management CLI:

-
-
-
-
/subsystem=messaging:migrate
-
-
-
-

There is also a describe-migration operation that returns a list of all the management operations that are performed to migrate from the legacy subsystem to the new one:

-
-
-
-
/subsystem=messaging:describe-migration
-
-
-
-

Both migrate and describe-migration will also display a list of migration-warnings if there are some resource or attributes that can not be migrated automatically. The following is a list of these warnings:

-
-
-
    -
  • -

    The migrate operation can not be performed: the server must be in admin-only mode

    -
    -

    The migrate operation requires starting the server in admin-only mode, which is done by adding parameter --admin-only to the server start command, e.g.

    -
    -
    -
    -
    ./standalone.sh --admin-only
    -
    -
    -
  • -
  • -

    Can not migrate attribute local-bind-address from resource X. Use instead the socket-attribute to configure this broadcast-group.

    -
  • -
  • -

    Can not migrate attribute local-bind-port from resource X. Use instead the socket-binding attribute to configure this broadcast-group.

    -
  • -
  • -

    Can not migrate attribute group-address from resource X. Use instead the socket-binding attribute to configure this broadcast-group.

    -
  • -
  • -

    Can not migrate attribute group-port from resource X. Use instead the socket-binding attribute to configure this broadcast-group.

    -
    -

    Broadcast-group resources no longer accept local-bind-address, local-bind-port, group-address, group-port attributes. It only accepts a socket-binding. The warning notifies that resource X has an unsupported attribute. The user will have to set the socket-binding attribute on the resource and ensures it corresponds to a defined socket-binding -resource.

    -
    -
  • -
  • -

    Classes providing the %s are discarded during the migration. To use them in the new messaging-activemq subsystem, you will have to extend the Artemis-based Interceptor.

    -
    -

    Messaging interceptors support is significantly different in WildFly 10, any interceptors configured in the legacy subsystem are discarded during migration. See the Messaging Interceptors section to learn how to migrate legacy Messaging interceptors.

    -
    -
  • -
  • -

    Can not migrate the HA configuration of X. Its shared-store and backup attributes holds expressions and it is not possible to determine unambiguously how to create the corresponding ha-policy for the messaging-activemq server.

    -
    -

    If the hornetq-server X’s shared-store or backup attributes hold an expression, such as ${xxx}, then it’s not possible to determine the actual ha-policy of the migrated server. In that case, we discard it and the user will have to add the correct ha-policy afterwards. The ha-policy is a single resource underneath the messaging-activemq server resource.

    -
    -
  • -
  • -

    Can not migrate attribute local-bind-address from resource X. Use instead the socket-binding attribute to configure this discovery-group.Can not migrate attribute local-bind-port from resource X. Use instead the socket-binding attribute to configure this discovery-group.

    -
  • -
  • -

    Can not migrate attribute group-address from resource X. Use instead the socket-binding attribute to configure this discovery-group.

    -
  • -
  • -

    Can not migrate attribute group-port from resource X. Use instead the socket-binding attribute to configure this discovery-group.

    -
    -

    The discovery-group resources no longer accept local-bind-address, local-bind-port, group-address, group-port attributes. It only accepts a socket-binding. The warning notifies that resource X has an unsupported attribute.

    -
    -
    -

    The user will have to set the socket-binding attribute on the resource and ensures it corresponds to a defined socket-binding resource.

    -
    -
  • -
  • -

    Can not create a legacy-connection-factory based on connection-factory X. It uses a HornetQ in-vm connector that is not compatible with Artemis in-vm connector

    -
    -

    Legacy subsystem’s remote connection-factory resources are migrated into legacy-connection-factory resources, to allow old EAP6 clients to connect to EAP7. However a connection-factory using in-vm will not be migrated, because a in-vm client will be based on EAP7, not EAP 6. In other words, legacy-connection-factory are created only when the CF is using remote connectors, and this warning notifies about in-vm connection-factory X not migrated.

    -
    -
  • -
  • -

    Can not migrate attribute X from resource Y. The attribute uses an expression that can be resolved differently depending on system properties. After migration, this attribute must be added back with an actual value instead of the expression.

    -
    -

    This warning appears when the migration logic needs to know the concrete value of attribute X during migration, but instead such value includes an expression that’s can’t be resolved, so the actual value can not be determined, and the attribute is discarded. It happens in several cases, -for instance:

    -
    -
    -
      -
    • -

      cluster-connection forward-when-no-consumers. This boolean attribute has been replaced by the message-load-balancing-type attribute (which is an enum of OFF, STRICT, ON_DEMAND)

      -
    • -
    • -

      broadcast-group and discovery-group’s jgroups-stack and jgroups-channel attributes. They reference other resources and we no longer accept expressions for them.

      -
    • -
    -
    -
  • -
  • -

    Can not migrate attribute X from resource Y. This attribute is not supported by the new messaging-activemq subsystem.

    -
    -

    Some attributes are no longer supported in the new messaging-activemq subsystem and are simply discarded:

    -
    -
    -
      -
    • -

      hornetq-server’s failback-delay

      -
    • -
    • -

      http-connector’s use-nio attribute

      -
    • -
    • -

      http-acceptor’s use-nio attribute

      -
    • -
    • -

      remote-connector’s use-nio attribute

      -
    • -
    • -

      remote-acceptor’s use-nio attribute

      -
    • -
    -
    -
  • -
-
-
-
-
XML Configuration
-
-

The XML configuration has changed significantly with the new messaging-activemq subsystem to provide a XML scheme more consistent with other WildFly subsystems.

-
-
-

It is not advised to change the XML configuration of the legacy messaging subsystem to conform to the new messaging-activemq subsystem. Instead, invoke the legacy subsystem migrate operation. This operation will write the XML configuration of the new messaging-activemq subsystem as a part of its execution.

-
-
-
-
Messaging Interceptors
-
-

Messaging Interceptors are significantly different in WildFly 10, requiring both code and configuration changes by the user. In concrete the interceptor base Java class is now org.apache.artemis.activemq.api.core.interceptor.Interceptor, and the user interceptor implementation classes may now be loaded by any server module. Note that prior to WildFly 10 the interceptor classes could only be installed by adding these to the HornetQ module, thus requiring the user to change such module XML descriptor, its module.xml.

-
-
-

With respect to the server XML configuration, the user must now specify the module to load its interceptors in the new messaging-activemq subsystem XML config, e.g:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
-    <server name="default">
-       ...
-        <incoming-interceptors>
-            <class name="org.foo.incoming.myInterceptor" module="org.foo" />
-            <class name="org.bar.incoming.myOtherInterceptor" module="org.bar" />
-        </incoming-interceptors>
-        <outgoing-interceptors>
-            <class name="org.foo.outgoing.myInterceptor" module="org.foo" />
-            <class name="org.bar.outgoing.myOtherInterceptor" module="org.bar" />
-        </outgoing-interceptors>
-   </server>
-</subsystem>
-
-
-
-
-
Jakarta Messaging Destinations
-
-

In previous releases, Jakarta Messaging destination queues were configured in the <jms-destinations> element under the hornetq-server section of the messaging subsystem.

-
-
-
-
<jms-destinations>
-    <jms-queue name="testQueue">
-        <entry name="queue/test"/>
-        <entry name="java:jboss/exported/jms/queue/test"/>
-    </jms-queue>
-</jms-destinations>
-
-
-
-

In WildFly, the Jakarta Messaging destination queue is configured in the default server of the messaging-activemq subsystem.

-
-
-
-
<jms-queue name="testQueue" entries="queue/test java:jboss/exported/jms/queue/test"/>
-
-
-
-
-
-
Messaging Logging
-
-

The prefix of messaging log messages in WildFly is WFLYMSGAMQ, instead of WFLYMSG.

-
-
-
-
Messaging Data
-
-

The location of the messaging data has been changed in the new messaging-activemq subsystem:

-
-
-
    -
  • -

    messagingbindings/ → activemq/bindings/

    -
  • -
  • -

    messagingjournal/ → activemq/journal/

    -
  • -
  • -

    messaginglargemessages/ → activemq/largemessages/

    -
  • -
  • -

    messagingpaging/ → activemq/paging/

    -
  • -
-
-
-

To migrate legacy messaging data, you will have to export the directories used by the legacy messaging subsystem and import them into the new subsystem’s server by using its import-journal operation:

-
-
-
-
/subsystem=messaging-activemq/server=default:import-journal(file=<path to XML dump>)
-
-
-
-

The XML dump is a XML file generated by HornetQ XmlDataExporter util class.

-
-
-
-
-
-

26.4. Application Migration

-
-

Before you migrate your application, you should be aware that some features that were available in previous releases are now deprecated or missing.

-
-
-

26.4.1. EJBs

-
-
CMP Entity EJBs
-
-

Container-Managed Persistence entity beans support is optional in Jakarta EE, and WildFly does not provide support for these.

-
-
-

CMP entity beans are defined in the ejb-jar.xml descriptor, in concrete an entity bean is CMP only if the <entity/> child element named persistence-type is included and has a value of Container. An example:

-
-
-
-
<?xml version="1.1" encoding="UTF-8"?>
-<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
-         version="3.1">
-    <enterprise-beans>
-        <entity>
-            <ejb-name>SimpleBMP</ejb-name>
-            <local-home>org.jboss.as.test.integration.ejb.entity.bmp.BMPLocalHome</local-home>
-            <local>org.jboss.as.test.integration.ejb.entity.bmp.BMPLocalInterface</local>
-            <ejb-class>org.jboss.as.test.integration.ejb.entity.bmp.SimpleBMPBean</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>java.lang.Integer</prim-key-class>
-            <reentrant>true</reentrant>
-        </entity>
-    </enterprise-beans>
-</ejb-jar> 
-
-
-
-

CMP entity beans should be replaced by Jakarta Persistence entities.

-
-
-
-
EJB Client
-
-
Default Remote Connection Port
-
-

The default remote connection port has changed from 4447 to 8080.

-
-
-

In JBoss AS 7, the jboss-ejb-client.properties file looked similar to -the following:

-
-
-
-
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
-remote.connections=default
-remote.connection.default.host=localhost
-remote.connection.default.port=4447
-remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
-
-
-
-

In WildFly, the properties file looks like this:

-
-
-
-
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
-remote.connections=default
-remote.connection.default.host=localhost
-remote.connection.default.port=8080
-remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
-
-
-
-
-
Default Connector
-
-

In WildFly, the default connector has changed from remoting to http-remoting. This change impacts clients that use libraries from one release of JBoss and to connect to server in a different release.

-
-
-
    -
  • -

    If a client application uses the EJB client library from JBoss AS 7 and wants to connect to WildFly 10 server, the server must be configured to expose a remoting connector on a port other than 8080. The client must then connect using that newly configured connector.

    -
  • -
  • -

    A client application that uses the EJB client library from WildFly 10 and wants to connect to a JBoss AS 7 server must be aware that the server instance does not use the http-remoting connector and instead uses a remoting connector. This is achieved by defining a new client-side connection property.

    -
    -
    -
    remote.connection.default.protocol=remote
    -
    -
    -
  • -
-
-
-

External applications using JNDI, to remotely lookup up EJBs in a WildFly 10 server, may also need to be migrated, see #Remote JNDI Clients section for further information.

-
-
-
-
-
-

26.4.2. Jakarta Messaging

-
-
Proprietary Jakarta Messaging Resource Definitions
-
-

The proprietary XML descriptors, previously used to setup Jakarta Messaging resources, are deprecated in WildFly. Jakarta EE (section EE.5.18) standardized such functionality.

-
-
-

The deprecated descriptors are files bundled in the application package, which name ends with -jms.xml. Their namespace has been changed to urn:jboss:messaging-activemq-deployment:1.0.

-
-
-
-
External Jakarta Messaging Clients
-
-

Jakarta Messaging Resources are remotely looked up using JNDI, and looking up resources in a WildFly 10 server may require changes in the application code, see #Remote JNDI Clients section for further information.

-
-
-
-
-

26.4.3. Jakarta Persistence (and Hibernate)

-
-
Applications That Plan to Use Hibernate ORM 5.3.x
-
-

WildFly ships with Hibernate ORM 5.3.x and those libraries are implicitly added to the application classpath when a persistence.xml is detected during deployment. If your application uses Jakarta Persistence, it will default to using the Hibernate ORM 5.3.x libraries.

-
-
-

Hibernate ORM 5.3.x introduces:

-
-
-
    -
  • -

    Jakarta Persistence 2.2 support

    -
  • -
  • -

    Redesigned metamodel - Complete replacement for the current org.hibernate.mapping code

    -
  • -
  • -

    Query parser - Improved query parser based on Antlr 3/4

    -
  • -
  • -

    Multi-tenancy improvements - Discriminator-based multi-tenancy

    -
  • -
  • -

    Follow-on fetches - Two-phase loading via LoadPlans/EntityGraphs

    -
  • -
-
-
-
-
Applications that currently use Hibernate ORM 4.0 - 4.3
-
-

You should migrate to Hibernate ORM 5.3.x.

-
-
-

For information about the changes implemented between Hibernate 4 and Hibernate 5, see -https://github.com/hibernate/hibernate-orm/blob/main/migration-guide.adoc

-
-
-
-
Applications that currently use Hibernate 3
-
-

You should migrate to Hibernate ORM 5.3.x.

-
-
-
-
-

26.4.4. Web Applications

-
-
JBoss Web Valves
-
-

Undertow does not support the JBoss Web Valve functionality. This can be replaced by Undertow Handlers. See the Undertow Handler Authors Guide for more information.

-
-
-

List of valves that were provided with JBoss Web, together with a corresponding Undertow handler, is provided above, in the section on the JBoss Web subsystem.

-
-
-

JBoss Web Valves are specified in the proprietary jboss-web.xml descriptor, through <valve /> element(s). These can be replaced using the <http-handler /> element(s). For example:

-
-
-
-
<jboss-web>
-    <valve>
-        <class-name>org.apache.catalina.valves.RequestDumperValve</class-name>
-        <module>org.jboss.as.web</module></valve>
-</jboss-web>
-
-
-
-

can be replaced by

-
-
-
-
<jboss-web>
-    <http-handler>
-        <class-name>io.undertow.server.handlers.RequestDumpingHandler</class-name>
-        <module>io.undertow.core</module>
-    </http-handler>
-</jboss-web>
-
-
-
-
-
-

26.4.5. Web Services

-
-
CXF Spring Webservices
-
-

The setup of web service’s endpoints and clients, through a Spring XML descriptor, driving a CXF bus creation, is no longer supported in WildFly.

-
-
-

Any application containing a jbossws-cxf.xml must migrate all functionality specified in such XML descriptor, mostly already supported by the Jakarta XML Web Services specification, included in Jakarta EE. It is still possible to rely on direct Apache CXF API usage, loosing the Jakarta EE portability of the application, for instance when specific Apache CXF functionalities are needed. See the Apache CXF Integration document for further information.

-
-
-
-
Jakarta XML RPC
-
-

Jakarta XML RPC is an API for building Web services and clients that used remote procedure calls (RPC) and XML, which was deprecated in Jakarta EE, and is no longer supported by WildFly.

-
-
-

Jakarta XML RPC Web Services may be identified by the presence of the XML descriptor named webservices.xml, containing a <webservice-description/> element that includes a child element named <jaxrpc-mapping-file/>. An example:

-
-
-
-
<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd" version="1.1">
-    <webservice-description>
-        <webservice-description-name>HelloService</webservice-description-name>
-        <wsdl-file>WEB-INF/wsdl/HelloService.wsdl</wsdl-file>
-        <jaxrpc-mapping-file>WEB-INF/mapping.xml</jaxrpc-mapping-file>
-        <port-component>
-            <port-component-name>Hello</port-component-name>
-            <wsdl-port>HelloPort</wsdl-port>
-            <service-endpoint-interface>org.jboss.chap12.hello.Hello</service-endpoint-interface>
-            <service-impl-bean>
-                <servlet-link>HelloWorldServlet</servlet-link>
-            </service-impl-bean>
-        </port-component>
-    </webservice-description>
-</webservices>
-
-
-
-

Applications using Jakarta XML RPC should be migrated to use Jakarta XML Web Services, the current Jakarta EE standard web service framework.

-
-
-
-
Jakarta RESTful Web Services 2.1
-
-

Jakarta RESTful Web Services 2.1: The Java API for RESTful Web Services specification is located at https://jakarta.ee/specifications/restful-ws/2.1/

-
-
-

Some changes to the MessageBodyWriter interface may represent a backward incompatible change with respect to JAX-RS 1.X.

-
-
-

Be sure to define a @Produces or @Consumes for your endpoints. Failure to do so may result in an error similar to the following.

-
-
-
-
org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: <OBJECT> of media type: <CONTENT_TYPE>
-
-
-
-
-
REST Client API
-
-

Some REST Client API classes and methods are deprecated or removed, for example: org.jboss.resteasy.client.ClientRequest and org.jboss.resteasy.client.ClientResponse have been removed. Instead, use -jakarta.ws.rs.client.Client and jakarta.ws.rs.core.Response. See the resteasy-jaxrs-client quickstart for an example of an external Jakarta RESTful Web Services RESTEasy client that interacts with a Jakarta RESTful Web Services.

-
-
-
-
-

26.4.6. Application Clustering

-
-
HA Singleton
-
-

JBoss AS 7 introduced singleton services - a mechanism for installing an service such that it would only start on one node in the cluster at a time, a HA Singleton. Such mechanism required usage of a private WildFly Clustering API, designed around the class org.jboss.as.clustering.singleton.SingletonService, and was documented in detail at -https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Development_Guide/Implement_an_HA_Singleton.html, and while not difficult to implement, the installation process suffered from a couple shortcomings:

-
-
-
    -
  • -

    Installing multiple singleton services within a single deployment caused the deployer to hang.

    -
  • -
  • -

    Installing a singleton service required the user to specify several private module dependencies in /META-INF/MANIFEST.MF

    -
  • -
-
-
-

WildFly 10 introduces a new public API for building such services, which significantly simplifies the process, and solves the issues found in the legacy solution. The WildFly 10 Quickstart application named cluster-ha-singleton examples a HA Singleton implementation using the new API, and may be found at https://github.com/jboss-developer/jboss-eap-quickstarts/tree/7.0.x-develop/cluster-ha-singleton -.

-
-
-
-
Stateful Session EJB Clustering
-
-

WildFly 10 no longer requires Stateful Session EJBs to use the org.jboss.ejb3.annotation.Clustered annotation to enable clustering behavior. By default, if the server is started using an HA profile, the state of your SFSBs will be replicated automatically. Disabling this behavior is achievable on a per-EJB basis, by annotating your bean using @Stateful(passivationCapable=false), which is new to the EJB 3.2 specification; or globally through the configuration of the EJB3 subsystem, in the server configuration.

-
-
-

Note that the @Clustered annotation, if used by an application, is simply ignored, the application deployment will not fail.

-
-
-
-
Web Session Clustering
-
-

WildFly 10 introduces a new web session clustering implementation, replacing the one found in JBoss AS 7, which has been around for ages (since JBoss AS 3.2!), and was tightly coupled to the legacy JBoss Web subsystem source code. The most relevant changes in the new implementation are:

-
-
-
    -
  • -

    Introduction of a proper session manager SPI, and an Infinispan implementation of it, decoupled from the web subsystem implementation

    -
  • -
  • -

    Sessions are implemented as a facade over one or more cache entries, which means that the container’s session manager itself does not retain a separate reference to each HttpSession

    -
  • -
  • -

    Pessimistic locking of cache entries effectively ensures that only a single client on a single node ever accesses a given session at any given time

    -
  • -
  • -

    Usage of cache entry grouping, instead of atomic maps, to ensure that multiple cache entries belonging to the same session are co-located.

    -
  • -
  • -

    Session operations within a request only ever use a single batch/transaction. This results in fewer RPCs per request.

    -
  • -
  • -

    Support for write-through cache stores, as well as passivation-only cache stores.

    -
  • -
-
-
-

With respect to applications, the new web session clustering implementation deprecates/reinterprets much of the related configuration, which is included in JBoss’s proprietary web application -XML descriptor, jboss-web.xml:

-
-
-
    -
  • -

    <max-active-sessions/>

    -
    -

    Previously, session creation would fail if an additional session would cause the number of active sessions to exceed the value specified by <max-active-sessions/>.

    -
    -
    -

    In the new implementation, <max-active-sessions/> is used to enable session passivation. If session creation would cause the number of active sessions to exceed <max-active-sessions/>, then the oldest session known to the session manager will passivate to make room for the new session.

    -
    -
  • -
  • -

    <passivation-config/>

    -
    -

    This configuration element and its sub-elements are no longer used in WildFly.

    -
    -
  • -
  • -

    <use-session-passivation/>

    -
    -

    Previously, passivation was enabled via this attribute, yet in the new implementation, passivation is enabled by specifying a non-negative value for <max-active-sessions/>.

    -
    -
  • -
  • -

    <passivation-min-idle-time/>

    -
    -

    Previously, sessions needed to be active for at least a specific amount of time before becoming a candidate for passivation. This could cause session creation to fail, even when passivation was enabled.

    -
    -
    -

    The new implementation does not support this logic and thus avoids this DoS vulnerability.

    -
    -
  • -
  • -

    <passivation-max-idle-time/>

    -
    -

    Previously, a session would be passivated after it was idle for a specific amount of time.

    -
    -
    -

    The new implementation does not support eager passivation - only lazy passivation. Sessions are only passivated when necessary to comply with <max-active-sessions/>.

    -
    -
  • -
  • -

    <replication-config/>

    -
    -

    The new implementation deprecates a number of sub-elements.

    -
    -
  • -
  • -

    <replication-trigger/>

    -
    -

    Previously, session attributes could be treated as either mutable or immutable depending on the values specified by <replication-trigger/>:

    -
    -
    -
      -
    • -

      SET treated all attributes as immutable, requiring a separate HttpSession.setAttribute(…​) to indicate that the value changed.

      -
    • -
    • -

      SET_AND_GET treated all session attributes as mutable.

      -
    • -
    • -

      SET_AND_NON_PRIMITIVE_GET recognized a small set of types, for example strings and boxed primitives, as immutable, and assumed that any other attribute was mutable.

      -
      -

      The new implementation replaces this configuration option with a single, robust strategy. Session attributes are assumed to be mutable unless one of the following is true:

      -
      -
    • -
    • -

      The value is a known immutable value:

      -
      -
        -
      • -

        null

        -
      • -
      • -

        java.util.Collections.EMPTY_LIST, EMPTY_MAP, EMPTY_SET

        -
      • -
      -
      -
    • -
    • -

      The value type is or implements a known immutable type:

      -
      -
        -
      • -

        Boolean, Byte, Character, Double, Float, Integer, Long, Short

        -
      • -
      • -

        java.lang.Enum, StackTraceElement, String

        -
      • -
      • -

        java.io.File, java.nio.file.Path

        -
      • -
      • -

        java.math.BigDecimal, BigInteger, MathContext

        -
      • -
      • -

        java.net.InetAddress, InetSocketAddress, URI, URL

        -
      • -
      • -

        java.security.Permission

        -
      • -
      • -

        java.util.Currency, Locale, TimeZone, UUID

        -
      • -
      -
      -
    • -
    • -

      The value type is annotated with @org.wildfly.clustering.web.annotation.Immutable

      -
    • -
    -
    -
  • -
  • -

    <use-jk/>

    -
    -

    Previously, the instance-id of the node handling a given request was appended to the jsessionid, for use by load balancers such as mod_jk, mod_proxy_balancer, mod_cluster, etc., depending on the value specified for <use-jk/>. In the new implementation, the instance-id, if defined, is always appended to the jsessionid.

    -
    -
  • -
  • -

    <max-unreplicated-interval/>

    -
    -

    Previously, this configuration option was an optimization that would prevent the replicate of a session’s timestamp if no session attribute was changed. While this sounds nice, in practice it doesn’t prevent any RPCs, since session access requires cache transaction RPCs regardless of -whether any session attributes changed. In the new implementation, the timestamp of a session is replicated on every request. This prevents stale session meta data following failover.

    -
    -
  • -
  • -

    <snapshot-mode/>

    -
    -

    Previously, one could configure <snapshot-mode/> as INSTANT or INTERVAL. Infinispan’s replication queue renders this configuration option obsolete.

    -
    -
  • -
  • -

    <snapshot-interval/>

    -
    -

    Only relevant for <snapshot-mode>INTERVAL</snapshot-mode>. See above.

    -
    -
  • -
  • -

    <session-notification-policy/>

    -
    -

    Previously, the value defined by this attribute defined a policy for triggering session events. In the new implementation, this behavior is spec-driven and not configurable.

    -
    -
  • -
-
-
-
-
-

26.4.7. Other Specifications and Frameworks

-
-
Remote JNDI Clients
-
-

WildFly 10’s default JNDI Provider URL has changed, which means that external applications, using JNDI to lookup remote resources, for instance an EJB or a Jakarta Messaging Queue, may need to change the value for the JNDI InitialContext environment’s property named -java.naming.provider.url. The default URL scheme is now -http-remoting, and the default URL port is now 8080.

-
-
-

As an example, considering the application server host is localhost, -then clients previously accessing WildFly 10 would use

-
-
-
-
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory
-java.naming.provider.url=remote://localhost:4447
-
-
-
-

while clients now accessing WildFly should use instead

-
-
-
-
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory
-java.naming.provider.url=http-remoting://localhost:8080
-
-
-
-
-
JSR-88
-
-

The specification which aimed to standardize deployment tasks got very little adoption, due to much more "feature rich" proprietary solutions already included in every vendor application server. It was no surprise that JSR-88 support was dropped from Jakarta EE, and WildFly followed that and dropped support too.

-
-
-

A JSR-88 deployment plan is identified by a XML descriptor named deployment-plan.xml, bundled in a zip/jar archive.

-
-
-
-
Module Dependencies
-
-

Applications defining dependencies to WildFly modules, through the application’s package MANIFEST.MF or jboss-deployment-structure.xml, may be referencing missing modules. When migrating an application, relying on such functionality, the presence of the referenced modules should be validated in advance.

-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-
-
-

27. How do I migrate my application from WebLogic to WildFly

-
-
-

The purpose of this guide is to document the application changes that -are needed to successfully run and deploy WebLogic applications on -WildFly.

-
-
- - - - - -
- - -Feel free to add content in any way you prefer. You do not need to -follow the template below. This is a work in progress. -
-
-
-

27.1. Introduction

-
-

27.1.1. About this Guide

-
-

The purpose of this document is to guide you through the planning -process and migration of fairly simple and standard Oracle WebLogic -applications to WildFly. O

-
-
-
-
-
-
-

28. How do I migrate my application from WebSphere to WildFly

-
-
-

The purpose of this guide is to document the application changes that -are needed to successfully run and deploy WebLogic applications on -WildFly.

-
-
- - - - - -
- - -Feel free to add content in any way you prefer. You do not need to -follow the template below. This is a work in progress. -
-
-
-

28.1. Introduction

-
-

28.1.1. About this Guide

-
-

The purpose of this document is to guide you through the planning -process and migration of fairly simple and standard Oracle WebLogic -applications to WildFly.

-
-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Developer_Guide.html

+ \ No newline at end of file diff --git a/29/Extending_WildFly.html b/29/Extending_WildFly.html index 023d5e471..9fc3e6381 100644 --- a/29/Extending_WildFly.html +++ b/29/Extending_WildFly.html @@ -1,8758 +1,11 @@ - - - - - - -Extending WildFly - - - - - - - -
-
-
-
-

In this document we provide an example of how to extend the kernel -functionality of WildFly via an extension and the subsystem it installs. -The WildFly kernel is very simple and lightweight; most of the -capabilities people associate with an application server are provided -via extensions and their subsystems. The WildFly distribution includes -many extensions and subsystems; the webserver integration is via a -subsystem; the transaction manager integration is via a subsystem, the -Jakarta Enterprise Beans container integration is via a subsystem, etc.

-
-
-

This document is divided into two main sections. The -first is focused on learning by doing. This -section will walk you through the steps needed to create your own -subsystem, and will touch on most of the concepts discussed elsewhere in -this guide. The -second -focuses on a conceptual overview of the key interfaces and classes -described in the example. Readers should feel free to start with the -second section if that better fits their learning style. Jumping back -and forth between the sections is also a good strategy.

-
- -
-
-
-

1. Target Audience

-
-
-

1.1. Prerequisites

-
-

You should know how to download, install and run WildFly. If not please -consult the Getting Started Guide. You -should also be familiar with the management concepts from the -Admin Guide, particularly the -Core management concepts section and -you need Java development experience to follow the example in this -guide.

-
-
-
-

1.2. Examples in this guide

-
-

Most of the examples in this guide are being expressed as excerpts of -the XML configuration files or by using a representation of the de-typed -management model.

-
-
-
-
-
-

2. Example subsystem

-
-
-

Our example subsystem will keep track of all deployments of certain -types containing a special marker file, and expose operations to see how -long these deployments have been deployed.

-
-
-

2.1. Create the skeleton project

-
-

To make your life easier we have provided a maven archetype which will -create a skeleton project for implementing subsystems.

-
-
-
-
mvn archetype:generate \
-    -DarchetypeArtifactId=wildfly-subsystem \
-    -DarchetypeGroupId=org.wildfly.archetype \
-    -DarchetypeVersion=26.1.0.Final \
-    -DarchetypeRepository=https://repository.jboss.org/nexus/content/groups/public
-
-
-
-

Maven will download the archetype and it’s dependencies, and ask you -some questions:

-
-
-
-
$ mvn archetype:generate \
-    -DarchetypeArtifactId=wildfly-subsystem \
-    -DarchetypeGroupId=org.wildfly.archetype \
-    -DarchetypeVersion=26.1.0.Final \
-    -DarchetypeRepository=https://repository.jboss.org/nexus/content/groups/public
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building Maven Stub Project (No POM) 1
-[INFO] ------------------------------------------------------------------------
-[INFO]
- 
-.........
- 
-Define value for property 'module': com.acme.corp.tracker
-Define value for property 'groupId': com.acme.corp
-Define value for property 'artifactId': acme-subsystem
-Define value for property 'version':  1.0-SNAPSHOT: :
-Define value for property 'package':  com.acme.corp: : com.acme.corp.tracker
-[INFO] Using property: name = WildFly subsystem project
-Confirm properties configuration:
-groupId: com.acme.corp
-artifactId: acme-subsystem
-version: 1.0-SNAPSHOT
-package: com.acme.corp.tracker
-module: com.acme.corp.tracker
-name: WildFly subsystem project
- Y: : Y
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 1:42.563s
-[INFO] Finished at: Fri Jul 08 14:30:09 BST 2011
-[INFO] Final Memory: 7M/81M
-[INFO] ------------------------------------------------------------------------
-$
-
-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Instruction

1

Enter the module name you wish to use for your extension.

2

Enter the groupId you wish to use

3

Enter the artifactId you wish to use

4

Enter the version you wish to use, or just hit Enter if you wish to -accept the default 1.0-SNAPSHOT

5

Enter the java package you wish to use, or just hit Enter if you -wish to accept the default (which is copied from groupId ).

6

Finally, if you are happy with your choices, hit Enter and Maven -will generate the project for you.

-
-

We now have a skeleton project that you can use to -implement a subsystem. Import the  acme-subsystem project into your -favourite IDE. A nice side-effect of running this in the IDE is that you -can see the javadoc of WildFly classes and interfaces imported by the -skeleton code. If you do a mvn install in the project it will work if -we plug it into WildFly, but before doing that we will change it to do -something more useful.

-
-
-

The rest of this section modifies the skeleton project created by the -archetype to do something more useful, and the full code can be found in -acme-subsystem.zip.

-
-
-

If you do a mvn install in the created project, you will see some -tests being run

-
-
-
-
$mvn install
-[INFO] Scanning for projects...
-[...]
-[INFO] Surefire report directory: /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/surefire-reports
- 
--------------------------------------------------------
- T E S T S
--------------------------------------------------------
-Running com.acme.corp.tracker.extension.SubsystemBaseParsingTestCase
-Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.424 sec
-Running com.acme.corp.tracker.extension.SubsystemParsingTestCase
-Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.074 sec
- 
-Results :
- 
-Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
-[...]
-
-
-
-

We will talk about these later in the -#Testing the -parsers section.

-
-
-
-

2.2. Create the schema

-
-

First, let us define the schema for our subsystem. Rename -src/main/resources/schema/mysubsystem.xsd to -src/main/resources/schema/acme.xsd. Then open acme.xsd and modify it -to the following

-
-
-
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-            targetNamespace="urn:com.acme.corp.tracker:1.0"
-            xmlns="urn:com.acme.corp.tracker:1.0"
-            elementFormDefault="qualified"
-            attributeFormDefault="unqualified"
-            version="1.0">
- 
-   <!-- The subsystem root element -->
-   <xs:element name="subsystem" type="subsystemType"/>
-   <xs:complexType name="subsystemType">
-      <xs:all>
-         <xs:element name="deployment-types" type="deployment-typesType"/>
-      </xs:all>
-   </xs:complexType>
-   <xs:complexType name="deployment-typesType">
-      <xs:choice minOccurs="0" maxOccurs="unbounded">
-         <xs:element name="deployment-type" type="deployment-typeType"/>
-      </xs:choice>
-   </xs:complexType>
-   <xs:complexType name="deployment-typeType">
-      <xs:attribute name="suffix" use="required"/>
-      <xs:attribute name="tick" type="xs:long" use="optional" default="10000"/>
-   </xs:complexType>
-</xs:schema>
-
-
-
-

Note that we modified the xmlns and targetNamespace values to  -urn.com.acme.corp.tracker:1.0. Our new subsystem element has a child -called deployment-types, which in turn can have zero or more children -called deployment-type. Each deployment-type has a required suffix -attribute, and a tick attribute which defaults to true.

-
-
-

Now modify the  com.acme.corp.tracker.extension.SubsystemExtension -class to contain the new namespace.

-
-
-
-
public class SubsystemExtension implements Extension {
- 
-    /** The name space used for the {@code substystem} element */
-    public static final String NAMESPACE = "urn:com.acme.corp.tracker:1.0";
-    ...
-
-
-
-
-

2.3. Design and define the model structure

-
-

The following example xml contains a valid subsystem configuration, we -will see how to plug this in to WildFly later in this tutorial.

-
-
-
-
<subsystem xmlns="urn:com.acme.corp.tracker:1.0">
-   <deployment-types>
-      <deployment-type suffix="sar" tick="10000"/>
-      <deployment-type suffix="war" tick="10000"/>
-   </deployment-types>
-</subsystem>
-
-
-
-

Now when designing our model, we can either do a one to one mapping -between the schema and the model or come up with something slightly or -very different. To keep things simple, let us stay pretty true to the -schema so that when executing a :read-resource(recursive=true) against -our subsystem we’ll see something like:

-
-
-
-
{
-    "outcome" => "success",
-    "result" => {"type" => {
-        "sar" => {"tick" => "10000"},
-        "war" => {"tick" => "10000"}
-    }}
-}
-
-
-
-

Each deployment-type in the xml becomes in the model a child resource -of the subsystem’s root resource. The child resource’s child-type is -type, and it is indexed by its suffix. Each type resource then -contains the tick attribute.

-
-
-

We also need a name for our subsystem, to do that change -com.acme.corp.tracker.extension.SubsystemExtension:

-
-
-
-
public class SubsystemExtension implements Extension {
-    ...
-    /** The name of our subsystem within the model. */
-    public static final String SUBSYSTEM_NAME = "tracker";
-    ...
-
-
-
-

Modify the src/main/resources/com/acme/corp/tracker/LocalDescriptions.properties -with the new extension name, too

-
-
-
-
tracker=My Tracker subsystem
-tracker.add=Operation Adds subsystem
-tracker.remove=Operation Removes subsystem
-tracker.type=The type of file
-tracker.type.add=Operation Adds type child
-tracker.type.remove=Operation Removes type child
-tracker.type.tick=The tick time in millis
-
-
-
-

Once we are finished our subsystem will be available under -/subsystem=tracker.

-
-
-

The SubsystemExtension.initialize() method defines the model, -currently it sets up the basics to add our subsystem to the model:

-
-
-
-
@Override
-public void initialize(ExtensionContext context) {
-    //register subsystem with its model version
-        final SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, ModelVersion.create(1, 0));
-    //register subsystem model with subsystem definition that defines all attributes and operations
-        final ManagementResourceRegistration registration = subsystem.registerSubsystemModel(SubsystemDefinition.INSTANCE);
-    //register describe operation, note that this can be also registered in SubsystemDefinition
-    registration.registerOperationHandler(GenericSubsystemDescribeHandler.DEFINITION, GenericSubsystemDescribeHandler.INSTANCE);
-        //we can register additional submodels here
-    //
-    subsystem.registerXMLElementWriter(parser);
-}
-
-
-
-

The registerSubsystem() call registers our subsystem with the -extension context. At the end of the method we register our parser with -the returned SubsystemRegistration to be able to marshal our -subsystem’s model back to the main configuration file when it is -modified. We will add more functionality to this method later.

-
-
-

2.3.1. Registering the core subsystem model

-
-

Next we obtain a ManagementResourceRegistration by registering the -subsystem model. This is a compulsory step for every new subsystem.

-
-
-
-
final ManagementResourceRegistration registration = subsystem.registerSubsystemModel(SubsystemDefinition.INSTANCE);
-
-
-
-

Its parameter is an implementation of the ResourceDefinition -interface, which means that when you call -/subsystem=tracker:read-resource-description the information you see -comes from model that is defined by SubsystemDefinition.INSTANCE.

-
-
-
-
public class SubsystemDefinition extends PersistentResourceDefinition {
-
-    static final AttributeDefinition[] ATTRIBUTES = { /* you can include attributes here */ };
-
-    static final SubsystemDefinition INSTANCE = new SubsystemDefinition();
-
-    private SubsystemDefinition() {
-        super(SubsystemExtension.SUBSYSTEM_PATH,
-                SubsystemExtension.getResourceDescriptionResolver(null),
-                //We always need to add an 'add' operation
-                SubsystemAdd.INSTANCE,
-                //Every resource that is added, normally needs a remove operation
-                SubsystemRemove.INSTANCE);
-    }
-
-    @Override
-    public void registerOperations(ManagementResourceRegistration resourceRegistration) {
-        super.registerOperations(resourceRegistration);
-        //you can register additional operations here
-    }
-
-    @Override
-    public Collection<AttributeDefinition> getAttributes() {
-        return Arrays.asList(ATTRIBUTES);
-    }
-}
-
-
-
-

Since we need child resource type we need to add new -ResourceDefinition,

-
-
-

The ManagementResourceRegistration obtained in -SubsystemExtension.initialize() is then used to add additional -operations or to register submodels to the /subsystem=tracker address. -Every subsystem and resource must have an ADD method which can be -achieved by providing it in constructor of your ResourceDefinition -just as we did in example above.

-
-
-

Let us first look at the description provider which is quite simple, -it provides information (description, list of attributes, list of children) -describing the structure of an addressable model node or operation.

-
-
-

There are three way to define DescriptionProvider, one is by defining it -by hand using ModelNode, but as this has show to be very error prone -there are lots of helper methods to help you automatically describe the -model. Following example is done by manually defining Description -provider for ADD operation handler

-
-
-
-
/**
-     * Used to create the description of the subsystem add method
-     */
-    public static DescriptionProvider SUBSYSTEM_ADD = new DescriptionProvider() {
-        public ModelNode getModelDescription(Locale locale) {
-            //The locale is passed in so you can internationalize the strings used in the descriptions
- 
-            final ModelNode subsystem = new ModelNode();
-            subsystem.get(OPERATION_NAME).set(ADD);
-            subsystem.get(DESCRIPTION).set("Adds the tracker subsystem");
- 
-            return subsystem;
-        }
-    };
-
-
-
-

You can also use API that helps you do that for you. SimpleOperationDefinitionBuilder -is the class for the case. With a set of fields to build operation’s definitions. -In case you use PersistentResourceDefinition even that part is hidden from you.

-
-
-
-
// Registration of an add operation
-resourceRegistration.registerOperationHandler(new SimpleOperationDefinitionBuilder(ModelDescriptionConstants.ADD, SubsystemExtension.getResourceDescriptionResolver(null)).build(), SubsystemAdd.INSTANCE);
-// Registration of a remove operation
-resourceRegistration.registerOperationHandler(new SimpleOperationDefinitionBuilder(ModelDescriptionConstants.REMOVE, SubsystemExtension.getResourceDescriptionResolver(null)).build(), SubsystemAdd.INSTANCE);
-// Registration of a custom operation
-resourceRegistration.registerOperationHandler(new SimpleOperationDefinitionBuilder("mime-type", SubsystemExtension.getResourceDescriptionResolver("container.mime-mapping")).build(), new MimeTypeStepOperationHandler());
-
-
-
-

The last one is implicit used when you pass the operation handler through the -SimpleResourceDefinition class constructor. A DefaultResourceAddDescriptionProvider -will be create under the hood. For this reason, you don’t need to add a description -provider explicit in this example

-
-
-
-
// The framework will take care to handle a default `DescriptionProvider`
-private SubsystemDefinition() {
-    super(SubsystemExtension.SUBSYSTEM_PATH,
-            SubsystemExtension.getResourceDescriptionResolver(null),
-            //We always need to add an 'add' operation
-            SubsystemAdd.INSTANCE,
-            //Every resource that is added, normally needs a remove operation
-            SubsystemRemove.INSTANCE);
-}
-
-
-
-

Next we have the actual operation handler instance, note that we have -changed its populateModel() method to initialize the type child of -the model.

-
-
-
-
class SubsystemAdd extends AbstractBoottimeAddStepHandler {
- 
-    static final SubsystemAdd INSTANCE = new SubsystemAdd();
-
-    private final Logger log = Logger.getLogger(SubsystemAdd.class); 
-
-    private SubsystemAdd() {
-        super(SubsystemDefinition.ATTRIBUTES);
-    }
- 
-    /** {@inheritDoc} */
-    @Override
-    protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
-        log.info("Populating the model");
-        //Initialize the 'type' child node
-        model.get("type").setEmptyObject();
-    }
-    ....
-
-
-
-

SubsystemAdd also has a performBoottime() method which is used for -initializing the deployer chain associated with this subsystem. We will -talk about the deployers later on. However, the basic idea for all -operation handlers is that we do any model updates before changing the -actual runtime state.

-
-
-

SubsystemRemove extends AbstractRemoveStepHandler which takes care -of removing the resource from the model so we don’t need to override its -performRemove() operation, also the add handler did not install any -services (services will be discussed later) so we can delete the methods -performRuntime() and recoverServices() generated by the archetype.

-
-
-
-
class SubsystemRemove extends AbstractRemoveStepHandler {
- 
-    static final SubsystemRemove INSTANCE = new SubsystemRemove();
- 
-    private final Logger log = Logger.getLogger(SubsystemRemove.class);
- 
-    private SubsystemRemove() {
-    }
-}
-
-
-
-

The description provider for the remove operation is simple and quite -similar to that of the add handler where just name of the method -changes.

-
-
-
-

2.3.2. Registering the subsystem child

-
-

The type child does not exist in our skeleton project so we need to -implement the operations to add and remove them from the model.

-
-
-

Create two constant in SubsystemExtension with the the name and property of -the new child, and mount child path

-
-
-
-
class SubsystemExtension extends Extension {
-    ...
-    protected static final String TICK = "tick";
-    protected static final String TYPE = "type";
-    protected static final PathElement TYPE_PATH = PathElement.pathElement(TYPE);
-    ...
-
-
-
-

Now, we need an add operation to add the type child. Create a class -called com.acme.corp.tracker.extension.TypeAddHandler. In this case we -extend the org.jboss.as.controller.AbstractAddStepHandler. -org.jboss.as.controller.OperationStepHandler is the main -interface for the operation handlers, and AbstractAddStepHandler is an -implementation of that which does the plumbing work for adding a -resource to the model.

-
-
-
-
class TypeAddHandler extends AbstractAddStepHandler {
- 
-    public static final TypeAddHandler INSTANCE = new TypeAddHandler();
- 
-    private TypeAddHandler() {
-    }
-
-
-
-

Then we define subsystem model. Lets call it TypeDefinition and for -ease of use let declare just the tick attribute.

-
-
-
-
public class TypeDefinition {
- 
-    public static final TypeDefinition INSTANCE = new TypeDefinition();
- 
- //we define attribute named tick
-    protected static final SimpleAttributeDefinition TICK =
-        new SimpleAttributeDefinitionBuilder(SubsystemExtension.TICK, ModelType.LONG)
-          .setAllowExpression(true)
-          .setXmlName(SubsystemExtension.TICK)
-          .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES)
-          .setDefaultValue(new ModelNode(1000))
-          .setRequired(true)
-          .build();
- 
-}
-
-
-
-

Which will take care of describing the model for us. As you can see in -example above we define SimpleAttributeDefinition named TICK, this -is a mechanism to define Attributes in more type safe way and to add -more common API to manipulate attributes. As you can see here we define -default value of 1000 as also other constraints and capabilities. There -could be other properties set such as validators, alternate names, xml -name, flags for marking it attribute allows expressions and more.

-
-
-

Then we do the work of updating the model by implementing the -populateModel() method from the AbstractAddStepHandler, which -populates the model’s attribute from the operation parameters. First we -get hold of the model relative to the address of this operation (we will -see later that we will register it against /subsystem=tracker/type=*), -so we just specify an empty relative address, and we then populate our -model with the parameters from the operation. There is operation -validateAndSet on AttributeDefinition that helps us validate and set -the model based on definition of the attribute.

-
-
-
-
public class TypeAddHandler extends AbstractAddStepHandler {
-    ...
-    @Override
-    protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
-        TypeDefinition.TICK.validateAndSet(operation,model);
-    }
-    ...
-
-
-
-

We then override the performRuntime() method to perform our runtime -changes, which in this case involves installing a service into the -controller at the heart of WildFly. ( -AbstractAddStepHandler.performRuntime() is similar to -AbstractBoottimeAddStepHandler.performBoottime() in that the model is -updated before runtime changes are made.

-
-
-
-
public class TypeAddHandler extends AbstractAddStepHandler {
-    ...
-    @Override
-    protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
-        String suffix = PathAddress.pathAddress(operation.get(ModelDescriptionConstants.ADDRESS)).getLastElement().getValue();
-        long tick = TypeDefinition.TICK.resolveModelAttribute(context,model).asLong();
-        TrackerService service = new TrackerService(suffix, tick);
-        ServiceName serviceName = TrackerService.createServiceName(suffix);
-
-        context.getServiceTarget()
-                .addService(serviceName)
-                .setInstance(service)
-                .setInitialMode(Mode.ACTIVE)
-                .install();
-    }
-    ...
-}
-
-
-
-

Since the add methods will be of the format -/subsystem=tracker/suffix=war:add(tick=1234), we look for the last -element of the operation address, which is war in the example just -given and use that as our suffix. We then create an instance of -TrackerService and install that into the service target of the context -and add the created service controller to the newControllers list.

-
-
-

The tracker service is quite simple. All services installed into WildFly -must implement the org.jboss.msc.Service interface.

-
-
-
-
public class TrackerService implements Service {
-
-
-
-

We then have some fields to keep the tick count and a thread which when -run outputs all the deployments registered with our service.

-
-
-
-
private AtomicLong tick = new AtomicLong(10000);
- 
-private Set<String> deployments = Collections.synchronizedSet(new HashSet<String>());
-private Set<String> coolDeployments = Collections.synchronizedSet(new HashSet<String>());
-private final String suffix;
- 
-private Thread OUTPUT = new Thread() {
-    @Override
-    public void run() {
-        while (true) {
-            try {
-                Thread.sleep(tick.get());
-                System.out.println("Current deployments deployed while " + suffix + " tracking active:\n" + deployments
-                   + "\nCool: " + coolDeployments.size());
-            } catch (InterruptedException e) {
-                interrupted();
-                break;
-            }
-        }
-    }
-};
- 
-public TrackerService(String suffix, long tick) {
-    this.suffix = suffix;
-    this.tick.set(tick);
-}
-
-
-
-

Next we have three methods which come from the Service interface. -getValue() returns this service, start() is called when the service -is started by the controller, stop is called when the service is -stopped by the controller, and they start and stop the thread outputting -the deployments.

-
-
-
-
@Override
-public TrackerService getValue() throws IllegalStateException, IllegalArgumentException {
-    return this;
-}
- 
-@Override
-public void start(StartContext context) throws StartException {
-    OUTPUT.start();
-}
- 
-@Override
-public void stop(StopContext context) {
-    OUTPUT.interrupt();
-}
-
-
-
-

Next we have a utility method to create the ServiceName which is used -to register the service in the controller.

-
-
-
-
public static ServiceName createServiceName(String suffix) {
-        return ServiceName.JBOSS.append("tracker", suffix);
-}
-
-
-
-

Finally we have some methods to add and remove deployments, and to set -and read the tick. The 'cool' deployments will be explained later.

-
-
-
-
public void addDeployment(String name) {
-    deployments.add(name);
-}
- 
-public void addCoolDeployment(String name) {
-    coolDeployments.add(name);
-}
- 
-public void removeDeployment(String name) {
-    deployments.remove(name);
-    coolDeployments.remove(name);
-}
- 
-void setTick(long tick) {
-    this.tick.set(tick);
-}
- 
-public long getTick() {
-    return this.tick.get();
-}
-}//TrackerService - end
-
-
-
-

Since we are able to add type children, we need a way to be able to -remove them, so we create a -com.acme.corp.tracker.extension.TypeRemoveHandler. In this case we -extend AbstractRemoveStepHandler which takes care of removing the -resource from the model so we don’t need to override its -performRemove() operation. Once the add handler installs the TrackerService, -we need to remove that in the performRuntime() method.

-
-
-
-
public class TypeRemoveHandler extends AbstractRemoveStepHandler {
- 
-    public static final TypeRemoveHandler INSTANCE = new TypeRemoveHandler();
- 
-    private TypeRemoveHandler() {
-    }
- 
- 
-    @Override
-    protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
-        String suffix = PathAddress.pathAddress(operation.get(ModelDescriptionConstants.ADDRESS)).getLastElement().getValue();
-        ServiceName name = TrackerService.createServiceName(suffix);
-        context.removeService(name);
-    }
- 
-}
-
-
-
-

So far TypeDefinition is just a simple Java class, however, it must be an -addressable management resource. Modify this class to extend SimpleResourceDefinition, -register the Add and Remove handlers created before and register the TICK attribute:

-
-
-
-
public class TypeDefinition extends SimpleResourceDefinition {
-
-    public static final TypeDefinition INSTANCE = new TypeDefinition();
-
-    protected static final SimpleAttributeDefinition TICK =
-            new SimpleAttributeDefinitionBuilder(SubsystemExtension.TICK, ModelType.LONG)
-              .setAllowExpression(true)
-              .setXmlName(SubsystemExtension.TICK)
-              .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES)
-              .setDefaultValue(new ModelNode(1000))
-              .setRequired(true)
-              .build();
-
-    public TypeDefinition() {
-        super(
-                SubsystemExtension.TYPE_PATH,
-                SubsystemExtension.getResourceDescriptionResolver(SubsystemExtension.TYPE),
-                TypeAddHandler.INSTANCE,
-                TypeRemoveHandler.INSTANCE
-        );
-    }
-
-    @Override
-    public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
-        resourceRegistration.registerReadWriteAttribute(TICK, null, TrackerTickHandler.INSTANCE);
-    }
-
-}
-
-
-
-

Then finally we need to specify that our new type child and associated -handlers go under /subsystem=tracker/type=* in the model by adding -registering it with the model in SubsystemExtension.initialize(). So -we add the following just before the end of the method.

-
-
-
-
@Override
-public void initialize(ExtensionContext context){
-    final SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, ModelVersion.create(1, 0));
-    final ManagementResourceRegistration registration = subsystem.registerSubsystemModel(SubsystemExtension.INSTANCE);
-    registration.registerOperationHandler(GenericSubsystemDescribeHandler.DEFINITION, GenericSubsystemDescribeHandler.INSTANCE);
-    //Add the type child
-    ManagementResourceRegistration typeChild = registration.registerSubModel(TypeDefinition.INSTANCE);
-    subsystem.registerXMLElementWriter(parser);
-}
-
-
-
-

The above first creates a child of our main subsystem registration for -the relative address type=*, and gets the typeChild registration.
-To this we add the TypeAddHandler and TypeRemoveHandler.
-The add variety is added under the name add and the remove handler -under the name remove, and for each registered operation handler we -use the handler singleton instance as both the handler parameter and as -the DescriptionProvider.

-
-
-

Finally, we register tick as a read/write attribute, the null -parameter means we don’t do anything special with regards to reading it, -for the write handler we supply it with an operation handler called -TrackerTickHandler.
-Registering it as a read/write attribute means we can use the -:write-attribute operation to modify the value of the parameter, and -it will be handled by TrackerTickHandler.

-
-
-

Not registering a write attribute handler makes the attribute read only.

-
-
-

TrackerTickHandler extends AbstractWriteAttributeHandler
-directly, and so must implement its applyUpdateToRuntime and -revertUpdateToRuntime method.
-This takes care of model manipulation (validation, setting) but leaves -us to do just to deal with what we need to do.

-
-
-
-
class TrackerTickHandler extends AbstractWriteAttributeHandler<Void> {
- 
-    public static final TrackerTickHandler INSTANCE = new TrackerTickHandler();
- 
-    private TrackerTickHandler() {
-        super(TypeDefinition.TICK);
-    }
- 
-    protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName,
-              ModelNode resolvedValue, ModelNode currentValue, HandbackHolder<Void> handbackHolder) throws OperationFailedException {
- 
-        modifyTick(context, operation, resolvedValue.asLong());
- 
-        return false;
-    }
- 
-    protected void revertUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode valueToRestore, ModelNode valueToRevert, Void handback){
-        modifyTick(context, operation, valueToRestore.asLong());
-    }
- 
-    private void modifyTick(OperationContext context, ModelNode operation, long value) throws OperationFailedException {
- 
-        final String suffix = PathAddress.pathAddress(operation.get(ModelDescriptionConstants.ADDRESS)).getLastElement().getValue();
-        TrackerService service = (TrackerService) context.getServiceRegistry(true).getRequiredService(TrackerService.createServiceName(suffix)).getValue();
-        service.setTick(value);
-    }
- 
-}
-
-
-
-

The operation used to execute this will be of the form -/subsystem=tracker/type=war:write-attribute(name=tick,value=12345) so -we first get the suffix from the operation address, and the tick -value from the operation parameter’s resolvedValue parameter, and use -that to update the model.

-
-
-
-
-

2.4. Parsing and marshalling of the subsystem xml

-
-

WildFly uses the Stax API to parse the xml files. This is initialized in -SubsystemExtension by mapping our parser onto our namespace:

-
-
-
-
public class SubsystemExtension implements Extension {
- 
-    /** The name space used for the {@code subsystem} element */
-    public static final String NAMESPACE = "urn:com.acme.corp.tracker:1.0";
-    ...
-    protected static final PathElement SUBSYSTEM_PATH = PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME);
-    protected static final PathElement TYPE_PATH = PathElement.pathElement(TYPE);
- 
-   /** The parser used for parsing our subsystem */
-    private final SubsystemParser parser = new SubsystemParser();
- 
-   @Override
-    public void initializeParsers(ExtensionParsingContext context) {
-        context.setSubsystemXmlMapping(NAMESPACE, parser);
-    }
-    ...
-
-
-
-

We then need to write the parser. The contract is that we read our -subsystem’s xml and create the operations that will populate the model -with the state contained in the xml. These operations will then be -executed on our behalf as part of the parsing process. The entry point -is the readElement() method.

-
-
-
-
public class SubsystemExtension implements Extension {
- 
-    /**
-     * The subsystem parser, which uses stax to read and write to and from xml
-     */
-    private static class SubsystemParser implements XMLStreamConstants, XMLElementReader<List<ModelNode>>, XMLElementWriter<SubsystemMarshallingContext> {
- 
-        /** {@inheritDoc} */
-        @Override
-        public void readElement(XMLExtendedStreamReader reader, List<ModelNode> list) throws XMLStreamException {
-            // Require no attributes
-            ParseUtils.requireNoAttributes(reader);
- 
-            //Add the main subsystem 'add' operation
-            final ModelNode subsystem = new ModelNode();
-            subsystem.get(OP).set(ADD);
-            subsystem.get(OP_ADDR).set(PathAddress.pathAddress(SUBSYSTEM_PATH).toModelNode());
-            list.add(subsystem);
- 
-            //Read the children
-            while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
-                if (!reader.getLocalName().equals("deployment-types")) {
-                    throw ParseUtils.unexpectedElement(reader);
-                }
-                while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
-                    if (reader.isStartElement()) {
-                        readDeploymentType(reader, list);
-                    }
-                }
-            }
-        }
- 
-        private void readDeploymentType(XMLExtendedStreamReader reader, List<ModelNode> list) throws XMLStreamException {
-            if (!reader.getLocalName().equals("deployment-type")) {
-                throw ParseUtils.unexpectedElement(reader);
-            }
-            ModelNode addTypeOperation = new ModelNode();
-            addTypeOperation.get(OP).set(ModelDescriptionConstants.ADD);
- 
-            String suffix = null;
-            for (int i = 0; i < reader.getAttributeCount(); i++) {
-                String attr = reader.getAttributeLocalName(i);
-                String value = reader.getAttributeValue(i);
-                if (attr.equals("tick")) {
-                    TypeDefinition.TICK.parseAndSetParameter(value, addTypeOperation, reader);
-                } else if (attr.equals("suffix")) {
-                    suffix = value;
-                } else {
-                    throw ParseUtils.unexpectedAttribute(reader, i);
-                }
-            }
-            ParseUtils.requireNoContent(reader);
-            if (suffix == null) {
-                throw ParseUtils.missingRequiredElement(reader, Collections.singleton("suffix"));
-            }
- 
-            //Add the 'add' operation for each 'type' child
-            PathAddress addr = PathAddress.pathAddress(SUBSYSTEM_PATH, PathElement.pathElement(TYPE, suffix));
-            addTypeOperation.get(OP_ADDR).set(addr.toModelNode());
-            list.add(addTypeOperation);
-        }
-        ...
-
-
-
-

So in the above we always create the add operation for our subsystem. -Due to its address /subsystem=tracker defined by SUBSYSTEM_PATH this -will trigger the SubsystemAdd we created earlier when we invoke -/subsystem=tracker:add. We then parse the child elements and create an -add operation for the child address for each type child. Since the -address will for example be /subsystem=tracker/type=sar (defined by -TYPE_PATH ) and TypeAddHandler is registered for all type -subaddresses the TypeAddHandler will get invoked for those operations. -Note that when we are parsing attribute tick we are using definition -of attribute that we defined in TypeDefintion to parse attribute value -and apply all rules that we specified for this attribute, this also -enables us to property support expressions on attributes.

-
-
-

The parser is also used to marshal the model to xml whenever something -modifies the model, for which the entry point is the writeContent() -method:

-
-
-
-
private static class SubsystemParser implements XMLStreamConstants, XMLElementReader<List<ModelNode>>, XMLElementWriter<SubsystemMarshallingContext> {
-        ...
-        /** {@inheritDoc} */
-        @Override
-        public void writeContent(final XMLExtendedStreamWriter writer, final SubsystemMarshallingContext context) throws XMLStreamException {
-            //Write out the main subsystem element
-            context.startSubsystemElement(SubsystemExtension.NAMESPACE, false);
-            writer.writeStartElement("deployment-types");
-            ModelNode node = context.getModelNode();
-            ModelNode type = node.get(TYPE);
-            for (Property property : type.asPropertyList()) {
- 
-                //write each child element to xml
-                writer.writeStartElement("deployment-type");
-                writer.writeAttribute("suffix", property.getName());
-                ModelNode entry = property.getValue();
-                TypeDefinition.TICK.marshallAsAttribute(entry, true, writer);
-                writer.writeEndElement();
-            }
-            //End deployment-types
-            writer.writeEndElement();
-            //End subsystem
-            writer.writeEndElement();
-        }
-    }
-
-
-
-

Then we have to implement the SubsystemDescribeHandler which -translates the current state of the model into operations similar to the -ones created by the parser. The SubsystemDescribeHandler is only used -when running in a managed domain, and is used when the host controller -queries the domain controller for the configuration of the profile used -to start up each server. In our case the SubsystemDescribeHandler adds -the operation to add the subsystem and then adds the operation to add -each type child. Since we are using ResourceDefinitinon for defining -subsystem all that is generated for us, but if you want to customize -that you can do it by implementing it like this.

-
-
-
-
private static class SubsystemDescribeHandler implements OperationStepHandler, DescriptionProvider {
-        static final SubsystemDescribeHandler INSTANCE = new SubsystemDescribeHandler();
- 
-        public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
-            //Add the main operation
-            context.getResult().add(createAddSubsystemOperation());
- 
-            //Add the operations to create each child
- 
-            ModelNode node = context.readModel(PathAddress.EMPTY_ADDRESS);
-            for (Property property : node.get("type").asPropertyList()) {
- 
-                ModelNode addType = new ModelNode();
-                addType.get(OP).set(ModelDescriptionConstants.ADD);
-                PathAddress addr = PathAddress.pathAddress(SUBSYSTEM_PATH, PathElement.pathElement("type", property.getName()));
-                addType.get(OP_ADDR).set(addr.toModelNode());
-                if (property.getValue().hasDefined("tick")) {
-                   TypeDefinition.TICK.validateAndSet(property,addType);
-                }
-                context.getResult().add(addType);
-            }
-            context.completeStep();
-        }
- 
- 
-}
-
-
-
-

2.4.1. Testing the parsers

-
-

From 7.0.1 the testing framework is now brought in via the -org.jboss.as:jboss-as-subsystem-test maven artifact, and the test’s -superclass is org.jboss.as.subsystem.test.AbstractSubsystemTest. The -concepts are the same but more and more functionality will be available -as JBoss AS 7 is developed.

-
-
-

Now that we have modified our parsers we need to update our tests to -reflect the new model. There are currently three tests testing the basic -functionality, something which is a lot easier to debug from your IDE -before you plug it into the application server. We will talk about these -tests in turn and they all live in -com.acme.corp.tracker.extension.SubsystemParsingTestCase. -SubsystemParsingTestCase extends AbstractSubsystemTest which does a -lot of the setup for you and contains utility methods for verifying -things from your test. See the javadoc of that class for more -information about the functionality available to you. And by all means -feel free to add more tests for your subsystem, here we are only testing -for the best case scenario while you will probably want to throw in a -few tests for edge cases.

-
-
-

The first test we need to modify is testParseSubsystem(). It tests -that the parsed xml becomes the expected operations that will be parsed -into the server, so let us tweak this test to match our subsystem. First -we tell the test to parse the xml into operations

-
-
-
-
@Test
-public void testParseSubsystem() throws Exception {
-    //Parse the subsystem xml into operations
-    String subsystemXml =
-            "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
-            "   <deployment-types>" +
-            "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
-            "   </deployment-types>" +
-            "</subsystem>";
-    List<ModelNode> operations = super.parse(subsystemXml);
-
-
-
-

There should be one operation for adding the subsystem itself and an -operation for adding the deployment-type, so check we got two -operations

-
-
-
-
///Check that we have the expected number of operations
-Assert.assertEquals(2, operations.size());
-
-
-
-

Now check that the first operation is add for the address -/subsystem=tracker:

-
-
-
-
//Check that each operation has the correct content
-//The add subsystem operation will happen first
-ModelNode addSubsystem = operations.get(0);
-Assert.assertEquals(ADD, addSubsystem.get(OP).asString());
-PathAddress addr = PathAddress.pathAddress(addSubsystem.get(OP_ADDR));
-Assert.assertEquals(1, addr.size());
-PathElement element = addr.getElement(0);
-Assert.assertEquals(SUBSYSTEM, element.getKey());
-Assert.assertEquals(SubsystemExtension.SUBSYSTEM_NAME, element.getValue());
-
-
-
-

Then check that the second operation is add for the address -/subsystem=tracker, and that 12345 was picked up for the value of -the tick parameter:

-
-
-
-
//Then we will get the add type operation
-    ModelNode addType = operations.get(1);
-    Assert.assertEquals(ADD, addType.get(OP).asString());
-    Assert.assertEquals(12345, addType.get("tick").asLong());
-    addr = PathAddress.pathAddress(addType.get(OP_ADDR));
-    Assert.assertEquals(2, addr.size());
-    element = addr.getElement(0);
-    Assert.assertEquals(SUBSYSTEM, element.getKey());
-    Assert.assertEquals(SubsystemExtension.SUBSYSTEM_NAME, element.getValue());
-    element = addr.getElement(1);
-    Assert.assertEquals("type", element.getKey());
-    Assert.assertEquals("tst", element.getValue());
-}
-
-
-
-

The second test we need to modify is testInstallIntoController() which -tests that the xml installs properly into the controller. In other words -we are making sure that the add operations we created earlier work -properly. First we create the xml and install it into the controller. -Behind the scenes this will parse the xml into operations as we saw in -the last test, but it will also create a new controller and boot that up -using the created operations

-
-
-
-
@Test
-public void testInstallIntoController() throws Exception {
-    //Parse the subsystem xml and install into the controller
-    String subsystemXml =
-            "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
-            "   <deployment-types>" +
-            "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
-            "   </deployment-types>" +
-            "</subsystem>";
-    KernelServices services = super.createKernelServicesBuilder(null).setSubsystemXml(subsystemXml).build();
-
-
-
-

The returned KernelServices allow us to execute operations on the -controller, and to read the whole model.

-
-
-
-
//Read the whole model and make sure it looks as expected
-ModelNode model = services.readWholeModel();
-//Useful for debugging :-)
-//System.out.println(model);
-
-
-
-

Now we make sure that the structure of the model within the controller -has the expected format and values

-
-
-
-
    Assert.assertTrue(model.get(SUBSYSTEM).hasDefined(SubsystemExtension.SUBSYSTEM_NAME));
-    Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME).hasDefined("type"));
-    Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type").hasDefined("tst"));
-    Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "tst").hasDefined("tick"));
-    Assert.assertEquals(12345, model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "tst", "tick").asLong());
-}
-
-
-
-

The last test provided is called testParseAndMarshalModel(). It’s main -purpose is to make sure that our SubsystemParser.writeContent() works -as expected. This is achieved by starting a controller in the same way -as before

-
-
-
-
@Test
-public void testParseAndMarshalModel() throws Exception {
-    //Parse the subsystem xml and install into the first controller
-    String subsystemXml =
-            "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
-            "   <deployment-types>" +
-            "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
-            "   </deployment-types>" +
-            "</subsystem>";
-    KernelServices servicesA = super.createKernelServicesBuilder(null).setSubsystemXml(subsystemXml).build();
-
-
-
-

Now we read the model and the xml that was persisted from the first -controller, and use that xml to start a second controller

-
-
-
-
//Get the model and the persisted xml from the first controller
-ModelNode modelA = servicesA.readWholeModel();
-String marshalled = servicesA.getPersistedSubsystemXml();
- 
-//Install the persisted xml from the first controller into a second controller
-KernelServices servicesB = super.createKernelServicesBuilder(null).setSubsystemXml(marshalled).build();
-
-
-
-

Finally we read the model from the second controller, and make sure that -the models are identical by calling compare() on the test superclass.

-
-
-
-
    ModelNode modelB = servicesB.readWholeModel();
- 
-    //Make sure the models from the two controllers are identical
-    super.compare(modelA, modelB);
-}
-
-
-
-

To test the removal of the the subsystem and child resources we modify -the testSubsystemRemoval() test provided by the archetype:

-
-
-
-
/**
-     * Tests that the subsystem can be removed
-     */
-    @Test
-    public void testSubsystemRemoval() throws Exception {
-        //Parse the subsystem xml and install into the first controller
-
-
-
-

We provide xml for the subsystem installing a child, which in turn -installs a TrackerService

-
-
-
-
String subsystemXml =
-                "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
-                "   <deployment-types>" +
-                "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
-                "   </deployment-types>" +
-                "</subsystem>";
-KernelServices services = super.createKernelServicesBuilder(null).setSubsystemXml(subsystemXml).build();
-
-
-
-

Having installed the xml into the controller we make sure the -TrackerService is there

-
-
-
-
//Sanity check to test the service for 'tst' was there
-services.getContainer().getRequiredService(TrackerService.createServiceName("tst"));
-
-
-
-

This call from the subsystem test harness will call remove for each -level in our subsystem, children first and validate
-that the subsystem model is empty at the end.

-
-
-
-
//Checks that the subsystem was removed from the model
-super.assertRemoveSubsystemResources(services);
-
-
-
-

Finally we check that all the services were removed by the remove -handlers

-
-
-
-
//Check that any services that were installed were removed here
-    try {
-        services.getContainer().getRequiredService(TrackerService.createServiceName("tst"));
-        Assert.fail("Should have removed services");
-    } catch (Exception expected) {
-    }
-}
-
-
-
-

For good measure let us throw in another test which adds a -deployment-type and also changes its attribute at runtime. So first of -all boot up the controller with the same xml we have been using so far

-
-
-
-
@Test
-public void testExecuteOperations() throws Exception {
-    String subsystemXml =
-            "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
-            "   <deployment-types>" +
-            "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
-            "   </deployment-types>" +
-            "</subsystem>";
-    KernelServices services = super.createKernelServicesBuilder(null).setSubsystemXml(subsystemXml).build();
-
-
-
-

Now create an operation which does the same as the following CLI command -/subsystem=tracker/type=foo:add(tick=1000)

-
-
-
-
//Add another type
-PathAddress fooTypeAddr = PathAddress.pathAddress(
-        PathElement.pathElement(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME),
-        PathElement.pathElement("type", "foo"));
-ModelNode addOp = new ModelNode();
-addOp.get(OP).set(ADD);
-addOp.get(OP_ADDR).set(fooTypeAddr.toModelNode());
-addOp.get("tick").set(1000);
-
-
-
-

Execute the operation and make sure it was successful

-
-
-
-
ModelNode result = services.executeOperation(addOp);
-Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
-
-
-
-

Read the whole model and make sure that the original data is still there -(i.e. the same as what was done by testInstallIntoController()

-
-
-
-
ModelNode model = services.readWholeModel();
-Assert.assertTrue(model.get(SUBSYSTEM).hasDefined(SubsystemExtension.SUBSYSTEM_NAME));
-Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME).hasDefined("type"));
-Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type").hasDefined("tst"));
-Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "tst").hasDefined("tick"));
-Assert.assertEquals(12345, model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "tst", "tick").asLong());
-
-
-
-

Then make sure our new type has been added:

-
-
-
-
Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type").hasDefined("foo"));
-Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "foo").hasDefined("tick"));
-Assert.assertEquals(1000, model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "foo", "tick").asLong());
-
-
-
-

Then we call write-attribute to change the tick value of -/subsystem=tracker/type=foo:

-
-
-
-
//Call write-attribute
-ModelNode writeOp = new ModelNode();
-writeOp.get(OP).set(WRITE_ATTRIBUTE_OPERATION);
-writeOp.get(OP_ADDR).set(fooTypeAddr.toModelNode());
-writeOp.get(NAME).set("tick");
-writeOp.get(VALUE).set(3456);
-result = services.executeOperation(writeOp);
-Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
-
-
-
-

To give you exposure to other ways of doing things, now instead of -reading the whole model to check the attribute, we call read-attribute -instead, and make sure it has the value we set it to.

-
-
-
-
//Check that write attribute took effect, this time by calling read-attribute instead of reading the whole model
-ModelNode readOp = new ModelNode();
-readOp.get(OP).set(READ_ATTRIBUTE_OPERATION);
-readOp.get(OP_ADDR).set(fooTypeAddr.toModelNode());
-readOp.get(NAME).set("tick");
-result = services.executeOperation(readOp);
-Assert.assertEquals(3456, checkResultAndGetContents(result).asLong());
-
-
-
-

Since each type installs its own copy of TrackerService, we get the -TrackerService for type=foo from the service container exposed by -the kernel services and make sure it has the right value

-
-
-
-
    TrackerService service = (TrackerService)services.getContainer().getService(TrackerService.createServiceName("foo")).getValue();
-    Assert.assertEquals(3456, service.getTick());
-}
-
-
-
-

TypeDefinition.TICK.

-
-
-
-
-

2.5. Add the deployers

-
-

When discussing SubsystemAdd we did not mention the work done -to install the deployers, which is done in the following method:

-
-
-
-
    @Override
-    public void performBoottime(OperationContext context, ModelNode operation, ModelNode model,
-            ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers)
-            throws OperationFailedException {
- 
-        log.info("Populating the model");
- 
-        //Add deployment processors here
-        //Remove this if you don't need to hook into the deployers, or you can add as many as you like
-        //see SubDeploymentProcessor for explanation of the phases
-        context.addStep(new AbstractDeploymentChainStep() {
-            public void execute(DeploymentProcessorTarget processorTarget) {
-                processorTarget.addDeploymentProcessor(SubsystemExtension.SUBSYSTEM_NAME, SubsystemDeploymentProcessor.PHASE, SubsystemDeploymentProcessor.PRIORITY, new SubsystemDeploymentProcessor());
- 
-            }
-        }, OperationContext.Stage.RUNTIME);
- 
-    }
-
-
-
-

This adds an extra step which is responsible for installing deployment -processors. You can add as many as you like, or avoid adding any all -together depending on your needs. Each processor has a Phase and a -priority. Phases are sequential, and a deployment passes through each -phases deployment processors. The priority specifies where within a -phase the processor appears. See org.jboss.as.server.deployment.Phase -for more information about phases.

-
-
-

In our case we are keeping it simple and staying with one deployment -processor with the phase and priority created for us by the maven -archetype. The phases will be explained in the next section. The -deployment processor is as follows:

-
-
-
-
public class SubsystemDeploymentProcessor implements DeploymentUnitProcessor {
-    ...
- 
-    @Override
-    public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
-        String name = phaseContext.getDeploymentUnit().getName();
-        TrackerService service = getTrackerService(phaseContext.getServiceRegistry(), name);
-        if (service != null) {
-            ResourceRoot root = phaseContext.getDeploymentUnit().getAttachment(Attachments.DEPLOYMENT_ROOT);
-            VirtualFile cool = root.getRoot().getChild("META-INF/cool.txt");
-            service.addDeployment(name);
-            if (cool.exists()) {
-                service.addCoolDeployment(name);
-            }
-        }
-    }
- 
-    @Override
-    public void undeploy(DeploymentUnit context) {
-        context.getServiceRegistry();
-        String name = context.getName();
-        TrackerService service = getTrackerService(context.getServiceRegistry(), name);
-        if (service != null) {
-            service.removeDeployment(name);
-        }
-    }
- 
-    private TrackerService getTrackerService(ServiceRegistry registry, String name) {
-        int last = name.lastIndexOf(".");
-        String suffix = name.substring(last + 1);
-        ServiceController<?> container = registry.getService(TrackerService.createServiceName(suffix));
-        if (container != null) {
-            TrackerService service = (TrackerService)container.getValue();
-            return service;
-        }
-        return null;
-    }
-}
-
-
-
-

The deploy() method is called when a deployment is being deployed. In -this case we look for the TrackerService instance for the service name -created from the deployment’s suffix. If there is one it means that we -are meant to be tracking deployments with this suffix (i.e. -TypeAddHandler was called for this suffix), and if we find one we add -the deployment’s name to it. Similarly undeploy() is called when a -deployment is being undeployed, and if there is a TrackerService -instance for the deployment’s suffix, we remove the deployment’s name -from it.

-
-
-

2.5.1. Deployment phases and attachments

-
-

The code in the SubsystemDeploymentProcessor uses an attachment, which -is the means of communication between the individual deployment -processors. A deployment processor belonging to a phase may create an -attachment which is then read further along the chain of deployment unit -processors. In the above example we look for the -Attachments.DEPLOYMENT_ROOT attachment, which is a view of the file -structure of the deployment unit put in place before the chain of -deployment unit processors is invoked.

-
-
-

As mentioned above, the deployment unit processors are organized in -phases, and have a relative order within each phase. A deployment unit -passes through all the deployment unit processors in that order. A -deployment unit processor may choose to take action or not depending on -what attachments are available. Let’s take a quick look at what the -deployment unit processors for in the phases described in -org.jboss.as.server.deployment.Phase.

-
-
-
STRUCTURE
-
-

The deployment unit processors in this phase determine the structure of -a deployment, and looks for sub deployments and metadata files.

-
-
-
-
PARSE
-
-

In this phase the deployment unit processors parse the deployment -descriptors and build up the annotation index. Class-Path entries from -the META-INF/MANIFEST.MF are added.

-
-
-
-
DEPENDENCIES
-
-

Extra class path dependencies are added. For example if deploying a -war file, the commonly needed dependencies for a web application are -added.

-
-
-
-
CONFIGURE_MODULE
-
-

In this phase the modular class loader for the deployment is created. No -attempt should be made loading classes from the deployment until after -this phase.

-
-
-
-
POST_MODULE
-
-

Now that our class loader has been constructed we have access to the -classes. In this stage deployment processors may use the -Attachments.REFLECTION_INDEX attachment which is a deployment index -used to obtain members of classes in the deployment, and to invoke upon -them, bypassing the inefficiencies of using java.lang.reflect -directly.

-
-
-
-
INSTALL
-
-

Install new services coming from the deployment.

-
-
-
-
CLEANUP
-
-

Attachments put in place earlier in the deployment unit processor chain -may be removed here.

-
-
-
-
-
-

2.6. Integrate with WildFly

-
-

Now that we have all the code needed for our subsystem, we can build our -project by running mvn install

-
-
-
-
[kabir ~/sourcecontrol/temp/archetype-test/acme-subsystem]
-$mvn install
-[INFO] Scanning for projects...
-[...]
-main:
-   [delete] Deleting: /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/null1004283288
-   [delete] Deleting directory /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/module
-     [copy] Copying 1 file to /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/module/com/acme/corp/tracker/main
-     [copy] Copying 1 file to /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/module/com/acme/corp/tracker/main
-     [echo] Module com.acme.corp.tracker has been created in the target/module directory. Copy to your JBoss AS 7 installation.
-[INFO] Executed tasks
-[INFO]
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ acme-subsystem ---
-[INFO] Installing /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/acme-subsystem.jar to /Users/kabir/.m2/repository/com/acme/corp/acme-subsystem/1.0-SNAPSHOT/acme-subsystem-1.0-SNAPSHOT.jar
-[INFO] Installing /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/pom.xml to /Users/kabir/.m2/repository/com/acme/corp/acme-subsystem/1.0-SNAPSHOT/acme-subsystem-1.0-SNAPSHOT.pom
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 5.851s
-[INFO] Finished at: Mon Jul 11 23:24:58 BST 2011
-[INFO] Final Memory: 7M/81M
-[INFO] ------------------------------------------------------------------------
-
-
-
-

This will have built our project and assembled a module for us that can -be used for installing it into WildFly. If you go to the target/module -folder where you built the project you will see the module

-
-
-
-
$ls target/module/com/acme/corp/tracker/main/
-acme-subsystem.jar  module.xml
-
-
-
-

The module.xml comes from src/main/resources/module/main/module.xml -and is used to define your module. It says that it contains the -acme-subsystem.jar:

-
-
-
-
<module xmlns="urn:jboss:module:1.9" name="com.acme.corp.tracker">
-    <resources>
-        <resource-root path="acme-subsystem.jar"/>
-    </resources>
-
-
-
-

And has a default set of dependencies needed by every subsystem created. -If your subsystem requires additional module dependencies you can add -them here before building and installing.

-
-
-
-
    <dependencies>
-        <module name="java.se"/>
-        <module name="org.jboss.staxmapper"/>
-        <module name="org.jboss.as.controller"/>
-        <module name="org.jboss.as.server"/>
-        <module name="org.jboss.modules"/>
-        <module name="org.jboss.msc"/>
-        <module name="org.jboss.logging"/>
-        <module name="org.jboss.vfs"/>
-    </dependencies>
-</module>
-
-
-
-

Note that the name of the module corresponds to the directory structure -containing it. Now copy the target/module/com/acme/corp/tracker/main/ -directory and its contents to -$WFLY/modules/com/acme/corp/tracker/main/ (where $WFLY is the root -of your WildFly install).

-
-
-

Next we need to modify $WFLY/standalone/configuration/standalone.xml. -First we need to add our new module to the <extensions> section:

-
-
-
-
    <extensions>
-        ...
-        <extension module="org.jboss.as.weld"/>
-        <extension module="com.acme.corp.tracker"/>
-    </extensions>
-
-
-
-

And then we have to add our subsystem to the <profile> section:

-
-
-
-
    <profile>
-    ...
- 
-        <subsystem xmlns="urn:com.acme.corp.tracker:1.0">
-            <deployment-types>
-                <deployment-type suffix="sar" tick="10000"/>
-                <deployment-type suffix="war" tick="10000"/>
-            </deployment-types>
-        </subsystem>
-    ...
-    </profile>
-
-
-
-

Adding this to a managed domain works exactly the same apart from in -this case you need to modify $WFLY/domain/configuration/domain.xml.

-
-
-

Now start up WildFly by running $WFLY/bin/standalone.sh and you should -see messages like these after the server has started, which means our -subsystem has been added and our TrackerService is working:

-
-
-
-
15:27:33,838 INFO  [org.jboss.as] (Controller Boot Thread) JBoss AS 7.0.0.Final "Lightning" started in 2861ms - Started 94 of 149 services (55 services are passive or on-demand)
-15:27:42,966 INFO  [stdout] (Thread-8) Current deployments deployed while sar tracking active:
-15:27:42,966 INFO  [stdout] (Thread-8) []
-15:27:42,967 INFO  [stdout] (Thread-8) Cool: 0
-15:27:42,967 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
-15:27:42,967 INFO  [stdout] (Thread-9) []
-15:27:42,967 INFO  [stdout] (Thread-9) Cool: 0
-15:27:52,967 INFO  [stdout] (Thread-8) Current deployments deployed while sar tracking active:
-15:27:52,967 INFO  [stdout] (Thread-8) []
-15:27:52,967 INFO  [stdout] (Thread-8) Cool: 0
-
-
-
-

If you run the command line interface you can execute some commands to -see more about the subsystem. For example

-
-
-
-
[standalone@localhost:9999 /] /subsystem=tracker/:read-resource-description(recursive=true, operations=true)
-
-
-
-

will return a lot of information, including a description of our subsystem -generated automatically by a DescriptionProvider

-
-
-

To see the current subsystem state you can execute

-
-
-
-
[standalone@localhost:9999 /] /subsystem=tracker/:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {"type" => {
-        "war" => {"tick" => 10000L},
-        "sar" => {"tick" => 10000L}
-    }}
-}
-
-
-
-

We can remove both the deployment types which removes them from the -model:

-
-
-
-
[standalone@localhost:9999 /] /subsystem=tracker/type=sar:remove
-{"outcome" => "success"}
-[standalone@localhost:9999 /] /subsystem=tracker/type=war:remove
-{"outcome" => "success"}
-[standalone@localhost:9999 /] /subsystem=tracker/:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {"type" => undefined}
-}
-
-
-
-

You should now see the output from the TrackerService instances having -stopped.

-
-
-

Now, let’s add the war tracker again:

-
-
-
-
[standalone@localhost:9999 /] /subsystem=tracker/type=war:add
-{"outcome" => "success"}
-[standalone@localhost:9999 /] /subsystem=tracker/:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {"type" => {"war" => {"tick" => 10000L}}}
-}
-
-
-
-

and the WildFly console should show the messages coming from the war -TrackerService again.

-
-
-

Now let us deploy something. You can find two maven projects for test -wars already built at test1.zip and -test2.zip. If you download them and -extract them to /Downloads/test1 and /Downloads/test2, you can see -that /Downloads/test1/target/test1.war contains a META-INF/cool.txt -while /Downloads/test2/target/test2.war does not contain that file. -From CLI deploy test1.war first:

-
-
-
-
[standalone@localhost:9999 /] deploy ~/Downloads/test1/target/test1.war
-'test1.war' deployed successfully.
-
-
-
-

And you should now see the output from the war TrackerService list the -deployments:

-
-
-
-
15:35:03,712 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) Starting deployment of "test1.war"
-15:35:03,988 INFO  [org.jboss.web] (MSC service thread 1-1) registering web context: /test1
-15:35:03,996 INFO  [org.jboss.as.server.controller] (pool-2-thread-9) Deployed "test1.war"
-15:35:13,056 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
-15:35:13,056 INFO  [stdout] (Thread-9) [test1.war]
-15:35:13,057 INFO  [stdout] (Thread-9) Cool: 1
-
-
-
-

So our test1.war got picked up as a 'cool' deployment. Now if we -deploy test2.war

-
-
-
-
[standalone@localhost:9999 /] deploy ~/sourcecontrol/temp/archetype-test/test2/target/test2.war
-'test2.war' deployed successfully.
-
-
-
-

You will see that deployment get picked up as well but since there is no -META-INF/cool.txt it is not marked as a 'cool' deployment:

-
-
-
-
15:37:05,634 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-4) Starting deployment of "test2.war"
-15:37:05,699 INFO  [org.jboss.web] (MSC service thread 1-1) registering web context: /test2
-15:37:05,982 INFO  [org.jboss.as.server.controller] (pool-2-thread-15) Deployed "test2.war"
-15:37:13,075 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
-15:37:13,075 INFO  [stdout] (Thread-9) [test1.war, test2.war]
-15:37:13,076 INFO  [stdout] (Thread-9) Cool: 1
-
-
-
-

An undeploy

-
-
-
-
[standalone@localhost:9999 /] undeploy test1.war
-Successfully undeployed test1.war.
-
-
-
-

is also reflected in the TrackerService output:

-
-
-
-
15:38:47,901 INFO  [org.jboss.as.server.controller] (pool-2-thread-21) Undeployed "test1.war"
-15:38:47,934 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) Stopped deployment test1.war in 40ms
-15:38:53,091 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
-15:38:53,092 INFO  [stdout] (Thread-9) [test2.war]
-15:38:53,092 INFO  [stdout] (Thread-9) Cool: 0
-
-
-
-

Finally, we registered a write attribute handler for the tick property -of the type so we can change the frequency

-
-
-
-
[standalone@localhost:9999 /] /subsystem=tracker/type=war:write-attribute(name=tick,value=1000)
-{"outcome" => "success"}
-
-
-
-

You should now see the output from the TrackerService happen every -second

-
-
-
-
15:39:43,100 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
-15:39:43,100 INFO  [stdout] (Thread-9) [test2.war]
-15:39:43,101 INFO  [stdout] (Thread-9) Cool: 0
-15:39:44,101 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
-15:39:44,102 INFO  [stdout] (Thread-9) [test2.war]
-15:39:44,105 INFO  [stdout] (Thread-9) Cool: 0
-15:39:45,106 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
-15:39:45,106 INFO  [stdout] (Thread-9) [test2.war]
-
-
-
-

If you open $WFLY/standalone/configuration/standalone.xml you can see -that our subsystem entry reflects the current state of the subsystem:

-
-
-
-
        <subsystem xmlns="urn:com.acme.corp.tracker:1.0">
-            <deployment-types>
-                <deployment-type suffix="war" tick="1000"/>
-            </deployment-types>
-        </subsystem>
-
-
-
-
-

2.7. Expressions

-
-

Expressions are mechanism that enables you to support variables in your -attributes, for instance when you want the value of attribute to be -resolved using system / environment properties.

-
-
-

An example expression is

-
-
-
-
${jboss.bind.address.management:127.0.0.1}
-
-
-
-

which means that the value should be taken from a system property named -jboss.bind.address.management and if it is not defined use -127.0.0.1.

-
-
-

2.7.1. What expression types are supported

-
-
    -
  • -

    System properties, which are resolved using -java.lang.System.getProperty(String key)

    -
  • -
  • -

    Environment properties, which are resolved using -java.lang.System.getEnv(String name).

    -
  • -
  • -

    Encrypted expressions, resolved against the expression -resolver in the elytron subsystem.

    -
  • -
-
-
-

In all cases, the syntax for the expression is

-
-
-
-
${expression_to_resolve}
-
-
-
-

For an expression meant to be resolved against environment properties, -the expression_to_resolve must be prefixed with env.. The portion -after env. will be the name passed to -java.lang.System.getEnv(String name).

-
-
-

Encrypted expressions do not support default values (i.e. the -127.0.0.1 in the jboss.bind.address.management:127.0.0.1 example -above.)

-
-
-
-

2.7.2. How to support expressions in subsystems

-
-

The easiest way is by using AttributeDefinition, which provides support -for expressions just by using it correctly.

-
-
-

When we create an AttributeDefinition all we need to do is mark that is -allows expressions. Here is an example how to define an attribute that -allows expressions to be used.

-
-
-
-
SimpleAttributeDefinition MY_ATTRIBUTE =
-            new SimpleAttributeDefinitionBuilder("my-attribute", ModelType.INT, true)
-                    .setAllowExpression(true)
-                    .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES)
-                    .setDefaultValue(new ModelNode(1))
-                    .build();
-
-
-
-

Then later when you are parsing the xml configuration you should use the -MY_ATTRIBUTE attribute definition to set the value to the management -operation ModelNode you are creating.

-
-
-
-
....
-      String attr = reader.getAttributeLocalName(i);
-      String value = reader.getAttributeValue(i);
-      if (attr.equals("my-attribute")) {
-          MY_ATTRIBUTE.parseAndSetParameter(value, operation, reader);
-      } else if (attr.equals("suffix")) {
-.....
-
-
-
-

Note that this just helps you to properly set the value to the model -node you are working on, so no need to additionally set anything to the -model for this attribute. Method parseAndSetParameter parses the value -that was read from xml for possible expressions in it and if it finds -any it creates special model node that defines that node is of type -ModelType.EXPRESSION.

-
-
-

Later in your operation handlers where you implement populateModel and -have to store the value from the operation to the configuration model -you also use this MY_ATTRIBUTE attribute definition.

-
-
-
-
 @Override
- protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
-        MY_ATTRIBUTE.validateAndSet(operation,model);
- }
-
-
-
-

This will make sure that the attribute that is stored from the operation -to the model is valid and nothing is lost. It also checks the value -stored in the operation ModelNode, and if it isn’t already -ModelType.EXPRESSION, it checks if the value is a string that contains -the expression syntax. If so, the value stored in the model will be of -type ModelType.EXPRESSION. Doing this ensures that expressions are -properly handled when they appear in operations that weren’t created by -the subsystem parser, but are instead passed in from CLI or admin -console users.

-
-
-

As last step we need to use the value of the attribute. This is usually -needed inside of the performRuntime method

-
-
-
-
 protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) throws OperationFailedException {
-       ....
-        final int attributeValue = MY_ATTRIBUTE.resolveModelAttribute(context, model).asInt();     
-        ...
- 
-    }
-
-
-
-

As you can see resolving of attribute’s value is not done until it is -needed for use in the subsystem’s runtime services. The resolved value -is not stored in the configuration model, the unresolved expression is. -That way we do not lose any information in the model and can assure that -also marshalling is done properly, where we must marshall back the -unresolved value.

-
-
-

Attribute definitinon also helps you with that:

-
-
-
-
 public void writeContent(XMLExtendedStreamWriter writer, SubsystemMarshallingContext context) throws XMLStreamException {
-    ....
-      MY_ATTRIBUTE.marshallAsAttribute(sessionData, writer);
-      MY_OTHER_ATTRIBUTE.marshallAsElement(sessionData, false, writer);
-    ...
-}
-
-
-
-
-
-
-
-

3. Working with WildFly Capabilities

-
-
-

An extension to WildFly will likely want to make use of services -provided by the WildFly kernel, may want to make use of services -provided by other subsystems, and may wish to make functionality -available to other extensions. Each of these cases involves integration -between different parts of the system. In releases prior to WildFly 10, -this kind of integration was done on an ad-hoc basis, resulting in -overly tight coupling between different parts of the system and overly -weak integration contracts. For example, a service installed by -subsystem A might depend on a service installed by subsystem B, and to -record that dependency A’s authors copy a ServiceName from B’s code, or -even refer to a constant or static method from B’s code. The result is -B’s code cannot evolve without risking breaking A. And the authors of B -may not even intend for other subsystems to use its services. There is -no proper integration contract between the two subsystems.

-
-
-

Beginning with WildFly Core 2 and WildFly 10 the WildFly kernel’s -management layer provides a mechanism for allowing different parts of -the system to integrate with each other in a loosely coupled manner. -This is done via WildFly Capabilities. Use of capabilities provides the -following benefits:

-
-
-
    -
  1. -

    A standard way for system components to define integration contracts -for their use by other system components.

    -
  2. -
  3. -

    A standard way for system components to access integration contracts -provided by other system components.

    -
  4. -
  5. -

    A mechanism for configuration model referential integrity checking, -such that if one component’s configuration has an attribute that refers -to an other component (e.g. a socket-binding attribute in a subsystem -that opens a socket referring to that socket’s configuration), the -validity of that reference can be checked when validating the -configuration model.

    -
  6. -
-
-
-

3.1. Capabilities

-
-

A capability is a piece of functionality used in a WildFly Core based -process that is exposed via the WildFly Core management layer. -Capabilities may depend on other capabilities, and this interaction -between capabilities is mediated by the WildFly Core management layer.

-
-
-

Some capabilities are automatically part of a WildFly Core based -process, but in most cases the configuration provided by the end user -(i.e. in standalone.xml, domain.xml and host.xml) determines what -capabilities are present at runtime. It is the responsibility of the -handlers for management operations to register capabilities and to -register any requirements those capabilities may have for the presence -of other capabilities. This registration is done during the MODEL stage -of operation execution

-
-
-

A capability has the following basic characteristics:

-
-
-
    -
  1. -

    It has a name.

    -
  2. -
  3. -

    It may install an MSC service that can be depended upon by services -installed by other capabilities. If it does, it provides a mechanism for -discovering the name of that service.

    -
  4. -
  5. -

    It may expose some other API not based on service dependencies -allowing other capabilities to integrate with it at runtime.

    -
  6. -
  7. -

    It may depend on, or require other capabilities.

    -
  8. -
-
-
-

During boot of the process, and thereafter whenever a management -operation makes a change to the process' configuration, at the end of -the MODEL stage of operation execution the kernel management layer will -validate that all capabilities required by other capabilities are -present, and will fail any management operation step that introduced an -unresolvable requirement. This will be done before execution of the -management operation proceeds to the RUNTIME stage, where interaction -with the process' MSC Service Container is done. As a result, in the -RUNTIME stage the handler for an operation can safely assume that the -runtime services provided by a capability for which it has registered a -requirement are available.

-
-
-

3.1.1. Comparison to other concepts

-
-
Capabilities vs modules
-
-

A JBoss Modules module is the means of making resources available to the -classloading system of a WildFly Core based process. To make a -capability available, you must package its resources in one or more -modules and make them available to the classloading system. But a module -is not a capability in and of itself, and simply copying a module to a -WildFly installation does not mean a capability is available. Modules -can include resources completely unrelated to management capabilities.

-
-
-
-
Capabilities vs Extensions
-
-

An extension is the means by which the WildFly Core management layer is -made aware of manageable functionality that is not part of the WildFly -Core kernel. The extension registers with the kernel new management -resource types and handlers for operations on those resources. One of -the things a handler can do is register or unregister a capability and -its requirements. An extension may register a single capability, -multiple capabilities, or possibly none at all. Further, not all -capabilities are registered by extensions; the WildFly Core kernel -itself may register a number of different capabilities.

-
-
-
-
-

3.1.2. Capability Names

-
-

Capability names are simple strings, with the dot character serving as a -separator to allow namespacing.

-
-
-

The 'org.wildfly' namespace is reserved for projects associated with the -WildFly organization on github ( https://github.com/wildfly).

-
-
-
-

3.1.3. Statically vs Dynamically Named Capabilities

-
-

The full name of a capability is either statically known, or it may -include a statically known base element and then a dynamic element. The -dynamic part of the name is determined at runtime based on the address -of the management resource that registers the capability. For example, -the management resource at the address -'/socket-binding-group=standard-sockets/socket-binding=web' will -register a dynamically named capability named -'org.wildfly.network.socket-binding.web'. The -'org.wildfly.network.socket-binding' portion is the static part of the -name.

-
-
-

All dynamically named capabilities that have the same static portion of -their name should provide a consistent feature set and set of -requirements.

-
-
-
-

3.1.4. Service provided by a capability

-
-

Typically a capability functions by registering a service with the -WildFly process' MSC ServiceContainer, and then dependent capabilities -depend on that service. The WildFly Core management layer orchestrates -registration of those services and service dependencies by providing a -means to discover service names.

-
-
-
-

3.1.5. Custom integration APIs provided by a capability

-
-

Instead of or in addition to providing MSC services, a capability may -expose some other API to dependent capabilities. This API must be -encapsulated in a single class (although that class can use other -non-JRE classes as method parameters or return types).

-
-
-
-

3.1.6. Capability Requirements

-
-

A capability may rely on other capabilities in order to provide its -functionality at runtime. The management operation handlers that -register capabilities are also required to register their requirements.

-
-
-

There are three basic types of requirements a capability may have:

-
-
-
    -
  • -

    Hard requirements. The required capability must always be present for -the dependent capability to function.

    -
  • -
  • -

    Optional requirements. Some aspect of the configuration of the -dependent capability controls whether the depended on capability is -actually necessary. So the requirement cannot be known until the running -configuration is analyzed.

    -
  • -
  • -

    Runtime-only requirements. The dependent capability will check for the -presence of the depended upon capability at runtime, and if present it -will utilize it, but if it is not present it will function properly -without the capability. There is nothing in the dependent capability’s -configuration that controls whether the depended on capability must be -present. Only capabilities that declare themselves as being suitable for -use as a runtime-only requirement should be depended upon in this -manner.

    -
  • -
-
-
-

Hard and optional requirements may be for either statically named or -dynamically named capabilities. Runtime-only requirements can only be -for statically named capabilities, as such a requirement cannot be -specified via configuration, and without configuration the dynamic part -of the required capability name is unknown.

-
-
-
Supporting runtime-only requirements
-
-

Not all capabilities are usable as a runtime-only requirement.

-
-
-

Any dynamically named capability is not usable as a runtime-only -requirement.

-
-
-

For a capability to support use as a runtime-only requirement, it must -guarantee that a configuration change to a running process that removes -the capability will not impact currently running capabilities that have -a runtime-only requirement for it. This means:

-
-
-
    -
  • -

    A capability that supports runtime-only usage must ensure that it -never removes its runtime service except via a full process reload.

    -
  • -
  • -

    A capability that exposes a custom integration API generally is not -usable as a runtime-only requirement. If such a capability does support -use as a runtime-only requirement, it must ensure that any functionality -provided via its integration API remains available as long as a full -process reload has not occurred.

    -
  • -
-
-
-
-
-
-

3.2. Capability Contract

-
-

A capability provides a stable contract to users of the capability. The -contract includes the following:

-
-
-
    -
  • -

    The name of the capability (including whether it is dynamically -named).

    -
  • -
  • -

    Whether it installs an MSC Service, and if it does, the value type of -the service. That value type then becomes a stable API users of the -capability can rely upon.

    -
  • -
  • -

    Whether it provides a custom integration API, and if it does, the type -that represents that API. That type then becomes a stable API users of -the capability can rely upon.

    -
  • -
  • -

    Whether the capability supports use as a runtime-only requirement.

    -
  • -
-
-
-

Developers can learn about available capabilities and the contracts they -provide by reading the WildFly capabilty registry.

-
-
-
-

3.3. Capability Registry

-
-

The WildFly organization on github maintains a git repo where -information about available capabilities is published.

-
- -
-

Developers can learn about available capabilities and the contracts they -provide by reading the WildFly capabilty registry.

-
-
-

The README.md file at the root of that repo explains the how to find out -information about the registry.

-
-
-

Developers of new capabilities are strongly encouraged to document and -register their capability by submitting a pull request to the -wildfly-capabilities github repo. This both allows others to learn about -your capability and helps prevent capability name collisions. -Capabilities that are used in the WildFly or WildFly Core code base -itself must have a registry entry before the code referencing them -will be merged.

-
-
-

External organizations that create capabilities should include an -organization-specific namespace as part their capability names to avoid -name collisions.

-
-
-
-

3.4. Using Capabilities

-
-

Now that all the background information is presented, here are some -specifics about how to use WildFly capabilities in your code.

-
-
-

3.4.1. Basics of Using Your Own Capability

-
-
Creating your capability
-
-

A capability is an instance of the immutable -org.jboss.as.controller.capability.RuntimeCapability class. A -capability is usually registered by a resource, so the usual way to use -one is to store it in constant in the resource’s ResourceDefinition. -Use a RuntimeCapability.Builder to create one.

-
-
-
-
class MyResourceDefinition extends SimpleResourceDefinition {
-
-    static final RuntimeCapability<Void> FOO_CAPABILITY = RuntimeCapability.Builder.of("com.example.foo").build();
- 
-    . . .
-}
-
-
-
-

That creates a statically named capability named com.example.foo.

-
-
-

If the capability is dynamically named, add the dynamic parameter to -state this:

-
-
-
-
    static final RuntimeCapability<Void> FOO_CAPABILITY =
-            RuntimeCapability.Builder.of("com.example.foo", true).build();
-
-
-
-

Most capabilities install a service that requiring capabilities can -depend on. If your capability does this, you need to declare the -service’s value type (the type of the object returned by -org.jboss.msc.Service.getValue()). For example, if FOO_CAPABILITY -provides a Service<javax.sql.DataSource>:

-
-
-
-
    static final RuntimeCapability<Void> FOO_CAPABILITY =
-            RuntimeCapability.Builder.of("com.example.foo", DataSource.class).build();
-
-
-
-

For a dynamic capability:

-
-
-
-
    static final RuntimeCapability<Void> FOO_CAPABILITY =
-           RuntimeCapability.Builder.of("com.example.foo", true, DataSource.class).build();
-
-
-
-

If the capability provides a custom integration API, you need to -instantiate an instance of that API:

-
-
-
-
public class JTSCapability {
- 
-    static final JTSCapability INSTANCE = new JTSCapability();
- 
-    private JTSCapability() {}
- 
-    /**
-     * Gets the names of the {@link org.omg.PortableInterceptor.ORBInitializer} implementations that should be included
-     * as part of the {@link org.omg.CORBA.ORB#init(String[], java.util.Properties) initialization of an ORB}.
-     *
-     * @return the names of the classes implementing {@code ORBInitializer}. Will not be {@code null}.
-     */
-    public List<String> getORBInitializerClasses() {
-        return Collections.unmodifiableList(Arrays.asList(
-            "com.arjuna.ats.jts.orbspecific.jacorb.interceptors.interposition.InterpositionORBInitializerImpl",
-            "com.arjuna.ats.jbossatx.jts.InboundTransactionCurrentInitializer"));
-    }
-}
-
-
-
-

and provide it to the builder:

-
-
-
-
    static final RuntimeCapability<JTSCapability> FOO_CAPABILITY =
-            RuntimeCapability.Builder.of("com.example.foo", JTSCapability.INSTANCE).build();
-
-
-
-

For a dynamic capability:

-
-
-
-
    static final RuntimeCapability<JTSCapability> FOO_CAPABILITY = RuntimeCapability.Builder.of("com.example.foo", true, JTSCapability.INSTANCE).build();
-
-
-
-

A capability can provide both a custom integration API and install a -service:

-
-
-
-
    static final RuntimeCapability<JTSCapability> FOO_CAPABILITY =
-            RuntimeCapability.Builder.of("com.example.foo", JTSCapability.INSTANCE)
-                .setServiceType(DataSource.class)
-                .build();
-
-
-
-
-
Registering and unregistering your capability
-
-

Once you have your capability, you need to ensure it gets registered -with the WildFly Core kernel when your resource is added. This is easily -done simply by providing a reference to the capability to the resource’s -ResourceDefinition. This assumes your resource definition is a -subclass of the standard -org.jboss.as.controller.SimpleResourceDefinition. -SimpleResourceDefinition provides a Parameters class that provides a -builder-style API for setting up all the data needed by your definition. -This includes a setCapabilities method that can be used to declare the -capabilities provided by resources of this type.

-
-
-
-
class MyResourceDefinition extends SimpleResourceDefinition {
-
-    . . .
- 
-    MyResourceDefinition() {
-        super(new SimpleResourceDefinition.Parameters(PATH, RESOLVER)
-            .setAddHandler(MyAddHandler.INSTANCE)
-            .setRemoveHandler(MyRemoveHandler.INSTANCE)
-            .setCapabilities(FOO_CAPABILITY)
-            );
-    }
-}
-
-
-
-

Your add handler needs to extend the standard -org.jboss.as.controller.AbstractAddStepHandler class or one of its -subclasses:

-
-
-
-
class MyAddHandler extends AbstractAddStepHandler() {
-
-
-
-

`AbstractAddStepHandler’s logic will register the capability when it -executes.

-
-
-

Your remove handler must also extend of the standard -org.jboss.as.controller.AbstractRemoveStepHandler or one of its -subclasses.

-
-
-
-
class MyRemoveHandler extends AbstractRemoveStepHandler() {
-
-
-
-

`AbstractRemoveStepHandler’s logic will deregister the capability when -it executes.

-
-
-

If for some reason you cannot base your ResourceDefinition on -SimpleResourceDefinition or your handlers on AbstractAddStepHandler -and AbstractRemoveStepHandler then you will need to take -responsibility for registering the capability yourself. This is not -expected to be a common situation. See the implementation of those -classes to see how to do it.

-
-
-
-
Installing, accessing and removing the service provided by your
-
-

capability

-
-
-

If your capability installs a service, you should use the -RuntimeCapability when you need to determine the service’s name. For -example in the Stage.RUNTIME handling of your "add" step handler. -Here’s an example for a statically named capability:

-
-
-
-
class MyAddHandler extends AbstractAddStepHandler() {
- 
-    . . .
- 
-    @Override
-    protected void performRuntime(final OperationContext context, final ModelNode operation,
-                                  final Resource resource) throws OperationFailedException {
-
-        ServiceName serviceName = FOO_CAPABILITY.getCapabilityServiceName();
-        Service<DataSource> service = createDataSourceService(context, resource);
-        context.getServiceTarget().addService(serviceName, service).install();
-
-    }
-
-
-
-

If the capability is dynamically named, get the dynamic part of the name -from the OperationContext and use that when getting the service name:

-
-
-
-
class MyAddHandler extends AbstractAddStepHandler() {
- 
-    . . .
- 
-    @Override
-    protected void performRuntime(final OperationContext context, final ModelNode operation,
-                                  final Resource resource) throws OperationFailedException {
-
-        String myName = context.getCurrentAddressValue();
-        ServiceName serviceName = FOO_CAPABILITY.getCapabilityServiceName(myName);
-        Service<DataSource> service = createDataSourceService(context, resource);
-        context.getServiceTarget().addService(serviceName, service).install();
-
-    }
-
-
-
-

The same patterns should be used when accessing or removing the service -in handlers for remove, write-attribute and custom operations.

-
-
-

If you use ServiceRemoveStepHandler for the remove operation, simply -provide your RuntimeCapability to the ServiceRemoveStepHandler -constructor and it will automatically remove your capability’s service -when it executes.

-
-
-
-
-

3.4.2. Basics of Using Other Capabilities

-
-

When a capability needs another capability, it only refers to it by its -string name. A capability should not reference the RuntimeCapability -object of another capability.

-
-
-

Before a capability can look up the service name for a required -capability’s service, or access its custom integration API, it must -first register a requirement for the capability. This must be done in -Stage.MODEL, while service name lookups and accessing the custom -integration API is done in Stage.RUNTIME.

-
-
-

Registering a requirement for a capability is simple.

-
-
-
Registering a hard requirement for a static capability
-
-

If your capability has a hard requirement for a statically named -capability, simply declare that to the builder for your -RuntimeCapability. For example, WildFly’s JTS capability requires both -a basic transaction support capability and IIOP capabilities:

-
-
-
-
    static final RuntimeCapability<JTSCapability> JTS_CAPABILITY =
-            RuntimeCapability.Builder.of("org.wildfly.transactions.jts", new JTSCapability())
-                .addRequirements("org.wildfly.transactions", "org.wildfly.iiop.orb", "org.wildfly.iiop.corba-naming")
-                .build();
-
-
-
-

When your capability is registered with the system, the WildFly Core -kernel will automatically register any static hard requirements declared -this way.

-
-
-
-
Registering a requirement for a dynamically named capability
-
-

If the capability you require is dynamically named, usually your -capability’s resource will include an attribute whose value is the -dynamic part of the required capability’s name. You should declare this -fact in the AttributeDefinition for the attribute using the -SimpleAttributeDefinitionBuilder.setCapabilityReference method.

-
-
-

For example, the WildFly "remoting" subsystem’s -"org.wildfly.remoting.connector" capability has a requirement for a -dynamically named socket-binding capability:

-
-
-
-
public class ConnectorResource extends SimpleResourceDefinition {
- 
-    . . .
- 
-    static final String SOCKET_CAPABILITY_NAME = "org.wildfly.network.socket-binding";
-    static final RuntimeCapability<Void> CONNECTOR_CAPABILITY =
-            RuntimeCapability.Builder.of("org.wildfly.remoting.connector", true)
-                    .build();
- 
-    . . .
- 
-    static final SimpleAttributeDefinition SOCKET_BINDING =
-            new SimpleAttributeDefinitionBuilder(CommonAttributes.SOCKET_BINDING, ModelType.STRING, false)
-                .addAccessConstraint(SensitiveTargetAccessConstraintDefinition.SOCKET_BINDING_REF)
-                .setCapabilityReference(SOCKET_CAPABILITY_NAME, CONNECTOR_CAPABILITY)
-                .build();
-
-
-
-

If the "add" operation handler for your resource extends -AbstractAddStepHandler and the handler for write-attribute extends -AbstractWriteAttributeHandler, the declaration above is sufficient to -ensure that the appropriate capability requirement will be registered -when the attribute is modified.

-
-
-
-
Depending upon a service provided by another capability
-
-

Once the requirement for the capability is registered, your -OperationStepHandler can use the OperationContext to discover the -name of the service provided by the required capability.

-
-
-

For example, the "add" handler for a remoting connector uses the -OperationContext to find the name of the needed \{{SocketBinding} -service:

-
-
-
-
        final String socketName = ConnectorResource.SOCKET_BINDING.resolveModelAttribute(context, fullModel).asString();
-        final ServiceName socketBindingName = context.getCapabilityServiceName(ConnectorResource.SOCKET_CAPABILITY_NAME, socketName, SocketBinding.class);
-
-
-
-

That service name is then used to add a dependency on the -SocketBinding service to the remoting connector service.

-
-
-

If the required capability isn’t dynamically named, OperationContext -exposes an overloaded getCapabilityServiceName variant. For example, -if a capability requires a remoting Endpoint:

-
-
-
-
        ServiceName endpointService = context.getCapabilityServiceName("org.wildfly.remoting.endpoint", Endpoint.class);
-
-
-
-
-
Using a custom integration API provided by another capability
-
-

In your Stage.RUNTIME handler, use -OperationContext.getCapabilityRuntimeAPI to get a reference to the -required capability’s custom integration API. Then use it as necessary.

-
-
-
-
        List<String> orbInitializers = new ArrayList<String>();
-        . . .
-        JTSCapability jtsCapability = context.getCapabilityRuntimeAPI(IIOPExtension.JTS_CAPABILITY, JTSCapability.class);
-        orbInitializers.addAll(jtsCapability.getORBInitializerClasses());
-
-
-
-
-
Runtime-only requirements
-
-

If your capability has a runtime-only requirement for another -capability, that means that if that capability is present in -Stage.RUNTIME you’ll use it, and if not you won’t. There is nothing -about the configuration of your capability that triggers the need for -the other capability; you’ll just use it if it’s there.

-
-
-

In this case, use OperationContext.hasOptionalCapability in your -Stage.RUNTIME handler to check if the capability is present:

-
-
-
-
    protected void performRuntime(final OperationContext context, final ModelNode operation, final ModelNode model) throws OperationFailedException {
- 
-        ServiceName myServiceName = MyResource.FOO_CAPABILITY.getCapabilityServiceName();
-        Service<DataSource> myService = createService(context, model);
-        ServiceBuilder<DataSource> builder = context.getTarget().addService(myServiceName, myService);
- 
-        // Inject a "Bar" into our "Foo" if bar capability is present
-        if (context.hasOptionalCapability("com.example.bar", MyResource.FOO_CAPABILITY.getName(), null) {
-            ServiceName barServiceName = context.getCapabilityServiceName("com.example.bar", Bar.class);
-            builder.addDependency(barServiceName, Bar.class, myService.getBarInjector());
-        }
- 
-        builder.install();
-    }
-
-
-
-

The WildFly Core kernel will not register a requirement for the -"com.example.bar" capability, so if a configuration change occurs that -means that capability will no longer be present, that change will not be -rolled back. Because of this, runtime-only requirements can only be used -with capabilities that declare in their contract that they support such -use.

-
-
-
-
Using a capability in a DeploymentUnitProcessor
-
-

A DeploymentUnitProcessor is likely to have a need to interact with -capabilities, in order to create service dependencies from a deployment -service to a capability provided service or to access some aspect of a -capability’s custom integration API that relates to deployments.

-
-
-

If a DeploymentUnitProcessor associated with a capability -implementation needs to utilize its own capability object, the -DeploymentUnitProcessor authors should simply provide it with a -reference to the RuntimeCapability instance. Service name lookups or -access to the capabilities custom integration API can then be performed -by invoking the methods on the RuntimeCapability.

-
-
-

If you need to access service names or a custom integration API -associated with a different capability, you will need to use the -org.jboss.as.controller.capability.CapabilityServiceSupport object -associated with the deployment unit. This can be found as an attachment -to the DeploymentPhaseContext:

-
-
-
-
class MyDUP implements DeploymentUntiProcessor {
- 
-    public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
- 
-        AttachmentKey<CapabilityServiceSupport> key = org.jboss.as.server.deployment.Attachments.DEPLOYMENT_COMPLETE_SERVICES;
-        CapabilityServiceSupport capSvcSupport = phaseContext.getAttachment(key);
-
-
-
-

Once you have the CapabilityServiceSupport you can use it to look up -service names:

-
-
-
-
        ServiceName barSvcName = capSvcSupport.getCapabilityServiceName("com.example.bar");
-        // Determine what 'baz' the user specified in the deployment descriptor
-        String bazDynamicName = getSelectedBaz(phaseContext);
-        ServiceName bazSvcName = capSvcSupport.getCapabilityServiceName("com.example.baz", bazDynamicName);
-
-
-
- - - - - -
- - -It’s important to note that when you request a service name associated -with a capability, the CapabilityServiceSupport will give you one -regardless of whether the capability is actually registered with the -kernel. If the capability isn’t present, any service dependency your DUP -creates using that service name will eventually result in a service -start failure, due to the missing dependency. This behavior of not -failing immediately when the capability service name is requested is -deliberate. It allows deployment operations that use the -rollback-on-runtime-failure=false header to successfully install (but -not start) all of the services related to a deployment. If a subsequent -operation adds the missing capability, the missing service dependency -problem will then be resolved and the MSC service container will -automatically start the deployment services. -
-
-
-

You can also use the CapabilityServiceSupport to obtain a reference to -the capability’s custom integration API:

-
-
-
-
        // We need custom integration with the baz capability beyond service injection
-        BazIntegrator bazIntegrator;
-        try {
-            bazIntegrator = capSvcSupport.getCapabilityRuntimeAPI("com.example.baz", bazDynamicName, BazIntegrator.class);
-        } catch (NoSuchCapabilityException e) {
-            //
-            String msg = String.format("Deployment %s requires use of the 'bar' capability but it is not currently registered",
-                                       phaseContext.getDeploymentUnit().getName());
-            throw new DeploymentUnitProcessingException(msg);
-        }
-
-
-
-

Note that here, unlike the case with service name lookups, the -CapabilityServiceSupport will throw a checked exception if the desired -capability is not installed. This is because the kernel has no way to -satisfy the request for a custom integration API if the capability is -not installed. The DeploymentUnitProcessor will need to catch and -handle the exception.

-
-
-
-
-

3.4.3. Detailed API

-
-

The WildFly Core kernel’s API for using capabilities is covered in -detail in the javadoc for the -RuntimeCapability -and RuntimeCapability.Builder classes and the -OperationContext -and -CapabilityServiceSupport -interfaces.

-
-
-

Many of the methods in OperationContext related to capabilities have -to do with registering capabilities or registering requirements for -capabilities. Typically non-kernel developers won’t need to worry about -these, as the abstract OperationStepHandler implementations provided -by the kernel take care of this for you, as described in the preceding -sections. If you do find yourself in a situation where you need to use -these in an extension, please read the javadoc thoroughly.

-
-
-
-
-
-
-

4. Domain Mode Subsystem Transformers

-
-
-
-A WildFly domain may consist of a new Domain Controller (DC) controlling -secondary Host Controllers (HC) running older versions. Each secondary HC -maintains a copy of the centralized domain configuration, which they use -for controlling their own servers. In order for the secondary HCs to -understand the configuration from the DC, transformation is needed, -whereby the DC translates the configuration and operations into -something the secondary HCs can understand. -
-
-
-

4.1. Background

-
-

WildFly comes with a domain mode which allows -you to have one Host Controller acting as the Domain Controller. The -Domain Controller’s job is to maintain the centralized domain -configuration. Another term for the DC is 'Primary Host Controller'. -Before explaining why transformers are important and when they should be -used, we will revisit how the domain configuration is used in domain -mode.

-
-
-

The centralized domain configuration is stored in domain.xml. This is -only ever parsed on the DC, and it has the following structure:

-
-
-
    -
  • -

    extensions - contains:

    -
    -
      -
    • -

      extension - a references to a module that bootstraps the -org.jboss.as.controller.Extension implementation used to bootstrap -your subsystem parsers and initialize the resource definitions for your -subsystems.

      -
    • -
    -
    -
  • -
  • -

    profiles - contains:

    -
    -
      -
    • -

      profile - a named set of:

      -
      -
        -
      • -

        subsystem - contains the configuration for a subsystem, using the -parser initialized by the subsystem’s extension.

        -
      • -
      -
      -
    • -
    -
    -
  • -
  • -

    socket-binding-groups - contains:

    -
    -
      -
    • -

      socket-binding-group - a named set of:

      -
      -
        -
      • -

        socket-binding - A named port on an interface which can be -referenced from the subsystem configurations for subsystems opening -sockets.

        -
      • -
      -
      -
    • -
    -
    -
  • -
  • -

    server-groups - contains

    -
    -
      -
    • -

      server-group - this has a name and references a profile and a -socket-binding-group. The HCs then reference the server-group name -from their <servers> section in host.xml.

      -
    • -
    -
    -
  • -
-
-
-

When the DC parses domain.xml, it is transformed into add (and in -some cases write-attribute) operations just as explained in -Parsing and -marshalling of the subsystem xml. These operations build up the model -on the DC.

-
-
-

A HC wishing to join the domain and use the DC’s centralized -configuration is known as a 'secondary HC'. A secondary HC maintains a copy of -the DC’s centralized domain configuration. This copy of the domain -configuration is used to start its servers. This is done by asking the -domain model to describe itself, which in turn asks the subsystems to -describe themselves. The describe operation for a subsystem looks at -the state of the subsystem model and produces the add operations -necessary to create the subsystem on the server. The same mechanism also -takes place on the DC (bear in mind that the DC is also a HC, which can -have its own servers), although of course its copy of the domain -configuration is the centralized one.

-
-
-

There are two steps involved in keeping the secondary HC’s -domain configuration in sync with the centralized domain configuration.

-
-
-
    -
  • -

    getting the initial domain model

    -
  • -
  • -

    an operation changes something in the domain configuration

    -
  • -
-
-
-

Let’s look a bit closer at what happens in each of these steps.

-
-
-

4.1.1. Getting the initial domain model

-
-

When a secondary HC connects to the DC it obtains a copy of the domain model -from the DC. This is done in a simpler serialized format, different from -the operations that built up the model on the DC, or the operations -resulting from the describe step used to bootstrap the servers. They -describe each address that exists in the DC’s model, and contain the -attributes set for the resource at that address. This serialized form -looks like this:

-
-
-
-
[{
-    "domain-resource-address" => [],
-    "domain-resource-model" => {
-        "management-major-version" => 2,
-        "management-minor-version" => 0,
-        "management-micro-version" => 0,
-        "release-version" => "8.0.0.Beta1-SNAPSHOT",
-        "release-codename" => "WildFly"
-    }
-},
-{
-    "domain-resource-address" => [("extension" => "org.jboss.as.clustering.infinispan")],
-    "domain-resource-model" => {"module" => "org.jboss.as.clustering.infinispan"}
-},
---SNIP - the rest of the extensions --
-{
-    "domain-resource-address" => [("extension" => "org.jboss.as.weld")],
-    "domain-resource-model" => {"module" => "org.jboss.as.weld"}
-},
-{
-    "domain-resource-address" => [("system-property" => "java.net.preferIPv4Stack")],
-    "domain-resource-model" => {
-        "value" => "true",
-        "boot-time" => undefined
-    }
-},
-{
-    "domain-resource-address" => [("profile" => "full-ha")],
-    "domain-resource-model" => undefined
-},
-{
-    "domain-resource-address" => [
-        ("profile" => "full-ha"),
-        ("subsystem" => "logging")
-    ],
-    "domain-resource-model" => {}
-},
-{
-    "domain-resource-address" => [sss|WFLY8:Example subsystem],
-    "domain-resource-model" => {
-        "level" => "INFO",
-        "enabled" => undefined,
-        "encoding" => undefined,
-        "formatter" => "%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n",
-        "filter-spec" => undefined,
-        "autoflush" => undefined,
-        "target" => undefined,
-        "named-formatter" => undefined
-    }
-},
---SNIP---
-
-
-
-

The secondary HC then applies these one at a time and builds up the initial -domain model. It needs to do this before it can start any of its -servers.

-
-
-
-

4.1.2. An operation changes something in the domain configuration

-
-

Once a domain is up and running we can still change things in the domain -configuration. These changes must happen when connected to the DC, and -are then propagated to the secondary HCs, which then in turn propagate the -changes to any servers running in a server group affected by the changes -made. In this example:

-
-
-
-
[disconnected /] connect
-[domain@localhost:9990 /] /profile=full/subsystem=datasources/data-source=ExampleDS:write-attribute(name=enabled,value=false)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => {"main-server-group" => {"host" => {
-        "secondary" => {"server-one" => {"response" => {
-            "outcome" => "success",
-            "result" => undefined,
-            "response-headers" => {
-                "operation-requires-restart" => true,
-                "process-state" => "restart-required"
-            }
-        }}},
-        "primary" => {
-            "server-one" => {"response" => {
-                "outcome" => "success",
-                "response-headers" => {
-                    "operation-requires-restart" => true,
-                    "process-state" => "restart-required"
-                }
-            }},
-            "server-two" => {"response" => {
-                "outcome" => "success",
-                "response-headers" => {
-                    "operation-requires-restart" => true,
-                    "process-state" => "restart-required"
-                }
-            }}
-        }
-    }}}
-}
-
-
-
-

the DC propagates the changes to itself host=primary, which in turn -propagates it to its two servers belonging to main-server-group which -uses the full profile. More interestingly, it also propagates it to -host=secondary which updates its local copy of the domain model, and then -propagates the change to its server-one which belongs to -main-server-group which uses the full profile.

-
-
-
-
-

4.2. Versions and backward compatibility

-
-

A HC and its servers will always be the same version of WildFly (they -use the same module path and jars). However, the DC and the secondary HCs do -not necessarily need to be the same version. One of the points in the -original specification for WildFly is that

-
-
-

Important

-
-
- - - - - -
- - -A Domain Controller should be able to manage secondary Host Controllers -older than itself. -
-
-
-

This means that for example a WildFly 10.1 DC should be able to work -with secondary HCs running WildFly 10. The opposite is not true, the DC must -be the same or the newest version in the domain.

-
-
-

4.2.1. Versioning of subsystems

-
-

To help with being able to know what is compatible we have versions -within the subsystems, this is stored in the subsystem’s extension. When -registering the subsystem you will typically see something like:

-
-
-
-
public class SomeExtension implements Extension {
- 
-    private static final String SUBSYSTEM_NAME = "my-subsystem"'
- 
-    private static final int MANAGEMENT_API_MAJOR_VERSION = 2;
-    private static final int MANAGEMENT_API_MINOR_VERSION = 0;
-    private static final int MANAGEMENT_API_MICRO_VERSION = 0;
- 
-    /**
-     * {@inheritDoc}
-     * @see org.jboss.as.controller.Extension#initialize(org.jboss.as.controller.ExtensionContext)
-     */
-    @Override
-    public void initialize(ExtensionContext context) {
- 
-        // IMPORTANT: Management API version != xsd version! Not all Management API changes result in XSD changes
-        SubsystemRegistration registration = context.registerSubsystem(SUBSYSTEM_NAME, MANAGEMENT_API_MAJOR_VERSION,
-                MANAGEMENT_API_MINOR_VERSION, MANAGEMENT_API_MICRO_VERSION);
- 
-        //Register the resource definitions
-        ....
-    }
-    ....
-}
-
-
-
-

Which sets the ModelVersion of the subsystem.

-
-
-

Important

-
-
- - - - - -
- - -Whenever something changes in the subsystem, such as: -
-
-
-
    -
  • -

    an attribute is added or removed from a resource

    -
  • -
  • -

    a attribute is renamed in a resource

    -
  • -
  • -

    an attribute has its type changed

    -
  • -
  • -

    an attribute or operation parameter’s nillable or allows expressions -is changed

    -
  • -
  • -

    an attribute or operation parameter’s default value changes

    -
  • -
  • -

    a child resource type is added or removed

    -
  • -
  • -

    an operation is added or removed

    -
  • -
  • -

    an operation has its parameters changed

    -
  • -
-
-
-

and the current version of the subsystem has been part of a Final -release of WildFly, we must bump the version of the subsystem.

-
-
-

Once it has been increased you can of course make more changes until the -next Final release without more version bumps. It is also worth noting -that a new WildFly release does not automatically mean a new version for -the subsystem, the new version is only needed if something was changed. -For example the jaxrs subsystem remained on 1.0.0 for all versions -of WildFly and JBoss AS 7 through Wildfly 18.

-
-
-

You can find the ModelVersion of a subsystem by querying its -extension:

-
-
-
-
domain@localhost:9990 /] /extension=org.jboss.as.clustering.infinispan:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "module" => "org.jboss.as.clustering.infinispan",
-        "subsystem" => {"infinispan" => {
-            "management-major-version" => 2,
-            "management-micro-version" => 0,
-            "management-minor-version" => 0,
-            "xml-namespaces" => [jboss:domain:infinispan:1.0",
-                "urn:jboss:domain:infinispan:1.1",
-                "urn:jboss:domain:infinispan:1.2",
-                "urn:jboss:domain:infinispan:1.3",
-                "urn:jboss:domain:infinispan:1.4",
-                "urn:jboss:domain:infinispan:2.0"]
-        }}
-    }
-}
-
-
-
-
-
-

4.3. The role of transformers

-
-

Now that we have mentioned the secondary HCs registration process with the -DC, and know about ModelVersions, it is time to mention that when -registering with the DC, the secondary HC will send across a list of all its -subsystem ModelVersions. The DC maintains this information in a registry -for each secondary HC, so that it knows which transformers (if any) to -invoke for a legacy secondary. We will see how to write and register -transformers later on in -#How -do I write a transformer. secondary HCs from version 7.2.0 onwards will -also include a list of resources that they ignore (see -#Ignoring -resources on legacy hosts), and the DC will maintain this information -in its registry. The DC will not send across any resources that it knows -a secondary ignores during the initial domain model transfer. When -forwarding operations onto the secondary HCs, the DC will skip forwarding -those to secondary HCs ignoring those resources.

-
-
-

There are two kinds of transformers:

-
-
-
    -
  • -

    resource transformers

    -
  • -
  • -

    operation transformers

    -
  • -
-
-
-

The main function of transformers is to transform a subsystem to -something that the legacy secondary HC can understand, or to aggressively -reject things that the legacy secondary HC will not understand. Rejection, -in this context, essentially means, that the resource or operation -cannot safely be transformed to something valid on the secondary HC, so the -transformation fails. We will see later how to reject attributes in -#Rejecting -attributes, and child resources in -#Reject -child resource.

-
-
-

Both resource and operation transformers are needed, but take effect at -different times. Let us use the weld subsystem, which is relatively -simple, as an example. In JBoss AS 7.2.0 and lower it had a ModelVersion -of 1.0.0, and its resource description was as follows:

-
-
-
-
                {
-                    "description" => "The configuration of the weld subsystem.",
-                    "attributes" => {},
-                    "operations" => {
-                        "remove" => {
-                            "operation-name" => "remove",
-                            "description" => "Operation removing the weld subsystem.",
-                            "request-properties" => {},
-                            "reply-properties" => {}
-                        },
-                        "add" => {
-                            "operation-name" => "add",
-                            "description" => "Operation creating the weld subsystem.",
-                            "request-properties" => {},
-                            "reply-properties" => {}
-                        }
-                    },
-                    "children" => {}
-                },
-
-
-
-

In WildFly 29, it has a ModelVersion of 2.0.0 and has added two -attributes, require-bean-descriptor and non-portable mode:

-
-
-
-
{
-        "description" => "The configuration of the weld subsystem.",
-        "attributes" => {
-            "require-bean-descriptor" => {
-                "type" => BOOLEAN,
-                "description" => "If true then implicit bean archives without bean descriptor file (beans.xml) are ignored by Weld",
-                "expressions-allowed" => true,
-                "nillable" => true,
-                "default" => false,
-                "access-type" => "read-write",
-                "storage" => "configuration",
-                "restart-required" => "no-services"
-            },
-            "non-portable-mode" => {
-                "type" => BOOLEAN,
-                "description" => "If true then the non-portable mode is enabled. The non-portable mode is suggested by the specification to overcome problems with legacy applications that do not use CDI SPI properly and may be rejected by more strict validation in CDI 1.1.",
-                "expressions-allowed" => true,
-                "nillable" => true,
-                "default" => false,
-                "access-type" => "read-write",
-                "storage" => "configuration",
-                "restart-required" => "no-services"
-            }
-        },
-        "operations" => {
-            "remove" => {
-                "operation-name" => "remove",
-                "description" => "Operation removing the weld subsystem.",
-                "request-properties" => {},
-                "reply-properties" => {}
-            },
-            "add" => {
-                "operation-name" => "add",
-                "description" => "Operation creating the weld subsystem.",
-                "request-properties" => {
-                    "require-bean-descriptor" => {
-                        "type" => BOOLEAN,
-                        "description" => "If true then implicit bean archives without bean descriptor file (beans.xml) are ignored by Weld",
-                        "expressions-allowed" => true,
-                        "required" => false,
-                        "nillable" => true,
-                        "default" => false
-                    },
-                    "non-portable-mode" => {
-                        "type" => BOOLEAN,
-                        "description" => "If true then the non-portable mode is enabled. The non-portable mode is suggested by the specification to overcome problems with legacy applications that do not use CDI SPI properly and may be rejected by more strict validation in CDI 1.1.",
-                        "expressions-allowed" => true,
-                        "required" => false,
-                        "nillable" => true,
-                        "default" => false
-                    }
-                },
-                "reply-properties" => {}
-            }
-        },
-        "children" => {}
-    }
-
-
-
-

In the rest of this section we will assume that we are running a DC -running WildFly 29 so it will have ModelVersion 2.0.0 of the weld -subsystem, and that we are running a secondary HC using ModelVersion 1.0.0 of -the weld subsystem.

-
-
-

Important

-
-
- - - - - -
- - -Transformation always takes place on the Domain Controller, and is done -when sending across the initial domain model AND forwarding on -operations to legacy secondary HCs. -
-
-
-

4.3.1. Resource transformers

-
-

When copying over the centralized domain configuration as mentioned in -#Getting -the initial domain model, we need to make sure that the copy of the -domain model is something that the servers running on the legacy secondary -HC understand. So if the centralized domain configuration had any of the -two new attributes set, we would need to reject the transformation in -the transformers. One reason for this is to keep things consistent, it -doesn’t look good if you connect to the secondary HC and find attributes -and/or child resources when doing :read-resource which are not there -when you do :read-resource-description. Also, to make life easier for -subsystem writers, most instances of the describe operation use a -standard implementation which would include these attributes when -creating the add operation for the server, which could cause problems -there.

-
-
-

Another, more concrete example from the logging subsystem is that it -allows a ' %K{…​}' in the pattern formatter which makes the formatter -use color:

-
-
-
-
            <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
-
-
-
-

This ' %K{…​}' however was introduced in JBoss AS < 7.1.3 -(ModelVersion 1.2.0), so if that makes it across to a secondary HC running -an older version, the servers will fail to start up. So the logging -extension registers transformers to strip out the ' %K{…​}' from the -attribute value (leaving ' %-5p %c `(%t) %s%E%n"’) so that the old -secondary HC’s servers can understand it.

-
-
-
Rejection in resource transformers
-
-

Only secondary HCs from JBoss AS 7.2.0 and newer inform the DC about their -ignored resources (see -#Ignoring -resources on legacy hosts). This means that if a transformer on the DC -rejects transformation for a legacy secondary HC, exactly what happens to -the secondary HC depends on the version of the secondary HC. If the secondary HC is:

-
-
-
    -
  • -

    older than 7.2.0 - the DC has no means of knowing if the secondary HC -has ignored the resource being rejected or not. So we log a warning on -the DC, and send over the serialized part of that model anyway. If the -secondary HC has ignored the resource in question, it does not apply it. If -the secondary HC has not ignored the resource in question, it will apply it, -but no failure will happen until it tries to start a server which -references this bad configuration.

    -
  • -
  • -

    7.2.0 or newer - If a resource is ignored on the secondary HC, the DC -knows about this, and will not attempt to transform or send the resource -across to the secondary HC. If the resource transformation is rejected, we -know the resource was not ignored on the secondary HC and so we can -aggressively fail the transformation, which in turn will cause the secondary -HC to fail to start up.

    -
  • -
-
-
-
-
-

4.3.2. Operation transformers

-
-

When -#An -operation changes something in the domain configuration the operation -gets sent across to the secondary HCs to update their copies of the domain -model. The secondary HCs then forward this operation onto the affected -servers. The same considerations as in -#Resource -transformers are true, although operation transformers give you quicker -'feedback' if something is not valid. If you try to execute:

-
-
-
-
/profile=full/subsystem=weld:write-attribute(name=require-bean-descriptor, value=false)
-
-
-
-

This will fail on the legacy secondary HC since its version of the subsystem -does not contain any such attribute. However, it is best to aggressively -reject in such cases.

-
-
-
Rejection in operation transformers
-
-

For transformed operations we can always know if the operation is on an -ignored resource in the legacy secondary HC. In 7.2.0 onwards, we know this -through the DC’s registry of ignored resources on the secondary HC. In older -versions of secondary HCs, we send the operation across to the secondary HC, which -tries to invoke the operation. If the operation is against an ignored -resource we inform the DC about this fact. So as part of the -transformation process, if something gets rejected we can (and do!) fail -the transformation aggressively. If the operation invoked on the DC -results in the operation being sent across to 10 secondary HCs and one of -them has a legacy version which ends up rejecting the transformation, we -rollback the operation across the whole domain.

-
-
-
-
-

4.3.3. Different profiles for different versions

-
-

Now for the weld example we have been using there is a slight twist. -We have the new require-bean-descriptor and non-portable-mode -attributes. These have been added in WildFly 29 which supports Jakarta EE, -and thus CDI. -In CDI 1.1 the values of these attributes are tweakable, so they can be set -to either true or false. The default behaviour for these in CDI 1.1, -if not set, is that they are false. However, for CDI 1.0 these were -not tweakable, and with the way the subsystem in JBoss AS 7.x worked is -similar to if they are set to true.

-
-
-

The above discussion implies that to use the weld subsystem on a legacy -secondary HC, the domain.xml configuration for it must look like:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:weld:2.0"
-      require-bean-descriptor="true"
-      non-portable-mode="true"/>
-
-
-
-

We will see the exact mechanics for how this is actually done later but -in short when pushing this to a legacy secondary HC we register transformers -which reject the transformation if these attributes are not set to -true since that implies some behavior not supported on the legacy -secondary HC. If they are true, all is well, and the transformers discard, -or remove, these attributes since they don’t exist in the legacy model. -This removal is fine since they have the values which would result in -the behavior assumed on the legacy secondary HC.

-
-
-

That way the older secondary HCs will work fine. However, we might also have -WildFly 29 secondary HCs in our domain, and they are missing out on the new -features introduced by the attributes introduced in ModelVersion 2.0.0. -If we do

-
-
-
-
<subsystem xmlns="urn:jboss:domain:weld:2.0"
-      require-bean-descriptor="false"
-      non-portable-mode="false"/>
-
-
-
-

then it will fail when doing transformation for the legacy controller. -The solution is to put these in two different profiles in domain.xml

-
-
-
-
<domain>
-....
-  <profiles>
-    <profile name="full">
-      <subsystem xmlns="urn:jboss:domain:weld:2.0"
-        require-bean-descriptor="false"
-        non-portable-mode="false"/>
-      ...
-    </profile>
-    <profile name="full-legacy">
-      <subsystem xmlns="urn:jboss:domain:weld:2.0"
-        require-bean-descriptor="true"
-        non-portable-mode="true"/>
-      ...
-    </profile>
-  </profiles>
-  ...
-  <server-groups>
-    <server-group name="main-server-group" profile="full">
-      ....
-    <server-group>
-    <server-group name="main-server-group-legacy" profile="full-legacy">
-      ....
-    <server-group>
-  </server-groups>
-</domain>
-
-
-
-

Then have the HCs using WildFly 29 make their servers reference the -main-server-group server group, and the HCs using older versions of -WildFly 29 make their servers reference the main-server-group-legacy -server group.

-
-
-
Ignoring resources on legacy hosts
-
-

Booting the above configuration will still cause problems on legacy -secondary HCs, especially if they are JBoss AS 7.2.0 or later. The reason -for this is that when they register themselves with the DC it lets the -DC know which ignored resources they have. If the DC comes to -transform something it should reject for a secondary HC and it is not part -of its ignored resources it will aggressively fail the transformation. -Versions of JBoss AS older than 7.2.0 still have this ignored resources -mechanism, but don’t let the DC know about what they have ignored so the -DC cannot reject aggressively - instead it will log some warnings. -However, it is still good practice to ignore resources you are not -interested in regardless of which legacy version the secondary HC is -running.

-
-
-

To ignore the profile we cannot understand we do the following in the -legacy secondary HC’s host.xml

-
-
-
-
<host xmlns="urn:jboss:domain:1.3" name="secondary">
-...
-    <domain-controller>
-       <remote host="${jboss.test.host.primary.address}" port="${jboss.domain.primary.port:9999}" authentication-context="primary-context">
-            <ignored-resources type="profile">
-                <instance name="full-legacy"/>
-            </ignored-resources>
-       </remote>
-    </domain-controller>
-....
-</host>
-
-
-
-

Important

-
-
- - - - - -
- - -Any top-level resource type can be ignored profile, extension, -server-group etc. Ignoring a resource instance ignores that resource, -and all its children. -
-
-
-
-
-
-

4.4. How do I know what needs to be transformed?

-
-

There is a set of related classes in the org.wildfly.legacy.util -package to help you determine this. These now live at -https://github.com/wildfly/wildfly-legacy-test/tree/main/tools/src/main/java/org/wildfly/legacy/util.
-They are all runnable in your IDE, just start the WildFly or JBoss AS 7 -instances as described below.

-
-
-

4.4.1. Getting data for a previous version

-
-

https://github.com/wildfly/wildfly-legacy-test/tree/main/tools/src/main/resources/legacy-models -contains the output for the previous WildFly/JBoss AS 7 versions, so -check if the files for the version you want to check backwards -compatibility are there yet. If not, then you need to do the following -to get the subsystem definitions:

-
-
-
    -
  1. -

    Start the old version of WildFly/JBoss AS 7 using ---server-config=standalone-full-ha.xml

    -
  2. -
  3. -

    Run org.wildfly.legacy.util.GrabModelVersionsUtil, which will -output the subsystem versions to -target/standalone-model-versions-running.dmr

    -
  4. -
  5. -

    Run org.wildfly.legacy.util.DumpStandaloneResourceDefinitionUtil -which will output the full resource definition to -target/standalone-resource-definition-running.dmr

    -
  6. -
  7. -

    Stop the running version of WildFly/JBoss AS 7

    -
  8. -
-
-
-
-

4.4.2. See what changed

-
-

To do this follow the following steps

-
-
-
    -
  1. -

    Start the new version of WildFly using ---server-config=standalone-full-ha.xml

    -
  2. -
  3. -

    Run org.wildfly.legacy.util.CompareModelVersionsUtil and answer -the following questions"

    -
    -
      -
    1. -

      Enter Legacy AS version:

      -
      -
        -
      • -

        If it is known version in the tools/src/test/resources/legacy-models -folder, enter the version number.

        -
      • -
      • -

        If it is a not known version, and you got the data yourself in the -last step, enter ' `running’

        -
      • -
      -
      -
    2. -
    3. -

      Enter type:

      -
      -
        -
      • -

        Answer ' `S’

        -
      • -
      -
      -
    4. -
    -
    -
  4. -
  5. -

    Read from target directory or from the legacy-models directory:

    -
    -
      -
    • -

      If it is known version in the -controller/src/test/resources/legacy-models folder, enter ' `l’.

      -
    • -
    • -

      If it is a not known version, and you got the data yourself in the -last step, enter ' `t’

      -
    • -
    -
    -
  6. -
  7. -

    Report on differences in the model when the management versions are -different?:

    -
    -
      -
    • -

      Answer ' `y’

      -
    • -
    -
    -
  8. -
-
-
-

Here is some example output, as a subsystem developer you can ignore -everything down to ======= Comparing subsystem models ======:

-
-
-
-
Enter legacy AS version: 7.2.0.Final
-Using target model: 7.2.0.Final
-Enter type [S](standalone)/H(host)/D(domain)/F(domain + host):S
-Read from target directory or from the legacy-models directory - t/[l]:
-Report on differences in the model when the management versions are different? y/[n]: y
-Reporting on differences in the model when the management versions are different
-Loading legacy model versions for 7.2.0.Final....
-Loaded legacy model versions
-Loading model versions for currently running server...
-Oct 01, 2013 6:26:03 PM org.xnio.Xnio <clinit>
-INFO: XNIO version 3.1.0.CR7
-Oct 01, 2013 6:26:03 PM org.xnio.nio.NioXnio <clinit>
-INFO: XNIO NIO Implementation Version 3.1.0.CR7
-Oct 01, 2013 6:26:03 PM org.jboss.remoting3.EndpointImpl <clinit>
-INFO: JBoss Remoting version 4.0.0.Beta1
-Loaded current model versions
-Loading legacy resource descriptions for 7.2.0.Final....
-Loaded legacy resource descriptions
-Loading resource descriptions for currently running STANDALONE...
-Loaded current resource descriptions
-Starting comparison of the current....
- 
-======= Comparing core models ======
--- SNIP --
- 
-======= Comparing subsystem models ======
--- SNIP --
-======= Resource root address: ["subsystem" => "remoting"] - Current version: 2.0.0; legacy version: 1.2.0 =======
---- Problems for relative address to root []:
-Missing child types in current: []; missing in legacy [http-connector]
---- Problems for relative address to root ["remote-outbound-connection" => "*"]:
-Missing attributes in current: []; missing in legacy [protocol]
-Missing parameters for operation 'add' in current: []; missing in legacy [protocol]
--- SNIP --
-======= Resource root address: ["subsystem" => "weld"] - Current version: 2.0.0; legacy version: 1.0.0 =======
---- Problems for relative address to root []:
-Missing attributes in current: []; missing in legacy [require-bean-descriptor, non-portable-mode]
-Missing parameters for operation 'add' in current: []; missing in legacy [require-bean-descriptor, non-portable-mode]
- 
-Done comparison of STANDALONE!
-
-
-
-

So we can see that for the remoting subsystem, we have added a child -type called http-connector, and we have added an attribute called -protocol (they are missing in legacy).
-in the weld subsystem, we have added the require-bean-descriptor and -non-portable-mode attributes in the current version. It will also -point out other issues like changed attribute types, changed defaults -etc.

-
-
-

Warning

-
-
- - - - - -
- - -Note that CompareModelVersionsUtil simply inspects the raw resource -descriptions of the specified legacy and current models. Its results -show the differences between the two. They do not take into account -whether one or more transformers have already been written for those -versions differences. You will need to check that transformers are not -already in place for those versions. -
-
-
-

One final point to consider are that some subsystems register -runtime-only resources and operations. For example the modcluster -subsystem has a stop method. These do not get registered on the DC, -e.g. there is no /profile=full-ha/subsystem=modcluster:stop operation, -it only exists on the servers, for example -/host=xxx/server=server-one/subsystem=modcluster:stop. What this means -is that you don’t have to transform such operations and resources. The -reason is they are not callable on the DC, and so do not need -propagation to the servers in the domain, which in turn means no -transformation is needed.

-
-
-
-
-

4.5. How do I write a transformer?

-
-

There are two APIs available to write transformers for a resource. There -is the original low-level API where you register transformers directly, -the general idea is that you get hold of a TransformersSubRegistration -for each level and implement the ResourceTransformer, -OperationTransformer and PathAddressTransformer interfaces directly. -It is, however, a pretty complex thing to do, so we recommend the other -approach. For completeness here is the entry point to handling -transformation in this way.

-
-
-
-
public class SomeExtension implements Extension {
- 
-    private static final String SUBSYSTEM_NAME = "my-subsystem"'
- 
-    private static final int MANAGEMENT_API_MAJOR_VERSION = 2;
-    private static final int MANAGEMENT_API_MINOR_VERSION = 0;
-    private static final int MANAGEMENT_API_MICRO_VERSION = 0;
- 
-    @Override
-    public void initialize(ExtensionContext context) {
-        SubsystemRegistration registration = context.registerSubsystem(SUBSYSTEM_NAME, MANAGEMENT_API_MAJOR_VERSION,
-                MANAGEMENT_API_MINOR_VERSION, MANAGEMENT_API_MICRO_VERSION);
-        //Register the resource definitions
-        ....
-    }
- 
-    static void registerTransformers(final SubsystemRegistration subsystem) {
-        registerTransformers_1_1_0(subsystem);
-        registerTransformers_1_2_0(subsystem);
-    }
- 
-    /**
-     * Registers transformers from the current version to ModelVersion 1.1.0
-     */
-    private static void registerTransformers_1_1_0(final SubsystemRegistration subsystem) {
-        final ModelVersion version = ModelVersion.create(1, 1, 0);
- 
-        //The default resource transformer forwards all operations
-        final TransformersSubRegistration registration = subsystem.registerModelTransformers(version, ResourceTransformer.DEFAULT);
-        final TransformersSubRegistration child = registration.registerSubResource(PathElement.pathElement("child"));
-        //We can do more things on the TransformersSubRegistation instances
- 
- 
-        registerRelayTransformers(stack);
-    }
-
-
-
-

Having implemented a number of transformers using the above approach, we -decided to simplify things, so we introduced the -org.jboss.as.controller.transform.description.ResourceTransformationDescriptionBuilder -API. It is a lot simpler and avoids a lot of the duplication of -functionality required by the low-level API approach. While it doesn’t -give you the full power that the low-level API does, we found that there -are very few places in the WildFly codebase where this does not work, so -we will focus on the ResourceTransformationDescriptionBuilder API -here. (If you come across a problem where this does not work, get in -touch with someone from the WildFly Domain Management Team and we should -be able to help). The builder API makes all the nasty calls to -TransformersSubRegistration for you under the hood. It also allows you -to fall back to the low-level API in places, although that will not be -covered in the current version of this guide. The entry point for using -the builder API here is taken from the WeldExtension (in current WildFly -this has ModelVersion 2.0.0).

-
-
-
-
    private void registerTransformers(SubsystemRegistration subsystem) {
-        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
-        //These new attributes are assumed to be 'true' in the old version but default to false in the current version. So discard if 'true' and reject if 'undefined'.
-        builder.getAttributeBuilder()
-                .setDiscard(new DiscardAttributeChecker.DiscardAttributeValueChecker(false, false, new ModelNode(true)),
-                        WeldResourceDefinition.NON_PORTABLE_MODE_ATTRIBUTE, WeldResourceDefinition.REQUIRE_BEAN_DESCRIPTOR_ATTRIBUTE)
-                .addRejectCheck(new RejectAttributeChecker.DefaultRejectAttributeChecker() {
- 
-                    @Override
-                    public String getRejectionLogMessage(Map<String, ModelNode> attributes) {
-                        return WeldMessages.MESSAGES.rejectAttributesMustBeTrue(attributes.keySet());
-                    }
- 
-                    @Override
-                    protected boolean rejectAttribute(PathAddress address, String attributeName, ModelNode attributeValue,
-                            TransformationContext context) {
-                        //This will not get called if it was discarded, so reject if it is undefined (default==false) or if defined and != 'true'
-                        return !attributeValue.isDefined() || !attributeValue.asString().equals("true");
-                    }
-                }, WeldResourceDefinition.NON_PORTABLE_MODE_ATTRIBUTE, WeldResourceDefinition.REQUIRE_BEAN_DESCRIPTOR_ATTRIBUTE)
-                .end();
-        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 0, 0));
-    }
-
-
-
-

Here we register a discard check and a reject check. As mentioned in -#Attribute -transformation lifecycle all attributes are inspected for whether they -should be discarded first. Then all attributes which were not discarded -are checked for if they should be rejected. We will dig more into what -this code means in the next few sections, but in short it means that we -discard the require-bean-descriptor and non-portable attributes on -the weld subsystem resource if they have the value true. If they -have any other value, they will not get discarded and so reach the -reject check, which will reject the transformation of the attributes if -they have any other value.

-
-
-

Here we are saying that we should discard the require-bean-descriptor -and non-portable-mode attributes on the weld subsystem resource if -they are undefined, and reject them if they are defined. So that means -that if the weld subsystem looks like

-
-
-
-
    {
-        "non-portable-mode" => false,
-        "require-bean-descriptor" => false
-    }
-
-
-
-

or

-
-
-
-
    {
-        "non-portable-mode" => undefined,
-        "require-bean-descriptor" => undefined
-    }
-
-
-
-

or any other combination (the default values for these attributes if -undefined is false) we will reject the transformation for the secondary -legacy HC.

-
-
-

If the resource has true for these attributes:

-
-
-
-
    {
-        "non-portable-mode" => true,
-        "require-bean-descriptor" => true
-    }
-
-
-
-

they both get discarded (i.e. removed), so they will not get inspected -for rejection, and an empty model not containing these attributes gets -sent to the legacy HC.

-
-
-

Here we will discuss this API a bit more, to outline the most important -features/most commonly needed tasks.

-
-
-

4.5.1. ResourceTransformationDescriptionBuilder

-
-

The ResourceTransformationDescriptionBuilder contains transformations -for a resource type. The initial one is for the subsystem, obtained by -the following call:

-
-
-
-
        ResourceTransformationDescriptionBuilder subsystemBuilder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
-
-
-
-

The ResourceTransformationDescriptionBuilder contains functionality -for how to handle child resources, which we will look at in this -section. It is also the entry point to how to handle transformation of -attributes as we will see in -#AttributeTransformationDescriptionBuilder. -Also, it allows you to further override operation transformation as -discussed in -#OperationTransformationOverrideBuilder. -When we have finished with our builder, we register it with the -SubsystemRegistration against the target ModelVersion.

-
-
-
-
        TransformationDescription.Tools.register(subsystemBuilder.build(), subsystem, ModelVersion.create(1, 0, 0));
-
-
-
-

Important

-
-
- - - - - -
- - -If you have several old ModelVersions you could be transforming to, you -need a separate builder for each of those. -
-
-
-
Silently discard child resources
-
-

To make the ResourceTransformationDescriptionBuilder do something, we -need to call some of its methods. For example, if we want to silently -discard a child resource, we can do

-
-
-
-
    subsystemBuilder.discardChildResource(PathElement.pathElement("child", "discarded"));
-
-
-
-

This means that any usage of /subsystem=my-subsystem/child=discarded -never make it to the legacy secondary HC running ModelVersion 1.0.0. During -the initial domain model transfer, that part of the serialized domain -model is stripped out, and any operations on this address are not -forwarded on to the legacy secondary HCs running that version of the -subsystem. (For brevity this section will leave out the leading -/profile=xxx part used in domain mode, and use -/subsystem=my-subsystem as the 'top-level' address).

-
-
-

Warning

-
-
- - - - - -
- - -Note that discarding, although the simplest option in theory, is rarely -the right thing to do. -
-
-
-

The presence of the defined child normally implies some behaviour on the -DC, and that behaviour is not available on the legacy secondary HC, so -normally rejection is a better policy for those cases. Remember we can -have different profiles targeting different groups of versions of legacy -secondary HCs.

-
-
-
-
Reject child resource
-
-

If we want to reject transformation if a child resource exists, we can -do

-
-
-
-
    subsystemBuilder.rejectChildResource(PathElement.pathElement("child", "reject"));
-
-
-
-

Now, if there are any legacy secondary HCs running ModelVersion 1.0.0, any -usage of /subsystem=my-subsystem/child=reject will get rejected for -those secondary HCs. Both during the initial domain model transfer, and if any -operations are invoked on that address. For example the remoting -subsystem did not have a http-connector=* child until ModelVersion -2.0.0, so it is set up to reject that child when transforming to legacy -HCs for all previous ModelVersions (1.1.0, 1.2.0 and 1.3.0). (See -#Rejection -in resource transformers and -#Rejection -in operation transformers for exactly what happens when something is -rejected).

-
-
-
-
Redirect address for child resource
-
-

Sometimes we rename the addresses for a child resource between model -versions. To do that we use one of the addChildRedirection() methods, -note that these also return a builder for the child resource (since we -are not rejecting or discarding it), we can do this for all children of -a given type:

-
-
-
-
    ResourceTransformationDescriptionBuilder childBuilder =
-       subsystemBuilder.addChildRedirection(PathElement.pathElement("newChild"), PathElement.pathElement("oldChild");
-
-
-
-

Now, in the initial domain transfer -/subsystem=my-subsystem/newChild=test becomes -/subsystem=my-subsystem/oldChild=test. Similarly all operations -against the former address get mapped to the latter when executing -operations on the DC before sending them to the legacy secondary HC running -ModelVersion 1.1.0 of the subsystem.

-
-
-

We can also rename a specific named child:

-
-
-
-
    ResourceTransformationDescriptionBuilder childBuilder =
-       subsystemBuilder.addChildRedirection(PathElement.pathElement("newChild", "newName"), PathElement.pathElement("oldChild", "oldName");
-
-
-
-

Now, /subsystem=my-subsystem/newChild=newName becomes -/subsystem=my-subsystem/oldChild=oldName both in the initial domain -transfer, and when mapping operations to the legacy secondary HC. For example, -under the web subsystem ssl=configuration got renamed to -configuration=ssl in later versions, meaning we need a redirect from -configuration=ssl to ssl=configuration in its transformers.

-
-
-
-
Getting a child resource builder
-
-

Sometimes we don’t want to transform the subsystem resource, but we want -to transform something in one of its child resources. Again, since we -are not discarding or rejecting, we get a reference to the builder for -the child resource.

-
-
-
-
    ResourceTransformationDescriptionBuilder childBuilder =
-       subsystemBuilder.addChildResource(PathElement.pathElement("some-child"));
-    //We don't actually want to transform anything in /subsystem-my-subsystem/some-child=* either :-)
-    //We are interested in /subsystem-my-subsystem/some-child=*/another-level
-    ResourceTransformationDescriptionBuilder anotherBuilder =
-       childBuilder.addChildResource(PathElement.pathElement("another-level"));
- 
-    //Use anotherBuilder to add child-resource and/or attribute transformation
-    ....
-
-
-
-
-
-

4.5.2. AttributeTransformationDescriptionBuilder

-
-

To transform attributes you call -ResourceTransformationDescriptionBuilder.getAttributeBuilder() which -returns you a AttributeTransformationDescriptionBuilder which is used -to define transformation for the resource’s attributes. For example this -gets the attribute builder for the subsystem resource:

-
-
-
-
    AttributeTransformationDescriptionBuilder attributeBuilder = subSystemBuilder.getAttributeBuilder();
-
-
-
-

or we could get it for one of the child resources:

-
-
-
-
    ResourceTransformationDescriptionBuilder childBuilder =
-       subsystemBuilder.addChildResource(PathElement.pathElement("some-child"));
-    AttributeTransformationDescriptionBuilder attributeBuilder = childBuilder.getAttributeBuilder();
-
-
-
-

The attribute transformations defined by the -AttributeTransformationDescriptionBuilder will also impact the -parameters to all operations defined on the resource. This means that if -you have defined the example attribute of -/subsystem=my-subsystem/some-child=* to reject transformation if its -value is true, the inital domain transfer will reject if it is true, -also the transformation of the following operations will reject:

-
-
-
-
    /subsystem=my-subsystem/some-child=test:add(example=true)
-    /subsystem=my-subsystem:write-attribute(name=example, value=true)
-    /subsystem=my-subsystem:custom-operation(example=true)
-
-
-
-

The following operations will pass in this example, since the example -attribute is not getting set to true

-
-
-
-
    /subsystem=my-subsystem/some-child=test:add(example=false)
-    /subsystem=my-subsystem/some-child=test:add()             //Here it 'example' is simply left undefined
-    /subsystem=my-subsystem:write-attribute(name=example, value=false)
-    /subsystem=my-subsystem:undefine-attribute(name=example)  //Again this makes 'example' undefined
-    /subsystem=my-subsystem:custom-operation(example=false)
-
-
-
-

For the rest of the examples in this section we assume that the -attributeBuilder is for /subsystem=my-subsystem

-
-
-
Attribute transformation lifecycle
-
-

There is a well defined lifecycle used for attribute transformation that -is worth explaining before jumping into specifics. Transformation is -done in the following phases, in the following order:

-
-
-
    -
  1. -

    discard - All attributes in the domain model transfer or invoked -operation that have been registered for a discard check, are checked to -see if the attribute should be discarded. If an attribute should be -discarded, it is removed from the resource’s attributes/operation’s -parameters and it does not get passed to the next phases. Once discarded -it does not get sent to the legacy secondary HC.

    -
  2. -
  3. -

    reject - All attributes that have been registered for a reject -check (and which not have been discarded) are checked to see if the -attribute should be rejected. As explained in -#Rejection -in resource transformers and -#Rejection -in operation transformers exactly what happens when something is -rejected varies depending on whether we are transforming a resource or -an operation, and the version of the legacy secondary HC we are transforming -for. If a transformer rejects an attribute, all other reject -transformers still get invoked, and the next phases also get invoked. -This is because we don’t know in all cases what will happen if a reject -happens. Although this might sound cumbersome, in practice it actually -makes it easier to write transformers since you only need one kind -regardless of if it is a resource, an operation, and legacy secondary HC -version. However, as we will see in -Common -transformation use-cases, it means some extra checks are needed when -writing reject and convert transformers.

    -
  4. -
  5. -

    convert - All attributes that have been registered for conversion -are checked to see if the attribute should be converted. If the -attribute does not exist in the original operation/resource it may be -introduced. This is useful for setting default values for the target -legacy secondary HC.

    -
  6. -
  7. -

    rename - All attributes registered for renaming are renamed.

    -
  8. -
-
-
-

Next, let us have a look at how to register attributes for each of these -phases.

-
-
-
-
Discarding attributes
-
-

The general idea behind a discard is that we remove attributes which do -not exist in the legacy secondary HC’s model. However, as hopefully -described below, we normally can’t simply discard everything, we need to -check the values first.

-
-
-

To discard an attribute we need an instance of -org.jboss.as.controller.transform.description.DiscardAttributeChecker, -and call the following method on the -AttributeTransformationDescriptionBuilder:

-
-
-
-
     DiscardAttributeChecker discardCheckerA = ....;
-     attributeBuilder.setDiscard(discardCheckerA, "attr1", "attr2");
-
-
-
-

As shown, you can register the DiscardAttributeChecker for several -attributes at once, in the above example both attr1 and attr2 get -checked for if they should be discarded. You can also register different -DiscardAttributeChecker instances for different attributes:

-
-
-
-
     DiscardAttributeChecker discardCheckerA = ....;
-     DiscardAttributeChecker discardCheckerB = ....;
-     attributeBuilder.setDiscard(discardCheckerA, "attr1");
-     attributeBuilder.setDiscard(discardCheckerA, "attr2");
-
-
-
-

Note that you can only have one DiscardAttributeChecker per attribute, -so the following would cause an error (if running with assertions -enabled, otherwise discardCheckerB will overwrite discardCheckerA):

-
-
-
-
     DiscardAttributeChecker discardCheckerA = ....;
-     DiscardAttributeChecker discardCheckerB = ....;
-     attributeBuilder.setDiscard(discardCheckerA, "attr1");
-     attributeBuilder.setDiscard(discardCheckerB, "attr1");
-
-
-
-
The DiscardAttributeChecker interface
-
-

org.jboss.as.controller.transform.description.DiscardAttributeChecker -contains both the DiscardAttributeChecker and some helper -implementations. The implementations of this interface get called for -each attribute they are registered against. The interface itself is -quite simple:

-
-
-
-
public interface DiscardAttributeChecker {
- 
-    /**
-     * Returns {@code true} if the attribute should be discarded if expressions are used
-     *
-     * @return whether to discard if expressions are used
-     */
-    boolean isDiscardExpressions();
-
-
-
-

Return true here to discard the attribute if it is an expression. If -it is an expression, and this method returns true, the -isOperationParameterDiscardable and isResourceAttributeDiscardable -methods will not get called.

-
-
-
-
    /**
-     * Returns {@code true} if the attribute should be discarded if it is undefined
-     *
-     * @return whether to discard if the attribute is undefined
-     */
-    boolean isDiscardUndefined();
-
-
-
-

Return true here to discard the attribute if it is undefined. If it -is undefined, and this method returns true, the -isDiscardExpressions, isOperationParameterDiscardable and -isResourceAttributeDiscardable methods will not get called.

-
-
-
-
    /**
-     * Gets whether the given operation parameter can be discarded
-     *
-     * @param address the address of the operation
-     * @param attributeName the name of the operation parameter.
-     * @param attributeValue the value of the operation parameter.
-     * @param operation the operation executed. This is unmodifiable.
-     * @param context the context of the transformation
-     *
-     * @return {@code true} if the operation parameter value should be discarded, {@code false} otherwise.
-     */
-    boolean isOperationParameterDiscardable(PathAddress address, String attributeName, ModelNode attributeValue, ModelNode operation, TransformationContext context);
-
-
-
-

If we are transforming an operation, this method gets called for each -operation parameter. We have access to the address of the operation, the -name and value of the operation parameter, an unmodifiable copy of the -original operation and the TransformationContext. The -TransformationContext allows you access to the original resource the -operation is working on before any transformation happened, which is -useful if you want to check other values in the resource if this is, say -a write-attribute operation. Return true to discard the operation.

-
-
-
-
    /**
-     * Gets whether the given attribute can be discarded
-     *
-     * @param address the address of the resource
-     * @param attributeName the name of the attribute
-     * @param attributeValue the value of the attribute
-     * @param context the context of the transformation
-     *
-     * @return {@code true} if the attribute value should be discarded, {@code false} otherwise.
-     */
-    boolean isResourceAttributeDiscardable(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
-
-
-
-

If we are transforming a resource, this method gets called for each -attribute in the resource. We have access to the address of the -resource, the name and value of the attribute, and the -TransformationContext. Return true to discard the operation.

-
-
-
-
}
-
-
-
-
-
DiscardAttributeChecker helper classes/implementations
-
-

DiscardAttributeChecker contains a few helper implementations for the -most common cases to save you writing the same stuff again and again.

-
-
-DiscardAttributeChecker.DefaultDiscardAttributeChecker -
-

DiscardAttributeChecker.DefaultDiscardAttributeChecker is an abstract -convenience class. In most cases you don’t need a separate check for if -an operation or a resource is being transformed, so it makes both the -isResourceAttributeDiscardable() and -isOperationParameterDiscardable() methods call the following method.

-
-
-
-
protected abstract boolean isValueDiscardable(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
-
-
-
-

All you lose, in the case of an operation transformation, is the name of -the transformed operation. The constructor of -DiscardAttributeChecker.DefaultDiscardAttributeChecker also allows you -to define values for isDiscardExpressions() and -isDiscardUndefined().

-
-
-
-DiscardAttributeChecker.DiscardAttributeValueChecker -
-

This is another convenience class, which allows you to discard an -attribute if it has one or more values. Here is a real-world example -from the jpa subsystem:

-
-
-
-
    private void initializeTransformers_1_1_0(SubsystemRegistration subsystemRegistration) {
-        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
-        builder.getAttributeBuilder()
-            .setDiscard(
-                   new DiscardAttributeChecker.DiscardAttributeValueChecker(new ModelNode(ExtendedPersistenceInheritance.DEEP.toString())),
-                   JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE)
-            .addRejectCheck(RejectAttributeChecker.DEFINED, JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE)
-            .end();
-        TransformationDescription.Tools.register(builder.build(), subsystemRegistration, ModelVersion.create(1, 1, 0));
-    }
-
-
-
-

We will come back to the reject checks in the -#Rejecting -attributes section. We are saying that we should discard the -JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE attribute if it -has the value deep. The reasoning here is that this attribute did not -exist in the old model, but the legacy secondary HCs implied behaviour is -that this was deep. In the current version we added the possibility to -toggle this setting, but only deep is consistent with what is -available in the legacy secondary HC. In this case we are using the -constructor for DiscardAttributeChecker.DiscardAttributeValueChecker -which says don’t discard if it uses expressions, and discard if it is -undefined. If it is undefined in the current model, looking at the -default value of -JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE, it is deep, -so a discard is in line with the implied legacy behaviour. If an -expression is used, we cannot discard since we have no idea what the -expression will resolve to on the secondary HC.

-
-
-
-DiscardAttributeChecker.ALWAYS -
-

DiscardAttributeChecker.ALWAYS will always discard an attribute. Use -this sparingly, since normally the presence of an attribute in the -current model implies some behaviour should be turned on, and if that -does not exist in the legacy model it implies that that behaviour does -not exist in the legacy secondary HC and its servers. Normally the legacy -secondary HC’s subsystem has some implied behaviour which is better checked -for by using a DiscardAttributeChecker.DiscardAttributeValueChecker. -One valid use for DiscardAttributeChecker.ALWAYS can be found in the -ejb3 subsystem:

-
-
-
-
    private static void registerTransformers_1_1_0(SubsystemRegistration subsystemRegistration) {
-        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance()
-                .getAttributeBuilder()
-                 ...
-                // We can always discard this attribute, because it's meaningless without the security-manager subsystem, and
-                // a legacy secondary HC can't have that subsystem in its profile.
-                .setDiscard(DiscardAttributeChecker.ALWAYS, EJB3SubsystemRootResourceDefinition.DISABLE_DEFAULT_EJB_PERMISSIONS)
-   ...
-
-
-
-

As the comment says, this attribute only makes sense with the -security-manager susbsystem, which does not exist on legacy secondary HCs -running ModelVersion 1.1.0 of the ejb3 subsystem.

-
-
-
-DiscardAttributeChecker.UNDEFINED -
-

DiscardAttributeChecker.UNDEFINED will discard an attribute if it is -undefined. This is normally safer than -DiscardAttributeChecker.ALWAYS since the attribute is not set in the -current model, we don’t need to send it to the legacy model. However, -you should check that this attribute not existing in the legacy secondary -HC, implies the same functionality as being undefined in the current DC.

-
-
-
-
-
-
Rejecting attributes
-
-

The next step is to check attributes and values which we know for sure -will not work on the target legacy secondary HC.

-
-
-

To reject an attribute we need an instance of -org.jboss.as.controller.transform.description.RejectAttributeChecker, -and call the following method on the -AttributeTransformationDescriptionBuilder:

-
-
-
-
     RejectAttributeChecker rejectCheckerA = ....;
-     attributeBuilder.addRejectCheck(rejectCheckerA, "attr1", "attr2");
-
-
-
-

As shown you can register the RejectAttributeChecker for several -attributes at once, in the above example both attr1 and attr2 get -checked for if they should be discarded. You can also register different -RejectAttributeChecker instances for different attributes:

-
-
-
-
     RejectAttributeChecker rejectCheckerA = ....;
-     RejectAttributeChecker rejectCheckerB = ....;
-     attributeBuilder.addRejectCheck(rejectCheckerA, "attr1");
-     attributeBuilder.addRejectCheck(rejectCheckerB, "attr2");
-
-
-
-

You can also register several RejectAttributeChecker instances per -attribute

-
-
-
-
     RejectAttributeChecker rejectCheckerA = ....;
-     RejectAttributeChecker rejectCheckerB = ....;
-     attributeBuilder.addRejectCheck(rejectCheckerA, "attr1");
-     attributeBuilder.addRejectCheck(rejectCheckerB, "attr1, "attr2");
-
-
-
-

In this case attr1 gets both rejectCheckerA and rejectCheckerB. -For attributes with several RejectAttributeChecker registered, they -get processed in the order that they have been added. So when checking -attr1 for rejection, rejectCheckerA gets run before -rejectCheckerB. As mentioned in -#Attribute -transformation lifecycle, if an attribute is rejected, we still invoke -the rest of the reject checkers.

-
-
-
The RejectAttributeChecker interface
-
-

org.jboss.as.controller.transform.description.RejectAttributeChecker -contains both the RejectAttributeChecker and some helper -implementations. The implementations of this interface get called for -each attribute they are registered against. The interface itself is -quite simple, and its main methods are similar to -DiscardAttributeChecker:

-
-
-
-
public interface RejectAttributeChecker {
-    /**
-     * Determines whether the given operation parameter value is not understandable by the target process and needs
-     * to be rejected.
-     *
-     * @param address        the address of the operation
-     * @param attributeName  the name of the attribute
-     * @param attributeValue the value of the attribute
-     * @param operation      the operation executed. This is unmodifiable.
-     * @param context        the context of the transformation
-     * @return {@code true} if the parameter value is not understandable by the target process and so needs to be rejected, {@code false} otherwise.
-     */
-    boolean rejectOperationParameter(PathAddress address, String attributeName, ModelNode attributeValue, ModelNode operation, TransformationContext context);
-
-
-
-

If we are transforming an operation, this method gets called for each -operation parameter. We have access to the address of the operation, the -name and value of the operation parameter, an unmodifiable copy of the -original operation and the TransformationContext. The -TransformationContext allows you access to the original resource the -operation is working on before any transformation happened, which is -useful if you want to check other values in the resource if this is, say -a write-attribute operation. Return true to reject the operation.

-
-
-
-
    /**
-     * Gets whether the given resource attribute value is not understandable by the target process and needs
-     * to be rejected.
-     *
-     * @param address        the address of the resource
-     * @param attributeName  the name of the attribute
-     * @param attributeValue the value of the attribute
-     * @param context        the context of the transformation
-     * @return {@code true} if the attribute value is not understandable by the target process and so needs to be rejected, {@code false} otherwise.
-     */
-    boolean rejectResourceAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
-
-
-
-

If we are transforming a resource, this method gets called for each -attribute in the resource. We have access to the address of the -resource, the name and value of the attribute, and the -TransformationContext. Return true to discard the operation.

-
-
-
-
    /**
-     * Returns the log message id used by this checker. This is used to group it so that all attributes failing a type of rejection
-     * end up in the same error message
-     *
-     * @return the log message id
-     */
-    String getRejectionLogMessageId();
-
-
-
-

Here we need a unique id for the log message from the -RejectAttributeChecker. It is used to group rejected attributes by -their log message. A typical implementation will contain \{\{return -getRejectionLogMessage(Collections.<String, ModelNode>emptyMap());}

-
-
-
-
    /**
-     * Gets the log message if the attribute failed rejection
-     *
-     * @param attributes a map of all attributes failed in this checker and their values
-     * @return the formatted log message
-     */
-    String getRejectionLogMessage(Map<String, ModelNode> attributes);
-
-
-
-

Here we return a message saying why the attributes were rejected, with -the possibility to format the message to include the names of all the -rejected attributes and the values they had.

-
-
-
-
}
-
-
-
-
-
RejectAttributeChecker helper classes/implementations
-
-

RejectAttributeChecker contains a few helper classes for the most -common scenarios to save you from writing the same stuff again and -again.

-
-
-RejectAttributeChecker.DefaultRejectAttributeChecker -
-

RejectAttributeChecker.DefaultRejectAttributeChecker is an abstract -convenience class. In most cases you don’t need a separate check for if -an operation or a resource is being transformed, so it makes both the -rejectOperationParameter() and rejectResourceAttribute() methods -call the following method.

-
-
-
-
protected abstract boolean rejectAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
-
-
-
-

Like DefaultDiscardAttributeChecker, all you loose is the name of the -transformed operation, in the case of operation transformation.

-
-
-
-RejectAttributeChecker.DEFINED -
-

RejectAttributeChecker.DEFINED is used to reject any attribute that -has a defined value. Normally this is because the attribute does not -exist on the target legacy secondary HC. A typical use case for these is for -the implied behavior example we looked at in the jpa subsystem in -#DiscardAttributeChecker.DiscardAttributeValueChecker

-
-
-
-
    private void initializeTransformers_1_1_0(SubsystemRegistration subsystemRegistration) {
-        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
-        builder.getAttributeBuilder()
-            .setDiscard(
-                   new DiscardAttributeChecker.DiscardAttributeValueChecker(new ModelNode(ExtendedPersistenceInheritance.DEEP.toString())),
-                   JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE)
-            .addRejectCheck(RejectAttributeChecker.DEFINED, JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE)
-            .end();
-        TransformationDescription.Tools.register(builder.build(), subsystemRegistration, ModelVersion.create(1, 1, 0));
-    }
-
-
-
-

So we discard the -JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE value if it is -not an expression, and also has the value deep. Now if it was not -discarded, it would will still be defined so we reject it.

-
-
-

Important

-
-
- - - - - -
- - -Reject and discard often work in pairs. -
-
-
-
-RejectAttributeChecker.SIMPLE_EXPRESSIONS -
-

RejectAttributeChecker.SIMPLE_EXPRESSIONS can be used to reject an -attribute that contains expressions. This was used a lot for -transformations to subsystems in JBoss AS 7.1.x, since we had not fully -realized the importance of where to support expressions until JBoss AS -7.2.0 was released, so a lot of attributes in earlier versions were -missing expressions support.

-
-
-
-RejectAttributeChecker.ListRejectAttributeChecker -
-

The -RejectAttributeChecker}}s we have seen so far work on simple attributes, i.e. where the attribute has a ModelType which is one of the primitives. We also have a {{RejectAttributeChecker.ListRejectAttributeChecker -which allows you to define a checker for the elements of a list, when -the type of an attribute is ModelType.LIST.

-
-
-
-
    attributeBuilder
-            .addRejectCheck(new ListRejectAttributeChecker(RejectAttributeChecker.EXPRESSIONS), "attr1");
-
-
-
-

For attr1 it will check each element of the list and run -RejectAttributeChecker.EXPRESSIONS to check that each element is not -an expression. You can of course pass in another kind of -RejectAttributeChecker to check the elements as well.

-
-
-
-RejectAttributeChecker.ObjectFieldsRejectAttributeChecker -
-

For attributes where the type is ModelType.OBJECT we have -RejectAttributeChecker.ObjectFieldsRejectAttributeChecker which allows -you to register different reject checkers for the different fields of -the registered object.

-
-
-
-
    Map<String, RejectAttributeChecker> fieldRejectCheckers = new HashMap<String, RejectAttributeChecker>();
-    fieldRejectCheckers.put("time", RejectAttributeChecker.SIMPLE_EXPRESSIONS);
-    fieldRejectCheckers.put("unit", "Lunar Month");
-    attributeBuilder
-            .addRejectCheck(new ObjectFieldsRejectAttributeChecker(fieldRejectCheckers), "attr1");
-
-
-
-

Now if attr1 is a complex type where -attr1.get("time").getType() == ModelType.EXPRESSION or -attr1.get("unit").asString().equals("Lunar Month") we reject the -attribute.

-
-
-
-
-
-
Converting attributes
-
-

To convert an attribute you register an -org.jboss.as.controller.transform.description.AttributeConverter -instance against the attributes you want to convert:

-
-
-
-
    AttributeConverter converterA = ...;
-    AttributeConverter converterB = ...;
-    attributeBuilder
-            .setValueConverter(converterA, "attr1", "attr2");
-    attributeBuilder
-            .setValueConverter(converterB, "attr3");
-
-
-
-

Now if attr1 and attr2 get converted with converterA, while -attr3 gets converted with converterB.

-
-
-
The AttributeConverter interface
-
-

The AttributeConverter interface gets called for each attribute for -which the AttributeConverter has been registered

-
-
-
-
public interface AttributeConverter {
- 
-    /**
-     * Converts an operation parameter
-     *
-     * @param address the address of the operation
-     * @param attributeName the name of the operation parameter
-     * @param attributeValue the value of the operation parameter to be converted
-     * @param operation the operation executed. This is unmodifiable.
-     * @param context the context of the transformation
-     */
-    void convertOperationParameter(PathAddress address, String attributeName, ModelNode attributeValue, ModelNode operation, TransformationContext context);
-
-
-
-

If we are transforming an operation, this method gets called for each -operation parameter for which the con. We have access to the address of -the operation, the name and value of the operation parameter, an -unmodifiable copy of the original operation and the -TransformationContext. The TransformationContext allows you access -to the original resource the operation is working on before any -transformation happened, which is useful if you want to check other -values in the resource if this is, say a write-attribute operation. To -change the attribute value, you modify the attributeValue.

-
-
-
-
    /**
-     * Converts a resource attribute
-     *
-     * @param address the address of the operation
-     * @param attributeName the name of the attribute
-     * @param attributeValue the value of the attribute to be converted
-     * @param context the context of the transformation
-     */
-    void convertResourceAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
-
-
-
-

If we are transforming a resource, this method gets called for each -attribute in the resource. We have access to the address of the -resource, the name and value of the attribute, and the -TransformationContext. To change the attribute value, you modify the -attributeValue.

-
-
-
-
}
-
-
-
-

A hypothetical example is if the current and legacy subsystems both -contain an attribute called timeout. In the legacy model this was -specified to be milliseconds, however in the current model it has been -changed to be seconds, hence we need to convert the value when sending -it to secondary HCs using the legacy model:

-
-
-
-
     AttributeConverter secondsToMs = new AttributeConverter.DefaultAttributeConverter() {
-                  @Override
-                  protected void convertAttribute(PathAddress address, String attributeName, ModelNode attributeValue,
-                           TransformationContext context) {
-                      if (attributeValue.isDefined()) {
-                           int seconds = attributeValue.asInt();
-                           int milliseconds = seconds * 1000;
-                           attributeValue.set(milliseconds);
-                      }
-                  }
-          };
- 
-     attributeBuilder.
-          .setValueConverter(secondsToMs , "timeout")
-
-
-
-

We need to be a bit careful here. If the timeout attribute is an -expression our nice conversion will not work, so we need to add a reject -check to make sure it is not an expression as well:

-
-
-
-
     attributeBuilder.
-          .addRejectCheck(SIMPLE_EXPRESSIONS, "timeout")
-          .setValueConverter(secondsToMs , "timeout")
-
-
-
-

Now it should be fine.

-
-
-

AttributeConverter.DefaultAttributeConverter is is an abstract -convenience class. In most cases you don’t need a separate check for if -an operation or a resource is being transformed, so it makes both the -convertOperationParameter() and convertResourceAttribute() methods call -the following method.

-
-
-
-
protected abstract void convertAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
-
-
-
-

Like DefaultDiscardAttributeChecker and -DefaultRejectAttributeChecker, all you loose is the name of the -transformed operation, in the case of operation transformation.

-
-
-Introducing attributes during transformation -
-

Say both the current and the legacy models have an attribute called -port. In the legacy version this attribute had to be specified, and -the default xml configuration had 1234 for its value. In the current -version this attribute has been made optional with a default value of -1234 so that it does not need to be specified. When transforming to a -secondary HC using the old version we will need to introduce this attribute -if the new model does not contain it:

-
-
-
-
     attributeBuilder.
-         setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode(1234) true), "port");
-
-
-
-

So what this factory method does is to create an implementation of -AttributeConverter.DefaultAttributeConverter where in -convertAttribute() we set attributeValue to have the value 1234 if -it is undefined. As long as attributeValue gets set in that method -it will get set in the model, regardless of if it existed already or -not.

-
-
-
-
-
-
Renaming attributes
-
-

To rename an attribute, you simply do

-
-
-
-
    attributeBuilder.addRename("my-name", "legacy-name");
-
-
-
-

Now, in the initial domain transfer to the legacy secondary HC, we rename -/subsystem=my-subsystem’s `my-name attribute to legacy-name. Also, -the operations involving this attribute are affected, so

-
-
-
-
    /subsystem=my-subsystem/:add(my-name=true)  ->
-         /subsystem=my-subsystem/:add(legacy-name=true)
-    /subsystem=my-subsystem:write-attribute(name=my-name, value=true) ->
-         /subsystem=my-subsystem:write-attribute(name=legacy-name, value=true)
-    /subsystem=my-subsystem:undefine-attribute(name=my-name) ->
-         /subsystem=my-subsystem:undefine-attribute(name=legacy-name)
-
-
-
-
-
-

4.5.3. OperationTransformationOverrideBuilder

-
-

All operations on a resource automatically get the same transformations -on their parameters as set up by the -AttributeTransformationDescriptionBuilder. In some cases you might -want to change this, so you can use the -OperationTransformationOverrideBuilder, which is got from:

-
-
-
-
OperationTransformationOverrideBuilder operationBuilder = subSystemBuilder.addOperationTransformationOverride("some-operation");
-
-
-
-

In this case the operation will now no longer inherit the -attribute/operation parameter transformations, so they are effectively -turned off. In other cases you might want to include them by calling -inheritResourceAttributeDefinitions(), and to include some more checks -(the OperationTransformationBuilder interface has all the methods -found in AttributeTransformationBuilder:

-
-
-
-
    OperationTransformationOverrideBuilder operationBuilder = subSystemBuilder.addOperationTransformationOverride("some-operation");
-    operationBuilder.inheritResourceAttributeDefinitions();
-    operationBuilder.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode(1234) true), "port");
-
-
-
-

You can also rename operations, in this case the operation -some-operation gets renamed to legacy-operation before getting sent -to the legacy secondary HC.

-
-
-
-
    OperationTransformationOverrideBuilder operationBuilder = subSystemBuilder.addOperationTransformationOverride("some-operation");
-    operationBuilder.rename("legacy-operation");
-
-
-
-
-
-

4.6. Evolving transformers with subsystem ModelVersions

-
-

Say you have a subsystem with ModelVersions 1.0.0 and 1.1.0. There will -(hopefully!) already be transformers in place for 1.1.0 to 1.0.0 -transformations. Let’s say that the transformers registration looks -like:

-
-
-
-
public class SomeExtension implements Extension {
- 
-    private static final String SUBSYSTEM_NAME = "my-subsystem"'
- 
-    private static final int MANAGEMENT_API_MAJOR_VERSION = 1;
-    private static final int MANAGEMENT_API_MINOR_VERSION = 1;
-    private static final int MANAGEMENT_API_MICRO_VERSION = 0;
- 
-    @Override
-    public void initialize(ExtensionContext context) {
-        SubsystemRegistration registration = context.registerSubsystem(SUBSYSTEM_NAME, MANAGEMENT_API_MAJOR_VERSION,
-                MANAGEMENT_API_MINOR_VERSION, MANAGEMENT_API_MICRO_VERSION);
-        //Register the resource definitions
-        ....
-    }
- 
-    private void registerTransformers(final SubsystemRegistration subsystem) {
-        registerTransformers_1_0_0(subsystem);
-    }
- 
-    /**
-     * Registers transformers from the current version to ModelVersion 1.0.0
-     */
-    private void registerTransformers_1_0_0(SubsystemRegistration subsystem) {
-        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
-        builder.getAttributeBuilder()
-            .addRejectCheck(RejectAttributeChecker.DEFINED, "attr1")
-            .end();
-        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 0, 0));
-    }
-}
-
-
-
-

Now say we want to do a new version of the model. This new version -contains a new attribute called 'new-attr' which cannot be defined when -transforming to 1.1.0, we bump the model version to 2.0.0:

-
-
-
-
public class SomeExtension implements Extension {
- 
-    private static final String SUBSYSTEM_NAME = "my-subsystem"'
- 
-    private static final int MANAGEMENT_API_MAJOR_VERSION = 2;
-    private static final int MANAGEMENT_API_MINOR_VERSION = 0;
-    private static final int MANAGEMENT_API_MICRO_VERSION = 0;
- 
-    @Override
-    public void initialize(ExtensionContext context) {
-        SubsystemRegistration registration = context.registerSubsystem(SUBSYSTEM_NAME, MANAGEMENT_API_MAJOR_VERSION,
-                MANAGEMENT_API_MINOR_VERSION, MANAGEMENT_API_MICRO_VERSION);
-        //Register the resource definitions
-        ....
-    }
-
-
-
-

There are a few ways to evolve your transformers:

-
- -
-

4.6.1. The old way

-
-

This is the way that has been used up to WildFly 29.x. However, in -WildFly 9 and later, it is strongly recommended to migrate to what is -mentioned in -#Chained -transformers

-
-
-

Now we need some new transformers from the current ModelVersion to 1.1.0 -where we reject any defined occurrances of our new attribute new-attr:

-
-
-
-
    private void registerTransformers(final SubsystemRegistration subsystem) {
-        registerTransformers_1_0_0(subsystem);
-        registerTransformers_1_1_0(subsystem);
-    }
- 
-    /**
-     * Registers transformers from the current version to ModelVersion 1.1.0
-     */
-    private void registerTransformers_1_1_0(SubsystemRegistration subsystem) {
-        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
-        builder.getAttributeBuilder()
-            .addRejectCheck(RejectAttributeChecker.DEFINED, "new-attr")
-            .end();
-        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 1, 0));
-    }
-
-
-
-

So that is all well and good, however we also need to take into account -that new-attr does not exist in ModelVersion 1.0.0 either, so we -need to extend our transformer for 1.0.0 to reject it there as well. As -you can see 1.0.0 also rejects a defined 'attr1' in addition to the -'new-attr'(which is rejected in both versions).

-
-
-
-
    /**
-     * Registers transformers from the current version to ModelVersion 1.0.0
-     */
-    private void registerTransformers_1_0_0(SubsystemRegistration subsystem) {
-        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
-        builder.getAttributeBuilder()
-            .addRejectCheck(RejectAttributeChecker.DEFINED, "attr1", "new-attr")
-            .end();
-        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 0, 0));
-    }
-}
-
-
-
-

Now new-attr will be rejected if defined for all previous model -versions.

-
-
-
-

4.6.2. Chained transformers

-
-

Since 'The old way' had a lot of duplication of code, since WildFly 9 we -now have chained transformers. You obtain a -ChainedTransformationDescriptionBuilder which is a different entry -point to the ResourceTransformationDescriptionBuilder we have seen -earlier. Each ResourceTransformationDescriptionBuilder deals with -transformation across one version delta.

-
-
-
-
    private void registerTransformers(SubsystemRegistration subsystem) {
-        ModelVersion version1_1_0 = ModelVersion.create(1, 1, 0);
-        ModelVersion version1_0_0 = ModelVersion.create(1, 0, 0);
- 
-        ChainedTransformationDescriptionBuilder chainedBuilder =
-              TransformationDescriptionBuilder.Factory.createChainedSubystemInstance(subsystem.getSubsystemVersion());
- 
-        //Differences between the current version and 1.1.0
-        ResourceTransformationDescriptionBuilder builder110 =
-            chainedBuilder.create(subsystem.getSubsystemVersion(), version1_1_0);
-        builder110.getAttributeBuilder()
-            .addRejectCheck(RejectAttributeChecker.DEFINED, "new-attr")
-            .end();
- 
-        //Differences between the 1.1.0 and 1.0.0
-        ResourceTransformationDescriptionBuilder builder100 =
-            chainedBuilder.create(subsystem.getSubsystemVersion(), version1_0_0);
-        builder110.getAttributeBuilder()
-            .addRejectCheck(RejectAttributeChecker.DEFINED, "attr1")
-            .end();
- 
-        chainedBuilder.buildAndRegister(subsystem, new ModelVersion[]{version1_0_0, version1_1_0});
-
-
-
-

The buildAndRegister(ModelVersion[]…​ chains) method registers a -chain consisting of the built builder110 and builder100 for -transformation to 1.0.0, and a chain consisting of the built -builder110 for transformation to 1.1.0. It allows you to specify more -than one chain.

-
-
-

Now when transforming from the current version to 1.0.0, the resource is -first transformed from the current version to 1.1.0 (which rejects a -defined new-attr) and then it is transformed from 1.1.0 to 1.0.0 -(which rejects a defined attr1). So when evolving transformers you -should normally only need to add things to the last version delta. The -full current-to-1.1.0 transformation is run before the 1.1.0-to-1.0.0 -transformation is run.

-
-
-

One thing worth pointing out that the value returned by -TransformationContext.readResource(PathAddress address) and -TransformationContext.readResourceFromRoot(PathAddress address) which -you can use from your custom RejectAttributeChecker, -DiscardAttributeChecker and AttributeConverter behaves slightly -differently depending on if you are transforming an operation or a -resource.

-
-
-

During resource transformation this will be the latest model, so in -our above example, in the current-to-1.1.0 transformation it will be the -original model. In the 1.1.0-to-1.0.0 transformation, it will be the -result of the current-to-1.1.0 transformation.

-
-
-

During operation transformation these methods will always return the -original model (we are transforming operations, not resources!).

-
-
-

In WildFly 9 we are now less aggressive about transforming to all -previous versions of WildFly, however we still have a lot of good tests -for running against 7.1.x, 8. Also, for Red Hat employees we have tests -against EAP versions. These tests no longer get run by default, to run -them you need to specify some system properties when invoking maven. -They are:

-
-
-
    -
  • -

    -Djboss.test.transformers.subsystem.old - enables the non-default -subsystem tests.

    -
  • -
  • -

    -Djboss.test.transformers.eap - (Red Hat developers only), enables the -eap tests, but only the ones run by default. If run in conjunction with --Djboss.test.transformers.subsystem.old you get all the possible -subsystem tests run.

    -
  • -
  • -

    -Djboss.test.transformers.core.old - enables the non-default core -model tests.

    -
  • -
-
-
-
-
-

4.7. Testing transformers

-
-

To test transformation you need to extend -org.jboss.as.subsystem.test.AbstractSubsystemTest or -org.jboss.as.subsystem.test.AbstractSubsystemBaseTest. Then, in order -to have the best test coverage possible, you should test the fullest -configuration that will work, and you should also test configurations -that don’t work if you have rejecting transformers registered. The -following example is from the threads subsystem, and I have only -included the tests against 7.1.2 - there are more! First we need to set -up our test:

-
-
-
-
public class ThreadsSubsystemTestCase extends AbstractSubsystemBaseTest {
-    public ThreadsSubsystemTestCase() {
-        super(ThreadsExtension.SUBSYSTEM_NAME, new ThreadsExtension());
-    }
- 
-    @Override
-    protected String getSubsystemXml() throws IOException {
-        return readResource("threads-subsystem-1_1.xml");
-    }
-
-
-
-

So we say that this test is for the threads subsystem, and that it is -implemented by ThreadsExtension. This is the same test framework as we -use in -Example -subsystem#Testing the parsers, but we will only talk about the parts -relevant to transformers here.

-
-
-

4.7.1. Testing a configuration that works

-
-

To test a configuration xxx

-
-
-
-
    @Test
-    public void testTransformerAS712() throws Exception {
-        testTransformer_1_0(ModelTestControllerVersion.V7_1_2_FINAL);
-    }
-    /**
-     * Tests transformation of model from 1.1.0 version into 1.0.0 version.
-     *
-     * @throws Exception
-     */
-    private void testTransformer_1_0(ModelTestControllerVersion controllerVersion) throws Exception {
-        String subsystemXml = "threads-transform-1_0.xml";   //This has no expressions not understood by 1.0
-        ModelVersion modelVersion = ModelVersion.create(1, 0, 0); //The old model version
-        //Use the non-runtime version of the extension which will happen on the HC
-        KernelServicesBuilder builder = createKernelServicesBuilder(AdditionalInitialization.MANAGEMENT)
-                .setSubsystemXmlResource(subsystemXml);
- 
-        final PathAddress subsystemAddress = PathAddress.pathAddress(PathElement.pathElement(SUBSYSTEM, mainSubsystemName));
- 
-        // Add legacy subsystems
-        builder.createLegacyKernelServicesBuilder(null, controllerVersion, modelVersion)
-                .addOperationValidationResolve("add", subsystemAddress.append(PathElement.pathElement("thread-factory")))
-                .addMavenResourceURL("org.jboss.as:jboss-as-threads:" + controllerVersion.getMavenGavVersion())
-                .excludeFromParent(SingleClassFilter.createFilter(ThreadsLogger.class));
- 
-        KernelServices mainServices = builder.build();
-        KernelServices legacyServices = mainServices.getLegacyServices(modelVersion);
-        Assert.assertNotNull(legacyServices);
-        checkSubsystemModelTransformation(mainServices, modelVersion);
-    }
-
-
-
-

What this test does is get the builder to configure the test controller -using threads-transform-1_0.xml. This main builder works with the -current subsystem version, and the jars in the WildFly checkout.

-
-
-

Next we configure a 'legacy' controller. This will run the version of -the core libraries (e.g the controller module) as found in the -targeted legacy version of JBoss AS/WildFly), and the subsystem. We need -to pass in that it is using the core AS version 7.1.2.Final (i.e. the -ModelTestControllerVersion.V7_1_2_FINAL part) and that that version is -ModelVersion 1.0.0. Next we have some addMavenResourceURL() calls -passing in the Maven GAVs of the old version of the subsystem and any -dependencies it has needed to boot up. Normally, specifying just the -Maven GAV of the old version of the subsystem is enough, but that -depends on your subsystem. In this case the old subsystem GAV is enough. -When booting up the legacy controller the framework uses the parsed -operations from the main controller and transforms them using the 1.0.0 -transformer in the threads subsystem. The -addOperationValidationResolve() and excludeFromParent() calls are -not normally necessary, see the javadoc for more examples.

-
-
-

The call to KernelServicesBuilder.build() will build both the main -controller and the legacy controller. As part of that it also boots up a -second copy of the main controller using the transformed operations to -make sure that the 'old' ops to boot our subsystem will still work on -the current controller, which is important for backwards compatibility -of CLI scripts. To tweak how that is done if you see failures there, see -LegacyKernelServicesInitializer.skipReverseControllerCheck() and -LegacyKernelServicesInitializer.configureReverseControllerCheck(). The -LegacyKernelServicesInitializer is what gets returned by -KernelServicesBuilder.createLegacyKernelServicesBuilder().

-
-
-

Finally we call checkSubsystemModelTransformation() which reads the -full legacy subsystem model. The legacy subsystem model will have been -built up from the transformed boot operations from the parsed xml. The -operations get transformed by the operation transformers. Then it takes -the model of the current subsystem and transforms that using the -resource transformers. Then it compares the two models, which should be -the same. In some rare cases it is not possible to get those two models -exactly the same, so there is a version of this method that takes a -ModelFixer to make adjustments. The -checkSubsystemModelTransformation() method also makes sure that the -legacy model is valid according to the legacy subsystem’s resource -definition.

-
-
-

The legacy subsystem resource definitions are read on demand from the -legacy controller when the tests run. In some older versions of -subsystems (before we converted everything to use ResourceDefinition, -and DescriptionProvider implementations were coded by hand) there were -occasional problems with the resource definitions and they needed to be -touched up. In this case you can generate a new one, touch it up and -store the result in a file in the test resources under -/same/package/as/the/test/class/{{subsystem-name- model-version. -This will then prefer the file read from the file system to the one read -at runtime. To generate the .dmr file, you need to generate it by adding -a temporary test (make sure that you adjust controllerVersion and -modelVersion to what you want to generate):

-
-
-
-
    @Test
-    public void deleteMeWhenDone() throws Exception {
-        ModelTestControllerVersion controllerVersion = ModelTestControllerVersion.V7_1_2_FINAL;
-        ModelVersion modelVersion = ModelVersion.create(1, 0, 0);
-        KernelServicesBuilder builder = createKernelServicesBuilder(null);
- 
-        builder.createLegacyKernelServicesBuilder(null, controllerVersion, modelVersion)
-            .addMavenResourceURL("org.jboss.as:jboss-as-threads:" + controllerVersion.getMavenGavVersion());
-        KernelServices services = builder.build();
- 
-        generateLegacySubsystemResourceRegistrationDmr(services, modelVersion);
-    }
-
-
-
-

Now run the test and delete it. The legacy .dmr file should be in -target/test-classes/org/jboss/as/subsystem/test/<your-subsystem-name>-<your-version>.dmr. -Copy this .dmr file to the correct location in your project’s test -resources.

-
-
-
-

4.7.2. Testing a configuration that does not work

-
-

The threads subsystem (like several others) did not support the use of -expression values in the version that came with JBoss AS 7.1.2.Final. So -we have a test that attempts to use expressions, and then fixes each -resource and attribute where expressions were not allowed.

-
-
-
-
    @Test
-    public void testRejectExpressionsAS712() throws Exception {
-        testRejectExpressions_1_0_0(ModelTestControllerVersion.V7_1_2_FINAL);
-    }
- 
-    private void testRejectExpressions_1_0_0(ModelTestControllerVersion controllerVersion) throws Exception {
-        // create builder for current subsystem version
-        KernelServicesBuilder builder = createKernelServicesBuilder(createAdditionalInitialization());
- 
-        // create builder for legacy subsystem version
-        ModelVersion version_1_0_0 = ModelVersion.create(1, 0, 0);
-        builder.createLegacyKernelServicesBuilder(null, controllerVersion, version_1_0_0)
-                .addMavenResourceURL("org.jboss.as:jboss-as-threads:" + controllerVersion.getMavenGavVersion())
-                .excludeFromParent(SingleClassFilter.createFilter(ThreadsLogger.class));
- 
-        KernelServices mainServices = builder.build();
-        KernelServices legacyServices = mainServices.getLegacyServices(version_1_0_0);
- 
-        Assert.assertNotNull(legacyServices);
-        Assert.assertTrue("main services did not boot", mainServices.isSuccessfulBoot());
-        Assert.assertTrue(legacyServices.isSuccessfulBoot());
- 
-        List<ModelNode> xmlOps = builder.parseXmlResource("expressions.xml");
- 
-        ModelTestUtils.checkFailedTransformedBootOperations(mainServices, version_1_0_0, xmlOps, getConfig());
-    }
-
-
-
-

Again we boot up a current and a legacy controller. However, note in -this case that they are both empty, no xml was parsed on boot so there -are no operations to boot up the model. Instead once the controllers -have been booted, we call KernelServicesBuilder.parseXmlResource() -which gets the operations from expressions.xml. expressions.xml uses -expressions in all the places they were not allowed in 7.1.2.Final. For -each resource ModelTestUtils.checkFailedTransformedBootOperations() -will check that the add operation gets rejected, and then correct one -attribute at a time until the resource has been totally corrected. Once -the add operation is totally correct, it will check that the add -operation no longer is rejected. The configuration for this is the -FailedOperationTransformationConfig returned by the getConfig() -method:

-
-
-
-
    private FailedOperationTransformationConfig getConfig() {
-        PathAddress subsystemAddress = PathAddress.pathAddress(ThreadsExtension.SUBSYSTEM_PATH);
-        FailedOperationTransformationConfig.RejectExpressionsConfig allowedAndKeepalive =
-                new FailedOperationTransformationConfig.RejectExpressionsConfig(PoolAttributeDefinitions.ALLOW_CORE_TIMEOUT, PoolAttributeDefinitions.KEEPALIVE_TIME);
-...
-        return new FailedOperationTransformationConfig()
-                .addFailedAttribute(subsystemAddress.append(PathElement.pathElement(CommonAttributes.BLOCKING_BOUNDED_QUEUE_THREAD_POOL)),
-                        allowedAndKeepalive)
-                .addFailedAttribute(subsystemAddress.append(PathElement.pathElement(CommonAttributes.BOUNDED_QUEUE_THREAD_POOL)),
-                        allowedAndKeepalive)
-    }
-
-
-
-

So what this means is that we expect the allow-core-timeout and -keepalive-time attributes for the -blocking-bounded-queue-thread-pool= and bounded-queue-thread-pool= -add operations to use expressions in the parsed xml. We then expect them -to fail since there should be transformers in place to reject -expressions, and correct them one at a time until the add operation -should pass. As well as doing the add operations the -ModelTestUtils.checkFailedTransformedBootOperations() method will also -try calling write-attribute for each attribute, correcting as it goes -along. As well as allowing you to test rejection of expressions -FailedOperationTransformationConfig also has some helper classes to -help testing rejection of other scenarios.

-
-
-
-
-

4.8. Common transformation use-cases

-
-

Most transformations are quite similar, so this section covers some of -the actual transformation patterns found in the WildFly codebase. We -will look at the output of CompareModelVersionsUtil, and see what can be -done to transform for the older secondary HCs. The examples come from the -WildFly codebase but are stripped down to focus solely on the use-case -being explained in an attempt to keep things as clear/simple as -possible.

-
-
-

4.8.1. Child resource type does not exist in legacy model

-
-

Looking at the model comparison between WildFly and JBoss AS 7.2.0, -there is a change to the remoting subsystem. The relevant part of the -output is:

-
-
-
-
======= Resource root address: ["subsystem" => "remoting"] - Current version: 2.0.0; legacy version: 1.2.0 =======
---- Problems for relative address to root []:
-Missing child types in current: []; missing in legacy [http-connector]
-
-
-
-

So our current model has added a child type called http-connector -which was not there in 7.2.0. This is configurable, and adds new -behavior, so it can not be part of a configuration sent across to a -legacy secondary HC running version 1.2.0. So we add the following to -RemotingExtension to reject all instances of that child type against -ModelVersion 1.2.0.

-
-
-
-
    @Override
-    public void initialize(ExtensionContext context) {
-        ....
-        if (context.isRegisterTransformers()) {
-            registerTransformers_1_1(registration);
-            registerTransformers_1_2(registration);
-        }
-    }
-
-    private void registerTransformers_1_2(SubsystemRegistration registration) {
-        TransformationDescription.Tools.register(get1_2_0_1_3_0Description(), registration, VERSION_1_2);
-    }
-
-    private static TransformationDescription get1_2_0_1_3_0Description() {
-        ResourceTransformationDescriptionBuilder builder = ResourceTransformationDescriptionBuilder.Factory.createSubsystemInstance();
-        builder.rejectChildResource(HttpConnectorResource.PATH);
-
-        return builder.build();
-    }
-
-
-
-

Since this child resource type also does not exist in ModelVersion 1.1.0 -we need to reject it there as well using a similar mechanism.

-
-
-
-

4.8.2. Attribute does not exist in the legacy subsystem

-
-
Default value of the attribute is the same as legacy implied
-
-

behavior

-
-
-

This example also comes from the remoting subsystem, and is probably -the most common type of transformation. The comparison tells us that -there is now an attribute under -/subsystem=remoting/remote-outbound-connection=* called protocol -which did not exist in the older version:

-
-
-
-
======= Resource root address: ["subsystem" => "remoting"] - Current version: 2.0.0; legacy version: 1.2.0 =======
---- Problems for relative address to root []:
-....
---- Problems for relative address to root ["remote-outbound-connection" => "*"]:
-Missing attributes in current: []; missing in legacy [protocol]
-Missing parameters for operation 'add' in current: []; missing in legacy [protocol]
-
-
-
-

This difference also affects the add operation. Looking at the current -model the valid values for the protocol attribute are remote, -http-remoting and https-remoting. The last two are new protocols -introduced in WildFly 29, meaning that the implied behaviour in JBoss -7.2.0 and earlier is the remote protocol. Since this attribute does -not exist in the legacy model we want to discard this attribute if it is -undefined or if it has the value remote, both of which are in line -with what the legacy secondary HC is hardwired to use. Also we want to -reject it if it has a value different from remote. So what we need to -do when registering transformers against ModelVersion 1.2.0 to handle -this attribute:

-
-
-
-
    private void registerTransformers_1_2(SubsystemRegistration registration) {
-        TransformationDescription.Tools.register(get1_2_0_1_3_0Description(), registration, VERSION_1_2);
-    }
- 
-    private static TransformationDescription get1_2_0_1_3_0Description() {
-        ResourceTransformationDescriptionBuilder builder = ResourceTransformationDescriptionBuilder.Factory.createSubsystemInstance();
-        protocolTransform(builder.addChildResource(RemoteOutboundConnectionResourceDefinition.ADDRESS)
-                .getAttributeBuilder());
-        return builder.build();
-    }
- 
-    private static AttributeTransformationDescriptionBuilder protocolTransform(AttributeTransformationDescriptionBuilder builder) {
-        builder.setDiscard(new DiscardAttributeChecker.DiscardAttributeValueChecker(new ModelNode(Protocol.REMOTE.toString())), RemoteOutboundConnectionResourceDefinition.PROTOCOL)
-                .addRejectCheck(RejectAttributeChecker.DEFINED, RemoteOutboundConnectionResourceDefinition.PROTOCOL);
-        return builder;
-    }
-
-
-
-

So the first thing to happens is that we register a -DiscardAttributeChecker.DiscardAttributeValueChecker which discards -the attribute if it is either undefined (the default value in the -current model is remote), or defined and has the value remote. -Remembering that the discard phase always happens before the reject -phase, the reject checker checks that the protocol attribute is -defined, and rejects it if it is. The only reason it would be defined -in the reject check, is if it was not discarded by the discard check. -Hopefully this example shows that the discard and reject checkers often -work in pairs.

-
-
-

An alternative way to write the protocolTransform() method would be:

-
-
-
-
     private static AttributeTransformationDescriptionBuilder protocolTransform(AttributeTransformationDescriptionBuilder builder) {
-        builder.setDiscard(new DiscardAttributeChecker.DefaultDiscardAttributeChecker() {
-                    @Override
-                    protected boolean isValueDiscardable(final PathAddress address, final String attributeName, final ModelNode attributeValue, final TransformationCon
-                        return !attributeValue.isDefined() || attributeValue.asString().equals(Protocol.REMOTE.toString());
-                    }
-                }, RemoteOutboundConnectionResourceDefinition.PROTOCOL)
-         .addRejectCheck(RejectAttributeChecker.DEFINED, RemoteOutboundConnectionResourceDefinition.PROTOCOL);
-         return builder;
-
-
-
-

The reject check remains the same, but we have implemented the discard -check by using DiscardAttributeChecker.DefaultDiscardAttributeChecker -instead. However, the effect of the discard check is exactly the same as -when we used DiscardAttributeChecker.DiscardAttributeValueChecker.

-
-
-
-
Default value of the attribute is different from legacy implied
-
-

behaviour

-
-
-

We touched on this in the weld subsystem example we used earlier in this -guide, but let’s take a more thorough look. Our comparison tells us that -we have two new attributes require-bean-descriptor and -non-portable-mode:

-
-
-
-
====== Resource root address: ["subsystem" => "weld"] - Current version: 2.0.0; legacy version: 1.0.0 =======
---- Problems for relative address to root []:
-Missing attributes in current: []; missing in legacy [require-bean-descriptor, non-portable-mode]
-Missing parameters for operation 'add' in current: []; missing in legacy [require-bean-descriptor, non-portable-mode]
-
-
-
-

Now when we look at this we see that the default value for both of the -attributes in the current model is false, which allows us more -flexible behavior introduced in CDI 1.1 (which was introduced with this -version of the subsystem). The old model does not have these attributes, -and implements CDI 1.0, which under the hood (using our weld subsystem -expertise knowledge) implies the values true for both of these. So our -transformer must reject anything that is not true for these -attributes. Let us look at the transformer registered by the -WeldExtension:

-
-
-
-
    private void registerTransformers(SubsystemRegistration subsystem) {
-        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
-        //These new attributes are assumed to be 'true' in the old version but default to false in the current version. So discard if 'true' and reject if 'undefined'.
-        builder.getAttributeBuilder()
-                .setDiscard(new DiscardAttributeChecker.DiscardAttributeValueChecker(false, false, new ModelNode(true)),
-                        WeldResourceDefinition.NON_PORTABLE_MODE_ATTRIBUTE, WeldResourceDefinition.REQUIRE_BEAN_DESCRIPTOR_ATTRIBUTE)
-                .addRejectCheck(new RejectAttributeChecker.DefaultRejectAttributeChecker() {
- 
-                    @Override
-                    public String getRejectionLogMessage(Map<String, ModelNode> attributes) {
-                        return WeldMessages.MESSAGES.rejectAttributesMustBeTrue(attributes.keySet());
-                    }
- 
-                    @Override
-                    protected boolean rejectAttribute(PathAddress address, String attributeName, ModelNode attributeValue,
-                            TransformationContext context) {
-                        //This will not get called if it was discarded, so reject if it is undefined (default==false) or if defined and != 'true'
-                        return !attributeValue.isDefined() || !attributeValue.asString().equals("true");
-                    }
-                }, WeldResourceDefinition.NON_PORTABLE_MODE_ATTRIBUTE, WeldResourceDefinition.REQUIRE_BEAN_DESCRIPTOR_ATTRIBUTE)
-                .end();
-        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 0, 0));
-    }
-
-
-
-

This looks a bit more scary than the previous transformer we have seen, -but isn’t actually too bad. The first thing we do is register a -DiscardAttributeChecker.DiscardAttributeValueChecker which will -discard the attribute if it has the value true. It will not discard if -it is undefined since that defaults to false. This is registered for -both attributes.

-
-
-

If the attributes had the value true they will get discarded we will -not hit the reject checker since discarded attributes never get checked -for rejection. If on the other hand they were an expression (since we -are interested in the actual value, but cannot evaluate what value an -expression will resolve to on the target from the DC running the -transformers), false, or undefined (which will then default to -false) they will not get discarded and will need to be rejected. So -our -RejectAttributeChecker.DefaultRejectAttributeChecker.rejectAttribute() -method will return true (i.e. reject) if the attribute value is -undefined (since that defaults to false) or if it is defined and -'not equal to `true’. It is better to check for 'not equal to `true’ -than to check for 'equal to `false’ since if an expression was used we -still want to reject, and only the 'not equal to `true’ check would -actually kick in in that case.

-
-
-

The other thing we need in our -DiscardAttributeChecker.DiscardAttributeValueChecker is to override -the getRejectionLogMessage() method to get the message to be displayed -when rejecting the transformation. In this case it says something along -the lines "These attributes must be 'true' for use with CDI 1.0 '%s'", -with the names of the attributes having been rejected substituting the -%s.

-
-
-
-
-

4.8.3. Attribute has a different default value

-
-

– TODO

-
-
-

(The gist of this is to use a value converter, such that if the -attribute is undefined, and hence the default value will take effect, -then the value gets converted to the current version’s default value. -This ensures that the legacy HC will use the same effective setting as -current version HCs.

-
-
-

Note however that a change in default values is a form of incompatible -API change, since CLI scripts written assuming the old defaults will now -produce a configuration that behaves differently. Transformers make it -possible to have a consistently configured domain even in the presence -of this kind of incompatible change, but that doesn’t mean such changes -are good practice. They are generally unacceptable in WildFly’s own -subsystems.

-
-
-

One trick to ameliorate the impact of a default value change is to -modify the xml parser for the old schema version such that if the xml -attribute is not configured, the parser sets the old default value for -the attribute, instead of undefined. This approach allows the parsing -of old config documents to produce results consistent with what happened -when they were created. It does not help with CLI scripts though.)

-
-
-
-

4.8.4. Attribute has a different type

-
-

Here the example comes from the capacity parameter some way into the -modcluster subsystem, and the legacy version is AS 7.1.2.Final. There -are quite a few differences, so I am only showing the ones relevant for -this example:

-
-
-
-
====== Resource root address: ["subsystem" => "modcluster"] - Current version: 2.0.0; legacy version: 1.2.0 =======
-...
---- Problems for relative address to root ["mod-cluster-config" => "configuration","dynamic-load-provider" => "configuration","custom-load-m
-etric" => "*"]:
-Different 'type' for attribute 'capacity'. Current: DOUBLE; legacy: INT
-Different 'expressions-allowed' for attribute 'capacity'. Current: true; legacy: false
-...
-Different 'type' for parameter 'capacity' of operation 'add'. Current: DOUBLE; legacy: INT
-Different 'expressions-allowed' for parameter 'capacity' of operation 'add'. Current: true; legacy: false
-
-
-
-

So as we can see expressions are not allowed for the capacity -attribute, and the current type is double while the legacy subsystem -is int. So this means that if the value is for example 2.0 we can -convert this to 2, but 2.5 cannot be converted. The way this is -solved in the ModClusterExtension is to register the following some -other attributes are registered here, but hopefully it is clear anyway:

-
-
-
-
        dynamicLoadProvider.addChildResource(LOAD_METRIC_PATH)
-                    .getAttributeBuilder()
-                        .addRejectCheck(RejectAttributeChecker.SIMPLE_EXPRESSIONS, TYPE, WEIGHT, CAPACITY, PROPERTY)
-                        .addRejectCheck(CapacityCheckerAndConverter.INSTANCE, CAPACITY)
-                        .setValueConverter(CapacityCheckerAndConverter.INSTANCE, CAPACITY)
-                        ...
-                        .end();
-
-
-
-

So we register that we should reject expressions, and we also register -the CapacityCheckerAndConverter for capacity. -CapacityCheckerAndConverter extends the convenience class -DefaultCheckersAndConverter which implements the -DiscardAttributeChecker, RejectAttributeChecker, and -AttributeConverter interfaces. We have seen DiscardAttributeChecker -and RejectAttributeChecker in previous examples. Since we now need to -convert a value we need an instance of AttributeConverter.

-
-
-
-
    static class CapacityCheckerAndConverter extends DefaultCheckersAndConverter {
- 
-        static final CapacityCheckerAndConverter INSTANCE = new CapacityCheckerAndConverter();
-
-
-
-

We should not discard so isValueDiscardable() from -DiscardAttributeChecker always returns false:

-
-
-
-
        @Override
-        protected boolean isValueDiscardable(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context) {
-            //Not used for discard
-            return false;
-        }
- 
-        @Override
-        public String getRejectionLogMessage(Map<String, ModelNode> attributes) {
-            return ModClusterMessages.MESSAGES.capacityIsExpressionOrGreaterThanIntegerMaxValue(attributes.get(CAPACITY.getName()));
-        }
-
-
-
-

Now we check to see if we can convert the attribute to an int and -reject if not. Note that if it is an expression, we have no idea what -its value will resolve to on the target host, so we need to reject it. -Then we try to change it into an int, and reject if that was not -possible:

-
-
-
-
        @Override
-        protected boolean rejectAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context) {
-            if (checkForExpression(attributeValue)
-                    || (attributeValue.isDefined() && !isIntegerValue(attributeValue.asDouble()))) {
-                return true;
-            }
-            Long converted = convert(attributeValue);
-            return (converted != null && (converted > Integer.MAX_VALUE || converted < Integer.MIN_VALUE));
-        }
-
-
-
-

And then finally we do the conversion:

-
-
-
-
        @Override
-        protected void convertAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context) {
-            Long converted = convert(attributeValue);
-            if (converted != null && converted <= Integer.MAX_VALUE && converted >= Integer.MIN_VALUE) {
-                attributeValue.set((int)converted.longValue());
-            }
-        }
- 
- 
-        private Long convert(ModelNode attributeValue) {
-            if (attributeValue.isDefined() && !checkForExpression(attributeValue)) {
-                double raw = attributeValue.asDouble();
-                if (isIntegerValue(raw)) {
-                    return Math.round(raw);
-                }
-            }
-            return null;
-        }
- 
-        private boolean isIntegerValue(double raw) {
-            return raw == Double.valueOf(Math.round(raw)).doubleValue();
-        }
- 
-    }
-
-
-
- - - - - -
- - -References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. -
-
-
-
-
-
-
-

5. Key Interfaces and Classes Relevant to Extension Developers

-
-
-

In the first major section of this guide, we provided an example of how -to implement an extension to the AS. The emphasis there was learning by -doing. In this section, we’ll focus a bit more on the major WildFly -interfaces and classes that most are relevant to extension developers. -The best way to learn about these interfaces and classes in detail is to -look at their javadoc. What we’ll try to do here is provide a brief -introduction of the key items and how they relate to each other.

-
-
-

Before digging into this section, readers are encouraged to read the -"Core Management Concepts" section of the Admin Guide.

-
-
-

5.1. Extension Interface

-
-

The org.jboss.as.controller.Extension interface is the hook by which -your extension to the AS kernel is able to integrate with the AS. During -boot of the AS, when the <extension> element in the AS’s xml -configuration file naming your extension is parsed, the JBoss Modules -module named in the element’s name attribute is loaded. The standard JDK -java.lang.ServiceLoader mechanism is then used to load your module’s -implementation of this interface.

-
-
-

The function of an Extension implementation is to register with the -core AS the management API, xml parsers and xml marshallers associated -with the extension module’s subsystems. An Extension can register -multiple subsystems, although the usual practice is to register just one -per extension.

-
-
-

Once the Extension is loaded, the core AS will make two invocations -upon it:

-
-
-
    -
  • -

    void initializeParsers(ExtensionParsingContext context)

    -
  • -
-
-
-

When this is invoked, it is the Extension implementation’s -responsibility to initialize the XML parsers for this extension’s -subsystems and register them with the given ExtensionParsingContext. -The parser’s job when it is later called is to create -org.jboss.dmr.ModelNode objects representing WildFly management API -operations needed make the AS’s running configuration match what is -described in the xml. Those management operation ModelNode s are added -to a list passed in to the parser.

-
-
-

A parser for each version of the xml schema used by a subsystem should -be registered. A well behaved subsystem should be able to parse any -version of its schema that it has ever published in a final release.

-
-
-
    -
  • -

    void initialize(ExtensionContext context)

    -
  • -
-
-
-

When this is invoked, it is the Extension implementation’s -responsibility to register with the core AS the management API for its -subsystems, and to register the object that is capable of marshalling -the subsystem’s in-memory configuration back to XML. Only one XML -marshaller is registered per subsystem, even though multiple XML parsers -can be registered. The subsystem should always write documents that -conform to the latest version of its XML schema.

-
-
-

The registration of a subsystem’s management API is done via the -ManagementResourceRegistration interface. Before discussing that -interface in detail, let’s describe how it (and the related Resource -interface) relate to the notion of managed resources in the AS.

-
-
-
-

5.2. WildFly Managed Resources

-
-

Each subsystem is responsible for managing one or more management -resources. The conceptual characteristics of a management resource are -covered in some detail in the Admin -Guide; here we’ll just summarize the main points. A management resource -has

-
-
-
    -
  • -

    An address consisting of a list of key/value pairs that uniquely -identifies a resource

    -
  • -
  • -

    Zero or more attributes , the value of which is some sort of -org.jboss.dmr.ModelNode

    -
  • -
  • -

    Zero or more supported operations . An operation has a string name -and zero or more parameters, each of which is a key/value pair where the -key is a string naming the parameter and the value is some sort of -ModelNode

    -
  • -
  • -

    Zero or more children , each of which in turn is a managed -resource

    -
  • -
-
-
-

The implementation of a managed resource is somewhat analogous to the -implementation of a Java object. A managed resource will have a "type", -which encapsulates API information about that resource and logic used to -implement that API. And then there are actual instances of the resource, -which primarily store data representing the current state of a -particular resource. This is somewhat analogous to the "class" and -"object" notions in Java.

-
-
-

A managed resource’s type is encapsulated by the -org.jboss.as.controller.registry.ManagementResourceRegistration the -core AS creates when the type is registered. The data for a particular -instance is encapsulated in an implementation of the -org.jboss.as.controller.registry.Resource interface.

-
-
-
-

5.3. ManagementResourceRegistration Interface

-
-

In the Java analogy used above, the ManagementResourceRegistration is -analogous to the "class", while the Resource discussed below is -analogous to an instance of that class.

-
-
-

A ManagementResourceRegistration represents the specification for a -particular managed resource type. All resources whose address matches -the same pattern will be of the same type, specified by the type’s -ManagementResourceRegistration. The MRR encapsulates:

-
-
-
    -
  • -

    A PathAddress showing the address pattern that matches resources of -that type. This PathAddress can and typically does involve wildcards -in the value of one or more elements of the address. In this case there -can be more than one instance of the type, i.e. different Resource -instances.

    -
  • -
  • -

    Definition of the various attributes exposed by resources of this -type, including the OperationStepHandler implementations used for -reading and writing the attribute values.

    -
  • -
  • -

    Definition of the various operations exposed by resources of this -type, including the OperationStepHandler implementations used for -handling user invocations of those operations.

    -
  • -
  • -

    Definition of child resource types. ManagementResourceRegistration -instances form a tree.

    -
  • -
  • -

    Definition of management notifications emitted by resources of this -type.

    -
  • -
  • -

    Definition of -capabilities provided by -resources of this type.

    -
  • -
  • -

    Definition of RBAC access constraints that should be -applied by the management kernel when authorizing operations against -resources of this type.

    -
  • -
  • -

    Whether the resource type is an alias to another resource type, and if -so information about that relationship. Aliases are primarily used to -preserve backwards compatibility of the management API when the location -of a given type of resources is moved in a newer release.

    -
  • -
-
-
-

The ManagementResourceRegistration interface is a subinterface of -ImmutableManagementResourceRegistration, which provides a read-only -view of the information encapsulated by the MRR. The MRR subinterface -adds the methods needed for registering the attributes, operations, -children, etc.

-
-
-

Extension developers do not directly instantiate an MRR. Instead they -create a ResourceDefinition for the root resource type for each -subsystem, and register it with the ExtensionContext passed in to -their Extension implementation’s initialize method:

-
-
-
-
    public void initialize(ExtensionContext context) {
-        SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, CURRENT_VERSION);
-        subsystem.registerXMLElementWriter(getOurXmlWriter());
-        ResourceDefinition rd = getOurSubsystemDefinition();
-        ManagementResourceRegistration mrr = subsystem.registerSubsystemModel(rd));
-    }
-
-
-
-

The kernel uses the provided ResourceDefinition to construct a -ManagementResourceRegistration and then passes that MRR to the various -registerXXX methods implemented by the ResourceDefinition, giving it -the change to record the resource type’s attributes, operations and -children.

-
-
-
-

5.4. ResourceDefinition Interface

-
-

An implementation of ResourceDefinition is the primary class used by -an extension developer when defining a managed resource type. It -provides basic information about the type, exposes a -DescriptionProvider used to generate a DMR description of the type, -and implements callbacks the kernel can invoke when building up the -ManagementResourceRegistration to ask for registration of definitions -of attributes, operations, children, notifications and capabilities.

-
-
-

Almost always an extension author will create their ResourceDefinition -by creating a subclass of the -org.jboss.as.controller.SimpleResourceDefinition class or of its -PersistentResourceDefinition subclass. Both of these classes have -constructors that take a Parameters object, which is a simple builder -class to use to provide most of the key information about the resource -type. The extension-specific subclass would then take responsibility for -any additional behavior needed by overriding the registerAttributes, -registerOperations, registerNotifications and registerChildren -callbacks to do whatever is needed beyond what is provided by the -superclasses.

-
-
-

For example, to add a writable attribute:

-
-
-
-
    @Override
-    public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
-        super.registerAttributes(resourceRegistration);
-        // Now we register the 'foo' attribute
-        AttributeDefinition ad = FOO; // constant declared elsewhere
-        OperationStepHandler writeHandler = new FooWriteAttributeHandler();
-        resourceRegistration.registerReadWriteHandler(ad, null, writeHandler); // null read handler means use default read handling
-    }
-
-
-
-

To register a custom operation:

-
-
-
-
    @Override
-    public void registerOperations(ManagementResourceRegistration resourceRegistration) {
-        super.registerOperations(resourceRegistration);
-        // Now we register the 'foo-bar' custom operation
-        OperationDefinition od = FooBarOperationStepHandler.getDefinition();
-        OperationStepHandler osh = new FooBarOperationStepHandler();
-        resourceRegistration.registerOperationHandler(od, osh);
-    }
-
-
-
-

To register a child resource type:

-
-
-
-
    @Override
-    public void registerChildren(ManagementResourceRegistration resourceRegistration) {
-        super.registerChildren(resourceRegistration);
-        // Now we register the 'baz=*' child type
-        ResourceDefinition rd = new BazResourceDefinition();
-        resourceRegistration.registerSubmodel(rd);
-    }
-
-
-
-

5.4.1. ResourceDescriptionResolver

-
-

One of the things a ResourceDefinition must be able to do is provide a -DescriptionProvider that provides a proper DMR description of the -resource to use as the output for the standard -read-resource-description management operation. Since you are almost -certainly going to be using one of the standard ResourceDefinition -implementations like SimpleResourceDefinition, the creation of this -DescriptionProvider is largely handled for you. The one thing that is -not handled for you is providing the localized free form text -descriptions of the various attributes, operations, operation -parameters, child types, etc used in creating the resource description.

-
-
-

For this you must provide an implementation of the -ResourceDescriptionResolver interface, typically passed to the -Parameters object provided to the SimpleResourceDefinition -constructor. This interface has various methods that are invoked when a -piece of localized text description is needed.

-
-
-

Almost certainly you’ll satisfy this requirement by providing an -instance of the StandardResourceDescriptionResolver class.

-
-
-

StandardResourceDescriptionResolver uses a ResourceBundle to load -text from a properties file available on the classpath. The keys in the -properties file must follow patterns expected by -StandardResourceDescriptionResolver. See the -StandardResourceDescriptionResolver javadoc for further details.

-
-
-

The biggest task here is to create the properties file and add the text -descriptions. A text description must be provided for everything. The -typical thing to do is to store this properties file in the same package -as your Extension implementation, in a file named -LocalDescriptions.properties.

-
-
-
-
-

5.5. AttributeDefinition Class

-
-

The AttributeDefinition class is used to create the static definition -of one of a managed resource’s attributes. It’s a bit poorly named -though, because the same interface is used to define the details of -parameters to operations, and to define fields in the result of of -operations.

-
-
-

The definition includes all the static information about the -attribute/operation parameter/result field, e.g. the DMR ModelType of -its value, whether its presence is required, whether it supports -expressions, etc. See -Description of the -Management Model for a description of the metadata available. Almost -all of this comes from the AttributeDefinition.

-
-
-

Besides basic metadata, the AttributeDefinition can also hold custom -logic the kernel should use when dealing with the attribute/operation -parameter/result field. For example, a ParameterValidator to use to -perform special validation of values (beyond basic things like DMR type -checks and defined/undefined checks), or an AttributeParser or -AttributeMarshaller to use to perform customized parsing from and -marshaling to XML.

-
-
-

WildFly Core’s controller module provides a number of subclasses of -AttributeDefinition used for the usual kinds of attributes. For each -there is an associated builder class which you should use to build the -AttributeDefinition. Most commonly used are -SimpleAttributeDefinition, built by the associated -SimpleAttributeDefinitionBuilder. This is used for attributes whose -values are analogous to java primitives, String or byte[]. For -collections, there are various subclasses of ListAttributeDefinition -and MapAttributeDefinition. All have a Builder inner class. For -complex attributes, i.e. those with a fixed set of fully defined fields, -use ObjectTypeAttributeDefinition. (Each field in the complex type is -itself specified by an AttributeDefinition.) Finally there’s -ObjectListAttributeDefinition and ObjectMapAttributeDefinition for -lists whose elements are complex types and maps whose values are complex -types respectively.

-
-
-

Here’s an example of creating a simple attribute definition with extra -validation of the range of allowed values:

-
-
-
-
static final AttributeDefinition QUEUE_LENGTH = new SimpleAttributeDefinitionBuilder("queue-length", ModelType.INT)
-                .setRequired(true)
-                .setAllowExpression(true)
-                .setValidator(new IntRangeValidator(1, Integer.MAX_VALUE))
-                .setRestartAllServices() // means modification after resource add puts the server in reload-required
-                .build();
-
-
-
-

Via a bit of dark magic, the kernel knows that the IntRangeValidator -defined here is a reliable source of information on min and max values -for the attribute, so when creating the read-resource-description -output for the attribute it will use it and output min and max -metadata. For STRING attributes, StringLengthValidator can also be -used, and the kernel will see this and provide min-length and -max-length metadata. In both cases the kernel is checking for the -presence of a MinMaxValidator and if found it provides the appropriate -metadata based on the type of the attribute.

-
-
-

Use EnumValidator to restrict a STRING attribute’s values to a set of -legal values:

-
-
-
-
    static final SimpleAttributeDefinition TIME_UNIT = new SimpleAttributeDefinitionBuilder("unit", ModelType.STRING)
-            .setRequired(true)
-            .setAllowExpression(true)
-            .setValidator(new EnumValidator<TimeUnit>(TimeUnit.class))
-            .build();
-
-
-
-

EnumValidator is an implementation of AllowedValuesValidator that -works with Java enums. You can use other implementations or write your -own to do other types of restriction to certain values.

-
-
-

Via a bit of dark magic similar to what is done with MinMaxValidator, -the kernel recognizes the presence of an AllowedValuesValidator and -uses it to seed the allowed-values metadata in -read-resource-description output.

-
-
-

5.5.1. Key Uses of AttributeDefinition

-
-

Your AttributeDefinition instances will be some of the most commonly -used objects in your extension code. Following are the most typical -uses. In each of these examples assume there is a -SimpleAttributeDefinition stored in a constant FOO_AD that is -available to the code. Typically FOO_AD would be a constant in the -relevant ResourceDefinition implementation class. Assume FOO_AD -represents an INT attribute.

-
-
-

Note that for all of these cases except for "Use in Extracting Data from -the Configuration Model for Use in Runtime Services" there may be -utility code that handles this for you. For example -PersistentResourceXMLParser can handle the XML cases, and -AbstractAddStepHandler can handle the "Use in Storing Data Provided by -the User to the Configuration Model" case.

-
-
-
Use in XML Parsing
-
-

Here we have your extension’s implementation of -XMLElementReader<List<ModelNode>> that is being used to parse the xml -for your subsystem and add ModelNode operations to the list that will -be used to boot the server.

-
-
-
-
    @Override
-    public void readElement(final XMLExtendedStreamReader reader, final List<ModelNode> operationList) throws XMLStreamException {
-        // Create a node for the op to add our subsystem
-        ModelNode addOp = new ModelNode();
-        addOp.get("address").add("subsystem", "mysubsystem");
-        addOp.get("operation").set("add");
-        operationList.add(addOp);
- 
-        for (int i = 0; i < reader.getAttributeCount(); i++) {
-            final String value = reader.getAttributeValue(i);
-            final String attribute = reader.getAttributeLocalName(i);
-            if (FOO_AD.getXmlName().equals(attribute) {
-                FOO_AD.parseAndSetParameter(value, addOp, reader);
-            } else ....
-        }
- 
-        ... more parsing
-    }
-
-
-
-

Note that the parsing code has deliberately been abbreviated. The key -point is the parseAndSetParameter call. FOO_AD will validate the -value read from XML, throwing an XMLStreamException with a useful -message if invalid, including a reference to the current location of the -reader. If valid, value will be converted to a DMR ModelNode of -the appropriate type and stored as a parameter field of addOp. The -name of the parameter will be what FOO_AD.getName() returns.

-
-
-

If you use PersistentResourceXMLParser this parsing logic is handled -for you and you don’t need to write it yourself.

-
-
-
-
Use in Storing Data Provided by the User to the Configuration Model
-
-

Here we illustrate code in an OperationStepHandler that extracts a -value from a user-provided operation and stores it in the internal -model:

-
-
-
-
    @Override
-    public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
-        // Get the Resource targeted by this operation
-        Resource resource = context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS);
-        ModelNode model = resource.getModel();
-        // Store the value of any 'foo' param to the model's 'foo' attribute
-        FOO_AD.validateAndSet(operation, model);
- 
-        ... do other stuff
-    }
-
-
-
-

As the name implies validateAndSet will validate the value in -operation before setting it. A validation failure will result in an -OperationFailedException with an appropriate message, which the kernel -will use to provide a failure response to the user.

-
-
-

Note that validateAndSet will not perform expression resolution. -Expression resolution is not appropriate at this stage, when we are just -trying to store data to the persistent configuration model. However, it -will check for expressions and fail validation if found and FOO_AD -wasn’t built with setAllowExpressions(true).

-
-
-

This work of storing data to the configuration model is usually done in -handlers for the add and write-attribute operations. If you base -your handler implementations on the standard classes provided by WildFly -Core, this part of the work will be handled for you.

-
-
-
-
Use in Extracting Data from the Configuration Model for Use in
-
-

Runtime Services

-
-
-

This is the example you are most likely to use in your code, as this is -where data needs to be extracted from the configuration model and passed -to your runtime services. What your services need is custom, so there’s -no utility code we provide.

-
-
-

Assume as part of …​ do other stuff in the last example that your -handler adds a step to do further work once operation execution proceeds -to RUNTIME state (see Operation Execution and the OperationContext for -more on what this means):

-
-
-
-
        context.addStep(new OperationStepHandler() {
-            @Override
-            public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
- 
-                // Get the Resource targetted by this operation
-                Resource resource = context.readResource(PathAddress.EMPTY_ADDRESS);
-                ModelNode model = resource.getModel();
-                // Extract the value of the 'foo' attribute from the model
-                int foo = FOO_AD.resolveModelAttribute(context, model).asInt();
-
-                Service<XyZ> service = new MyService(foo);
- 
-                ... do other stuff, like install 'service' with MSC
-    }
-        }, Stage.RUNTIME);
-
-
-
-

Use resolveModelAttribute to extract data from the model. It does a -number of things:

-
-
-
    -
  • -

    reads the value from the model

    -
  • -
  • -

    if it’s an expression and expressions are supported, resolves it

    -
  • -
  • -

    if it’s undefined and undefined is allowed but FOO_AD was configured -with a default value, uses the default value

    -
  • -
  • -

    validates the result of that (which is how we check that expressions -resolve to legal values), throwing OperationFailedException with a -useful message if invalid

    -
  • -
  • -

    returns that as a ModelNode

    -
  • -
-
-
-

If when you built FOO_AD you configured it such that the user must -provide a value, or if you configured it with a default value, then you -know the return value of resolveModelAttribute will be a defined -ModelNode. Hence you can safely perform type conversions with it, as -we do in the example above with the call to asInt(). If FOO_AD was -configured such that it’s possible that the attribute won’t have a -defined value, you need to guard against that, e.g.:

-
-
-
-
    ModelNode node = FOO_AD.resolveModelAttribute(context, model);
-    Integer foo = node.isDefined() ? node.asInt() : null;
-
-
-
-
-
Use in Marshaling Configuration Model Data to XML
-
-

Your Extension must register an -XMLElementWriter<SubsystemMarshallingContext> for each subsystem. This -is used to marshal the subsystem’s configuration to XML. If you don’t -use PersistentResourceXMLParser for this you’ll need to write your own -marshaling code, and AttributeDefinition will be used.

-
-
-
-
    @Override
-    public void writeContent(XMLExtendedStreamWriter writer, SubsystemMarshallingContext context) throws XMLStreamException {
-        context.startSubsystemElement(Namespace.CURRENT.getUriString(), false);
- 
-        ModelNode subsystemModel = context.getModelNode();
-        // we persist foo as an xml attribute
-        FOO_AD.marshalAsAttribute(subsystemModel, writer);
-        // We also have a different attribute that we marshal as an element
-        BAR_AD.marshalAsElement(subsystemModel, writer);
-    }
-
-
-
-

The SubsystemMarshallingContext provides a ModelNode that represents -the entire resource tree for the subsystem (including child resources). -Your XMLElementWriter should walk through that model, using -marshalAsAttribute or marshalAsElement to write the attributes in -each resource. If the model includes child node trees that represent -child resources, create child xml elements for those and continue down -the tree.

-
-
-
-
-
-

5.6. OperationDefinition and OperationStepHandler Interfaces

-
-

OperationDefinition defines an operation, particularly its name, its -parameters and the details of any result value, with -AttributeDefinition instances used to define the parameters and result -details. The OperationDefinition is used to generate the -read-operation-description output for the operation, and in some cases -is also used by the kernel to decide details as to how to execute the -operation.

-
-
-

Typically SimpleOperationDefinitionBuilder is used to create an -OperationDefinition. Usually you only need to create an -OperationDefinition for custom operations. For the common add and -remove operations, if you provide minimal information about your -handlers to your SimpleResourceDefinition implementation via the -Parameters object passed to its constructor, then -SimpleResourceDefinition can generate a correct OperationDefinition -for those operations.

-
-
-

The OperationStepHandler is what contains the actual logic for doing -what the user requests when they invoke an operation. As its name -implies, each OSH is responsible for doing one step in the overall -sequence of things necessary to give effect to what the user requested. -One of the things an OSH can do is add other steps, with the result that -an overall operation can involve a great number of OSHs executing. (See -Operation Execution and the OperationContext for more on this.)

-
-
-

Each OSH is provided in its execute method with a reference to the -OperationContext that is controlling the overall operation, plus an -operation ModelNode that represents the operation that particular -OSH is being asked to deal with. The operation node will be of -ModelType.OBJECT with the following key/value pairs:

-
-
-
    -
  • -

    a key named operation with a value of ModelType.STRING that -represents the name of the operation. Typically an OSH doesn’t care -about this information as it is written for an operation with a -particular name and will only be invoked for that operation.

    -
  • -
  • -

    a key named address with a value of ModelType.LIST with list -elements of ModelType.PROPERTY. This value represents the address of -the resource the operation targets. If this key is not present or the -value is undefined or an empty list, the target is the root resource. -Typically an OSH doesn’t care about this information as it can more -efficiently get the address from the OperationContext via its -getCurrentAddress() method.

    -
  • -
  • -

    other key/value pairs that represent parameters to the operation, with -the key the name of the parameter. This is the main information an OSH -would want from the operation node.

    -
  • -
-
-
-

There are a variety of situations where extension code will instantiate -an OperationStepHandler

-
-
-
    -
  • -

    When registering a writable attribute with a -ManagementResourceRegistration (typically in an implementation of -ResourceDefinition.registerAttributes), an OSH must be provided to -handle the write-attribute operation.

    -
  • -
  • -

    When registering a read-only or read-write attribute that needs -special handling of the read-attribute operation, an OSH must be -provided.

    -
  • -
  • -

    When registering a metric attribute, an OSH must be provided to handle -the read-attribute operation.

    -
  • -
  • -

    Most resources need OSHs created for the add and remove -operations. These are passed to the Parameters object given to the -SimpleResourceDefinition constructor, for use by the -SimpleResourceDefinition in its implementation of the -registerOperations method.

    -
  • -
  • -

    If your resource has custom operations, you will instantiate them to -register with a ManagementResourceRegistration, typically in an -implementation of ResourceDefinition.registerOperations

    -
  • -
  • -

    If an OSH needs to tell the OperationContext to add additional steps -to do further handling, the OSH will create another OSH to execute that -step. This second OSH is typically an inner class of the first OSH.

    -
  • -
-
-
-
-

5.7. Operation Execution and the OperationContext

-
-

When the ModelController at the heart of the WildFly Core management -layer handles a request to execute an operation, it instantiates an -implementation of the OperationContext interface to do the work. The -OperationContext is configured with an initial list of operation steps -it must execute. This is done in one of two ways:

-
-
-
    -
  • -

    During boot, multiple steps are configured, one for each operation in -the list generated by the parser of the xml configuration file. For each -operation, the ModelController finds the -ManagementResourceRegistration that matches the address of the -operation and finds the OperationStepHandler registered with that MRR -for the operation’s name. A step is added to the OperationContext for -each operation by providing the operation ModelNode itself, plus the -OperationStepHandler.

    -
  • -
  • -

    After boot, any management request involves only a single operation, -so only a single step is added. (Note that a composite operation is -still a single operation; it’s just one that internally executes via -multiple steps.)

    -
  • -
-
-
-

The ModelController then asks the OperationContext to execute the -operation.

-
-
-

The OperationContext acts as both the engine for operation execution, -and as the interface provided to OperationStepHandler implementations -to let them interact with the rest of the system.

-
-
-

5.7.1. Execution Process

-
-

Operation execution proceeds via execution by the OperationContext of -a series of "steps" with an OperationStepHandler doing the key work -for each step. As mentioned above, during boot the OC is initially -configured with a number of steps, but post boot operations involve only -a single step initially. But even a post-boot operation can end up -involving numerous steps before completion. In the case of a -/:read-resource(recursive=true) operation, thousands of steps might -execute. This is possible because one of the key things an -OperationStepHandler can do is ask the OperationContext to add -additional steps to execute later.

-
-
-

Execution proceeds via a series of "stages", with a queue of steps -maintained for each stage. An OperationStepHandler can tell the -OperationContext to add a step for any stage equal to or later than -the currently executing stage. The instruction can either be to add the -step to the head of the queue for the stage or to place it at the end of -the stage’s queue.

-
-
-

Execution of a stage continues until there are no longer any steps in -the stage’s queue. Then an internal transition task can execute, and the -processing of the next stage’s steps begins.

-
-
-

Here is some brief information about each stage:

-
-
-
Stage.MODEL
-
-

This stage is concerned with interacting with the persistent -configuration model, either making changes to it or reading information -from it. Handlers for this stage should not make changes to the runtime, -and handlers running after this stage should not make changes to the -persistent configuration model.

-
-
-

If any step fails during this stage, the operation will automatically -roll back. Rollback of MODEL stage failures cannot be turned off. -Rollback during boot results in abort of the process start.

-
-
-

The initial step or steps added to the OperationContext by the -ModelController all execute in Stage.MODEL. This means that all -OperationStepHandler instances your extension registers with a -ManagementResourceRegistration must be designed for execution in -Stage.MODEL. If you need work done in later stages your Stage.MODEL -handler must add a step for that work.

-
-
-

When this stage completes, the OperationContext internally performs -model validation work before proceeding on to the next stage. Validation -failures will result in rollback.

-
-
-
-
Stage.RUNTIME
-
-

This stage is concerned with interacting with the server runtime, either -reading from it or modifying it (e.g. installing or removing services or -updating their configuration.) By the time this stage begins, all model -changes are complete and model validity has been checked. So typically -handlers in this stage read their inputs from the model, not from the -original operation ModelNode provided by the user.

-
-
-

Most OperationStepHandler logic written by extension authors will be -for Stage.RUNTIME. The vast majority of Stage.MODEL handling can best be -performed by the base handler classes WildFly Core provides in its -controller module. (See below for more on those.)

-
-
-

During boot failures in Stage.RUNTIME will not trigger rollback and -abort of the server boot. After boot, by default failures here will -trigger rollback, but users can prevent that by using the -rollback-on-runtime-failure header. However, a RuntimeException thrown -by a handler will trigger rollback.

-
-
-

At the end of Stage.RUNTIME, the OperationContext blocks waiting for -the MSC service container to stabilize (i.e. for all services to have -reached a rest state) before moving on to the next stage.

-
-
-
-
Stage.VERIFY
-
-

Service container verification work is performed in this stage, checking -that any MSC changes made in Stage.RUNTIME had the expected effect. -Typically extension authors do not add any steps in this stage, as the -steps automatically added by the OperationContext itself are all that -are needed. You can add a step here though if you have an unusual use -case where you need to verify something after MSC has stabilized.

-
-
-

Handlers in this stage should not make any further runtime changes; -their purpose is simply to do verification work and fail the operation -if verification is unsuccessful.

-
-
-

During boot failures in Stage.VERIFY will not trigger rollback and -abort of the server boot. After boot, by default failures here will -trigger rollback, but users can prevent that by using the -rollback-on-runtime-failure header. However, a RuntimeException thrown -by a handler will trigger rollback.

-
-
-

There is no special transition work at the end of this stage.

-
-
-
-
Stage.DOMAIN
-
-

Extension authors should not add steps in this stage; it is only for use -by the kernel.

-
-
-

Steps needed to execute rollout across the domain of an operation that -affects multiple processes in a managed domain run here. This stage is -only run on Host Contoller processes, never on servers.

-
-
-
-
Stage.DONE and ResultHandler / RollbackHandler Execution
-
-

This stage doesn’t maintain a queue of steps; no OperationStepHandler -executes here. What does happen here is persistence of any configuration -changes to the xml file and commit or rollback of changes affecting -multiple processes in a managed domain.

-
-
-

While no OperationStepHandler executes in this stage, following -persistence and transaction commit all ResultHandler or -RollbackHandler callbacks registered with the OperationContext by -the steps that executed are invoked. This is done in the reverse order -of step execution, so the callback for the last step to run is the first -to be executed. The most common thing for a callback to do is to respond -to a rollback by doing whatever is necessary to reverse changes made in -Stage.RUNTIME. (No reversal of Stage.MODEL changes is needed, -because if an operation rolls back the updated model produced by the -operation is simply never published and is discarded.)

-
-
-
-
Tips About Adding Steps
-
-

Here are some useful tips about how to add steps:

-
-
-
    -
  • -

    Add a step to the head of the current stage’s queue if you want it to -execute next, prior to any other steps. Typically you would use this -technique if you are trying to decompose some complex work into pieces, -with reusable logic handling each piece. There would be an -OperationStepHandler for each part of the work, added to the head of -the queue in the correct sequence. This would be a pretty advanced use -case for an extension author but is quite common in the handlers -provided by the kernel.

    -
  • -
  • -

    Add a step to the end of the queue if either you don’t care when it -executes or if you do care and want to be sure it executes after any -already registered steps.

    -
    -
      -
    • -

      A very common example of this is a Stage.MODEL handler adding a -step for its associated Stage.RUNTIME work. If there are multiple -model steps that will execute (e.g. at boot or as part of handling a -composite), each will want to add a runtime step, and likely the best -order for those runtime steps is the same as the order of the model -steps. So if each adds its runtime step at the end, the desired result -will be achieved.

      -
    • -
    • -

      A more sophisticated but important scenario is when a step may or may -not be executing as part of a larger set of steps, i.e. it may be one -step in a composite or it may not. There is no way for the handler to -know. But it can assume that if it is part of a composite, the steps for -the other operations in the composite are already registered in the -queue. (The handler for the composite op guarantees this.) So, if it -wants to do some work (say validation of the relationship between -different attributes or resources) the input to which may be affected by -possible other already registered steps, instead of doing that work -itself, it should register a different step at the end of the queue -and have that step do the work. This will ensure that when the -validation step runs, the other steps in the composite will have had a -chance to do their work. Rule of thumb: always doing any extra -validation work in an added step.

      -
    • -
    -
    -
  • -
-
-
-
Passing Data to an Added Step
-
-

Often a handler author will want to share state between the handler for -a step it adds and the handler that added it. There are a number of ways -this can be done:

-
-
-
    -
  • -

    Very often the OperationStepHandler for the added class is an inner -class of the handler that adds it. So here sharing state is easily done -using final variables in the outer class.

    -
  • -
  • -

    The handler for the added step can accept values passed to its -constructor which can serve as shared state.

    -
  • -
  • -

    The OperationContext includes an Attachment API which allows -arbitary data to be attached to the context and retrieved by any handler -that has access to the attachment key.

    -
  • -
  • -

    The OperationContext.addStep methods include overloaded variants -where the caller can pass in an operation ModelNode that will in -turn be passed to the execute method of the handler for the added -step. So, state can be passed via this ModelNode. It’s important to -remember though that the address field of the operation will govern -what the OperationContext sees as the target of operation when that -added step’s handler executes.

    -
  • -
-
-
-
-
Controlling Output from an Added Step
-
-

When an OperationStepHandler wants to report an operation result, it -calls the OperationContext.getResult() method and manipulates the -returned ModelNode. Similarly for failure messages it can call -OperationContext.getFailureDescription(). The usual assumption when -such a call is made is that the result or failure description being -modified is the one at the root of the response to the end user. But -this is not necessarily the case.

-
-
-

When an OperationStepHandler adds a step it can use one of the -overloaded OperationContext.addStep variants that takes a response -ModelNode parameter. If it does, whatever ModelNode it passes in -will be what is updated as a result of OperationContext.getResult() -and OperationContext.getFailureDescription() calls by the step’s -handler. This node does not need to be one that is directly associated -with the response to the user.

-
-
-

How then does the handler that adds a step in this manner make use of -whatever results the added step produces, since the added step will not -run until the adding step completes execution? There are a couple of -ways this can be done.

-
-
-

The first is to add yet another step, and provide it a reference to the -response node used by the second step. It will execute after the -second step and can read its response and use it in formulating its own -response.

-
-
-

The second way involves using a ResultHandler. The ResultHandler for -a step will execute after any step that it adds executes. And, it is -legal for a ResultHandler to manipulate the "result" value for an -operation, or its "failure-description" in case of failure. So, the -handler that adds a step can provide to its ResultHandler a reference -to the response node it passed to addStep, and the ResultHandler -can in turn and use its contents to manipulate its own response.

-
-
-

This kind of handling wouldn’t commonly be done by extension authors and -great care needs to be taken if it is done. It is often done in some of -the kernel handlers.

-
-
-
-
-
-

5.7.2. OperationStepHandler use of the OperationContext

-
-

All useful work an OperationStepHandler performs is done by invoking -methods on the OperationContext. The OperationContext interface is -extensively javadoced, so this section will just provide a brief partial -overview. The OSH can use the OperationContext to:

-
-
-
    -
  • -

    Learn about the environment in which it is executing ( -getProcessType, getRunningMode, isBooting, getCurrentStage, -getCallEnvironment, getSecurityIdentity, isDefaultRequiresRuntime, -isNormalServer)

    -
  • -
  • -

    Learn about the operation ( getCurrentAddress, -getCurrentAddressValue, getAttachmentStream, -getAttachmentStreamCount)

    -
  • -
  • -

    Read the Resource tree ( readResource, readResourceFromRoot, -getOriginalRootResource)

    -
  • -
  • -

    Manipulate the Resource tree ( createResource, addResource, -readResourceForUpdate, removeResource)

    -
  • -
  • -

    Read the resource type information ( getResourceRegistration, -getRootResourceRegistration)

    -
  • -
  • -

    Manipulate the resource type information ( -getResourceRegistrationForUpdate)

    -
  • -
  • -

    Read the MSC service container ( getServiceRegistry(false))

    -
  • -
  • -

    Manipulate the MSC service container ( getServiceTarget, -getServiceRegistry(true), removeService)

    -
  • -
  • -

    Manipulate the process state ( reloadRequired, -revertReloadRequired, restartRequired, revertRestartRequired

    -
  • -
  • -

    Resolve expressions ( resolveExpressions)

    -
  • -
  • -

    Manipulate the operation response ( getResult, -getFailureDescription, attachResultStream, runtimeUpdateSkipped)

    -
  • -
  • -

    Force operation rollback ( setRollbackOnly)

    -
  • -
  • -

    Add other steps ( addStep)

    -
  • -
  • -

    Share data with other steps ( attach, attachIfAbsent, -getAttachment, detach)

    -
  • -
  • -

    Work with capabilities (numerous methods)

    -
  • -
  • -

    Emit notifications ( emit)

    -
  • -
  • -

    Request a callback to a ResultHandler or RollbackHandler ( -completeStep)

    -
  • -
-
-
-
-

5.7.3. Locking and Change Visibility

-
-

The ModelController and OperationContext work together to ensure -that only one operation at a time is modifying the state of the system. -This is done via an exclusive lock maintained by the ModelController. -Any operation that does not need to write never requests the lock and is -able to proceed without being blocked by an operation that holds the -lock (i.e. writes do not block reads.) If two operations wish to -concurrently write, one or the other will get the lock and the loser -will block waiting for the winner to complete and release the lock.

-
-
-

The OperationContext requests the exclusive lock the first time any of -the following occur:

-
-
-
    -
  • -

    A step calls one of its methods that indicates a wish to modify the -resource tree ( createResource, addResource, -readResourceForUpdate, removeResource)

    -
  • -
  • -

    A step calls one of its methods that indicates a wish to modify the -ManagementResourceRegistration tree ( -getResourceRegistrationForUpdate)

    -
  • -
  • -

    A step calls one of its methods that indicates a desire to change MSC -services ( getServiceTarget, removeService or getServiceRegistry -with the modify param set to true)

    -
  • -
  • -

    A step calls one of its methods that manipulates the capability -registry (various)

    -
  • -
  • -

    A step explicitly requests the lock by calling the -acquireControllerLock method (doing this is discouraged)

    -
  • -
-
-
-

The step that acquired the lock is tracked, and the lock is released -when the ResultHandler added by that step has executed. (If the step -doesn’t add a result handler, a default no-op one is automatically -added).

-
-
-

When an operation first expresses a desire to manipulate the Resource -tree or the capability registry, a private copy of the tree or registry -is created and thereafter the OperationContext works with that copy. -The copy is published back to the ModelController in Stage.DONE if -the operation commits. Until that happens any changes to the tree or -capability registry made by the operation are invisible to other -threads. If the operation does not commit, the private copies are simply -discarded.

-
-
-

However, the OperationContext does not make a private copy of the -ManagementResourceRegistration tree before manipulating it, nor is -there a private copy of the MSC service container. So, any changes made -by an operation to either of those are immediately visible to other -threads.

-
-
-
-
-

5.8. Resource Interface

-
-

An instance of the Resource interface holds the state for a particular -instance of a type defined by a ManagementResourceRegistration. -Referring back to the analogy mentioned earlier the -ManagementResourceRegistration is analogous to a Java class while the -Resource is analogous to an instance of that class.

-
-
-

The Resource makes available state information, primarily

-
-
-
    -
  • -

    Some descriptive metadata, such as its address, whether it is -runtime-only and whether it represents a proxy to a another primary -resource that resides on another process in a managed domain

    -
  • -
  • -

    A ModelNode of ModelType.OBJECT whose keys are the resource’s -attributes and whose values are the attribute values

    -
  • -
  • -

    Links to child resources such that the resources form a tree

    -
  • -
-
-
-

5.8.1. Creating Resources

-
-

Typically extensions create resources via OperationStepHandler calls -to the OperationContext.createResource method. However it is allowed -for handlers to use their own Resource implementations by -instantiating the resource and invoking OperationContext.addResource. -The AbstractModelResource class can be used as a base class.

-
-
-
-

5.8.2. Runtime-Only and Synthetic Resources and the PlaceholderResourceEntry Class

-
-

A runtime-only resource is one whose state is not persisted to the xml -configuration file. Many runtime-only resources are also "synthetic" -meaning they are not added or removed as a result of user initiated -management operations. Rather these resources are "synthesized" in order -to allow users to use the management API to examine some aspect of the -internal state of the process. A good example of synthetic resources are -the resources in the /core-service=platform-mbeans branch of the -resource tree. There are resources there that represent various aspects -of the JVM (classloaders, memory pools, etc) but which resources are -present entirely depends on what the JVM is doing, not on any management -action. Another example are resources representing "core queues" in the -WildFly messaging and messaging-artemismq subsystems. Queues are created -as a result of activity in the message broker which may not involve -calls to the management API. But for each such queue a management -resource is available to allow management users to perform management -operations against the queue.

-
-
-

It is a requirement of execution of a management operation that the -OperationContext can navigate through the resource tree to a -Resource object located at the address specified. This requirement -holds true even for synthetic resources. How can this be handled, given -the fact these resources are not created in response to management -operations?

-
-
-

The trick involves using special implementations of Resource. Let’s -imagine a simple case where we have a parent resource which is fairly -normal (i.e. it holds persistent configuration and is added via a user’s -add operation) except for the fact that one of its child types -represents synthetic resources (e.g. message queues). How would this be -handled?

-
-
-

First, the parent resource would require a custom implementation of the -Resource interface. The OperationStepHandler for the add operation -would instantiate it, providing it with access to whatever API is needed -for it to work out what items exist for which a synthetic resource -should be made available (e.g. an API provided by the message broker -that provides access to its queues). The add handler would use the -OperationContext.addResource method to tie this custom resource into -the overall resource tree.

-
-
-

The custom Resource implementation would use special implementations -of the various methods that relate to accessing children. For all calls -that relate to the synthetic child type (e.g. core-queue) the custom -implementation would use whatever API call is needed to provide the -correct data for that child type (e.g. ask the message broker for the -names of queues).

-
-
-

A nice strategy for creating such a custom resource is to use -delegation. Use Resource.Factory.create}() to create a standard -resource. Then pass it to the constructor of your custom resource type -for use as a delegate. The custom resource type’s logic is focused on -the synthetic children; all other work it passes on to the delegate.

-
-
-

What about the synthetic resources themselves, i.e. the leaf nodes in -this part of the tree? These are created on the fly by the parent -resource in response to getChild, requireChild, getChildren and -navigate calls that target the synthetic resource type. These -created-on-the-fly resources can be very lightweight, since they store -no configuration model and have no children. The -PlaceholderResourceEntry class is perfect for this. It’s a very -lightweight Resource implementation with minimal logic that only -stores the final element of the resource’s address as state.

-
-
-

See LoggingResource in the WildFly Core logging subsystem for an -example of this kind of thing. Searching for other uses of -PlaceholderResourceEntry will show other examples.

-
-
-
-
-

5.9. DeploymentUnitProcessor Interface

-
-

TODO

-
-
-
-

5.10. Useful classes for implementing OperationStepHandler

-
-

The WildFly Core controller module includes a number of -OperationStepHandler implementations that in some cases you can use -directly, and that in other cases can serve as the base class for your -own handler implementation. In all of these a general goal is to -eliminate the need for your code to do anything in Stage.MODEL while -providing support for whatever is appropriate for Stage.RUNTIME.

-
-
-

5.10.1. Add Handlers

-
-

AbstractAddStepHandler is a base class for handlers for add -operations. There are a number of ways you can configure its behavior, -the most commonly used of which are to:

-
-
-
    -
  • -

    Configure its behavior in Stage.MODEL by passing to its constructor -AttributeDefinition and RuntimeCapability instances for the -attributes and capabilities provided by the resource. The handler will -automatically validate the operation parameters whose names match the -provided attributes and store their values in the model of the newly -added Resource. It will also record the presence of the given -capabilities.

    -
  • -
  • -

    Control whether a Stage.RUNTIME step for the operation needs to be -added, by overriding the -protected boolean requiresRuntime(OperationContext context) method. -Doing this is atypical; the standard behavior in the base class is -appropriate for most cases.

    -
  • -
  • -

    Implement the primary logic of the Stage.RUNTIME step by overriding -the -protected void performRuntime(final OperationContext context, final ModelNode operation, final Resource resource) -method. This is typically the bulk of the code in an -AbstractAddStepHandler subclass. This is where you read data from the -Resource model and use it to do things like configure and install MSC -services.

    -
  • -
  • -

    Handle any unusual needs of any rollback of the Stage.RUNTIME step -by overriding -protected void rollbackRuntime(OperationContext context, final ModelNode operation, final Resource resource). -Doing this is not typically needed, since if the rollback behavior -needed is simply to remove any MSC services installed in -performRuntime, the OperationContext will do this for you -automatically.

    -
  • -
-
-
-

AbstractBoottimeAddStepHandler is a subclass of -AbstractAddStepHandler meant for use by add operations that should -only do their normal Stage.RUNTIME work in server, boot, with the -server being put in reload-required if executed later. Primarily this -is used for add operations that register DeploymentUnitProcessor -implementations, as this can only be done at boot.

-
-
-

Usage of AbstractBoottimeAddStepHandler is the same as for -AbstractAddStepHandler except that instead of overriding -performRuntime you override -protected void performBoottime(OperationContext context, ModelNode operation, Resource resource).

-
-
-

A typical thing to do in performBoottime is to add a special step that -registers one or more DeploymentUnitProcessor s.

-
-
-
-
    @Override
-    public void performBoottime(OperationContext context, ModelNode operation, final Resource resource)
-            throws OperationFailedException {
- 
-        context.addStep(new AbstractDeploymentChainStep() {
-            @Override
-            protected void execute(DeploymentProcessorTarget processorTarget) {
- 
-                processorTarget.addDeploymentProcessor(RequestControllerExtension.SUBSYSTEM_NAME, Phase.STRUCTURE, Phase.STRUCTURE_GLOBAL_REQUEST_CONTROLLER, new RequestControllerDeploymentUnitProcessor());
-            }
-        }, OperationContext.Stage.RUNTIME);
-
-        ... do other things
-
-
-
-
-

5.10.2. Remove Handlers

-
-

TODO AbstractRemoveStepHandler ServiceRemoveStepHandler

-
-
-
-

5.10.3. Write attribute handlers

-
-

TODO AbstractWriteAttributeHandler

-
-
-
-

5.10.4. Reload-required handlers

-
-

ReloadRequiredAddStepHandler ReloadRequiredRemoveStepHandler -ReloadRequiredWriteAttributeHandler

-
-
-

Use these for cases where, post-boot, the change to the configuration -model made by the operation cannot be reflected in the runtime until the -process is reloaded. These handle the mechanics of recording the need -for reload and reverting it if the operation rolls back.

-
-
-
-

5.10.5. Restart Parent Resource Handlers

-
-

RestartParentResourceAddHandler RestartParentResourceRemoveHandler -RestartParentWriteAttributeHandler

-
-
-

Use these in cases where a management resource doesn’t directly control -any runtime services, but instead simply represents a chunk of -configuration that a parent resource uses to configure services it -installs. (Really, this kind of situation is now considered to be a poor -management API design and is discouraged. Instead of using child -resources for configuration chunks, complex attributes on the parent -resource should be used.)

-
-
-

These handlers help you deal with the mechanics of the fact that, -post-boot, any change to the child resource likely requires a restart of -the service provided by the parent.

-
-
-
-

5.10.6. Model Only Handlers

-
-

ModelOnlyAddStepHandler ModelOnlyRemoveStepHandler -ModelOnlyWriteAttributeHandler

-
-
-

Use these for cases where the operation never affects the runtime, even -at boot. All it does is update the configuration model. In most cases -such a thing would be odd. These are primarily useful for legacy -subsystems that are no longer usable on current version servers and thus -will never do anything in the runtime. However, current version Domain -Controllers must be able to understand the subsystem’s configuration -model to allow them to manage older Host Controllers running previous -versions where the subsystem is still usable by servers. So these -handlers allow the DC to maintain the configuration model for the -subsystem.

-
-
-
-

5.10.7. Misc

-
-

AbstractRuntimeOnlyHandler is used for custom operations that don’t -involve the configuration model. Create a subclass and implement the -protected abstract void executeRuntimeStep(OperationContext context, ModelNode operation) -method. The superclass takes care of adding a Stage.RUNTIME step that -calls your method.

-
-
-

ReadResourceNameOperationStepHandler is for cases where a resource -type includes a 'name' attribute whose value is simply the value of the -last element in the resource’s address. There is no need to store the -value of such an attribute in the resource’s model, since it can always -be determined from the resource address. But, if the value is not stored -in the resource model, when the attribute is registered with -ManagementResourceRegistration.registerReadAttribute an -OperationStepHandler to handle the read-attribute operation must be -provided. Use ReadResourceNameOperationStepHandler for this. (Note -that including such an attribute in your management API is considered to -be poor practice as it’s just redundant data.)

-
-
-
-
-
-
-

6. WildFly JNDI Implementation

-
-
-

6.1. Introduction

-
-

This page proposes a reworked WildFly JNDI implementation, and -new/updated APIs for WildFly subsystem and EE deployment processors -developers to bind new resources easier.

-
-
-

To support discussion in the community, the content includes a big focus -on comparing WildFly 29 JNDI implementation with the new proposal, and -should later evolve to the prime guide for WildFly developers needing to -interact with JNDI at subsystem level.

-
-
-
-

6.2. Architecture

-
-

WildFly relies on MSC to provide the data source for the JNDI tree. Each -resource bound in JNDI is stored in a MSC service (BinderService), and -such services are installed as children of subsystem/deployment -services, for an automatically unbound as consequence of uninstall of -the parent services.

-
-
-

Since there is the need to know what entries are bound, and MSC does not -provides that, there is also the (ServiceBased)NamingStore concept, -which internally manage the set of service names bound. There are -multiple naming stores in every WildFly instance, serving different JNDI -namespaces:

-
-
-
    -
  • -

    java:comp - the standard EE namespace for entries scoped to a specific -component, such as an Jakarta Enterprise Beans

    -
  • -
  • -

    java:module - the standard EE namespace for entries scoped to specific -module, such as an Jakarta Enterprise Beans jar, and shared by all components in it

    -
  • -
  • -

    java:app - the standard EE namespace for entries scoped to a specific -application, i.e. EAR, and shared by all modules in it

    -
  • -
  • -

    java:global - the standard EE namespace for entries shared by all -deployments

    -
  • -
  • -

    java:jboss - a proprietary namespace "global" namespace

    -
  • -
  • -

    java:jboss/exported - a proprietary "global" namespace which entries -are exposed to remote JNDI

    -
  • -
  • -

    java: - any entries not in the other namespaces

    -
  • -
-
-
-

One particular implementation choice, to save resources, is that JNDI -contexts by default are not bound, the naming stores will search for any -entry bound with a name that is a child of the context name, if found -then its assumed the context exists.

-
-
-

The reworked implementation introduces shared/global java:comp, -java:module and java:app namespaces. Any entry bound on these will -automatically be available to every EE deployment scoped instance of -these namespaces, what should result in a significant reduction of -binder services, and also of EE deployment processors. Also, the Naming -subsystem may now configure bind on these shared contexts, and these -contexts will be available when there is no EE component in the -invocation, which means that entries such as java:comp/DefaultDatasource -will always be available.

-
-
-
-

6.3. Binding APIs

-
-

WildFly Naming subsystem exposes high level APIs to bind new JNDI -resources, there is no need to deal with the low level BinderService -type anymore.

-
-
-

6.3.1. Subsystem

-
-

At the lowest level a JNDI entry is bound by installing a BinderService -to a ServiceTarget:

-
-
-
-
 
-   /**
-     * Binds a new entry to JNDI.
-     * @param serviceTarget the binder service's target
-     * @param name the new JNDI entry's name
-     * @param value the new JNDI entry's value
-     */
-    private ServiceController<?> bind(ServiceTarget serviceTarget, String name, Object value) {
-        
- // the bind info object provides MSC service names to use when creating the binder service
-        final ContextNames.BindInfo bindInfo = ContextNames.bindInfoFor(name);
-        final BinderService binderService = new BinderService(bindInfo.getBindName());
-        
- // the entry's value is provided by a managed reference factory,
-        // since the value may need to be obtained on lookup (e.g. EJB reference)
-        final ManagedReferenceFactory managedReferenceFactory = new ImmediateManagedReferenceFactory(value);
-        
- return serviceTarget
-                // add binder service to specified target
-                .addService(bindInfo.getBinderServiceName(), binderService)
-                // when started the service will be injected with the factory
-                .addInjection(binderService.getManagedObjectInjector(), managedReferenceFactory)
-                // the binder service depends on the related naming store service,
-                // and on start/stop will add/remove its service name
-                .addDependency(bindInfo.getParentContextServiceName(),
-                        ServiceBasedNamingStore.class,
-                        binderService.getNamingStoreInjector())
-                .install();
-    }
-
-
-
-

But the example above is the simplest usage possible, it may become -quite complicated if the entry’s value is not immediately available, for -instance it is a value in another MSC service, or is a value in another -JNDI entry. It’s also quite easy to introduce bugs when working with the -service names, or incorrectly assume that other MSC functionality, such -as alias names, may be used.

-
-
-

Using the new high level API, it’s as simple as:

-
-
-
-
// bind an immediate value
-ContextNames.bindInfoFor("java:comp/ORB").bind(serviceTarget, this.orb);
- 
- 
-// bind value from another JNDI entry (an alias/linkref)
-ContextNames.bindInfoFor("java:global/x").bind(serviceTarget, new JndiName("java:jboss/x"));
- 
- 
-// bind value obtained from a MSC service
-ContextNames.bindInfoFor("java:global/z").bind(serviceTarget, serviceName);
-
-
-
-

If there is the need to access the binder’s service builder, perhaps to -add a service verification handler or simply not install the binder -service right away:

-
-
-
-
ContextNames.bindInfoFor("java:comp/ORB").builder(serviceTarget, verificationHandler, ServiceController.Mode.ON_DEMAND).installService(this.orb);
-
-
-
-
-

6.3.2. EE Deployment

-
-

With respect to EE deployments, the subsystem API should not be used, -since bindings may need to be discarded/overridden, thus a EE deployment -processor should add a new binding in the form of a -BindingConfiguration, to the EeModuleDescription or -ComponentDescription, depending if the bind is specific to a component -or not. An example of a deployment processor adding a binding:

-
-
-
-
public class ModuleNameBindingProcessor implements DeploymentUnitProcessor {
- 
-    // jndi name objects are immutable
-    private static final JndiName JNDI_NAME_java_module_ModuleName = new JndiName("java:module/ModuleName");
- 
-    @Override
-    public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
-        
- final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
-        // skip deployment unit if it's the top level EAR
-        if (DeploymentTypeMarker.isType(DeploymentType.EAR, deploymentUnit)) {
-            return;
-        }
-        
- // the module's description is in the DUs attachments
-        final EEModuleDescription moduleDescription = deploymentUnit
-                .getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION);
-        if (moduleDescription == null) {
-            return;
-        }
-        
- // add the java:module/ModuleName binding
-        // the value's injection source for an immediate available value
-        final InjectionSource injectionSource = new ImmediateInjectionSource(moduleDescription.getModuleName());
-        
- // add the binding configuration to the module's description bindings configurations
-        moduleDescription.getBindingConfigurations()
-                .addDeploymentBinding(new BindingConfiguration(JNDI_NAME_java_module_ModuleName, injectionSource));
-    }
- 
-    //...
-}
-
-
-
- - - - - -
- - -When adding the binding configuration use: -
-
-
-
    -
  • -

    addDeploymentBinding() for a binding that may not be overriden, such -as the ones found in xml descriptors

    -
  • -
  • -

    addPlatformBinding() for a binding which may be overriden by a -deployment descriptor bind or annotation, for instance -java:comp/DefaultDatasource

    -
  • -
-
-
-

A deployment processor may now also add a binding configuration to all -components in a module:

-
-
-
-
     
-moduleDescription.getBindingConfigurations().addPlatformBindingToAllComponents(bindingConfiguration);
-
-
-
- - - - - -
- - -In the reworked implementation there is now no need to behave -differently considering the deployment type, for instance if deployment -is a WAR or app client, the Module/Component BindingConfigurations -objects handle all of that. The processor should simply go for the 3 use -cases: module binding, component binding or binding shared by all -components. -
-
-
- - - - - -
- - -All deployment binding configurations MUST be added before INSTALL -phase, this is needed because on such phase, when the bindings are -actually done, there must be a final set of deployment binding names -known, such information is need to understand if a resource injection -targets entries in the global or scoped EE namespaces. -
-
-
-

Most cases for adding bindings to EE deployments are in the context of a -processor deploying a XML descriptor, or scanning deployment classes for -annotations, and there abstract types, such as the -AbstractDeploymentDescriptorBindingsProcessor, which simplifies greatly -the processor code for such use cases.

-
-
-

One particular use case is the parsing of EE Resource Definitions, and -the reworked implementation provides high level abstract deployment -processors for both XML descriptor and annotations, an example for each:

-
-
-
-
/**
- * Deployment processor responsible for processing administered-object deployment descriptor elements
- *
- * @author Eduardo Martins
- */
-public class AdministeredObjectDefinitionDescriptorProcessor extends ResourceDefinitionDescriptorProcessor {
- 
-    @Override
-    protected void processEnvironment(RemoteEnvironment environment, ResourceDefinitionInjectionSources injectionSources) throws DeploymentUnitProcessingException {
-        final AdministeredObjectsMetaData metaDatas = environment.getAdministeredObjects();
-        if (metaDatas != null) {
-            for(AdministeredObjectMetaData metaData : metaDatas) {
-                injectionSources.addResourceDefinitionInjectionSource(getResourceDefinitionInjectionSource(metaData));
-            }
-        }
-    }
- 
-    private ResourceDefinitionInjectionSource getResourceDefinitionInjectionSource(final AdministeredObjectMetaData metaData) {
-        final String name = metaData.getName();
-        final String className = metaData.getClassName();
-        final String resourceAdapter = metaData.getResourceAdapter();
-        final AdministeredObjectDefinitionInjectionSource resourceDefinitionInjectionSource = new AdministeredObjectDefinitionInjectionSource(name, className, resourceAdapter);
-        resourceDefinitionInjectionSource.setInterface(metaData.getInterfaceName());
-        if (metaData.getDescriptions() != null) {
-            resourceDefinitionInjectionSource.setDescription(metaData.getDescriptions().toString());
-        }
-        resourceDefinitionInjectionSource.addProperties(metaData.getProperties());
-        return resourceDefinitionInjectionSource;
-    }
- 
-}
-
-
-
-

and

-
-
-
-
/**
- * Deployment processor responsible for processing {@link jakarta.resource.AdministeredObjectDefinition} and {@link jakarta.resource.AdministeredObjectDefinitions}.
- *
- * @author Jesper Pedersen
- * @author Eduardo Martins
- */
-public class AdministeredObjectDefinitionAnnotationProcessor extends ResourceDefinitionAnnotationProcessor {
- 
-    private static final DotName ANNOTATION_NAME = DotName.createSimple(AdministeredObjectDefinition.class.getName());
-    private static final DotName COLLECTION_ANNOTATION_NAME = DotName.createSimple(AdministeredObjectDefinitions.class.getName());
- 
-    @Override
-    protected DotName getAnnotationDotName() {
-        return ANNOTATION_NAME;
-    }
- 
-    @Override
-    protected DotName getAnnotationCollectionDotName() {
-        return COLLECTION_ANNOTATION_NAME;
-    }
- 
-    @Override
-    protected ResourceDefinitionInjectionSource processAnnotation(AnnotationInstance annotationInstance) throws DeploymentUnitProcessingException {
-        final String name = AnnotationElement.asRequiredString(annotationInstance, AnnotationElement.NAME);
-        final String className = AnnotationElement.asRequiredString(annotationInstance, "className");
-        final String ra = AnnotationElement.asRequiredString(annotationInstance, "resourceAdapter");
-        final AdministeredObjectDefinitionInjectionSource directAdministeredObjectInjectionSource =
-                new AdministeredObjectDefinitionInjectionSource(name, className, ra);
-        directAdministeredObjectInjectionSource.setDescription(AnnotationElement.asOptionalString(annotationInstance,
-                AdministeredObjectDefinitionInjectionSource.DESCRIPTION));
-        directAdministeredObjectInjectionSource.setInterface(AnnotationElement.asOptionalString(annotationInstance,
-                AdministeredObjectDefinitionInjectionSource.INTERFACE));
-        directAdministeredObjectInjectionSource.addProperties(AnnotationElement.asOptionalStringArray(annotationInstance,
-                AdministeredObjectDefinitionInjectionSource.PROPERTIES));
-        return directAdministeredObjectInjectionSource;
-    }
- 
-}
-
-
-
- - - - - -
- - -The abstract processors with respect to Resource Definitions are already -submitted through WFLY-3292’s PR. -
-
-
-
-
-

6.4. Resource Ref Processing

-
-

TODO for now no changes on this in the reworked WildFly Naming.

-
-
-
-
-
-

7. CLI extensibility for layered products

-
-
-

In addition to supporting the ServiceLoader extension mechanism to load -command handlers coming from outside of the CLI codebase, starting from -the wildfly-core-1.0.0.Beta1 release the CLI running in a modular -classloading environment can be extended with commands exposed in server -extension modules. The CLI will look for and register extension commands -when it (re-)connects to the controller by iterating through the -registered by that time extensions and using the ServiceLoader mechanism -on the extension modules. (Note, that this mechanism will work only for -extensions available in the server installation the CLI is launched -from.)

-
-
-

Here is an example of a simple command handler and its integration.

-
-
-
-
package org.jboss.as.test.cli.extensions;public class ExtCommandHandler extends org.jboss.as.cli.handlers.CommandHandlerWithHelp {     
- 
-package org.jboss.as.test.cli.extensions;
-public class ExtCommandHandler extends org.jboss.as.cli.handlers.CommandHandlerWithHelp {
- 
- 
-    public static final String NAME = "ext-command";
-    public static final String OUTPUT = "hello world!";
- 
- 
-    public CliExtCommandHandler() {
-        super(NAME, false);
-    }
- 
- 
-    @Override
-    protected void doHandle(CommandContext ctx) throws CommandLineException {
-        ctx.printLine(OUTPUT);
-    }
-}
-
-
-
-

The command will simply print a message to the terminal. The next step -is to implement the CLI CommandHandlerProvider interface.

-
-
-
-
package org.jboss.as.test.cli.extensions;
-public class ExtCommandHandlerProvider implements org.jboss.as.cli.CommandHandlerProvider {
- 
- 
-    @Override
-    public CommandHandler createCommandHandler(CommandContext ctx) {
-        return new ExtCommandHandler();
-    }
- 
- 
-    /**
-     * Whether the command should be available in tab-completion.
-     */
-    @Override
-    public boolean isTabComplete() {
-        return true;
-    }
- 
- 
-    /**
-     * Command name(s).
-     */
-    @Override
-    public String[] getNames() {
-        return new String[]{ExtCommandHandler.NAME};
-    }
-}
-
-
-
-

The final step is to include -META-INF/services/org.jboss.as.cli.CommandHandlerProvider entry into -the JAR file containing the classes above with value -org.jboss.as.test.cli.extensions.ExtCommandHandlerProvider.

-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Extending_WildFly.html

+ \ No newline at end of file diff --git a/29/Galleon_Guide.html b/29/Galleon_Guide.html index d5705c14a..f8f9d32fc 100644 --- a/29/Galleon_Guide.html +++ b/29/Galleon_Guide.html @@ -1,1485 +1,11 @@ - - - - - - -Galleon Provisioning Guide - - - - - - - -
-
-
-
-

© 2020 The original authors.

-
- -
-
-
-

1. Provisioning WildFly with Galleon

-
-
-

As opposed to a using traditional WildFly zip installation that installs it all (all default -server configurations and all JBoss modules), using Galleon tooling -you can choose to install a complete or customized WildFly server.

-
-
-

More information on Galleon features and tooling can be found in the Galleon docs.

-
-
-

1.1. Download and Installation of the Galleon Command Line Tool

-
-

Releases of the Galleon command line tool are available on the Galleon releases page.

-
-
-

Download and unzip the release zip and add the bin dir to your system path. Use galleon.sh or galleon.bat to launch the tool.

-
-
-
-

1.2. WildFly Galleon feature-packs

-
-

WildFly provides a Galleon feature-pack maven artifact (a zipped file that contains -everything needed to dynamically provision a server). -This feature-pack, as well as the feature-packs on which its depends, -are deployed in public maven repositories.

-
-
-

When Galleon is used to install WildFly, WildFly feature-packs are retrieved and -their content is assembled to create an installation.

-
-
-
-

1.3. Installing WildFly using Galleon

-
-

The Galleon maven plugin or Galleon CLI are used to install WildFly. The latest CLI and documentation can be downloaded -from the Galleon releases page.

-
-
-

To install the latest final version of WildFly into the directory my-wildfly-server call:

-
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server
-
-
-
-

Once installed, the directory my-wildfly-server contains all that is expected to run a complete WildFly server. -By default, all standalone and domain configurations are installed.

-
-
- - - - - -
- - -
-

Append the release version to install an identified release, for example:

-
-
-
-
galleon.sh install wildfly:current#21.0.0.Final --dir=my-wildfly-server
-
-
-
-
-
- - - - - -
- - -
-

If your project is using WildFly Preview, the feature-pack-location to use -is wildfly-preview@maven(org.jboss.universe:community-universe).

-
-
-
-
-
-

1.4. Selecting the configurations to install

-
-

Galleon allows you to specify only a subset of the default configurations to be installed.

-
-
-

To only install the standalone.xml configuration call:

-
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --default-configs=standalone/standalone.xml
-
-
-
-

To install multiple configurations, a comma separated list of default configurations can be provided, -for example:

-
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --default-configs=standalone/standalone.xml,domain/domain.xml
-
-
-
- - - - - -
- - -
-

A default configuration is identified by <configuration model>/<configuration name>. WildFly defines standalone and domain models. -The configuration name is the XML configuration file name (e.g.: standalone.xml, domain.xml, standalone-ha.xml).

-
-
-
-
-
-

1.5. WildFly Galleon layers

-
-

WildFly Galleon feature-packs expose some Galleon layers. -A layer identifies one or more server capabilities that can be installed on its own or -in combination with other layers. For example, if your application (e.g. a microservice) -is only making use of Jakarta-RESTful-Web-Services, MicroProfile Config and CDI server capabilities, you can choose to only install -the jaxrs, microprofile-config and cdi layers. The standalone.xml configuration would then only contain the -required subsystems and their dependencies.

-
-
-

The benefit to installing WildFly using Galleon layers, in addition to configuration -trim down, is that Galleon only installs the needed content (JBoss Modules modules, scripts, etc.)

-
-
-

To install a server only configured with the Jakarta-RESTful-Web-Services and CDI capabilities call:

-
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cdi,jaxrs
-
-
-
-

Once installed, the directory my-wildfly-server contains all that is expected to deploy an application -that depends on Jakarta-RESTful-Web-Services and CDI.

-
-
-

Some layers optionally depend on other layers; i.e. the features provided by layer can and by default do make use -of those from another layer, but if those are not present things will still work fine. In such a case if you do not -want the optional capabilities you can exclude the optional layer by prefixing its name with a '-'. For example -to exclude the optional CDI dependency on Jakarta Bean Validation:

-
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cdi,jaxrs,-bean-validation
-
-
-
- - - - - -
- - -
-
    -
  • -

    Tools (jboss-cli, add-user, …​) are not always installed when installing WildFly using layers. -In some cases, depending on what layers you use, only server launcher scripts are installed into the bin directory. -To include these tools include the core-tools layer.

    -
  • -
-
-
-
-
-

1.5.1. WildFly Layers

-
-

A Galleon layer is a name that identifies a server capability (e.g.: jaxrs, -ejb, microprofile-config, jpa) or an aggregation of such capabilities. A layer captures a server capability in the form of:

-
-
-
    -
  • -

    A piece of server XML configuration (e.g.: extension, configured subsystem, interfaces) that describes the capability.

    -
  • -
  • -

    A set of modules and other filesystem content that implements the capability.

    -
  • -
-
-
-

When you are using a layer, it delivers these pieces of information in order for -Galleon to assemble a server containing only the required configuration and modules.

-
-
-

In the tables below we provide basic information about all of the layers WildFly provides.

-
-
-

Besides the layer names and a brief description of each, the tables below detail the various dependency relationships -between layers. If the capabilities provided by a layer A require capabilities provided by another layer B, then layer A will depend on layer B. -If you ask for layer A, then Galleon will automatically provide B as well. In some cases A’s dependency on B can be optional; that -is A typically comes with B, but can function without it. In this case if you ask for A by default Galleon will provide B as well, -but you can tell Galleon to exclude B.

-
-
-

Some layers are logical alternatives to other layers. If two layers are alternatives to each other they both provide the same general -capabilities, but with different implementation characteristics. For example a number of layers provide the capability to cache different -types of objects. These layers typically come in pairs of alternatives, where one alternative provides local caching, while the other provides -distributed caching. If a layer you want has an optional dependency on a layer that has an alternative, you can exclude that dependency -and instead specify the alternative. If a layer has an alternative the Description column in the tables below will identify it.

-
-
- - - - - -
- - -
-

If the elytron layer is present, security will be handled by the elytron subsystem. -The undertow and ejb subsystems are configured with an other application-security-domain that references the Elytron ApplicationDomain security domain.

-
-
-
-
-
Foundational Galleon layers
-
-

A single Galleon layer can provide a relatively small set of capabilities, but most users will want to start with a broader set -of capabilities without having to spell out all the details. To help with this WildFly provides a few foundational layers -all of which provide typical core WildFly capabilities like the logging subsystem and a secure remote management interface.

-
-
-

You don’t have to base your WildFly installation on one of these foundational layers, but doing so may be more convenient.

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionDependencies

datasources-web-server

A servlet container with support for datasources.

core-server
-core-tools (optional)
-datasources (optional)
-elytron
-web-server

jaxrs-server

An extension of datasources-web-server with support for Jakarta RESTful Web Services, CDI and JPA.

bean-validation (optional)
-cdi (optional)
-datasources-web-server
-jaxrs (optional)
-jpa (optional)
-microprofile-rest-client (optional)

cloud-server

An extension of jaxrs-server to address common cloud requirements.

ee-security (optional)
-jaxrs-server
-jms-activemq (optional)
-observability (optional)
-resource-adapters (optional)

core-server

A typical manageable server core. This layer could serve as a base for a more -specialized WildFly that doesn’t need the capabilities provided by the other foundational layers.

core-management (optional)
-jmx-remoting (optional)
-logging (optional)
-management (optional)
-request-controller (optional)
-security-manager (optional)

ee-core-profile-server

A Jakarta EE Core Profile server.

core-server
-cdi
-ee-integration
-elytron
-jaxrs-core
-jsonp
-jsonb

-
-
-
Basic Galleon Layers
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Name

Description

Dependencies

base-server

Empty runnable server.

git-history (optional)

batch-jberet

Support for Jakarta Batch.

cdi
-ee
-elytron
-transactions

bean-validation

Support for Jakarta Bean Validation.

base-server
-cdi (optional)

cdi

Support for Jakarta Contexts and Dependency Injection.

base-server
-bean-validation (optional)

cloud-profile

An aggregation of some basic layers to address cloud use cases.

bean-validation (optional)
-cdi (optional)
-ee-security (optional)
-jaxrs (optional)
-jms-activemq (optional)
-jpa (optional)
-observability (optional)
-resource-adapters (optional)
-web-server

core-management

Support for server management services.

base-server

core-tools

Support for jboss-cli, add-user and elytron-tool launch scripts and configuration files.

management (optional)

datasources

Support for datasources.

transactions

deployment-scanner

Support for deployment directory scanning.

base-server

discovery

Support for discovery.

base-server

ee

Support for common functionality in the Jakarta EE platform and for Jakarta Concurrency.

ee-concurrency (optional)
-ee-integration

ee-concurrency

Support for Jakarta Concurrency.

naming

ee-integration

Support for common functionality in the Jakarta EE platform.

jsonb (optional)
-naming

ee-security

Support for EE Security.

cdi
-elytron

ejb-http-invoker

Support for invoking Jakarta Enterprise Beans over HTTP.

ejb-lite
-elytron
-undertow

ejb

Support for Jakarta Enterprise Beans, excluding the IIOP protocol.

ejb-lite
-messaging-activemq
-remoting
-resource-adapters
-undertow

ejb-dist-cache

Infinispan-based distributed cache for stateful session beans.
-Alternative: ejb-local-cache

transactions

ejb-lite

Support for Jakarta Enterprise Beans Lite.

ejb-local-cache (optional)
-naming
-transactions

ejb-local-cache

Infinispan-based local cache for stateful session beans.
-Alternative: ejb-dist-cache

transactions

elytron

Support for Elytron security.

base-server

embedded-activemq

Support for an embedded Apache Activemq Artemis Jakarta Messaging broker.
-Alternative: remote-activemq

cdi
-ee
-elytron
-naming
-remoting
-messaging-activemq
-undertow

git-history

Support for using git for configuration management.

hibernate-search

Support for Hibernate Search. The jpa dependency can be excluded and jpa-distributed used instead.

jpa (optional)

h2-datasource

Support for an H2 datasource

h2-driver

h2-default-datasource

Support for an H2 datasource set as the ee subsystem default datasource.

h2-datasource

h2-driver

Support for the H2 JDBC driver.

base-server

iiop-openjdk

Support for IIOP

naming

io

Support for XNIO workers and buffer pools.

base-server

jaxrs-core

Support for Jakarta RESTful Web Services.

ee-integration
-servlet

jaxrs

Support for Jakarta RESTful Web Services with optional ee-concurrency and deployment scanner layers.

deployment-scanner (optional)
-ee-concurrency (optional)
-jaxrs-core

jdr

Support for the JBoss Diagnostic Reporting (JDR) subsystem.

base-server
-management (optional)

jms-activemq

Deprecated - use messaging-activemq.

messaging-activemq

jmx

Support for registration of Management Model MBeans.

base-server

jmx-remoting

Support for a JMX remoting connector.

jmx
-management

jpa

Support for JPA (using the latest WildFly supported Hibernate release).
-Alternative: jpa-distributed

bean-validation (optional)
-datasources

jpa-distributed

Support for JPA with a distributed second level cache.
-Alternative: jpa

bean-validation (optional)
-datasources

jsf

Support for Jakarta Faces.

bean-validation (optional)
-cdi
-web-server

jsonb

Support for JSON Binding (Jakarta JSON Binding) provisioning the Jakarta JSON Binding API and Implementation modules.

base-server

jsonp

Support for JSON Processing (Jakarta JSON Processing) provisioning the Jakarta JSON Processing API and Implementation modules.

base-server

logging

Support for the logging subsystem.

base-server

mail

Support for Jakarta Mail.

base-server
-naming

management

Support for remote access to management interfaces secured using Elytron.

elytron

messaging-activemq

Support for connections to a remote Jakarta Messaging broker.

resource-adapters

micrometer

Support for Micrometer

cdi

microprofile-config

Support for MicroProfile Config.

cdi

microprofile-fault-tolerance

Support for MicroProfile Fault Tolerance.

cdi
-microprofile-config

microprofile-health

Support for MicroProfile Health.

management
-microprofile-config

microprofile-jwt

Support for MicroProfile JWT.

ee-security
-microprofile-config

microprofile-openapi

Support for MicroProfile OpenAPI.

jaxrs
-microprofile-config

microprofile-platform

Support for available MicroProfile platform specifications.

microprofile-config (optional)
-microprofile-fault-tolerance (optional)
-microprofile-health (optional)
-microprofile-jwt (optional)
-microprofile-openapi (optional)
-microprofile-rest-client (optional)

microprofile-rest-client

Support for MicroProfile REST client.

microprofile-config

microprofile-reactive-messaging

Support for MicroProfile Reactive Messaging

cdi
-reactive-streams-operators

microprofile-reactive-messaging-kafka

Support for MicroProfile Reactive Messaging Kafka connector

reactive-messaging

microprofile-reactive-streams-operators

Support for MicroProfile Reactive Streams Operators

cdi

microprofile-lra-coordinator

Support for MicroProfile LRA Coordinator

cdi
-jaxrs
-transactions

microprofile-lra-participant

Support for MicroProfile LRA Participant

cdi
-jaxrs

microprofile-telemetry

Support for MicroProfile Telemetry

cdi
-microprofile-config
-opentelemetry

mod_cluster

Support for mod_cluster subsystem.

web-server

naming

Support for JNDI.

base-server

observability

Support for MicroProfile monitoring features.

microprofile-config (optional)
-microprofile-health (optional)

opentelemetry

Support for OpenTelemetry

cdi

pojo

Support for legacy JBoss Microcontainer applications.

base-server

remote-activemq

Support for connections to a remote Apache Activemq Artemis Jakarta Messaging broker.
-Alternative: embedded-activemq

messaging-activemq

remoting

Support for inbound and outbound JBoss Remoting connections, secured using Elytron.

elytron
-io

request-controller

Support for request management

base-server

resource-adapters

Support for deployment of Jakarta Connectors resource adapters.

transactions

sar

Support for SAR archives to deploy MBeans.

base-server
-jmx

security-manager

Support for applying security manager permissions to applications.

base-server

servlet

A servlet container.

ee-integration
-naming
-undertow

transactions

Support for transactions.

ee
-elytron

undertow

Support for the Undertow HTTP server. Provides servlet support but does not provide typical EE integration like resource injection. -Use web-server for a servlet container with EE integration.

base-server
-io

undertow-https

Support for the Undertow HTTPS server secured using the applicationSSC SSLContext.

elytron
-undertow

undertow-load-balancer

Support for Undertow configured as a load balancer.

base-server
-io

web-clustering

Support for distributable web applications. Configures a non-local Infinispan-based container web cache for data session handling suitable to clustering environments.

transactions
-web-server

web-console

Support for loading the HAL web console from the /console context on the HTTP -management interface. Not required to use a HAL console obtained independently -and configured to connect to the server.

management

web-passivation

Support for distributable web applications. Configures a local Infinispan-based container web cache for data session handling suitable to single node environments.

transactions
-web-server

web-server

A servlet container.

deployment-scanner (optional)
-ee
-ee-concurrency (optional)
-naming
-servlet

webservices

Support for Jakarta XML Web Services

ejb-lite (optional)
-messaging-activemq (optional)
-web-server

-
- - - - - -
- - -References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. - References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-

1.5.2. Galleon CLI recipes

-
-

Using the Galleon CLI tool, you can provision WildFly installations based on a set of layers.

-
-
- - - - - -
- - -
-

In order to exclude an optional layer prefix its name with '-', for example: '-jpa' to exclude the jpa layer.

-
-
-
-
-
Installation of a cloud-server
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cloud-server
-
-
-
-
-
Installation of a cloud-server with support for https
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cloud-server,undertow-https
-
-
-
-
-
Installation of a cloud-server and Jakarta Enterprise Beans with ejb-dist-cache as an alternative to ejb-local-cache
-
-

This is done by excluding the ejb layer’s optional ejb-local-cache dependency and specifying its ejb-dist-cache -alternative:

-
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cloud-server,ejb,-ejb-local-cache,ejb-dist-cache
-
-
-
-
-
Installation of a jaxrs-server with jpa-distributed as an alternative to jpa
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=jaxrs-server,-jpa,jpa-distributed
-
-
-
-
-
Installation of jaxrs, cdi, elytron and logging
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=jaxrs,cdi,elytron,logging
-
-
-
-
-
Installation of a servlet container with main core functionalities
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=web-server,core-server
-
-
-
-
-
Installation of a servlet container with support for https
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=web-server,undertow-https
-
-
-
-
-
Installation of a core server
-
-
-
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=core-server
-
-
-
- - - - - -
- - -References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. -
-
-
-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Galleon_Guide.html

+ \ No newline at end of file diff --git a/29/Getting_Started_Developing_Applications_Guide.html b/29/Getting_Started_Developing_Applications_Guide.html index 432ab53d5..20323bf20 100644 --- a/29/Getting_Started_Developing_Applications_Guide.html +++ b/29/Getting_Started_Developing_Applications_Guide.html @@ -1,4176 +1,11 @@ - - - - - - -Getting Started Developing Applications Guide - - - - - - -
-
-
-
-

© 2017 The original authors.

-
- - -
-
-
-

1. Introduction

-
-
-

This guide will walk you through installing and starting up JBoss WildFly. It will then introduce key features of the Jakarta EE (Web Profile) programming model, of which JBoss WildFly is a certified implementation.

-
-
- - - - - -
- - -
Jakarta EE
-
-

The Jakarta EE platform offers developers the ability to write -distributed, transactional and portable applications quickly and easily. -We class applications that require these capabilities "enterprise -applications". These applications must be fast, secure and reliable.

-
-
-

Jakarta EE has always offered strong messaging (JMS), transactional (JTA) -and resource (JCA) capabilities as well as exposing web services via -SOAP (JAX-WS).

-
-
-
-
-

JBoss WildFly depart from the familiar structure of previous JBoss AS versions, so we recommend all developers follow the steps in Getting Started with JBoss WildFly to install and start up the application server for the first time.

-
-
-

JBoss WildFly come with a series of quickstarts aimed to get you up to writing applications with minimal fuss. We recommend to start by working through the quickstarts in this guide, in the order they are presented. If you have previous experience with Jakarta EE 6, you may wish to skip some or all of the quickstarts.

-
-
-

Core

-
-
-
    -
  1. -

    Helloworld Quickstart. If you have previously developed applications using technologies such as JSF or Wicket, and EJB or Spring, you may wish to skip this quickstart.

    -
  2. -
  3. -

    Numberguess Quickstart. If you have previously developed applications using technologies such as JSF or Wicket, EJB or Spring, and JPA or Hibernate you may wish to skip this quickstart.

    -
  4. -
  5. -

    Greeter Quickstart. If you are a Jakarta EE wizard you may wish to skip this quickstart.

    -
  6. -
  7. -

    Kitchensink Quickstart. A great starting point for your project.

    -
  8. -
-
-
-

1.1. Downloading the quickstarts

-
-

The quickstarts are are available for download from JBoss Developer Framework. Make sure you download the latest zip!

-
-
-
-
-
-

2. Getting started with WildFly

-
-
-

To run the quickstarts with the provided build scripts, you’ll need:

-
-
- - - - - -
- - -
-

If you already have any of these pieces of software, there is no need to -install them again!

-
-
-
-
-
-
Java 8, to run WildFly and Maven
-
-

Choose your Java runtime, and follow their installation instructions. For example, you could choose one of:

-
- -
-
-
Maven 3, to build and deploy the quickstarts
-
-

Follow the official Maven installation guide if you don’t already have Maven 3 installed. You can check which version of Maven you have installed (if any) by running mvn --version . If you see a version newer than 3.0.0, you are ready to go.

-
-
The JBoss WildFly runtime
-
-

Download JBoss WildFly from the WildFly download page

-
-
The WildFly quickstarts
-
-

Available from WildFly Quickstarts

-
-
-
-
-

If you wish to use the examples from an IDE, we recommend using CodeReady Studio, or Eclipse with JBoss Tools.

-
-
-
-
Red Hat CodeReady Studio
-
-

Download CodeReady Studio from https://developers.redhat.com/products/codeready-studio/download.

-
-
Eclipse, with JBoss Tools
-
-

Download JBoss Tools from http://jboss.org/tools. Make sure you install m2eclipse as well.

-
-
-
-
- - - - - -
- - -
-

JBoss WildFly offer the -ability to manage multiple AS instances from a single control point. -A collection of such servers are referred to as members of a "domain", -with a single Domain Controller process acting as the management control -point. Domains can span multiple physical (or virtual) machines, with -all AS instances on a given host under the control of a Host Controller -process. The Host Controllers interact with the Domain Controller to -control the lifecycle of the AS instances running on that host and to -assist the Domain Controller in managing them.

-
-
-

JBoss WildFly also offers a standalone mode, which is perfect for a single -server. We use this throughout the quickstarts.

-
-
-
-
-

2.1. Installing and starting the JBoss server on Linux, Unix or Mac OS X

-
-

First, let’s verify that both Java and Maven are correctly -installed. In a console, type:

-
-
-
-
java -version
-
-
-
-

You should see a version string (at least 1.8.0) printed. If not, contact your provider of Java for assistance. Next, type:

-
-
-
-
mvn --version
-
-
-
-

You should see a version string (at least 3.3.0) printed. If not, contact the Maven community for assistance.

-
-
-

Next, we need to choose a location for WildFly to live. By default, WildFly will be extracted into wildfly-11.x.x.x (where 11.x.x.x matches the version you downloaded):

-
-
-
-
unzip wildfly-11.x.x.x.zip
-
-
-
-

Now, let’s start WildFly in standalone mode:

-
-
-
-
wildfly-11.x.x.x/bin/standalone.sh
-
-
-
- - - - - -
- - -
-

If you want to stop WildFly, simply press Crtl-C whilst the terminal -has focus.

-
-
-
-
-

That’s it, WildFly is installed and running! Visit http://localhost:8080/ to check the server has started properly.

-
-
- - - - - -
- - -
-

You can find the server log for standalone instances in -wildfly-11.x.x.x/standalone/log/server.log. The -Administration and Configuration Guide for JBoss Enterprise Application Platform 7 or the -Getting Started Guide for JBoss WildFly -covers more on configuring logging.

-
-
-
-
-
-

2.2. Installing and starting the JBoss server on Windows

-
-

First, let’s verify that both Java and Maven are correctly installed. In a Command Prompt, type:

-
-
-
-
java -version
-
-
-
-

You should see a version string (at least 1.8.0) printed. If not, contact your provider of Java for assistance. Next, type:

-
-
-
-
mvn --version
-
-
-
-

You should see a version string (at least 3.3.0) printed. If not, contact the Maven community for assistance.

-
-
-

Next, we need to choose a location for JBoss WildFly to live. By default, JBoss WildFly will be extracted into wildfly-11.x.x.x (where 11.x.x.x matches the version you downloaded). Unzip JBoss Enterprise Application Platform or JBoss WildFly using your tool of choice.

-
-
-

Finally, let’s start JBoss WildFly in standalone mode. Locate your installation and run standalone.bat located in bin.

-
-
- - - - - -
- - -
-

If you want to stop the server, simply press Crtl-C whilst the terminal -has focus.

-
-
-
-
-

That’s it, JBoss WildFly is installed and running! Visit http://localhost:8080/ to check the server has started properly.

-
-
- - - - - -
- - -
-

You can find the server log for standalone instances in -wildfly-11.x.x.x/standalone/log/server.log. The -Administration and Configuration Guide for JBoss Enterprise Application Platform 7 or the -Getting Started Guide for JBoss WildFly -covers more on configuring logging.

-
-
-
-
-
-

2.3. Starting the JBoss server from CodeReady Studio or Eclipse with JBoss Tools

-
-

You may choose to use CodeReady Studio, or Eclipse with JBoss Tools, rather than the command line to run JBoss WildFly, and to deploy the quickstarts. If you don’t wish to use Eclipse, you should skip this section.

-
-
-

Make sure you have installed and started CodeReady Studio or Eclipse. First, we need to add our WildFly instance to it. First, navigate to Preferences:

-
-
-

Eclipse Detect Servers 1

-
-
-

Now, locate the JBoss Tools Runtime Detection preferences:

-
-
-

Eclipse Detect Servers 2

-
-
-

Click Add and locate where you put servers on your disk:

-
-
-

Eclipse Detect Servers 3

-
-
-

Any available servers will be located, now all you need to do is click OK, and then OK on the preferences dialog:

-
-
-

Eclipse Detect Servers 4

-
-
-

Now, let’s start the server from Eclipse. If you previously started a server from the command line, you should stop it there first.

-
-
-

First, we need to make sure the Server tab is on view. Open the Window → Show View → Other…​ dialog:

-
-
-

Eclipse Server Tab 1

-
-
-

And select the Server view:

-
-
-

Eclipse Server Tab 2

-
-
-

You should see the Server View appear with the detected servers:

-
-
-

Eclipse Server Tab 3

-
-
-

Now, we can start the server. Right click on the server in the Server view, and select Start :

-
-
-

Eclipse Server Start 1

-
-
- - - - - -
- - -
-

If you want to debug your application, you can simply select Debug -rather than Start . This will start the server in debug mode, and -automatically attach the Eclipse debugger.

-
-
-
-
-

You’ll see the server output in the Console :

-
-
-

Eclipse Server Start 2

-
-
-

That’s it, we now have the server up and running in Eclipse!

-
-
-
-

2.4. Importing the quickstarts into Eclipse

-
-

In order to import the quickstarts into Eclipse, you will need m2eclipse installed. If you have CodeReady Studio, then m2eclipse is already installed.

-
-
-

First, choose File → Import…​:

-
-
-

Import Quickstarts 1

-
-
-

Select Existing Maven Projects:

-
-
-

Import Quickstarts 2

-
-
-

Click on Browse, and navigate to the quickstarts/ directory:

-
-
-

Import Quickstarts 3

-
-
-

Finally, make sure all 4 quickstarts are found and selected, and click Finish:

-
-
-

Import Quickstarts 4

-
-
-

Eclipse should now successfully import 4 projects:

-
-
-

Import Quickstarts 5

-
-
-

It will take a short time to import the projects, as Maven needs to download the project’s dependencies from remote repositories.

-
-
-
-

2.5. Managing JBoss WildFly

-
-

Here we will quickly outline how you can access both the command line interface and the web management interface for managing JBoss WildFly. Detailed information for both can be found in the Administration and Configuration Guide for JBoss Enterprise Application Platform 6 or the Admin Guide for JBoss WildFly.

-
-
-

When the server is running, the web management interface can be accessed at http://localhost:9990/console. You can use the web management interface to create datasources, manage deployments and configure the server.

-
-
-

JBoss WildFly also comes with a command line interface. To run it on Linux, Unix or Mac, execute:

-
-
-
-
wildfly-11.x.x.x/bin/jboss-admin.sh --connect
-
-
-
-

Or, on Windows:

-
-
-
-
wildfly-11.x.x.x/bin/jboss-admin.bat --connect
-
-
-
-

Once started, type help to discover the commands available to you.

-
-
-

Throughout this guide we use the wildfly maven plugin to deploy and undeploy applications. This plugin uses the Native Java Detyped Management API to communicate with the server. The Detyped API is used by management tools to control an entire domain of servers, and exposes only a small number of types, allowing for backwards and forwards compatibility.

-
-
-
-
-
-

3. CDI + Servlet: Helloworld quickstart

-
-
-

This quickstart shows you how to deploy a simple servlet to JBoss WildFly. The business logic is encapsulated in a service, which is provided as a CDI bean, and injected into the Servlet.

-
-
- - - - - -
- - -
Contexts and Dependency Injection for Jakarta EE
-
-

CDI is a specification in Jakarta EE, inspired by JBoss Seam and -Google Guice, and also drawing on lessons learned from frameworks such -as Spring. It allows application developers to concentrate on developing -their application logic by providing the ability to wire services -together, and abstract out orthogonal concerns, all in a type safe -manner.

-
-
-
-
-

Switch to the quickstarts/helloworld directory and instruct Maven to build and deploy the application:

-
-
-
-
mvn package wildfly:deploy
-
-
-
-

The quickstart uses a Maven plugin to deploy the application. The plugin requires JBoss WildFly to be running (you can find out how to start the server in Installing and starting the JBoss server on Linux, Unix or Mac OS X or Installing and starting the JBoss server on Windows).

-
-
-

Now, check if the application has deployed properly by clicking http://localhost:8080/wildfly-helloworld/HelloWorld. If you see a "Hello World" message it’s all working!

-
-
- - - - - -
- - -
-

Should you wish to undeploy the quickstart, or redeploy after making -some changes, it’s pretty easy:

-
-
-
    -
  • -

    mvn wildfly:deploy - deploy any changes to the application to the -application server

    -
  • -
  • -

    mvn wildfly:undeploy - undeploy the quickstart

    -
  • -
-
-
-
-
-

It’s time to pull the covers back and dive into the internals of the quickstart.

-
-
-

Deploying the Helloworld quickstart using CodeReady Studio, or Eclipse with JBoss Tools

-
-
-
-
You may choose to deploy the quickstart using CodeReady Studio, or Eclipse with JBoss Tools. You'll need to have JBoss WildFly started in the IDE (as described  in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and to have imported the quickstarts into Eclipse (as described in <<GettingStarted-importing_quickstarts_into_eclipse,Importing the quickstarts into Eclipse>>).
-
-With the quickstarts imported, you can deploy the quickstart by right clicking on the `wildfly-helloworld` project, and choosing _Run As -> Run On Server_:
-
-image:gfx/Eclipse_Helloworld_Deploy_1.jpg[]
-
-Make sure the correct server is selected, and hit Finish:
-
-image:gfx/Eclipse_Deploy_2.jpg[]
-
-You should see the server start up (unless you already started it in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and the application deploy in the Console log
-
-image:gfx/Eclipse_Helloworld_Deploy_3.jpg[]
-
-
-The helloworld quickstart in depth
-----------------------------------
-
-The quickstart is very simple - all it does is print "Hello World" onto a web page.
-
-The helloworld quickstart is comprised of a servlet and a CDI bean. We also include an empty `beans.xml` file, which tells JBoss WildFly to look for beans in this application and to activate the CDI. `beans.xml` is located in `WEB-INF/`, which can be found in the `src/main/webapp` directory. Also in this directory we include `index.html` which uses a simple meta refresh to send the users browser to the Servlet, which is located at http://localhost:8080/wildfly-helloworld/HelloWorld.
-
-All the configuration files for this quickstart are located in `WEB-INF/`, which can be found in the `src/main/webapp` directory.
-
-Notice that we don't even need a `web.xml`!
-
-Let's start by taking a look at the servlet:
-
-.src/main/java/org/jboss/as/quickstarts/helloworld/HelloWorldServlet.java
-[source,java]
-------------------------------------------------------------------------
-@SuppressWarnings("serial")
-@WebServlet("/HelloWorld")                                           (1)
-public class HelloWorldServlet extends HttpServlet {
-
-   static String PAGE_HEADER =
-       "<html><head><title>helloworld</title></head><body>";                (2)
-
-   static String PAGE_FOOTER = "</body></html>";
-
-   @Inject
-   HelloService helloService;                                        (3)
-
-   @Override
-   protected void doGet(HttpServletRequest req,
-                        HttpServletResponse resp)
-                        throws ServletException, IOException {
-      resp.setContentType("text/html");
-      PrintWriter writer = resp.getWriter();
-      writer.println(PAGE_HEADER);
-      writer.println("<h1>" +
-                     helloService.createHelloMessage("World") +      (4)
-                     "</h1>");
-      writer.println(PAGE_FOOTER);
-      writer.close();
-   }
-
-}
-------------------------------------------------------------------------
-<1> If you've used Servlet before, then you'll remember having to use xml to register your servlets. Fortunately, this is a thing of the past. Now all you need to do is add the @WebServlet annotation, and provide a mapping to a URL used to access the servlet. Much cleaner!
-<2> Every web page needs to be correctly formed HTML. We've created static Strings to hold the minimum header and footer to write out.
-<3> We inject the HelloService (a CDI bean) which generates the actual message. This allows to alter the implementation of HelloService at a later date without changing the view layer at all (assuming we don't alter the API of HelloService ).
-<4> We call into the service to generate the message "Hello World", and write it out to the HTTP request.
-
-[TIP]
-========================================================================
-The package declaration and imports have been excluded from these
-listings. The complete listing is available in the quickstart source.
-========================================================================
-
-Now we understand how the information is sent to the browser, let's take a look at the service.
-
-.src/main/java/org/jboss/as/quickstarts/helloworld/HelloService.java
-------------------------------------------------------------------------
-public class HelloService {
-
-   String createHelloMessage(String name) {
-      return "Hello " + name + "!";
-   }
-
-}
-------------------------------------------------------------------------
-
-The service is very simple - no registration (XML or annotation) is required!
-
-
-CDI + JSF: Numberguess quickstart
-=================================
-:Author: Pete Muir
-
-[[NumberguessQuickstart-]]
-
-This quickstart shows you how to create and deploy a simple application to JBoss WildFly; the application does not persist any information. Information is displayed using a JSF view, and business logic is encapsulated in two CDI beans.
-
-Switch to the `quickstarts/numberguess` directory and instruct Maven to build and deploy the application:
-
-    mvn package wildfly:deploy
-
-The quickstart uses a Maven plugin to deploy the application. The plugin requires JBoss WildFly to be running (you can find out how to start the server in <<GettingStarted-on_linux, Installing and starting the JBoss server on Linux, Unix or Mac OS X>> or <<GettingStarted-on_windows, Installing and starting the JBoss server on Windows>>).
-
-Or you can start the server using an IDE, like CodeReady Studio.
-
-Now, see if you can determine the most efficient approach to pinpoint the random number at the URL http://localhost:8080/wildfly-numberguess.
-
-[TIP]
-========================================================================
-Should you wish to undeploy the quickstart, or redeploy after making
-some changes, it's pretty easy:
-
-* `mvn wildfly:deploy` - deploy any changes to the application to the
-  application server
-* `mvn wildfly:undeploy` - undeploy the quickstart
-========================================================================
-
-It's time to pull the covers back and dive into the internals of the quickstart.
-
-
-Deploying the Numberguess quickstart using Eclipse
---------------------------------------------------
-
-You may choose to deploy the quickstart using Eclipse. You'll need to have JBoss WildFly started in Eclipse as described  in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and to have imported the quickstarts into Eclipse (as described in <<GettingStarted-importing_quickstarts_into_eclipse, Importing the quickstarts into Eclipse>>).
-
-With the quickstarts imported, you can deploy the quickstart by right clicking on the `wildfly-numberguess` project, and choosing _Run As -> Run On Server_:
-
-image:gfx/Eclipse_Numberguess_Deploy_1.jpg[]
-
-Make sure the correct server is selected, and hit Finish:
-
-image:gfx/Eclipse_Deploy_2.jpg[]
-
-You should see the server start up (unless you already started it in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and the application deploy in the Console log:
-
-image:gfx/Eclipse_Numberguess_Deploy_3.jpg[]
-
-
-The numberguess quickstart in depth
------------------------------------
-
-In the numberguess application you get 10 attempts to guess a number between 1 and 100. After each attempt, you're told whether your guess was too high or too low.
-
-The quickstart is comprised of a number of beans, configuration files and Facelets (JSF) views, packaged as a war module. Let's start by examining the configuration files.
-
-All the configuration files for this quickstart are located in `WEB-INF/`, which can be found in the `src/main/webapp` directory. First, we have the JSF 2.0 version of `faces-config.xml`. A standardized version of Facelets is the default view handler in JSF 2.0, so there's really nothing that we have to configure. WildFly goes above and beyond Jakarta EE here, and will automatically configure JSF for you if you include this file. Thus, the configuration consists of only the root element.
-
-.src/main/webapp/WEB-INF/faces-config.xml
-[source,xml]
-------------------------------------------------------------------------
-<faces-config version="2.0"
-   xmlns="http://java.sun.com/xml/ns/javaee"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="
-      http://java.sun.com/xml/ns/javaee
-      http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
-
-</faces-config>
-------------------------------------------------------------------------
-
-There's also an empty `beans.xml` file, which tells WildFly to look for beans in this  application and to activate the CDI.
-
-Notice that we don't even need a `web.xml`!
-
-Let's take a look at the main JSF view, `src/main/webapp/home.xhtml`.
-
-
-[TIP]
-========================================================================
-JSF uses the .xhtml extension for source files, but serves up the
-rendered views with the .jsf extension.
-========================================================================
-
-.src/main/webapp/WEB-INF/home.xhtml
-[source,html]
-------------------------------------------------------------------------
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-   xmlns:ui="http://java.sun.com/jsf/facelets"
-   xmlns:h="http://java.sun.com/jsf/html"
-   xmlns:f="http://java.sun.com/jsf/core">
-
-<head>
-<meta http-equiv="Content-Type" content="text/html;
-    charset=iso-8859-1" />
-<title>numberguess</title>
-</head>
-
-<body>
-   <div id="content">
-      <h1>Guess a number...</h1>
-      <h:form id="numberGuess">
-
-         <!-- Feedback for the user on their guess -->
-         <div style="color: red">                                    (1)
-            <h:messages id="messages" globalOnly="false" />
-            <h:outputText id="Higher" value="Higher!"
-               rendered="#{game.number gt game.guess and game.guess ne 0}" />
-            <h:outputText id="Lower" value="Lower!"
-               rendered="#{game.number lt game.guess and game.guess ne 0}" />
-         </div>
-
-         <!-- Instructions for the user -->
-         <div>                                                       (2)
-            I'm thinking of a number between <span
-               id="numberGuess:smallest">#{game.smallest}</span> and <span
-               id="numberGuess:biggest">#{game.biggest}</span>. You have
-            #{game.remainingGuesses} guesses remaining.
-         </div>
-
-         <!-- Input box for the users guess, plus a button to submit, and reset -->
-         <!-- These are bound using EL to our CDI beans -->
-         <div>
-            Your guess:                                              (3)
-            <h:inputText id="inputGuess" value="#{game.guess}"
-               required="true" size="3"
-               disabled="#{game.number eq game.guess}"
-               validator="#{game.validateNumberRange}" />            (4)
-            <h:commandButton id="guessButton" value="Guess"
-               action="#{game.check}"
-               disabled="#{game.number eq game.guess}" />
-         </div>
-         <div>                                                       (5)
-            <h:commandButton id="restartButton" value="Reset"
-               action="#{game.reset}" immediate="true" />
-         </div>
-      </h:form>
-
-   </div>
-
-   <br style="clear: both" />
-
-</body>
-</html>
-------------------------------------------------------------------------
-
-<1> There are a number of messages which can be sent to the user, "Higher!" and "Lower!"
-<2> As the user guesses, the range of numbers they can guess gets smaller - this sentence changes to make sure they know the number range of a valid guess.
-<3> This input field is bound to a bean property using a value expression.
-<4> A validator binding is used to make sure the user doesn't accidentally input a number outside of the range in which they can guess - if the validator wasn't here, the user might use up a guess on an out of bounds number.
-<5> There must be a way for the user to send their guess to the server. Here we bind to an action method on the bean.
-
-The quickstart consists of 4 classes, the first two of which are qualifiers.  First, there is the `@Random` qualifier, used for injecting a random number:
-
-[TIP]
-========================================================================
-A _qualifier_ is used to disambiguate between two beans both of which
-are eligible for injection based on their type. For more, see the
-link:http://docs.jboss.org/weld/reference/latest/en-US/html/[Weld Reference Guide].
-========================================================================
-
-.src/main/java/org/jboss/as/quickstarts/numberguess/Random.java
-[source,java]
-------------------------------------------------------------------------
-@Target({ TYPE, METHOD, PARAMETER, FIELD })
-@Retention(RUNTIME)
-@Documented
-@Qualifier
-public @interface Random {
-
-}
-------------------------------------------------------------------------
-
-There is also the `@MaxNumber` qualifier, used for injecting the maximum number that can be injected:
-
-.src/main/java/org/jboss/as/quickstarts/numberguess/MaxNumber.java
-[source,java]
-------------------------------------------------------------------------
-@Retention(RUNTIME)
-@Documented
-@Qualifier
-public @interface MaxNumber {
-
-}
-------------------------------------------------------------------------
-
-The application-scoped `Generator` class is responsible for creating the random number, via a producer method. It also exposes the maximum possible number via a producer method:
-
-.src/main/java/org/jboss/as/quickstarts/numberguess/Generator.java
-[source,java]
-------------------------------------------------------------------------
-@SuppressWarnings("serial")
-@ApplicationScoped
-public class Generator implements Serializable {
-
-   private java.util.Random random = new java.util.Random(System.currentTimeMillis());
-
-   private int maxNumber = 100;
-
-   java.util.Random getRandom() {
-      return random;
-   }
-
-   @Produces
-   @Random
-   int next() {
-      // a number between 1 and 100
-      return getRandom().nextInt(maxNumber - 1) + 1;
-   }
-
-   @Produces
-   @MaxNumber
-   int getMaxNumber() {
-      return maxNumber;
-   }
-}
-------------------------------------------------------------------------
-
-The `Generator` is application scoped, so we don't get a different random each time.
-
-The final bean in the application is the session-scoped `Game` class. This is the primary entry point of the application. It's responsible for setting up or resetting the game, capturing and validating the user's guess and providing feedback to the user with a `FacesMessage`. We've used the post-construct lifecycle method to initialize the game by retrieving a random number from the `@RandomInstance<Integer>` bean.
-
-You'll notice that we've also added the `@Named` annotation to this class. This annotation is only required when you want to make the bean accessible to a JSF view via EL (i.e. `#{game}`)
-
-.src/main/java/org/jboss/as/quickstarts/numberguess/Game.java
-[source,java]
-------------------------------------------------------------------------
-@SuppressWarnings("serial")
-@Named
-@SessionScoped
-public class Game implements Serializable {
-
-   /**
-    * The number that the user needs to guess
-    */
-   private int number;
-
-   /**
-    * The users latest guess
-    */
-   private int guess;
-
-   /**
-    * The smallest number guessed so far (so we can track the valid guess range).
-    */
-   private int smallest;
-
-   /**
-    * The largest number guessed so far
-    */
-   private int biggest;
-
-   /**
-    * The number of guesses remaining
-    */
-   private int remainingGuesses;
-
-   /**
-    * The maximum number we should ask them to guess
-    */
-   @Inject
-   @MaxNumber
-   private int maxNumber;
-
-   /**
-    * The random number to guess
-    */
-   @Inject
-   @Random
-   Instance<Integer> randomNumber;
-
-   public Game() {
-   }
-
-   public int getNumber() {
-      return number;
-   }
-
-   public int getGuess() {
-      return guess;
-   }
-
-   public void setGuess(int guess) {
-      this.guess = guess;
-   }
-
-   public int getSmallest() {
-      return smallest;
-   }
-
-   public int getBiggest() {
-      return biggest;
-   }
-
-   public int getRemainingGuesses() {
-      return remainingGuesses;
-   }
-
-   /**
-    * Check whether the current guess is correct, and update the biggest/smallest guesses as needed.
-    * Give feedback to the user if they are correct.
-    */
-   public void check() {
-      if (guess > number) {
-         biggest = guess - 1;
-      } else if (guess < number) {
-         smallest = guess + 1;
-      } else if (guess == number) {
-         FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Correct!"));
-      }
-      remainingGuesses--;
-   }
-
-   /**
-    * Reset the game, by putting all values back to their defaults, and getting a new random number.
-    * We also call this method when the user starts playing for the first time using
-    * {@linkplain PostConstruct @PostConstruct} to set the initial values.
-    */
-   @PostConstruct
-   public void reset() {
-      this.smallest = 0;
-      this.guess = 0;
-      this.remainingGuesses = 10;
-      this.biggest = maxNumber;
-      this.number = randomNumber.get();
-   }
-
-   /**
-    * A JSF validation method which checks whether the guess is valid. It might not be valid because
-    * there are no guesses left, or because the guess is not in range.
-    *
-    */
-   public void validateNumberRange(FacesContext context, UIComponent toValidate, Object value) {
-      if (remainingGuesses <= 0) {
-         FacesMessage message = new FacesMessage("No guesses left!");
-         context.addMessage(toValidate.getClientId(context), message);
-         ((UIInput) toValidate).setValid(false);
-         return;
-      }
-      int input = (Integer) value;
-
-      if (input < smallest || input > biggest) {
-         ((UIInput) toValidate).setValid(false);
-
-         FacesMessage message = new FacesMessage("Invalid guess");
-         context.addMessage(toValidate.getClientId(context), message);
-      }
-   }
-}
-
-------------------------------------------------------------------------
-
-
-CDI + JPA + EJB + JTA + JSF: Greeter quickstart
-===============================================
-:Author: Pete Muir
-
-[[GreeterQuickstart-]]
-
-This quickstart shows you how to create and deploy an application which persists information to a database to JBoss WildFly. Information is displayed using JSF views, business logic is encapsulated in CDI beans, information is persisted using JPA, and transactions can be controlled manually or using EJB.
-
-Switch to the `quickstarts/greeter` directory and instruct Maven to build and deploy the application:
-
-    mvn package wildfly:deploy
-
-
-The quickstart uses a Maven plugin to deploy the application. The plugin requires JBoss WildFly to be running (you can find out how to start the server in <<GettingStarted-on_linux, Installing and starting the JBoss server on Linux, Unix or Mac OS X>> or <<GettingStarted-on_windows, Installing and starting the JBoss server on Windows>>).
-
-Or you can start the server using an IDE, like CodeReady Studio. If you are using CodeReady Studio, you can deploy the quickstart by right clicking on the `greeter` project, and choosing _Run As -> Run On Server_:
-
-image:gfx/Eclipse_Greeter_Deploy_1.png[]
-
-Make sure the server is selected, and hit Finish:
-
-image:gfx/Eclipse_Deploy_2.jpg[]
-
-You should see the server start up (unless you already started it in <<GettingStarted-with_jboss_tools,Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and the application deploy in the Console log:
-
-image:gfx/Eclipse_Greeter_Deploy_3.png[]
-
-To use the application, visit http://localhost:8080/greeter/.
-
-[[greeter_in_depth]]
-The greeter quickstart in depth
--------------------------------
-
-In the quickstart, all users are stored in an H2 database (an in-memory, embedded database provided out of the box in JBoss WildFly). Each user is stored as an entity, and entities are mapped to the database using JPA. By default, transactions are managed manually, using the JTA API. Optionally, you can use EJB to manage transactions (we'll look at how to enable that later). We need a transaction in progress in order to read and write any entities.
-
-The quickstart is comprised of two JSF views, an entity, and a number of CDI beans. Additionally, there are the usual configuration files in `WEB-INF/` (which can be found in the `src/main/webapp` directory). Here we find `beans.xml` and `faces-config.xml` which tell JBoss WildFly to enable CDI and JSF for the application. Notice that we don't need a `web.xml`. There are two new configuration files in `WEB-INF/classes/META-INF` (which can be found in the `src/main/resources` directory of the quickstart) — `persistence.xml`, which sets up JPA, and `import.sql` which Hibernate, the JPA provider in  JBoss WildFly, will use to load the initial users into the application when the application starts.
-
-`persistence.xml` is pretty straight forward, and links JPA to a datasource:
-
-.src/main/resources/META-INF/persistence.xml
-[source, xml]
-------------------------------------------------------------------------
-<persistence version="2.0"
-    xmlns="http://java.sun.com/xml/ns/persistence"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="
-        http://java.sun.com/xml/ns/persistence
-        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-    <persistence-unit name="primary">                                (1)
-        <!-- If you are running in a production environment, add a
-             managed  data source, this example data source is just
-             for development and testing! -->
-        <!-- The datasource is deployed as
-             WEB-INF/greeter-quickstart-ds.xml, you can find it in
-             the source at
-             src/main/webapp/WEB-INF/greeter-quickstart-ds.xml -->
-        <jta-data-source>java:jboss/datasources/GreeterQuickstartDS</jta-data-source> (2)
-        <properties>
-            <!-- Properties for Hibernate -->                        (3)
-            <property name="hibernate.hbm2ddl.auto"
-                      value="create-drop" />
-            <property name="hibernate.show_sql"
-                      value="false" />
-        </properties>
-    </persistence-unit>
-</persistence>
-------------------------------------------------------------------------
-
-<1> The persistence unit is given a name, so that the application can use multiple if needed. If only one is defined, JPA will automatically use it.
-<2> The persistence unit references a data source. Here we are using the built in, sample, data source.
-<3> JPA allows us to configure the JPA provider specific properties. Here we tell Hibernate to automatically create any needed tables when the application starts (and drop them when the application is stopped).
-
-[TIP]
-========================================================================
-JBoss WildFly ships with a
-sample datasource `java:jboss/datasources/ExampleDS`. This data source
-is backed by H2, an in-memory database. Whilst this datasource is great
-for quickstarts, you will probably want to use a different datasource in
-your application. The link:http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/6/html/Administration_and_Configuration_Guide/index.html[Administration and Configuration Guide for JBoss Enterprise Application Platform 6] or the
-link:https://docs.jboss.org/author/display/WFLY/Getting+Started+Guide[Getting Started Guide for JBoss WildFly]
-tells you how to create a new datasource.
-========================================================================
-
-Let's take a look at the JSF views. First up is `src/main/webapp/greet.xhtml`:
-
-.src/main/webapp/greet.xhtml
-[source,html]
-------------------------------------------------------------------------
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-    xmlns:ui="http://java.sun.com/jsf/facelets"
-    xmlns:h="http://java.sun.com/jsf/html"
-    xmlns:f="http://java.sun.com/jsf/core">
-
-<ui:composition template="template.xhtml">                           (1)
-    <ui:define name="content">
-        <h:messages />                                               (2)
-        <h:form id="greetForm">
-            <h:panelGrid columns="3">
-                <h:outputLabel for="username">Enter username:</h:outputLabel>
-                <h:inputText id="username"
-                    value="#{greetController.username}" />
-                <h:message for="username" />
-            </h:panelGrid>
-            <h:commandButton id="greet" value="Greet!"
-                action="#{greetController.greet}" />
-        </h:form>
-        <h:outputText value="#{greetController.greeting}"
-            rendered="#{not empty greetController.greeting}" />      (3)
-        <br />
-        <h:link outcome="/create.xhtml" value="Add a new user" />    (4)
-    </ui:define>
-</ui:composition>
-</html>
-------------------------------------------------------------------------
-
-<1> As we have multiple views in this application, we've created a template that defines the common elements. We'll examine this next. Here we define the "content" section of the page, which will be inserted into the template.
-<2> We output any messages for the user at the top of the form, e.g. when a new user is created.
-<3> The greeting message is only rendered if there is a message.
-<4> We also a link to the page which allows a user to be added.
-
-Now let's take a look at the template. It defines common elements for the page, and allows pages which use it to insert content in various places.
-
-.src/main/webapp/template.xhtml
-[source,html]
-------------------------------------------------------------------------
-<!-- The template for our app, defines some regions -->
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-<title>greeter</title>
-<ui:insert name="head" />                                            (1)
-</head>
-
-<body>
-
-    <div id="container">
-        <div id="header"></div>
-
-        <div id="sidebar"></div>
-
-        <div id="content">
-            <ui:insert name="content" />                             (2)
-        </div>
-
-        <br style="clear: both" />
-    </div>
-
-</body>
-</html>
-------------------------------------------------------------------------
-
-<1> The head, defined in case a page wants to add some content to the head of the page.
-<2> The content, defined by a page using this template, will be inserted here
-
-Finally, let's take a look at the user management page. It provides a form to add users:
-
-.src/main/webapp/create.xhtml
-[source,html]
-------------------------------------------------------------------------
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-    xmlns:ui="http://java.sun.com/jsf/facelets"
-    xmlns:h="http://java.sun.com/jsf/html"
-    xmlns:f="http://java.sun.com/jsf/core">
-
-<ui:composition template="template.xhtml">
-    <ui:define name="content">
-        <h:messages />
-        <h:form>
-            <h:panelGrid columns="3">
-                <h:outputLabel for="username">Enter username:</h:outputLabel>
-                <h:inputText id="username" value="#{newUser.username}" />
-                <h:message for="username" />
-
-                <h:outputLabel for="firstName">Enter first name:</h:outputLabel>
-                <h:inputText id="firstName" value="#{newUser.firstName}" />
-                <h:message for="firstName" />
-
-                <h:outputLabel for="lastName">Enter last name:</h:outputLabel>
-                <h:inputText id="lastName" value="#{newUser.lastName}" />
-                <h:message for="lastName" />
-
-            </h:panelGrid>
-            <h:commandButton action="#{createController.create}"
-                value="Add User" />
-        </h:form>
-        <h:link outcome="/greet.xhtml">Greet a user!</h:link>
-    </ui:define>
-</ui:composition>
-</html>
-------------------------------------------------------------------------
-
-The quickstart has one entity, which is mapped via JPA to the relational database:
-
-.src/main/java/org/jboss/as/quickstarts/greeter/domain/User.java
-[source,java]
-------------------------------------------------------------------------
-@Entity                                                              (1)
-public class User {
-
-    @Id                                                              (2)
-    @GeneratedValue
-    private Long id;
-
-    @Column(unique = true)
-    private String username;
-
-    private String firstName;                                        (3)
-
-    private String lastName;
-
-    public Long getId() {                                            (4)
-        return id;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getFirstName() {
-        return firstName;
-    }
-
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-
-    public String getLastName() {
-        return lastName;
-    }
-
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-
-}
-------------------------------------------------------------------------
-<1> The `@Entity` annotation used on the class tells JPA that this class should be mapped as a table in the database.
-<2> Every entity requires an id, the `@Id` annotation placed on a field (or a JavaBean mutator/accessor) tells JPA that this property is the id. You can use a synthetic id, or a natural id (as we do here).
-<3> The entity also stores the real name of the user
-<4> As this is Java, every property needs an accessor/mutator!
-
-We use a couple of controller classes to back the JSF pages. First up is `GreetController` which is responsible for getting the user's real name from persistence layer, and then constructing the message.
-
-.src/main/java/org/jboss/as/quickstarts/greeter/web/GreetController.java
-[source,java]
-------------------------------------------------------------------------
-@Named                                                               (1)
-@RequestScoped                                                       (2)
-public class GreetController {
-
-    @Inject
-    private UserDao userDao;                                         (3)
-
-    private String username;
-
-    private String greeting;
-
-    public void greet() {
-        User user = userDao.getForUsername(username);
-        if (user != null) {
-            greeting = "Hello, " +
-                       user.getFirstName() +
-                       " " +
-                       user.getLastName() +
-                       "!";
-        } else {
-            greeting =
-                "No such user exists! Use 'emuster' or 'jdoe'";
-        }
-    }
-
-    public String getUsername() {                                    (4)
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getGreeting() {
-        return greeting;
-    }
-
-}
-------------------------------------------------------------------------
-<1> The bean is given a name, so we can access it from JSF
-<2> The bean is request scoped, a different greeting can be made in each request
-<3> We inject the `UserDao`, which handles database abstraction
-<4> We need to expose JavaBean style mutators and accessors for every property the JSF page needs to access to
-
-The second controller class is responsible for adding a new user:
-
-.src/main/java/org/jboss/as/quickstarts/greeter/web/CreateController.java
-[source,java]
-------------------------------------------------------------------------
-@Named                                                               (1)
-@RequestScoped                                                       (2)
-public class CreateController {
-
-    @Inject                                                          (3)
-    private FacesContext facesContext;
-
-    @Inject                                                          (4)
-    private UserDao userDao;
-
-    @Named                                                           (5)
-    @Produces
-    @RequestScoped
-    private User newUser = new User();
-
-    public void create() {
-        try {
-            userDao.createUser(newUser);
-            String message = "A new user with id " +
-                             newUser.getId() +
-                             " has been created successfully";
-            facesContext.addMessage(null, new FacesMessage(message));
-        } catch (Exception e) {
-            String message = "An error has occured while creating" +
-                             " the user (see log for details)";
-            facesContext.addMessage(null, new FacesMessage(message));
-        }
-    }
-}
-------------------------------------------------------------------------
-<1> The bean is given a name, so we can access it from JSF
-<2> The bean is request scoped, a different user can be added in each request
-<3> We inject the `FacesContext`, to allow us to send messages to the user when the user is created, or if an error occurs
-<4> We inject the `UserDao`, which handles database abstraction
-<5> We expose a prototype user using a named producer, which allows us to access it from a JSF page
-
-Now that we have the controllers in place, let's look at the most interesting part of the application, how we interact with the database. As we mentioned earlier, by default the application uses the JTA API to manually control transactions. To implement both approaches, we've defined a `UserDao` interface, with two implementations, one of which (the EJB variant) is as an alternative which can be enabled via a deployment descriptor. If you were wondering why we "hid" the persistence logic in the `UserDao`, rather than placing it directly in the controller classes, this is why!
-
-Let's first look at the interface, and the manual transaction control variant.
-
-.src/main/java/org/jboss/as/quickstarts/greeter/domain/UserDao.java
-[source,java]
-------------------------------------------------------------------------
-public interface UserDao {
-    User getForUsername(String username);
-
-    void createUser(User user);
-}
-------------------------------------------------------------------------
-
-The methods are fairly self explanatory, so let's move on quickly to the implementation, `ManagedBeanUserDao`:
-
-.src/main/java/org/jboss/as/quickstarts/greeter/domain/ManagedBeanUserDao.java
-[source,java]
-------------------------------------------------------------------------
-public class ManagedBeanUserDao implements UserDao {
-
-    @Inject
-    private EntityManager entityManager;                             (1)
-
-    @Inject
-    private UserTransaction utx;                                     (2)
-
-    public User getForUsername(String username) {                    (3)
-        try {
-            User user;
-            try {
-                utx.begin();
-                Query query = entityManager.createQuery("select u from User u where u.username = :username");
-                query.setParameter("username", username);
-                user = (User) query.getSingleResult();
-            } catch (NoResultException e) {
-                user = null;
-            }
-            utx.commit();
-            return user;
-        } catch (Exception e) {
-            try {
-                utx.rollback();
-            } catch (SystemException se) {
-                throw new RuntimeException(se);
-            }
-            throw new RuntimeException(e);
-        }
-    }
-
-    public void createUser(User user) {                              (4)
-        try {
-            try {
-                utx.begin();
-                entityManager.persist(user);
-            } finally {
-                utx.commit();
-            }
-        } catch (Exception e) {
-            try {
-                utx.rollback();
-            } catch (SystemException se) {
-                throw new RuntimeException(se);
-            }
-            throw new RuntimeException(e);
-        }
-    }
-}
-------------------------------------------------------------------------
-<1> We inject the entity manager. This was set up in `persistence.xml`.
-<2> We inject the `UserTransaction`, to allow us to programmatically control the transaction
-<3> The `getUserForUsername` method can check whether a user with a matching username and password exists, and return it if it does.
-<4> `createUser` persists a new user to the database.
-
-You've probably noticed two things as you've read through this. Firstly, that manually managing transactions is a real pain. Secondly, you may be wondering how the entity manager and the logger are injected. First, let's tidy up the transaction manager, and use EJB to provide us with declarative transaction support.
-
-The class `EJBUserDao` provides this, and is defined as an alternative. Alternatives are disabled by default, and when enabled replace the original implementation. In order to enable this variant of `UserDao`, edit `beans.xml` and uncomment the alternative. Your `beans.xml` should now look like:
-
-.src/main/webapp/WEB-INF/beans.xml
-[source,xml]
-------------------------------------------------------------------------
-<beans xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="
-        http://java.sun.com/xml/ns/javaee
-        http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
-
-        <!-- Uncomment this alternative to see EJB declarative transactions in use -->
-        <alternatives>
-            <class>org.jboss.as.quickstarts.greeter.domain.EJBUserDao</class>
-        </alternatives>
-</beans>
-------------------------------------------------------------------------
-
-Now, let's look at `EJBUserDao`:
-
-.src/main/java/org/jboss/as/quickstarts/greeter/domain/EJBUserDao.java
-[source,java]
-------------------------------------------------------------------------
-@Stateful
-@Alternative
-public class EJBUserDao implements UserDao {
-
-    @Inject
-    private EntityManager entityManager;
-
-    public User getForUsername(String username) {
-        try {
-            Query query = entityManager.createQuery("select u from User u where u.username = ?");
-            query.setParameter(1, username);
-            return (User) query.getSingleResult();
-        } catch (NoResultException e) {
-            return null;
-        }
-    }
-
-    public void createUser(User user) {
-        entityManager.persist(user);
-    }
-
-}
-------------------------------------------------------------------------
-
-Using declarative transaction management has allowed us to remove a third of the lines of code from the class, but more importantly emphasizes the functionality of the class. Much better!
-
-
-[NOTE]
-========================================================================
-Sharp eyed developers who are used to Jakarta EE will have noticed that we
-have added this EJB to a war. This is the key improvement offered in
-EJB 3.1.
-========================================================================
-
-Finally, let's take a look at the `Resources` class, which provides resources such as the entity manager. CDI recommends using "resource producers", as we do in this quickstart, to alias resources to CDI beans, allowing for a  consistent style throughout our application:
-
-.src/main/java/org/jboss/as/quickstarts/greeter/Resources.java
-[source,java]
-------------------------------------------------------------------------
-public class Resources {
-
-    // Expose an entity manager using the resource producer pattern
-    @SuppressWarnings("unused")
-    @PersistenceContext
-    @Produces
-    private EntityManager em;                                        (1)
-
-    @Produces
-    Logger getLogger(InjectionPoint ip) {                            (2)
-        String category = ip.getMember()
-                            .getDeclaringClass()
-                            .getName();
-        return Logger.getLogger(category);
-    }
-
-    @Produces
-    FacesContext getFacesContext() {                                 (3)
-        return FacesContext.getCurrentInstance();
-    }
-
-}
-------------------------------------------------------------------------
-<1> We use the "resource producer" pattern, from CDI, to "alias" the old fashioned `@PersistenceContext` injection of the entity manager to a CDI style injection. This allows us to use a consistent injection style (`@Inject`) throughout the application.
-<2> We expose a JDK logger for injection. In order to save a bit more boiler plate, we automatically set the logger category as the class name!
-<3> We expose the `FacesContext` via a producer method, which allows it to be injected. If we were adding tests, we could also then mock it out.
-
-
-That concludes our tour of the greeter application!
-
-
-CDI + JSF + EJB + JTA + Bean Validation + JAX-RS + Arquillian: Kitchensink quickstart
-=====================================================================================
-:Author: Pete Muir
-
-[[KitchensinkQuickstart-]]
-
-This quickstart shows off all the new features of Jakarta EE, and makes a great starting point for your project.
-
-[TIP]
-.Bean Validation
-========================================================================
-Bean Validation is a specification in Jakarta EE, inspired by
-Hibernate Validator. It allows application developers to specify
-constraints once (often in their domain model), and have them applied in
-all layers of the application, protecting data and giving useful
-feedback to users.
-========================================================================
-
-[TIP]
-.JAX-RS: The Java API for RESTful Web Services
-========================================================================
-JAX-RS is a specification in Jakarta EE. It allows application
-developers to easily expose Java services as RESTful web services.
-========================================================================
-
-Switch to the `quickstarts/kitchensink` directory and instruct Maven to build and deploy the application:
-
-    mvn package wildfly:deploy
-
-The quickstart uses a Maven plugin to deploy the application. The plugin requires JBoss WildFly to be running (you can find out how to start the server in <<GettingStarted-on_linux, Installing and starting the JBoss server on Linux, Unix or Mac OS X>> or <<GettingStarted-on_windows, Installing and starting the JBoss server on Windows>>).
-
-Or you can start the server using an IDE, like Eclipse.
-
-Now, check if the application has deployed properly by clicking http://localhost:8080/wildfly-kitchensink. If you see a splash page it's all working!
-
-
-[TIP]
-========================================================================
-Should you wish to undeploy the quickstart, or redeploy after making
-some changes, it's pretty easy:
-
-* `mvn wildfly:deploy` - deploy any changes to the application to the
-  application server
-* `mvn wildfly:undeploy` - undeploy the quickstart
-========================================================================
-
-It's time to pull the covers back and dive into the internals of the application.
-
-Deploying the Kitchensink quickstart using CodeReady Studio, or Eclipse with JBoss Tools
-----------------------------------------------------------------------------------------------
-
-You may choose to deploy the quickstart using CodeReady Studio, or Eclipse with JBoss Tools. You'll need to have JBoss WildFly started in the IDE (as described  in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and to have imported the quickstarts into Eclipse (as described in <<GettingStarted-importing_quickstarts_into_eclipse,Importing the quickstarts into Eclipse>>).
-
-With the quickstarts imported, you can deploy the quickstart by right clicking on the `wildfly-kitchensink` project, and choosing _Run As -> Run On Server_:
-
-image:gfx/Eclipse_KitchenSink_Deploy_1.jpg[]
-
-Make sure the server is selected, and hit Finish:
-
-image:gfx/Eclipse_Deploy_2.jpg[]
-
-You should see the server start up (unless you already started it in  <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and the application deploy in the Console log:
-
-image:gfx/Eclipse_KitchenSink_Deploy_3.jpg[]
-
-
-The kitchensink quickstart in depth
------------------------------------
-
-The kitchensink application shows off a number of Jakarta EE technologies such as CDI, JSF, EJB, JTA, JAX-RS and Arquillian. It does this by providing a member registration database, available via JSF and JAX-RS.
-
-As usual, let's start by looking at the necessary deployment descriptors. By now, we're very used to seeing `beans.xml` and `faces-config.xml` in `WEB-INF/` (which can be found in the `src/main/webapp` directory). Notice that, once again, we don't need a `web.xml`. There are two configuration files in `WEB-INF/classes/META-INF` (which can be found in the `src/main/resources` directory) — `persistence.xml`, which sets up JPA, and `import.sql` which Hibernate, the JPA provider in JBoss WildFly, will use to load the initial users into the application when the application starts. We discussed both of these files in detail in <<GreeterQuickstart-,the Greeter Quickstart>>, and these are largely the same.
-
-Next, let's take a look at the JSF view the user sees. As usual, we use a template to provide the sidebar and footer. This one lives in `src/main/webapp/WEB-INF/templates/default.xhtml`:
-
-.src/main/webapp/WEB-INF/templates/default.xhtml
-[source,html]
-------------------------------------------------------------------------
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-    xmlns:h="http://java.sun.com/jsf/html"
-    xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>                                                             (1)
-    <title>kitchensink</title>
-    <meta http-equiv="Content-Type"
-          content="text/html; charset=utf-8" />
-    <h:outputStylesheet name="css/screen.css" />
-</h:head>
-<h:body>
-    <div id="container">
-        <div class="dualbrand">
-            <img src="resources/gfx/dualbrand_logo.png" />
-        </div>
-        <div id="content">
-            <ui:insert name="content">                               (2)
-                 [Template content will be inserted here]
-            </ui:insert>
-        </div>
-        <div id="aside">                                             (3)
-            <p>Learn more about JBoss Enterprise Application
-                Platform 6.</p>
-            <ul>
-                <li>
-                    <a href="http://red.ht/jbeap-6-docs">
-                        Documentation
-                    </a>
-                </li>
-                <li>
-                    <a href="http://red.ht/jbeap-6">
-                        Product Information
-                    </a>
-               </li>
-            </ul>
-            <p>Learn more about JBoss WildFly.</p>
-            <ul>
-                <li>
-                    <a href="http://jboss.org/jdf/quickstarts/wildfly-quickstart/guide">
-                        Getting Started Developing Applications Guide
-                    </a>
-                </li>
-                <li>
-                    <a href="http://jboss.org/jbossas">
-                        Community Project Information
-                    </a>
-                </li>
-            </ul>
-        </div>
-        <div id="footer">
-            <p>
-                This project was generated from a Maven archetype from
-                JBoss.<br />
-            </p>
-        </div>
-    </div>
-</h:body>
-</html>
-------------------------------------------------------------------------
-<1> We have a common `<head>` element, where we define styles and more
-<2> The content is inserted here, and defined by views using this template
-<3> This application defines a common sidebar and footer, putting them in the template means we only have to define them once
-
-That leaves the main page, index.xhtml , in which we place the content unique to the main page:
-
-.src/main/webapp/index.xhtml
-[source,html]
-------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8"?>
-<ui:composition xmlns="http://www.w3.org/1999/xhtml"
-    xmlns:ui="http://java.sun.com/jsf/facelets"
-    xmlns:f="http://java.sun.com/jsf/core"
-    xmlns:h="http://java.sun.com/jsf/html"
-    template="/WEB-INF/templates/default.xhtml">
-    <ui:define name="content">
-        <h1>Welcome to JBoss!</h1>
-
-        <h:form id="reg">                                            (1)
-            <h2>Member Registration</h2>
-            <p>Enforces annotation-based constraints defined on the
-                model class.</p>
-            <h:panelGrid columns="3" columnClasses="titleCell">
-                <h:outputLabel for="name" value="Name:" />
-                <h:inputText id="name" value="#{newMember.name}" />  (2)
-                <h:message for="name" errorClass="invalid" />
-
-                <h:outputLabel for="email" value="Email:" />
-                <h:inputText id="email"
-                             value="#{newMember.email}" />           (2)
-                <h:message for="email" errorClass="invalid" />
-
-                <h:outputLabel for="phoneNumber" value="Phone #:" />
-                <h:inputText id="phoneNumber"
-                             value="#{newMember.phoneNumber}" />     (2)
-                <h:message for="phoneNumber" errorClass="invalid" />
-            </h:panelGrid>
-
-            <p>
-                <h:panelGrid columns="2">
-                    <h:commandButton id="register"
-                        action="#{memberController.register}"
-                        value="Register" styleClass="register" />
-                    <h:messages styleClass="messages"
-                        errorClass="invalid" infoClass="valid"
-                        warnClass="warning" globalOnly="true" />
-                </h:panelGrid>
-            </p>
-        </h:form>
-        <h2>Members</h2>
-        <h:panelGroup rendered="#{empty members}">
-            <em>No registered members.</em>
-        </h:panelGroup>
-        <h:dataTable var="_member" value="#{members}"
-            rendered="#{not empty members}"
-            styleClass="simpletablestyle">                           (3)
-            <h:column>
-                <f:facet name="header">Id</f:facet>
-                #{_member.id}
-            </h:column>
-            <h:column>
-                <f:facet name="header">Name</f:facet>
-                #{_member.name}
-            </h:column>
-            <h:column>
-                <f:facet name="header">Email</f:facet>
-                #{_member.email}
-            </h:column>
-            <h:column>
-                <f:facet name="header">Phone #</f:facet>
-                #{_member.phoneNumber}
-            </h:column>
-            <h:column>
-                <f:facet name="header">REST URL</f:facet>
-                <a href="#{request.contextPath}/rest/members/#{_member.id}">
-                    /rest/members/#{_member.id}
-                </a>
-            </h:column>
-            <f:facet name="footer">
-                REST URL for all members:
-                    <a href="#{request.contextPath}/rest/members">
-                        /rest/members
-                    </a>
-            </f:facet>
-        </h:dataTable>
-    </ui:define>
-</ui:composition>
-
-------------------------------------------------------------------------
-<1> The JSF form allows us to register new users. There should be one already created when the application started.
-<2> The application uses Bean Validation to validate data entry. The error messages from Bean Validation are automatically attached to the relevant field by JSF, and adding a messages JSF component will display them.
-<3> This application exposes REST endpoints for each registered member. The application helpfully displays the URL to the REST endpoint on this page.
-
-Next, let's take a look at the Member entity, before we look at how the application is wired together:
-
-.src/main/java/org/jboss/as/quickstarts/kitchensink/model/Member.java
-[source,java]
-------------------------------------------------------------------------
-SuppressWarnings("serial")
-@Entity                                                              (1)
-@XmlRootElement                                                      (2)
-@Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))
-public class Member implements Serializable {
-
-    @Id
-    @GeneratedValue
-    private Long id;
-
-    @NotNull
-    @Size(min = 1, max = 25)
-    @Pattern(regexp = "[A-Za-z ]*",
-             message = "must contain only letters and spaces")       (3)
-    private String name;
-
-    @NotNull
-    @NotEmpty
-    @Email                                                           (4)
-    private String email;
-
-    @NotNull
-    @Size(min = 10, max = 12)
-    @Digits(fraction = 0, integer = 12)                              (5)
-    @Column(name = "phone_number")
-    private String phoneNumber;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getPhoneNumber() {
-        return phoneNumber;
-    }
-
-    public void setPhoneNumber(String phoneNumber) {
-        this.phoneNumber = phoneNumber;
-    }
-}
-------------------------------------------------------------------------
-<1> As usual with JPA, we define that the class is an entity by adding @Entity
-<2> Members are exposed as a RESTful service using JAX-RS. We can use JAXB to map the object to XML and to do this we need to add @XmlRootElement
-<3> Bean Validation allows constraints to be defined once (on the entity) and applied everywhere. Here we constrain the person's name to a certain size and regular expression
-<4> Hibernate Validator also offers some extra validations such as @Email
-<5> @Digits , @NotNull and @Size are further examples of constraints
-
-Let's take a look at `MemberRepository`, which is responsible for interactions with the persistence layer:
-
-.src/main/java/org/jboss/as/quickstarts/kitchensink/data/MemberRepository.java
-[source,java]
-------------------------------------------------------------------------
-@ApplicationScoped                                                   (1)
-public class MemberRepository {
-
-    @Inject                                                          (2)
-    private EntityManager em;
-
-    public Member findById(Long id) {
-        return em.find(Member.class, id);
-    }
-
-    public Member findByEmail(String email) {
-        CriteriaBuilder cb = em.getCriteriaBuilder();                (3)
-        CriteriaQuery<Member> c = cb.createQuery(Member.class);
-        Root<Member> member = c.from(Member.class);
-        c.select(member).where(cb.equal(member.get("email"), email));
-        return em.createQuery(c).getSingleResult();
-    }
-
-    public List<Member> findAllOrderedByName() {
-        CriteriaBuilder cb = em.getCriteriaBuilder();
-        CriteriaQuery<Member> criteria = cb.createQuery(Member.class);
-        Root<Member> member = criteria.from(Member.class);
-        criteria.select(member).orderBy(cb.asc(member.get("name")));
-        return em.createQuery(criteria).getResultList();             (4)
-    }
-}
-------------------------------------------------------------------------
-<1> The bean is application scoped, as it is a singleton
-<2> The entity manager is injected, to allow interaction with JPA
-<3> The JPA criteria api is used to load a member by their unique identifier, their email address
-<4> The criteria api can also be used to load lists of entities
-
-Let's take a look at `MemberListProducer`, which is responsible for managing the list of registered members.
-
-.src/main/java/org/jboss/as/quickstarts/kitchensink/data/MemberListProducer.java
-[source,java]
-------------------------------------------------------------------------
-@RequestScoped                                                       (1)
-public class MemberListProducer {
-
-    @Inject                                                          (2)
-    private MemberRepository memberRepository;
-
-    private List<Member> members;
-
-    // @Named provides access the return value via the EL variable
-    // name "members" in the UI (e.g. Facelets or JSP view)
-    @Produces                                                        (3)
-    @Named
-    public List<Member> getMembers() {
-        return members;
-    }
-
-    public void onMemberListChanged(                                 (4)
-        @Observes(notifyObserver = Reception.IF_EXISTS)
-            final Member member) {
-        retrieveAllMembersOrderedByName();
-    }
-
-    @PostConstruct
-    public void retrieveAllMembersOrderedByName() {
-        members = memberRepository.findAllOrderedByName();
-    }
-}
-------------------------------------------------------------------------
-<1> This bean is request scoped, meaning that any fields (such as members ) will be stored for the entire request
-<2> The `MemberRepository` is responsible or interactions with the persistence layer
-<3> The list of members is exposed as a producer method, it's also available via EL
-<4> The observer method is notified whenever a member is created, removed, or updated. This allows us to refresh the list of members whenever they are needed. This is a good approach as it allows us to cache the list of members, but keep it up to date at the same time
-
-Let's now look at MemberRegistration, the service that allows us to create new members:
-
-.src/main/java/org/jboss/as/quickstarts/kitchensink/service/MemberRegistration.java
-[source,java]
-------------------------------------------------------------------------
-@Stateless                                                           (1)
-public class MemberRegistration {
-
-    @Inject                                                          (2)
-    private Logger log;
-
-    @Inject
-    private EntityManager em;
-
-    @Inject
-    private Event<Member> memberEventSrc;
-
-    public void register(Member member) throws Exception {
-        log.info("Registering " + member.getName());
-        em.persist(member);
-        memberEventSrc.fire(member);                                 (3)
-   }
-}
-------------------------------------------------------------------------
-<1> This bean requires transactions as it needs to write to the database. Making this an EJB gives us access to declarative transactions - much simpler than manual transaction control!
-<2> Here we inject a JDK logger, defined in the `Resources` class
-<3> An event is sent every time a member is updated. This allows other pieces of code (in this quickstart the member list is refreshed) to react to changes in the member list without any coupling to this class.
-
-Now, let's take a look at the `Resources` class, which provides resources such as the entity manager. CDI recommends using "resource producers", as we do in this quickstart, to alias resources to CDI beans, allowing for a  consistent style throughout our application:
-
-.src/main/java/org/jboss/as/quickstarts/kitchensink/util/Resources.java
-[source,java]
-------------------------------------------------------------------------
-public class Resources {
-    // use @SuppressWarnings to tell IDE to ignore warnings about
-    // field not being referenced directly
-    @SuppressWarnings("unused")                                      (1)
-    @Produces
-    @PersistenceContext
-    private EntityManager em;
-
-    @Produces                                                        (2)
-    public Logger produceLog(InjectionPoint injectionPoint) {
-        return Logger.getLogger(injectionPoint.getMember()
-                                              .getDeclaringClass()
-                                              .getName());
-    }
-
-    @Produces                                                        (3)
-    @RequestScoped
-    public FacesContext produceFacesContext() {
-        return FacesContext.getCurrentInstance();
-    }
-
-}
-------------------------------------------------------------------------
-<1> We use the "resource producer" pattern, from CDI, to "alias" the old fashioned `@PersistenceContext` injection of the entity manager to a CDI style injection. This allows us to use a consistent injection style (`@Inject`) throughout the application.
-<2> We expose a JDK logger for injection. In order to save a bit more boiler plate, we automatically set the logger category as the class name!
-<3> We expose the `FacesContext` via a producer method, which allows it to be injected. If we were adding tests, we could also then mock it out.
-
-If you want to define your own datasource, take a look at the link:http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/6/html/Administration_and_Configuration_Guide/index.html[Administration and Configuration Guide for JBoss Enterprise Application Platform 6] or the link:https://docs.jboss.org/author/display/AS71/Getting+Started+Guide[Getting Started Guide].
-
-Of course, we need to allow JSF to interact with the services. The `MemberController` class is responsible for this:
-
-.src/main/java/org/jboss/as/quickstarts/kitchensink/controller/MemberController.java
-[source,java]
-------------------------------------------------------------------------
-@Model                                                               (1)
-public class MemberController {
-
-    @Inject                                                          (2)
-    private FacesContext facesContext;
-
-    @Inject                                                          (3)
-    private MemberRegistration memberRegistration;
-
-    @Produces                                                        (4)
-    @Named
-    private Member newMember;
-
-    @PostConstruct                                                   (5)
-    public void initNewMember() {
-        newMember = new Member();
-    }
-
-    public void register() throws Exception {
-        try {
-            memberRegistration.register(newMember);                  (6)
-            FacesMessage m =
-                new FacesMessage(FacesMessage.SEVERITY_INFO,
-                                 "Registered!",
-                                 "Registration successful");
-            facesContext.addMessage(null, m);                        (7)
-            initNewMember();                                         (8)
-        } catch (Exception e) {
-            String errorMessage = getRootErrorMessage(e);
-            FacesMessage m =
-                new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                 errorMessage,
-                                 "Registration unsuccessful");
-            facesContext.addMessage(null, m);
-        }
-    }
-
-    private String getRootErrorMessage(Exception e) {
-        // Default to general error message that registration failed.
-        String errorMessage = "Registration failed. See server log for more information";
-        if (e == null) {
-            // This shouldn't happen, but return the default messages
-            return errorMessage;
-        }
-
-        // Start with the exception and recurse to find the root cause
-        Throwable t = e;
-        while (t != null) {
-            // Get the message from the Throwable class instance
-            errorMessage = t.getLocalizedMessage();
-            t = t.getCause();
-        }
-        // This is the root cause message
-        return errorMessage;
-    }
-
-}
-------------------------------------------------------------------------
-<1> The `MemberController` class uses the `@Model` stereotype, which adds `@Named` and `@RequestScoped` to the class
-<2> The `FacesContext` is injected, so that messages can be sent to the user
-<3> The `MemberRegistration` bean is injected, to allow the controller to interact with the database
-<4> The `Member` class is exposed using a named producer field, which allows access from JSF. Note that that the named producer field has dependent scope, so every time it is injected, the field will be read
-<5> The `@PostConstruct` annotation causes a new member object to be placed in the `newMember` field when the bean is instantiated
-<6> When the register method is called, the `newMember` object is passed to the persistence service
-<7> We also send a message to the user, to give them feedback on their actions
-<8> Finally, we replace the `newMember` with a new object, thus blanking out the data the user has added so far. This works as the producer field is dependent scoped
-
-Before we wrap up our tour of the kitchensink application, let's take a look at how the JAX-RS endpoints are created. Firstly, `JaxRSActivator`, which extends `Application` and is annotated with `@ApplicationPath`, is the Jakarta EE "no XML" approach to activating JAX-RS.
-
-.src/main/java/org/jboss/as/quickstarts/kitchensink/rest/JaxRsActivator.java
-[source,java]
-------------------------------------------------------------------------
-@ApplicationPath("/rest")
-public class JaxRsActivator extends Application {
-   /* class body intentionally left blank */
-}
-------------------------------------------------------------------------
-
-The real work goes in `MemberResourceRESTService`, which produces the endpoint:
-
-.src/main/java/org/jboss/as/quickstarts/kitchensink/rest/MemberResourceRESTService.java
-[source,java]
-------------------------------------------------------------------------
-@Path("/members")                                                    (1)
-@RequestScoped                                                       (2)
-public class MemberResourceRESTService {
-
-    @Inject                                                          (3)
-    private Logger log;
-
-    @Inject                                                          (4)
-    private Validator validator;
-
-    @Inject                                                          (5)
-    private MemberRepository repository;
-
-    @Inject                                                          (6)
-    private MemberRegistration registration;
-
-    @GET                                                             (7)
-    @Produces(MediaType.APPLICATION_JSON)
-    public List<Member> listAllMembers() {
-        return repository.findAllOrderedByName();
-    }
-
-    @GET                                                             (8)
-    @Path("/{id:[0-9][0-9]*}")
-    @Produces(MediaType.APPLICATION_JSON)
-    public Member lookupMemberById(@PathParam("id") long id) {
-        Member member = repository.findById(id);
-        if (member == null) {
-            throw new
-                WebApplicationException(Response.Status.NOT_FOUND);
-        }
-        return member;
-    }
-
-    /**
-     * Creates a new member from the values provided.  Performs
-     * validation, and will return a JAX-RS response with either
-     * 200 ok, or with a map of fields, and related errors.
-     */
-    @POST
-    @Consumes(MediaType.APPLICATION_JSON)
-    @Produces(MediaType.APPLICATION_JSON)
-    public Response createMember(Member member) {                    (9)
-        Response.ResponseBuilder builder = null;
-
-        try {
-            // Validates member using bean validation
-            validateMember(member);                                  (10)
-
-            registration.register(member);                           (11)
-
-            //Create an "ok" response
-            builder = Response.ok();
-        } catch (ConstraintViolationException ce) {                  (12)
-            //Handle bean validation issues
-            builder = createViolationResponse(
-                          ce.getConstraintViolations());
-        } catch (ValidationException e) {
-            //Handle the unique constrain violation
-            Map<String, String> responseObj =
-                new HashMap<String, String>();
-            responseObj.put("email", "Email taken");
-            builder = Response.status(Response.Status.CONFLICT)
-                              .entity(responseObj);
-        } catch (Exception e) {
-            // Handle generic exceptions
-            Map<String, String> responseObj
-                = new HashMap<String, String>();
-            responseObj.put("error", e.getMessage());
-            builder = Response.status(Response.Status.BAD_REQUEST)
-                              .entity(responseObj);
-        }
-
-        return builder.build();
-    }
-
-
-    /**
-     * <p>
-     * Validates the given Member variable and throws validation
-     * exceptions based on the type of error. If the error is
-     * standard bean validation errors then it will throw a
-     * ConstraintValidationException with the set of the
-     * constraints violated.
-     * </p>
-     * <p>
-     * If the error is caused because an existing member with the
-     * same email is registered it throws a regular validation
-     * exception so that it can be interpreted separately.
-     * </p>
-     *
-     * @param member Member to be validated
-     * @throws ConstraintViolationException
-     *     If Bean Validation errors exist
-     * @throws ValidationException
-     *     If member with the same email already exists
-     */
-    private void validateMember(Member member)
-            throws ConstraintViolationException,
-                   ValidationException {
-        //Create a bean validator and check for issues.
-        Set<ConstraintViolation<Member>> violations =
-            validator.validate(member);
-
-        if (!violations.isEmpty()) {
-            throw new ConstraintViolationException(
-                new HashSet<ConstraintViolation<?>>(violations));
-        }
-
-        //Check the uniqueness of the email address
-        if (emailAlreadyExists(member.getEmail())) {
-            throw new ValidationException("Unique Email Violation");
-        }
-    }
-
-    /**
-     * Creates a JAX-RS "Bad Request" response including a map of
-     * all violation fields, and their message. This can then be
-     * used by clients to show violations.
-     *
-     * @param violations A set of violations that needs to be
-     *                   reported
-     * @return JAX-RS response containing all violations
-     */
-    private Response.ResponseBuilder createViolationResponse
-            (Set<ConstraintViolation<?>> violations) {
-        log.fine("Validation completed. violations found: "
-            + violations.size());
-
-        Map<String, String> responseObj =
-            new HashMap<String, String>();
-
-        for (ConstraintViolation<?> violation : violations) {
-            responseObj.put(violation.getPropertyPath().toString(),
-                            violation.getMessage());
-        }
-
-        return Response.status(Response.Status.BAD_REQUEST)
-                       .entity(responseObj);
-    }
-
-    /**
-     * Checks if a member with the same email address is already
-     * registered.  This is the only way to easily capture the
-     * "@UniqueConstraint(columnNames = "email")" constraint from
-     * the Member class.
-     *
-     * @param email The email to check
-     * @return True if the email already exists, and false
-               otherwise
-     */
-    public boolean emailAlreadyExists(String email) {
-        Member member = null;
-        try {
-            member = repository.findByEmail(email);
-        } catch (NoResultException e) {
-            // ignore
-        }
-        return member != null;
-    }
-}
-------------------------------------------------------------------------
-<1> The `@Path` annotation tells JAX-RS that this class provides a REST endpoint mapped to `rest/members` (concatenating the path from the activator with the path for this endpoint).
-<2> The bean is request scoped, as JAX-RS interactions typically don't hold state between requests
-<3> JAX-RS endpoints are CDI enabled, and can use CDI-style injection.
-<4> CDI allows us to inject a Bean Validation `Validator` instance, which is used to validate the POSTed member before it is persisted
-<5> `MemberRegistration` is injected to allow us to alter the member database
-<6> `MemberRepository` is injected to allow us to query the member database
-<7> The `listAllMembers()` method is called when the raw endpoint is accessed and offers up a list of endpoints. Notice that the object is automatically marshalled to JSON by RESTEasy (the JAX-RS implementation included in JBoss WildFly).
-<8> The `lookupMemberById()` method is called when the endpoint is accessed with a member id parameter appended (for example `rest/members/1)`. Again, the object is automatically marshalled to JSON by RESTEasy.
-<9> `createMember()` is called when a POST is performed on the URL. Once again, the object is automatically unmarshalled from JSON.
-<10> In order to ensure that the member is valid, we call the `validateMember` method, which validates the object, and adds any constraint violations to the response. These can then be handled on the client side, and displayed to the user
-<11> The object is then passed to the `MemberRegistration` service to be persisted
-<12> We then handle any remaining issues with validating the object, which are raised when the object is persisted
-
-
-Arquillian
-~~~~~~~~~~
-
-If you've been following along with the Test Driven Development craze of the past few years, you're probably getting a bit nervous by now, wondering how on earth you are going to test your application. Lucky for you, the Arquillian project is here to help!
-
-Arquillian provides all the boiler plate for running your test inside JBoss WildFly, allowing you to concentrate on testing your application. In order to do that, it utilizes Shrinkwrap, a fluent API for defining packaging, to create an archive to deploy. We'll go through the testcase, and how you configure Arquillian in just a moment, but first let's run the test.
-
-Before we start, we need to let Arquillian know the path to our server. Open up `src/test/resources/arquillian.xml`, uncomment the `<configuration>` elements, and set the `jbossHome` property to the path to the server:
-
-image:gfx/eclipse_arquillian_0.png[]
-
-Now, make sure the server is not running (so that the instance started for running the test does not interfere), and then run the tests from the command line by typing:
-
-    mvn clean test -Parq-managed
-
-You should see the server start up, a `test.war` deployed, test executed, and then the results displayed to you on the console:
-
-------------------------------------------------------------------------
-$ > mvn clean test -Parq-managed
-
-
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building WildFly Quickstarts: Kitchensink 7.0.0-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO]
-[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ wildfly-kitchensink ---
-[INFO] Deleting /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target
-[INFO]
-[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ wildfly-kitchensink ---
-[INFO] Using 'UTF-8' encoding to copy filtered resources.
-[INFO] Copying 2 resources
-[INFO]
-[INFO] --- maven-compiler-plugin:2.3.1:compile (default-compile) @ wildfly-kitchensink ---
-[INFO] Compiling 6 source files to /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/classes
-[INFO]
-[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ wildfly-kitchensink ---
-[INFO] Using 'UTF-8' encoding to copy filtered resources.
-[INFO] Copying 1 resource
-[INFO]
-[INFO] --- maven-compiler-plugin:2.3.1:testCompile (default-testCompile) @ wildfly-kitchensink ---
-[INFO] Compiling 1 source file to /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/test-classes
-[INFO]
-[INFO] --- maven-surefire-plugin:2.7.2:test (default-test) @ wildfly-kitchensink ---
-[INFO] Surefire report directory: /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/surefire-reports
-
--------------------------------------------------------
- T E S T S
--------------------------------------------------------
-Running org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest
-Jun 25, 2011 7:17:49 PM org.jboss.arquillian.container.impl.client.container.ContainerRegistryCreator getActivatedConfiguration
-INFO: Could not read active container configuration: null
-log4j:WARN No appenders could be found for logger (org.jboss.remoting).
-log4j:WARN Please initialize the log4j system properly.
-Jun 25, 2011 7:17:54 PM org.jboss.as.arquillian.container.managed.ManagedDeployableContainer startInternal
-INFO: Starting container with: [java, -Djboss.home.dir=/Users/pmuir/development/jboss, -Dorg.jboss.boot.log.file=/Users/pmuir/development/jboss/standalone/log/boot.log, -Dlogging.configuration=file:/Users/pmuir/development/jboss/standalone/configuration/logging.properties, -jar, /Users/pmuir/development/jboss/jboss-modules.jar, -mp, /Users/pmuir/development/jboss/modules, -logmodule, org.jboss.logmanager, -jaxpmodule, javax.xml.jaxp-provider, org.jboss.as.standalone, -server-config, standalone.xml]
-19:17:55,107 INFO  [org.jboss.modules] JBoss Modules version 1.0.0.CR4
-19:17:55,329 INFO  [org.jboss.msc] JBoss MSC version 1.0.0.CR2
-19:17:55,386 INFO  [org.jboss.as] JBoss WildFly.0.0.Beta4-SNAPSHOT "(TBD)" starting
-19:17:56,159 INFO  [org.jboss.as] creating http management service using network interface (management) port (9990) securePort (-1)
-19:17:56,181 INFO  [org.jboss.as.logging] Removing bootstrap log handlers
-19:17:56,189 INFO  [org.jboss.as.naming] (Controller Boot Thread) Activating Naming Subsystem
-19:17:56,203 INFO  [org.jboss.as.naming] (MSC service thread 1-4) Starting Naming Service
-19:17:56,269 INFO  [org.jboss.as.security] (Controller Boot Thread) Activating Security Subsystem
-19:17:56,305 INFO  [org.jboss.remoting] (MSC service thread 1-1) JBoss Remoting version 3.2.0.Beta2
-19:17:56,317 INFO  [org.xnio] (MSC service thread 1-1) XNIO Version 3.0.0.Beta3
-19:17:56,331 INFO  [org.xnio.nio] (MSC service thread 1-1) XNIO NIO Implementation Version 3.0.0.Beta3
-19:17:56,522 INFO  [org.jboss.as.connector.subsystems.datasources] (Controller Boot Thread) Deploying JDBC-compliant driver class org.h2.Driver (version 1.2)
-19:17:56,572 INFO  [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-7) The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
-19:17:56,627 INFO  [org.jboss.as.remoting] (MSC service thread 1-3) Listening on /127.0.0.1:9999
-19:17:56,641 INFO  [org.jboss.as.jmx.JMXConnectorService] (MSC service thread 1-2) Starting remote JMX connector
-19:17:56,705 INFO  [org.jboss.as.ee] (Controller Boot Thread) Activating EE subsystem
-19:17:56,761 INFO  [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-7) Starting Coyote HTTP/1.1 on http--127.0.0.1-8080
-19:17:56,793 INFO  [org.jboss.as.connector] (MSC service thread 1-3) Starting JCA Subsystem (JBoss IronJacamar 1.0.0.CR2)
-19:17:56,837 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) Bound data source [java:jboss/datasources/ExampleDS]
-19:17:57,335 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "arquillian-service"
-19:17:57,348 INFO  [org.jboss.as.deployment] (MSC service thread 1-7) Started FileSystemDeploymentService for directory /Users/pmuir/development/jboss/standalone/deployments
-19:17:57,693 INFO  [org.jboss.as] (Controller Boot Thread) JBoss WildFly.0.0.Beta4-SNAPSHOT "(TBD)" started in 2806ms - Started 111 of 138 services (27 services are passive or on-demand)
-19:18:00,596 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-6) Stopped deployment arquillian-service in 8ms
-19:18:01,394 INFO  [org.jboss.as.server.deployment] (pool-2-thread-7) Content added at location /Users/pmuir/development/jboss/standalone/data/content/0a/9e20b7bc978fd2778b89c7c06e4d3e1f308dfe/content
-19:18:01,403 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-7) Starting deployment of "arquillian-service"
-19:18:01,650 INFO  [org.jboss.as.server.deployment] (pool-2-thread-6) Content added at location /Users/pmuir/development/jboss/standalone/data/content/94/8324ab8f5a693c67fa57b59323304d3947bbf6/content
-19:18:01,659 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-5) Starting deployment of "test.war"
-19:18:01,741 INFO  [org.jboss.jpa] (MSC service thread 1-7) read persistence.xml for primary
-19:18:01,764 INFO  [org.jboss.weld] (MSC service thread 1-3) Processing CDI deployment: test.war
-19:18:01,774 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-3) JNDI bindings for session bean named MemberRegistration in deployment unit deployment "test.war" are as follows:
-
-        java:global/test/MemberRegistration!org.jboss.as.quickstarts.kitchensink.controller.MemberRegistration
-        java:app/test/MemberRegistration!org.jboss.as.quickstarts.kitchensink.controller.MemberRegistration
-        java:module/MemberRegistration!org.jboss.as.quickstarts.kitchensink.controller.MemberRegistration
-        java:global/test/MemberRegistration
-        java:app/test/MemberRegistration
-        java:module/MemberRegistration
-
-19:18:01,908 INFO  [org.jboss.weld] (MSC service thread 1-5) Starting Services for CDI deployment: test.war
-19:18:02,131 INFO  [org.jboss.weld.Version] (MSC service thread 1-5) WELD-000900 1.1.1 (Final)
-19:18:02,169 INFO  [org.jboss.weld] (MSC service thread 1-2) Starting weld service
-19:18:02,174 INFO  [org.jboss.as.arquillian] (MSC service thread 1-3) Arquillian deployment detected: ArquillianConfig[service=jboss.arquillian.config."test.war",unit=test.war,tests=[org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest]]
-19:18:02,179 INFO  [org.jboss.jpa] (MSC service thread 1-6) starting Persistence Unit Service 'test.war#primary'
-19:18:02,322 INFO  [org.hibernate.annotations.common.Version] (MSC service thread 1-6) Hibernate Commons Annotations 3.2.0.Final
-19:18:02,328 INFO  [org.hibernate.cfg.Environment] (MSC service thread 1-6) HHH00412:Hibernate [WORKING]
-19:18:02,330 INFO  [org.hibernate.cfg.Environment] (MSC service thread 1-6) HHH00206:hibernate.properties not found
-19:18:02,332 INFO  [org.hibernate.cfg.Environment] (MSC service thread 1-6) HHH00021:Bytecode provider name : javassist
-19:18:02,354 INFO  [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-6) HHH00204:Processing PersistenceUnitInfo [
-	name: primary
-	...]
-19:18:02,400 WARN  [org.hibernate.cfg.AnnotationBinder] (MSC service thread 1-6) HHH00194:Package not found or wo package-info.java: org.jboss.as.quickstarts.kitchensink.test
-19:18:02,400 WARN  [org.hibernate.cfg.AnnotationBinder] (MSC service thread 1-6) HHH00194:Package not found or wo package-info.java: org.jboss.as.quickstarts.kitchensink.controller
-19:18:02,401 WARN  [org.hibernate.cfg.AnnotationBinder] (MSC service thread 1-6) HHH00194:Package not found or wo package-info.java: org.jboss.as.quickstarts.kitchensink.util
-19:18:02,401 WARN  [org.hibernate.cfg.AnnotationBinder] (MSC service thread 1-6) HHH00194:Package not found or wo package-info.java: org.jboss.as.quickstarts.kitchensink.model
-19:18:02,592 INFO  [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (MSC service thread 1-6) HHH00130:Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
-19:18:02,852 INFO  [org.hibernate.dialect.Dialect] (MSC service thread 1-6) HHH00400:Using dialect: org.hibernate.dialect.H2Dialect
-19:18:02,858 WARN  [org.hibernate.dialect.H2Dialect] (MSC service thread 1-6) HHH00431:Unable to determine H2 database version, certain features may not work
-19:18:02,862 INFO  [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (MSC service thread 1-6) HHH00423:Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
-19:18:02,870 INFO  [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] (MSC service thread 1-6) HHH00268:Transaction strategy: org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
-19:18:02,874 INFO  [org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory] (MSC service thread 1-6) HHH00397:Using ASTQueryTranslatorFactory
-19:18:02,911 INFO  [org.hibernate.validator.util.Version] (MSC service thread 1-6) Hibernate Validator 4.1.0.Final
-19:18:02,917 INFO  [org.hibernate.validator.engine.resolver.DefaultTraversableResolver] (MSC service thread 1-6) Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
-19:18:03,079 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-6) HHH00227:Running hbm2ddl schema export
-19:18:03,093 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-6) HHH00230:Schema export complete
-19:18:03,217 INFO  [org.jboss.web] (MSC service thread 1-5) registering web context: /test
-19:18:03,407 WARN  [org.jboss.weld.Bean] (RMI TCP Connection(3)-127.0.0.1) WELD-000018 Executing producer field or method [method] @Produces public org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest.produceLog(InjectionPoint) on incomplete declaring bean Managed Bean [class org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest] with qualifiers [@Any @Default] due to circular injection
-19:18:03,427 WARN  [org.jboss.weld.Bean] (RMI TCP Connection(3)-127.0.0.1) WELD-000018 Executing producer field or method [method] @Produces public org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest.produceLog(InjectionPoint) on incomplete declaring bean Managed Bean [class org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest] with qualifiers [@Any @Default] due to circular injection
-19:18:03,450 WARN  [org.jboss.as.ejb3.component.EJBComponent] (RMI TCP Connection(3)-127.0.0.1) EJBTHREE-2120: deprecated getTransactionAttributeType method called (dev problem)
-19:18:03,459 INFO  [org.jboss.as.quickstarts.kitchensink.controller.MemberRegistration] (RMI TCP Connection(3)-127.0.0.1) Registering Jane Doe
-19:18:03,616 INFO  [org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest] (RMI TCP Connection(3)-127.0.0.1) Jane Doe was persisted with id 1
-19:18:03,686 INFO  [org.jboss.jpa] (MSC service thread 1-1) stopping Persistence Unit Service 'test.war#primary'
-19:18:03,687 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-1) HHH00227:Running hbm2ddl schema export
-19:18:03,690 INFO  [org.jboss.weld] (MSC service thread 1-3) Stopping weld service
-19:18:03,692 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-1) HHH00230:Schema export complete
-19:18:03,704 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-8) Stopped deployment test.war in 52ms
-Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 14.859 sec
-
-Results :
-
-Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
-
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 22.305s
-[INFO] Finished at: Sat Jun 25 19:18:04 BST 2011
-[INFO] Final Memory: 17M/125M
-[INFO] ------------------------------------------------------------------------
-
-------------------------------------------------------------------------
-
-As you can see, that didn't take too long (approximately 15s), and is great for running in your QA environment, but if you running locally, you might prefer to connect to a running server. To do that, start up JBoss WildFly (as described in <<GettingStarted-, Getting Started with JBoss Enterprise Application Platform of WildFly>>. Now, run your test, but use the `arq-wildfly-remote` profile:
-
-    mvn clean test -Parq-remote
-
-------------------------------------------------------------------------
-$ > mvn clean test -Parq-remote
-
-
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building WildFly Quickstarts: Kitchensink 7.0.0-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO]
-[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ wildfly-kitchensink ---
-[INFO] Deleting /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target
-[INFO]
-[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ wildfly-kitchensink ---
-[INFO] Using 'UTF-8' encoding to copy filtered resources.
-[INFO] Copying 2 resources
-[INFO]
-[INFO] --- maven-compiler-plugin:2.3.1:compile (default-compile) @ wildfly-kitchensink ---
-[INFO] Compiling 6 source files to /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/classes
-[INFO]
-[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ wildfly-kitchensink ---
-[INFO] Using 'UTF-8' encoding to copy filtered resources.
-[INFO] Copying 1 resource
-[INFO]
-[INFO] --- maven-compiler-plugin:2.3.1:testCompile (default-testCompile) @ wildfly-kitchensink ---
-[INFO] Compiling 1 source file to /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/test-classes
-[INFO]
-[INFO] --- maven-surefire-plugin:2.7.2:test (default-test) @ wildfly-kitchensink ---
-[INFO] Surefire report directory: /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/surefire-reports
-
-------------------------------------------------------
- T E S T S
--------------------------------------------------------
-Running org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest
-Jun 25, 2011 7:22:28 PM org.jboss.arquillian.container.impl.client.container.ContainerRegistryCreator getActivatedConfiguration
-INFO: Could not read active container configuration: null
-log4j:WARN No appenders could be found for logger (org.jboss.as.arquillian.container.MBeanServerConnectionProvider).
-log4j:WARN Please initialize the log4j system properly.
-Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.13 sec
-
-Results :
-
-Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
-
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 10.474s
-[INFO] Finished at: Sat Jun 25 19:22:33 BST 2011
-[INFO] Final Memory: 17M/125M
-[INFO] ------------------------------------------------------------------------
-$ >
-------------------------------------------------------------------------
-
-
-[IMPORTANT]
-========================================================================
-Arquillian defines two modes, _managed_ and _remote_ . The _managed_
-mode will take care of starting and stopping the server for you, whilst
-the _remote_ mode connects to an already running server.
-========================================================================
-
-This time you can see the test didn't start the server (if you check the instance you started, you will see the application was deployed there), and the test ran a lot faster (approximately 4s).
-
-We can also run the test from Eclipse, in both managed and remote modes. First, we'll run in in managed mode. In order to set up the correct dependencies on your classpath, right click on the project, and select Properties :
-
-image:gfx/eclipse_arquillian_1.png[]
-
-Now, locate the Maven panel:
-
-image:gfx/eclipse_arquillian_2.png[]
-
-And activate the `arq-managed` profile:
-
-image:gfx/eclipse_arquillian_3.png[]
-
-Finally, hit _Ok_, and then confirm you want to update the project configuration:
-
-image:gfx/eclipse_arquillian_4.png[]
-
-Once the project has built, locate the `MemberRegistrationTest` in `src/test/java`, right click on the test, and choose _Run As -> JUnit Test...`_:
-
-image:gfx/eclipse_arquillian_12.png[]
-
-You should see the server start in the Eclipse Console, the test be deployed, and finally the JUnit View pop up with the result (a pass of course!).
-
-We can also run the test in an already running instance of Eclipse. Simply change the active profile to `arq-remote`:
-
-image:gfx/eclipse_arquillian_11.png[]
-
-Now, make sure the server is running, right click on the test case and choose _Run As -> JUnit Test..._:
-
-image:gfx/eclipse_arquillian_12.png[]
-
-Again, you'll see the test run in the server, and the JUnit View pop up, with the test passing.
-
-So far so good, the test is running in both Eclipse and from the command line. But what does the test look like?
-
-.src/test/java/org/jboss/as/quickstarts/kitchensink/test/MemberRegistrationTest.java
-[source,java]
-------------------------------------------------------------------------
-@RunWith(Arquillian.class)                                           (1)
-public class MemberRegistrationTest {
-    @Deployment                                                      (2)
-    public static Archive<?> createTestArchive() {
-        return ShrinkWrap.create(WebArchive.class, "test.war")
-                .addClasses(Member.class,
-                            MemberRegistration.class,
-                            Resources.class)                         (3)
-                .addAsResource("META-INF/test-persistence.xml",
-                               "META-INF/persistence.xml")           (4)
-                .addAsWebInfResource(EmptyAsset.INSTANCE,
-                                     "beans.xml")                    (5)
-                // Deploy our test datasource
-                .addAsWebInfResource("test-ds.xml");                 (6)
-    }
-
-    @Inject                                                          (7)
-    MemberRegistration memberRegistration;
-
-    @Inject
-    Logger log;
-
-    @Test
-    public void testRegister() throws Exception {                    (8)
-        Member newMember = new Member();
-        newMember.setName("Jane Doe");
-        newMember.setEmail("jane@mailinator.com");
-        newMember.setPhoneNumber("2125551234");
-        memberRegistration.register(newMember);
-        assertNotNull(newMember.getId());
-        log.info(newMember.getName() +
-                 " was persisted with id " +
-                 newMember.getId());
-    }
-
-}
-------------------------------------------------------------------------
-<1> `@RunWith(Arquillian.class)` tells JUnit to hand control over to Arquillian when executing tests
-<2> The `@Deployment` annotation identifies the `createTestArchive()` static method to Arquillian as the one to use to determine which resources and classes to deploy
-<3> We add just the classes needed for the test, no more
-<4> We also add persistence.xml as our test is going to use the database
-<5> Of course, we must add beans.xml to enable CDI
-<6> Finally, we add a test datasource, so that test data doesn't overwrite production data
-<7> Arquillian allows us to inject beans into the test case
-<8> The test method works as you would expect - creates a new member, registers them, and then verifies that the member was created
-
-As you can see, Arquillian has lived up to the promise - the test case is focused on _what_ to test (the `@Deployment` method) and _how_ to test (the `@Test` method). It's also worth noting that this isn't a simplistic unit test - this is a fully fledged integration test that uses the database.
-
-Now, let's look at how we configure Arquillian. First of all, let's take a look at `arquillian.xml` in `src/test/resources`.
-
-
-.src/test/resources/META-INF/arquillian.xml
-[source,xml]
-------------------------------------------------------------------------
-<arquillian xmlns="http://jboss.org/schema/arquillian"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="http://jboss.org/schema/arquillian
-        http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
-
-   <!-- Uncomment to have test archives exported to the
-        file system for inspection -->
-<!--    <engine>  -->                                                (1)
-<!--       <property name="deploymentExportPath">
-               target/
-           </property>  -->
-<!--    </engine> -->
-
-   <!-- Force the use of the Servlet 3.0 protocol with all
-        containers, as it is the most mature -->
-   <defaultProtocol type="Servlet 3.0" />                            (2)
-
-   <!-- Example configuration for a remote JBoss WildFly instance -->
-   <container qualifier="jboss" default="true">
-      <!-- If you want to use the JBOSS_HOME environment variable,
-           just delete the jbossHome property -->
-      <configuration>
-         <property name="jbossHome">/path/to/wildfly</property>
-      </configuration>
-   </container>
-
-</arquillian>
-------------------------------------------------------------------------
-<1> Arquillian deploys the test war, and doesn't write it to disk. For debugging, it can be very useful to see exactly what is in your war, so Arquillian allows you to export the war when the tests runs
-<2> Arquillian currently needs configuring to use the Servlet protocol to connect to the server
-
-Now, we need to look at how we select between containers in the `pom.xml`:
-
-.pom.xml
-[source,xml]
-------------------------------------------------------------------------
-<profile>
-    <!-- An optional Arquillian testing profile that executes tests
-        in your WildFly instance -->
-    <!-- This profile will start a new WildFly instance, and
-        execute the test, shutting it down when done -->
-    <!-- Run with: mvn clean test -Parq-managed -->
-    <id>arq-wildfly-managed</id>                                     (1)
-    <dependencies>
-        <dependency>
-            <groupId>org.jboss.as</groupId>
-            <artifactId>                                             (2)
-                wildfly-arquillian-container-managed
-            </artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</profile>
-
-<profile>
-    <!-- An optional Arquillian testing profile that executes
-        tests in a remote WildFly instance -->
-    <!-- Run with: mvn clean test -Parq-remote -->
-    <id>arq-wildfly-remote</id>
-    <dependencies>
-        <dependency>
-            <groupId>org.jboss.as</groupId>
-            <artifactId>                                             (3)
-                wildfly-arquillian-container-remote
-            </artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</profile>
-------------------------------------------------------------------------
-<1> The profile needs an id so we can activate from Eclipse or the command line
-<2> Arquillian decides which container to use depending on your classpath. Here we define the managed container
-<3> Arquillian decides which container to use depending on your classpath. Here we define the remote container
-
-And that's it! As you can see Arquillian delivers simple and true testing. You can concentrate on writing your test functionality, and run your tests in the same environment in which you will run your application.
-
-
-[TIP]
-========================================================================
-Arquillian also offers other containers, allowing you to run your tests
-against Weld Embedded (super fast, but your enterprise services are
-mocked), GlassFish, and more
-========================================================================
-
-That concludes our tour of the kitchensink quickstart. If you would like to use this project as a basis for your own application, you can of course copy this application sources and modify it.
-
-
-= Creating your own application
-:Author: Pete Muir
-
-[[Archetype-]]
-
-What we didn't tell you about the kitchensink quickstart is that it is generated from a Maven archetype. Using this archetype offers you the perfect opportunity to generate your own project.
-
-You can create a project from the archetype using Red Hat CodeReady Studio, or Eclipse with JBoss Tools. First, open up _JBoss Central_, if it isn't already open. Hit _Cmd-3_ (Mac) or _Ctrl-3_ (Windows, Linux) and type _JBoss Central_:
-
-image:gfx/Eclipse_JBoss_Central_1.png[]
-
-You will now be shown _JBoss Central_, an excellent place to find about all things JBoss!
-
-image:gfx/Eclipse_JBoss_Central_2.png[]
-
-To create a new project, based on the kitchensink quickstart, click on _Create Projects | Jakarta EE Web Project_:
-
-image:gfx/Eclipse_JavaEEWebProject_1.png[]
-
-Red Hat CodeReady Studio will then check that you have the necessary pre-requisites to create the project. If you are using CodeReady, then you should, otherwise, JBoss Tools will help you install the necessary pre-requisites. See link:http://jboss.org/tools[JBoss Tools] for more information.
-
-Hit _Next >_. On the next screen you can enter a project name, package for sample code, and finally select a target runtime:
-
-image:gfx/Eclipse_JavaEEWebProject_2.png[]
-
-Finally, hit _Finish_. You'll be presented with the _New Project Example_ dialog, in which you can simply hit _Finish_:
-
-image:gfx/Eclipse_JavaEEWebProject_3.png[]
-
-You should now have a brand new project:
-
-image:gfx/Eclipse_JavaEEWebProject_4.png[]
-
-Enjoy!
-
-
-To use the archetype to generate a new project, you should run:
-
-    mvn archetype:generate \
-        -DarchetypeArtifactId=jboss-javaee7-webapp-archetype \
-        -DarchetypeGroupId=org.jboss.spec.archetypes \
-        -DarchetypeVersion=7.1.1.CR2 \
-
-Maven will download the archetype and it's dependencies, and ask you some questions:
-
-------------------------------------------------------------------------
-$ > mvn archetype:generate \
-        -DarchetypeArtifactId=jboss-javaee7-webapp-archetype \
-        -DarchetypeGroupId=org.jboss.spec.archetypes \
-        -DarchetypeVersion=7.1.1.CR2
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building Maven Stub Project (No POM) 1
-[INFO] ------------------------------------------------------------------------
-[INFO]
-
-.........
-
-Define value for property 'groupId': : com.acme.corp                 (1)
-Define value for property 'artifactId': : acme-sales                 (2)
-Define value for property 'version':  1.0-SNAPSHOT: :                (3)
-Define value for property 'package':  com.acme.corp: :               (4)
-[INFO] Using property: name = Jakarta EE webapp project               (5)
-Confirm properties configuration:
-groupId: com.acme.corp
-artifactId: acme-sales
-version: 1.0-SNAPSHOT
-package: com.acme.corp
-name: Jakarta EE webapp project
- Y: :
-[WARNING] CP Don't override file /Users/pmuir/tmp/acme-sales/.settings/org.eclipse.jdt.apt.core.prefs
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 14.774s
-[INFO] Finished at: Mon Jun 06 18:53:38 BST 2011
-[INFO] Final Memory: 7M/125M
-[INFO] ------------------------------------------------------------------------
-$ >
-------------------------------------------------------------------------
-<1> Enter the groupId you wish to use
-<2> Enter the artifactId you wish to use
-<3> Enter the version you wish to use, or just hit Enter if you wish to accept the default 1.0-SNAPSHOT
-<4> Enter the java package you wish to use, or just hit Enter if you wish to accept the default (which is copied from groupId ).
-<5> Finally, if you are happy with your choices, hit Enter and Maven will generate the project for you.
-
-And that's it, you now have a brand new project with the same functionality as `kitchensink`, but customized with your details.
-
-[IMPORTANT]
-========================================================================
-The archetype contains some sample code to get you started. If you
-would prefer a blank canvas, with only a project skeleton, then use
-`jboss-javaee7-webapp-blank-archetype` as your archetype id.
-========================================================================
-
-[IMPORTANT]
-.Prefer Enterprise Applications (EARs)?
-========================================================================
-The archetype generates a WAR project. With Jakarta EE, you can include
-EJBs in your WAR, meaning you won't need an EAR until you need to divide
-your code into modules. If you would like to create an EAR based project
-then use `jboss-javaee7-webapp-ear-archetype`
-as your archetype id (or if you want a blank EAR, then
-`jboss-javaee7-webapp-ear-blank-archetype`).
-========================================================================
-
-
-
-
-= More Resources
-
-[cols=","]
-|=======================================================================
-| link:Getting_Started_Guide{outfilesuffix}[Getting Started Guide] |The Getting Started Guide covers topics such as
-server layout (what you can configure where), data source definition,
-and using the web management interface.
-
-|=======================================================================
-
-:leveloffset: +1
-
-[[Developing_Jakarta_Faces_Project_Using,_Maven_and_IntelliJ]]
-= Developing Jakarta Faces Project Using JBoss AS7, Maven and IntelliJ
-
-
-JBoss AS7 is a very 'modern' application server that has very fast
-startup speed. So it's an excellent container to test your Jakarta Faces project.
-In this article, I'd like to show you how to use AS7, maven and IntelliJ
-together to develop your Jakarta Faces project.
-
-In this article I'd like to introduce the following things:
-
-* Create a project using Maven
-* Add Jakarta Faces into project
-* Writing Code
-* Add JBoss AS 7 deploy plugin into project
-* Deploy project to JBoss AS 7
-* Import project into IntelliJ
-* Add IntelliJ Jakarta Faces support to project
-* Add JBoss AS7 to IntelliJ
-* Debugging project with IntelliJ and AS7
-
-I won't explain many basic concepts about AS7, maven and IntelliJ in
-this article because there are already many good introductions on these
-topics. So before doing the real work, there some preparations should be
-done firstly:
-
-*Download JBoss AS7*
-
-It could be downloaded from here:
-https://www.jboss.org/jbossas/downloads/
-
-Using the latest release would be fine. When I'm writing this article
-the latest version is 7.1.1.Final.
-
-*Install Maven*
-
-Please make sure you have maven installed on your machine. Here is my
-environment:
-
-[source,options="nowrap"]
-----
-weli@power:~$ mvn -version
-Apache Maven 3.0.3 (r1075438; 2011-03-01 01:31:09+0800)
-Maven home: /usr/share/maven
-Java version: 1.6.0_33, vendor: Apple Inc.
-Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
-Default locale: en_US, platform encoding: MacRoman
-OS name: "mac os x", version: "10.8", arch: "x86_64", family: "mac"
-----
-
-*Get IntelliJ*
-
-In this article I'd like to use IntelliJ Ultimate Edition as the IDE for
-development, it's a commercial software and can be downloaded from:
-https://www.jetbrains.com/idea/
-
-The version I'm using is IntelliJ IDEA Ultimate 11.1
-
-After all of these prepared, we can dive into the real work:
-
-[[create-a-project-using-maven]]
-== Create a project using Maven
-
-Use the following maven command to create a web project:
-
-[source,options="nowrap"]
-----
-mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes \
--DarchetypeArtifactId=maven-archetype-webapp \
--DarchetypeVersion=1.0 \
--DgroupId=net.bluedash \
--DartifactId=jsfdemo \
--Dversion=1.0-SNAPSHOT
-----
-
-If everything goes fine maven will generate the project for us:
-
-image:images/jsf/8108c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg[alt=jsf/8108c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg]
-
-The contents of the project is shown as above.
-
-[[add-Jakarta-Faces-into-project]]
-== Add Jakarta Faces into project
-
-The Jakarta Faces library is now included in maven repo, so we can let maven to
-manage the download for us. First is to add repository into our pom.xml:
-
-[source,java,options="nowrap"]
-----
-<repository>
-  <id>jvnet-nexus-releases</id>
-  <name>jvnet-nexus-releases</name>
-  <url>https://maven.java.net/content/repositories/releases/</url>
-</repository>
-----
-
-Then we add Jakarta Faces dependency into pom.xml:
-
-[source,xml,options="nowrap"]
-----
-<dependency>
-    <groupId>jakarta.faces</groupId>
-    <artifactId>jakarta.faces-api</artifactId>
-    <version>4.0.1</version>
-    <scope>provided</scope>
-</dependency>
-----
-
-Please note the 'scope' is 'provided', because we don't want to bundle
-the jsf.jar into the war produced by our project later, as JBoss AS7
-already have Jakarta Faces bundled in.
-
-Then we run 'mvn install' to update the project, and maven will download
-jsf-api for us automatically.
-
-[[writing-code]]
-== Writing Code
-
-Writing Jakarta Faces code in this article is trivial, so I've put written a
-project called 'jsfdemo' onto github:
-
-https://github.com/liweinan/jsfdemo
-
-Please clone this project into your local machine, and import it into
-IntelliJ following the steps described as above.
-
-[[add-jboss-as-7-deploy-plugin-into-project]]
-== Add JBoss AS 7 deploy plugin into project
-
-JBoss AS7 has provide a set of convenient maven plugins to perform daily
-tasks such as deploying project into AS7. In this step let's see how to
-use it in our project.
-
-We should put AS7's repository into pom.xml:
-
-[source,xml,options="nowrap"]
-----
-<repository>
-    <id>jboss-public-repository-group</id>
-    <name>JBoss Public Repository Group</name>
-    <url>https://repository.jboss.org/nexus/content/groups/public/</url>
-    <layout>default</layout>
-    <releases>
-        <enabled>true</enabled>
-        <updatePolicy>never</updatePolicy>
-    </releases>
-    <snapshots>
-        <enabled>true</enabled>
-        <updatePolicy>never</updatePolicy>
-    </snapshots>
-</repository>
-----
-
-And also the plugin repository:
-
-[source,java,options="nowrap"]
-----
-<pluginRepository>
-    <id>jboss-public-repository-group</id>
-    <name>JBoss Public Repository Group</name>
-    <url>https://repository.jboss.org/nexus/content/groups/public/</url>
-    <releases>
-        <enabled>true</enabled>
-    </releases>
-    <snapshots>
-        <enabled>true</enabled>
-    </snapshots>
-</pluginRepository>
-----
-
-And put jboss deploy plugin into 'build' section:
-
-[source,java,options="nowrap"]
-----
-<plugin>
-    <groupId>org.jboss.as.plugins</groupId>
-    <artifactId>jboss-as-maven-plugin</artifactId>
-    <executions>
-        <execution>
-            <phase>package</phase>
-            <goals>
-                <goal>deploy</goal>
-            </goals>
-        </execution>
-    </executions>
-</plugin>
-----
-
-I've put the final version pom.xml here to check whether your
-modification is correct:
-
-https://github.com/liweinan/jsfdemo/blob/master/pom.xml
-
-Now we have finished the setup work for maven.
-
-[[deploy-project-to-jboss-as-7]]
-== Deploy project to JBoss AS 7
-
-To deploy the project to JBoss AS7, we should start AS7 firstly. In
-JBoss AS7 directory, run following command:
-
-[source,java,options="nowrap"]
-----
-bin/standalone.sh
-----
-
-AS7 should start in a short time. Then let's go back to our project
-directory and run maven command:
-
-[source,java,options="nowrap"]
-----
-mvn -q jboss-as:deploy
-----
-
-Maven will use some time to download necessary components for a while,
-so please wait patiently. After a while, we can see the result:
-
-image:images/jsf/97d781c6be9db755aef80a110f1d9b29590610d6.jpg[alt=jsf/97d781c6be9db755aef80a110f1d9b29590610d6.jpg]
-
-And if you check the console output of AS7, you can see the project is
-deployed:
-
-image:images/jsf/2._java.jpg[alt=jsf/2._java.jpg]
-
-Now we have learnt how to create a Jakarta Faces project and deploy it to AS7
-without any help from graphical tools. Next let's see how to use
-IntelliJ IDEA to go on developing/debugging our project.
-
-[[import-project-into-intellij]]
-== Import project into IntelliJ
-
-Now it's time to import the project into IntelliJ. Now let's open
-IntelliJ, and choose 'New Project...':
-
-image:images/jsf/05222f3059e387df96ce04d2aea156c82af15096.jpg[alt=jsf/05222f3059e387df96ce04d2aea156c82af15096.jpg]
-
-The we choose 'Import project from external model':
-
-image:images/jsf/d68a0cdbc8c90db3db8af998f34616f73c7fe809.jpg[alt=jsf/d68a0cdbc8c90db3db8af998f34616f73c7fe809.jpg]
-
-Next step is choosing 'Maven':
-
-image:images/jsf/0b3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg[alt=jsf/0b3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg]
-
-Then IntelliJ will ask you the position of the project you want to
-import. In 'Root directory' input your project's directory and leave
-other options as default:
-
-image:images/jsf/2f192d02993248c97e2ac42ea8f3105d855e5cdf.jpg[alt=jsf/2f192d02993248c97e2ac42ea8f3105d855e5cdf.jpg]
-
-For next step, just click 'Next':
-
-image:images/jsf/3a3ee36eb581930822c4a66362795345f5d2f9a7.jpg[alt=jsf/3a3ee36eb581930822c4a66362795345f5d2f9a7.jpg]
-
-Finally click 'Finish':
-
-image:images/jsf/91e40cd0b1545cff4622857d6dc9959f96faf056.jpg[alt=jsf/91e40cd0b1545cff4622857d6dc9959f96faf056.jpg]
-
-Hooray! We've imported the project into IntelliJ now icon:smile-o[role="yellow"]
-
-[[adding-intellij-Jakarta-Faces-support-to-project]]
-== Adding IntelliJ Jakarta Faces support to project
-
-Let's see how to use IntelliJ and AS7 to debug the project. First we
-need to add 'Jakarta Faces' facet into project. Open project setting:
-
-image:images/jsf/8b8d0051f4f15033f17cb859c65f2d8481914678.jpg[alt=jsf/8b8d0051f4f15033f17cb859c65f2d8481914678.jpg]
-
-Click on 'Facets' section on left; Select 'Web' facet that we already
-have, and click the '+' on top, choose 'Jakarta Faces':
-
-image:images/jsf/e6947b84a56a698ca1392a440081bddfb5cae284.jpg[alt=jsf/e6947b84a56a698ca1392a440081bddfb5cae284.jpg]
-
-Select 'Web' as parent facet:
-
-image:images/jsf/6b2296be1bb2d8a81952caef0f025a139a39b381.jpg[alt=jsf/6b2296be1bb2d8a81952caef0f025a139a39b381.jpg]
-
-Click 'Ok':
-
-image:images/jsf/9988c572bad281146f405e9287f645a3da201885.jpg[alt=jsf/9988c572bad281146f405e9287f645a3da201885.jpg]
-
-Now we have enabled IntelliJ's Jakarta Faces support for project.
-
-[[add-jboss-as7-to-intellij]]
-== Add JBoss AS7 to IntelliJ
-
-Let's add JBoss AS7 into IntelliJ and use it to debug our project. First
-please choose 'Edit Configuration' in menu tab:
-
-image:images/jsf/dc0550785aae11f9d3eb439fdc0c51069affd25d.jpg[alt=jsf/dc0550785aae11f9d3eb439fdc0c51069affd25d.jpg]
-
-Click '+' and choose 'JBoss Server' -> 'Local':
-
-image:images/jsf/1231420c938f087030cb3dcd37237b5585beb154.jpg[alt=jsf/1231420c938f087030cb3dcd37237b5585beb154.jpg]
-
-Click 'configure':
-
-image:images/jsf/d7e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg[alt=jsf/d7e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg]
-
-and choose your JBoss AS7:
-
-image:images/jsf/f7b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg[alt=jsf/f7b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg]
-
-Now we need to add our project into deployment. Click the 'Deployment'
-tab:
-
-image:images/jsf/6802fb7e29283d0e064a7cc4466b918995ba5645.jpg[alt=jsf/6802fb7e29283d0e064a7cc4466b918995ba5645.jpg]
-
-Choose 'Artifact', and add our project:
-
-image:images/jsf/359484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg[alt=jsf/359484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg]
-
-Leave everything as default and click 'Ok', now we've added JBoss AS7
-into IntelliJ
-
-[[debugging-project-with-intellij-and-as7]]
-== Debugging project with IntelliJ and AS7
-
-Now comes the fun part. To debug our project, we cannot directly use the
-'debug' feature provided by IntelliJ right now(maybe in the future
-version this problem could be fixed). So now we should use the debugging
-config provided by AS7 itself to enable JPDA feature, and then use the
-remote debug function provided by IntelliJ to get things done. Let's
-dive into the details now:
-
-First we need to enable JPDA config inside AS7, open
-'bin/standalone.conf' and find following lines:
-
-[source,java,options="nowrap"]
-----
-# Sample JPDA settings for remote socket debugging
-#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
-----
-
-Enable the above config by removing the leading hash sign:
-
-[source,java,options="nowrap"]
-----
-# Sample JPDA settings for remote socket debugging
-JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
-----
-
-[IMPORTANT]
-
-With WildFly you can directly start the server in debug mode:
-
-[source,java,options="nowrap"]
-----
-bin/standalone.sh --debug --server-config=standalone.xml
-----
-
-Now we start AS7 in IntelliJ:
-
-image:images/jsf/52369d67f9117c924213de24dd6642b48e47a436.png[alt=jsf/52369d67f9117c924213de24dd6642b48e47a436.png]
-
-Please note we should undeploy the existing 'jsfdemo' project in AS7 as
-we've added by maven jboss deploy plugin before. Or AS7 will tell us
-there is already existing project with same name so IntelliJ could not
-deploy the project anymore.
-
-If the project start correctly we can see from the IntelliJ console
-window, and please check the debug option is enabled:
-
-image:images/jsf/eaac5cb1a836809ab29513346b527fe051b7c7ac.png[alt=jsf/eaac5cb1a836809ab29513346b527fe051b7c7ac.png]
-
-Now we will setup the debug configuration, click 'debug' option on menu:
-
-image:images/jsf/b8323caf6980c40c3d635db5e308b03847618d06.jpg[alt=jsf/b8323caf6980c40c3d635db5e308b03847618d06.jpg]
-
-Choose 'Edit Configurations':
-
-image:images/jsf/8327bbe0e83cb7170dd84767631c98956e91c42c.jpg[alt=jsf/8327bbe0e83cb7170dd84767631c98956e91c42c.jpg]
-
-Then we click 'Add' and choose Remote:
-
-image:images/jsf/7103da6b6323e515a03a04cafe111aa7c6b3169d.jpg[alt=jsf/7103da6b6323e515a03a04cafe111aa7c6b3169d.jpg]
-
-Set the 'port' to the one you used in AS7 config file 'standalone.conf':
-
-image:images/jsf/30bbef45137c7d45ae300ba8d551423d1feefc96.png[alt=jsf/30bbef45137c7d45ae300ba8d551423d1feefc96.png]
-
-Leave other configurations as default and click 'Ok'. Now we need to set
-breakpoints in project, let's choose TimeBean.java and set a breakpoint
-on 'getNow()' method by clicking the left side of that line of code:
-
-image:images/jsf/a96b7d32e04aa67956bd00a187f09b75a5af241e.jpg[alt=jsf/a96b7d32e04aa67956bd00a187f09b75a5af241e.jpg]
-
-Now we can use the profile to do debug:
-
-image:images/jsf/5ea6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png[alt=jsf/5ea6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png]
-
-If everything goes fine we can see the console output:
-
-image:images/jsf/1096ebbbf2b29e694e300e02a48d0fa4207cb746.jpg[alt=jsf/1096ebbbf2b29e694e300e02a48d0fa4207cb746.jpg]
-
-Now we go to web browser and see our project's main page, try to click
-on 'Get current time':
-
-image:images/jsf/5ad5d0216d3326e9bc29705042db59f11c3c1e70.png[alt=jsf/5ad5d0216d3326e9bc29705042db59f11c3c1e70.png]
-
-Then IntelliJ will popup and the code is pausing on break point:
-
-image:images/jsf/2499d43c0dce2cab72ba472c8452a2b57999ac84.jpg[alt=jsf/2499d43c0dce2cab72ba472c8452a2b57999ac84.jpg]
-
-And we could inspect our project now.
-
-[[conclusion]]
-== Conclusion
-
-In this article I've shown to you how to use maven to create a project
-using Jakarta Faces and deploy it in JBoss AS7, and I've also talked about the
-usage of IntelliJ during project development phase. Hope the contents
-are practical and helpful to you icon:smile-o[role="yellow"]
-
-[[references]]
-== References
-
-* _https://developer.jboss.org/wiki/JBossAS7UsingJPDAToDebugTheASSourceCode[JBoss
-AS7: Using JPDA to debug the AS source code]_
-* _https://developer.jboss.org/wiki/MavenGettingStarted-Developers[Maven
-Getting Started - Developers]_
-* _https://blog.v-s-f.co.uk/2010/09/jsf-2-1-project-using-eclipse-and-maven-2/[JSF
-2.1 project using Eclipse and Maven 2:http]_
-* _https://www.amazon.com/Practical-RichFaces-Max-Katz/dp/1430234490/ref=dp_ob_title_bk[Practical
-RichFaces]_
-* _https://javaserverfaces.java.net/download.html[Oracle Mojarra
-JavaServer Faces]_
-* _https://github.com/jbossas/jboss-as-maven-plugin[JBoss AS7 Maven
-Plugin]_
-
-[[Getting_Started_Developing_Applications_Presentation_Demo]]
-= Getting Started Developing Applications Presentation & Demo
-
-
-This document is a "script" for use with the quickstarts associated with
-the link:Getting_Started_Developing_Applications_Guide.html[Getting
-Started Developing Applications Guide]. It can be used as the basis for
-demoing/explaining the Jakarta EE programming model with JBoss AS 7.
-
-There is an associated presentation – JBoss AS - Getting Started
-Developing Applications – which can be used to introduce the Jakarta EE
-ecosystem.
-
-The emphasis here is on the programming model, not on OAM/dev-ops,
-performance etc.
-
-[[prerequisites-for-using-the-script]]
-== Prerequisites for using the script
-
-* JBoss AS 7 downloaded and installed
-* Eclipse Indigo with m2eclipse and JBoss Tools installed
-* The quickstarts downloaded and imported into Eclipse
-* Make sure `$JBOSS_HOME` is set.
-* Make sure `src/test/resources/arquillian.xml` has the correct path to
-your JBoss AS install for kitchensink
-* Make sure your font size is set in Eclipse so everyone can read the
-text!
-
-[[import-examples-into-eclipse-and-set-up-jboss-as]]
-== Import examples into Eclipse and set up JBoss AS
-
-TODO
-
-[[the-helloworld-quickstart]]
-== The Helloworld Quickstart
-
-[[introduction-1]]
-=== Introduction
-
-This quickstart is extremely basic, and is really useful for nothing
-more than showing than the app server is working properly, and our
-deployment mechanism is working. We recommend you use this quickstart to
-demonstrate the various ways you can deploy apps to JBoss AS 7.
-
-[[using-maven]]
-=== Using Maven
-
-. Start JBoss AS 7 from the console
-+
-[source,options="nowrap"]
-----
-$ JBOSS_HOME/bin/standalone.sh
-----
-
-. Deploy the app using Maven
-+
-[source,options="nowrap"]
-----
-$ mvn clean package jboss-as:deploy
-----
-+
-[IMPORTANT]
-====
-The quickstarts use the jboss-as maven plugin to deploy and undeploy
-applications. This plugin uses the JBoss AS Native Java Detyped
-Management API to communicate with the server. The Detyped API is used
-by management tools to control an entire domain of servers, and exposes
-only a small number of types, allowing for backwards and forwards
-compatibility.
-====
-
-. Show the app has deployed in the terminal.
-+
-Visit http://localhost:8080/jboss-as-helloworld
-
-. Undeploy the app using Maven
-+
-[source,options="nowrap"]
-----
-$ mvn jboss-as:undeploy
-----
-
-[[using-the-command-line-interface-cli]]
-=== Using the Command Line Interface (CLI)
-
-.  Start JBoss AS 7 from the console (if not already running)
-+
-[source,options="nowrap"]
-----
-$ JBOSS_HOME/bin/standalone.sh
-----
-
-. Build the war
-+
-[source,options="nowrap"]
-----
-$ mvn clean package
-----
-
-. Start the CLI
-+
-[source,options="nowrap"]
-----
-$ JBOSS_HOME/bin/jboss-admin.sh --connect
-----
-+
-[IMPORTANT]
-+
-The command line also uses the Deptyped Management API to communicate
-with the server. It's designed to be as "unixy" as possible, allowing
-you to "cd" into nodes, with full tab completion etc. The CLI allows you
-to deploy and undeploy applications, create Jakarta Messaging queues, topics etc.,
-create datasources (normal and XA). It also fully supports the domain
-node.
-
-. Deploy the app
-+
-[source,options="nowrap"]
-----
-$ deploy target/jboss-as-helloworld.war
-----
-
-. Show the app has deployed
-+
-[source,java,options="nowrap"]
-----
-$ undeploy jboss-as-helloworld.war
-----
-
-[[using-the-web-management-interface]]
-=== Using the web management interface
-
-.  Start JBoss AS 7 from the console (if not already running)
-+
-[source,options="nowrap"]
-----
-$ JBOSS_HOME/bin/standalone.sh
-----
-
-. Build the war
-+
-[source,options="nowrap"]
-----
-$ mvn clean package
-----
-
-. Open up the web management interface http://localhost:9990/console
-+
-[IMPORTANT]
-====
-The web management interface offers the same functionality as the CLI
-(and again uses the Detyped Management API), but does so using a pretty
-GWT interface! You can set up virtual servers, interrogate sub systems
-and more.
-====
-
-. Navigate `Manage Deployments -> Add content`. Click on choose file and
-locate `helloworld/target/jboss-as-helloworld.war`.
-
-. Click `Next` and `Finish` to upload the war to the server.
-
-. Now click `Enable` and `Ok` to start the application
-
-. Switch to the console to show it deployed
-
-. Now click `Remove`
-
-[[using-the-filesystem]]
-=== Using the filesystem
-
-.  Start JBoss AS 7 from the console (if not already running)
-+
-[source,options="nowrap"]
-----
-$ JBOSS_HOME/bin/standalone.sh
-----
-
-. Build the war
-+
-[source,options="nowrap"]
-----
-$ mvn clean package
-----
-+
-[IMPORTANT]
-====
-Of course, you can still use the good ol' file system to deploy. Just
-copy the file to `$JBOSS_HOME/standalone/deployments`.
-====
-
-. Copy the war
-+
-[source,options="nowrap"]
-----
-$ cp target/jboss-as-helloworld.war $JBOSS_HOME/standalone/deployments
-----
-
-. Show the war deployed
-+
-[IMPORTANT]
-====
-The filesystem deployment uses marker files to indicate the status of a
-deployment. As this deployment succeeded we get a
-`$JBOSS_HOME/standalone/deployments/jboss-as-helloworld.war.deployed`
-file. If the deployment failed, you would get a `.failed` file etc.
-====
-
-. Undeploy the war
-+
-[source,options="nowrap"]
-----
-rm $JBOSS_HOME/standalone/deployments/jboss-as-helloworld.war.deployed
-----
-
-. Show the deployment stopping!
-
-. Start and stop the app server, show that the deployment really is gone!
-+
-[IMPORTANT]
-====
-This gives you much more precise control over deployments than before
-====
-
-[[using-eclipse]]
-=== Using Eclipse
-
-. Add a JBoss AS server
-.. Bring up the Server view
-..  Right click in it, and choose `New -> Server`
-.  Choose JBoss AS 7.0 and hit Next
-..  Locate the server on your disc
-..  Hit Finish
-.  Start JBoss AS in Eclipse
-..  Select the server
-..  Click the Run button
-..  Deploy the app
-.  right click on the app, choose `Run As -> Run On Server`
-..  Select the AS 7 instance you want to use
-..  Hit finish
-.  Load the app at http://localhost:8080/jboss-as-helloworld
-
-[[digging-into-the-app]]
-=== Digging into the app
-
-.  Open up the helloworld quickstart in Eclipse, and open up
-`src/main/webapp`.
-.  Point out that we don't require a `web.xml` anymore!
-.  Show `beans.xml` and explain it's a marker file used to JBoss AS to
-enable CDI (open it, show that it is empty)
-.  Show `index.html`, and explain it is just used to kick the user into
-the app (open it, show the meta-refresh)
-.  Open up the `pom.xm` - and emphasise that it's pretty simple.
-..  There is no parent pom, everything for the build is *here*
-..  Show that we are enabling the JBoss Maven repo - explain you can do
-this in your POM or in system wide ( `settings.xml`)
-..  Show the `dependencyManagement` section. Here we import the JBoss AS
-7 Web Profile API. Explain that this gives you all the versions for all
-of the JBoss AS 7 APIs that are in the web profile. Explain we could
-also depend on this directly, which would give us the whole set of APIs,
-but that here we've decided to go for slightly tighter control and
-specify each dependency ourselves
-..  Show the import for CDI, JSR-250 and Servlet API. Show that these
-are all provided - we are depending on build in server implementations,
-not packaging this stuff!
-..  Show the plugin sections - nothing that exciting here, the war
-plugin is out of date and requires you to provide `web.xml` icon:smile-o[role="yellow"]
-, configure the JBoss AS Maven Plugin, set the Java version to 6.
-.  Open up `src/main/java` and open up the `HelloWorldServlet`.
-..  Point out the `@WebServlet` - explain this one annotation removes
-about 8 lines of XML - no need to separately map a path either. This is
-much more refactor safe
-..  Show that we can inject services into a Servlet
-..  Show that we use the service (line 41) +
-#Cmd-click on `HelloService`
-..  This is a CDI bean - very simple, no annotations required!
-..  Explain injection
-...  Probably used to string based bean resolution
-...  This is typesafe (refactor safe, take advantage of the compiler and
-the IDE - we just saw that!)
-...  When CDI needs to inject something, the first thing it looks at is
-the type - and if the type of the injection point is assignable from a
-bean, CDI will inject that bean
-
-[[the-numberguess-quickstart]]
-== The numberguess quickstart
-
-[[introduction-2]]
-=== Introduction
-
-This quickstart adds in a "complete" view layer into the mix. Jakarta EE
-ships with a Jakarta Faces. Jakarta Faces is a server side rendering, component orientated
-framework, where you write markup using an HTML like language, adding in
-dynamic behavior by binding components to beans in the back end. The
-quickstart also makes more use of CDI to wire the application together.
-
-[[run-the-app]]
-=== Run the app
-
-.  Start JBoss AS in Eclipse
-.  Deploy it using Eclipse - just right click on the app, choose
-`Run As -> Run On Server`
-.  Select the AS 7 instance you want to use
-.  Hit finish
-.  Load the app at http://localhost:8080/jboss-as-numberguess
-.  Make a few guesses
-
-[[deployment-descriptors-srcmainwebappweb-inf]]
-=== Deployment descriptors src/main/webapp/WEB-INF
-
-Emphasize the lack of them!
-
-No need to open any of them, just point them out
-
-.  `web.xml` - don't need it!
-.  `beans.xml` - as before, marker file
-.  `faces-config.xml` - nice feature from AS7 - we can just put
-`faces-config.xml` into the WEB-INF and it enables Jakarta Faces (inspiration from
-CDI)
-.  `pom.xml` we saw this before, this time it's the same but adds in
-Jakarta Faces API
-
-[[views]]
-=== Views
-
-.  `index.html` - same as before, just kicks us into the app
-.  `home.xhtml`
-..  Lines 19 - 25 – these are messages output depending on state of
-beans (minimise coupling between controller and view layer by
-interrogating state, not pushing)
-.  Line 20 – output any messages pushed out by the controller
-.  Line 39 - 42 – the input field is bound to the guess field on the
-game bean. We validate the input by calling a method on the game bean.
-.  Line 43 - 45 – the command button is used to submit the form, and
-calls a method on the game bean
-.  Line 48, 49, The reset button again calls a method on the game bean
-
-[[beans]]
-=== Beans
-
-.  `Game.java` – this is the main controller for the game. App has no
-persistence etc.
-..  `@Named` – As we discussed CDI is typesafe, (beans are injected by
-type) but sometimes need to access in a non-typesafe fashion. @Named
-exposes the Bean in EL - and allows us to access it from Jakarta Faces
-..  `@SessionScoped` – really simple app, we keep the game data in the
-session - to play two concurrent games, need two sessions. This is not a
-limitation of CDI, but simply keeps this demo very simple. CDI will
-create a bean instance the first time the game bean is accessed, and
-then always load that for you
-..  `@Inject maxNumber` – here we inject the maximum number we can
-guess. This allows us to externalize the config of the game
-..  `@Inject rnadomNumber` – here we inject the random number we need to
-guess. Two things to discuss here
-..  Instance - normally we can inject the object itself, but sometimes
-it's useful to inject a "provider" of the object (in this case so that
-we can get a new random number when the game is reset!). Instance allows
-us to `get()` a new instance when needed
-..  Qualifiers - now we have two types of Integer (CDI auto-boxes types
-when doing injection) so we need to disambiguate. Explain qualifiers and
-development time approach to disambiguation. You will want to open up
-`@MaxNumber` and `@Random` here.
-..  `@PostConstruct` – here is our reset method - we also call it on
-startup to set up initial values. Show use of `Instance.get()`.
-.  `Generator.java` This bean acts as our random number generator.
-.  `@ApplicationScoped` explain about other scopes available in CDI +
-extensibility.
-..  `next()` Explain about producers being useful for determining bean
-instance at runtime
-..  `getMaxNumber()` Explain about producers allowing for loose coupling
-
-[[the-login-quickstart]]
-== The login quickstart
-
-[[introduction-3]]
-=== Introduction
-
-The login quickstart builds on the knowledge of CDI and Jakarta Faces we have got
-from numberguess. New stuff we will learn about is how to use Jakarta Persistence to
-store data in a database, how to use Jakarta Transactions to control transactions, and
-how to use Jakarta Enterprise Beans for declarative TX control.
-
-[[run-the-app-1]]
-=== Run the app
-
-.  Start JBoss AS in Eclipse
-.  Deploy it using Eclipse - just right click on the app, choose
-`Run As -> Run On Server`
-.  Select the AS 7 instance you want to use
-.  Hit finish
-.  Load the app at http://localhost:8080/jboss-as-login
-.  Login as admin/admin
-.  Create a new user
-
-[[deployment-descriptors]]
-=== Deployment Descriptors
-
-.  Show that we have the same ones we are used in `src/main/webapp` –
-`beans.xml`, `faces-config.xml`
-.  We have a couple of new ones in `src/main/resources`
-..  `persistence.xml`. Not too exciting. We are using a datasource that
-AS7 ships with. It's backed by the H2 database and is purely a sample
-datasource to use in sample applications. We also tell Hibernate to
-auto-create tables - as you always have.
-..  `import.sql` Again, the same old thing you are used to in Hibernate
-- auto-import data when the app starts.
-.  `pom.xml` is the same again, but just adds in dependencies for Jakarta Persistence,
-Jakarta Transactions and Jakarta Enterprise Beans
-
-[[views-1]]
-=== Views
-
-.  `template.xhtml` One of the updates added to Jakarta Faces was templating
-ability. We take advantage of that in this app, as we have multiple
-views
-..  Actually nothing too major here, we define the app "title" and we
-could easily define a common footer etc. (we can see this done in the
-kitchensink app)
-..  The `ui:insert` command inserts the actual content from the
-templated page. +
-# `home.xhtml`
-..  Uses the template
-..  Has some input fields for the login form, button to login and
-logout, link to add users.
-..  Binds fields to credentials bean}}
-..  Buttons link to login bean which is the controller
-.  `users.xhtml`
-..  Uses the template
-..  Displays all users using a table
-..  Has a form with input fields to add users.
-..  Binds fields to the newUser bean
-..  Methods call on userManager bean
-
-[[beans-1]]
-=== Beans
-
-.  `Credentials.java` Backing bean for the login form field, pretty
-trivial. It's request scoped (natural for a login field) and named so we
-can get it from Jakarta Faces.
-.  `Login.java`
-..  Is session scoped (a user is logged in for the length of their
-session or until they log out}}
-..  Is accessible from EL
-..  Injects the current credentials
-..  Uses the userManager service to load the user, and sends any
-messages to Jakarta Faces as needed
-..  Uses a producer method to expose the @LoggedIn user (producer
-methods used as we don't know which user at development time)
-.  `User.java` Is a pretty straightforward Jakarta Persistence entity. Mapped with
-`@Entity`, has an natural id.
-.  `UserManager.java` This is an interface, and by default we use the
-ManagedBean version, which requires manual TX control
-.  `ManagedBeanUserManager.java` - accessible from EL, request scoped.
-..  Injects a logger (we'll see how that is produced in a minute)
-..  Injects the entity manager (again, just a min)
-..  Inject the UserTransaction (this is provided by CDI)
-..  `getUsers()` standard Jakarta Persistence-QL that we know and love - but lots of
-ugly TX handling code.
-..  Same for `addUser()` and `findUser()` methods - very simple Jakarta Persistence
-but...
-..  Got a couple of producer methods.
-...  `getUsers()` is obvious - loads all the users in the database. No
-ambiguity - CDI takes into account generic types when injecting. Also
-note that CDI names respect JavaBean naming conventions
-...  `getNewUser()` is used to bind the new user form to from the view
-layer - very nice as it decreases coupling - we could completely change
-the wiring on the server side (different approach to creating the
-newUser bean) and no need to change the view layer.
-.  `EJBUserManager.java`
-..  It's an alternative – explain alternatives, and that they allow
-selection of beans at deployment time
-..  Much simple now we have declarative TX control.
-..  Start to see how we can introduce Jakarta Enterprise Beans to get useful enterprise
-services such as declarative TX control
-.  `Resources.java`
-..  `{EntityManager}` - explain resource producer pattern
-
-[[the-kitchensink-quickstart]]
-== The kitchensink quickstart
-
-[[introduction-4]]
-=== Introduction
-
-The kitchensink quickstart is generated from an archetype available for
-JBoss AS (tell people to check the
-link:/pages/createpage.action?spaceKey=WFLY&title=Getting+Started+Developing+Applications&linkCreation=true&fromPageId=557131[Getting
-Started Developing Applications] Guide for details). It demonstrates
-CDI, Jakarta Faces, Jakarta Enterprise Beans, Jakarta Persistence (which we've seen before) and Jakarta RESTful Web Services and Bean
-Validation as well. We add in Arquillian for testing.
-
-[[run-the-app-2]]
-=== Run the app
-
-.  Start JBoss AS in Eclipse
-.  Deploy it using Eclipse - just right click on the app, choose
-`Run As -> Run On Server`
-.  Select the AS 7 instance you want to use
-.  Hit finish
-.  Load the app at http://localhost:8080/jboss-as-kitchensink
-.  Register a member - make sure to enter an invalid email and phone -
-show Jakarta Bean Validation at work
-.  Click on the member URL and show the output from Jakarta RESTful Web Services
-
-[[Jakarta-Bean-Validation]]
-=== Jakarta Bean Validation
-
-.  Explain the benefits of Jakarta Bean Validation - need your data always
-valid (protect your data) AND good errors for your user. BV allows you
-to express once, apply often.
-.  `index.xhtml`
-..  Show the input fields – no validators attached
-..  Show the message output
-.  `Member.java`
-...  Hightlight the various validation annotations
-.  Jakarta EE automatically applies the validators in both the persistence
-layer and in your views
-
-[[Jakarta-RESTful-Web-Services]]
-=== Jakarta RESTful Web Services
-
-.  `index.xhtml` - Show that URL generation is just manual
-.  `JaxRsActivator.java` - simply activates Jakarta RESTful Web Services
-.  `Member.java` - add Jakarta XML Binding annotation to make Jakarta XML Binding process the class properly
-.  `MemberResourceRESTService.java`
-..  `@Path` sets the Jakarta RESTful Web Services resource
-..  Jakarta RESTful Web Services services can use injection
-..  `@GET` methods are auto transformed to XML using Jakarta XML Binding
-.  And that is it!
-
-[[arquillian-getting-started]]
-=== Arquillian
-
-.  Make sure JBoss AS is running
-+
-[source,options="nowrap"]
-----
-mvn clean test -Parq-jbossas-remote
-----
-
-.  Explain the difference between managed and remote
-
-. Make sure JBoss AS is stopped
-+
-[source,options="nowrap"]
-----
-mvn clean test -Parq-jbossas-managed
-----
-
-. Start JBoss AS in Eclipse
-
-. Update the project to use the `arq-jbossas-remote` profile
-
-. Run the test from Eclipse
-+
-Right click on test, `Run As -> JUnit Test`
-+
-`MemberRegistrationTest.java`
-
-.  Discuss micro deployments
-.  Explain Arquilian allows you to use injection
-.  Explain that Arquillian allows you to concentrate just on your test
-logic
-
-NOTE: References in this document to CDI refer to Jakarta Contexts and Dependency Injection unless otherwise noted.
-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Getting_Started_Developing_Applications_Guide.html

+ \ No newline at end of file diff --git a/29/Getting_Started_Guide.html b/29/Getting_Started_Guide.html index 9e1aabf5d..d110aebcd 100644 --- a/29/Getting_Started_Guide.html +++ b/29/Getting_Started_Guide.html @@ -1,1739 +1,11 @@ - - - - - - -Getting Started Guide - - - - - - - -
-
-
-
-

© 2017 The original authors.

-
- -
-
-
-

1. Getting Started with WildFly 29

-
-
-

WildFly 29 is the latest release in a series of JBoss open-source -application server offerings. WildFly 29 is an exceptionally fast, -lightweight and powerful implementation of the Jakarta -Enterprise Edition 10 specifications. WildFly’s modular architecture built on the -JBoss Modules and JBoss Modular Service Container projects enables services on-demand when your -application requires them. The table below lists the technologies available in WildFly 29 -server configuration profiles.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Jakarta EE Platform TechnologyJakarta EE Full PlatformJakarta EE Web -ProfileWildFly 29 Full ConfigurationWildFly 29 Default Configuration

Jakarta Activation 2.1

X

 — 

X

X

Jakarta Annotations 2.1

X

X

X

X

Jakarta Authentication 3.0

X

X

X

X

Jakarta Authorization 2.1

X

 — 

X

 — 

Jakarta Batch 2.1

X

 — 

X

 — 

Jakarta Bean Validation 3.0

X

X

X

X

Jakarta Concurrency 3.0

X

X

X

X

Jakarta Connectors 2.1

X

 — 

X

X

Jakarta Contexts and Dependency Injection 4.0

X

X

X

X

Jakarta Debugging Support for Other Languages 2.0

X

X

X

X

Jakarta Dependency Injection 2.0

X

X

X

X

Jakarta Enterprise Beans 4.0

X

X(Lite)

X

X(Lite)

Jakarta Enterprise Web Services 2.0

Optional

 — 

X

X

Jakarta Expression Language 5.0

X

X

X

X

Jakarta Interceptors 2.1

X

X

X

X

Jakarta JSON Binding 3.0

X

X

X

X

Jakarta JSON Processing 2.1

X

X

X

X

Jakarta Mail 2.1

X

 — 

X

X

Jakarta Messaging 3.1

X

 — 

X

 — 

Jakarta Persistence 3.1

X

X

X

X

Jakarta RESTful Web Services 3.1

X

X

X

X

Jakarta Security 3.0

X

X

X

X

Jakarta Faces 4.0

X

X

X

X

Jakarta Server Pages 3.1

X

X

X

X

Jakarta Servlet 6.0

X

X

X

X

Jakarta SOAP with Attachments 1.3

Optional

 — 

X

X

Jakarta Standard Tag Library 3.0

X

X

X

X

Jakarta Transactions 2.0

X

X

X

X

Jakarta WebSocket 2.1

X

X

X

X

Jakarta XML Binding 4.0

Optional

X

X

X

Jakarta XML Web Services 4.0

Optional

 — 

X

X

-
-

WildFly 29 also provides support for a number of MicroProfile technologies:

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MicroProfile TechnologyWildFly 29 Default ConfigurationWildFly 29 MicroProfile Configuration

MicroProfile Config 3.0

X

X

MicroProfile Fault Tolerance 4.0

 — 

X

MicroProfile Health 4.0

 — 

X

MicroProfile JWT Authentication 2.0

X

X

MicroProfile Metrics 4.0 (deprecated in WildFly; will be replaced by Micrometer)

 — 

X

MicroProfile OpenAPI 3.0

 — 

X

MicroProfile Reactive Messaging 3.0

 — 

 — 

MicroProfile Streams Operators 3.0

 — 

 — 

MicroProfile Rest Client 3.0

X

X

-
-

Missing ActiveMQ Artemis and Jakarta Messaging?

-
-
- - - - - -
- - -WildFly’s default configuration provides Jakarta EE Web Profile support and thus -doesn’t include Jakarta Messaging (provided by ActiveMQ Artemis). As noted in the -WildFly Configurations section, other configuration -profiles do provide all features required by the Jakarta EE Full Platform. If you -want to use messaging, make sure you -start the server using an alternate configuration -that provides the Jakarta EE Full Platform. -
-
-
-

This document provides a quick overview on how to download and get -started using WildFly 29 for your application development. For in-depth -content on administrative features, refer to the WildFly 29 Admin Guide.

-
-
-
-
-

2. Requirements

-
-
-
    -
  • -

    Java SE 11 or later. We recommend that you use the latest available update -of the current long-term support Java release.

    -
  • -
-
-
-
-
-

3. Installation Options

-
-
-

There are a number of ways you can install WildFly, including unzipping our traditional download zip, provisioning a -custom installation using Galleon, or building a bootable jar. There are also two variants of the server: the standard "WildFly" variant and the tech-preview "WildFly Preview" variant used to showcase things in the works for future release of standard WildFly.

-
-
-

The Installation Guide -helps you identify the kind of WildFly installation that best fits your application’s deployment needs. In this guide -we’ll focus on the common approach of installing the download zip of standard WildFly.

-
-
-

3.1. Download

-
-

WildFly 29 distributions can be obtained from:

-
- -
-

Standard WildFly 29 provides a single distribution available in zip or tar file -formats.

-
-
-
    -
  • -

    wildfly-29.0.0.Final.zip

    -
  • -
  • -

    wildfly-29.0.0.Final.tar.gz

    -
  • -
-
-
-

WildFly Preview 29 also provides a single distribution available in zip or tar file -formats.

-
-
-
    -
  • -

    wildfly-preview-29.0.0.Final.zip

    -
  • -
  • -

    wildfly-preview-29.0.0.Final.tar.gz

    -
  • -
-
-
-
-

3.2. Installation

-
-

Simply extract your chosen download to the directory of your choice. You -can install WildFly 29 on any operating system that supports the zip or -tar formats. Refer to the Release Notes for additional information -related to the release.

-
-
-
-
-
-

4. WildFly - A Quick Tour

-
-
-

Now that you’ve downloaded WildFly 29, the next thing to discuss is the -layout of the distribution and explore the server directory structure, -key configuration files, log files, user deployments and so on. It’s -worth familiarizing yourself with the layout so that you’ll be able to -find your way around when it comes to deploying your own applications.

-
-
-

4.1. WildFly Directory Structure

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DIRECTORYDESCRIPTION

appclient

Configuration files, deployment content, and writable areas -used by the application client container run from this installation.

bin

Start up scripts, start up configuration files and various command -line utilities like elytron-tool, add-user and Java diagnostic report available -for Unix and Windows environments

bin/client

Contains a client jar for use by non-maven based clients.

docs/schema

XML schema definition files

docs/examples/configs

Example configuration files representing -specific use cases

domain

Configuration files, deployment content, and writable areas -used by the domain mode processes run from this installation.

modules

WildFly is based on a modular classloading architecture. -The various modules used in the server are stored here.

standalone

Configuration files, deployment content, and writable areas -used by the single standalone server run from this installation.

welcome-content

Default Welcome Page content

-
-

4.1.1. Standalone Directory Structure

-
-

In " standalone " mode each WildFly 29 server instance is an -independent process (similar to previous JBoss AS versions; e.g., 3, 4, -5, or 6). The configuration files, deployment content and writable areas -used by the single standalone server run from a WildFly installation are -found in the following subdirectories under the top level "standalone" -directory:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DIRECTORYDESCRIPTION

configuration

Configuration files for the standalone server that runs -off of this installation. All configuration information for the running -server is located here and is the single place for configuration -modifications for the standalone server.

data

Persistent information written by the server to survive a restart -of the server

deployments

End user deployment content can be placed in this -directory for automatic detection and deployment of that content into -the server’s runtime.NOTE: The server’s management API is recommended -for installing deployment content. File system based deployment scanning -capabilities remain for developer convenience.

lib/ext

Location for installed library jars referenced by applications -using the Extension-List mechanism

log

standalone server log files

tmp

location for temporary files written by the server

tmp/auth

Special location used to exchange authentication tokens with -local clients so they can confirm that they are local to the running AS -process.

-
-
-

4.1.2. Domain Directory Structure

-
-

A key feature of WildFly 29 is the managing multiple servers from a -single control point. A collection of multiple servers are referred to -as a " domain ". Domains can span multiple physical (or virtual) -machines with all WildFly instances on a given host under the control of -a Host Controller process. The Host Controllers interact with the Domain -Controller to control the lifecycle of the WildFly instances running on -that host and to assist the Domain Controller in managing them. The -configuration files, deployment content and writeable areas used by -domain mode processes run from a WildFly installation are found in the -following subdirectories under the top level "domain" directory:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DIRECTORYDESCRIPTION

configuration

Configuration files for the domain and for the Host -Controller and any servers running off of this installation. All -configuration information for the servers managed wtihin the domain is -located here and is the single place for configuration information.

content

an internal working area for the Host Controller that controls -this installation. This is where it internally stores deployment -content. This directory is not meant to be manipulated by end users.Note -that "domain" mode does not support deploying content based on scanning -a file system.

lib/ext

Location for installed library jars referenced by applications -using the Extension-List mechanism

log

Location where the Host Controller process writes its logs. The -Process Controller, a small lightweight process that actually spawns the -other Host Controller process and any Application Server processes also -writes a log here.

servers

Writable area used by each Application Server instance that -runs from this installation. Each Application Server instance will have -its own subdirectory, created when the server is first started. In each -server’s subdirectory there will be the following subdirectories:data — information written by the server that needs to survive a restart of the -serverlog — the server’s log filestmp — location for temporary files -written by the server

tmp

location for temporary files written by the server

tmp/auth

Special location used to exchange authentication tokens with -local clients so they can confirm that they are local to the running AS -process.

-
-
-
-

4.2. WildFly 29 Configurations

-
-

4.2.1. Standalone Server Configurations

-
-
    -
  • -

    standalone.xml (default)

    -
    -
      -
    • -

      Jakarta web profile certified configuration with -the required technologies plus those noted in the table above.

      -
    • -
    -
    -
  • -
  • -

    standalone-ha.xml

    -
    -
      -
    • -

      Jakarta web profile certified configuration with -high availability

      -
    • -
    -
    -
  • -
  • -

    standalone-full.xml

    -
    -
      -
    • -

      Jakarta Full Platform certified configuration -including all the required technologies

      -
    • -
    -
    -
  • -
  • -

    standalone-full-ha.xml

    -
    -
      -
    • -

      Jakarta Full Platform certified configuration with -high availability

      -
    • -
    -
    -
  • -
  • -

    standalone-microprofile.xml

    -
    -
      -
    • -

      A configuration oriented toward microservices, providing our -MicroProfile platform implementations combined with Jakarta RESTful Web Services and -technologies Jakarta RESTful Web Services applications commonly use to integrate with -external services.

      -
    • -
    -
    -
  • -
  • -

    standalone-microprofile-ha.xml

    -
    -
      -
    • -

      A configuration oriented toward microservices, similar to -standalone-microprofile.xml but with support for high availability -web sessions and distributed Hibernate second level caching.

      -
    • -
    -
    -
  • -
-
-
-
-

4.2.2. Domain Server Configurations

-
-
    -
  • -

    domain.xml

    -
    -
      -
    • -

      Jakarta full and web profiles available with or -without high availability

      -
    • -
    -
    -
  • -
-
-
-

Important to note is that the domain and standalone modes -determine how the servers are managed not what capabilities they -provide.

-
-
-
-
-
-
-

5. Starting WildFly 29

-
-
-

To start WildFly 29 using the default web profile configuration in " -standalone" mode, change directory to $JBOSS_HOME/bin.

-
-
-
-
./standalone.sh
-
-
-
-

To start the default web profile configuration using domain management -capabilities,

-
-
-
-
./domain.sh
-
-
-
-

5.1. Starting WildFly with an Alternate Configuration

-
-

If you choose to start your server with one of the other provided -configurations, they can be accessed by passing the --server-config -argument with the server-config file to be used.

-
-
-

To use the Full Platform with clustering capabilities, use the following -syntax from $JBOSS_HOME/bin:

-
-
-
-
./standalone.sh --server-config=standalone-full-ha.xml
-
-
-
-

Similarly to start an alternate configuration in domain mode:

-
-
-
-
./domain.sh --domain-config=my-domain-configuration.xml
-
-
-
-

Alternatively, you can create your own selecting the additional -subsystems you want to add, remove, or modify.

-
-
-
-

5.2. Test Your Installation

-
-

After executing one of the above commands, you should see output similar -to what’s shown below.

-
-
-
-
=========================================================================
- 
-  JBoss Bootstrap Environment
- 
-  JBOSS_HOME: /opt/wildfly-10.0.0.Final
- 
-  JAVA: java
- 
-  JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=com.yourkit,org.jboss.byteman -Djava.awt.headless=true
- 
-=========================================================================
- 
-11:46:11,161 INFO  [org.jboss.modules] (main) JBoss Modules version 1.5.1.Final
-11:46:11,331 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final
-11:46:11,391 INFO  [org.jboss.as] (MSC service thread 1-6) WFLYSRV0049: WildFly Full 10.0.0.Final (WildFly Core 2.0.10.Final) starting
-<snip>
-11:46:14,300 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.0.0.Final (WildFly Core 2.0.10.Final) started in 1909ms - Started 267 of 553 services (371 services are lazy, passive or on-demand)
-
-
-
-

As with previous WildFly releases, you can point your browser to -http://localhost:8080 (if using the default configured http port) -which brings you to the Welcome Screen:

-
-
-

wildfly.png

-
-
-

From here you can access links to the WildFly community documentation -set, stay up-to-date on the latest project information, have a -discussion in the user forum and access the enhanced web-based -Administration Console. Or, if you uncover a defect while using WildFly, -report an issue to inform us (attached patches will be reviewed). This -landing page is recommended for convenient access to information about -WildFly 29 but can easily be replaced with your own if desired.

-
-
-
-
-
-

6. Managing your WildFly 29

-
-
-

WildFly 29 offers two administrative mechanisms for managing your -running instance:

-
-
-
    -
  • -

    a web-based Administration Console

    -
  • -
  • -

    a command-line interface

    -
  • -
-
-
-

The Admin Guide covers the details on managing your WildFly -installation. Here we’ll just touch on some of the basics.

-
-
-

6.1. Authentication

-
-

By default WildFly 29 is distributed with security enabled for the -management interfaces. This means that before you connect using the -administration console or remotely using the CLI you will need to add a -new user. This can be achieved simply by using the add-user.sh script -in the bin folder.

-
-
-

After starting the script you will be guided through the process to add -a new user: -

-
-
-
-
./add-user.sh
-What type of user do you wish to add?
- a) Management User (mgmt-users.properties)
- b) Application User (application-users.properties)
-(a):
-
-
-
-

In this case a new user is being added for the purpose of managing the -servers so select option a.

-
-
-

You will then be prompted to enter the details of the new user being -added: -

-
-
-
-
Enter the details of the new user to add.
-Realm (ManagementRealm) :
-Username :
-Password :
-Re-enter Password :
-
-
-
-

It is important to leave the name of the realm as 'ManagementRealm' as -this needs to match the name used in the server’s configuration. For the -remaining fields enter the new username, password and password -confirmation.

-
-
-

Users can be associated with arbitrary groups of your choosing, so you will be prompted if you would like -to do this.

-
-
-
-
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]:
-
-
-
-

Groups can be useful for simplified administration of things like access permissions, but for simply getting -started, leaving this blank is fine.

-
-
-

Provided there are no errors in the values entered you will then be -asked to confirm that you want to add the user, the user will be written -to the properties files used for authentication and a confirmation -message will be displayed.

-
-
-

The modified time of the properties files are inspected at the time of -authentication and the files reloaded if they have changed. For this -reason you do not need to re-start the server after adding a new user.

-
-
-

Finally, you will be asked whether the account you’ve added is going to be to used -to identify one WildFly process to another, typically in a WildFly managed domain:

-
-
-
-
Is this new user going to be used for one AS process to connect to another AS process?
-e.g. for a secondary host controller connecting to the primary or for a Remoting connection for server to server Jakarta Enterprise Beans calls.
-yes/no?
-
-
-
-

The answer for this should be no; the account you are adding here is for use by a human administrator.

-
-
-
-

6.2. Administration Console

-
-

To access the web-based Administration Console, simply follow the link -from the Welcome Screen. To directly access the Management Console, -point your browser at:

-
- -
- - - - - -
- - -port 9990 is the default port configured. -
-
-
-
-
<management-interfaces>
-    <http-interface http-authentication-factory="management-http-authentication">
-        <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
-        <socket-binding http="management-http"/>
-    </http-interface>
-</management-interfaces>
-
-
-
-

If you modify the management-http socket binding in your running -configuration: adjust the above command accordingly. If such -modifications are made, then the link from the Welcome Screen will also -be inaccessible.

-
-
-
-

6.3. Command-Line Interface

-
-

If you prefer to manage your server from the command line (or batching), -the jboss-cli.sh script provides the same capabilities available via -the web-based UI. This script is accessed from $JBOSS_HOME/bin -directory; e.g.,

-
-
-
-
$JBOSS_HOME/bin/jboss-cli.sh --connect
-Connected to standalone controller at localhost:9990
-
-
-
-

Notice if no host or port information provided, it will default to -localhost:9990.

-
-
-

When running locally to the WildFly process the CLI will silently -authenticate against the server by exchanging tokens on the file system, -the purpose of this exchange is to verify that the client does have -access to the local file system. If the CLI is connecting to a remote -WildFly installation then you will be prompted to enter the username and -password of a user already added to the realm.

-
-
-

Once connected you can add, modify, remove resources and deploy or -undeploy applications. For a complete list of commands and command -syntax, type help once connected.

-
-
-
-

6.4. Deploying an Application

-
-

WildFly provides a number of ways you can deploy your application into the server. -These are covered in detail in the Admin Guide.

-
-
-

If you are running a standalone WildFly server, the simplest way to deploy -your application is to copy the application archive (war/ear/jar) into the $JBOSS_HOME/standalone/deployments -directory in the server installation. The server’s deployment-scanner subsystem will detect -the new file and deploy it.

-
-
- - - - - -
- - -If you are running a WildFly managed domain, the deployment-scanner subsystem is not -available so you will need to use the CLI or web console to deploy your application. For more, -see the Admin Guide. -
-
-
-
-

6.5. Modifying the Example DataSource

-
-

As with previous JBoss application server releases, a default data -source, ExampleDS , is configured using the embedded H2 database for -developer convenience. There are two ways to define datasource -configurations:

-
-
-
    -
  1. -

    as a module

    -
  2. -
  3. -

    as a deployment

    -
  4. -
-
-
-

In the provided configurations, H2 is configured as a module. The module -is located in the $JBOSS_HOME/modules/com/h2database/h2 directory. The -H2 datasource configuration is shown below.

-
-
-
-
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
-    <datasources>
-        <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS">
-            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
-            <driver>h2</driver>
-            <pool>
-                <min-pool-size>10</min-pool-size>
-                <max-pool-size>20</max-pool-size>
-                <prefill>true</prefill>
-            </pool>
-            <security>
-                <user-name>sa</user-name>
-                <password>sa</password>
-            </security>
-        </datasource>
-        <xa-datasource jndi-name="java:jboss/datasources/ExampleXADS" pool-name="ExampleXADS">
-           <driver>h2</driver>
-           <xa-datasource-property name="URL">jdbc:h2:mem:test</xa-datasource-property>
-           <xa-pool>
-                <min-pool-size>10</min-pool-size>
-                <max-pool-size>20</max-pool-size>
-                <prefill>true</prefill>
-           </xa-pool>
-           <security>
-                <user-name>sa</user-name>
-                <password>sa</password>
-           </security>
-        </xa-datasource>
-        <drivers>
-            <driver name="h2" module="com.h2database.h2">
-                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
-            </driver>
-        </drivers>
-  </datasources>
-</subsystem>
-
-
-
-

The datasource subsystem is provided by the -IronJacamar project. For a detailed -description of the available configuration properties, please consult -the project documentation.

-
- -
-
-

6.6. Configure Logging in WildFly

-
-

WildFly logging can be configured with the web console or the command -line interface. You can get more detail on the Logging -Configuration page.

-
-
-

Turn on debugging for a specific category with the CLI:

-
-
-
-
/subsystem=logging/logger=org.jboss.as:add(level=DEBUG)
-
-
-
-

In the example above the org.jboss.as log category was configured. Use a different value -for the logger key to configure a different log category.

-
-
-

By default, the server.log is configured to include all levels in its -log output. In the above example we changed the console to also display -debug messages.

-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Getting_Started_Guide.html

+ \ No newline at end of file diff --git a/29/Getting_Started_on_OpenShift.html b/29/Getting_Started_on_OpenShift.html index 4528a4428..017d629d5 100644 --- a/29/Getting_Started_on_OpenShift.html +++ b/29/Getting_Started_on_OpenShift.html @@ -1,887 +1,11 @@ - - - - - -Getting Started with WildFly on OpenShift - - - - - - - -
-
-
-
-

This guide is designed to assist you through obtaining an OpenShift instance and installing WildFly, complete with a deployed application. It is not intended to cover all possible configurations, as links to more detailed documentation will be provided.

-
-
-
-
-

Obtaining an OpenShift Instance

-
-

There are many options available for running OpenShift. This guide will mention two.

-
-
-
Code-ready-containers
-
-

If you wish to run a local development environment, then CRC is likely to be a good starting point.

-
-
-
-
Developer sandbox
-
-

The Red Hat OpenShift Developer Sandbox is a hosted environment, and is free to use for development purposes.

-
-
-

This guide will focus on usage of the hosted developer sandbox environment. The sandbox should be provisioned from the page above before proceeding further.

-
-
-
-
-

OpenShift

-
-

In order to use OpenShift effectively, in addition to a running instance, you will need the OpenShift web console. To access this tool, from your OpenShift sandbox click the terminal icon (i.e. >_) at the top right of your sandbox portal. A terminal tab will pop up at the bottom of the page.

-
-
-

It is also possible to use the OpenShift command line terminal locally (oc command). This may be obtained from your package manager or downloaded from your OpenShift sandbox (in your control panel, clicking on the question mark icon at the top right of the console presents a drop-down menu where Command line tools takes you to the latest version of oc).

-
-
- - - - - -
- - -If you have already installed oc on your machine, make sure that its version matches the version of the sandbox. You can use oc version to check both the version of oc and the version of the sandbox. Another way to check the version of the sandbox is by clicking on the question mark icon at the top right of the web console and then clicking on About in the drop-down menu: the OpenShift version will be listed there. -
-
-
-

Once you have downloaded and installed/unpacked the client, you can authenticate to your running sandbox OpenShift instance by using the Copy Login Command from the upper right menu in the sandbox user-interface (your username is displayed there.)

-
-
-

Example:

-
-
-
-
oc login --token=sha256~b-3av_0Lp8wmJu0G3WXzdfds34454mkvWjRRESd_jHTA --server=https://api.sandbox.x8i5.p1.openshiftapps.com:6443
-
-
-
-

We’ll be using the someuser-dev project for this example (someuser should be replaced with the username of the user):

-
-
-
-
oc project someuser-dev
-Already on project "someuser-dev" on server "https://api.sandbox.x8i5.p1.openshiftapps.com:6443"
-
-
-
-

In the OpenShift sandbox, it is not possible to create a new project but, in case you are running your own OpenShift, the command to create a new project is:

-
-
-
-
oc new-project <project name>
-
-
-
-
-

Helm Charts

-
-

Helm provides an easy way to manage and share applications on Kubernetes and OpenShift. We will use it to deploy our example applications to OpenShift.

-
-
-
Install Helm and Helm Charts
-
-

See the instructions for installing Helm here. Helm is installed on your local system as a command, which we will use to install the WildFly Charts. Once Helm is installed, we can proceed to use it to install the Helm Charts in our OpenShift instance:

-
-
-
-
helm repo add wildfly https://docs.wildfly.org/wildfly-charts/
-
-
-
-

For more information on the WildFly Helm Charts, see this blog post and the WildFly Helm Charts documentation

-
-
-
-
-

Example: To-do Quickstart

-
-
-

The first example we will build and deploy to OpenShift is the todo-backend quickstart. This quickstart provides documentation for installing via Helm, so only a brief version is detailed below.

-
-
-

First, we need to provision a database instance, in this case PostgresSQL:

-
-
-
-
oc new-app postgresql-ephemeral \
-   -p DATABASE_SERVICE_NAME=todos-db \
-   -p POSTGRESQL_DATABASE=todos
-
-
-
-

Next we use the WildFly Helm Charts to build and deploy our quickstart:

-
-
-
-
helm install todo-backend -f https://raw.githubusercontent.com/wildfly/wildfly-charts/main/examples/todo-backend/todo-backend-bootable-jar.yaml wildfly/wildfly
-
-
-
- - - - - -
- - -Note that your Deployment will report "ErrImagePull" and "ImagePullBackOff" until the build is complete. Once the build is complete, your image will be automatically rolled out. -
-
-
-

It is possible to use a specific quickstart tag in case the user does not want to use the main branch. To do so, add the following option to the above command:

-
-
-
-
--set build.ref={WildFlyQuickStartRepoTag}
-
-
-
-

Take a look at the bootable-jar-openshift profile configuration in the todo-backend quickstart’s pom.xml. The Maven profile named bootable-jar-openshift is used by the Helm chart to provision the server with the quickstart deployed. Notice the wildfly-jar-maven-plugin configuration defined in this profile. It specifies the layer that should be used when provisioning WildFly. For more details about this, take a look at the Architecture section in the quickstart’s README.

-
-
-

We have named this application todo-backend. This may be changed to a different name, if desired.

-
-
-

The application will now begin to build. The build can be observed via:

-
-
-
-
oc get build -w
-
-
-
-

It may take few minutes to build the application. Once the build is complete, deployment will begin and can be observed via:

-
-
-
-
oc get deployment todo-backend -w
-
-
-
-

Once deployment is complete, we need to query the route for this application to access it on the Internet. To do so, run:

-
-
-
-
oc get route todo-backend -o jsonpath="{.spec.host}"
-
-
-
-

Expected output:

-
-
-
-
todo-backend-someuser-dev.apps.sandbox.x8i5.p1.openshiftapps.com
-
-
-
-

The above command returns back a public address that points to the application deployed to the OpenShift cluster of the user (for example):

-
-
-
-
https://todo-backend-someuser-dev.apps.sandbox.x8i5.p1.openshiftapps.com
-
-
-
-

If you want to add entries in your application, use the following command:

-
-
-
-
curl -X POST -H "Content-Type: application/json" -d '{"title":"Deploy_ToDo-BackEnd","completed":false}' https://todo-backend-someuser-dev.apps.sandbox.x8i5.p1.openshiftapps.com
-
-
-
-

You can use the todo-frontend to test out the deployed app using:

-
-
-
-
https://todobackend.com/client/index.html
-
-
-
-

and entering your application URL from above.

-
-
-

If you wish to remove the application when you are done with it, simply run:

-
-
-
-
helm delete todo-backend
-
-
-
-
-
-

Example: jaxrs-client

-
-
-

The second example to build and deploy to OpenShift is the -jaxrs-client quickstart.

-
-
-

First of all, clone the quickstart repo:

-
-
-
-
git clone https://github.com/wildfly/quickstart.git
-cd quickstart/jaxrs-client
-
-
-
-

The WildFly Helm Charts are used to build and deploy jaxrs-client. The following command installs a Helm Release from the WildFly Helm Charts into an OpenShift cluster:

-
-
-
-
helm install jaxrs-client-from-chart -f charts/helm.yaml wildfly/wildfly
-
-
-
- - - - - -
- - -Note that your Deployment will report "ErrImagePull" and "ImagePullBackOff" until the build is complete. Once the build is complete, your image will be automatically rolled out. -
-
-
-

This time, the name of the Helm Chart app is jaxrs-client-from-chart. (Of course, this may be changed to a different name, if desired.)

-
-
-

The application will now begin to build. The build can be observed via:

-
-
-
-
oc get build -w
-
-
-
-

It may take few minutes to build the application. Once the build is complete, to follow the deployment of the application, run:

-
-
-
-
oc get deployment jaxrs-client-from-chart -w
-
-
-
-

Once deployment is complete, we need to query the route for this application to access it on the Internet. To do so, run:

-
-
-
-
oc get route jaxrs-client-from-chart -o jsonpath="{.spec.host}"
-
-
-
-

The above command returns back a public address that points to the application deployed to the OpenShift cluster of the user (for example):

-
-
-
-
jaxrs-client-from-chart-someuser-dev.apps.sandbox.x8i5.p1.openshiftapps.com
-
-
-
-

At this point, defining a env variable for simplicity, it is possible to test the REST endpoint that has been deployed into the OpenShift cluster:

-
-
-
-
export ROUTE=$(oc get route jaxrs-client-from-chart -o jsonpath="{.spec.host}")
-
-
-
-

and use curl to send HTTP method requests to the REST endpoint, for example (GET):

-
-
-
-
curl -L $ROUTE/rest/contacts
-
-
-
-

To run the quickstart’s Arquillian integration tests to validate that the quickstart has been set up correctly:

-
-
-
-
mvn clean verify -Parq-remote -Dserver.host=https://$(oc get route jaxrs-client-from-chart --template='{{ .spec.host }}')
-
-
-
-

Take a look at the openshift profile configuration in the jaxrs-client quickstart’s pom.xml. The Maven profile named openshift is used by the Helm chart to provision the server with the quickstart deployed. Notice the wildfly-maven-plugin configuration defined in this profile. It specifies the layer that should be used when provisioning WildFly. For more details about this, take a look at the wildfly-maven-plugin documentation.

-
-
-

If you wish to remove the application when you are done with it, simply run:

-
-
-
-
helm uninstall jaxrs-client-from-chart
-
-
-
-
-
-

References

-
- -
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Getting_Started_on_OpenShift.html

+ \ No newline at end of file diff --git a/29/Glossary.html b/29/Glossary.html index e6b4688b0..d93244eaf 100644 --- a/29/Glossary.html +++ b/29/Glossary.html @@ -1,480 +1,11 @@ - - - - - -Glossary - - - - - - -
-
-

Module

-
-
-

A logical grouping of classes used for classloading and dependency -management in WildFly 10. Modules can be dynamic or static.

-
-
-

Static Modules are the predefined modules installed in the modules/ -directory of the application server.

-
-
-

Dynamic Modules are created by the application server for each -deployment (or sub-deployment in an EAR).

-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Glossary.html

+ \ No newline at end of file diff --git a/29/Hacking_On_WildFly.html b/29/Hacking_On_WildFly.html index 5e77fd154..1d05c5c05 100644 --- a/29/Hacking_On_WildFly.html +++ b/29/Hacking_On_WildFly.html @@ -1,1313 +1,11 @@ - - - - - - -Hacking on WildFly - - - - - - - -
-
-
-
-

© 2021 The original authors.

-
- -
-
-
-

1. Target Audience

-
-
-

This document is a guide to the setup of Github, preparing and developing changes and contributing -to WildFly.

-
-
-

This guide assumes you know how to deal with the CLI of your OS, for example the Linux bash or MacOS zsh.

-
-
-
-
-

2. Prerequisites

-
-
-

You are very welcome to improve WildFly, please read why:

-
-
- -
-
-

2.1. GitHub account

-
-

Create a GitHub account if you don’t have one already -Signing up for a new GitHub account

-
-
-

Create a Personal Access Token to work with on the command line. -Account Security - Creating a personal access token

-
-
-
-

2.2. Jira account

-
-

Create an account for Red Hat’s Jira [https://issues.redhat.com/] Choose "Sign up"

-
-
-
-
-
-

3. Getting started

-
-
-

3.1. Fork

-
-

Fork wildfly repository into your account QuickStart - Fork a repo

-
- -
-
-

3.2. Clone

-
-

Clone your newly forked copy onto your local workspace

-
-
-
-
$ git clone git@github.com:[your user]/wildfly.git
-Cloning into 'wildfly'...
-remote: Counting objects: 533023, done.
-remote: Compressing objects: 100% (170/170), done.
-remote: Total 533023 (delta 60), reused 0 (delta 0), pack-reused 532777
-Receiving objects: 100% (533023/533023), 140.25 MiB | 1.75 MiB/s, done.
-Resolving deltas: 100% (210143/210143), done.
-Checking connectivity... done.
-
-$ cd wildfly
-
-
-
-
-

3.3. Remote

-
-

Add a remote ref to upstream, for pulling future updates

-
-
-
-
git remote add upstream git@github.com:wildfly/wildfly.git
-
-
-
-
-

3.4. Safety

-
-

As a precaution, disable merge commits to your main

-
-
-
-
git config branch.main.mergeoptions --ff-only
-
-
-
-
-

3.5. Working with git later

-
-

3.5.1. Pulling updates

-
-

Pulling later updates from upstream

-
-
-
-
$ git checkout -f main
-$ git pull --rebase upstream main
-From github.com:wildfly/wildfly
- * branch            main     -> FETCH_HEAD
-Updating 3382570..1fa25df
-Fast-forward
- {parent => bom}/pom.xml                            |   70 ++++----------
- build/pom.xml                                      |   13 +--
- domain/pom.xml                                     |   10 ++
- .../src/main/resources/examples/host-example.xml   |    2 +-
- .../resources/examples/jboss-domain-example.xml    |   28 +++---
- .../main/resources/schema/jboss-domain-common.xsd  |   12 +--
- .../main/resources/schema/jboss-domain-host.xsd    |    2 +-
- domain/src/main/resources/schema/jboss-domain.xsd  |   17 ++--
- pom.xml                                            |  100 ++++++++++++++++++--
- process-manager/pom.xml                            |    3 +-
- 10 files changed, 156 insertions(+), 101 deletions(-)
- rename {parent => bom}/pom.xml (85%)
-
-
-
-

(--rebase will automatically move your local commits, if you have any, on top of the latest branch you pull from, you can leave it off if you do not).

-
-
-

Best practice is to never add your own commits to your local 'main' branch. Instead create a topic branch from 'main' and add commits to your topic branch. Only use your local 'main' to track the current state of the 'upstream' remote’s 'main' branch.

-
-
-

Please note that --rebase is very important if you do have commits. What happens is that when git pull can’t fast forward, it does a merge commit, and a merge commit puts the sucked in changes ON TOP of yours whereas a rebase puts them BELOW yours. In other words a merge commit makes the history a graph, and we prefer a cleaner, easier to follow linear history (hence the rebasing). Further once you do a merge commit it will be difficult to rebase the history before that commit (say you want to combine two commits to one later) as described in "Commit and push". Luckily the option set in step Safety will prevent this from happening.

-
-
-

One way to not forget --rebase the rebase option is you may want to create an alias

-
-
-
-
 $ git config --global alias.up "pull --rebase"
-
-
-
-

and then just use the new alias instead of pull

-
-
-
-
$ git up upstream main
-
-
-
-

One last option, which some prefer, is to avoid using pull altogether, and just use fetch + rebase (this is of course more typing) -For some reasons tags are not updated (e.g. not part of an active branch). Update the tags with

-
-
-
-
$ git fetch --tags upstream
-
-
-
-
-

3.5.2. Rebasing a feature branch

-
-

Assume you have a feature branch WFLY-815_upgrade_sample_dep and you have rebased the local main branch to be up to date with upstream main as described before.

-
-
-
-
git checkout -f WFLY-815_upgrade_sample_dep
-git rebase upstream/main
-
-
-
-

Do not pull the upstream main to your local feature branch! You’ll be stuck in duplicate commit hell.

-
-
-
-

3.5.3. Push

-
-

Pushing pulled updates (or local commits if you aren’t using topic branches) to your private github repo (origin)

-
-
-
-
$ git push
-Counting objects: 192, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (44/44), done.
-Writing objects: 100% (100/100), 10.67 KiB, done.
-Total 100 (delta 47), reused 100 (delta 47)
-To git@github.com:[your user]/wildfly.git
-   3382570..1fa25df  main -> main
-
-
-
-

You might need to say -f to force the changes. Read Topic Branch though before you do it.

-
-
-

If you fetch the tags separately you have to push the tags also. Consider if you need them in your personal GitHub repository.

-
-
-
-
git push --tags
-
-
-
-
-
-
-
-

4. Development environment

-
-
- -
-
-
-
-

5. Maven

-
-
-

Use maven. Simplest is to use the build.sh or build.bat scripts in the root of the source tree. If you don’t use those scripts and use the mvn command directly, note that WildFly’s root pom will enforce a minimum maven version.

-
-
-

Building WildFly requires Java 11 or newer. Make sure you have JAVA_HOME set to point to the JDK11 installation. Build uses Maven 3.

-
-
-
-
$ ./build.sh
-.....
-[INFO] ------------------------------------------------------------------------
-[INFO] Reactor Summary:
-[INFO]
-[INFO] WildFly: BOM ..................... SUCCESS [1.834s]
-[INFO] WildFly: Parent Aggregator ....... SUCCESS [0.022s]
-[INFO] WildFly: Domain Core ............. SUCCESS [3.051s]
-[INFO] WildFly: Server Manager .......... SUCCESS [0.204s]
-[INFO] WildFly: Server .................. SUCCESS [0.283s]
-[INFO] WildFly: Domain Controller ....... SUCCESS [0.084s]
-[INFO] WildFly: Process Manager ......... SUCCESS [0.314s]
-[INFO] WildFly: Remoting ................ SUCCESS [0.390s]
-[INFO] WildFly: Build ................... SUCCESS [5.696s]
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-
-
-
-
-
-

6. Community interaction

-
-
-

Discuss your planned changes (if you want feedback)

-
-
- -
-
-

Getting feedback first is recommended before starting on any large-scale work. Large scale could mean many things including a complex change in a focused area, or a simple change made in many different parts of the code base.

-
-
-

Getting feedback first is strongly recommended before beginning work on a new feature. Any change that introduces new user-controllable behavior will be regarded as a new feature. Before merging new features we require a larger set of inputs than are required for other types of fixes, including a formal requirements analysis, a more formally considered plan for testing, and appropriate additions to the WildFly documentation. Before getting too far along with a feature it is best to discuss with other WildFly developers what’s needed and how best to ensure those things can be delivered.

-
-
-
-
-

7. IDE Integration

-
-
-

7.1. Eclipse

-
-

The "formal" rules to format code are based on Eclipse. You can find them here WildFly Core IDE Eclipse Configuration

-
-
-
    -
  1. -

    in Eclipse go to Window → Preferences → Java → Code Style → Formatter.

    -
  2. -
  3. -

    click Import.

    -
  4. -
  5. -

    select formatting rules which you have downloaded

    -
  6. -
-
-
-

Same for cleanup and templates

-
-
-
-

7.2. IntelliJ IDEA

-
-

7.2.1. Code Formatter

-
-

There is a plugin for IntelliJ to use the Eclipse formatter: Eclipse Code Formatter

-
-
-
-

7.2.2. Import WildFly as Maven project in IntelliJ IDEA

-
-

Before importing you have to set the VM Options of the IntelliJ Maven importer. Please follow this guide https://www.jetbrains.com/help/idea/maven-importing.html and add -DallTests to the field VM options for importer. -This is necessary because the testsuite poms do not contain all necessary modules by default.

-
-
-
-
-
-
-

8. Jira

-
-
-

Make sure there is a JIRA somewhere for the enhancement/fix

-
-
- -
-
-

8.1. Good First Issues

-
-

Want to contribute to the WildFly project but aren’t quite sure where to start? Check out our issues with the good-first-issue label. These are a triaged set of issues that are great for getting started on our project.

-
-
-

Once you have selected an issue you’d like to work on, make sure it’s not already assigned to someone else. If you’ve resolved a WildFly issue before, to assign an issue to yourself, you should be able to simply click on "Start Progress" or Change the assignee by clicking on "Assign to me". This will automatically assign the issue to you. If you haven’t resolved an issue before, please start a thread expressing your interest in the issue in the wildfly-developers stream in zulip.

-
-
-
-

8.2. Special cases

-
-

For component upgrades select this type for the Jira. The title must reflect the library and the new version. -In the description please offer a links to the release notes, the git tag diff.

-
-
-

If you are aware that the component upgrade brings a fix for CVE, it’s good to note that in the JIRA title, as later that will make this information more visible in the WildFly release notes.

-
-
-
-
Sample title: Upgrade netty.io 4.1.68 (resolves [CVE-2021-37136|https://github.com/advisories/GHSA-grg4-wf29-r9vv], [CVE-2021-37136|https://github.com/advisories/GHSA-grg4-wf29-r9vv])
-Jira Body:
-Release Notes [https://netty.io/news/2021/09/09/4-1-68-Final.html]
-GitDiff [https://github.com/netty/netty/compare/netty-4.1.67.Final...netty-4.1.68.Final]
-
-
-
-
-
-
-

9. Heaven - Coding

-
-
-

9.1. Topic branch

-
-

Create a simple topic branch to isolate that work

-
-
-
-
git checkout -b WFLY-XXXX_my_cool_feature
-
-
-
-
-

9.2. Code

-
-

9.2.1. Extending WildFly

-
-

There is an excellent documentation and guide Extending WildFly and you can rely on Maven Archetypes to generate a skeleton WildFly Subsystem Archetype.

-
-
-
-

9.2.2. Adding a new external dependency

-
-

Take care that maintainers agree to pick up a new dependency.

-
-
-
    -
  • -

    Edit pom.xml and add a property of the form "version.groupId.artifactId" which contains the Maven version of the dependency. Add your new property in the proper alphabetical order with respect to the existing version properties. Add your dependency to the <dependencyManagement> section, and use the property for the version. If your new dependency has any transitive dependencies, be sure to <exclude> them (or if possible, update the project so that all its dependencies are of provided scope).

    -
  • -
  • -

    Add your dependency to any AS modules that require it, but only with group/artifact. If your dependency will be provided by an existing WildFly module, add a new artifact element to the module.xml file for the existing module, with the value of the element’s name attribute an expression of the form ${groupId:artifactId}

    -
  • -
  • -

    In the pom.xml file for the maven module where you added a new module.xml or updated an existing one for your new dependency, add a new dependency entry to the pom’s dependencies section.

    -
  • -
  • -

    If your dependency will be provided by a new WildFly module, create a directory in the relevant feature-pack maven module, e.g. ee-feature-pack/common/src/main/resources/modules/system/layers/base/ corresponding to the module’s name (which will differ from the Maven group/artifact name; look at other modules to get a feel for the naming scheme), with a version of "main", like this: modules/system/layers/base/org/jboss/foo/main. If the correct maven module to choose for your new directory is unclear, be sure to ask!

    -
  • -
  • -

    Create a module.xml file inside the "main" directory. Use a module.xml from another similar module as a template. JBoss Modules Reference Documentation

    -
  • -
  • -

    Important: Make sure you did not introduce any transitive dependencies by using "mvn dependency:tree". If you did, be sure to add <exclusion>s for each of them to your dependency as described above.

    -
  • -
  • -

    Important: Do not introduce a dependency on the "system" module. The JBoss Modules reference manual lists JDK packages. Please avoid deprecated packages.

    -
  • -
  • -

    Add license information to the license declaration file located in the maven module whose pom you just updated. For example, if you added a dependency entry to ee-feature-pack/common/pom.xml, please add an entry to ee-feature-pack/common/src/license/ee-feature-pack-common-licenses.xml. Add a new element in the appropriate spot. The elements are ordered by the maven groupId and artifactId of the entries. If the needed content for the entry is unclear, be sure to ask!

    -
  • -
-
-
-
-

9.2.3. Commit and push

-
-

Make the changes and commit one or more times (Don’t forget to push)

-
-
-
-
git commit -m 'WFLY-XXXX Frunubucate the Fromungulator'
-First time: git push --set-upstream origin WFLY-XXXX_my_cool_feature
-Second and ongoing: git push origin WFLY-XXXX_my_cool_feature
-
-
-
-

Note that git push references the branch you are pushing and defaults to main, not your working branch.

-
-
-
-
-

9.3. Rebase topic branch on latest main

-
-

Rebase your branch against the latest main (applies your patches on top of main)

-
-
-
-
git fetch upstream
-git rebase -i upstream/main
-# if you have conflicts fix them and rerun rebase
-# The -f, forces the push, alters history, see note below
-git push -f origin WFLY-XXXX_my_cool_feature
-
-
-
-

The -i triggers an interactive update which also allows you to combine commits, alter commit messages etc. It’s a good idea to make the commit log very nice for external consumption. Note that this alters history, which while great for making a clean patch, is unfriendly to anyone who has forked your branch. Therefore you want to make sure that you either work in a branch that you don’t share, or if you do share it, tell them you are about to revise the branch history (and thus, they will then need to rebase on top of your branch once you push it out).

-
-
-
-
-
-

10. Quality and Testing

-
-
-

A must read is the WildFly Testsuite documentation. It will save you time and nerves.

-
-
-

10.1. Checkstyle Errors

-
-

If you need to first verify that your changes pass the checkstyle audit, do this first.

-
-
-
-
mvn checkstyle:checkstyle
-
-
-
-

Then you can proceed with the build.

-
-
-
-

10.2. How do I ensure that my code does not blow up the testsuite?

-
-

First try to run the tests as part of the build before sending a pull request.

-
-
-
-
$> ./build.sh clean install -DallTests
-
-
-
-

Sometimes there are test failures that are not related to your code changes. Most times it’s your code change. Try to discuss this on Zulip.

-
-
-

You can get a full run using

-
-
-
-
$> ./build.sh clean install -DallTests -fae
-
-
-
-

This additional option will allow the build to continue even when there are test failures. Doing this, you can get a stock of all the test failures and figure out how many are related to your code changes.

-
-
-
-
-
-

11. Pull requests to upstream

-
-
-

Get your changes merged into upstream

-
-
-
    -
  • -

    Read the documentation to ensure that you follow a good Pull Request Standards WildFly Pull Request Standards and Guidelines

    -
  • -
  • -

    Make sure your repo is in sync with other unrelated changes in upstream before requesting your changes be merged into upstream by repeating Rebase topic branch on latest main.

    -
  • -
  • -

    Send a github pull request, by clicking the pull request link while in your repo’s fork. Quickstart - Create a pull request

    -
  • -
  • -

    In general, WildFly maintainers are watching the project, so they will receive a notification on each new PR.

    -
  • -
  • -

    As part of the review you may see an automated test run comment on your request.

    -
  • -
  • -

    After review a maintainer will merge your patch, update/resolve issues by request, and reply when complete

    -
  • -
  • -

    Don’t forget to switch back to main and pull the updates

    -
  • -
-
-
-
-
git checkout main
-git pull --ff-only upstream main
-
-
-
-

Update the main branch of your github repository (otherwise you will see a message like 'Your branch is ahead of 'origin/main' by XXX commits.' -if you use 'git status' on your local main branch.

-
-
-
-
git push origin main
-
-
-
-
-
-

12. WildFly Pull Request Standards and Guidelines

-
-
-

12.1. Describe the pull request adequately

-
-

The PR title should include a JIRA number directly from the project in question, whose corresponding JIRA issue will in turn have been linked to the pull request you are just now creating. The description should include a link to the JIRA. The description should also include a decent, human-readable summary of what is changing. Proper spelling and grammar is a plus!

-
-
-

Sample PR -[WFLY-815] This is the sample title

-
- -
-

12.1.1. Commit message

-
-

The commit message for each commit should also reference a JIRA number.

-
-
-
-
-

12.2. Make sure it builds and tests pass first

-
-

It is highly annoying to reviewers when they find they’ve spent a great deal of time reviewing some code only to discover that it doesn’t even compile. In particular, it’s common for a patch to trip CheckStyle if it hadn’t been previously compile-tested at the least.

-
-
-

While it is tempting to rely on the automated CI/GitHub integration to do our build and test for us (and I’m guilty of having done this too), it generally just causes trouble, so please don’t do it!

-
-
-
-

12.3. Separate your changes - but not too much

-
-

This comes directly from [1], and I agree with it 100% (where the source document says "patch", think "commit"):

-
-
-
-
-

Separate each logical change into a separate patch. -For example, if your changes include both bug fixes and performance enhancements for a single driver, separate those changes into two or more patches. If your changes include an API update, and a new driver which uses that new API, separate those into two patches. -On the other hand, if you make a single change to numerous files, group those changes into a single patch. Thus a single logical change is contained within a single patch. -The point to remember is that each patch should make an easily understood change that can be verified by reviewers. Each patch should be justifiable on its own merits. -If one patch depends on another patch in order for a change to be complete, that is OK. Simply note "this patch depends on patch X" in your patch description. -When dividing your change into a series of patches, take special care to ensure that [WildFly] builds and runs properly after each patch in the series. Developers using "git bisect" to track down a problem can end up splitting your patch series at any point; they will not thank you if you introduce bugs in the middle. If you cannot condense your patch set into a smaller set of patches, then only post say 15 or so at a time and wait for review and integration.

-
-
-
-
-

I also want to emphasize how important it is to separate functional and non-functional changes. The latter category includes reformatting (which generally should not be done without a strong justification).

-
-
-

12.3.1. Creating per maven-module subtasks and doing one subtask per PR

-
-

If you have one logical change (for example you’re removing manual null checks and put a JDK or utility method instead) which affects more than one top-level maven module, please split them by top-level maven module. -For the logical change description use a top level JIRA (Bug, task, enhancement) and add sub-task for each top-level maven module.

-
-
-

Reason behind: WildFly and WildFly Core have a really huge codebase with several different full-time maintainers to review and approve the code. Afterward different project leads and/or release stewards do merge and Jira management work.

-
-
-

If there is a serious reason to deviate from this rule, please ask before on Zulip.

-
-
-
-
-

12.4. Avoid massive and/or "stream of consciousness" branches

-
-

We all know that development can sometimes be an iterative process, and we learn as we go. Nonetheless, we do not need or want a complete record of all the highs and lows in the history of every change (for example, an "add foobar" commit followed later by a "remove foobar" commit in the same PR) - particularly for large changes or in large projects (like WildFly proper). It is good practice for such change authors to go back and rearrange and/or restructure the commits of a pull request such that they incrementally introduce the change in a logical manner, as one single conceptual change per PR.

-
-
-

Note that this advice is not meant to discourage multiple commits in a single PR that are all steps on the way to an overall complex change. To the contrary, multiple well structured commits are sometimes critical to getting proper review of complex changes. For example a PR to refactor code away from an ill-fitting set of abstractions and to a new set can be difficult to review in a single commit. But doing so can be quite straightforward when broken up into, for example, four commits, one to make some small change to clean up something that would get in the way of the overall change, one introducing the new abstractions, one moving the implementation to the new abstractions, and one removing the old abstractions.

-
-
-

If a PR consists of dozens or hundreds of nontrivial commits, you will want to strongly consider dividing it up into multiple PRs, as PRs of this size simply cannot be effectively reviewed. They will either be merged without adequate review, or outright ignored or closed. Which one is worse, I leave to your imagination.

-
-
-
-

12.5. Pay attention and respond to review comments

-
-

While in general it is my experience that WildFly contributors are good about this, I’m going to quote this passage from [1] regardless:

-
-
-
-
-

Your patch will almost certainly get comments from reviewers on ways in which the patch can be improved. You must respond to those comments; ignoring reviewers is a good way to get ignored in return. […​] -Be sure to tell the reviewers what changes you are making and to thank them for their time. Code review is a tiring and time-consuming process, and reviewers sometimes get grumpy. Even in that case, though, respond politely and address the problems they have pointed out.

-
-
-
-
-

In addition, when something needs to be changed, the proper manner to do so is generally to modify the original commit, not to add more commits to the chain to fix issues as they’re reported. See Avoid massive and/or "stream of consciousness" branches.

-
-
-
-

12.6. Don’t get discouraged

-
-

It may come to pass that you have to iterate on your pull request many times before it is considered acceptable. Don’t be discouraged by this - instead, consider that to be a sign that the reviewers care highly about the quality of the code base. At the same time though, consider that it is frustrating for reviewers to have to say the same things over and over again, so please do take care to provide as high-quality submissions as possible, and see Pay attention and respond to review comments!

-
-
-
-

12.7. You can review code too!

-
-

You don’t have to be an official reviewer in order to review a pull request. If you see a pull request dealing with an area you are familiar with, feel free to examine it and comment as needed. In addition, all pull requests need to be reviewed for basic (non-machine-verifiable) correctness, including noticing bad code, NPE risks, and anti-patterns as well as "boring stuff" like spelling and grammar and documentation.

-
-
-

If you review a PR and you feel you understand it in total and that it is correct, it is helpful to the WildFly mergers if you use the 'Approve' option discussed in the Github pull request review documentation. Don’t worry that your approval will trigger automatic merging; it won’t. It’s just easier for others to see that you regard the PR as correct if you use the Github workflow. (Please don’t, however, use the 'Approve' option if you are not expressing an approval of the PR overall; e.g. if you only looked at one part and made some comments that were addressed. Use comments for that kind of input.)

-
-
-

If you do review a pull request and make suggestions for changes, please do pay attention to the PR and try to acknowledge if your suggestions have been resolved. This is particularly important if it won’t be quickly obvious to others if your input was addressed.

-
-
-
-

12.8. On major refactorings

-
-

When doing major and/or long-term refactors, while rare, it is possible that the above constraints become impractical, especially with regard to grouping changes. In this case, you can use a work branch on a (GitHub) fork of WildFly, applying the above rules in micro-scale to just that branch. In this case you could possibly ask a reviewer to also review some or all of the pull requests to that branch. Merge commits would then be used to periodically synchronize with upstream.

-
-
-

In this way, when the long-term branch is ready to "come home" to the main branch, the reviewers may have a good idea that the (potentially quite numerous) changes in the work branch have been reviewed already.

-
- -
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Hacking_On_WildFly.html

+ \ No newline at end of file diff --git a/29/High_Availability_Guide.html b/29/High_Availability_Guide.html index 48a428419..9a44c97b7 100644 --- a/29/High_Availability_Guide.html +++ b/29/High_Availability_Guide.html @@ -1,5834 +1,11 @@ - - - - - - -High Availability Guide - - - - - - - -
-
-
-
-

© 2017–2022 The original authors.

-
- -
-
-
-

1. Introduction To High Availability Services

-
-
-

1.1. What are High Availability services?

-
-

WildFly’s High Availability services are used to guarantee availability -of a deployed Jakarta EE application.

-
-
-

Deploying critical applications on a single node suffers from two -potential problems:

-
-
-
    -
  • -

    loss of application availability when the node hosting the application -crashes (single point of failure)

    -
  • -
  • -

    loss of application availability in the form of extreme delays in -response time during high volumes of requests (overwhelmed server)

    -
  • -
-
-
-

WildFly supports two features which ensure high availability of critical -Jakarta EE applications:

-
-
-
    -
  • -

    fail-over: allows a client interacting with a Jakarta EE application to -have uninterrupted access to that application, even in the presence of -node failures

    -
  • -
  • -

    load balancing: allows a client to have timely responses from the -application, even in the presence of high-volumes of requests

    -
  • -
-
-
- - - - - -
- - -These two independent high availability services can very effectively -inter-operate when making use of mod_cluster for load balancing! -
-
-
-

Taking advantage of WildFly’s high availability services is easy, and -simply involves deploying WildFly on a cluster of nodes, making a small -number of application configuration changes, and then deploying the -application in the cluster.

-
-
-

We now take a brief look at what these services can guarantee.

-
-
-
-

1.2. High Availability through fail-over

-
-

Fail-over allows a client interacting with a Jakarta EE application to have -uninterrupted access to that application, even in the presence of node -failures. For example, consider a Jakarta EE application which makes use of -the following features:

-
-
-
    -
  • -

    session-oriented servlets to provide user interaction

    -
  • -
  • -

    session-oriented Jakarta Enterprise Beans to perform state-dependent business computation

    -
  • -
  • -

    Jakarta Enterprise Beans entity beans to store critical data in a persistent store (e.g. -database)

    -
  • -
  • -

    SSO login to the application

    -
  • -
-
-
-

If the application makes use of WildFly’s fail-over services, a client -interacting with an instance of that application will not be interrupted -even when the node on which that instance executes crashes. Behind the -scenes, WildFly makes sure that all of the user data that the -application make use of (HTTP session data, Jakarta Enterprise Beans SFSB sessions, -Jakarta Enterprise Beans entities and SSO credentials) are available at other nodes in the -cluster, so that when a failure occurs and the client is redirected to -that new node for continuation of processing (i.e. the client "fails -over" to the new node), the user’s data is available and processing can -continue.

-
-
-

The Infinispan and JGroups subsystems are instrumental in providing -these data availability guarantees and will be discussed in detail later -in the guide.

-
-
-
-

1.3. High Availability through load balancing

-
-

Load balancing enables the application to respond to client requests in -a timely fashion, even when subjected to a high-volume of requests. -Using a load balancer as a front-end, each incoming HTTP request can be -directed to one node in the cluster for processing. In this way, the -cluster acts as a pool of processing nodes and the load is "balanced" -over the pool, achieving scalability and, as a consequence, -availability. Requests involving session-oriented servlets are directed -to the the same application instance in the pool for efficiency of -processing (sticky sessions). Using mod_cluster has the advantage that -changes in cluster topology (scaling the pool up or down, servers -crashing) are communicated back to the load balancer and used to update -in real time the load balancing activity and avoid requests being -directed to application instances which are no longer available.

-
-
-

The mod_cluster subsystem is instrumental in providing support for this -High Availability feature of WildFly and will be discussed in detail -later in this guide.

-
-
-
-

1.4. Aims of the guide

-
-

This guide aims to:

-
-
-
    -
  • -

    provide a description of the high-availability features available in -WildFly and the services they depend on

    -
  • -
  • -

    show how the various high availability services can be configured for -particular application use cases

    -
  • -
  • -

    identify default behavior for features relating to -high-availability/clustering

    -
  • -
-
-
-
-

1.5. Organization of the guide

-
-

As high availability features and their configuration depend on the -particular component they affect (e.g. HTTP sessions, Jakarta Enterprise Beans SFSB sessions, -Hibernate), we organize the discussion around those Jakarta EE features. We -strive to make each section as self-contained as possible. Also, when -discussing a feature, we will introduce any WildFly subsystems upon -which the feature depends.

-
-
-
-
-
-

2. Distributable Web Applications

-
-
-

In a standard web application, session state does not survive beyond the lifespan of the servlet container. -A distributable web application allows session state to survive beyond the lifespan of a single server, either via persistence or by replicating state to other nodes in the cluster. -A web application indicates its intention to be distributable via the <distributable/> element within the web application’s deployment descriptor.

-
-
-

e.g.

-
-
-
/WEB-INF/web.xml:
-
-
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
-         version="4.0">
-    <distributable/>
-</web-app>
-
-
-
-

2.1. Distributable Web Subsystem

-
-

The distributable-web subsystem manages a set of session management profiles that encapsulate the configuration of a distributable session manager. -One of these profiles will be designated as the default profile (via the "default-session-management" attribute) and thus defines the default behavior of a distributable web application.

-
-
-
-
[standalone@embedded /] /subsystem=distributable-web:read-attribute(name=default-session-management)
-{
-    "outcome" => "success",
-    "result" => "default"
-}
-
-
-
-

The default session management stores web session data within an Infinispan cache. -We can introspect its configuration:

-
-
-
-
[standalone@embedded /] /subsystem=distributable-web/infinispan-session-management=default:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "cache" => undefined,
-        "cache-container" => "web",
-        "granularity" => "SESSION",
-        "affinity" => {"primary-owner" => undefined}
-    }
-}
-
-
-
-

2.1.1. Infinispan session management

-
-

The infinispan-session-management resource configures a distributable session manager that uses an embedded Infinispan cache.

-
-
-
-
cache-container
-
-

This references a cache-container defined in the Infinispan subsystem into which session data will be stored.

-
-
cache
-
-

This references a cache within associated cache-container upon whose configuration the web application’s cache will be based. -If undefined, the default cache of the associated cache container will be used.

-
-
granularity
-
-

This defines how the session manager will map a session into individual cache entries. -Possible values are:

-
-
-
SESSION
-
-

Stores all session attributes within a single cache entry. -This is generally more expensive than ATTRIBUTE granularity, but preserves any cross-attribute object references.

-
-
ATTRIBUTE
-
-

Stores each session attribute within a separate cache entry. -This is generally more efficient than SESSION granularity, but does not preserve any cross-attribute object references.

-
-
-
-
-
affinity
-
-

This resource defines the affinity that a web request should have for a given server. -The affinity of the associated web session determines the algorithm for generating the route to be appended onto the session ID (within the JSESSIONID cookie, or when encoding URLs). -This annotation of the session ID is used by load balancers to advise how future requests for existing sessions should be directed. -Routing is designed to be opaque to application code such that calls to HttpSession.getId() always return an unmodified session ID. -This is only generated when creating/updating the JSESSIONID cookie, or when encoding URLs via HttpServletResponse.encodeURL() and encodeRedirectURL(). -Possible values are:

-
-
-
affinity=none
-
-

Web requests will have no affinity to any particular node. -This option is intended for use cases where web session state is not maintained within the application server.

-
-
affinity=local
-
-

Web requests will have an affinity to the server that last handled a request for a given session. -This option corresponds to traditional sticky session behavior.

-
-
affinity=primary-owner
-
-

Web requests will have an affinity to the primary owner of a given session. -This is the default affinity for this distributed session manager. -Behaves the same as affinity=local if the backing cache is not distributed nor replicated.

-
-
affinity=ranked
-
-

Web requests will have an affinity to the first available node in a ranked list comprised of: primary owner, backup nodes, local node (if not a primary nor backup owner). -Only for use with load balancers that support multiple routes. -Behaves the same as affinity=local if cache is not distributed nor replicated.

-
-
-
-
-
marshaller
-
-

Specifies the marshalling implementation used to serialize session attributes.

-
-
-
JBOSS
-
-

Marshals session attributes using JBoss Marshalling.

-
-
PROTOSTREAM
-
-

Marshals session attributes using ProtoStream.

-
-
-
-
-
-
-
-

e.g. Creating a new session management profile, using ATTRIBUTE granularity with local session affinity:

-
-
-
-
[standalone@embedded /] /subsystem=distributable-web/infinispan-session-management=foo:add(cache-container=web, granularity=ATTRIBUTE)
-{
-    "outcome" => "success"
-}
-[standalone@embedded /] /subsystem=distributable-web/infinispan-session-management=foo/affinity=local:add(){allow-resource-service-restart=true}
-{
-    "outcome" => "success"
-}
-
-
-
-
-

2.1.2. HotRod session management

-
-

The hotrod-session-management resource configures a distributable session manager where session data is stored in a remote infinispan-server cluster via the HotRod protocol.

-
-
-
-
remote-cache-container
-
-

This references a remote-cache-container defined in the Infinispan subsystem into which session data will be stored.

-
-
cache-configuration
-
-

If a remote cache whose name matches the deployment name does not exist, this attribute defines a cache configuration within the remote infinispan server, from which an application-specific cache will be created.

-
-
granularity
-
-

This defines how the session manager will map a session into individual cache entries. -Possible values are:

-
-
-
SESSION
-
-

Stores all session attributes within a single cache entry. -This is generally more expensive than ATTRIBUTE granularity, but preserves any cross-attribute object references.

-
-
ATTRIBUTE
-
-

Stores each session attribute within a separate cache entry. -This is generally more efficient than SESSION granularity, but does not preserve any cross-attribute object references.

-
-
-
-
-
affinity
-
-

This resource defines the affinity that a web request should have for a given server. -The affinity of the associated web session determines the algorithm for generating the route to be appended onto the session ID (within the JSESSIONID cookie, or when encoding URLs). -This annotation of the session ID is used by load balancers to advise how future requests for existing sessions should be directed. -Routing is designed to be opaque to application code such that calls to HttpSession.getId() always return an unmodified session ID. -This is only generated when creating/updating the JSESSIONID cookie, or when encoding URLs via HttpServletResponse.encodeURL() and encodeRedirectURL(). -Possible values are:

-
-
-
affinity=none
-
-

Web requests will have no affinity to any particular node. -This option is intended for use cases where web session state is not maintained within the application server.

-
-
affinity=local
-
-

Web requests will have an affinity to the server that last handled a request for a given session. -This option corresponds to traditional sticky session behavior.

-
-
-
-
-
marshaller
-
-

Specifies the marshalling implementation used to serialize session attributes.

-
-
-
JBOSS
-
-

Marshals session attributes using JBoss Marshalling.

-
-
PROTOSTREAM
-
-

Marshals session attributes using ProtoStream.

-
-
-
-
-
-
-
-

e.g. Creating a new session management profile "foo" using the cache configuration "bar" defined on a remote infinispan server "datagrid" with ATTRIBUTE granularity:

-
-
-
-
[standalone@embedded /] /subsystem=distributable-web/hotrod-session-management=foo:add(remote-cache-container=datagrid, cache-configuration=bar, granularity=ATTRIBUTE)
-{
-    "outcome" => "success"
-}
-
-
-
-
-
-

2.2. Overriding default behavior

-
-

A web application can override the default distributable session management behavior in 1 of 2 ways:

-
-
-
    -
  1. -

    Reference a session-management profile by name

    -
  2. -
  3. -

    Provide deployment-specific session management configuration

    -
  4. -
-
-
-

2.2.1. Referencing an existing session management profile

-
-

To use an existing distributed session management profile, a web application should include a distributable-web.xml deployment descriptor located within the application’s /WEB-INF directory.

-
-
-

e.g.

-
-
-
/WEB-INF/distributable-web.xml
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<distributable-web xmlns="urn:jboss:distributable-web:2.0">
-    <session-management name="foo"/>
-</distributable-web>
-
-
-
-

Alternatively, the target distributed session management profile can be defined within an existing jboss-all.xml deployment descriptor:

-
-
-

e.g.

-
-
-
/META-INF/jboss-all.xml
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jboss xmlns="urn:jboss:1.0">
-    <distributable-web xmlns="urn:jboss:distributable-web:2.0">
-        <session-management name="foo"/>
-    </distributable-web>
-</jboss>
-
-
-
-
-

2.2.2. Using a deployment-specific session management profile

-
-

If custom session management configuration will only be used by a single web application, you may find it more convenient to define the configuration within the deployment descriptor itself. -Ad hoc configuration looks identical to the configuration used by the distributable-web subsystem.

-
-
-

e.g.

-
-
-
/WEB-INF/distributable-web.xml
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<distributable-web xmlns="urn:jboss:distributable-web:2.0">
-    <infinispan-session-management cache-container="foo" cache="bar" granularity="SESSION">
-        <primary-owner-affinity/>
-    </infinispan-session-management>
-</distributable-web>
-
-
-
-

Alternatively, session management configuration can be defined within an existing jboss-all.xml deployment descriptor:

-
-
-

e.g.

-
-
-
/META-INF/jboss-all.xml
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jboss xmlns="urn:jboss:1.0">
-    <distributable-web xmlns="urn:jboss:distributable-web:2.0">
-        <infinispan-session-management cache-container="foo" cache="bar" granularity="ATTRIBUTE">
-            <local-affinity/>
-        </infinispan-session-management>
-    </distributable-web>
-</jboss>
-
-
-
-
-
-

2.3. Distributable Shared Sessions

-
-

WildFly supports the ability to share sessions across web applications within an enterprise archive. -In previous releases, WildFly always presumed distributable session management of shared sessions. -Version 2.0 of the shared-session-config deployment descriptor was updated to allow an EAR to opt-in to this behavior using the familiar <distributable/> element. -Additionally, you can customize the behavior of the distributable session manager used for session sharing via the same configuration mechanism described in the above sections.

-
-
-

e.g.

-
-
-
/META-INF/jboss-all.xml
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<jboss xmlns="urn:jboss:1.0">
-    <shared-session-config xmlns="urn:jboss:shared-session-config:2.0">
-        <distributable/>
-        <session-config>
-            <cookie-config>
-                <path>/</path>
-            </cookie-config>
-        </session-config>
-    </shared-session-config>
-    <distributable-web xmlns="urn:jboss:distributable-web:2.0">
-        <session-management name="foo"/>
-    </distributable-web>
-</jboss>
-
-
-
-
-

2.4. Optimizing performance of distributed web applications

-
-

One of the primary design goals of WildFly’s distributed session manager was the parity of HttpSession semantics between distributable and non-distributable web applications. -In order to provide predictable behavior suitable for most web applications, the default distributed session manager configuration is quite conservative, generally favoring consistency over availability. -However, these defaults may not be appropriate for your application. -In general, the effective performance of the distributed session manager is constrained by:

-
-
-
    -
  1. -

    Replication/persistence payload size

    -
  2. -
  3. -

    Locking/isolation of a given session

    -
  4. -
-
-
-

To optimize the configuration of the distributed session manager for your application, you can address the above constraints by tuning one or more of the following:

-
-
- -
-
-

2.4.1. Session granularity

-
-

By default, WildFly’s distributed session manager uses SESSION granularity, meaning that all session attributes are stored within a single cache entry. -While this ensures that any object references shared between session attributes are preserved following replication/persistence, it means that a change to a single attribute results in the replication/persistence of all attributes.

-
-
-

If your application does not share any object references between attributes, users are strongly advised to use ATTRIBUTE granularity. -Using ATTRIBUTE granularity, each session attribute is stored in a separate cache entry. -This means that a given request is only required to replicate/persist those attributes that were added/modified/removed/mutated in a given request. -For read-heavy applications, this can dramatically reduce the replication/persistence payload per request.

-
-
-
-

2.4.2. Session concurrency

-
-

WildFly’s default distributed session manager behavior is also conservative with respect to concurrent access to a given session. -By default, a request acquires exclusive access to its associated session for the duration of a request, and until any async child context is complete. -This maximizes the performance of a single request, as each request corresponds to a single cache transaction; allows for repeatable read semantics to the session; and ensures that subsequent requests are not prone to stale reads, even when handled by another cluster member.

-
-
-

However, if multiple requests attempt to access the same session concurrently, their processing will be effectively serialized. This might not be feasible, especially for heavily asynchronous web applications.

-
-
-

Relaxing transaction isolation from REPEATABLE_READ to READ_COMMITTED on the associated cache configuration will allow concurrent requests to perform lock-free (but potentially stale) reads by deferring locking to the first attempt to write to the session. -This improves the throughput of requests for the same session for highly asynchronous web applications whose session access is read-heavy.

-
-
-

e.g.

-
-
-
-
/subsystem=infinispan/cache-container=web/distributed-cache=dist/component=locking:write-attribute(name=isolation, value=READ_COMMITTED)
-
-
-
-

For asynchronous web applications whose session access is write-heavy, merely relaxing transaction isolation is not likely to be sufficient. -These web applications will likely benefit from disabling cache transactions altogether. -When transactions are disabled, cache entries are locked and released for every write to the session, resulting in last-write-wins semantics. -For write-heavy applications, this typically improves the throughput of concurrent requests for the same session, at the cost of longer response times for individual requests.

-
-
-
-
/subsystem=infinispan/cache-container=web/distributed-cache=dist/component=transaction:write-attribute(name=mode, value=NONE)
-
-
-
- - - - - -
- - -Relaxing transaction isolation currently prevents WildFly from enforcing that a given session is handled by one JVM at a time, a constraint dictated by the servlet specification. -
-
-
-
-

2.4.3. Session attribute immutability

-
-

In WildFly, distributed session attributes are presumed to be mutable objects, unless of a known immutable type, or unless otherwise specified.

-
-
-

Take the following session access pattern:

-
-
-
-
HttpSession session = request.getSession();
-MutableObject object = session.getAttribute("...");
-object.mutate();
-
-
-
-

By default, WildFly replicates/persists the mutable session attributes at the end of the request, ensuring that a subsequent request will read the mutated value, not the original value. -However, the replication/persistence of mutable session attributes at the end of the request happens whether or not these objects were actually mutated. -To avoid redundant session writes, users are strongly encouraged to store immutable objects in the session whenever possible. -This allows the application more control over when session attributes will replicate/persist, since immutable session attributes will only update upon explicit calls to HttpSession.setAttribute(…​).

-
-
-

WildFly can determine whether most JDK types are immutable, but any unrecognized/custom types are presumed to be mutable. -To indicate that a given session attribute of a custom type should be treated as immutable by the distributed session manager, annotate the class with one of the following annotations:

-
-
-
    -
  1. -

    @org.wildfly.clustering.web.annotation.Immutable

    -
  2. -
  3. -

    @net.jcip.annotations.Immutable

    -
  4. -
-
-
-

e.g.

-
-
-
-
@Immutable
-public class ImmutableClass implements Serializable {
-    // ...
-}
-
-
-
-

Alternatively, immutable classes can be enumerated via the distributable-web deployment descriptor.

-
-
-

e.g.

-
-
-
-
<distributable-web xmlns="urn:jboss:distributable-web:2.0">
-    <session-management>
-        <immutable-class>foo.bar.ImmutableClass</immutable-class>
-        <immutable-class>...</immutable-class>
-    </session-management>
-</distributable-web>
-
-
-
-
-

2.4.4. Session attribute marshalling

-
-

Minimizing the replication/persistence payload for individual session attributes has a direct impact on performance by reducing the number of bytes sent over the network or persisted to storage. -See the Marshalling section for more details.

-
-
-
-
-
-
-

3. Distributable Jakarta Enterprise Beans Applications

-
-
-

Just as with standard web applications, session state of stateful session beans (SFSB) contained in a standard EJB application -is not guaranteed to survive beyond the lifespan of the Jakarta Enterprise Beans container. And, as with standard web applications, there is a way to -allow session state of SFSBs to survive beyond the lifespan of a single server, either through persistence or by replicating state to -other nodes in the cluster.

-
-
-

A distributable SFSB is one whose state is made available on multiple nodes in a cluster and which supports failover of invocation attempts: if the node -on which the SFSB was created fails, the invocation will be retried on another node in the cluster where the SFSB state is present.

-
-
-

In the case of Jakarta Enterprise Beans applications, whether or not a bean is distributable is determined globally or on a per-bean basis, rather than on -an application-wide basis as in the case of distributed HttpSessions.

-
-
-

A stateful session bean within an Jakarta Enterprise Beans application indicates its intention to be distributable by using a passivation-capable cache -to store its session state. Cache factories were discussed in the Jakarta Enterprise Beans section of the Wildfly Admin Guide. -Additionally, the EJB application needs to be deployed into a server which uses an High Availability (HA) server profile, such as standalone-ha.xml -or standalone-full-ha.xml.

-
-
-

Since Jakarta Enterprise Beans are passivation-capable by default, generally, users already using an HA profile will not need to make any configuration changes -for their beans to be distributable and, consequently, to support failover. More fine-grained control over whether a bean is distributable can be -achieved using the passivationCapable attribute of the @Stateful annotation (or the equivalent deployment descriptor override). A bean which is marked as -@Stateful(passivationCapable=false) will not exhibit distributable behavior (i.e. failover), even when the application containing it is deployed in a cluster.

-
-
- - - - - -
- - -More information on passivation-capable beans can be found in Section 4.6.5 of the Jakarta Enterprise Beans specification. -
-
-
-

In the sections that follow, we discuss some aspects of configuring distributable Jakarta Enterprise Beans applications in Wildfly.

-
-
-

3.1. Distributable EJB Subsystem

-
-

The purpose of the distributable-ejb subsystem is to permit configuration of clustering abstractions -required to support those resources of the ejb3 subsystem which support clustered operation. The key resources -of the ejb3 subsystem which require clustering abstractions are:

-
-
-
    -
  • -

    cache factories -Passivating cache factories depend on a bean management provider to provide passivation and persistence of SFSB -session states in a local or distributed environment.

    -
  • -
  • -

    client mappings registries -Supporting remote invocation on SFSB deployed in a cluster require storing client mappings information in a - client mappings registry. The registry may be tailored for a local or a distributed environment.

    -
  • -
-
-
-

These clustering abstractions are made available to the ejb3 subsystem via the specification and configuration of -clustering abstraction 'providers'. We describe the available providers below.

-
-
-

3.1.1. Bean management providers

-
-

A bean management provider provides access to a given implementation of a bean manager, -used by passivation-capable cache factories defined in the ejb3 subsystem to manage passivation and persistence.

-
-
-

Bean management provider elements are named, and represent different implementation and configuration choices for bean management. -At least one named bean management provider must be defined in the distributable-ejb subsystem and of those, one -instance must be identified as the default bean management provider, using the default-bean-management attribute of -the distributable-ejb subsystem.

-
-
-

The available bean management provider is:

-
-
-
infinispan-bean-management
-
-

The infinispan-bean-management provider element represents a bean manager implementation based on an Infinispan cache. The -attributes for the infinispan-bean-manager element are:

-
-
-
-
cache-container
-
-

Specifies a cache container defined in the Infinispan subsystem used to support the session state cache

-
-
cache
-
-

Specifies the session state cache and its configured properties

-
-
max-active-beans
-
-

Specifies the maximum number of non-passivated session state entries allowed in the cache

-
-
-
-
-
-
-

3.1.2. Client mappings registries

-
-

A client mappings registry provider provides access to a given implementation of a client mappings registry, used by -the EJB client invocation mechanism to store information about client mappings for each node in the cluster. Client mappings -are defined in the socket bindings configuration of a server and required to allow an EJB client application to connect -to servers which are multi-homed (i.e. clients may access the same server from different networks using a different IP address -ad port for each interface on the multi-homed server).

-
-
-

The available client mappings registry providers are:

-
-
-
infinispan-client-mappings-registry
-
-

The infinispan-client-mappings-registry provider is a provider based on an Infinispan cache and suitable for a clustered server.

-
-
-
-
cache-container
-
-

Specifies a cache container defined in the Infinispan subsystem used to support the client mappings registry

-
-
cache
-
-

Specifies the cache and its configured properties used to support the client mappings registry

-
-
-
-
-
-
local-client-mappings-registry
-
-

The client mappings registry provider suitable for a local, non-clustered server.

-
-
-
-
-

3.1.3. Timer management

-
-

The distributable-ejb subsystem defines a set of timer management resources that define behavior for persistent or non-persistent EJB timers.

-
-
-

To use distributable timer management for EJB timers, one must first disable the existing in-memory mechanisms in the ejb3 subsystem. -See Jakarta Enterprise Beans Distributed Timer documentation for details.

-
-
-
infinispan-timer-management
-
-

This provider stores timer metadata within an embedded Infinispan cache, and utilizes consistent hashing to distribute timer execution between cluster members.

-
-
-
-
cache-container
-
-

Specifies a cache container defined in the Infinispan subsystem

-
-
cache
-
-

Specifies the a cache configuration within the specified cache-container

-
-
max-active-timers
-
-

Specifies the maximum number active timers to retain in memory at a time, after which the least recently used will passivate

-
-
marshaller
-
-

Specifies the marshalling implementation used to serialize the timeout context of a timer.

-
-
-
JBOSS
-
-

Marshals session attributes using JBoss Marshalling.

-
-
PROTOSTREAM
-
-

Marshals session attributes using ProtoStream.

-
-
-
-
-
-
-
-

To ensure proper functioning, the associated cache configuration, regardless of type, should use:

-
-
-
    -
  • -

    BATCH transaction mode

    -
  • -
  • -

    REPEATABLE_READ lock isolation

    -
  • -
-
-
-

Generally, persistent timers will leverage a distributed or replicated cache configuration if in a cluster, or a local, persistent cache configuration if on a single server; -while transient timers will leverage a local, passivating cache configuration.

-
-
-

By default, all cluster members will be eligible for timer execution. -A given cluster member exclude itself from timer execution by using a cache capacity-factor of 0.

-
-
-
-
-
-

3.2. Deploying clustered EJBs

-
-

Clustering support is available in the HA profiles of WildFly. In this -chapter we’ll be using the standalone server for explaining the details. -However, the same applies to servers in a domain mode. Starting the -standalone server with HA capabilities enabled, involves starting it -with the standalone-ha.xml (or even standalone-full-ha.xml):

-
-
-
-
./standalone.sh -server-config=standalone-ha.xml
-
-
-
-

This will start a single instance of the server with HA capabilities. -Deploying the EJBs to this instance doesn’t involve anything special -and is the same as explained in the application -deployment chapter.

-
-
-

Obviously, to be able to see the benefits of clustering, you’ll need -more than one instance of the server. So let’s start another server with -HA capabilities. That another instance of the server can either be on -the same machine or on some other machine. If it’s on the same machine, -the two things you have to make sure is that you pass the port offset -for the second instance and also make sure that each of the server -instances have a unique jboss.node.name system property. You can do -that by passing the following two system properties to the startup -command:

-
-
-
-
./standalone.sh -server-config=standalone-ha.xml -Djboss.socket.binding.port-offset=<offset of your choice> -Djboss.node.name=<unique node name>
-
-
-
-

Follow whichever approach you feel comfortable with for deploying the -EJB deployment to this instance too.

-
-
- - - - - -
- - -Deploying the application on just one node of a standalone instance of a -clustered server does not mean that it will be automatically deployed -to the other clustered instance. You will have to do deploy it -explicitly on the other standalone clustered instance too. Or you can -start the servers in domain mode so that the deployment can be deployed -to all the server within a server group. See the -admin guide for -more details on domain setup. -
-
-
-

Now that you have deployed an application with clustered EJBs on both -the instances, the EJBs are now capable of making use of the clustering -features.

-
-
-

3.2.1. Failover for clustered EJBs

-
-

Clustered EJBs have failover capability. The state of the @Stateful -@Clustered EJBs is replicated across the cluster nodes so that if one of -the nodes in the cluster goes down, some other node will be able to take -over the invocations. Let’s see how it’s implemented in WildFly. In -the next few sections we’ll see how it works for remote (standalone) -clients and for clients in another remote WildFly server instance. -Although, there isn’t a difference in how it works in both these cases, -we’ll still explain it separately so as to make sure there aren’t any -unanswered questions.

-
-
-
-

3.2.2. Remote standalone clients

-
-

In this section we’ll consider a remote standalone client (i.e. a client -which runs in a separate JVM and isn’t running within another WildFly -8 instance). Let’s consider that we have 2 servers, server X and server -Y which we started earlier. Each of these servers has the clustered EJB -deployment. A standalone remote client can use either the -JNDI approach or native JBoss EJB client APIs to -communicate with the servers. The important thing to note is that when -you are invoking clustered EJB deployments, you do not have to list -all the servers within the cluster (which obviously wouldn’t have been -feasible due the dynamic nature of cluster node additions within a -cluster).

-
-
-

The remote client just has to list only one of the servers with the -clustering capability. In this case, we can either list server X (in -jboss-ejb-client.properties) or server Y. This server will act as the -starting point for cluster topology communication between the client and -the clustered nodes.

-
-
-

Note that you have to configure the ejb cluster in the -jboss-ejb-client.properties configuration file, like so:

-
-
-
-
remote.clusters=ejb
-remote.cluster.ejb.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
-remote.cluster.ejb.connect.options.org.xnio.Options.SSL_ENABLED=false
-
-
-
-
-

3.2.3. Cluster topology communication

-
-

When a client connects to a server, the JBoss EJB client implementation -(internally) communicates with the server for cluster topology -information, if the server had clustering capability. In our example -above, let’s assume we listed server X as the initial server to connect -to. When the client connects to server X, the server will send back an -(asynchronous) cluster topology message to the client. This topology -message consists of the cluster name(s) and the information of the nodes -that belong to the cluster. The node information includes the node -address and port number to connect to (whenever necessary). So in this -example, the server X will send back the cluster topology consisting of -the other server Y which belongs to the cluster.

-
-
-

In case of stateful (clustered) EJBs, a typical invocation flow involves -creating of a session for the stateful bean, which happens when you do a -JNDI lookup for that bean, and then invoking on the returned proxy. The -lookup for stateful bean, internally, triggers a (synchronous) session -creation request from the client to the server. In this case, the -session creation request goes to server X since that’s the initial -connection that we have configured in our jboss-ejb-client.properties. -Since server X is clustered, it will return back a session id and along -with send back an "affinity" of that session. In case of clustered -servers, the affinity equals to the name of the cluster to which the -stateful bean belongs on the server side. For non-clustered beans, the -affinity is just the node name on which the session was created. This -affinity will later help the EJB client to route the invocations on -the proxy, appropriately to either a node within a cluster (for -clustered beans) or to a specific node (for non-clustered beans). While -this session creation request is going on, the server X will also send -back an asynchronous message which contains the cluster topology. The -JBoss EJB client implementation will take note of this topology -information and will later use it for connection creation to nodes -within the cluster and routing invocations to those nodes, whenever -necessary.

-
-
-

Now that we know how the cluster topology information is communicated -from the server to the client, let see how failover works. Let’s -continue with the example of server X being our starting point and a -client application looking up a stateful bean and invoking on it. During -these invocations, the client side will have collected the cluster -topology information from the server. Now let’s assume for some reason, -server X goes down and the client application subsequent invokes on the -proxy. The JBoss EJB client implementation, at this stage will be aware -of the affinity and in this case it’s a cluster affinity. Because of the -cluster topology information it has, it knows that the cluster has two -nodes server X and server Y. When the invocation now arrives, it sees -that the server X is down. So it uses a selector to fetch a suitable -node from among the cluster nodes. The selector itself is configurable, -but we’ll leave it from discussion for now. When the selector returns a -node from among the cluster, the JBoss EJB client implementation creates -a connection to that node (if not already created earlier) and creates a -EJB receiver out of it. Since in our example, the only other node in the -cluster is server Y, the selector will return that node and the JBoss -EJB client implementation will use it to create a EJB receiver out of it -and use that receiver to pass on the invocation on the proxy. -Effectively, the invocation has now failed over to a different node -within the cluster.

-
-
-
-

3.2.4. Remote clients on another instance of WildFly

-
-

So far we discussed remote standalone clients which typically use either -the EJB client API or the jboss-ejb-client.properties based approach to -configure and communicate with the servers where the clustered beans are -deployed. Now let’s consider the case where the client is an application -deployed another AS7 instance and it wants to invoke on a clustered -stateful bean which is deployed on another instance of WildFly. In -this example let’s consider a case where we have 3 servers involved. -Server X and Server Y both belong to a cluster and have clustered EJB -deployed on them. Let’s consider another server instance Server C (which -may or may not have clustering capability) which acts as a client on -which there’s a deployment which wants to invoke on the clustered beans -deployed on server X and Y and achieve failover.

-
-
-

The configurations required to achieve this are explained in -this chapter. As you can see the configurations are -done in a jboss-ejb-client.xml which points to a remote outbound -connection to the other server. This jboss-ejb-client.xml goes in the -deployment of server C (since that’s our client). As explained earlier, -the client configuration need not point to all clustered nodes. -Instead it just has to point to one of them which will act as a start -point for communication. So in this case, we can create a remote -outbound connection on server C to server X and use server X as our -starting point for communication. Just like in the case of remote -standalone clients, when the application on server C (client) looks up a -stateful bean, a session creation request will be sent to server X which -will send back a session id and the cluster affinity for it. -Furthermore, server X asynchronously send back a message to server C -(client) containing the cluster topology. This topology information will -include the node information of server Y (since that belongs to the -cluster along with server X). Subsequent invocations on the proxy will -be routed appropriately to the nodes in the cluster. If server X goes -down, as explained earlier, a different node from the cluster will be -selected and the invocation will be forwarded to that node.

-
-
-

As can be seen both remote standalone client and remote clients on -another WildFly instance act similar in terms of failover.

-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-
-

4. Messaging

-
-
-

This section is under development intending to describe high availability features and configuration pertaining to Jakarta Messaging (JMS).

-
-
-
-
-

5. Load Balancing

-
-
-

5.1. mod_cluster Subsystem

-
-

The mod_cluster integration is done via the mod_cluster subsystem.

-
-
-

5.1.1. Configuration

-
-
Instance ID or JVMRoute
-
-

The instance-id or JVMRoute defaults to jboss.node.name property passed -on server startup (e.g. via -Djboss.node.name=XYZ).

-
-
-
-
[standalone@localhost:9990 /] /subsystem=undertow:read-attribute(name=instance-id)
-{
-    "outcome" => "success",
-    "result" => expression "${jboss.node.name}"
-}
-
-
-
-

To configure instance-id statically, configure the corresponding -property in Undertow subsystem:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=undertow:write-attribute(name=instance-id,value=myroute)
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
-
-
Proxies
-
-

By default, mod_cluster is configured for multicast-based discovery. To -specify a static list of proxies, create a remote-socket-binding for -each proxy and then reference them in the 'proxies' attribute. See the -following example for configuration in the domain mode:

-
-
-
-
[domain@localhost:9990 /] /socket-binding-group=ha-sockets/remote-destination-outbound-socket-binding=proxy1:add(host=10.21.152.86, port=6666)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => undefined
-}
-[domain@localhost:9990 /] /socket-binding-group=ha-sockets/remote-destination-outbound-socket-binding=proxy2:add(host=10.21.152.87, port=6666)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => undefined
-}
-[domain@localhost:9990 /] /profile=ha/subsystem=modcluster/proxy=default:write-attribute(name=proxies, value=[proxy1, proxy2])
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => undefined
-}
-[domain@localhost:9990 /] :reload-servers
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "server-groups" => undefined
-}
-
-
-
-
-
Multiple mod_cluster Configurations
-
-

Since WildFly 14 mod_cluster subsystem supports multiple named proxy configurations also allowing for registering -non-default Undertow servers with the reverse proxies. Moreover, this allows single application server node to register with -different groups of proxy servers.

-
-
-

See the following example which adds another Undertow AJP listener, server and a host and adds a new mod_cluster configuration -which registers this host using advertise mechanism.

-
-
-
-
/socket-binding-group=standard-sockets/socket-binding=ajp-other:add(port=8010)
-/subsystem=undertow/server=other-server:add
-/subsystem=undertow/server=other-server/ajp-listener=ajp-other:add(socket-binding=ajp-other)
-/subsystem=undertow/server=other-server/host=other-host:add(default-web-module=root-other.war)
-/subsystem=undertow/server=other-server/host=other-host/location=other:add(handler=welcome-content)
-/subsystem=undertow/server=other-server/host=other-host:write-attribute(name=alias,value=[localhost]))
-
-/socket-binding-group=standard-sockets/socket-binding=modcluster-other:add(multicast-address=224.0.1.106,multicast-port=23364)
-/subsystem=modcluster/proxy=other:add(advertise-socket=modcluster-other,balancer=other-balancer,connector=ajp-other)
-
-reload
-
-
-
-
-
-

5.1.2. Runtime Operations

-
-

The modcluster subsystem supports several operations:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-operation-names
-{
-    "outcome" => "success",
-    "result" => [
-        "add",
-        "add-custom-metric",
-        "add-metric",
-        "add-proxy",
-        "disable",
-        "disable-context",
-        "enable",
-        "enable-context",
-        "list-proxies",
-        "read-attribute",
-        "read-children-names",
-        "read-children-resources",
-        "read-children-types",
-        "read-operation-description",
-        "read-operation-names",
-        "read-proxies-configuration",
-        "read-proxies-info",
-        "read-resource",
-        "read-resource-description",
-        "refresh",
-        "remove-custom-metric",
-        "remove-metric",
-        "remove-proxy",
-        "reset",
-        "stop",
-        "stop-context",
-        "validate-address",
-        "write-attribute"
-    ]
-}
-
-
-
-

The operations specific to the modcluster subsystem are divided in 3 -categories the ones that affects the configuration and require a restart -of the subsystem, the one that just modify the behaviour temporarily and -the ones that display information from the httpd part.

-
-
-
operations displaying httpd information
-
-

There are 2 operations that display how Apache httpd sees the node:

-
-
-
read-proxies-configuration
-
-

Send a DUMP message to all Apache httpd the node is connected to and -display the message received from Apache httpd.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-proxies-configuration
-{
-    "outcome" => "success",
-    "result" => [
-        "neo3:6666",
-        "balancer: [1] Name: mycluster Sticky: 1 [JSESSIONID]/[jsessionid] remove: 0 force: 1 Timeout: 0 Maxtry: 1
-node: [1:1],Balancer: mycluster,JVMRoute: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,Domain: [],Host: 127.0.0.1,Port: 8080,Type: http,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0
-host: 1 [example.com] vhost: 1 node: 1
-host: 2 [localhost] vhost: 1 node: 1
-host: 3 [default-host] vhost: 1 node: 1
-context: 1 [/myapp] vhost: 1 node: 1 status: 1
-context: 2 [/] vhost: 1 node: 1 status: 1
-",
-        "jfcpc:6666",
-        "balancer: [1] Name: mycluster Sticky: 1 [JSESSIONID]/[jsessionid] remove: 0 force: 1 Timeout: 0 maxAttempts: 1
-node: [1:1],Balancer: mycluster,JVMRoute: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,LBGroup: [],Host: 127.0.0.1,Port: 8080,Type: http,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0
-host: 1 [default-host] vhost: 1 node: 1
-host: 2 [localhost] vhost: 1 node: 1
-host: 3 [example.com] vhost: 1 node: 1
-context: 1 [/] vhost: 1 node: 1 status: 1
-context: 2 [/myapp] vhost: 1 node: 1 status: 1
-"
-    ]
-}
-
-
-
-
-
read-proxies-info
-
-

Send a INFO message to all Apache httpd the node is connected to and -display the message received from Apache httpd.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-proxies-info
-{
-    "outcome" => "success",
-    "result" => [
-        "neo3:6666",
-        "Node: [1],Name: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,Balancer: mycluster,Domain: ,Host: 127.0.0.1,Port: 8080,Type: http,Flushpackets: Off,Flushwait: 10000,Ping: 10000000,Smax: 26,Ttl: 60000000,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: -1
-Vhost: [1:1:1], Alias: example.com
-Vhost: [1:1:2], Alias: localhost
-Vhost: [1:1:3], Alias: default-host
-Context: [1:1:1], Context: /myapp, Status: ENABLED
-Context: [1:1:2], Context: /, Status: ENABLED
-",
-        "jfcpc:6666",
-        "Node: [1],Name: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,Balancer: mycluster,LBGroup: ,Host: 127.0.0.1,Port: 8080,Type: http,Flushpackets: Off,Flushwait: 10,Ping: 10,Smax: 26,Ttl: 60,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: 1
-Vhost: [1:1:1], Alias: default-host
-Vhost: [1:1:2], Alias: localhost
-Vhost: [1:1:3], Alias: example.com
-Context: [1:1:1], Context: /, Status: ENABLED
-Context: [1:1:2], Context: /myapp, Status: ENABLED
-"
-    ]
-}
-
-
-
-
-
operations that handle the proxies the node is connected too
-
-

There are 3 operation that could be used to manipulate the list of -Apache httpd the node is connected to.

-
-
-
-
list-proxies
-
-

Displays the httpd that are connected to the node. The httpd could be -discovered via the Advertise protocol or via the proxy-list attribute.

-
-
-
-
[standalone@localhost:9990 subsystem=modcluster] :list-proxies
-{
-    "outcome" => "success",
-    "result" => [
-        "proxy1:6666",
-        "proxy2:6666"
-    ]
-}
-
-
-
-
-
remove-proxy
-
-

Remove a proxy from the discovered proxies or temporarily from the -proxy-list attribute.

-
-
-
-
[standalone@localhost:9990 subsystem=modcluster] :remove-proxy(host=jfcpc, port=6666)
-{"outcome" => "success"}
-
-
-
-
-
add-proxy
-
-

Add a proxy to the discovered proxies or temporarily to the proxy-list -attribute.

-
-
-
-
[standalone@localhost:9990 subsystem=modcluster] :add-proxy(host=jfcpc, port=6666)
-{"outcome" => "success"}
-
-
-
-
-
- -
-

Those operations allow to send context related commands to Apache httpd. -They are send automatically when deploying or undeploying webapps.

-
-
-
enable-context
-
-

Tell Apache httpd that the context is ready receive requests.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:enable-context(context=/myapp, virtualhost=default-host)
-{"outcome" => "success"}
-
-
-
-
-
disable-context
-
-

Tell Apache httpd that it shouldn’t send new session requests to the -context of the virtualhost.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:disable-context(context=/myapp, virtualhost=default-host)
-{"outcome" => "success"}
-
-
-
-
-
stop-context
-
-

Tell Apache httpd that it shouldn’t send requests to the context of the -virtualhost.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:stop-context(context=/myapp, virtualhost=default-host, waittime=50)
-{"outcome" => "success"}
-
-
-
-
-
- -
-

Those operations are like the context operation but they apply to all -webapps running on the node and operation that affect the whole node.

-
-
-
refresh
-
-

Refresh the node by sending a new CONFIG message to Apache httpd.

-
-
-
-
reset
-
-

Reset the connection between Apache httpd and the node.

-
-
-
-
-
Configuration
-
-
Metric configuration
-
-

There are 4 metric operations corresponding to add and remove load -metrics to the dynamic-load-provider. Note that when nothing is defined -a simple-load-provider is use with a fixed load factor of one.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-resource(name=mod-cluster-config)
-{
-    "outcome" => "success",
-    "result" => {"simple-load-provider" => {"factor" => "1"}}
-}
-
-
-
-

that corresponds to the following configuration:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:modcluster:1.0">
-            <mod-cluster-config>
-                <simple-load-provider factor="1"/>
-            </mod-cluster-config>
- </subsystem>
-
-
-
-add-metric -
-

Add a metric to the dynamic-load-provider, the dynamic-load-provider in -configuration is created if needed.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:add-metric(type=cpu)
-{"outcome" => "success"}
-[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-resource(name=mod-cluster-config)
-{
-    "outcome" => "success",
-    "result" => {
-        "dynamic-load-provider" => {
-            "history" => 9,
-            "decay" => 2,
-            "load-metric" => [{
-                "type" => "cpu"
-            }]
-        }
-    }
-}
-
-
-
-
-remove-metric -
-

Remove a metric from the dynamic-load-provider.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:remove-metric(type=cpu)
-{"outcome" => "success"}
-
-
-
-
-add-custom-metric / remove-custom-metric -
-

like the add-metric and remove-metric except they require a class -parameter instead the type. Usually they needed additional properties -which can be specified

-
-
-
-
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:add-custom-metric(class=myclass, property=[("pro1" => "value1"), ("pro2" => "value2")]
-{"outcome" => "success"}
-
-
-
-

which corresponds the following in the xml configuration file:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:modcluster:1.0">
-    <mod-cluster-config>
-        <dynamic-load-provider history="9" decay="2">
-            <custom-load-metric class="myclass">
-                <property name="pro1" value="value1"/>
-                <property name="pro2" value="value2"/>
-            </custom-load-metric>
-        </dynamic-load-provider>
-    </mod-cluster-config>
-</subsystem>
-
-
-
-
-
-
-
-

5.1.3. SSL Configuration using Elytron Subsystem

-
-
-This section provides information how to configure mod_cluster -subsystem to protect communication between mod_cluster and load balancer -using SSL/TLS using Elytron Subsystem. -
-
-
-
Overview
-
-

Elytron subsystem provides a powerful and flexible model to configure -different security aspects for applications and the application server -itself. At its core, Elytron subsystem exposes different capabilities to -the application server in order centralize security related -configuration in a single place and to allow other subsystems to consume -these capabilities. One of the security capabilities exposed by Elytron -subsystem is a Client ssl-context that can be used to configure -mod_cluster subsystem to communicate with a load balancer using SSL/TLS.

-
-
-

When protecting the communication between the application server and the -load balancer, you need do define a Client ssl-context in order to:

-
-
-
    -
  • -

    Define a trust store holding the certificate chain that will be used -to validate load balancer’s certificate

    -
  • -
  • -

    Define a trust manager to perform validations against the load -balancer’s certificate

    -
  • -
-
-
-
-
Defining a Trust Store with the Trusted Certificates
-
-

To define a trust store in Elytron you can execute the following CLI -command:

-
-
-
-
/subsystem=elytron/key-store=default-trust-store:add(type=PKCS12, relative-to=jboss.server.config.dir, path=application.truststore, credential-reference={clear-text=password})
-
-
-
-

In order to successfully execute the command above you must have a -application.truststore file inside your -JBOSS_HOME/standalone/configuration directory. Where the trust store -is protected by a password with a value password. The trust store must -contain the certificates associated with the load balancer or a -certificate chain in case the load balancer’s certificate is signed by a -CA.

-
-
-

We strongly recommend you to avoid using self-signed certificates with -your load balancer. Ideally, certificates should be signed by a CA and -your trust store should contain a certificate chain representing your -ROOT and Intermediary CAs.

-
-
-
-
Defining a Trust Manager To Validate Certificates
-
-

To define a trust manager in Elytron you can execute the following CLI -command:

-
-
-
-
/subsystem=elytron/trust-manager=default-trust-manager:add(algorithm=PKIX, key-store=default-trust-store)
-
-
-
-

Here we are setting the default-trust-store as the source of the -certificates that the application server trusts.

-
-
-
-
Defining a Client SSL Context and Configuring mod_cluster Subsystem
-
-

Finally, you can create the Client SSL Context that is going to be used -by the mod_cluster subsystem when connecting to the load balancer using -SSL/TLS:

-
-
-
-
/subsystem=elytron/client-ssl-context=modcluster-client:add(trust-manager=default-trust-manager)
-
-
-
-

Now that the Client ssl-context is defined you can configure -mod_cluster subsystem as follows:

-
-
-
-
/subsystem=modcluster/proxy=default:write-attribute(name=ssl-context, value=modcluster-client)
-
-
-
-

Once you execute the last command above, reload the server:

-
-
-
-
reload
-
-
-
-
-
Using a Certificate Revocation List
-
-

In case you want to validate the load balancer certificate against a -Certificate Revocation List (CRL), you can configure the trust-manager -in Elytron subsystem as follows:

-
-
-
-
/subsystem=elytron/trust-manager=default-trust-manager:write-attribute(name=certificate-revocation-list.path, value=intermediate.crl.pem)
-
-
-
-

To use a CRL your trust store must contain the certificate chain in -order to check validity of both CRL list and the load balancer`s -certificate.

-
-
-

A different way to configure a CRL is using the Distribution Points -embedded in your certificates. For that, you need to configure a -certificate-revocation-list as follows:

-
-
-
-
/subsystem=elytron/trust-manager=default-trust-manager:write-attribute(name=certificate-revocation-list)
-
-
-
-
-
-

5.1.4. Remote User Authentication with Elytron

-
-

It is possible to accept a REMOTE_USER already authenticated by the Apache httpd server with Elytron via the AJP protocol. -This can be done by setting up Elytron to secure a WildFly deployment and specifying for the External HTTP mechanism to -be used. This is done by creating a security domain and specifying the External mechanism as one of the mechanism -configurations to be used by the http-authentication-factory:

-
-
-
-
/subsystem=elytron/http-authentication-factory=web-tests:add(security-domain=example-domain, http-server-mechanism-factory=example-factory,
-mechanism-configurations=[{mechanism-name=EXTERNAL}])
-
-
-
-

Elytron will accept the externally authenticated user and use the specified security domain to perform role mapping to -complete authorization.

-
-
-
-
-

5.2. Enabling ranked affinity support in load balancer

-
-

Enabling ranked affinity support in the server must be accompanied by a compatible load balancer with ranked affinity support enabled. -When using WildFly as a load balancer ranked routing can be enabled with the following CLI command:

-
-
-
-
/subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:add
-
-
-
-

The default delimiter which delimiters the node routes is "." which encodes multiple routes as node1.node2.node3. -Should the delimiter be required to be different, this is configurable by the delimiter attribute of the affinity resource. -See the following CLI command:

-
-
-
-
/subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:write-attribute(name=delimiter,value=":")
-
-
-
-
- -
-

While the Apache family of load-balancers relies on attaching session affinity (routing) information by default to a JSESSIONID cookie or a jsessionid path parameter, -there are other load-balancers that rely on a cookie to drive session affinity.

-
-
-

In order to configure the cookie name and other properties use the following CLI script:

-
-
-
-
/subsystem=undertow/servlet-container=default/setting=affinity-cookie:add(name=SRV)
-
-
-
-

The affinity can be specified either in the instance-id or by providing jboss.node.name property to the server.

-
-
-
-
./bin/standalone.sh -c standalone-ha.xml -Djboss.node.name=ribera1
-
-
-
-

For complete documentation on configuring the servlet container refer to Undertow documentation section.

-
-
-

5.3.1. HAProxy

-
-

The following is a minimum HAProxy configuration to enable affinity provided by application server to be respected by the given load-balancer.

-
-
-
-
defaults
-timeout connect 5s
-timeout client 50s
-timeout server 50s
-
-frontend myfrontend
-bind 127.0.0.1:8888
-default_backend myservers
-
-backend myservers
-mode http
-cookie SRV indirect preserve
-option redispatch
-server server1 127.0.0.1:8080 cookie ribera1
-server server2 127.0.0.1:8180 cookie ribera2
-
-
-
-

Notice that the proxy server defined cookie names need to correspond with the application server’s instance-id.

-
-
-
-
-
-
-

6. HA Singleton Features

-
-
-

In general, an HA or clustered singleton is a service that exists on -multiple nodes in a cluster, but is active on just a single node at any -given time. If the node providing the service fails or is shut down, a -new singleton provider is chosen and started. Thus, other than a brief -interval when one provider has stopped and another has yet to start, the -service is always running on one node.

-
-
-

6.1. Singleton subsystem

-
-

WildFly 10 introduced a "singleton" subsystem, which defines a set of -policies that define how an HA singleton should behave. A singleton -policy can be used to instrument singleton deployments or to create -singleton MSC services.

-
-
-

6.1.1. Configuration

-
-

The -default -subsystem configuration from WildFly’s ha and full-ha profile looks -like:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:singleton:1.0">
-    <singleton-policies default="default">
-        <singleton-policy name="default" cache-container="server">
-            <simple-election-policy/>
-        </singleton-policy>
-    </singleton-policies>
-</subsystem>
-
-
-
-

A singleton policy defines:

-
-
-
    -
  1. -

    A unique name

    -
  2. -
  3. -

    A cache container and cache with which to register singleton provider candidates

    -
  4. -
  5. -

    An election policy

    -
  6. -
  7. -

    A quorum (optional)

    -
  8. -
-
-
-

One can add a new singleton policy via the following management -operation:

-
-
-
-
/subsystem=singleton/singleton-policy=foo:add(cache-container=server)
-
-
-
-
Cache configuration
-
-

The cache-container and cache attributes of a singleton policy must -reference a valid cache from the Infinispan subsystem. If no specific -cache is defined, the default cache of the cache container is assumed. -This cache is used as a registry of which nodes can provide a given -service and will typically use a replicated-cache configuration.

-
-
-
-
Election policies
-
-

WildFly includes two singleton election policy implementations:

-
-
-
    -
  • -

    simple
    -Elects the provider (a.k.a. primary provider) of a singleton service based on a -specified position in a circular linked list of eligible nodes sorted by -descending age. Position=0, the default value, refers to the oldest -node, 1 is second oldest, etc. ; while position=-1 refers to the -youngest node, -2 to the second youngest, etc.
    -e.g.

    -
    -
    -
    /subsystem=singleton/singleton-policy=foo/election-policy=simple:add(position=-1)
    -
    -
    -
  • -
  • -

    random
    -Elects a random member to be the provider of a singleton service
    -e.g.

    -
    -
    -
    /subsystem=singleton/singleton-policy=foo/election-policy=random:add()
    -
    -
    -
  • -
-
-
-
Preferences
-
-

Additionally, any singleton election policy may indicate a preference -for one or more members of a cluster. Preferences may be defined either -via node name or via outbound socket binding name. Node preferences -always take precedent over the results of an election policy.
-e.g.

-
-
-
-
/subsystem=singleton/singleton-policy=foo/election-policy=simple:list-add(name=name-preferences, value=nodeA)
-/subsystem=singleton/singleton-policy=bar/election-policy=random:list-add(name=socket-binding-preferences, value=nodeA)
-
-
-
-
-
-
Quorum
-
-

Network partitions are particularly problematic for singleton services, -since they can trigger multiple singleton providers for the same service -to run at the same time. To defend against this scenario, a singleton -policy may define a quorum that requires a minimum number of nodes to be -present before a singleton provider election can take place. A typical -deployment scenario uses a quorum of N/2 + 1, where N is the anticipated -cluster size. This value can be updated at runtime, and will immediately -affect any active singleton services.
-e.g.

-
-
-
-
/subsystem=singleton/singleton-policy=foo:write-attribute(name=quorum, value=3)
-
-
-
-
-
-

6.1.2. Non-HA environments

-
-

The singleton subsystem can be used in a non-HA profile, so long as the -cache that it references uses a local-cache configuration. In this -manner, an application leveraging singleton functionality (via the -singleton API or using a singleton deployment descriptor) will continue -function as if the server was a sole member of a cluster. For obvious -reasons, the use of a quorum does not make sense in such a -configuration.

-
-
-
-
-

6.2. Singleton deployments

-
-

WildFly 10 resurrected the ability to start a given deployment on a -single node in the cluster at any given time. If that node shuts down, -or fails, the application will automatically start on another node on -which the given deployment exists. Long time users of JBoss AS will -recognize this functionality as being akin to the -HASingletonDeployer, -a.k.a. " -deploy-hasingleton", -feature of AS6 and earlier.

-
-
-

6.2.1. Usage

-
-

A deployment indicates that it should be deployed as a singleton via a -deployment descriptor. This can either be a standalone -/META-INF/singleton-deployment.xml file or embedded within an existing -jboss-all.xml descriptor. This descriptor may be applied to any -deployment type, e.g. JAR, WAR, EAR, etc., with the exception of a -subdeployment within an EAR.
-e.g.

-
-
-
-
<singleton-deployment xmlns="urn:jboss:singleton-deployment:1.0" policy="foo"/>
-
-
-
-

The singleton deployment descriptor defines which -singleton policy should be used to deploy the -application. If undefined, the default singleton policy is used, as -defined by the singleton subsystem.

-
-
-

Using a standalone descriptor is often preferable, since it may be -overlaid onto an existing deployment archive.
-e.g.

-
-
-
-
deployment-overlay add --name=singleton-policy-foo --content=/META-INF/singleton-deployment.xml=/path/to/singleton-deployment.xml --deployments=my-app.jar --redeploy-affected
-
-
-
-
-

6.2.2. Singleton Deployment metrics

-
-

The singleton subsystem registers a set of runtime metrics for each singleton deployment installed on the server.

-
-
-
-
is-primary
-
-

Indicates whether the node on which the operation was performed is the primary provider of the given singleton deployment

-
-
primary-provider
-
-

Identifies the node currently operating as the primary provider for the given singleton deployment

-
-
providers
-
-

Identifies the set of nodes on which the given singleton deployment is installed.

-
-
-
-
-

e.g.

-
-
-
-
/subsystem=singleton/singleton-policy=foo/deployment=bar.ear:read-attribute(name=primary-provider)
-
-
-
-
-
-

6.3. Singleton MSC services

-
-

The singleton service facility exposes a mechanism for installing an MSC service such that the service only starts on a single member of a cluster at a time. -If the member providing the singleton service is shutdown or crashes, the facility automatically elects a new primary provider and starts the service on that node. -In general, a singleton election happens in response to any change of membership, where the membership is defined as the set of cluster nodes on which the given service was installed.

-
-
-

6.3.1. Installing an MSC service using an existing singleton policy

-
-

While singleton MSC services have been around since AS7, WildFly adds the ability to leverage the singleton subsystem to create singleton MSC services from existing singleton policies.

-
-
-

The singleton subsystem exposes capabilities for each singleton policy it defines.

-
-
-

These policies, encapsulated by the org.wildfly.clustering.singleton.service.SingletonPolicy interface, can be referenced via the following capability name: -"org.wildfly.clustering.singleton.policy" + policy-name

-
-
-

You can reference the default singleton policy of the server via the name: -"org.wildfly.clustering.singleton.default-policy" -e.g.

-
-
-
-
public class MyServiceActivator implements ServiceActivator {
-    @Override
-    public void activate(ServiceActivatorContext context) {
-        ServiceName name = ServiceName.parse("my.service.name");
-        // Use default singleton policy
-        Supplier<SingletonPolicy> policy = new ActiveServiceSupplier<>(context.getServiceTarget(), ServiceName.parse(SingletonDefaultRequirement.SINGLETON_POLICY.getName()));
-        ServiceBuilder<?> builder = policy.get().createSingletonServiceConfigurator(name).build(context.getServiceTarget());
-        Service service = new MyService();
-        builder.setInstance(service).install();
-    }
-}
-
-
-
-
-

6.3.2. Singleton MSC Service metrics

-
-

The singleton subsystem registers a set of runtime metrics for each singleton MSC service installed via a given singleton policy.

-
-
-
-
is-primary
-
-

Indicates whether the node on which the operation was performed is the primary provider of the given singleton service

-
-
primary-provider
-
-

Identifies the node currently operating as the primary provider for the given singleton service

-
-
providers
-
-

Identifies the set of nodes on which the given singleton service is installed.

-
-
-
-
-

e.g.

-
-
-
-
/subsystem=singleton/singleton-policy=foo/service=my.service.name:read-attribute(name=primary-provider)
-
-
-
-
-

6.3.3. Installing an MSC service using dynamic singleton policy

-
-

Alternatively, you can configure a singleton policy dynamically, which is particularly useful if you want to use a custom singleton election policy. -org.wildfly.clustering.singleton.service.SingletonPolicy is a generalization of the org.wildfly.clustering.singleton.service.SingletonServiceConfiguratorFactory interface, -which includes support for specifying an election policy, an election listener, and, optionally, a quorum.

-
-
-

The SingletonElectionPolicy is responsible for electing a member to operate as the primary singleton service provider following any change in the set of singleton service providers. -Following the election of a new primary singleton service provider, any registered SingletonElectionListener is triggered on every member of the cluster.

-
-
-

The 'SingletonServiceConfiguratorFactory' capability may be referenced using the following capability name: -"org.wildfly.clustering.cache.singleton-service-configurator-factory" + container-name + "." + cache-name

-
-
-

You can reference a 'SingletonServiceConfiguratorFactory' using the default cache of a given cache container via the name: -"org.wildfly.clustering.cache.default-singleton-service-configurator-factory" + container-name

-
-
-

e.g.

-
-
-
-
public class MySingletonElectionPolicy implements SingletonElectionPolicy {
-    @Override
-    public Node elect(List<Node> candidates) {
-        // ...
-        return ...;
-    }
-}
-
-public class MySingletonElectionListener implements SingletonElectionListener {
-    @Override
-    public void elected(List<Node> candidates, Node primary) {
-        // ...
-    }
-}
-
-public class MyServiceActivator implements ServiceActivator {
-    @Override
-    public void activate(ServiceActivatorContext context) {
-        String containerName = "foo";
-        SingletonElectionPolicy policy = new MySingletonElectionPolicy();
-        SingletonElectionListener listener = new MySingletonElectionListener();
-        int quorum = 3;
-        ServiceName name = ServiceName.parse("my.service.name");
-        // Use a SingletonServiceConfiguratorFactory backed by default cache of "foo" container
-        Supplier<SingletonServiceConfiguratorFactory> factory = new ActiveServiceSupplier<>(context.getServiceTarget(), ServiceName.parse(SingletonDefaultCacheRequirement.SINGLETON_SERVICE_CONFIGURATOR_FACTORY.resolve(containerName).getName()));
-        ServiceBuilder<?> builder = factory.get().createSingletonServiceConfigurator(name)
-                .electionListener(listener)
-                .electionPolicy(policy)
-                .requireQuorum(quorum)
-                .build(context.getServiceTarget());
-        Service service = new MyService();
-        builder.setInstance(service).install();
-    }
-}
-
-
-
-
-
-
-
-

7. Clustering API

-
-
-

WildFly exposes a public API to deployments for performing common clustering operations, such as:

-
- -
-

This zero-dependency API allows an application to perform basic clustering tasks, while remaining decoupled from the libraries that implement WildFly’s clustering logic.

-
-
-

7.1. Group membership

-
-

The Group abstraction represents a logical cluster of nodes. -The Group service provides the following capabilities:

-
-
-
    -
  • -

    View the current membership of a group.

    -
  • -
  • -

    Identifies a designated coordinator for a given group membership. This designated coordinator will be the same on every node for a given membership. Traditionally, the oldest member of the cluster is chosen as the coordinator.

    -
  • -
  • -

    Registration facility for notifications of changes to group membership.

    -
  • -
-
-
-

WildFly creates a Group instance for every defined channel defined in the JGroups subsystem, as well as a local implementation. -The local Group implementation is effectively a singleton membership containing only the current node. -e.g.

-
-
-
-
@Resource(lookup = "java:jboss/clustering/group/ee") // A Group representing the cluster of the "ee" channel
-private Group group;
-
-@Resource(lookup = "java:jboss/clustering/group/local") // A non-clustered Group
-private Group localGroup;
-
-
-
-

To ensure that your application operates consistently regardless of server configuration, you are strongly recommended to reference a given Group using an alias. -Most users should use the "default" alias, which references either:

-
-
-
    -
  • -

    A Group backed by the default channel of the server, if the JGroups subsystem is present

    -
  • -
  • -

    A non-clustered Group, if the JGroups subsystem is not present

    -
  • -
-
-
-

e.g.

-
-
-
-
@Resource(lookup = "java:jboss/clustering/group/default")
-private Group group;
-
-
-
-

Additionally, WildFly creates a Group alias for every Infinispan cache-container, which references:

-
-
-
    -
  • -

    A Group backed by the transport channel of the cache container

    -
  • -
  • -

    A non-clustered Group, if the cache container has no transport

    -
  • -
-
-
-

This is useful when using a Group within the context of an Infinispan cache.

-
-
-

e.g.

-
-
-
-
@Resource(lookup = "java:jboss/clustering/group/server") // Backed by the transport of the "server" cache-container
-private Group group;
-
-
-
-

7.1.1. Node

-
-

A Node encapsulates a member of a group (i.e. a JGroups address). -A Node has the following distinct characteristics, which will be unique for each member of the group:

-
-
-
-
getName
-
-

The distinct logical name of this group member. -This value inherently defaults to the hostname of the machine, and can be overridden via the "jboss.node.name" system property. -You must override this value if you run multiple servers on the same host.

-
-
getSocketAddress()
-
-

The distinct bind address/port used by this group member. -This will be null if the group is non-clustered.

-
-
-
-
-
-

7.1.2. Membership

-
-

A Membership is an immutable encapsulation of a group membership (i.e. a JGroups view). -Membership exposes the following properties:

-
-
-
-
getMembers()
-
-

Returns the list of members comprising this group membership. The order of this list will be consistent on all nodes in the cluster.

-
-
isCoordinator()
-
-

Indicates whether the current member is the coordinator of the group.

-
-
getCoordinator()
-
-

Returns the member designated as coordinator of this group. This methods will return a consistent value for all nodes in the cluster.

-
-
-
-
-
-

7.1.3. Usage

-
-

The Group abstract is effectively a volatile reference to the current membership, and provides a facility for notification of membership changes. -It exposes the following properties and operations:

-
-
-
-
getName()
-
-

The logical name of this group.

-
-
getLocalMember()
-
-

The Node instance corresponding to the local member.

-
-
getMembership()
-
-

Returns the current membership of this group.

-
-
register(GroupListener)
-
-

Registers the specific listener to be notified of changes to group membership.

-
-
isSingleton()
-
-

Indicates whether the groups membership is non-clustered, i.e. will only ever contain a single member.

-
-
-
-
-
-

7.1.4. Example

-
-

A distributed "Hello world" example that prints joiners and leavers of a group membership:

-
-
-
-
public class MyGroupListener implements GroupListener {
-    @Resource(lookup = "java:jboss/clustering/group/default") (1)
-    private Group group;
-    private Registration<GroupListener> listenerRegistration;
-
-    @PostConstruct
-    public void init() {
-        this.listenerRegistration = this.group.register(this);
-        System.out.println("Initial membership: " + this.group.getMembership().getMembers());
-    }
-
-    @PreDestroy
-    public void destroy() {
-        this.listenerRegistration.close(); (2)
-    }
-
-    @Override
-    public void membershipChanged(Membership previous, Membership current, boolean merged) {
-        List<Node> previousMembers = previous.getMembers();
-        List<Node> currentMembers = current.getMembers();
-        List<Node> joiners = currentMembers.stream().filter(member -> !previousMembers.contains(member)).collect(Collectors.toList());
-        if (!joiners.isEmpty()) {
-            System.out.println("Welcome: " + joiners);
-        }
-        List<Node> leavers = previousMembers.stream().filter(member -> !currentMembers.contains(member)).collect(Collectors.toList());
-        if (!leavers.isEmpty()) {
-            System.out.println("Goodbye: " + leavers);
-        }
-    }
-}
-
-
-
- - - - - - - - - -
1Injects the default Group of the server
2Make sure to close your listener registration!
-
-
-
-
-

7.2. Command Dispatcher

-
-

A command dispatcher is a mechanism for dispatching commands to be executed on members of a group.

-
-
-

7.2.1. CommandDispatcherFactory

-
-

A command dispatcher is created from a CommandDispatcherFactory, an instance of which is created for every defined channel defined in the JGroups subsystem, as well as a local implementation. -e.g.

-
-
-
-
@Resource(lookup = "java:jboss/clustering/dispatcher/ee") // A command dispatcher factory backed by the "ee" channel
-private CommandDispatcherFactory factory;
-
-@Resource(lookup = "java:jboss/clustering/dispatcher/local") // The non-clustered command dispatcher factory
-private CommandDispatcherFactory localFactory;
-
-
-
-

To ensure that your application functions consistently regardless of server configuration, we recommended that you reference the CommandDispatcherFactory using an alias. -Most users should use the "default" alias, which references either:

-
-
-
    -
  • -

    A CommandDispatcherFactory backed by the default channel of the server, if the JGroups subsystem is present

    -
  • -
  • -

    A non-clustered CommandDispatcherFactory, if the JGroups subsystem is not present

    -
  • -
-
-
-

e.g.

-
-
-
-
@Resource(lookup = "java:jboss/clustering/dispatcher/default")
-private CommandDispatcherFactory factory;
-
-
-
-

Additionally, WildFly creates a CommandDispatcherFactory alias for every Infinispan cache-container, which references:

-
-
-
    -
  • -

    A CommandDispatcherFactory backed by the transport channel of the cache container

    -
  • -
  • -

    A non-clustered CommandDispatcherFactory, if the cache container has no transport

    -
  • -
-
-
-

This is useful in the case where a CommandDispatcher is used to communicate with members on which a given cache is deployed.

-
-
-

e.g.

-
-
-
-
@Resource(lookup = "java:jboss/clustering/dispatcher/server") // Backed by the transport of the "server" cache-container
-private CommandDispatcherFactory factory;
-
-
-
-
-

7.2.2. Command

-
-

A Command encapsulates logic to be executed on a group member. -A Command can leverage 2 type of parameters during execution:

-
-
-
-
Sender supplied parameters
-
-

These are member variables of the Command implementation itself, and are provided during construction of the Command object. -As properties of a serializable object, these must also be serializable.

-
-
Receiver supplied parameters, i.e. local context
-
-

These are encapsulated in a single object, supplied during construction of the CommandDispatcher. -The command dispatcher passes the local context as a parameter to the Command.execute(…​) method.

-
-
-
-
-
-

7.2.3. CommandDispatcher

-
-

The CommandDispatcherFactory creates a CommandDispatcher using a service identifier and a local context. -This service identifier is used to segregate commands from multiple command dispatchers. -A CommandDispatcher will only receive commands dispatched by a CommandDispatcher with the same service identifier.

-
-
-

Once created, a CommandDispatcher will locally execute any received commands until it is closed. -Once closed, a CommandDispatcher is no longer allowed to dispatch commands.

-
-
-

The functionality of a CommandDispatcher boils down to 2 operations:

-
-
-
-
executeOnMember(Command, Node)
-
-

Executes a given command on a specific group member.

-
-
executeOnGroup(Command, Node…​)
-
-

Executes a given command on all members of the group, optionally excluding specific members

-
-
-
-
-

Both methods return responses as a CompletionStage, allowing for asynchronous processing of responses as they complete.

-
-
-
-

7.2.4. Example

-
-

To demonstrate how to use a CommandDispatcher, let’s create a distributed "hello world" application.

-
-
-

First, let’s create a simple HelloWorld interface which enables the caller to send a specific message to the entire group:

-
-
-
-
public interface HelloWorld {
-    void send(String message);
-}
-
-
-
-

Next, we need to define a local command execution context. -This should encapsulate any local information we need to make available to the execution of any command received by our CommandDispatcher. -For demonstration purposes, let’s make this a separate interface:

-
-
-
-
public interface LocalContext {
-    Node getLocalMember();
-}
-
-
-
-

Next we create a "hello world" Command that contains a message from the sender, and responds with a message of its own.

-
-
-
-
public class HelloWorldCommand implements Command<String, LocalContext> {
-    private final String message;
-
-    public HelloWorldCommand(String message) {
-        this.message = message;
-    }
-
-    @Override
-    public String execute(LocalContext context) {
-        System.out.println(String.format("Received message: %s", this.message);
-        return String.format("Hello from %s", context.getLocalMember().getName());
-    }
-}
-
-
-
-

Finally, we create a @Singleton Jakarta Enterprise Beans that implements our HelloWorld interface:

-
-
-
-
@Singleton
-@Startup
-@Local(HelloWorld.class)
-public class CommandDispatcherBean implements HelloWorld, LocalContext {
-
-    @Resource(lookup = "java:jboss/clustering/dispatcher/default") (1)
-    private CommandDispatcherFactory factory;
-    private CommandDispatcher<LocalContext> dispatcher;
-
-    @PostConstruct
-    public void init() {
-        this.dispatcher = this.factory.createCommandDispatcher(this.getClass().getName(), this);
-    }
-
-    @PreDestroy
-    public void destroy() {
-        this.dispatcher.close(); (2)
-    }
-
-    @Override
-    public Node getLocalMember() {
-        return this.factory.getGroup().getLocalMember();
-    }
-
-    @Override
-    public void send(String message) {
-        Map<Node, CompletionStage<String>> responses = this.dispatcher.executeOnGroup(new HelloWorldCommand(message), this.factory.getGroup().getLocalMember()); (3)
-        responses.values().forEach(stage -> stage.exceptionally(Exception::getLocalizedMessage).thenAccept(System.out::println));
-    }
-}
-
-
-
- - - - - - - - - - - - - -
1Uses the default CommandDispatcherFactory of the server
2Don’t forget to close your CommandDispatcher!
3We don’t want to send the message to ourselves, so we exclude the local member
-
-
-

Now you can use the HelloWorld.send(…​) operation to say hello to your cluster.

-
-
-
-
-

7.3. Service Provider Registry

-
-

A service provider registry is a specialized cache that tracks the group members that provide a given service. -The ServiceProviderRegistry might be used in concert with a CommandDispatcher to communicate between a subset of group members on which a given service is installed. -It includes a registration facility to receive notifications when the set of nodes providing a given service changes. -WildFly uses this internally in its Singleton service/deployment implementation to drive the primary election process.

-
-
-

WildFly exposes a ServiceProviderRegistry (from which a ServiceProviderRegistration is created) for each cache defined by the Infinispan subsystem.

-
-
-

7.3.1. Example

-
-

The following is an example of using a ServiceProviderRegistry to publish the availability of a given singleton Jakarta Enterprise Beans. -The getProviders() method will return the set of nodes on which the ServiceProviderRegistrationBean is deployed.

-
-
-
-
@Singleton
-@Startup
-@Local(ServiceProviderRegistry.class)
-public class ServiceProviderRegistrationBean implements ServiceProviderRegistration<String>, ServiceProviderRegistration.Listener {
-    @Resource(lookup = "java:jboss/clustering/providers/server/default") (1)
-    private ServiceProviderRegistry registry;
-    private ServiceProviderRegistration registration;
-
-    @PostConstruct
-    public void init() {
-        this.registration = this.registry.register(this.getClass().getName(), this);
-    }
-
-    @PreDestroy
-    public void destroy() {
-        this.registration.close(); (2)
-    }
-
-    @Override
-    public void providersChanged(Set<Node> providers) {
-        System.out.println("%s is now available on the following nodes: %s", this.getClass().getName(), providers);
-    }
-
-    @Override
-    public String getService() {
-        return this.registration.getService();
-    }
-
-    @Override
-    public Set<Node> getProviders() {
-        return this.registration.getProviders();
-    }
-
-    @Override
-    public void close() {
-        // Do nothing - registration is close on bean destroy
-    }
-}
-
-
-
- - - - - - - - - -
1Uses the default cache of the "server" cache container.
2Remember to close the registration!
-
-
-
-
-

7.4. Registry

-
-

A registry is a specialized cache for storing a unique key/value pair for each member of a group. -This is useful to bridge WildFly’s Group members to an internal identification system used by an application. -The Registry service includes a facility for notifying group members of new, updated, or obsolete registry entries.

-
-
-

WildFly exposes a RegistryFactory (from which a Registry is created) for each cache defined by the Infinispan subsystem.

-
-
-

7.4.1. Example

-
-

The following Registry example assigns a UUID to each group member, allowing each member to query the identifier of any other member:

-
-
-
-
@Singleton
-@Startup
-@Local(Registry.class)
-public class RegistryBean implements Registry<UUID, Void> {
-    @Resource(lookup = "java:jboss/clustering/registry/server/default") (1)
-    private RegistryFactory<UUID, Void> factory;
-    private Registry<UUID, Void> registry;
-
-    @PostConstruct
-    public void init() {
-        this.registry = this.factory.createRegistry(new AbstractMap.SimpleImmutableEntry<>(UUID.randomUUID(), null);
-    }
-
-    @PreDestroy
-    public void destroy() {
-        this.registry.close(); (2)
-    }
-
-    @Override
-    public Group getGroup() {
-        return this.registry.getGroup();
-    }
-
-        @Override
-        public Map<UUID, Void> getEntries() {
-            return this.registry.getEntries();
-        }
-
-    @Override
-    public Map.Entry<UUID, Void> getEntry(Node node) {
-        return this.registry.getEntry(node);
-    }
-
-    @Override
-    public void close() {
-        // Do nothing - registry is closed on bean destroy
-    }
-}
-
-
-
- - - - - - - - - -
1Uses the default cache of the "server" cache container.
2Remember to close the registry!
-
-
-
-
-
-
-

8. JGroups

-
-
-

8.1. JGroups Subsystem

-
-

8.1.1. Purpose

-
-

The JGroups subsystem provides group communication support for HA -services in the form of JGroups channels.

-
-
-

Named channel instances permit application peers in a cluster to -communicate as a group and in such a way that the communication -satisfies defined properties (e.g. reliable, ordered, -failure-sensitive). Communication properties are configurable for each -channel and are defined by the protocol stack used to create the -channel. Protocol stacks consist of a base transport layer (used to -transport messages around the cluster) together with a user-defined, -ordered stack of protocol layers, where each protocol layer supports a -given communication property.

-
-
-

The JGroups subsystem provides the following features:

-
-
-
    -
  • -

    allows definition of named protocol stacks

    -
  • -
  • -

    view run-time metrics associated with channels

    -
  • -
  • -

    specify a default stack for general use

    -
  • -
-
-
-

In the following sections, we describe the JGroups subsystem.

-
-
- - - - - -
- - -JGroups channels are created transparently as part of the clustering -functionality (e.g. on clustered application deployment, channels will -be created behind the scenes to support clustered features such as -session replication or transmission of SSO contexts around the cluster). -
-
-
-
-

8.1.2. Configuration example

-
-

What follows is a sample JGroups subsystem configuration showing all of -the possible elements and attributes which may be configured. We shall -use this example to explain the meaning of the various elements and -attributes.

-
-
- - - - - -
- - -The schema for the subsystem, describing all valid elements and -attributes, can be found in the WildFly distribution, in the docs/schema -directory. -
-
-
-
-
<subsystem xmlns="urn:jboss:domain:jgroups:6.0">
-    <channels default="ee">
-        <channel name="ee" stack="udp" cluster="ejb"/>
-    </channels>
-    <stacks>
-        <stack name="udp">
-            <transport type="UDP" socket-binding="jgroups-udp"/>
-            <protocol type="PING"/>
-            <protocol type="MERGE3"/>
-            <protocol type="FD_SOCK"/>
-            <protocol type="FD_ALL"/>
-            <protocol type="VERIFY_SUSPECT"/>
-            <protocol type="pbcast.NAKACK2"/>
-            <protocol type="UNICAST3"/>
-            <protocol type="pbcast.STABLE"/>
-            <protocol type="pbcast.GMS"/>
-            <protocol type="UFC"/>
-            <protocol type="MFC"/>
-            <protocol type="FRAG3"/>
-        </stack>
-        <stack name="tcp">
-            <transport type="TCP" socket-binding="jgroups-tcp"/>
-            <socket-protocol type="MPING" socket-binding="jgroups-mping"/>
-            <protocol type="MERGE3"/>
-            <protocol type="FD_SOCK"/>
-            <protocol type="FD_ALL"/>
-            <protocol type="VERIFY_SUSPECT"/>
-            <protocol type="pbcast.NAKACK2"/>
-            <protocol type="UNICAST3"/>
-            <protocol type="pbcast.STABLE"/>
-            <protocol type="pbcast.GMS"/>
-            <protocol type="MFC"/>
-            <protocol type="FRAG3"/>
-        </stack>
-    </stacks>
-</subsystem>
-
-
-
-
<subsystem>
-
-

This element is used to configure the subsystem within a WildFly system -profile.

-
-
-
    -
  • -

    xmlns This attribute specifies the XML namespace of the JGroups -subsystem and, in particular, its version.

    -
  • -
  • -

    default-stack This attribute is used to specify a default stack for -the JGroups subsystem. This default stack will be used whenever a stack -is required but no stack is specified.

    -
  • -
-
-
-
-
<stack>
-
-

This element is used to configure a JGroups protocol stack.

-
-
-
    -
  • -

    name This attribute is used to specify the name of the stack.

    -
  • -
-
-
-
-
<transport>
-
-

This element is used to configure the transport layer (required) of the -protocol stack.

-
-
-
    -
  • -

    type This attribute specifies the transport type (e.g. UDP, TCP, -TCPGOSSIP)

    -
  • -
  • -

    socket-binding This attribute references a defined socket binding in -the server profile. It is used when JGroups needs to create general -sockets internally.

    -
  • -
  • -

    diagnostics-socket-binding This attribute references a defined -socket binding in the server profile. It is used when JGroups needs to -create sockets for use with the diagnostics program. For more about the -use of diagnostics, see the JGroups documentation for probe.sh.

    -
  • -
  • -

    default-executor This attribute references a defined thread pool -executor in the threads subsystem. It governs the allocation and -execution of runnable tasks to handle incoming JGroups messages.

    -
  • -
  • -

    oob-executor This attribute references a defined thread pool -executor in the threads subsystem. It governs the allocation and -execution of runnable tasks to handle incoming JGroups OOB -(out-of-bound) messages.

    -
  • -
  • -

    timer-executor This attribute references a defined thread pool -executor in the threads subsystem. It governs the allocation and -execution of runnable timer-related tasks.

    -
  • -
  • -

    shared This attribute indicates whether or not this transport is -shared amongst several JGroups stacks or not.

    -
  • -
  • -

    thread-factory This attribute references a defined thread factory in -the threads subsystem. It governs the allocation of threads for running -tasks which are not handled by the executors above.

    -
  • -
  • -

    site This attribute defines a site (data centre) id for this node.

    -
  • -
  • -

    rack This attribute defines a rack (server rack) id for this node.

    -
  • -
  • -

    machine This attribute defines a machine (host) is for this node.

    -
  • -
-
-
- - - - - -
- - -site, rack and machine ids are used by the Infinispan topology-aware -consistent hash function, which when using dist mode, prevents dist mode -replicas from being stored on the same host, rack or site -
-
-
-

.

-
-
-
<property>
-
-

This element is used to configure a transport property.

-
-
-
    -
  • -

    name This attribute specifies the name of the protocol property. The -value is provided as text for the property element.

    -
  • -
-
-
-
-
-
<protocol>
-
-

This element is used to configure a (non-transport) protocol layer in -the JGroups stack. Protocol layers are ordered within the stack.

-
-
-
    -
  • -

    type This attribute specifies the name of the JGroups protocol -implementation (e.g. MPING, pbcast.GMS), with the package prefix -org.jgroups.protocols removed.

    -
  • -
  • -

    socket-binding This attribute references a defined socket binding in -the server profile. It is used when JGroups needs to create general -sockets internally for this protocol instance.

    -
  • -
-
-
-
-
<relay>
-
-

This element is used to configure the RELAY protocol for a JGroups -stack. RELAY is a protocol which provides cross-site replication between -defined sites (data centres). In the RELAY protocol, defined sites -specify the names of remote sites (backup sites) to which their data -should be backed up. Channels are defined between sites to permit the -RELAY protocol to transport the data from the current site to a backup -site.

-
-
-
    -
  • -

    site This attribute specifies the name of the current site. Site -names can be referenced elsewhere (e.g. in the JGroups remote-site -configuration elements, as well as backup configuration elements in the -Infinispan subsystem)

    -
  • -
-
-
-
<remote-site>
-
-

This element is used to configure a remote site for the RELAY protocol.

-
-
-
    -
  • -

    name This attribute specifies the name of the remote site to which -this configuration applies.

    -
  • -
  • -

    stack This attribute specifies a JGroups protocol stack to use for -communication between this site and the remote site.

    -
  • -
  • -

    cluster This attribute specifies the name of the JGroups channel to -use for communication between this site and the remote site.

    -
  • -
-
-
-
-
-
-

8.1.3. Use Cases

-
-

In many cases, channels will be configured via XML as in the example -above, so that the channels will be available upon server startup. -However, channels may also be added, removed or have their -configurations changed in a running server by making use of the WildFly -management API command-line interface (CLI). In this section, we present -some key use cases for the JGroups management API.

-
-
-

The key use cases covered are:

-
-
-
    -
  • -

    adding a stack

    -
  • -
  • -

    adding a protocol to an existing stack

    -
  • -
  • -

    adding a property to a protocol

    -
  • -
-
-
- - - - - -
- - -The WildFly management API command-line interface (CLI) itself can be -used to provide extensive information on the attributes and commands -available in the JGroups subsystem interface used in these examples. -
-
-
-
Add a stack
-
-
-
/subsystem=jgroups/stack=mystack:add(transport={}, protocols={})
-
-
-
-
-
Add a protocol to a stack
-
-
-
/subsystem=jgroups/stack=mystack/transport=TRANSPORT:add(type=<type>, socket-binding=<socketbinding>)
-
-
-
-
-
/subsystem=jgroups/stack=mystack:add-protocol(type=<type>, socket-binding=<socketbinding>)
-
-
-
-
-
Add a property to a protocol
-
-
-
/subsystem=jgroups/stack=mystack/transport=TRANSPORT/property=<property>:add(value=<value>)
-
-
-
-
-
-
-

8.2. Member Discovery

-
-

8.2.1. Discovery for Kubernetes

-
-

KUBE_PING is a discovery protocol for JGroups cluster nodes managed by Kubernetes. -Since Kubernetes is in charge of launching nodes, it knows the addresses of all pods it started, -and is therefore an ideal place to ask for cluster discovery. -Discovery is therefore done by asking Kubernetes for a list of addresses of all cluster nodes. -Combined with bind_port / port_range, the protocol will then send a discovery request to all instances and wait for the responses.

-
-
-

To reconfigure an existing server profile with KUBE_PING use the following CLI batch replacing the namespace, -labels and stack name (tcp) with the target stack:

-
-
-
-
batch
-/subsystem=jgroups/stack=tcp/protocol=MPING:remove()
-/subsystem=jgroups/stack=tcp/protocol=kubernetes.KUBE_PING:add(add-index=1, properties={namespace="production", labels="cluster=nyc"})
-run-batch
-
-
-
- - - - - -
- - -To be able to query the Kubernetes server ensure view permissions are granted on the service account. -
-
-
-

For advanced configuration options, please visit protocol’s documentation here.

-
-
-
-

8.2.2. Discovery for AWS EC2

-
-

The org.jgroups.protocols.aws.S3_PING is a discovery protocol using AWS S3 buckets as cluster information store.

-
-
-

To provision using Galleon, use the jgroups-aws layer. -Note that the layer does not update configuration, only provisions necessary modules.

-
-
-

The following minimal example updates the existing tcp stack to use this discovery protocol instead of MPING:

-
-
-
-
batch
-/subsystem=jgroups/stack=tcp/protocol=MPING:remove()
-/subsystem=jgroups/stack=tcp/protocol=org.jgroups.protocols.aws.S3_PING:add(add-index=1, module="org.jgroups.aws", properties={region_name="eu-central-1", bucket_name="jgroups-s3"})
-run-batch
-
-
-
-

The S3 client used by the protocol uses the default credential store provider. -Refer to AWS documentation how to generate and supply appropriate credentials. -For instance, credentials can be provided by Java system properties (aws.accessKeyId and aws.secretAccessKey), -environmental properties (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY), etc.

-
-
-

For advanced configuration options, please visit protocol’s documentation here.

-
-
-
-
-
-
-

9. Infinispan

-
-
-

9.1. Infinispan Subsystem

-
-

The Infinispan subsystem configures a set of Infinispan cache containers and cache configurations for use by WildFly clustering services.

-
-
-

9.1.1. Cache container

-
-

A cache container manages a set of cache configurations that share the same transport and marshalling configuration. -Cache containers returned by the Infinispan subsystem are auto-configured with the following customizations:

-
-
-
    -
  • -

    A custom transport capable of sharing a JGroups channel defined by the JGroups subsystem.

    -
  • -
  • -

    Uses WildFly’s mbean server, if the org.jboss.as.jmx extension is present.

    -
  • -
  • -

    Marshaller configured to resolve classes using JBoss Modules.

    -
  • -
  • -

    Marshaller configured with a set of marshalling optimizations for common JDK classes

    -
  • -
  • -

    Marshaller configured with additional Externalizers loadable from the configured module attribute.

    -
  • -
-
-
-

e.g. To create a new cache container that loads marshallers from the "org.bar" module:

-
-
-
-
/subsystem=infinispan/cache-container=foo:add(module=org.foo)
-
-
-
-

A cache container may designate a specific cache as its default cache, i.e. the cache returned via CacheContainer.getCache():

-
-
-

e.g. To set "bar" as the default cache of the "foo" container:

-
-
-
-
/subsystem=infinispan/cache-container=foo:write-attribute(name=default-cache, value=bar)
-
-
-
-

A cache container can be injected directly into Jakarta EE applications using the @Resource annotation, e.g.

-
-
-
-
@Resource(lookup = "java:jboss/infinispan/container/foo")
-private org.infinispan.manager.EmbeddedCacheManager container;
-
-
-
-

Note that the server will not manage the lifecycle of any caches created from the injected cache manager. -The application is responsible for managing the lifecycle of manually created caches.

-
-
-
Transport
-
-

Configures the mechanism used by clustered caches to communicate with each other. -It is only necessary to define a transport if the cache container contains clustered caches.

-
-
-

To create a JGroups transport using the default channel of the server:

-
-
-
-
/subsystem=infinispan/cache-container=foo/transport=jgroups:add()
-
-
-
-

To create a JGroups transport using a distinct "alpha" channel, that uses the "tcp" stack:

-
-
-
-
/subsystem=jgroups/channel=alpha:add(stack=tcp)
-/subsystem=infinispan/cache-container=foo/transport=jgroups:add(channel=alpha)
-
-
-
-

For a complete list of transport attributes, refer to the WildFly management model documentation

-
-
-

To remove an existing JGroups transport, you can either use the standard remove resource operation:

-
-
-
-
/subsystem=infinispan/cache-container=foo/transport=jgroups:remove()
-
-
-
-

…​ or by adding the "none" transport (which will auto-remove any existing transport):

-
-
-
-
/subsystem=infinispan/cache-container=foo/transport=none:add(){allow-resource-service-restart=true}
-
-
-
-
-
Cache types
-
-

Infinispan supports a number of cache types for use in both HA and non-HA server profiles.

-
-
-
Local
-
-

A local cache stores a given cache entry only on the local node. -A local cache does not require a transport, as cache reads and writes are always local.

-
-
-

For more information about this cache type, refer to the the Infinispan documentation.

-
-
-

To create a local cache:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar:add()
-
-
-
-

For a complete list of local-cache attributes, refer to the WildFly management model documentation

-
-
-
-
Replicated
-
-

A replicated cache stores a given cache entry on every node in the cluster. -A replicated cache requires a transport, as cache writes are replicated to all nodes in the cluster on which the associated cache is running.

-
-
-

For more information about this cache type, refer to the the Infinispan documentation.

-
-
-

To create a replicated cache:

-
-
-
-
/subsystem=infinispan/cache-container=foo/replicated-cache=bar:add()
-
-
-
-

For a complete list of replicated-cache attributes, refer to the WildFly management model documentation

-
-
-
-
Distributed
-
-

A distributed cache stores a given cache entry on a configurable number of nodes in the cluster, assigned via an algorithm based on consistent hashing. -A distributed cache requires a transport, as cache writes need to forward to each owner, and cache reads from a non-owner require a remote request.

-
-
-

For more information about this cache type, refer to the the Infinispan documentation.

-
-
-

To create a distributed cache where a given entry is stored on 3 nodes:

-
-
-
-
/subsystem=infinispan/cache-container=foo/distributed-cache=bar:add(owners=3)
-
-
-
-

For a complete list of distributed-cache attributes, refer to the WildFly management model documentation

-
-
-
-
Scattered
-
-

A scattered cache is a variation of a distributed cache that maintains 2 copies of a particular cache entry. -Consequently, it can only tolerate failure of a single node at a time. -Primary ownership of a cache entry is determined by the same mechanism used by a distributed cache, -while the backup copy is the node that last updated the entry.

-
-
-

This design means that a scattered cache only requires 1 remote invocation to write a given cache entry, regardless of which node initiated the cache operation. -By comparison, a distributed cache (with 2 owners) uses 1 remote invocation to write a cache entry if and only if the primary owner initiated the cache operation, and otherwise requires 2 remote invocations.

-
-
-

For more information about this cache type, refer to the the Infinispan documentation.

-
-
-

To create a scattered cache:

-
-
-
-
/subsystem=infinispan/cache-container=foo/scattered-cache=bar:add()
-
-
-
-

For a complete list of scattered-cache attributes, refer to the WildFly management model documentation

-
-
-
-
Invalidation
-
-

An invalidation cache is a special type of clustered cache that does not share state, but instead ensures that remote state is invalidated any time a given entry is updated locally. -An invalidation cache requires a transport, as cache writes trigger invalidation on remote nodes on which the associated cache is running.

-
-
-

For more information about this cache type, refer to the the Infinispan documentation.

-
-
-

To create an invalidation cache:

-
-
-
-
/subsystem=infinispan/cache-container=foo/invalidation-cache=bar:add()
-
-
-
-

For a complete list of invalidation-cache attributes, refer to the WildFly management model documentation

-
-
-
-
-
Cache features
-
-

The configuration of a cache is divided into several components, each defining a specific cache feature. -Because a given cache configuration requires each component relevant to its cache type, cache add operations and cache component add operations are typically batched. -Any undefined components are auto-created using their defaults.

-
-
-

e.g. The following cache add operation:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar:add()
-
-
-
-

…​ is actually equivalent to the following sequence of operations:

-
-
-
-
batch
-/subsystem=infinispan/cache-container=foo/local-cache=bar:add()
-/subsystem=infinispan/cache-container=foo/local-cache=bar/component=expiration:add()
-/subsystem=infinispan/cache-container=foo/local-cache=bar/component=locking:add()
-/subsystem=infinispan/cache-container=foo/local-cache=bar/component=transaction:add()
-/subsystem=infinispan/cache-container=foo/local-cache=bar/memory=object:add()
-/subsystem=infinispan/cache-container=foo/local-cache=bar/store=none:add()
-run-batch
-
-
-
-

Similarly, you can reset all the attributes of a component by simply removing the component. -e.g.

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar:component=expiration:remove(){allow-resource-service-restart=true}
-
-
-
-

…​ is equivalent to:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar:component=expiration:remove(){allow-resource-service-restart=true}
-/subsystem=infinispan/cache-container=foo/local-cache=bar:component=expiration:add(){allow-resource-service-restart=true}
-
-
-
-
Memory
-
-

An Infinispan cache can be configured to store cache entries as Java objects or as binary data (i.e. byte[]), either on or off the JVM heap. -The type of storage used has semantic implications for the user of the cache. -When using object storage, the cache has store-as-reference semantics, whereas when using binary storage the cache has call-by-value semantics. -Consider the following logic:

-
-
-
-
List<String> list = new ArrayList<>();
-cache.startBatch();
-cache.put("a", list);
-list.add("test");
-cache.endBatch(true);
-
-List<String> result = cache.get("a");
-System.out.println(result.size());
-
-
-
-

How many elements are in the "result" list? The answer depends on how the cache is configured.

-
-
-

When the cache is configured to use object memory, our result list has 1 element. -When the cache is configured to use binary (or off-heap) memory, our result list is empty. -When using binary memory, the cache value must be marshalled to a byte[] on write and unmarshalled on read, thus any mutations of the cache value in the interim are not reflected in the cache.

-
-
-Object storage -
-

When using object storage, cache keys and values are stored as Java object references. -Object storage may be configured with a maximum size. -When the number of entries in the cache exceeds this threshold, the least recently used entries are evicted from memory.

-
-
-

e.g. To store a maximum of 100 objects in the Java heap:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/memory=object:add(size=100)
-
-
-
-

For a complete list of memory=object attributes, refer to the WildFly management model documentation

-
-
-
-Binary storage (on-heap) -
-

When using binary storage, each cache entry is stored as a byte[] within the JVM heap. -Binary storage may also be configured with a maximum size. -This size can be specified either as a maximum number of entries (i.e. COUNT), or as a maximum number of bytes (i.e. MEMORY). -When the number of entries in the cache exceeds this threshold, the least recently used entries are evicted from memory.

-
-
-

e.g. To store a maximum of 1 MB of binary data in the Java heap:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/memory=binary:add(size=1048576, eviction-type=MEMORY)
-
-
-
-

For a complete list of memory=binary attributes, refer to the WildFly management model documentation

-
-
-
-Off-heap binary storage -
-

When using off-heap storage, each cache entry is stored as a byte[] in native memory allocated via sun.misc.Unsafe. -Off-heap memory storage may also be configured with a maximum size, specified either as a maximum number of entries (i.e. COUNT), or as a maximum number of bytes (i.e. MEMORY). -When the number of entries in the cache exceeds this threshold, the least recently used entries are evicted from memory.

-
-
-

e.g. To store a maximum of 1 GB of binary data in native memory outside of the Java heap:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/memory=off-heap:add(size=1073741824)
-
-
-
-

For a complete list of memory=off-heap attributes, refer to the WildFly management model documentation

-
-
-
-
-
Transactions
-
-

An Infinispan cache can be configured as transactional or non-transactional. -This behavior is determined by the mode attribute, which supports the following values:

-
-
-
-
NONE
-
-

Non-transactional cache (the default behavior).

-
-
BATCH
-
-

Transactional cache using a local Infinispan transaction manager. -Infinispan transactions are started/committed/rolled-back using Infinispan’s batching API.

-
-
NON_XA
-
-

Transactional cache configured to use the server’s transaction manager, registering as a Synchronization to the current transaction. -Cache commit/rollback happens after the associated transaction completes.

-
-
NON_DURABLE_XA
-
-

Transactional cache configured to use the server’s transaction manager, enlisting as an XAResource to the current transaction, but without transaction recovery support.

-
-
FULL_XA
-
-

Transactional cache configured to use the server’s transaction manager, with full transaction recovery support.

-
-
-
-
-

Within the context of a transaction, cache write operations must obtain a lock on the affected keys. -Locks may be acquired either pessimistically (the default), i.e. before invoking the operation, or optimistically, i.e. before transaction commit.

-
-
-

e.g. To configure a transactional cache using local Infinispan transactions with OPTIMISTIC locking:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=transaction(mode=BATCH, locking=OPTIMISTIC)
-
-
-
-

For a complete list of transaction attributes, refer to the WildFly management model documentation

-
-
-
-
Locking
-
-

Within the context of a transaction, entries read from the cache are isolated from other concurrent transactions according to the configured isolation level. -Infinispan supports the following transaction isolation levels:

-
-
-
-
READ_COMMITTED
-
-

A cache read may return a different value than a previous read within the same transaction, even if a concurrent transaction updated the entry. -This is the default isolation level.

-
-
REPEATABLE_READ
-
-

A cache read will return the same value as a previous read within the same transaction, even if a concurrent transaction updated the entry.

-
-
-
-
- - - - - -
- - -Cache reads are always lock-free unless invoked using Flag.FORCE_WRITE_LOCK. -
-
-
-

e.g. To configure a cache using REPEATABLE_READ isolation:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=locking(isolation=REPEATABLE_READ)
-
-
-
-

For a complete list of locking attributes, refer to the WildFly management model documentation

-
-
-
-
Expiration
-
-

The expiration component configures expiration defaults for cache entries. -Cache entries may be configured to expire after some duration since creation (i.e. lifespan) or since last accessed (i.e. max-idle).

-
-
-

e.g. To configure expiration of entries older than 1 day, or that have not been accessed within the past hour:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=expiration(lifespan=86400000, max-idle=3600000)
-
-
-
- - - - - -
- - -max-idle based expiration is not generally safe for use with clustered caches, as the meta data of a cache entry is not replicated by cache read operations -
-
-
-

For a complete list of expiration attributes, refer to the WildFly management model documentation

-
-
-
-
Persistence
-
-

An Infinispan cache can optionally load/store cache entries from an external storage. -All cache stores support the following attributes:

-
-
-
-
fetch-state
-
-

Indicates whether to refresh persistent state from cluster members on cache start. -Does not apply to a local or invalidation cache, nor a shared store. -Default is true.

-
-
passivation
-
-

Indicates whether cache entries should only be persisted upon eviction from memory. -Default is true.

-
-
preload
-
-

Indicates whether cache entries should be loaded into memory on cache start. -Default is false.

-
-
purge
-
-

Indicates whether the cache store should be purged on cache start. -Purge should never be enabled on a shared store. -Default is true.

-
-
shared
-
-

Indicates that the same cache store endpoint (e.g. database, data grid, etc.) is used by all members of the cluster. -When using a shared cache store, cache entries are only persisted by the primary owner of a given cache entry. -Default is false.

-
-
-
-
-

To remove an existing cache store, you can either use the standard resource remove operation:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/store=file:remove()
-
-
-
-

…​ or by adding the "none" store (which auto-removes any existing store):

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/store=none:add(){allow-resource-service-restart=true}
-
-
-
-File store -
-

A file store persists cache entries to the local filesystem. -By default, files are stored in a file named "cache-name.dat" within a subdirectory named "infinispan/container-name" relative to the server’s data directory.

-
-
-

e.g. To persist cache entries to $HOME/foo/bar.dat:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/store=file:add(path=foo, relative-to=user.home)
-
-
-
-
-JDBC store -
-

A JDBC store persists cache entries to a database.

-
-
-

e.g. To persist cache entries to an H2 database via the ExampleDS data-source:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/store=jdbc:add(data-source=ExampleDS, dialect=H2)
-
-
-
-
-HotRod store -
-

The HotRod store uses one dedicated remote cache for each cache created by the server. -For Infinispan Server versions supporting protocol version 2.7 and above (Infinispan Server version 9.2) -a persistent remote cache will be automatically created based on default configuration. -The recommended configuration for the remote cache where session data will be offloaded is transactional distribution mode cache with pessimistic locking. -When using Infinispan Server version prior to 9.2, the caches need to be configured manually on the server where cache names correspond to the deployment file names (e.g. test.war).

-
-
-

Once a Remote Cache Container is configured a hotrod store can be configured replacing any existing store. -The following CLI script demonstrates a typical use case for offloading sessions using an invalidation-cache with a shared, persistent infinispan-server store referencing an existing remote-cache-container:

-
-
-
-
batch
-/subsystem=infinispan/cache-container=web/invalidation-cache=foo:add()
-/subsystem=infinispan/cache-container=web/invalidation-cache=foo/store=hotrod:add(remote-cache-container=web, cache-configuration=transactional, fetch-state=false, shared=true)
-/subsystem=infinispan/cache-container=web/invalidation-cache=foo/component=transaction:add(mode=BATCH)
-/subsystem=infinispan/cache-container=web/invalidation-cache=foo/component=locking:add(isolation=REPEATABLE_READ)
-run-batch
-
-
-
-
-
-
State transfer
-
-

The state transfer component defines the behavior for the initial transfer of state from remote caches on cache start. -State transfer is only applicable to distributed and replicated caches. -When configured with a timeout, a cache is only available after its initial state transfer completes. -If state transfer does not complete within the configured timeout, the cache will fail to start.

-
-
-

e.g. To configure a state-transfer timeout of 1 minute:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=state-transfer:add(timeout=60000)
-
-
-
-

Alternatively, state transfer can be configured to be non-blocking, by configuring a timeout of 0. -While this prevents timeouts due to large state transfers, cache operations on the new node will require remote invocations to retrieve the requisite state until state transfer is complete.

-
-
-

e.g. To configure a non-blocking state transfer:

-
-
-
-
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=state-transfer:add(timeout=0)
-
-
-
-

For a complete list of state-transfer attributes, refer to the WildFly management model documentation

-
-
-
-
Injecting a cache into Jakarta EE applications
-
-

A cache can be injected directly into Jakarta EE applications using the @Resource annotation, e.g.

-
-
-
-
@Resource(lookup = "java:jboss/infinispan/cache/foo/bar") (1)
-private org.infinispan.Cache<Integer, Object> cache;
-
-
-
- - - - - -
1where foo is the name of the cache container and bar is the name of the cache to inject
-
-
-

or in order to inject the default cache of the cache container use the following resource lookup:

-
-
-
-
@Resource(lookup = "java:jboss/infinispan/cache/foo/default")
-
-
-
-
-
-
-

9.1.2. Remote Cache Container

-
-

While Infinispan project is used as a library internally by WildFly to provide data distribution, Infinispan project is also distributed in a standalone server mode. -The Infinispan Server cluster operates as a language-independent service accessed remotely over a number of protocols (HotRod, REST, etc).

-
-
-

HotRod is Infinispan’s custom optimized binary protocol which was designed to:

-
-
-
    -
  • -

    enable faster client/server interactions compared to other existing text-based protocols,

    -
  • -
  • -

    allow clients to make more intelligent decisions with regards to load-balancing, failover,

    -
  • -
  • -

    and provide advanced cache operations.

    -
  • -
-
-
-

To learn more about the HotRod protocol itself and how to setup and run Infinispan Server, -refer to Infinispan documentation for the appropriate version.

-
-
-
Configuration
-
-

To configure a remote-cache-container ensure you have a list of available Infinispan Server nodes. -The following example CLI script first adds socket bindings to two known Infinispan Server nodes, -followed by configuration of the cluster.

-
-
-
-
batch
-/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=infinispan-server-1:add(host=server1.example.com, port=11622)
-/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=infinispan-server-2:add(host=server2.example.com, port=11722)
-/subsystem=infinispan/remote-cache-container=foo:add(default-remote-cluster=bar)
-/subsystem=infinispan/remote-cache-container=foo/remote-cluster=bar:add(socket-bindings=[infinispan-server-1, infinispan-server-2])
-run-batch
-
-
-
-

Upon reload, this will register necessary services for the client. -A HotRod client can be injected directly into Jakarta EE applications using the @Resource annotation.

-
-
-
-
@Resource(lookup = "java:jboss/infinispan/remote-container/foo")
-private org.infinispan.client.hotrod.RemoteCacheContainer client;
-
-
-
-
Security
-
-

Securing the store is just a matter of configuring the remote-cache-container with an SSL context. -Please follow the Elytron security guide on how to configure new SSL context -and Infinispan documentation on how to secure Infinispan Server instances.

-
-
-

Once the SSL Context is configured, use the following CLI script to configure remote-cache-container:

-
-
-
-
/subsystem=infinispan/remote-cache-container=foo/component=security:write-attribute(name=ssl-context, value=hotrod-ssl-context)
-
-
-
-
-
Statistics
-
-

To enable the gathering of statistics for a given remote-cache-container, use the statistics-enabled attribute:

-
-
-
-
/subsystem=infinispan/remote-cache-container=foo:write-attribute(name=statistics-enabled, value=true)
-
-
-
-

Using the exposed runtime metrics, users can tune the HotRod thread pool configuration by looking at active vs idle connections.

-
-
-
-
/subsystem=infinispan:remote-cache-container=foo:read-resource(include-runtime=true)
-
-
-
-

The Infinispan subsystem additionally exposes a runtime resource for each started remote cache instance. -The runtime remote cache resource exposes usage metrics (e.g. reads, writes, removes, etc) as well as metrics for tuning near-cache sizes (e.g. hits vs misses).

-
-
-
-
/subsystem=infinispan:remote-cache-container=foo/remote-cache=bar:read-resource(include-runtime=true)
-
-
-
-
-
Switching remote clusters
-
-

If a remote-cache-container configures multiple remote-clusters (e.g. when the infinispan servers are configured with cross site replication), -the hotrod client can toggle the remote-cluster with which it interacts via a runtime management operation.

-
-
-

For example, when the client is configured with multiple remote clusters, typically representing multiple data centers (this presumes that the infinispan servers are configured with cross-site replication), -if connectivity to the default remote cluster fails, the client will automatically fail over to a backup remote cluster. -Once the underlying connectivity issue is resolved, a user can manually fail back to the local site via the switch-cluster operation:

-
-
-
-
/subsystem=infinispan/remote-cache-container=foo/remote-cluster=bar:switch-cluster()
-
-
-
-

This operation returns true if the switch was successful, or false otherwise. -See the server log for specifics in the event that the switch was unsuccessful.

-
-
-
-
-
-
-
-
-

10. Advanced Topics

-
-
-

This section aims to describe cross-cutting topics, such as marshalling.

-
-
-

10.1. Marshalling

-
-

In general, the most effective way to improve the scalability of a system with persistent or distributed state is to reduce the number of bytes needed to be sent over the network or persisted to storage. -Marshalling is the process by which Java objects in heap space are converted to a byte buffer for replication to other JVMs or for persistence to local or shared storage.

-
-
-

WildFly generally supports 2 marshalling mechanisms for use with its clustering modules: JBoss Marshalling and ProtoStream.

-
-
-

10.1.1. JBoss Marshalling

-
-

JBoss Marshalling is a serialization library for objects implementing java.io.Serializable.

-
-
-

When configured to use JBoss Marshalling, an application can optimize the marshalling of a given object, either through custom JDK serialization logic, or by implementing a custom externalizer. -An externalizer is an implementation of the org.wildfly.clustering.marshalling.Externalizer interface, which dictates how a given class should be marshalled. -An externalizer reads/writes the state of an object directly from/to an input/output stream, but also:

-
-
-
    -
  1. -

    Allows an application to replicate/persist an object that does not implement java.io.Serializable

    -
  2. -
  3. -

    Eliminates the need to serialize the class descriptor of an object along with its state

    -
  4. -
-
-
-

e.g.

-
-
-
-
public class MyObjectExternalizer implements org.wildfly.clustering.marshalling.Externalizer<MyObject> {
-
-    @Override
-    public Class<MyObject> getTargetClass() {
-        return MyObject.class;
-    }
-
-    @Override
-    public void writeObject(ObjectOutput output, MyObject object) throws IOException {
-        // Write object state to stream
-    }
-
-    @Override
-    public MyObject readObject(ObjectInput input) throws IOException, ClassNotFoundException {
-        // Construct and read object state from stream
-        return ...;
-    }
-}
-
-
-
-

Externalizers are dynamically loaded during deployment via the service loader mechanism. -Implementations should be enumerated within a file named: -/META-INF/services/org.wildfly.clustering.marshalling.Externalizer

-
-
-
-

10.1.2. ProtoStream

-
-

ProtoStream is serialization library based on the Protobuf data format. -The nature of the Protobuf data format makes it very easy to evolve classes without breaking serialization compatibility. -When compared to JBoss Marshalling, ProtoStream is generally more efficient and generates smaller payloads, especially for objects containing fields that are either optional or have a default value. -Since marshallable classes are explicitly enumerated, ProtoStream is not vulnerable to the same arbitrary code execution exploits that affect JDK serialization.

-
-
-

When configured to use ProtoStream, a web application will need to register ProtoStream marshallers/schemas for every application-specific type. -WildFly initializes its ProtoStream marshaller using all instances of org.infinispan.protostream.SerializationContextInitializer that are visible to the deployment classpath. -Implementations should be enumerated within a file named: -/META-INF/services/org.infinispan.protostream.SerializationContextInitializer

-
-
-

Simple objects can leverage ProtoStream annotations and auto-generate marshallers and schemas at build time.

-
-
-

e.g.

-
-
-
-
@AutoProtoSchemaBuilder(includeClasses = { Person.class })
-public interface PersonInitalizer extends SerializationContextInitializer {
-}
-
-public class Person {
-    @ProtoField(number = 1)
-    final String name;
-    @ProtoField(number = 2, type = Type.UINT32, defaultValue = "0")
-    final int age;
-    @ProtoField(number = 3)
-    Person parent;
-    @ProtoField(number = 4, collectionImplementation = LinkedList.class)
-    final List<Person> children;
-
-    @ProtoFactory
-    Person(String name, int age, Person parent, List<Person> children) {
-        this.name = name;
-        this.age = age;
-        this.parent = parent;
-        this.children = children;
-    }
-
-    public Person(String name, int age) {
-        this.name = name;
-        this.age = age;
-        this.children = new LinkedList<>();
-    }
-
-    public String getName() {
-        return this.name;
-    }
-
-    public int getAge() {
-        return this.age;
-    }
-
-    public Person getParent() {
-        return this.parent;
-    }
-
-    public List<Person> getChildren() {
-        return this.children;
-    }
-
-    public void setParent(Person parent) {
-        this.parent = parent;
-    }
-
-    public void addChild(Person child) {
-        this.children.add(child);
-    }
-}
-
-
-
-

Sufficiently complex objects may require a custom org.infinispan.protostream.SerializationContextInitializer implementation to register custom marshaller implementations and schemas. -Refer to the Infinispan documentation for details.

-
-
-
-
-
-
-

11. Clustering and Domain Setup Walkthrough

-
-
-

In this article, I’d like to show you how to setup WildFly in domain -mode and enable clustering so we could get HA and session replication -among the nodes. It’s a step to step guide so you can follow the -instructions in this article and build the sandbox by yourself.

-
-
-

11.1. Preparation & Scenario

-
-

11.1.1. Preparation

-
-

We need to prepare two hosts (or virtual hosts) to do the experiment. We -will use these two hosts as following:

-
-
-
    -
  • -

    Install Fedora on them (Other linux version may also fine but I’ll -use Fedora in this article)

    -
  • -
  • -

    Make sure that they are in same local network

    -
  • -
  • -

    Make sure that they can access each other via different TCP/UDP -ports (better turn off firewall and disable SELinux during the experiment -or they will cause network problems).

    -
  • -
-
-
-
-

11.1.2. Scenario

-
-

Here are some details on what we are going to do:

-
-
-
    -
  • -

    Let’s call one host as 'primary', the other one as 'secondary'.

    -
  • -
  • -

    Both primary and secondary hosts will run WildFly, and the primary host -will run as a domain controller, the secondary host will under the domain management of primary host.

    -
  • -
  • -

    Apache httpd will be run on the primary host, and in httpd we will enable the -mod_cluster module. The WildFly on primary and secondary hosts will form a -cluster and discovered by httpd.

    -
  • -
-
-
-

clustering/Clustering.jpg

-
-
-
    -
  • -

    We will deploy a demo project into the domain, and verify that the project -is deployed into both primary and secondary Host Controllers by the domain controller. -Thus we could see that domain management provide us a single point to manage the -deployments across multiple hosts in a single domain.

    -
  • -
  • -

    We will access the cluster URL and verify that httpd has distributed -the request to one of the WildFly hosts. So we could see the cluster is -working properly.

    -
  • -
  • -

    We will try to make a request on cluster, and if the request is -forwarded to the Domain Controller, we then kill the WildFly process on the primary host. After -that we will go on requesting cluster and we should see the request is -forwarded to the secondary Host Controller, but the session is not lost. Our goal is to verify -the HA is working and sessions are replicated.

    -
  • -
  • -

    After previous step finished, we reconnect the Domain Controller by restarting -it. We should see the Domain Controller is registered back into cluster, also we -should see the secondary Host Controller sees the primary Host Controller as a domain controller again and connect to it.

    -
  • -
-
-
-

clustering/test_scenario.jpg

-
-
-

Please don’t worry if you cannot digest so many details currently. Let’s -move on and you will get the points step by step.

-
-
-
-
-

11.2. Download WildFly

-
-

First we should download WildFly from the WildFly website.

-
-
-

Then I unzipped the package to the primary host and try to make a test run:

-
-
-
-
unzip wildfly-29.0.0.Final.zip
-cd wildfly-29.0.0.Final/bin
-./domain.sh
-
-
-
-

If everything ok we should see WildFly successfully startup in domain -mode:

-
-
-
-
wildfly-29.0.0.Final/bin$ ./domain.sh
-=========================================================================
-
-  JBoss Bootstrap Environment
-
-  JBOSS_HOME: /Users/weli/Downloads/wildfly-29.0.0.Final
-
-  JAVA: /Library/Java/Home/bin/java
-
-  JAVA_OPTS: -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
-
-=========================================================================
-...
-
-[Server:server-two] 14:46:12,375 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 29.0.0.Final "Kenny" started in 8860ms - Started 210 of 258 services (829 services are lazy, passive or on-demand)
-
-
-
-

Now exit from the primary host and let’s repeat the same steps on the secondary host. Finally, -we get WildFly run on both primary and secondary hosts, then we could move on to -next step.

-
-
-
-

11.3. Domain Configuration

-
-

11.3.1. Interface config on the Primary Host Controller

-
-

In this section we’ll setup both the primary and secondary hosts for them to run in -domain mode. And we will configure the primary host to be the domain controller.

-
-
-

First open the host.xml in the primary host for editing:

-
-
-
-
vi domain/configuration/host.xml
-
-
-
-

The default settings for interface in this file is like:

-
-
-
-
<interfaces>
-    <interface name="management">
-        <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
-    </interface>
-    <interface name="public">
-       <inet-address value="${jboss.bind.address:127.0.0.1}"/>
-    </interface>
-    <interface name="unsecured">
-       <inet-address value="127.0.0.1" />
-    </interface>
-</interfaces>
-
-
-
-

We need to change the address to the management interface so the secondary Host Controller could -connect to the primary Host Controller. The public interface allows the application to be -accessed by non-local HTTP, and the unsecured interface allows remote -RMI access. My primary host’s ip address is 10.211.55.7, so I change the -config to:

-
-
-
-
<interfaces>
-    <interface name="management">
-        <inet-address value="${jboss.bind.address.management:10.211.55.7}"/>
-    </interface>
-    <interface name="public">
-       <inet-address value="${jboss.bind.address:10.211.55.7}"/>
-    </interface>
-    <interface name="unsecured">
-       <inet-address value="10.211.55.7" />
-    </interface>
-</interfaces>
-
-
-
-
-

11.3.2. Interface config on the Secondary Host Controller

-
-

Now we will setup interfaces on the secondary host. Let’s edit host.xml. Similar to -the steps on the primary host, open host.xml first:

-
-
-
-
vi domain/configuration/host.xml
-
-
-
-

The configuration we’ll use on the secondary host is a little bit different, because -we need to let the secondary Host Controller connect to the primary Host Controller. First we need to set the -hostname. We change the name property from:

-
-
-
-
<host name="primary" xmlns="urn:jboss:domain:3.0">
-
-
-
-

to:

-
-
-
-
<host name="secondary" xmlns="urn:jboss:domain:3.0">
-
-
-
-

Then we need to modify domain-controller section so the secondary Host Controller can connect to -primary Host Controller management port:

-
-
-
-
<domain-controller>
-   <remote protocol="remote" host="10.211.55.7" port="9999" />
-</domain-controller>
-
-
-
-

As we know, 10.211.55.7 is the ip address of the primary host. -You may use discovery options to define multiple mechanisms to connect -to the remote domain controller:

-
-
-
-
<domain-controller>
- <remote authentication-context="hcAuthContext" >
-   <discovery-options>
-     <static-discovery name="primary-native" protocol="remote"  host="10.211.55.7" port="9999" />
-     <static-discovery name="primary-https" protocol="https-remoting" host="10.211.55.7" port="9993"
-                       authentication-context="hcAuthContext"/>
-     <static-discovery name="primary-http" protocol="http-remoting" host="10.211.55.7" port="9990" />
-   </discovery-options>
- </remote>
-</domain-controller>
-
-
-
-

Finally, we also need to configure interfaces section and expose the -management ports to public address:

-
-
-
-
<interfaces>
-    <interface name="management">
-        <inet-address value="${jboss.bind.address.management:10.211.55.2}"/>
-    </interface>
-    <interface name="public">
-       <inet-address value="${jboss.bind.address:10.211.55.2}"/>
-    </interface>
-    <interface name="unsecured">
-       <inet-address value="10.211.55.2" />
-    </interface>
-</interfaces>
-
-
-
-

10.211.55.2 is the ip address of the secondary host. Refer to the domain -controller configuration above for an explanation of the management, -public, and unsecured interfaces.

-
-
- - - - - -
- - -It is easier to turn off all firewalls for testing, but in production, -you need to enable the firewall and allow access to the following ports: -9999. -
-
-
-
Dry Run
-
-

Now everything is set for the two hosts to run in domain mode. Let’s -start them by running domain.sh on both hosts. If everything goes fine, -we could see from the log on the primary Host Controller:

-
-
-
-
[Host Controller] 21:30:52,042 INFO  [org.jboss.as.domain] (management-handler-threads - 1) JBAS010918: Registered remote secondary host "secondary"
-
-
-
-

That means all the configurations are correct and two hosts are run in -domain mode now as expected. Hurrah!

-
-
-
-
-
-

11.4. Deployment

-
-

Now we can deploy a demo project into the domain. I have created a -simple project located at:

-
-
-
-
https://github.com/liweinan/cluster-demo
-
-
-
-

We can use git command to fetch a copy of the demo:

-
-
-
-
git clone git@github.com:liweinan/cluster-demo.git
-
-
-
-

In this demo project we have a very simple web application. In web.xml -we’ve enabled session replication by adding following entry:

-
-
-
-
<distributable/>
-
-
-
-

And it contains a jsp page called put.jsp which will put current time to -a session entry called 'current.time':

-
-
-
-
<%
-    session.setAttribute("current.time", new java.util.Date());
-%>
-
-
-
-

Then we could fetch this value from get.jsp:

-
-
-
-
The time is <%= session.getAttribute("current.time") %>
-
-
-
-

It’s an extremely simple project but it could help us to test the -cluster later: We will access put.jsp from cluster and see the request -are distributed to the primary host, then we disconnect the primary Host Controller and access get.jsp. -We should see the request is forwarded to secondary host but the 'current.time' -value is held by session replication. We’ll cover more details on this -one later.

-
-
-

Let’s go back to this demo project. Now we need to create a war from it. -In the project directory, run the following command to get the war:

-
-
-
-
mvn package
-
-
-
-

It will generate cluster-demo.war. Then we need to deploy the war into -domain. First we should access the http management console on -primary host (Because primary host is acting as domain controller):

-
-
-
-
http://10.211.55.7:9990
-
-
-
-

It will popup a windows ask you to input account name and password, we -can use the 'admin' account we’ve added just now. After logging in we -could see the 'Server Instances' window. By default there are three -servers listed, which are:

-
-
-
    -
  • -

    server-one

    -
  • -
  • -

    server-two

    -
  • -
  • -

    server-three

    -
  • -
-
-
-

We could see server-one and server-two are in running status and they -belong to main-server-group; server-three is in idle status, and it -belongs to other-server-group.

-
-
-

All these servers and server groups are set in domain.xml on the primary host. -What we are interested in is the 'other-server-group' in domain.xml:

-
-
-
-
<server-group name="other-server-group" profile="ha">
-   <jvm name="default">
-       <heap size="64m" max-size="512m"/>
-   </jvm>
-   <socket-binding-group ref="ha-sockets"/>
-</server-group>
-
-
-
-

We could see this server-group is using 'ha' profile, which then uses -'ha-sockets' socket binding group. It enables all the modules we need to -establish cluster later (including infinispan, jgroup and mod_cluster -modules). So we will deploy our demo project into a server that belongs -to 'other-server-group', so 'server-three' is our choice.

-
-
- - - - - -
- - -In newer version of WildFly, the profile 'ha' changes to 'full-ha': -
-
-
-
-
<server-group name="other-server-group" profile="full-ha">
-
-
-
-

Let’s go back to domain controller’s management console:

-
-
-
-
http://10.211.55.7:9990
-
-
-
-

Now server-three is not running, so let’s click on 'server-three' and -then click the 'start' button at bottom right of the server list. Wait a -moment and server-three should start now.

-
-
-

Now we should also enable 'server-three' on the secondary Host Controller: From the top of menu -list on left side of the page, we could see now we are managing the primary Host Controller -currently. Click on the list, and click 'secondary', then choose -'server-three', and we are in secondary Host Controller management page now.

-
-
-

Then repeat the steps we’ve done on the primary host to start 'server-three' on -secondary host.

-
-
- - - - - -
- - -server-three on primary and secondary host are two different hosts, their names -can be different. -
-
-
-

After server-three on both primary and secondary hosts are started, we will add our -cluster-demo.war for deployment. Click on the 'Manage Deployments' link -at the bottom of left menu list.

-
-
-

clustering/JBoss_Management.png
-(We should ensure the server-three should be started on both primary and -secondary hosts)

-
-
-

After enter 'Manage Deployments' page, click 'Add Content' at top right -corner. Then we should choose our cluster-demo.war, and follow the -instruction to add it into our content repository.

-
-
-

Now we can see cluster-demo.war is added. Next we click 'Add to Groups' -button and add the war to 'other-server-group' and then click 'save'.

-
-
-

Wait a few seconds, management console will tell you that the project is -deployed into 'other-server-group'.:

-
-
-

clustering/JBoss_Management_2.png

-
-
-

Please note we have two hosts participate in this server group, so the -project should be deployed in both primary and secondary hosts now - that’s the -power of domain management.

-
-
-

Now let’s verify this, trying to access cluster-demo from both primary -and secondary hosts, and they should all work now:

-
-
-
-
http://10.211.55.7:8330/cluster-demo/
-
-
-
-

clustering/http---10.211.55.7-8330-cluster-demo-.png

-
-
-
-
http://10.211.55.2:8330/cluster-demo/
-
-
-
-

clustering/http---10.211.55.2-8330-cluster-demo-.png

-
-
-

Now that we have finished the project deployment and see the usages of -domain controller, we will then head up for using these two hosts to -establish a cluster

-
-
- - - - - -
- - -Why is the port number 8330 instead of 8080? Please check the settings -in host.xml on both primary and secondary hosts: -
-
-
-
-
<server name="server-three" group="other-server-group" auto-start="false">
-    <!-- server-three avoids port conflicts by incrementing the ports in
-         the default socket-group declared in the server-group -->
-    <socket-bindings port-offset="250"/>
-</server>
-
-
-
-

The port-offset is set to 250, so 8080 + 250 = 8330

-
-
-

Now we quit the WildFly process on both primary and secondary hosts. We have some -work left on host.xml configurations. Open the host.xml of primary host, and -do some modifications the servers section from:

-
-
-
-
<server name="server-three" group="other-server-group" auto-start="false">
-    <!-- server-three avoids port conflicts by incrementing the ports in
-         the default socket-group declared in the server-group -->
-    <socket-bindings port-offset="250"/>
-</server>
-
-
-
-

to:

-
-
-
-
<server name="server-three" group="other-server-group" auto-start="true">
-    <!-- server-three avoids port conflicts by incrementing the ports in
-         the default socket-group declared in the server-group -->
-    <socket-bindings port-offset="250"/>
-</server>
-
-
-
-

We’ve set auto-start to true so we don’t need to enable it in management -console each time WildFly restart. Now open secondary’s host.xml, and modify -the server-three section:

-
-
-
-
<server name="server-three-secondary" group="other-server-group" auto-start="true">
-    <!-- server-three avoids port conflicts by incrementing the ports in
-         the default socket-group declared in the server-group -->
-    <socket-bindings port-offset="250"/>
-</server>
-
-
-
-

Besides setting auto-start to true, we’ve renamed the 'server-three' to -'server-three-secondary'. We need to do this because mod_cluster will fail -to register the hosts with same name in a single server group. It will -cause name conflict.

-
-
-

After finishing the above configuration, let’s restart two as7 hosts and -go on cluster configuration.

-
-
-
-

11.5. Cluster Configuration

-
-

We will use mod_cluster + apache httpd on primary host as our cluster -controller here. Because WildFly has been configured to support -mod_cluster out of box so it’s the easiest way.

-
-
- - - - - -
- - -The WildFly domain controller and httpd are not necessary to be on -same host. But in this article I just install them all on primary host for -convenience. -
-
-
-

First we need to ensure that httpd is installed:

-
-
-
-
sudo yum install httpd
-
-
-
-

And then we need to download newer version of mod_cluster from its -website:

-
-
-
-
http://www.jboss.org/mod_cluster/downloads
-
-
-
-

The version I downloaded is:

-
-
-
-
http://downloads.jboss.org/mod_cluster/1.1.3.Final/mod_cluster-1.1.3.Final-linux2-x86-so.tar.gz
-
-
-
- - - - - -
- - -Jean-Frederic has suggested to use mod_cluster 1.2.x. Because 1.1.x it -is affected by CVE-2011-4608 -
-
-
-

With mod_cluster-1.2.0 you need to add EnableMCPMReceive in the -VirtualHost.

-
-
-

Then we extract it into:

-
-
-
-
/etc/httpd/modules
-
-
-
-

Then we edit httpd.conf:

-
-
-
-
sudo vi /etc/httpd/conf/httpd.conf
-
-
-
-

We should add the modules:

-
-
-
-
LoadModule slotmem_module modules/mod_slotmem.so
-LoadModule manager_module modules/mod_manager.so
-LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
-LoadModule advertise_module modules/mod_advertise.so
-
-
-
-

Please note we should comment out:

-
-
-
-
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
-
-
-
-

This is conflicted with cluster module. And then we need to make httpd -to listen to public address so we could do the testing. Because we -installed httpd on primary host so we know the ip address of it:

-
-
-
-
Listen 10.211.55.7:80
-
-
-
-

Then we do the necessary configuration at the bottom of httpd.conf:

-
-
-
-
# This Listen port is for the mod_cluster-manager, where you can see the status of mod_cluster.
-# Port 10001 is not a reserved port, so this prevents problems with SELinux.
-Listen 10.211.55.7:10001
-# This directive only applies to Red Hat Enterprise Linux. It prevents the temmporary
-# files from being written to /etc/httpd/logs/ which is not an appropriate location.
-MemManagerFile /var/cache/httpd
-
-<VirtualHost 10.211.55.7:10001>
-
-  <Directory />
-    Order deny,allow
-    Deny from all
-    Allow from 10.211.55.
-  </Directory>
-
-
-  # This directive allows you to view mod_cluster status at URL http://10.211.55.4:10001/mod_cluster-manager
-  <Location /mod_cluster-manager>
-   SetHandler mod_cluster-manager
-   Order deny,allow
-   Deny from all
-   Allow from 10.211.55.
-  </Location>
-
-  KeepAliveTimeout 60
-  MaxKeepAliveRequests 0
-
-  ManagerBalancerName other-server-group
-  AdvertiseFrequency 5
-
-</VirtualHost>
-
-
-
- - - - - -
- - -For more details on mod_cluster configurations please see this document: -
-
-
-
-
http://docs.jboss.org/mod_cluster/1.1.0/html/Quick_Start_Guide.html
-
-
-
-
-

11.6. Testing

-
-

If everything goes fine we can start httpd service now:

-
-
-
-
service httpd start
-
-
-
-

Now we access the cluster:

-
-
-
-
http://10.211.55.7/cluster-demo/put.jsp
-
-
-
-

clustering/http---10.211.55.7-cluster-demo-put.jsp.png

-
-
-

We should see the request is distributed to one of the hosts (primary or -secondary) from the WildFly log. For me the request is sent to primary host:

-
-
-
-
[Server:server-three] 16:06:22,256 INFO  [stdout] (http-10.211.55.7-10.211.55.7-8330-4) Putting date now
-
-
-
-

Now I disconnect the Domain Controller by using the management interface. Select -'runtime' and the server 'primary' in the upper corners.

-
-
-

Select 'server-three' and kick the stop button, the active-icon should -change.

-
-
-

Killing the server by using system commands will have the effect that -the Host-Controller restart the instance immediately!

-
-
-

Then wait for a few seconds and access cluster:

-
-
-
-
http://10.211.55.7/cluster-demo/get.jsp
-
-
-
-

clustering/http---10.211.55.7-cluster-demo-get.jsp.png

-
-
-

Now the request should be served by the secondary host and we should see the log from -the secondary Host Controller:

-
-
-
-
[Server:server-three-secondary] 16:08:29,860 INFO  [stdout] (http-10.211.55.2-10.211.55.2-8330-1) Getting date now
-
-
-
-

And from the get.jsp we should see that the time we get is the same -we’ve put by 'put.jsp'. Thus it’s proven that the session is correctly -replicated to the secondary host.

-
-
-

Now we restart the primary Host Controller and should see the host is registered back to -cluster.

-
-
- - - - - -
- - -It doesn’t matter if you found the request is distributed to the secondary host at -first time. Then just disconnect the secondary Host Controller and do the testing, the request -should be sent to the primary host instead. The point is we should see the request -is redirect from one host to another and the session is held. -
-
-
-
-

11.7. Special Thanks

-
-

Wolf-Dieter Fink has -contributed the updated add-user.sh usages and configs in host.xml from -7.1.0.Final.
-Jean-Frederic Clere provided -the mod_cluster 1.2.0 usages.
-Misty Stanley-Jones has given a lot of suggestions and helps to make -this document readable.

-
-
- - - - - -
- - -References in this document to JavaServer Pages (JSP) refer to the Jakarta Server Pages unless otherwise noted -
-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/High_Availability_Guide.html

+ \ No newline at end of file diff --git a/29/Installation_Guide.html b/29/Installation_Guide.html index 8455f99e4..799990f9e 100644 --- a/29/Installation_Guide.html +++ b/29/Installation_Guide.html @@ -1,638 +1,11 @@ - - - - - - -Installation Guide - - - - - - -
-
-
-
-

© 2020 The original authors.

-
- -
-

Zipped distribution, -Galleon provisioning or bootable JAR, this guide helps you identify the -installation strategy that best fits your application requirements.

-
-
-
-
-

1. WildFly or WildFly Preview

-
-
-

The WildFly project now produces two appserver variants, standard WildFly and WildFly Preview, -so you’ll want to decide which is right for you. For most users the standard WildFly variant is the right choice, -but if you’d like a technical preview look at what’s coming in the future, try out WildFly Preview.

-
-
-
-
-

2. Installing WildFly from a zipped distribution

-
-
-

Downloading the WildFly release zip and unzipping it is the traditional way to install -a complete WildFly server with support for both standalone and managed domain operating modes. A WildFly distribution -contains a large number of default configurations allowing you to select the server features and operating modes.

-
-
-

A WildFly distribution based installation is well suited when:

-
-
-
    -
  • -

    You want to rely on a traditional Jakarta EE application deployment.

    -
  • -
  • -

    You want a Jakarta EE or MicroProfile platform compliant server that offers all Jakarta EE or MicroProfile features.

    -
  • -
  • -

    You are not (yet) concerned by server installation size and memory footprint.

    -
  • -
  • -

    You are not yet sure of the kind of operating mode and application you are targeting.

    -
  • -
  • -

    Your server instances will contain one or more application deployments.

    -
  • -
-
-
-

If that is the kind of installation you are aiming at, the guides that you should read next are:

-
-
- -
-
-
-
-

3. Installing WildFly with Galleon

-
-
-

Galleon provisioning tooling allows you to construct a customized WildFly installation according to your application needs. -Some applications don’t need a fully featured server supporting all operating modes and containing all Jakarta EE capabilities. -Galleon tooling allows you to select the server capabilities you want to see installed.

-
-
-

A WildFly server provisioned with Galleon is well suited when:

-
-
-
    -
  • -

    You want to rely on a traditional Jakarta EE application deployment.

    -
  • -
  • -

    You want to easily update an installation to the latest WildFly version.

    -
  • -
  • -

    Your application requires only a subset of the Jakarta EE or MicroProfile platform APIs -(although Galleon can provision a server that supports the full set of Jakarta EE and MicroProfile platform APIs).

    -
  • -
  • -

    You are concerned by server installation size and memory footprint.

    -
  • -
  • -

    You are only using standalone operating mode (with support for High Availability or not).

    -
  • -
  • -

    Your server instances will contain one or more application deployments.

    -
  • -
-
-
-

If that is the kind of installation you are aiming at, the guides that you should read next are:

-
-
- -
-
-
-
-

4. WildFly Bootable JAR

-
-
-

A bootable JAR contains both a customized WildFly server and your deployment. Such a JAR can -then run with a simple java command such as java -jar myapp-bootable.jar

-
-
-

A bootable JAR is built using Maven. You need to integrate the -bootable JAR Maven plugin -in the Maven project of your application.

-
-
-

A Bootable JAR is well suited when:

-
-
-
    -
  • -

    You want to leverage your existing WildFly applications.

    -
  • -
  • -

    You want to build a microservice composed of a server and a single application deployment.

    -
  • -
  • -

    You are concerned by JAR size and memory footprint.

    -
  • -
  • -

    You are only using standalone operating mode (with support for High Availability or not).

    -
  • -
  • -

    You are building your application using Maven.

    -
  • -
-
-
-

If that is the kind of installation you are aiming at, the guide that you should read next is:

-
-
-
    -
  • -

    The Bootable JAR Guide shows you how to package your application and the WildFly server -into a bootable JAR.

    -
  • -
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Installation_Guide.html

+ \ No newline at end of file diff --git a/29/JavaEE_Tutorial.html b/29/JavaEE_Tutorial.html new file mode 100644 index 000000000..606b7eca2 --- /dev/null +++ b/29/JavaEE_Tutorial.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /23/JavaEE_Tutorial.html

+ + \ No newline at end of file diff --git a/29/Migration_Guide.html b/29/Migration_Guide.html index 82be1f327..b38797562 100644 --- a/29/Migration_Guide.html +++ b/29/Migration_Guide.html @@ -1,904 +1,11 @@ - - - - - - -WildFly Migration Guide - - - - - - - -
-
-
-
-

© 2021 The original authors.

-
- -
-
-
-

1. Introduction

-
-
-

Since the initial development of JBoss AS7 the features added to WildFly have been continuing to -increase, some of the older features are now being removed to make way for new features. This -guide contains information about the removed features and their alternatives.

-
-
-
-
-

2. PicketBox Vault

-
-
-

WildFly Elytron has made available a new credential store which replaces the PicketBox vault. The -credential store can be used for credentials to be directly looked up for use by resources or it -can be used to store a SecretKey which can be used by an expression resolver to decrypt -previously encrypted expressions in the management model.

-
-
-

2.1. Credential Store Creation

-
-

Before credentials can be added a new credential store needs to be created.

-
-
-

2.1.1. From the command line

-
-

The first option is to use the Elytron command line utility to create a new store.

-
-
-
-
bin/elytron-tool.sh credential-store --create \
-    --location=standalone/configuration/credentials.store
-Credential store password:
-Confirm credential store password:
-Credential Store has been successfully created
-
-
-
-

The creation process prompts for a password for the store twice and automatically creates the -store.

-
-
-
-

2.1.2. Defining the credential store in the management model

-
-

This newly created credential store can be added to the management model of a running server.

-
-
-
-
/subsystem=elytron/credential-store=mystore:add( \
-    relative-to=jboss.server.config.dir, \
-    location=credentials.store, \
-    credential-reference={clear-text=cs_password})
-{"outcome" => "success"}
-
-
-
-

Instead of using the clear text password it is also possible to obfuscate the password using the -mask command in the command line tool.

-
-
-
-
bin/elytron-tool.sh mask --secret=cs_password --salt=12345678 --iteration=256
-MASK-0BjKFw41KSAGZr/OtiZNI1;12345678;256
-
-
-
-

The credential store resource can then be defined as.

-
-
-
-
/subsystem=elytron/credential-store=mystore:add( \
-    relative-to=jboss.server.config.dir, \
-    location=credentials.store, \
-    credential-reference={clear-text=MASK-0BjKFw41KSAGZr/OtiZNI1;12345678;256})
-{"outcome" => "success"}
-
-
-
-
-

2.1.3. Automatically creating the store

-
-

If the credential store file did not already exist, with a small change to the add operation -the store will be automatically created for you.

-
-
-
-
/subsystem=elytron/credential-store=mystore:add( \
-    relative-to=jboss.server.config.dir,
-    location=credentials.store,
-    credential-reference={clear-text=cs_password}, \
-    create=true)
-{"outcome" => "success"}
-
-
-
-
-
-

2.2. Adding Credentials

-
-

However the store was created credentials can be added using either the command line utility or a -management operation. If using the command line utility it is recommended that this is performed -when no running server is using the store to prevent accidental overwrites.

-
-
-

2.2.1. From the command line

-
-

The following command will add a new entry to the store under the alias example.

-
-
-
-
bin/elytron-tool.sh credential-store --add=example \
-    --location=standalone/configuration/credentials.store
-Credential store password:
-Secret to store:
-Confirm secret to store:
-Alias "example" has been successfully stored
-
-
-
-

This command prompts for the credential store password once followed by promting for the secret to -store twice.

-
-
-
-

2.2.2. Using a management operation

-
-

The following management operation can add an entry to the credential store:

-
-
-
-
history --disable
-/subsystem=elytron/credential-store=mystore:add-alias(alias=example, \
-    secret-value=example_password)
-{"outcome" => "success"}
-history --enable
-
-
-
-

In this example the CLI history is temporarily disabled to prevent the password being stored in the -history file.

-
-
-
-
-

2.3. Listing credential store contents

-
-

The command line tool and management operations can both be used to list the contents of the -credential store.

-
-
-

2.3.1. From the command line

-
-

The aliases in the credential store can be listed with the following command:

-
-
-
-
bin/elytron-tool.sh credential-store --aliases \
-    --location=standalone/configuration/credentials.store
-Credential store password:
-Credential store contains following aliases: example
-
-
-
-
-

2.3.2. Using a management operation

-
-

The read-aliases management operation can be used with a credential store to list the aliases -it contains.

-
-
-
-
/subsystem=elytron/credential-store=mystore:read-aliases
-{
-    "outcome" => "success",
-    "result" => ["example"]
-}
-
-
-
-
-
-

2.4. Vault Conversion

-
-

The WildFly Elytron tool can also be used to convert an existing vault to a credential store.

-
-
-
-
bin/elytron-tool.sh vault --enc-dir standalone/configuration/vault \
-    --keystore standalone/configuration/vault.keystore \
-    --location standalone/configuration/converted.store
-Vault password:
-Confirm vault password:
-Vault (enc-dir="standalone/configuration/vault";keystore="standalone/configuration/vault.keystore") \
-    converted to credential store "standalone/configuration/converted.store"
-
-
-
-

This will convert all of the contents of the vault to a new credential store. Vault entries were -identified using a BLOCK and a NAME, the resulting alias in the credential store will be in the -format BLOCK::NAME.

-
-
-
-

2.5. Referencing a credential store credential

-
-

Resources in the management model which can reference credentials from the credential store use a -credential-reference attribute, in defining the credential store previously this was used with -a clear-password but it can also be used to reference an alias stored within a credential store.

-
-
-

The following managment operation demonstrates defining a new key-store resource using a -credential store entry for the password.

-
-
-
-
/subsystem=elytron/key-store=test-store:add( \
-    relative-to=jboss.server.config.dir, \
-    path=test.keystore, required=false, \
-    credential-reference={store=mystore, alias=example})
-{"outcome" => "success"}
-
-
-
-
-

2.6. Encrypted Expressions

-
-

In addition to using direct references to credentials it is also possible to use a SecretKey to -handle previously encrypted expressions directly within the management model.

-
-
-

2.6.1. Adding a SecretKey to a credential store

-
-

Before encrypted expressions can be used an AES SecretKey is required. The previous vault -password making made use of a well known password for obfuscating, by using a SecretKey instead -users can manage their own key.

-
-
-
From the command line
-
-

A SecretKey can be added to the credential store with the following command:

-
-
-
-
bin/elytron-tool.sh credential-store --generate-secret-key=key \
-    --location standalone/configuration/credentials.store
-Credential store password:
-Alias "key" has been successfully stored
-
-
-
-
-
Using a management operation
-
-

The following management operation can also add a dynamically generated SecretKey:

-
-
-
-
/subsystem=elytron/credential-store=mystore:generate-secret-key(alias=key)
-{"outcome" => "success"}
-
-
-
-
-
-

2.6.2. Using a secret-key-credential-store

-
-

Alternatively it may be desirable to manage a SecretKey which is not itself password -protected. An alternative resource is available for this:

-
-
-
-
/subsystem=elytron/secret-key-credential-store=secret-key-store:add( \
-    relative-to=jboss.server.config.dir, path=secret-key.store)
-{"outcome" => "success"}
-
-
-
-

This command will have also populated the new store with a SecretKey under the alias key.

-
-
-
-

2.6.3. Adding the expression resolver resource

-
-

A new resource can be added to the elytron subsystem which is responsible for handling encrypted -expressions.

-
-
-
-
/subsystem=elytron/expression=encryption:add( \
-    resolvers=[{name=default, \
-                credential-store=secret-key-store, \
-                secret-key=key}], \
-    default-resolver=default)
-{"outcome" => "success"}
-
-
-
-
-

2.6.4. Creating an expression

-
-

The easiest way to create an encrupted expression is using a management operation as the result -takes into account the configured expression=encryption resource.

-
-
-
-
history --disable
-/subsystem=elytron/expression=encryption:create-expression(clear-text=my_password)
-{
-    "outcome" => "success",
-    "result" => {"expression" => "${ENC::RUxZAUMQ5Z7mXbyrCtv2kZlwHHpyJ//ma49gMAUnbmTfv2pGs30=}"}
-}
-
-history --enable
-
-
-
-

The resulting expression ${ENC::RUxZAUMQ5Z7mXbyrCtv2kZlwHHpyJ//ma49gMAUnbmTfv2pGs30=} can now be -used as the value for any other attribute in the management model which supports expressions.

-
-
-
-
-

2.7. Further Reading

-
-

The WildFly Elytron Security guide contains further information regarding Credential Stores and Encrypted Expressions.

-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Migration_Guide.html

+ \ No newline at end of file diff --git a/29/Quickstarts.html b/29/Quickstarts.html index 8833e620b..9c79d59e6 100644 --- a/29/Quickstarts.html +++ b/29/Quickstarts.html @@ -1,512 +1,11 @@ - - - - - - -Quickstarts - - - - - - -
-
-
-
-

© 2021 The original authors.

-
- -
-

WildFly ships with a number of quickstarts that show you how to get -started with a variety of technologies in WildFly. You’ll find out how -to write a web application using the latest Jakarta EE technologies like -Jakarta Contexts and Dependency Injection and Jakarta RESTful Web Services. -How to write client libraries to talk to WildFly using web services, Jakarta Messaging or Jakarta Enterprise Beans. -How to set up a distributed transaction, and how to recover from a -transaction failure. And much, much more.

-
-
-
-
-

1. Getting Started

-
-
-

Some of the quickstarts are described in great detail in the -Getting Started -Developing Applications Guide, which focuses on how get WildFly and -Eclipse, with JBoss Tools set up, and how to build web applications.

-
-
-

The other quickstarts are all described in README files and code -comments, including what to look out for, how to install and start -WildFly, and how to deploy and test the quickstart.

-
-
-

To download the quickstarts, visit -https://github.com/wildfly/quickstart.

-
-
-
-
-

2. Contributing

-
-
-

If you want to contribute to the quickstarts, check out our -Contributing a Quickstart page.

-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Quickstarts.html

+ \ No newline at end of file diff --git a/29/Testsuite.html b/29/Testsuite.html index 4d23de36c..e1eb9b6dc 100644 --- a/29/Testsuite.html +++ b/29/Testsuite.html @@ -1,3717 +1,11 @@ - - - - - - -WildFly Testsuite - - - - - - - -
-
-
-
-

© 2017 The original authors.

-
- -
-
-
-

1. WildFly Testsuite Overview

-
-
- - - - - -
- - -This section has not been updated for a long time and some sections are out of date. Contributions are welcome. -
-
-
-

This document will detail the implementation of the testsuite -integration submodule as it guides you on adding your own test cases.

-
-
-

The WildFly integration test suite has been designed with the following -goals:

-
-
-
    -
  • -

    support execution of all identified test case use cases

    -
  • -
  • -

    employ a design/organization which is scalable and maintainable

    -
  • -
  • -

    provide support for the automated measurement of test suite quality -(generation of feature coverage reports, code coverage reports)

    -
  • -
-
-
-

In addition, these requirements were considered:

-
-
-
    -
  • -

    identifying distinct test case runs of the same test case with a -different set of client side parameters and server side parameters

    -
  • -
  • -

    separately maintaining server side execution results (e.g. logs, the -original server configuration) for post-execution debugging

    -
  • -
  • -

    running the testsuite in conjunction with a debugger

    -
  • -
  • -

    the execution of a single test (for debugging purposes)

    -
  • -
  • -

    running test cases against different container modes (managed in the -main, but also remote and embedded)

    -
  • -
  • -

    configuring client and server JVMs separately (e.g., IPv6 testing)

    -
  • -
-
-
-

1.1. Test Suite Organization

-
-

The testsuite module has a few submodules:

-
-
-
    -
  • -

    benchmark - holds all benchmark tests intended to assess relative -performance of specific feature

    -
  • -
  • -

    domain - holds all domain management tests

    -
  • -
  • -

    integration - holds all integration tests

    -
  • -
  • -

    stress - holds all stress tests

    -
  • -
-
-
-

It is expected that test contributions fit into one of these categories.

-
-
-

The pom.xml file located in the testsuite module is inherited by all -submodules and is used to do the following:

-
-
-
    -
  • -

    set defaults for common testsuite system properties (which can then be -overridden on the command line)

    -
  • -
  • -

    define dependencies common to all tests (Arquillian, junit or testng, -and container type)

    -
  • -
  • -

    provide a workaround for @Resource(lookup=…​) which requires -libraries in jbossas/endorsed

    -
  • -
-
-
-

It should not:

-
-
-
    -
  • -

    define module-specific server configuration build steps

    -
  • -
  • -

    define module-specific surefire executions

    -
  • -
-
-
-

These elements should be defined in logical profiles associated with -each logical grouping of tests; e.g., in the pom for the module which -contains the tests. The submodule poms contain additional details of -their function and purpose as well as expanded information as shown in -this document.

-
-
-
-

1.2. Profiles

-
-

You should not activate the abovementioned profiles by -P, because that -disables other profiles which are activated by default.

-
-
-

Instead, you should always use activating properties, which are in -parentheses in the lists below.

-
-
-

Testsuite profiles are used to group tests into logical groups.

-
-
-
    -
  • -

    all-modules.module.profile (all-modules)

    -
  • -
  • -

    integration.module.profile (integration.module)

    -
  • -
  • -

    compat.module.profile (compat.module)

    -
  • -
  • -

    domain.module.profile (domain.module)

    -
  • -
  • -

    benchmark.module.profile (benchmark.module)

    -
  • -
  • -

    stress.module.profile (stress.module)

    -
  • -
-
-
-

They also prepare WildFly instances and resources for respective -testsuite submodules.

-
-
-
    -
  • -

    jpda.profile - sets surefire.jpda.args (debug)

    -
  • -
  • -

    ds.profile - sets database properties and prepares the datasource (ds=<db id>)

    -
    -
      -
    • -

      Has related database-specific profiles, like mysql51.profile etc.

      -
    • -
    -
    -
  • -
-
-
-

Integration testsuite profiles configure surefire executions.

-
-
-
    -
  • -

    smoke.integration.tests.profile

    -
  • -
  • -

    basic.integration.tests.profile

    -
  • -
  • -

    clustering.integration.tests.profile

    -
  • -
-
-
-
-

1.3. Integration tests

-
-

1.3.1. Smoke -Dts.smoke

-
-

Contains smoke tests.

-
-
-

Runs by default; use -Dts.noSmoke to prevent running.

-
-
-

Tests should execute quickly.

-
-
-

Divided into two Surefire executions:

-
-
-
    -
  • -

    One with full platform

    -
  • -
  • -

    Second with web profile (majority of tests).

    -
  • -
-
-
-
-

1.3.2. Basic -Dts.basic

-
-

Basic integration tests - those which do not need a special configuration -like cluster.

-
-
-

Divided into three Surefire executions:

-
-
-
    -
  • -

    One with full platform,

    -
  • -
  • -

    Second with web profile (majority of tests).

    -
  • -
  • -

    Third with web profile, but needs to be run after server restart to -check whether persistent data are really persisted.

    -
  • -
-
-
-
-

1.3.3. Clustering -Dts.clustering

-
-

Contains all tests relating to clustering aspects of the application server, such as:

-
-
-
    -
  • -

    web session clustering,

    -
  • -
  • -

    Jakarta Enterprise Beans session clustering,

    -
  • -
  • -

    command dispatcher,

    -
  • -
  • -

    web session affinity handling,

    -
  • -
  • -

    and other areas.

    -
  • -
-
-
-

Tests should leverage shared testing logic by extending org.jboss.as.test.clustering.cluster.AbstractClusteringTestCase. -The test case contract is that before executing the test method, all specified servers are started and all specified -deployments are deployed. This allows Arquillian resource injection into the test case.

-
-
-

There are four WildFly server instances, one load-balancer (Undertow) and one datagrid (Infinispan server) available -for the tests.

-
-
-
Maven profiles and Parallelization
-
-

There are maven profiles that might come in handy for testing:

-
-
-
    -
  • -

    ts.clustering.common.profile prepares server configurations used by test execution profiles

    -
  • -
  • -

    ts.clustering.cluster.ha.profile runs tests against standalone-ha.xml profile

    -
  • -
  • -

    ts.clustering.cluster.fullha.profile runs tests which require standalone-full-ha.xml profile; e.g. tests requiring JMS subsystem

    -
  • -
  • -

    ts.clustering.cluster.ha-infinispan-server.profile runs tests against standalone-ha.xml profile with Infinispan Server provisioned via @ClassRule

    -
  • -
  • -

    ts.clustering.single.profile runs clustering tests that are using a non-HA server profile

    -
  • -
  • -

    ts.clustering.byteman.profile runs clustering tests that require installation of byteman rules

    -
  • -
-
-
-

For instance, to only run tests that run against full-ha profile, activate clustering tests with -Dts.clustering and exclude -the other profiles with -P:

-
-
-
-
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -P \!ts.clustering.cluster.ha.profile,\!ts.clustering.single.profile,\!ts.clustering.byteman.profile
-
-
-
-

If the testsuite can be run on multiple runners in parallel, the main execution (which takes the majority of the execution time) -can be split by packages using -Dts.surefire.clustering.ha.additionalExcludes property. -This property feeds a regular expression to exclude sub-packages of the org.jboss.as.test.clustering.cluster package. -The sub-packages at the time of writing are affinity, cdi, dispatcher, ejb, ejb2, group, jms, jpa, -jsf, provider, registry, singleton, sso, web, and xsite. -For instance, to parallelize testsuite execution on two machines (e.g. when using GitHub actions scripting or alike) the following commands -could be used to split the clustering tests into two executions of similar execution time, the first node can run the first half of the tests in sub-packages, e.g.:

-
-
-
-
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -P="-ts.clustering.cluster.fullha.profile,-ts.clustering.cluster.ha-infinispan-server.profile,-ts.clustering.byteman.profile,-ts.clustering.single.profile" -Dts.surefire.clustering.ha.additionalExcludes=affinity\|cdi\|dispatcher\|ejb\|ejb2\|group\|jms\|jpa
-
-
-
-

while another node can concurrently run all the other profiles and the other half of sub-packages:

-
-
-
-
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -Dts.surefire.clustering.ha.additionalExcludes=jsf\|provider\|registry\|singleton\|sso\|web\|xsite
-
-
-
-

If the test packages get out of sync with the excludes this will result in a test running multiple times, rather than tests being omitted.

-
-
-
-
Running a single test
-
-

To run a single test, specifying -Dtest=foo is the standard way to do this. However, this overrides the includes/excludes -section of the surefire maven plugin execution. So, in case of the clustering testsuite, the profile which this test belongs -to, needs to be specified as well. For instance, to run a single test from the 'single' test execution, exclude the other -test profiles:

-
-
-
-
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -P="-ts.clustering.cluster.ha.profile,-ts.clustering.cluster.fullha.profile,-ts.clustering.cluster.ha-infinispan-server.profile,-ts.clustering.byteman.profile,-ts.clustering.single.profile" -Dtest=org.jboss.as.test.clustering.single.dispatcher.CommandDispatcherTestCase
-
-
-
-
-
-

1.3.4. Running Infinispan Server tests against custom distribution

-
-

To run the Infinispan Server-based tests against a custom distribution, a custom location can be specified with -Dinfinispan.server.home.override=/foo/bar -and -Dinfinispan.server.profile.override=infinispan-13.0.xml to use a corresponding server profile. -The distribution is then copied over to the build directories and patched with user credentials.

-
-
-
-
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -P="-ts.clustering.cluster.ha.profile,-ts.clustering.cluster.fullha.profile,-ts.clustering.single.profile,-ts.clustering.byteman.profile,-ts.clustering.single.profile" -Dinfinispan.server.home.override=/Users/rhusar/Downloads/redhat-datagrid-8.3.0-server
-
-
-
-

Should it be required, the Infinispan Server driver version can be also overridden by -Dversion.org.infinispan.server.driver=13.0.0.Dev03.

-
-
-
Skipping clustering tests
-
-

To skip execution of all clustering tests use -Dts.noClustering.

-
-
-
-
-

1.3.5. IIOP -Dts.iiop

-
- - - - - -
- - -This section is open for contributions. -
-
-
-
-

1.3.6. XTS -Dts.XTS

-
- - - - - -
- - -This section is open for contributions. -
-
-
-
-

1.3.7. Multinode -Dts.multinode

-
- - - - - -
- - -This section is open for contributions. -
-
-
-
-
-
-
-

2. WildFly Integration Testsuite User Guide

-
- -
-

Target Audience: Those interested in running the testsuite or a subset -thereof, with various configuration options.

-
-
-

2.1. Running the testsuite

-
-

The tests can be run using:

-
-
-
    -
  • -

    build.sh or build.bat, as a part of WildFly build.

    -
    -
      -
    • -

      By default, only smoke tests are run. To run all tests, run build.sh -install -DallTests.

      -
    • -
    -
    -
  • -
  • -

    integration-tests.sh or integration-tests.bat, a convenience -script which uses bundled Maven (currently 3.0.3), and runs all parent -testsuite modules (which configure the AS server).

    -
  • -
  • -

    pure maven run, using mvn install.

    -
  • -
-
-
-

The scripts are wrappers around Maven-based build. Their arguments are -passed to Maven (with few exceptions described below). This means you -can use:

-
-
-
    -
  • -

    build.sh (defaults to install)

    -
  • -
  • -

    build.sh install

    -
  • -
  • -

    build.sh clean install

    -
  • -
  • -

    integration-tests.sh install

    -
  • -
  • -

    …​etc.

    -
  • -
-
-
-

2.1.1. Supported Maven phases

-
-

Testsuite actions are bounds to various Maven phases up to verify. -Running the build with earlier phases may fail in the submodules due to -missed configuration steps. Therefore, the only Maven phases you may -safely run, are:

-
-
-
    -
  • -

    clean

    -
  • -
  • -

    install

    -
  • -
  • -

    site

    -
  • -
-
-
-

The test phase is not recommended to be used for scripted jobs as we -are planning to switch to the failsafe plugin bound to the -integration-test and verify phases. See -WFLY-625 and -WFLY-228.

-
-
-
-

2.1.2. Testsuite structure

-
-

testsuite
-integration
-smoke
-basic
-clust
-iiop
-multinode
-xts
-compat
-domain
-mixed-domain
-stress
-benchmark

-
-
-
-

2.1.3. Test groups

-
-

To define groups of tests to be run, these properties are available:

-
-
-
    -
  • -

    -DallTests - Runs all subgroups.

    -
  • -
  • -

    -DallInteg - Runs all integration tests. Same as -cd testsuite/integration; mvn clean install -DallTests

    -
  • -
  • -

    -Dts.integ - Basic integration + clustering tests.

    -
  • -
  • -

    -Dts.clustering - Clustering tests.

    -
  • -
  • -

    -Dts.iiop - IIOP tests.

    -
  • -
  • -

    `-Dts.multinode `- Tests with many nodes.

    -
  • -
  • -

    -Dts.manualmode - Tests with manual mode Arquillian containers.

    -
  • -
  • -

    -Dts.bench - Benchmark tests.

    -
  • -
  • -

    -Dts.stress - Stress tests.

    -
  • -
  • -

    -Dts.domain - Domain mode tests.

    -
  • -
  • -

    -Dts.compat - Compatibility tests.

    -
  • -
-
-
-
-
-

2.2. Examples

-
-
    -
  • -

    integration-tests.sh [install] ` ` -- Runs smoke tests.

    -
  • -
  • -

    integration-tests.sh clean install — Cleans the target directory, then runs smoke tests.

    -
  • -
  • -

    integration-tests.sh install -Dts.smoke ` ` -- Same as above.

    -
  • -
  • -

    integration-tests.sh install -DallTests ` ` --- Runs all testsuite tests.

    -
  • -
  • -

    integration-tests.sh install -Dts.stress — Runs smoke tests and stress tests.

    -
  • -
  • -

    integration-tests.sh install -Dts.stress -Dts.noSmoke — Runs stress tests only.

    -
  • -
-
-
-

Pure maven - if you prefer not to use scripts, you may achieve the -same result with:

-
-
-
    -
  • -

    mvn …​ -rf testsuite

    -
  • -
-
-
-

The -rf …​ parameter stands for "resume from" and causes Maven to run -the specified module and all successive.

-
-
-

It’s possible to run only a single module (provided the ancestor modules -were already run to create the AS copies) :

-
-
-
    -
  • -

    mvn …​ -pl testsuite/integration/cluster

    -
  • -
-
-
-

The -pl …​ parameter stands for "project list" and causes Maven to -run the specified module only.

-
-
-

2.2.1. Output to console

-
-
-
-DtestLogToFile
-
-
-
-
-

2.2.2. Other options

-
-

-DnoWebProfile - Run all tests with the full profile ( -standalone-full.xml). By default, most tests are run under web -profile ( standalone.xml).

-
-
-

-Dts.skipTests - Skip testsuite’s tests. Defaults to the value of --DskipTests, which defaults to false. To build AS, skip unit tests -and run testsuite, use -DskipTests -Dts.skipTests=false.

-
-
-
-

2.2.3. Timeouts

-
-
Surefire execution timeout
-
-

Unfortunatelly, no math can be done in Maven, so instead of applying a -timeout ratio, you need to specify timeout manually for Surefire.

-
-
-
-
-Dsurefire.forked.process.timeout=900
-
-
-
-
-
In-test timeout ratios
-
-

Ratio in prercent - 100 = default, 200 = two times longer timeouts for -given category.

-
-
-

Currently we have five different ratios. Later, it could be replaced -with just one generic, one for database and one for deployment -operations.

-
-
-
-
-Dtimeout.ratio.fsio=100
--Dtimeout.ratio.netio=100
--Dtimeout.ratio.memio=100
--Dtimeout.ratio.proc=100
--Dtimeout.ratio.db=100
-
-
-
-
-
-

2.2.4. Running a single test (or specified tests)

-
-

Single test is run using -Dtest=…​ . Examples:

-
-
-
    -
  • -

    ./integration-tests.sh install -Dtest='*Clustered*' -Dintegration.module -Dts.clustering

    -
  • -
  • -

    ./integration-tests.sh clean install -Dtest=org / jboss / as -/ test / integration / ejb/async/*TestCase.java --Dintegration.module -Dts.basic

    -
  • -
  • -

    cd testsuite; mvn install -Dtest='*Clustered*' --Dts.basic -# No need for -Dintegration.module - integration module is active by default.

    -
  • -
-
-
-

The same shortcuts listed in "Test groups" may be used to activate the -module and group profile.

-
-
-

Note that -Dtest= overrides <includes> and <exludes> defined in -pom.xml, so do not rely on them when using wildcards - all compiled test -classes matching the wildcard will be run.

-
-
-

Which Surefire execution is used?

-
-
-

Due to Surefire’s design flaw, tests run multiple times if there are -multiple surefire executions.
-To prevent this, if -Dtest=…​ is specified, non-default executions -are disabled, and standalone-full is used for all tests.
-If you need it other way, you can overcome that need:

-
-
-
    -
  • -

    basic-integration-web.surefire with standalone.xml - Configure standalone.xml to be used as server config.

    -
  • -
  • -

    basic-integration-non-web.surefire - For tests included here, technically nothing changes.

    -
  • -
  • -

    basic-integration-2nd.surefire - Simply run the second test in another invocation of Maven.

    -
  • -
-
-
-
-

2.2.5. Running against existing AS copy (not the one from

-
-

build/target/jboss-as-*)

-
-
-

-Djboss.dist=<path/to/jboss-as> will tell the testsuite to copy that -AS into submodules to run the tests against.

-
-
-

For example, you might want to run the testsuite against AS located in -/opt/wildfly-8 :

-
-
-
-
./integration-tests.sh -DallTests -Djboss.dist=/opt/wildfly-8
-
-
-
-

The difference between jboss.dist and jboss.home:

-
-
-

jboss.dist is the location of the tested binaries. It gets copied to -testsuite submodules.

-
-
-

jboss.home is internally used and points to those copied AS instances -(for multinode tests, may be even different for each AS started by -Arquillian).

-
-
-
Running against a running JBoss AS instance
-
-

Arquillian’s WildFly 29 container adapter allows specifying -allowConnectingToRunningServer in arquillian.xml, which makes it -check whether AS is listening at managementAddress:managementPort, and -if so, it uses that server instead of launching a new one, and doesn’t -shut it down at the end.

-
-
-

All arquillian.xml’s in the testsuite specify this parameter. Thus, if -you have a server already running, it will be re-used.

-
-
-
-
Running against JBoss Enterprise Application Platform (EAP) 6.0
-
-

To run the testsuite against AS included JBoss Enterprise Application -Platform 6.x (EAP), special steps are needed.

-
-
-

Assuming you already have the sources available, and the distributed EAP -maven repository unzipped in e.g. /opt/jboss/eap6-maven-repo/ :

-
-
-

1) Configure maven in settings.xml to use only the EAP repository. This -repo contains all artifacts necessary for building EAP, including maven -plugins.
-The build (unlike running testsuite) may be done offline.
-The recommended way of configuring is to use special settings.xml, not -your local one (typically in .m2/settings.xml).

-
-
-
-
   <mirror>
-      <id>eap6-mirror-setting</id>
-      <mirrorOf>
-         *,!central-eap6,!central-eap6-plugins,!jboss-public-eap6,!jboss-public-eap6-plugins
-      </mirrorOf>
-      <name>Mirror Settings for EAP 6 build</name>
-      <url>file:///opt/jboss/eap6-maven-repo</url>
-    </mirror></mirrors>
-
-
-
-

\2) Build EAP. You won’t use the resulting EAP build, though. The -purpose is to get the artifacts which the testsuite depends on.

-
-
-
-
mvn clean install -s settings.xml -Dmaven.repo.local=local-repo-eap
-
-
-
-

\3) Run the testsuite. Assuming that EAP is located in /opt/eap6, you -would run:

-
-
-
-
./integration-tests.sh -DallTests -Djboss.dist=/opt/eap6
-
-
-
-

For further information on building EAP and running the testsuite -against it, see the official EAP documentation (link to be added) -.

-
-
-

How-to for EAP QA can be found -here (Red Hat internal -only).

-
-
-
-
-

2.2.6. Running with a debugger

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ArgumentWhat will start with debuggerDefault portPort change arg.

-Ddebug

AS instances run by Arquillian

8787

-Das.debug.port=…​

-Djpda

alias for -Ddebug

 

 

-DdebugClient

Test JVMs (currently Surefire)

5050

-Ddebug.port.surefire=…​

-DdebugCLI

AS CLI

5051

-Ddebug.port.cli=…​

-
-
Examples
-
-
-
./integration-tests.sh install -DdebugClient -Ddebug.port.surefire=4040
- 
-...
- 
--------------------------------------------------------
- T E S T S
--------------------------------------------------------
-Listening for transport dt_socket at address: 4040
-
-
-
-
-
./integration-tests.sh install -DdebugClient -Ddebug.port.surefire
- 
-...
- 
--------------------------------------------------------
- T E S T S
--------------------------------------------------------
-Listening for transport dt_socket at address: 5050
-
-
-
-
-
./integration-tests.sh install -Ddebug
-
-
-
-
-
./integration-tests.sh install -Ddebug -Das.debug.port=5005
-
-
-
- - - - - -
- - -JBoss AS is started by Arquillian, when the first test which requires -given instance is run. Unless you pass -DtestLogToFile=false, there’s -(currently) no challenge text in the console; it will look like the -first test is stuck. This is being solved in -http://jira.codehaus.org/browse/SUREFIRE-781. -
-
-
- - - - - -
- - -Depending on which test group(s) you run, multiple AS instances may be -started. In that case, you need to attach the debugger multiple times. -
-
-
-
-
-

2.2.7. Running tests with custom database

-
-

To run with different database, specify the -Dds and use these -properties (with the following defaults):

-
-
-
-
-Dds.jdbc.driver=
--Dds.jdbc.driver.version=
--Dds.jdbc.url=
--Dds.jdbc.user=test
--Dds.jdbc.pass=test
--Dds.jdbc.driver.jar=${ds.db}-jdbc-driver.jar
-
-
-
-

driver is JDBC driver class. JDBC url, user and pass is as -expected.

-
-
-

driver.version is used for automated JDBC driver downloading. Users -can set up internal Maven repository hosting JDBC drivers, with -artifacts with

-
-
-

GAV = jdbcdrivers:${ds.db}:${ds.jdbc.driver.version}

-
- -
-

The ds.db value is set depending on ds. E.g. -Dds=mssql2005 sets -ds.db=mssql (since they have the same driver). -Dds.db may be -overriden to use different driver.

-
-
-

In case you don’t want to use such driver, set just --Dds.db= (empty) and provide the driver to the AS manually.
-Not supported; work in progress on parameter to provide JDBC Driver -jar.

-
-
-
Default values
-
-

For WildFly continuous integration, there are some predefined values for -some of databases, which can be set using:

-
-
-
-
-Dds.db=<database-identifier>
-
-
-
-

Where database-identifier is one of: h2, mysql51

-
-
-
-
-

2.2.8. Running tests with IPv6

-
-

-Dipv6 - Runs AS with --Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true

-
-
-

and the following defaults, overridable by respective parameter:

-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterIPv4 defaultIPv6 default 

-Dnode0

127.0.0.1

::1

Single-node tests.

-Dnode1

127.0.0.1

::1

Two-node tests (e.g. cluster) use this for the -2nd node.

-Dmcast

230.0.0.4

ff01::1

ff01::1 is IPv6 Node-Local scope mcast -addr.

-Dmcast.jgroupsDiag

224.0.75.75

ff01::2

JGroups diagnostics -multicast address.

-Dmcast.modcluster

224.0.1.105

ff01::3

mod_cluster multicast -address.

-
-

Values are set in AS configuration XML, replaced in resources (like -ejb-jar.xml) and used in tests.

-
-
-
-

2.2.9. Running tests with security manager / custom security policy

-
-

-Dsecurity.manager - Run with default policy.

-
-
-

-Dsecurity.policy=<path> - Run with the given policy.

-
-
-

-Dsecurity.manager.other=<set of Java properties> - Run with the given -properties. Whole set is included in all server startup parameters.

-
-
-

Example:

-
-
-
-
./integration-tests.sh clean install -Dintegration.module -DallTests \
-\"-Dsecurity.manager.other=-Djava.security.manager \
--Djava.security.policy==$(pwd)/testsuite/shared/src/main/resources/secman/permitt_all.policy \
--Djava.security.debug=access:failure \"
-
-
-
-

Notice the \" quotes delimiting the whole -Dsecurity.manager.other -property.

-
-
-
-

2.2.10. Creating test reports

-
-

Test reports are created in the form known from EAP 5. To create them, -simply run the testsuite, which will create Surefire XML files.

-
-
-

Creation of the reports is bound to the site Maven phase, so it must -be run separatedly afterwards. Use one of these:

-
-
-
-
./integration-tests.sh site
-cd testsuite; mvn site
-mvn -pl testsuite site
-
-
-
-

Note that it will take all test results under testsuite/integration/ - -the pattern is **/*TestCase.xml, without need to specify -DallTests.

-
-
-
-

2.2.11. Creating coverage reports

- -
-

Coverage reports are created by -JaCoCo.

-
-
-

During the integration tests, Arquillian is passed a JVM argument which -makes it run with JaCoCo agent, which records the executions into -${basedir}/target/jacoco .

-
-
-

In the site phase, a HTML, XML and CSV reports are generated. That is -done using jacoco:report Ant task in maven-ant-plugin since JaCoCo’s -maven report goal doesn’t support getting classes outside -target/classes.

-
-
-
Usage
-
-
-
./build.sh clean install -DskipTests
-./integration-tests.sh clean install -DallTests -Dcoverage
-./integration-tests.sh site -DallTests -Dcoverage ## Must run in separatedly.
-
-
-
-

Alternative:

-
-
-
-
mvn clean install -DskipTests
-mvn -rf testsuite clean install -DallTests -Dcoverage
-mvn -rf testsuite site -DallTests -Dcoverage
-
-
-
-
-
-

2.2.12. Cleaning the project

-
-

To have most stable build process, it should start with:

-
-
-
    -
  • -

    clean target directories

    -
  • -
  • -

    only central Maven repo configured

    -
  • -
  • -

    clean local repository or at least:

    -
    -
      -
    • -

      free of artefacts to be built

      -
    • -
    • -

      free of dependencies to be used (especially snapshots)

      -
    • -
    -
    -
  • -
-
-
-

To use , you may use these commands:

-
-
-
-
mvn clean install -DskipTests -DallTests  ## ...to clean all testsuite modules.
-mvn dependency:purge-local-repository build-helper:remove-project-artifact -Dbuildhelper.removeAll
-
-
-
-

In case the build happens in a shared environment (e.g. network disk), -it’s recommended to use local repository:

-
-
-
-
cp /home/hudson/.m2/settings.xml .
-sed "s|<settings>|<settings><localRepository>/home/ozizka/hudson-repos/$JOBNAME</localRepository>|" -i settings.xml
-
-
-
-

Or:

-
-
-
-
mvn clean install ... -Dmaven.repo.local=localrepo
-
-
- -
-
-
-
-
-

3. WildFly Testsuite Harness Developer Guide

-
-
-

Audience: Whoever wants to change the testsuite harness

-
-
-

JIRA: WFLY-576

-
-
-

3.1. Testsuite requirements

-
-

http://community.jboss.org/wiki/ASTestsuiteRequirements will probably be -merged here later.

-
-
-
-

3.2. Adding a new maven plugin

-
-

The plugin version needs to be specified in jboss-parent at the <properties> section of the jboss-parent pom.xml file.

-
-
-
-

3.3. Shortened Maven run overview

- -
- -
-

3.5. Properties and their propagation

-
-

Propagated to tests through arquillian.xml:
-<property name="javaVmArguments">${server.jvm.args}</property>
-TBD: https://issues.redhat.com/browse/ARQ-647

-
-
-

3.5.1. JBoss AS instance dir

-
-

integration/pom.xml

-
-
-

(currently nothing)

-
-
-

*-arquillian.xml

-
-
-
-
<container qualifier="jboss" default="true">
-    <configuration>
-        <property name="jbossHome">${basedir}/target/jbossas</property>
-
-
-
-
-

3.5.2. Server JVM arguments

-
-
-
<surefire.memory.args>-Xmx512m -XX:MaxPermSize=256m</surefire.memory.args>
-    <surefire.jpda.args></surefire.jpda.args>
-    <surefire.system.args>${surefire.memory.args} ${surefire.jpda.args}</surefire.system.args>
-
-
-
-
-

3.5.3. IP settings

-
-
    -
  • -

    ${ip.server.stack } - used in -<systemPropertyVariables> / <server.jvm.args> which is used in -*-arquillian.xml.

    -
  • -
-
-
-
-

3.5.4. Testsuite directories

-
-
    -
  • -

    ${jbossas.ts.integ.dir}

    -
  • -
  • -

    ${jbossas.ts.dir}

    -
  • -
  • -

    ${jbossas.project.dir}

    -
  • -
-
-
-
-

3.5.5. Clustering properties

-
-
    -
  • -

    node0

    -
  • -
  • -

    node1

    -
  • -
-
-
-
-
-

3.6. Debug parameters propagation

-
-
-
<surefire.jpda.args></surefire.jpda.args>       - default
-
-<surefire.jpda.args>-Xrunjdwp:transport=dt_socket,address=${as.debug.port},server=y,suspend=y</surefire.jpda.args> - activated by -Ddebug or -Djpda
-
-
-testsuite/pom.xml:        <surefire.system.args>... ${surefire.jpda.args} ...</surefire.system.args>
-testsuite/pom.xml:                        <jboss.options>${surefire.system.args}</jboss.options>
-
-testsuite/integration/pom.xml:     <server.jvm.args>${surefire.system.args} ${jvm.args.ip.server} ${jvm.args.security} ${jvm.args.timeouts} -Dnode0=${node0} -Dnode1=
-
-
-integration/pom.xml:
-<server.jvm.args>${surefire.system.args} ${jvm.args.ip.server} ${jvm.args.security} ${jvm.args.timeouts} -Dnode0=${node0} -Dnode1=${node1} -DudpGroup=${udpGroup} ${jvm.args.dirs}</server.jvm.args>
-
-arquillian.xml:
-<property name="javaVmArguments">${server.jvm.args} -Djboss.inst=${basedir}/target/jbossas</property>
-
-
-
-
-
-
-

4. How the WildFly is built and configured for testsuite modules.

-
-
-

Refer to Shortened Maven Run Overview to see the -mentioned build steps.

-
-
-

\1) AS instance is copied from ${jboss.dist} to -testsuite/target/jbossas.
-Defaults to AS which is built by the project ( -build/target/jboss-as-*).

-
-
-

2)

-
-
-

testsuite/pom.xml:

-
-
-

from $\{jboss.home} to ${basedir}/target/jbossas
-phase generate-test-resources: resource-plugin, goal copy-resources

-
-
-

testsuite/integration/pom.xml:

-
-
-

phase process-test-resources: antrun-plugin:

-
-
-
-
<ant antfile="$\{basedir}/src/test/scripts/basic-integration-build.xml">
-    <target name="build-basic-integration"/>
-    <target name="build-basic-integration-jts"/>
-</ant>
-
-
-
-

Which invokes

-
-
-
-
<target name="build-basic-integration" description="Builds server configuration for basic-integration tests">
-      <build-server-config name="jbossas"/>
-
-
-
-

Which invokes

-
-
-
-
<!-- Copy the base distribution. -->
-<!-- We exclude modules and bundles as they are read-only and we locate the via sys props. -->
-<copy todir="@{output.dir}/@{name}">
-    <fileset dir="@{jboss.dist}">
-        <exclude name="**/modules/**"/>
-        <exclude name="**/bundles/**"/>
-    </fileset>
-</copy>
- 
-<!-- overwrite with configs from test-configs and apply property filtering -->
-<copy todir="@{output.dir}/@{name}" overwrite="true" failonerror="false">
-    <fileset dir="@{test.configs.dir}/@{name}"/>
-    <filterset begintoken="${" endtoken="}">
-        <filter token="node0" value="${node0}"/>
-        <filter token="node1" value="${node1}"/>
-        <filter token="udpGroup" value="${udpGroup}"/>
-        <filter-elements/>
-    </filterset>
-</copy>
-
-
-
-

4.1. Arquillian config file location

-
-
-
-Darquillian.xml=some-file-or-classpath-resource.xml
-
-
-
-
-
-
-

5. Plugin executions matrix

-
-
-

x - runs in this module
-xx - runs in this and all successive modules
-x! - runs but should not.

-
- ------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 TSintegsmokebasicclustiiopcompdomainbenchstress

initialize

maven-help-plugin

xx

x

x

x

x

x

x

x

x

x

properties-maven-plugin:write-project-properties

x

 

 

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (banner)

 

 

 

 

 

 

 

 

 

 

process-resources

maven-resources-plugin:2.5:resources (default-resources)

xx

 

 

 

 

 

 

 

 

 

maven-dependency-plugin:2.3:copy (copy-annotations-endorsed)

xx!

 

 

 

 

 

 

 

 

 

compile

maven-compiler-plugin:2.3.2:compile (default-compile)

xx

 

 

 

 

 

 

 

 

 

generate-test-resources

maven-resources-plugin:2.5:copy-resources (build-jbossas.server)

xx!

 

 

 

 

 

 

 

 

 

Should be:

x

 

 

 

 

 

 

 

 

 

maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas)

 

x

 

 

 

 

 

 

 

 

maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups)

 

x

x

x

?

?

?

!

 

 

Should be:

 

xx

x

x

x

x

x

x

x

x

process-test-resources

maven-resources-plugin:2.5:testResources (default-testResources)

xx

 

 

 

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (build-smoke.server)

 

 

x

 

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (prepare-jars-basic-integration.server)

 

 

 

x

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (build-clustering.server)

 

 

 

 

x

x!?

 

 

 

 

test-compile

maven-compiler-plugin:2.3.2:testCompile (default-testCompile)

xx

 

 

 

 

 

 

 

 

 

xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server)

x

 

 

 

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (build-jars)

 

 

 

 

 

 

x

 

 

 

test

maven-surefire-plugin:2.10:test (smoke-full.surefire)

 

 

 

 

 

 

 

 

 

 

maven-surefire-plugin:2.10:test (smoke-web.surefire)

 

 

 

 

 

 

 

 

 

 

maven-surefire-plugin:2.10:test (default-test)

 

 

 

 

x

x

x

x

 

 

maven-surefire-plugin:2.10:test -(basic-integration-default-full.surefire)

 

 

 

x

 

 

 

 

 

 

maven-surefire-plugin:2.10:test -(basic-integration-default-web.surefire)

 

 

 

x

 

 

 

 

 

 

maven-surefire-plugin:2.10:test (basic-integration-2nd.surefire)

 

 

 

x

 

 

 

 

 

 

maven-surefire-plugin:2.10:test (tests-clust-multi-node-unm…​surefire)

 

 

 

 

x

 

 

 

 

 

maven-surefire-plugin:2.10:test (tests-clustering-single-node.surefire)

 

 

 

 

x

 

 

 

 

 

maven-surefire-plugin:2.10:test (tests-clustering-multi-node.surefire)

 

 

 

 

x

 

 

 

 

 

maven-surefire-plugin:2.10:test (tests-iiop-multi-node.surefire)

 

 

 

 

 

x

 

 

 

 

package

maven-jar-plugin:2.3.1:jar (default-jar)

xx!

 

 

 

 

 

 

 

 

 

maven-source-plugin:2.1.2:jar-no-fork (attach-sources)

x

 

 

 

 

 

 

 

 

 

install

maven-install-plugin:2.3.1:install (default-install)

xx!

 

 

 

 

 

 

 

 

 

 

TS

integ

smoke

basic

clust

iiop

comp

domain

bench

stress

-
-
-
-

6. Shortened Maven Run Overview

-
-
-

6.1. How to get it

-
-
-
./integration-tests.sh clean install -DallTests | tee TS.txt | testsuite/tools/runSummary.sh
-
-
-
-
-

6.2. How it’s done

-
-

Run this script on the output of the AS7 testsuite run:

-
-
-
-
##  Cat the file or stdin if no args,
-##  filter only interesting lines - plugin executions and modules separators,
-##  plus Test runs summaries,
-##  and remove the boring plugins like enforcer etc.
- 
-cat $1 \
- | egrep ' --- |Building| ---------|Tests run: | T E S T S' \
- | grep -v 'Time elapsed'
- | sed 's|Tests run:|                Tests run:|' \
- | grep -v maven-clean-plugin \
- | grep -v maven-enforcer-plugin \
- | grep -v buildnumber-maven-plugin \
- | grep -v maven-help-plugin \
- | grep -v properties-maven-plugin:.*:write-project-properties \
-;
-
-
-
-

You’ll get an overview of the run.

-
-
-
-

6.3. Example output with comments.

-
-
-
ondra@ondra-redhat: ~/work/AS7/ozizka-as7 $  ./integration-tests.sh clean install -DallTests | tee TS.txt | testsuite/tools/runSummary.sh
-[INFO] ------------------------------------------------------------------------
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Aggregator 7.1.0.CR1-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite ---
-              Copies org.jboss.spec.javax.annotation:jboss-annotations-api_1.1_spec to ${project.build.directory}/endorsed .
-              Inherited - needed for compilation of all submodules.
- 
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite ---
-              Copies ${jboss.home} to target/jbossas .  TODO: Should be jboss.dist.
- 
-[INFO] --- xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server) @ jboss-as-testsuite ---
-              Changes IP addresses used in server config files -
-              applies ${xslt.scripts.dir}/changeIPAddresses.xsl on ${basedir}/target/jbossas/standalone/configuration/standalone-*.xml
-              Currently inherited, IMO should not be.
- 
-[INFO] --- maven-source-plugin:2.1.2:jar-no-fork (attach-sources) @ jboss-as-testsuite ---
-              TODO: Remove
- 
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite ---
- 
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Integration Aggregator 7.1.0.CR1-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-agg ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-agg ---
-              TODO: Remove
-[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas) @ jboss-as-testsuite-integration-agg ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-agg ---
-[INFO] --- xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server) @ jboss-as-testsuite-integration-agg ---
-              TODO: Remove
-[INFO] --- maven-source-plugin:2.1.2:jar-no-fork (attach-sources) @ jboss-as-testsuite-integration-agg ---
-              TODO: Remove
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-agg ---
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss AS Test Suite: Integration - Smoke 7.1.0.CR1-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-smoke ---
-              TODO: Remove
-[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server) @ jboss-as-testsuite-integration-smoke ---
-              TODO: Remove
- 
-[INFO] --- maven-antrun-plugin:1.6:run (build-smoke.server) @ jboss-as-testsuite-integration-smoke ---
-     [echo] Building AS instance "smoke" from /home/ondra/work/EAP/EAP6-DR9 to /home/ondra/work/AS7/ozizka-as7/testsuite/integration/smoke/target
-              TODO: Should be running one level above!
- 
-[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-surefire-plugin:2.10:test (smoke-full.surefire) @ jboss-as-testsuite-integration-smoke ---
- T E S T S
-                Tests run: 4, Failures: 0, Errors: 4, Skipped: 0
-
-
-
-
-

6.4. Example output, unchanged

-
-
-
ondra@lenovo:~/work/AS7/ozizka-git$ ./integration-tests.sh clean install -DallTests | tee TS.txt | testsuite/tools/runSummary.sh
-SSCmeetingWestfordJan     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/smoke does not exist.
-     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/clustering-udp-0 does not exist.
-     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/clustering-udp-1 does not exist.
-     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/iiop-client does not exist.
-     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/iiop-server does not exist.
-[INFO] ------------------------------------------------------------------------
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Aggregator 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-antrun-plugin:1.6:run (banner) @ jboss-as-testsuite ---
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite ---
-[INFO] --- xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server) @ jboss-as-testsuite ---
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite ---
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Integration 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-agg ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-agg ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas) @ jboss-as-testsuite-integration-agg ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-agg ---
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-agg ---
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Integration - Smoke 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-antrun-plugin:1.6:run (build-smoke.server) @ jboss-as-testsuite-integration-smoke ---
-     [echo] Building AS instance "smoke" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/smoke/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/smoke/target
-[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-smoke ---
-[INFO] --- maven-surefire-plugin:2.10:test (smoke-full.surefire) @ jboss-as-testsuite-integration-smoke ---
- T E S T S
-                Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
-[INFO] --- maven-surefire-plugin:2.10:test (smoke-web.surefire) @ jboss-as-testsuite-integration-smoke ---
- T E S T S
-                Tests run: 116, Failures: 0, Errors: 0, Skipped: 6
-[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-integration-smoke ---
-[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/integration/smoke/target/jboss-as-testsuite-integration-smoke-7.1.0.Final-SNAPSHOT.jar
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-smoke ---
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Integration - Basic 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-basic ---
-[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-basic ---
-[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-basic ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-basic ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-basic ---
-[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-basic ---
-[INFO] --- maven-antrun-plugin:1.6:run (prepare-jars-basic-integration.server) @ jboss-as-testsuite-integration-basic ---
-[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-basic ---
-[INFO] --- maven-surefire-plugin:2.10:test (basic-integration-default-full.surefire) @ jboss-as-testsuite-integration-basic ---
- T E S T S
-                Tests run: 323, Failures: 0, Errors: 4, Skipped: 30
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Integration - Clustering 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-clust ---
-[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-clust ---
-[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-clust ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-clust ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-clust ---
-[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-clust ---
-[INFO] --- maven-antrun-plugin:1.6:run (build-clustering.server) @ jboss-as-testsuite-integration-clust ---
-     [echo] Building config clustering-udp-0
-     [echo] Building AS instance "clustering-udp-0" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/target
-     [echo] Building config clustering-udp-1
-     [echo] Building AS instance "clustering-udp-1" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/target
-[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-clust ---
-[INFO] --- maven-surefire-plugin:2.10:test (tests-clustering-multi-node-unmanaged.surefire) @ jboss-as-testsuite-integration-clust ---
- T E S T S
-                Tests run: 9, Failures: 0, Errors: 0, Skipped: 0
-[INFO] --- maven-surefire-plugin:2.10:test (tests-clustering-single-node.surefire) @ jboss-as-testsuite-integration-clust ---
- T E S T S
-                Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
-[INFO] --- maven-surefire-plugin:2.10:test (tests-clustering-multi-node.surefire) @ jboss-as-testsuite-integration-clust ---
- T E S T S
-                Tests run: 8, Failures: 0, Errors: 0, Skipped: 0
-[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-integration-clust ---
-[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/target/jboss-as-testsuite-integration-clust-7.1.0.Final-SNAPSHOT.jar
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-clust ---
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Integration - IIOP 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-iiop ---
-[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-iiop ---
-[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-iiop ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-iiop ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-iiop ---
-[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-iiop ---
-[INFO] --- maven-antrun-plugin:1.6:run (build-clustering.server) @ jboss-as-testsuite-integration-iiop ---
-     [echo] Building config iiop-client
-     [echo] Building AS instance "iiop-client" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/target
-     [echo] Building config iiop-server
-     [echo] Building AS instance "iiop-server" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/target
-[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-iiop ---
-[INFO] --- maven-surefire-plugin:2.10:test (tests-iiop-multi-node.surefire) @ jboss-as-testsuite-integration-iiop ---
- T E S T S
-                Tests run: 12, Failures: 0, Errors: 0, Skipped: 0
-[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-integration-iiop ---
-[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/target/jboss-as-testsuite-integration-iiop-7.1.0.Final-SNAPSHOT.jar
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-iiop ---
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Compatibility Tests 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-compat ---
-[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-compat ---
-[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-compat ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-compat ---
-[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-compat ---
-[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-compat ---
-[INFO] --- maven-antrun-plugin:1.6:run (build-jars) @ jboss-as-testsuite-integration-compat ---
-[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ jboss-as-testsuite-integration-compat ---
- T E S T S
-                Tests run: 7, Failures: 0, Errors: 4, Skipped: 3
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Domain Mode Integration Tests 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-domain ---
-[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-domain ---
-[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-domain ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-domain ---
-[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-domain ---
-[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-domain ---
-[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ jboss-as-testsuite-integration-domain ---
- T E S T S
-                Tests run: 89, Failures: 0, Errors: 0, Skipped: 4
-[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-integration-domain ---
-[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/domain/target/jboss-as-testsuite-integration-domain-7.1.0.Final-SNAPSHOT.jar
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-domain ---
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Benchmark Tests 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-benchmark ---
-[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-benchmark ---
-[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-benchmark ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-benchmark ---
-[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-benchmark ---
-[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-benchmark ---
-[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ jboss-as-testsuite-benchmark ---
- T E S T S
-                Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
-[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-benchmark ---
-[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/benchmark/target/jboss-as-testsuite-benchmark-7.1.0.Final-SNAPSHOT.jar
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-benchmark ---
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JBoss Application Server Test Suite: Stress Tests 7.1.0.Final-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-stress ---
-[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-stress ---
-[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-stress ---
-[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-stress ---
-[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-stress ---
-[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-stress ---
-[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ jboss-as-testsuite-stress ---
- T E S T S
-                Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
-[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-stress ---
-[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/stress/target/jboss-as-testsuite-stress-7.1.0.Final-SNAPSHOT.jar
-[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-stress ---
-[INFO] ------------------------------------------------------------------------
-[INFO] ------------------------------------------------------------------------
-[INFO] ------------------------------------------------------------------------
-[INFO] ------------------------------------------------------------------------
-
-
-
-
-
-
-

7. WildFly Testsuite Test Developer Guide

-
- -
-

7.1. Pre-requisites

-
-

Please be sure to read Pre-requisites - test quality -standards and follow those guidelines.

-
-
-
-

7.2. Arquillian container configuration

- -
-
-

7.3. ManagementClient and ModelNode usage example

-
-
-
final ModelNode operation = new ModelNode();
-operation.get(ModelDescriptionConstants.OP).set(ModelDescriptionConstants.READ_RESOURCE_OPERATION);
-operation.get(ModelDescriptionConstants.OP_ADDR).set(address);
-operation.get(ModelDescriptionConstants.RECURSIVE).set(true);
-
-final ModelNode result = managementClient.getControllerClient().execute(operation);
-Assert.assertEquals(ModelDescriptionConstants.SUCCESS, result.get(ModelDescriptionConstants.OUTCOME).asString());
-
-
-
-

ManagementClient can be obtained as described below.

-
-
-
-

7.4. Arquillian features available in tests

-
-

@ServerSetup

-
-
-

TBD

-
-
-
-
@ContainerResource private ManagementClient managementClient;
-final ModelNode result = managementClient.getControllerClient().execute(operation);
-
-
-
-

TBD

-
-
-
-
@ArquillianResource private ManagementClient managementClient;
-ModelControllerClient client = managementClient.getControllerClient();
-
-
-
-
-
@ArquillianResource ContainerController cc;
-
-@Test
-public void test() {
-    cc.setup("test", ...properties..)
-    cc.start("test")
-}
-
-
-
-
-
<arquillian>
-    <container qualifier="test" mode="manual" />
-</arquillian>
-
-
-
-
-
// Targeted containers HTTP context.
-@ArquillianResource URL url;
-
-
-
-
-
// Targeted containers HTTP context where servlet is located.
-@ArquillianResource(SomeServlet.class) URL url;
-
-
-
-
-
// Targeted containers initial context.
-@ArquillianResource InitialContext|Context context;
-
-
-
-
-
// The manual deployer.
-@ArquillianResource Deployer deployer;
-
-
- -
-

See also -Arquillian -Reference.

-
-
-

Note to @ServerSetup annotation: It works as expected only on non-manual -containers. In case of manual mode containers it calls setup() method -after each server start up which is right (or actually before -deployment), but the tearDown() method is called only at AfterClass -event, i.e. usually after your manual shutdown of the server. Which -limits you on the ability to revert some configuration changes on the -server and so on. I cloned the annotation and changed it to fit the -manual mode, but it is still in my github branch :)

-
-
-
-

7.5. Properties available in tests

-
-

7.5.1. Directories

-
-
    -
  • -

    jbosssa.project.dir - Project’s root dir (where ./build.sh is).

    -
  • -
  • -

    jbossas.ts.dir - Testsuite dir.

    -
  • -
  • -

    jbossas.ts.integ.dir - Testsuite’s integration module dir.

    -
  • -
  • -

    jboss.dist - Path to AS distribution, either built -(build/target/jboss-as-…​) or user-provided via -Djboss.dist

    -
  • -
  • -

    jboss.inst - (Arquillian in-container only) Path to the AS instance in -which the test is running (until ARQ-650 is possibly done)

    -
  • -
  • -

    jboss.home - Deprecated as it’s name is unclear and -confusing. Use jboss.dist or jboss.inst.

    -
  • -
-
-
-
-

7.5.2. Networking

-
-
    -
  • -

    node0

    -
  • -
  • -

    node1

    -
  • -
  • -

    230.0.0.4

    -
  • -
-
-
-
- -
-

In case some of the following causes timeouts, you may prolong the -timeouts by setting value >= 100:

-
-
-

100 = leave as is,
-150 = 50 % longer, etc.

-
-
-
    -
  • -

    timeout.ratio.gen - General ratio - can be used to adjust all -timeouts.When this and specific are defined, both apply.

    -
  • -
  • -

    timeout.ratio.fs- Filesystem IO

    -
  • -
  • -

    timeout.ratio.net - Network IO

    -
  • -
  • -

    timeout.ratio.mem - Memory IO

    -
  • -
  • -

    timeout.ratio.cpu - Processor

    -
  • -
  • -

    timeout.ratio.db - Database

    -
  • -
-
-
-

Time ratios will soon be provided by -org.jboss.as.test.shared.time.TimeRatio.for*() methods.

-
-
-
-
-

7.6. Negative tests

-
-

To test invalid deployment handling: @ShouldThrowException

-
-
-

Currently doesn’t work due to -WFLY-673.

-
-
-

optionally you might be able to catch it using the manual deployer

-
-
-
-
@Deployment(name = "X", managed = false) ...
-
-@Test
-public void shouldFail(@ArquillianResource Deployer deployer) throws Exception {
-  try {
-    deployer.deploy("X")
-  }
-  catch(Exception e) {
-   // do something
-  }
-}
-
-
-
-
-

7.7. Clustering tests (WFLY-616)

-
-

You need to deploy the same thing twice, so two deployment methods that -just return the same thing.
-And then you have tests that run against each.

-
-
-
-
@Deployment(name = "deplA", testable = false)
-    @TargetsContainer("serverB")
-    public static Archive<?> deployment()
-
-    @Deployment(name = "deplB", testable = false)
-    @TargetsContainer("serverA")
-    public static Archive<?> deployment(){ ... }
-
-    @Test
-    @OperateOnDeployment("deplA")
-    public void testA(){ ... }
-
-    @Test
-    @OperateOnDeployment("deplA")
-    public void testA() {...}
-
-
-
-
-

7.8. How to get the tests to main branch

-
-
    -
  • -

    First of all, be sure to read the "Before you add a test" section.

    -
  • -
  • -

    Fetch the newest mater: -git fetch upstream # Provided you have the jbossas/jbossas GitHub repo -as a remote called 'upstream'.

    -
  • -
  • -

    Rebase your branch: git checkout WFLY-1234-your-branch; git rebase -upstream/main

    -
  • -
  • -

    Run whole testsuite (integration-tests -DallTests). You may -use -https://jenkins.mw.lab.eng.bos.redhat.com/hudson/job/wildfly-as-testsuite-RHEL-matrix-openJDK7/lastCompletedBuild/testReport/.

    -
    -
      -
    • -

      If any tests fail and they do not fail in main, fix it and go back -to the "Fetch" step.

      -
    • -
    -
    -
  • -
  • -

    Push to a new branch in your GitHub repo: -git push origin WFLY-1234-new-XY-tests

    -
  • -
  • -

    Create a pull-request on GitHub. Go to your branch and click on -"Pull Request".

    -
    -
      -
    • -

      If you have a jira, start the title with it, like - WFLY-1234 New -tests for XYZ.

      -
    • -
    • -

      If you don’t, write some apposite title. In the description, describe -in detail what was done and why should it be merged. Keep in mind that -the diff will be visible under your description.

      -
    • -
    -
    -
  • -
  • -

    Keep the branch rebased daily until it’s merged (see the Fetch -step). If you don’t, you’re dramatically decreasing chance to get it -merged.

    -
  • -
  • -

    There’s a mailing list, jbossas-pull-requests, which is notified of -every pull-request.

    -
  • -
  • -

    You might have someone with merge privileges to cooperate with you, so -they know what you’re doing, and expect your pull request.

    -
  • -
  • -

    When your pull request is reviewed and merged, you’ll be notified by -mail from GitHub.

    -
  • -
  • -

    You may also check if it was merged by the following: -git fetch upstream; git cherry <branch> ## Or git branch ---contains\{\{<branch> - see}} here

    -
  • -
  • -

    Your commits will appear in main. They will have the same hash as in -your branch.

    -
    -
      -
    • -

      You are now safe to delete both your local and remote branches: -git branch -D WFLY-1234-your-branch; git push origin :WFLY-1234-your-branch

      -
    • -
    -
    -
  • -
-
-
-
-
-
-

8. How to Add a Test Case

-
-
-

(Please don’t (re)move - this is a landing page from a Jira link.)

-
-
-

Thank you for finding time to contribute to WildFly 29 quality.
-Covering corner cases found by community users with tests is very -important to increase stability.
-If you’re providing a test case to support your bug report, it’s very -likely that your bug will be fixed much sooner.

-
-
-

8.1. 1) Create a test case.

-
-

It’s quite easy - a simple use case may even consist of one short .java -file.

-
-
-

Check WildFly 29 -test -suite test cases for examples.

-
-
-

For more information, see WildFly Testsuite Test -Developer Guide. Check the requirements for a test to be included in -the testsuite.

-
-
-

Ask for help at WildFly 29 forum or at IRC - #wildfly @ FreeNode.

-
-
-
-

8.2. 2) Push your test case to GitHub and create a pull request.

-
-

For information on how to create a GitHub account and push your code -therein, see Hacking -on WildFly.

-
-
-

If you’re not into Git, send a diff file to JBoss forums, someone might -pick it up.

-
-
-
-

8.3. 3) Wait for the outcome.

-
-

Your test case will be reviewed and eventually added. It may take few -days.

-
-
-

When something happens, you’ll receive a notification e-mail.

-
-
-
-
-
-

9. Before you add a test

-
-
-

Every added test, whether ported or new should follow the same -guidelines:

-
-
-

9.1. Verify the test belongs in WildFly

-
-

AS6 has a lot of tests for things that are discontinued. For example -the
-legacy JBoss Transaction Manager which was replaced by Arjuna. Also we
-had tests for SPIs that no longer exist. None of these things should -be
-migrated.

-
-
-
-

9.2. Only add CORRECT and UNDERSTANDABLE tests

-
-

If you don’t understand what a test is doing (perhaps too complex), or
-it’s going about things in a strange way that might not be correct, -THEN
-DO NOT PORT IT. Instead we should have a simpler, understandable, and
-correct test. Write a new one, ping the author, or skip it altogether.

-
-
-
-

9.3. Do not add duplicate tests

-
-

Always check that the test you are adding doesn’t have coverage
-elsewhere (try using "git grep"). As mentioned above we have some
-overlap between 6 and 7. The 7 test version will likely be better.

-
-
-
-

9.4. Don’t name tests after JIRAs

-
-

A JIRA number is useless without an internet connection, and they are
-hard to read. If I get a test failure thats XDGR-843534578 I have to -dig
-to figure out the context. It’s perfectly fine though to link to a -JIRA
-number in the comments of the test. Also the commit log is always -available.

-
-
-
-

9.5. Tests should contain javadoc that explains what is being tested

-
-

This is especially critical if the test is non-trivial

-
-
-
-

9.6. Prefer expanding an EXISTING test over a new test class

-
-

If you are looking at migrating or creating a test with similar
-functionality to an exiting test, it is better to
-expand upon the existing one by adding more test methods, rather than
-creating a whole new test. In general each
-new test class adds at least 300ms to execution time, so as long as it
-makes sense it is better to add it to an
-existing test case.

-
-
-
-

9.7. Organize tests by subsystem

-
-

Integration tests should be packaged in subpackages under the relevant
-subsystem (e.g org.jboss.as.test.integration.ejb.async). When a test
-impacts multiple subsystems this is a bit of a judgement call, but in
-general the tests should go into the package of
-the spec that defines the functionality (e.g. Jakarta Contexts and Dependency Injection based constructor
-injection into an Jakarta Enterprise Beans, even though this involves Jakarta Contexts and Dependency Injection and Jakarta Enterprise Beans,
-the Jakarta Contexts and Dependency Injection spec defines this behaviour)

-
-
-
-

9.8. Explain non-obvious spec behavior in comments

-
-

The EE spec is full of odd requirements. If the test is covering
-behavior that is not obvious then please add something like "Verifies -EE
-X.T.Z - The widget can’t have a foobar if it is declared like blah"

-
-
-
-

9.9. Put integration test resources in the source directory of the test

-
-

At the moment there is not real organization of these files. It makes
-sense for most apps to have this separation, however the testsuite is
-different. e.g. most apps will have a single deployment descriptor of -a
-given type, for the testsuite will have hundreds, and maintaining -mirroring
-package structures is error prone.
-This also makes the tests easier to understand, as all the artifacts -in
-the deployment are in one place, and that place tends to be small -(only
-a handful of files).

-
-
-
-

9.10. Do not hard-code values likely to need configuration (URLs, ports, …​)

-
-

URLs hardcoded to certain address (localhost) or port (like the default -8080 for web) prevent running the test against different address or with -IPv6 adress.
-Always use the configurable values provided by Arquillian or as a system -property.
-If you come across a value which is not configurable but you think it -should be, file an WildFly 29 jira issue with component "Test suite".
-See -@ArquillianResourrce -usage example.

-
-
-
-

9.11. Follow best committing practices

-
-
    -
  • -

    Only do changes related to the topic of the jira/pull request.

    -
  • -
  • -

    Do not clutter your pull request with e.g. reformatting, fixing typos -spotted along the way - do another pull request for such.

    -
  • -
  • -

    Prefer smaller changes in more pull request over one big pull request -which are difficult to merge.

    -
  • -
  • -

    Keep the code consistent across commits - e.g. when renaming -something, be sure to update all references to it.

    -
  • -
  • -

    Describe your commits properly as they will appear in main’s linear -history.

    -
  • -
  • -

    If you’re working on a jira issue, include it’s ID in the commit -message(s).

    -
  • -
-
-
-
-

9.12. Do not use blind timeouts

-
-

Do not use Thread.sleep() without checking for the actual condition you -need to be fulfilled.
-You may use active waiting with a timeout, but prefer using timeouts of -the API/SPI you test where available.

-
-
-

Make the timeouts configurable: For a group of similar test, use a -configurable timeout value with a default if not set.

-
-
-
-

9.13. Provide messages in assert*() and fail() calls

-
-

Definitely, it’s better to see "File x/y/z.xml not found" instead of:

-
-
-
-
junit.framework.AssertionFailedError
-     at junit.framework.Assert.fail(Assert.java:48) [arquillian-service:]
-     at junit.framework.Assert.assertTrue(Assert.java:20) [arquillian-service:]
-     at junit.framework.Assert.assertTrue(Assert.java:27) [arquillian-service:]
-     at org.jboss.as.test.smoke.embedded.parse.ParseAndMarshalModelsTestCase.getOriginalStandaloneXml(ParseAndMarshalModelsTestCase.java:554) [bogus.jar:]
-
-
-
-
-

9.14. Provide configuration properties hints in exceptions

-
-

If your test uses some configuration property and it fails possibly due -to misconfiguration, note the property and it’s value in the exception:

-
-
-
-
File jdbcJar = new File( System.getProperty("jbossas.ts.dir", "."),
-       "integration/src/test/resources/mysql-connector-java-5.1.15.jar");
-    if( !jdbcJar.exists() )
-        throw new IllegalStateException("Can't find " + jdbcJar + " using $\{jbossas.ts.dir} == " + System.getProperty("jbossas.ts.dir") );
-
-
-
-
-

9.15. Clean up

-
-
    -
  • -

    Close sockets, connections, file descriptors;

    -
  • -
  • -

    Don’t put much data to static fields, or clean them in a finaly {…​} block.

    -
  • -
  • -

    Don’t alter AS config (unless you are absolutely sure that it will -reload in a final \{…​} block or an @After* method)

    -
  • -
-
-
-
-

9.16. Keep the tests configurable

-
-

Keep these things in properties, set them at the beginning of the test: -* Timeouts -* Paths -* URLs -* Numbers (of whatever)

-
-
-

They either will be or already are provided in form of system -properties, or a simple testsuite until API (soon to come).

-
-
-
-
-
-

10. Shared Test Classes and Resources

-
-
-

10.1. Among Testsuite Modules

-
-

Use the testsuite/shared module.

-
-
-

Classes and resources in this module are available in all testsuite -modules - i.e. in testsuite/* .

-
-
-

Only use it if necessary - don’t put things "for future use" in there.

-
-
-

Don’t split packages across modules. Make sure the java package is -unique in the WildFly project.

-
-
-

Document your util classes (javadoc) so they can be easily found and -reused! A generated list will be put here.

-
-
-
-

10.2. Between Components and Testsuite Modules

-
-

To share component’s test classes with some module in testsuite, you -don’t need to split to submodules. -You can create a jar with classifier using this:

-
-
-
-
<plugin>
-    <groupId>org.apache.maven.plugins</groupId>
-    <artifactId>maven-jar-plugin</artifactId>
-    <executions>
-        <execution>
-            <goals>
-                <goal>test-jar</goal>
-            </goals>
-        </execution>
-    </executions>
-</plugin>
-
-
-
-

This creates a jar with classifier "tests", so you can add it as -dependency to a testsuite module:

-
-
-
-
    <dependency>
-        <groupId>org.wildfly</groupId>
-        <artifactId>wildfly-clustering-common</artifactId>
-        <classifier>tests</classifier>
-        <version>${project.version}</version>
-        <scope>test</scope>
-    </dependency>
-
-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/Testsuite.html

+ \ No newline at end of file diff --git a/29/WildFly_Elytron_Security.html b/29/WildFly_Elytron_Security.html index 72abcf756..ab02efaec 100644 --- a/29/WildFly_Elytron_Security.html +++ b/29/WildFly_Elytron_Security.html @@ -1,15869 +1,11 @@ - - - - - -WildFly Elytron Security - - - - - - - -
-
-
- -
-
-
-

1. About

-
-
-

WildFly Elytron brings to WildFly a single unified security framework across -the whole of the application server. As a single framework it will be usable -both for configuring management access to the server and for applications -deployed to the server. It will also be usable across all process types so -there will be no need to learn a different security framework for host -controllers in a domain compared to configuring a standalone server.

-
-
-

The project covers these main areas:

-
-
-
    -
  • -

    Authentication

    -
  • -
  • -

    Authorization

    -
  • -
  • -

    SSL / TLS

    -
  • -
  • -

    Secure Credential Storage

    -
  • -
-
-
-

1.1. Authentication

-
-

One of the fundamental objectives of the project was to ensure that we -can use stronger authentication mechanisms for both HTTP and SASL based -authentication, in both cases the new framework also makes it possible -to bring in new implementations opening up various integration -opportunities with external solutions.

-
-
-
-

1.2. Authorization

-
-

The architecture of the project makes a very clear distinction between -the raw representation of the identity as returned by a SecurityRealm -from the repository of identities and the final representation as a -SecurityIdentity after roles have been decoded and mapped and -permissions have been mapped.

-
-
-

Custom implementations of the components to perform role decoding and -mapping, and permission mapping can be provided allowing for further -flexibility beyond the default set of components provided by the -project.

-
-
-
-

1.3. SSL / TLS

-
-

The project becomes the centralised point within the application server -for configuring SSL related resources meaning they can be configured in -a central location and referenced by resources across the application -server. The centralised configuration also covers advanced options such -as configuration of enabled cipher suites and protocols without this -information needing to be distributed across the management model.

-
-
-

The SSL / TLS implementation also includes an optimisation where it can -be closely tied to authentication allowing for permissions checks to be -performed on establishment of a connection before the first request is -received and the eager construction of a SecurityIdentity eliminating -the need for it to be constructed on a per-request basis.

-
-
-
-

1.4. Secure Credential Storage

-
-

The previous vault used for plain text String encryption is replaced -with a newly designed credential store. in addition to the protection it -offers for the credentials stored within it, the store currently -supports storage of clear text credentials.

-
-
-
-
-
-

2. General Elytron Architecture

-
-
-

The overall architecture for WildFly Elytron is building up a full -security policy from assembling smaller components together, by default -we include various implementations of the components - in addition to -this, custom implementations of many components can be provided in order -to provide more specialised implementations.

-
-
-

Within WildFly the different Elytron components are handled as -capabilities meaning that different implementations can be mixed and -matched, however the different implementations are modelled using -distinct resources. This section contains a number of diagrams to show -the general relationships between different components to provide a high -level view, however the different resource definitions may use different -dependencies depending on their purpose.

-
-
-

2.1. Security Domains

-
-

Within WildFly Elytron a SecurityDomain can be considered as a security -policy backed by one or more SecurityRealm instances. Resources that -make authorization decisions will be associated with a SecurityDomain, -from the SecurityDomain a SecurityIdentity can be obtained which is a -representation of the current identity, from this the identity’s roles -and permissions can be checked to make the authorization decision for -the resource.

-
-
-

The SecurityDomain is the general wrapper around the policy describing a -resulting SecurityIdentity and makes use of the following components to -define this policy.

-
-
-
    -
  • -

    NameRewriter

    -
  • -
-
-
-

NameRewriters are used in multiple places within the Elytron -configuration, as their name implies, their purpose is to take a name -and map it to another representation of the name or perform some -normalisation or clean up of the name.

-
-
-
    -
  • -

    RealmMapper

    -
  • -
-
-
-

As a SecurityDomain is able to reference multiple SecurityRealms the -RealmMapper is responsible for identifying which SecurityRealm to use -based on the supplied name for authentication.

-
-
-
    -
  • -

    SecurityRealm

    -
  • -
-
-
-

One or more named SecurityRealms are associated with a SecurityDomain. -A SecurityRealm provides access to the underlying repository of -identities. It is used for obtaining credentials to allow -authentication mechanisms to perform verification, for validation of -Evidence, and for obtaining the raw AuthorizationIdentity performing the -authentication.

-
-
-

Some SecurityRealm implementations are also modifiable and therefore -expose an API that allows for updates to be made to the repository -containing the identities.

-
-
-
    -
  • -

    RoleDecoder

    -
  • -
-
-
-

Along with the SecurityRealm association is also a reference to a -RoleDecoder, the RoleDecoder takes the raw AuthorizationIdentity -returned from the SecurityRealm and converts its attributes into roles.

-
-
-
    -
  • -

    RoleMapper

    -
  • -
-
-
-

After the roles have been decoded for an identity, further mapping can be -applied. This could be as simple as normalising the format of role names, -or perhaps adding or removing specific role names. If a RoleMapper is -referenced by a SecurityRealm association, that RoleMapper is applied -first before applying the RoleMapper associated with the SecurityDomain.

-
-
-
    -
  • -

    PrincipalDecoder

    -
  • -
-
-
-

A PrincipalDecoder converts from a Principal to a String representation -of a name. One example for this is the X500PrincipalDecoder, which -is able to extract an attribute from a distinguished name.

-
-
-
    -
  • -

    PermissionMapper

    -
  • -
-
-
-

In addition to having roles, a SecurityIdentity can also have a set of -permissions. The PermissionMapper assigns those permissions to the -identity.

-
-
-

Different secured resources can be associated with different -SecurityDomains for their authorization decisions. Within WildFly -Elytron we have the ability to configure inflow between different -SecurityDomains. The inflow process means that a SecurityIdentity -inflowed into a second SecurityDomain has the mappings of the new -SecurityDomain applied to it. So although a common identity may be -calling different resources, each of those resources could have a very -different view of the roles and permissions associated with the -identity.

-
-
-
-

2.2. SASL Authentication

-
-

The SaslAuthenticationFactory is an authentication policy for -authentication using SASL authentication mechanisms. In addition to -being a policy it is also a factory for configured authentication -mechanisms backed by a SecurityDomain.

-
-
-

The SaslAuthenticationFactory references the following: -

-
-
-
    -
  • -

    SecurityDomain

    -
  • -
-
-
-

This is the security domain that any mechanism authentication will be -performed against.

-
-
-
    -
  • -

    SaslServerFactory

    -
  • -
-
-
-

This is the general factory for server side SASL authentication -mechanisms.

-
-
-
    -
  • -

    MechanismConfigurationSelector

    -
  • -
-
-
-

Additional configuration can be supplied for the authentication -mechanisms. The configuration will be described in more detail later but -the purpose of the MechanismConfigurationSelector is to obtain -configuration specific to the mechanism selected. This can include -information about realm names a mechanism should present to a remote -client plus additional NameRewriters and RealmMappers to use during the -authentication process.

-
-
-

The reason some components referenced by the SecurityDomain are -duplicated is so that mechanism-specific mappings can be applied.

-
-
-
-

2.3. HTTP Authentication

-
-

The HttpAuthenticationFactory is an authentication policy for -authentication using HTTP authentication mechanisms, including the BASIC, -DIGEST, EXTERNAL, FORM, SPNEGO, and CLIENT_CERT mechanisms. In addition to -being a policy, it is also a factory for configured authentication -mechanisms backed by a SecurityDomain.

-
-
-

The HttpAuthenticationFactory references the following:

-
-
-
    -
  • -

    SecurityDomain

    -
  • -
-
-
-

This is the security domain that any mechanism authentication will be -performed against.

-
-
-
    -
  • -

    HttpServerAuthenticationMechanismFactory

    -
  • -
-
-
-

This is the general factory for server side HTTP authentication -mechanisms.

-
-
-
    -
  • -

    MechanismConfigurationSelector

    -
  • -
-
-
-

Additional configuration can be supplied for the authentication -mechanisms. The configuration will be described in more detail later but -the purpose of the MechanismConfigurationSelector is to obtain -configuration specific to the mechanism selected. This can include -information about realm names a mechanism should present to a remote -client plus additional NameRewriters and RealmMappers to use during the -authentication process.

-
-
-

The reason some components referenced by the SecurityDomain are -duplicated is so that mechanism-specific mappings can be applied.

-
-
-
-

2.4. SSL / TLS

-
-

The SSLContext defined within Elytron is a javax.net.ssl.SSLContext -meaning it can be used by anything that uses an SSLContext directly.

-
-
-

In addition to the usual configuration for an SSLContext it is possible -to configure additional items such as cipher suites and protocols and -the SSLContext returned will wrap any engines created to set these -values.

-
-
-

The SSLContext within Elytron can also reference the following:

-
-
-
    -
  • -

    KeyManagers

    -
  • -
-
-
-

An array of KeyManager instances to be used by the SSLContext, this in -turn can reference a KeyStore to load the keys.

-
-
-
    -
  • -

    TrustManagers

    -
  • -
-
-
-

An array of TrustManager instances to be used by the SSLContext, this in -turn can also reference a KeyStore to load the certificates.

-
-
-
    -
  • -

    SecurityDomain

    -
  • -
-
-
-

If an SSLContext is (optionally) configured to reference a -SecurityDomain then verification of a client’s certificate can be -performed as an authentication ensuring the appropriate permissions to -Logon are assigned before even allowing the connection to be fully -opened. Additionally, the SecurityIdentity can be established at the time -the connection is opened and used for any invocations over the -connection.

-
-
-
-

2.5. Passwords

-
-

One of the core features of WildFly Elytron is the ability to work with many different formats for representing passwords, WildFly Elytron also contains APIs that can be used to convert from clear text passwords to these representations that can be stored in the underlying identity stores.

-
-
-

This section will document how these APIs can be used to work with the different password types.

-
-
-

2.5.1. PasswordFactory

-
-

Working with passwords will require interaction with the org.wildfly.security.password.PasswordFactory API, this obtains access to implementations from java.security.Provider instances, there are two different ways these can be identified: -

-
-
-
    -
  1. -

    By querying the globally installed Providers

    -
  2. -
  3. -

    By passing in the Provider to the getInstance method of the PasswordFactory API.

    -
  4. -
-
-
-

In both cases the WildFly Elytron implementations are provided by the org.wildfly.security.WildFlyElytronProvider provider.

-
-
-

When relying on the Provider being globally registered the PasswordFactory for a specific algorithm can be obtained as: -

-
-
-
-
PasswordFactory passwordFactory = PasswordFactory.getInstance(algorithm);
-
-
-
-

However an alternative approach could be to manually instantiate the Provider and pass it in when obtaining an instance of the PasswordFactory: -

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-...
-PasswordFactory passwordFactory = PasswordFactory.getInstance(algorithm, ELYTRON_PROVIDER);
-
-
-
-
-

2.5.2. Clear Password

-
-

The simplest type of Password to obtain from the PasswordFactory is a clear text password, the following code illustrates how this can be obtained.

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-static final String TEST_PASSWORD = "test_password";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(ClearPassword.ALGORITHM_CLEAR, ELYTRON_PROVIDER);
-
-    ClearPasswordSpec passwordSpec = new ClearPasswordSpec(TEST_PASSWORD.toCharArray());
-    Password password = passwordFactory.generatePassword(passwordSpec);
-
-    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(password, TEST_PASSWORD.toCharArray())));
-}
-
-
-
-

A second approach is to obtain a raw representation of the ClearPassword, however this will need to be translated into the PasswordFactory if it will be used for evidence validation but if the Password is not being used for verification this can be a suitable alternative provided the parameters have been pre-verified.

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-static final String TEST_PASSWORD = "test_password";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(ClearPassword.ALGORITHM_CLEAR, ELYTRON_PROVIDER);
-
-    Password rawPassword = ClearPassword.createRaw(ClearPassword.ALGORITHM_CLEAR, TEST_PASSWORD.toCharArray());
-
-    Password password = passwordFactory.translate(rawPassword);
-
-    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(password, TEST_PASSWORD.toCharArray())));
-}
-
-
-
-

The raw password can be used for other areas of the Elytron APIs however if it is used for validation an error similar to the following will be thrown.

-
-
-
-
Exception in thread "main" java.security.InvalidKeyException
-    at org.wildfly.security.password.impl.PasswordFactorySpiImpl.engineVerify(PasswordFactorySpiImpl.java:762)
-    at org.wildfly.security.password.PasswordFactory.verify(PasswordFactory.java:210)
-[source,java]
-
-
-
-
-

2.5.3. Simple Digest

-
-

The next type of password is the simple digest, for this password type the clear text password id digested using the specified algorithm however no salt is used.

-
-
-

The following algorithms are applicable to this type of encoding.

-
-
-
    -
  • -

    simple-digest-md2

    -
  • -
  • -

    simple-digest-md5

    -
  • -
  • -

    simple-digest-sha-1

    -
  • -
  • -

    simple-digest-sha-256

    -
  • -
  • -

    simple-digest-sha-384

    -
  • -
  • -

    simple-digest-sha-512

    -
  • -
-
-
-

The following example illustrates how the Password instance can be created starting from the clear text password,from this the digested representation of the password can be obtained which could be used to store the password. The digested representation is then used to create a further Password instance.

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-static final String TEST_PASSWORD = "test_password";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(SimpleDigestPassword.ALGORITHM_SIMPLE_DIGEST_SHA_512, ELYTRON_PROVIDER);
-
-    ClearPasswordSpec clearSpec = new ClearPasswordSpec(TEST_PASSWORD.toCharArray());
-    SimpleDigestPassword original = (SimpleDigestPassword) passwordFactory.generatePassword(clearSpec);
-
-    byte[] digest = original.getDigest();
-    HashPasswordSpec hashSpec = new HashPasswordSpec(digest);
-
-    SimpleDigestPassword restored = (SimpleDigestPassword) passwordFactory.generatePassword(hashSpec);
-
-    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-}
-
-
-
-

Starting from the digest the raw APIs can be used as.

-
-
-
-
SimpleDigestPassword rawPassword = SimpleDigestPassword.createRaw(SimpleDigestPassword.ALGORITHM_SIMPLE_DIGEST_SHA_512, digest);
-
-SimpleDigestPassword restored = (SimpleDigestPassword) passwordFactory.translate(rawPassword);
-
-System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-
-
-
-
-

2.5.4. Salted Digest

-
-

Two variations of salted digests are supported, these can either be digested with the salt first or the password first. The following algorithms are supported: -

-
-
-
    -
  • -

    password-salt-digest-md5

    -
  • -
  • -

    password-salt-digest-sha-1

    -
  • -
  • -

    password-salt-digest-sha-256

    -
  • -
  • -

    password-salt-digest-sha-384

    -
  • -
  • -

    password-salt-digest-sha-512

    -
  • -
  • -

    salt-password-digest-md5

    -
  • -
  • -

    salt-password-digest-sha-1

    -
  • -
  • -

    salt-password-digest-sha-256

    -
  • -
  • -

    salt-password-digest-sha-384

    -
  • -
  • -

    salt-password-digest-sha-512

    -
  • -
-
-
-

The following example shows how using a generated salt the password can be created from a clear text password and then subsequently how the password can be recreated from the salt and digest.

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-static final String TEST_PASSWORD = "test_password";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(SaltedSimpleDigestPassword.ALGORITHM_PASSWORD_SALT_DIGEST_SHA_512, ELYTRON_PROVIDER);
-
-    byte[] salt = new byte[32];
-    SecureRandom random = new SecureRandom();
-    random.nextBytes(salt);
-
-    SaltedPasswordAlgorithmSpec saltedSpec = new SaltedPasswordAlgorithmSpec(salt);
-    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), saltedSpec);
-
-    SaltedSimpleDigestPassword original = (SaltedSimpleDigestPassword) passwordFactory.generatePassword(encryptableSpec);
-
-    byte[] digest = original.getDigest();
-
-    SaltedHashPasswordSpec saltedHashSpec = new SaltedHashPasswordSpec(digest, salt);
-
-    SaltedSimpleDigestPassword restored = (SaltedSimpleDigestPassword) passwordFactory.generatePassword(saltedHashSpec);
-
-    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-}
-
-
-
-

Alternatively the salt could be generated automatically by using a ClearPasswordSpec.

-
-
-
-
ClearPasswordSpec clearSpec = new ClearPasswordSpec(TEST_PASSWORD.toCharArray());
-SaltedSimpleDigestPassword original = (SaltedSimpleDigestPassword) passwordFactory.generatePassword(clearSpec);
-
-byte[] salt = original.getSalt();
-byte[] digest = original.getDigest();
-
-
-
-

Starting with the digest and salt the raw APIs can also be used.

-
-
-
-
SaltedSimpleDigestPassword rawPassword = SaltedSimpleDigestPassword.createRaw(SaltedSimpleDigestPassword.ALGORITHM_PASSWORD_SALT_DIGEST_SHA_512, digest, salt);
-
-SaltedSimpleDigestPassword restored = (SaltedSimpleDigestPassword) passwordFactory.translate(rawPassword);
-
-System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-
-
-
-
-

2.5.5. Digest

-
-

The Digest passwords are an alternative form of digest where the username, realm and password are digested together delimited with a ':', these are usable with clear text authentication mechanisms but also usable with the digest authentication mechanisms also eliminating the transmission of clear text passwords during authentication. The following algorithms are supported: -

-
-
-
    -
  • -

    digest-md5

    -
  • -
  • -

    digest-sha

    -
  • -
  • -

    digest-sha-256

    -
  • -
  • -

    digest-sha-384

    -
  • -
  • -

    digest-sha-512

    -
  • -
  • -

    digest-sha-512-256

    -
  • -
-
-
-

The following example illustrates how a password can be created from the username, realm, and password and then how it can be recreated from the digest, realm, and password.

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-static final String TEST_USERNAME = "test_username";
-static final String TEST_REALM = "Test Realm";
-static final String TEST_PASSWORD = "test_password";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(DigestPassword.ALGORITHM_DIGEST_MD5, ELYTRON_PROVIDER);
-
-    DigestPasswordAlgorithmSpec digestAlgorithmSpec = new DigestPasswordAlgorithmSpec(TEST_USERNAME, TEST_REALM);
-    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), digestAlgorithmSpec);
-
-    DigestPassword original = (DigestPassword) passwordFactory.generatePassword(encryptableSpec);
-
-    byte[] digest = original.getDigest();
-
-    DigestPasswordSpec digestPasswordSpec = new DigestPasswordSpec(TEST_USERNAME, TEST_REALM, digest);
-
-    DigestPassword restored = (DigestPassword) passwordFactory.generatePassword(digestPasswordSpec);
-
-    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-}
-
-
-
-

For this password type is not possible to create the password from the ClearPasswordSpec as additional information always needs to be specified and can not be dynamically or randomly generated, however the raw APIs can still be used.

-
-
-
-
DigestPassword rawPassword = DigestPassword.createRaw(DigestPassword.ALGORITHM_DIGEST_MD5, TEST_USERNAME, TEST_REALM, digest);
-
-DigestPassword restored = (DigestPassword) passwordFactory.translate(rawPassword);
-
-System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-
-
-
-
-

2.5.6. SCRAM

-
-

Another set of passwords more tightly tied to a specific authentication mechanism are the SCRAM password types, the following algorithms are supported: -

-
-
-
    -
  • -

    scram-sha-1

    -
  • -
  • -

    scram-sha-256

    -
  • -
  • -

    scram-sha-384

    -
  • -
  • -

    scram-sha-512

    -
  • -
-
-
-

The following demonstrates how a clear password can be converted to a scram password using a specified salt and iteration count and how this can be recreated from the digested value.

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-
-static final String TEST_PASSWORD = "test_password";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(ScramDigestPassword.ALGORITHM_SCRAM_SHA_512, ELYTRON_PROVIDER);
-
-    byte[] salt = new byte[12];
-    SecureRandom random = new SecureRandom();
-    random.nextBytes(salt);
-
-    IteratedSaltedPasswordAlgorithmSpec iteratedAlgorithmSpec = new IteratedSaltedPasswordAlgorithmSpec(2000, salt);
-    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), iteratedAlgorithmSpec);
-
-    ScramDigestPassword original = (ScramDigestPassword) passwordFactory.generatePassword(encryptableSpec);
-
-    byte[] digest = original.getDigest();
-
-    IteratedSaltedHashPasswordSpec scramPasswordSpec = new IteratedSaltedHashPasswordSpec(digest, salt, 2000);
-
-    ScramDigestPassword restored = (ScramDigestPassword) passwordFactory.generatePassword(scramPasswordSpec);
-
-    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-}
-
-
-
-

Alternatively instead of using the IteratedSaltedPasswordAlgorithmSpec is it also possible to use a SaltedPasswordAlgorithmSpec when converting from the clear text password and a default iteration count will be used instead, this is similar to how the conversion happens for salted digest passwords.

-
-
-

It is also possible to omit the salt and iteration count and these will be generated.

-
-
-
-
ClearPasswordSpec clearSpec = new ClearPasswordSpec(TEST_PASSWORD.toCharArray());
-
-ScramDigestPassword original = (ScramDigestPassword) passwordFactory.generatePassword(clearSpec);
-
-byte[] salt = original.getSalt();
-byte[] digest = original.getDigest();
-int iterationCount = original.getIterationCount();
-
-
-
-

Starting with a digest, salt, and iteration count the raw APIs can also be used.

-
-
-
-
ScramDigestPassword rawPassword = ScramDigestPassword.createRaw(ScramDigestPassword.ALGORITHM_SCRAM_SHA_256, digest, salt, 2000);
-
-ScramDigestPassword restored = (ScramDigestPassword) passwordFactory.translate(rawPassword);
-
-System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-
-
-
-
-

2.5.7. OTP

-
-

One more type of mechanism specific password is the one time password type. The following algorithms are supported: -

-
-
-
    -
  • -

    otp-md5

    -
  • -
  • -

    otp-sha1

    -
  • -
  • -

    otp-sha256

    -
  • -
  • -

    otp-sha384

    -
  • -
  • -

    otp-sha512

    -
  • -
-
-
-

The following demonstrates how a clear password can be converted to a one time password using a specified seed and iteration count and how this can be recreated from the hashed value.

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-static final String TEST_PASSWORD = "test_password";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(OneTimePassword.ALGORITHM_OTP_SHA_512, ELYTRON_PROVIDER);
-
-    String seed = "ke1234";
-    int sequenceNumber = 500;
-
-    OneTimePasswordAlgorithmSpec oneTimeAlgorithmSpec = new OneTimePasswordAlgorithmSpec(OneTimePassword.ALGORITHM_OTP_SHA_512, seed, sequenceNumber);
-    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), oneTimeAlgorithmSpec);
-
-    OneTimePassword original = (OneTimePassword) passwordFactory.generatePassword(encryptableSpec);
-
-    byte[] hash = original.getHash();
-
-    OneTimePasswordSpec oneTimeSpec = new OneTimePasswordSpec(hash, seed, sequenceNumber);
-
-    OneTimePassword restored = (OneTimePassword) passwordFactory.generatePassword(oneTimeSpec);
-}
-
-
-
-

This example does not include verification as that is handled by the SASL mechanism which also increments the sequence and replaces the hash, this does mean this password type needs to be used with a security realm which also supports updates.

-
-
-

Starting with the hash and sequence number the raw APIs can also be used.

-
-
-
-
OneTimePassword rawPassword = OneTimePassword.createRaw(OneTimePassword.ALGORITHM_OTP_SHA_512, original.getHash(), original.getSeed(), original.getSequenceNumber());
-
-OneTimePassword restored = (OneTimePassword) passwordFactory.translate(rawPassword);
-
-
-
-
-

2.5.8. Other Iterated Salted Types

-
-

The following algorithms are also supported for alternative iterated salted password types: -

-
-
-
    -
  • -

    bcrypt

    -
  • -
  • -

    sun-crypt-md5

    -
  • -
  • -

    sun-crypt-md5-bare-salt

    -
  • -
  • -

    crypt-sha-256

    -
  • -
  • -

    crypt-sha-512

    -
  • -
  • -

    bsd-crypt-des

    -
  • -
-
-
-

The general pattern for working with these password types is the same as was used for Scram password types if an interaction count is specified or the same as salted digest password types if a default iteration count is to be used instead.

-
-
-
-

2.5.9. Other Salted Types

-
-

The following algorithms are also supported for salted password types: -

-
-
-
    -
  • -

    crypt-md5

    -
  • -
  • -

    crypt-des

    -
  • -
-
-
-

The general pattern for working with these password types is the same as was used for salted digest password types as no iteration count is required.

-
-
-
-

2.5.10. Masked Password Types

-
-

Finally a set of masked password types are also supported to add support for legacy password types which were previously supported within PicketBox, the following algorithms are supported.

-
-
-
    -
  • -

    masked-MD5-DES

    -
  • -
  • -

    masked-MD5-DES-CBC-PKCS5

    -
  • -
  • -

    masked-MD5-3DES

    -
  • -
  • -

    masked-MD5-3DES-CBC-PKCS5

    -
  • -
  • -

    masked-SHA1-DES-EDE

    -
  • -
  • -

    masked-SHA1-DES-EDE-CBC-PKCS5

    -
  • -
  • -

    masked-SHA1-RC2-40

    -
  • -
  • -

    masked-SHA1-RC2-40-CBC-PKCS5

    -
  • -
  • -

    masked-SHA1-RC2-128

    -
  • -
  • -

    masked-SHA1-RC2-128-CBC-PKCS5

    -
  • -
  • -

    masked-SHA1-RC4-40

    -
  • -
  • -

    masked-SHA1-RC4-40-ECB

    -
  • -
  • -

    masked-SHA1-RC4-128

    -
  • -
  • -

    masked-SHA1-RC4-128-ECB

    -
  • -
  • -

    masked-HMAC-SHA1-AES-128

    -
  • -
  • -

    masked-HMAC-SHA224-AES-128

    -
  • -
  • -

    masked-HMAC-SHA256-AES-128

    -
  • -
  • -

    masked-HMAC-SHA384-AES-128

    -
  • -
  • -

    masked-HMAC-SHA512-AES-128

    -
  • -
  • -

    masked-HMAC-SHA1-AES-256

    -
  • -
  • -

    masked-HMAC-SHA224-AES-256

    -
  • -
  • -

    masked-HMAC-SHA256-AES-256

    -
  • -
  • -

    masked-HMAC-SHA384-AES-256

    -
  • -
  • -

    masked-HMAC-SHA512-AES-256

    -
  • -
  • -

    masked-PBKDF-HMAC-SHA1

    -
  • -
  • -

    masked-PBKDF-HMAC-SHA224

    -
  • -
  • -

    masked-PBKDF-HMAC-SHA256

    -
  • -
  • -

    masked-PBKDF-HMAC-SHA384

    -
  • -
  • -

    masked-PBKDF-HMAC-SHA512

    -
  • -
-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-
-static final String TEST_PASSWORD = "test_password";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(MaskedPassword.ALGORITHM_MASKED_MD5_DES, ELYTRON_PROVIDER);
-
-    char[] key = "my_secret_key".toCharArray();
-
-    byte[] salt = new byte[8];
-    SecureRandom random = new SecureRandom();
-    random.nextBytes(salt);
-
-    int iterationCount = 100;
-
-    MaskedPasswordAlgorithmSpec maskedAlgorithmSpec = new MaskedPasswordAlgorithmSpec(key, iterationCount, salt);
-    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), maskedAlgorithmSpec);
-
-    MaskedPassword original = (MaskedPassword) passwordFactory.generatePassword(encryptableSpec);
-
-    byte[] masked = original.getMaskedPasswordBytes();
-
-    MaskedPasswordSpec maskedPasswordSpec = new MaskedPasswordSpec(key, iterationCount, salt, masked);
-
-    MaskedPassword restored = (MaskedPassword) passwordFactory.generatePassword(maskedPasswordSpec);
-
-    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-}
-
-
-
-

As with the other password types the raw password APIs can also be used to recreate the password.

-
-
-
-
MaskedPassword rawPassword = MaskedPassword.createRaw(MaskedPassword.ALGORITHM_MASKED_MD5_DES, key, iterationCount, salt, masked);
-
-MaskedPassword restored = (MaskedPassword) passwordFactory.translate(rawPassword);
-
-System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-
-
-
-
-

2.5.11. Modular Crypt Encoding

-
-

A number of password types can be encoded using modular crypt allowing information such as the password type, the hash or digest, the salt, and the iteration count to be encoded in a single String, this can make storage and retrieval of passwords easier as multiple pieces of related data can be handled as one.

-
-
-

Within the WildFly Elytron project the utility org.wildfly.security.password.util.ModularCrypt can be used to handle the encoding and decoding.

-
-
-

The following password types can be encoded and decoded: -

-
-
-
    -
  • -

    BCryptPassword

    -
  • -
  • -

    BSDUnixDESCryptPassword

    -
  • -
  • -

    UnixDESCryptPassword

    -
  • -
  • -

    UnixMD5CryptPassword

    -
  • -
  • -

    SunUnixMD5CryptPassword

    -
  • -
  • -

    UnixSHACryptPassword

    -
  • -
-
-
-

The following code demonstrates this for a BSDUnixDESCryptPassword: -

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-
-static final String TEST_PASSWORD = "myPassword";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(BSDUnixDESCryptPassword.ALGORITHM_BSD_CRYPT_DES, ELYTRON_PROVIDER);
-
-    int iterationCount = BSDUnixDESCryptPassword.DEFAULT_ITERATION_COUNT;
-
-    byte[] salt = new byte[BSDUnixDESCryptPassword.BSD_CRYPT_DES_SALT_SIZE];
-    SecureRandom random = new SecureRandom();
-    random.nextBytes(salt);
-
-    IteratedSaltedPasswordAlgorithmSpec iteratedAlgorithmSpec = new IteratedSaltedPasswordAlgorithmSpec(iterationCount, salt);
-    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), iteratedAlgorithmSpec);
-
-    BSDUnixDESCryptPassword original = (BSDUnixDESCryptPassword) passwordFactory.generatePassword(encryptableSpec);
-
-    String modularCryptString = ModularCrypt.encodeAsString(original);
-
-    Password rawPassword = ModularCrypt.decode(modularCryptString);
-
-    BSDUnixDESCryptPassword restored = (BSDUnixDESCryptPassword) passwordFactory.translate(rawPassword);
-
-    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
-}
-
-
-
- - - - - -
- - -The Password returned from the call to ModularCrypt.decode(…​) is a raw password so needs translating by the PasswordFactory. -
-
-
-
-
-
-
-

3. Elytron Subsystem

-
-
-

WildFly Elytron is a security framework used to unify security across -the entire application server. The elytron subsystem enables a single -point of configuration for securing both applications and the management -interfaces. WildFly Elytron also provides a set of APIs and SPIs for -providing custom implementations of functionality and integrating with -the elytron subsystem.

-
-
-

In addition, there are several other important features of the WildFly -Elytron:

-
-
-
    -
  • -

    Stronger authentication mechanisms for HTTP and SASL authentication.

    -
  • -
  • -

    Improved architecture that allows for SecurityIdentities to be -propagated across security domains and transparently transformed ready -to be used for authorization. This transformation takes place using -configurable role decoders, role mappers, and permission mappers.

    -
  • -
  • -

    Centralized point for SSL/TLS configuration including cipher suites -and protocols.

    -
  • -
  • -

    SSL/TLS optimizations such as eager SecureIdentity construction and -closely tying authorization to establishing an SSL/TLS connection. Eager -SecureIdentity construction eliminates the need for a SecureIdentity -to be constructed on a per-request basis. Closely tying authentication -to establishing an SSL/TLS connection enables permission checks to -happen BEFORE the first request is received.

    -
  • -
  • -

    A secure credential store that replaces the previous vault -implementation to store clear text credentials.

    -
  • -
-
-
-

The new elytron subsystem exists in parallel to the legacy security -subsystem and legacy core management authentication. Both the legacy and -Elytron methods may be used for securing the management interfaces as -well as providing security for applications.

-
-
-

3.1. Get Started using the Elytron Subsystem

-
-

To get started using Elytron, refer to these topics:

-
-
- -
-
-
-

3.2. Provided components

-
-

WildFly Elytron provides a default set of implementations in the -elytron subsystem.

-
-
-

3.2.1. Factories

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

aggregate-http-server-mechanism-factory

An HTTP server factory -definition where the HTTP server factory is an aggregation of other HTTP -server factories.

aggregate-sasl-server-factory

A SASL server factory definition where -the SASL server factory is an aggregation of other SASL server -factories.

configurable-http-server-mechanism-factory

A SASL server factory -definition where the SASL server factory is an aggregation of other SASL -server factories.

configurable-sasl-server-factory

A SASL server factory definition -where the SASL server factory is an aggregation of other SASL server -factories.

custom-credential-security-factory

A custom credential SecurityFactory -definition.

http-authentication-factory

Resource containing the association of a -security domain with a HttpServerAuthenticationMechanismFactory.

kerberos-security-factory

A security factory for obtaining a -GSSCredential for use during authentication.

mechanism-provider-filtering-sasl-server-factory

A SASL server factory -definition that enables filtering by provider where the factory was -loaded using a provider.

provider-http-server-mechanism-factory

An HTTP server factory -definition where the HTTP server factory is an aggregation of factories -from the provider list.

provider-sasl-server-factory

A SASL server factory definition where -the SASL server factory is an aggregation of factories from the provider -list.

sasl-authentication-factory

Resource containing the association of a -security domain with a SaslServerFactory.

service-loader-http-server-mechanism-factory

An HTTP server factory -definition where the HTTP server factory is an aggregation of factories -identified using a ServiceLoader

service-loader-sasl-server-factory

A SASL server factory definition -where the SASL server factory is an aggregation of factories identified -using a ServiceLoader

-
-
-

3.2.2. Principal Transformers

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

aggregate-principal-transformer

A principal transformer definition -where the principal transformer is an aggregation of other principal -transformers.

case-principal-transformer

A principal transformer definition where -the principal is adjusted to upper or lower case.

chained-principal-transformer

A principal transformer definition where -the principal transformer is a chaining of other principal transformers.

constant-principal-transformer

A principal transformer definition -where the principal transformer always returns the same constant.

custom-principal-transformer

A custom principal transformer -definition.

regex-principal-transformer

A regular expression based principal -transformer

regex-validating-principal-transformer

A regular expression based -principal transformer which uses the regular expression to validate the -name.

-
-
-

3.2.3. Principal Decoders

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

aggregate-principal-decoder

A principal decoder definition where the -principal decoder is an aggregation of other principal decoders.

concatenating-principal-decoder

A principal decoder definition where -the principal decoder is a concatenation of other principal decoders.

constant-principal-decoder

Definition of a principal decoder that -always returns the same constant.

custom-principal-decoder

Definition of a custom principal decoder.

x500-attribute-principal-decoder

Definition of a X500 attribute based -principal decoder.

-
-
-

3.2.4. Evidence Decoders

- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

x509-subject-alt-name-evidence-decoder

An evidence decoder that derives the -principal associated with a certificate chain from an X.509 subject alternative -name from the first certificate in the given chain.

x500-subject-evidence-decoder

An evidence decoder that derives the principal -associated with a certificate chain from the subject from the first certificate -in the given chain.

custom-evidence-decoder

Definition of a custom evidence decoder.

aggregate-evidence-decoder

An evidence decoder that is an aggregation of other -evidence decoders. Given evidence, these evidence decoders will be attempted in -order until one returns a non-null principal or until there are no more evidence -decoders left to try.

-
-
-

3.2.5. Realm Mappers

- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

constant-realm-mapper

Definition of a constant realm mapper that -always returns the same value.

custom-realm-mapper

Definition of a custom realm mapper

mapped-regex-realm-mapper

Definition of a realm mapper implementation -that first uses a regular expression to extract the realm name, this is -then converted using the configured mapping of realm names.

simple-regex-realm-mapper

Definition of a simple realm mapper that -attempts to extract the realm name using the capture group from the -regular expression, if that does not provide a match then the delegate -realm mapper is used instead.

-
-
-

3.2.6. Realms

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

aggregate-realm

A realm definition that is an aggregation of two -or more realms, one for the authentication steps and one or more for loading the -identity for the authorization steps and aggregating the resulting attributes.

caching-realm

A realm definition that enables caching to another -security realm. Caching strategy is Least Recently Used where least -accessed entries are discarded when maximum number of entries is -reached.

custom-modifiable-realm

Custom realm configured as being modifiable -will be expected to implement the ModifiableSecurityRealm interface. By -configuring a realm as being modifiable management operations will be -made available to manipulate the realm.

custom-realm

A custom realm definitions can implement either the s -SecurityRealm interface or the ModifiableSecurityRealm interface. -Regardless of which interface is implemented management operations will -not be exposed to manage the realm. However other services that depend -on the realm will still be able to perform a type check and cast to gain -access to the modification API.

filesystem-realm

A simple security realm definition backed by the -filesystem.

identity-realm

A security realm definition where identities are -represented in the management model.

jdbc-realm

A security realm definition backed by database using JDBC.

key-store-realm

A security realm definition backed by a keystore.

ldap-realm

A security realm definition backed by LDAP.

properties-realm

A security realm definition backed by properties -files.

token-realm

A security realm definition capable of validating and -extracting identities from security tokens.

distributed-realm

A security realm definition for authentication and authorization identities distributed between multiple security realms.

failover-realm

A realm definition that is an aggregation of two realms, one for default behaviour and -second for cases when first realm is unavailable.

jaas-realm

A security realm definition that uses JAAS configuration file to initialize LoginContext that is used to obtain identities.

-
-
-

3.2.7. Permission Mappers

- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

custom-permission-mapper

Definition of a custom permission mapper.

logical-permission-mapper

Definition of a logical permission mapper.

simple-permission-mapper

Definition of a simple configured permission -mapper.

constant-permission-mapper

Definition of a permission mapper that -always returns the same constant.

-
-
-

3.2.8. Role Decoders

- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

custom-role-decoder

Definition of a custom RoleDecoder

simple-role-decoder

Definition of a simple RoleDecoder that takes a -single attribute and maps it directly to roles.

source-address-role-decoder

Definition of a RoleDecoder that maps roles -based on the IP address of the remote client.

aggregate-role-decoder

A role decoder that is an aggregation of other -role decoders. An aggregate role decoder combines the roles obtained using -each role decoder.

-
-
-

3.2.9. Role Mappers

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

add-prefix-role-mapper

A role mapper definition for a role mapper that -adds a prefix to each provided.

add-suffix-role-mapper

A role mapper definition for a role mapper that -adds a suffix to each provided.

constant-role-mapper

A role mapper definition where a constant set of -roles is always returned.

aggregate-role-mapper

A role mapper definition where the role mapper -is an aggregation of other role mappers.

logical-role-mapper

A role mapper definition for a role mapper that -performs a logical operation using two referenced role mappers.

custom-role-mapper

Definition of a custom role mapper

mapped-role-mapper

A role mapper definition for a role mapper that uses -configured mapping of role names to map role names.

regex-role-mapper

A role mapper definition for a role mapper that -performs a regex matching and maps matching roles with provided pattern. -Regex can capture groups that replacement pattern can make use of.

-
-
-

3.2.10. SSL Components

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

client-ssl-context

An SSLContext for use on the client side of a -connection.

filtering-key-store

A filtering keystore definition, which provides a -keystore by filtering a key-store.

key-manager

A key manager definition for creating the key manager -list as used to create an SSL context.

key-store

A keystore definition.

ldap-key-store

An LDAP keystore definition, which loads a keystore -from an LDAP server.

server-ssl-context

An SSL context for use on the server side of a -connection.

trust-manager

A trust manager definition for creating the -TrustManager list as used to create an SSL context.

certificate-authority-account

A certificate authority account which can -be used to obtain and revoke signed certificates.

-
-
-

3.2.11. Other

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

aggregate-providers

An aggregation of two or more Provider[] -resources.

authentication-configuration

An individual authentication -configuration definition, which is used by clients deployed to WildFly -and other resources for authenticating when making a remote connection.

authentication-context

An individual authentication context -definition, which is used to supply an ssl-context and -authentication-configuration when clients deployed to WildFly and other -resources make a remoting connection.

credential-store

Credential store to keep alias for sensitive -information such as passwords for external services.

dir-context

The configuration to connect to a directory (LDAP) server.

provider-loader

A definition for a provider loader.

security-domain

A security domain definition.

security-property

A definition of a security property to be set.

-
-
-
-

3.3. Out of the Box Configuration

-
-

WildFly provides a set of components configured by default. While these -components are ready to use, the legacy security subsystem and legacy -core management authentication is still used by default. To configure -WildFly to use the these configured components as well as create new -ones, see the Using the Elytron -Subsystem section.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Default ComponentDescription

ApplicationDomain

The ApplicationDomain security domain uses -ApplicationRealm and groups-to-roles for authentication. It also uses -default-permission-mapper to assign the login permission.

ManagementDomain

The ManagementDomain security domain uses two -security realms for authentication: ManagementRealm with groups-to-roles -and local with super-user-mapper. It also uses default-permission-mapper -to assign the login permission.

local (security realm)

The local security realm does no authentication -and sets the identity of principals to $local

ApplicationRealm

The ApplicationRealm security realm is a properties -realm that authenticates principals using application-users.properties -and assigns roles using application-roles.properties. These files are -located under jboss.server.config.dir, which by default, maps to -EAP_HOME/standalone/configuration. They are also the same files used by -the legacy security default configuration.

ManagementRealm

The ManagementRealm security realm is a properties -realm that authenticates principals using mgmt-users.properties and -assigns roles using mgmt-groups.properties. These files are located -under jboss.server.config.dir, which by default, maps to -EAP_HOME/standalone/configuration. They are also the same files used by -the legacy security default configuration.

default-permission-mapper

The default-permission-mapper mapper is a -simple permission mapper that uses the default-permissions permission set -to assign the full set of permissions that an identity would require to -access any services on the server. For example, the default-permission-mapper -mapper uses org.wildfly.extension.batch.jberet.deployment.BatchPermission -specified by the default-permissions permission set to assign permission for -batch jobs. The batch permissions are start, stop, restart, abandon, and read -which aligns with jakarta.batch.operations.JobOperator. The default-permission-mapper -mapper also uses org.wildfly.security.auth.permission.LoginPermission specified -by the the login-permission permission set to assign the login permission.

local (mapper)

The local mapper is a constant role mapper that maps to -the local security realm. This is used to map authentication to the -local security realm.

groups-to-roles

The groups-to-roles mapper is a simple-role-decoder -that will decode the groups information of a principal and use it for -the role information.

super-user-mapper

The super-user-mapper mapper is a constant role -mapper that maps the SuperUser role to a principal.

management-http-authentication

The management-http-authentication -http-authentication-factory can be used for doing authentication over -http. It uses the global provider-http-server-mechanism-factory to -filter authentication mechanism and uses ManagementDomain for -authenticating principals. It accepts the DIGEST authentication -mechanisms and exposes it as ManagementRealm to applications.

global (provider-http-server-mechanism-factory)

This is the HTTP -server factory mechanism definition used to list the provided -authentication mechanisms when creating an http authentication factory.

management-sasl-authentication

The management-sasl-authentication -sasl-authentication-factory can be used for authentication using SASL. -It uses the configured sasl-server-factory to filter authentication -mechanisms, which also uses the global provider-sasl-server-factory to -filter by provider names. management-sasl-authentication uses the -ManagementDomain security domain for authentication of principals. It -also maps authentication using JBOSS-LOCAL-USER mechanisms using the -local realm mapper and authentication using DIGEST-MD5 to -ManagementRealm.

application-sasl-authentication

The application-sasl-authentication -sasl-authentication-factory can be used for authentication using SASL. -It uses the configured sasl-server-factory to filter authentication -mechanisms, which also uses the global provider-sasl-server-factory to -filter by provider names. application-sasl-authentication uses the -ApplicationDomain security domain for authentication of principals.

global (provider-sasl-server-factory)

This is the SASL server factory -definition used to create SASL authentication factories.

elytron (mechanism-provider-filtering-sasl-server-factor)

This is used -to filter which sasl-authentication-factory is used based on the -provider. In this case, elytron will match on the WildFlyElytron -provider name.

configured (configurable-sasl-server-factory)

This is used to filter -sasl-authentication-factory is used based on the mechanism name. In this -case, configured will match on JBOSS-LOCAL-USER and DIGEST-MD5. It also -sets the wildfly.sasl.local-user.default-user to $local.

applicationSSC

The applicationSSC server SSL context can be used -to automatically generate a self-signed certificate the first time -the HTTPS interface is accessed. This server SSL context should only -be used for testing purposes. It should never be used in a production -environment.

combined-providers

Is an aggregate provider that aggregates the elytron -and openssl provider loaders.

elytron

A provider loader

openssl

A provider loader

-
-

Default WildFly Configuration

-
-
-
-
/subsystem=elytron:read-resource(recursive=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "default-authentication-context" => undefined,
-        "disallowed-providers" => ["OracleUcrypto"],
-        "final-providers" => "combined-providers",
-        "initial-providers" => undefined,
-        "security-properties" => undefined,
-        "add-prefix-role-mapper" => undefined,
-        "add-suffix-role-mapper" => undefined,
-        "aggregate-evidence-decoder" => undefined,
-        "aggregate-http-server-mechanism-factory" => undefined,
-        "aggregate-principal-decoder" => undefined,
-        "aggregate-principal-transformer" => undefined,
-        "aggregate-providers" => {"combined-providers" => {"providers" => [
-            "elytron",
-            "openssl"
-        ]}},
-        "aggregate-realm" => undefined,
-        "aggregate-role-decoder" => undefined,
-        "aggregate-role-mapper" => undefined,
-        "aggregate-sasl-server-factory" => undefined,
-        "aggregate-security-event-listener" => undefined,
-        "authentication-configuration" => undefined,
-        "authentication-context" => undefined,
-        "caching-realm" => undefined,
-        "case-principal-transformer" => undefined,
-        "certificate-authority-account" => undefined,
-        "chained-principal-transformer" => undefined,
-        "client-ssl-context" => undefined,
-        "concatenating-principal-decoder" => undefined,
-        "configurable-http-server-mechanism-factory" => undefined,
-        "configurable-sasl-server-factory" => {"configured" => {
-            "filters" => undefined,
-            "properties" => {"wildfly.sasl.local-user.default-user" => "$local"},
-            "protocol" => undefined,
-            "sasl-server-factory" => "elytron",
-            "server-name" => undefined
-        }},
-        "constant-permission-mapper" => undefined,
-        "constant-principal-decoder" => undefined,
-        "constant-principal-transformer" => undefined,
-        "constant-realm-mapper" => {"local" => {"realm-name" => "local"}},
-        "constant-role-mapper" => {"super-user-mapper" => {"roles" => ["SuperUser"]}},
-        "credential-store" => undefined,
-        "custom-credential-security-factory" => undefined,
-        "custom-evidence-decoder" => undefined,
-        "custom-modifiable-realm" => undefined,
-        "custom-permission-mapper" => undefined,
-        "custom-principal-decoder" => undefined,
-        "custom-principal-transformer" => undefined,
-        "custom-realm" => undefined,
-        "custom-realm-mapper" => undefined,
-        "custom-role-decoder" => undefined,
-        "custom-role-mapper" => undefined,
-        "custom-security-event-listener" => undefined,
-        "dir-context" => undefined,
-        "file-audit-log" => {"local-audit" => {
-            "format" => "JSON",
-            "path" => "audit.log",
-            "relative-to" => "jboss.server.log.dir",
-            "synchronized" => true
-        }},
-        "filesystem-realm" => undefined,
-        "filtering-key-store" => undefined,
-        "http-authentication-factory" => {
-            "management-http-authentication" => {
-                "http-server-mechanism-factory" => "global",
-                "mechanism-configurations" => [{
-                    "mechanism-name" => "DIGEST",
-                    "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
-                }],
-                "security-domain" => "ManagementDomain"
-            }
-        },
-        "identity-realm" => {"local" => {
-            "attribute-name" => undefined,
-            "attribute-values" => undefined,
-            "identity" => "$local"
-        }},
-        "jdbc-realm" => undefined,
-        "kerberos-security-factory" => undefined,
-        "key-manager" => {
-            "applicationKM" => {
-                "algorithm" => undefined,
-                "alias-filter" => undefined,
-                "credential-reference" => {"clear-text" => "password"},
-                "generate-self-signed-certificate-host" => "localhost",
-                "key-store" => "applicationKS",
-                "provider-name" => undefined,
-                "providers" => undefined
-            }
-        }
-        "key-store" => {
-            "applicationKS" => {
-                "alias-filter" => undefined,
-                "credential-reference" => {"clear-text" => "password"},
-                "path" => "application.keystore",
-                "relative-to" => "jboss.server.config.dir",
-                "required" => false,
-                "provider-name" => undefined,
-                "providers" => undefined,
-                "type" => "JKS"
-            }
-        },
-        "key-store-realm" => undefined,
-        "ldap-key-store" => undefined,
-        "ldap-realm" => undefined,
-        "logical-permission-mapper" => undefined,
-        "logical-role-mapper" => undefined,
-        "mapped-regex-realm-mapper" => undefined,
-        "mapped-role-mapper" => undefined,
-        "mechanism-provider-filtering-sasl-server-factory" => {"elytron" => {
-            "enabling" => true,
-            "filters" => [{"provider-name" => "WildFlyElytron"}],
-            "sasl-server-factory" => "global"
-        }},
-        "periodic-rotating-file-audit-log" => undefined,
-        "permission-set" => {
-            "login-permission" => {"permissions" => [{"class-name" => "org.wildfly.security.auth.permission.LoginPermission"}]},
-            "default-permissions" => {"permissions" => [
-                {
-                    "class-name" => "org.wildfly.extension.batch.jberet.deployment.BatchPermission",
-                    "module" => "org.wildfly.extension.batch.jberet",
-                    "target-name" => "*"
-                },
-                {
-                    "class-name" => "org.wildfly.transaction.client.RemoteTransactionPermission",
-                    "module" => "org.wildfly.transaction.client"
-                },
-                {
-                    "class-name" => "org.jboss.ejb.client.RemoteEJBPermission",
-                    "module" => "org.jboss.ejb-client"
-                }
-            ]}
-        },
-        "policy" => undefined,
-        "properties-realm" => {
-            "ApplicationRealm" => {
-                "groups-attribute" => "groups",
-                "groups-properties" => {
-                    "path" => "application-roles.properties",
-                    "relative-to" => "jboss.server.config.dir"
-                },
-                "users-properties" => {
-                    "path" => "application-users.properties",
-                    "relative-to" => "jboss.server.config.dir",
-                    "digest-realm-name" => "ApplicationRealm"
-                }
-            },
-            "ManagementRealm" => {
-                "groups-attribute" => "groups",
-                "groups-properties" => {
-                    "path" => "mgmt-groups.properties",
-                    "relative-to" => "jboss.server.config.dir"
-                },
-                "users-properties" => {
-                    "path" => "mgmt-users.properties",
-                    "relative-to" => "jboss.server.config.dir",
-                    "digest-realm-name" => "ManagementRealm"
-                }
-            }
-        },
-        "provider-http-server-mechanism-factory" => {"global" => {"providers" => undefined}},
-        "provider-loader" => {
-            "elytron" => {
-                "argument" => undefined,
-                "class-names" => undefined,
-                "configuration" => undefined,
-                "module" => "org.wildfly.security.elytron",
-                "path" => undefined,
-                "relative-to" => undefined
-            },
-            "openssl" => {
-                "argument" => undefined,
-                "class-names" => undefined,
-                "configuration" => undefined,
-                "module" => "org.wildfly.openssl",
-                "path" => undefined,
-                "relative-to" => undefined
-            }
-        },
-        "provider-sasl-server-factory" => {"global" => {"providers" => undefined}},
-        "regex-role-mapper" => undefined,
-        "regex-principal-transformer" => undefined,
-        "regex-validating-principal-transformer" => undefined,
-        "sasl-authentication-factory" => {
-            "application-sasl-authentication" => {
-                "mechanism-configurations" => [
-                    {
-                        "mechanism-name" => "JBOSS-LOCAL-USER",
-                        "realm-mapper" => "local"
-                    },
-                    {
-                        "mechanism-name" => "DIGEST-MD5",
-                        "mechanism-realm-configurations" => [{"realm-name" => "ApplicationRealm"}]
-                    }
-                ],
-                "sasl-server-factory" => "configured",
-                "security-domain" => "ApplicationDomain"
-            },
-            "management-sasl-authentication" => {
-                "mechanism-configurations" => [
-                    {
-                        "mechanism-name" => "JBOSS-LOCAL-USER",
-                        "realm-mapper" => "local"
-                    },
-                    {
-                        "mechanism-name" => "DIGEST-MD5",
-                        "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
-                    }
-                ],
-                "sasl-server-factory" => "configured",
-                "security-domain" => "ManagementDomain"
-            }
-        },
-        "security-domain" => {
-            "ApplicationDomain" => {
-                "default-realm" => "ApplicationRealm",
-                "outflow-anonymous" => false,
-                "outflow-security-domains" => undefined,
-                "permission-mapper" => "default-permission-mapper",
-                "post-realm-principal-transformer" => undefined,
-                "pre-realm-principal-transformer" => undefined,
-                "principal-decoder" => undefined,
-                "realm-mapper" => undefined,
-                "realms" => [
-                    {
-                        "realm" => "ApplicationRealm",
-                        "role-decoder" => "groups-to-roles"
-                    },
-                    {"realm" => "local"}
-                ],
-                "role-mapper" => undefined,
-                "security-event-listener" => undefined,
-                "trusted-security-domains" => undefined
-            },
-            "ManagementDomain" => {
-                "default-realm" => "ManagementRealm",
-                "outflow-anonymous" => false,
-                "outflow-security-domains" => undefined,
-                "permission-mapper" => "default-permission-mapper",
-                "post-realm-principal-transformer" => undefined,
-                "pre-realm-principal-transformer" => undefined,
-                "principal-decoder" => undefined,
-                "realm-mapper" => undefined,
-                "realms" => [
-                    {
-                        "realm" => "ManagementRealm",
-                        "role-decoder" => "groups-to-roles"
-                    },
-                    {
-                        "realm" => "local",
-                        "role-mapper" => "super-user-mapper"
-                    }
-                ],
-                "role-mapper" => undefined,
-                "security-event-listener" => undefined,
-                "trusted-security-domains" => undefined
-            }
-        },
-        "server-ssl-context" => {
-            "applicationSSC" => {
-                "authentication-optional" => false,
-                "cipher-suite-filter" => "DEFAULT",
-                "cipher-suite-names" => undefined,
-                "final-principal-transformer" => undefined,
-                "key-manager" => "applicationKM",
-                "maximum-session-cache-size" => -1,
-                "need-client-auth" => false,
-                "post-realm-principal-transformer" => undefined,
-                "pre-realm-principal-transformer" => undefined,
-                "protocols" => undefined,
-                "provider-name" => undefined,
-                "providers" => undefined,
-                "realm-mapper" => undefined,
-                "security-domain" => undefined,
-                "session-timeout" => -1,
-                "trust-manager" => undefined,
-                "use-cipher-suites-order" => true,
-                "want-client-auth" => false,
-                "wrap" => false,
-                "ssl-session" => undefined
-            }
-        },
-        "service-loader-http-server-mechanism-factory" => undefined,
-        "service-loader-sasl-server-factory" => undefined,
-        "simple-permission-mapper" => {"default-permission-mapper" => {
-            "mapping-mode" => "first",
-            "permission-mappings" => [
-                {
-                    "principals" => ["anonymous"],
-                    "permission-sets" => [{"permission-set" => "default-permissions"}]
-                },
-                {
-                    "match-all" => true,
-                    "permission-sets" => [
-                        {"permission-set" => "login-permission"},
-                        {"permission-set" => "default-permissions"}
-                    ]
-                }
-            ]
-        }},
-        "simple-regex-realm-mapper" => undefined,
-        "simple-role-decoder" => {"groups-to-roles" => {"attribute" => "groups"}},
-        "size-rotating-file-audit-log" => undefined,
-        "source-address-role-decoder" => undefined,
-        "syslog-audit-log" => undefined,
-        "token-realm" => undefined,
-        "trust-manager" => undefined,
-        "x500-attribute-principal-decoder" => undefined,
-        "x500-subject-evidence-decoder" => undefined,
-        "x509-subject-alt-name-evidence-decoder" => undefined
-    }
-}
-
-
-
-
-

3.4. Default Application Authentication Configuration

-
-

By default, applications are secured using legacy security domains. -Applications must specify a security domain in their web.xml as well -as the authentication method. If no security domain is specified by the -application, WildFly will use the provided other legacy security -domain.

-
-
-

3.4.1. Update WildFly to Use the Default Elytron Components for Application

-
-

Authentication

-
-
-
-
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-http-auth)
-
-
-
-

For more information on configuring an http-authentication-factory, see configure an http-authentication-factory

-
-
-

SSL/TLS

-
-
-

Undertow can be configured to make use of the applicationSSC server SSL context for testing purposes, -as shown below:

-
-
-
-
batch
-/subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
-/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=applicationSSC)
-run-batch
-reload
-
-
-
-

The applicationSSC server SSL context references the applicationKM key manager:

-
-
-
-
/subsystem=elytron/key-manager=applicationKM:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "algorithm" => undefined,
-        "alias-filter" => undefined,
-        "credential-reference" => {"clear-text" => "password"},
-        "generate-self-signed-certificate-host" => "localhost",
-        "key-store" => "applicationKS",
-        "provider-name" => undefined,
-        "providers" => undefined
-    }
-}
-
-
-
-

When the applicationSSC server SSL context is used by Undertow, a self-signed certificate will automatically -be generated the first time the HTTPS interface is accessed if the file that backs the applicationKS key store -doesn’t exist. This self-signed certificate will then be persisted to the file that backs the applicationKS key -store. The generate-self-signed-certificate-host value, localhost, will be used as the Common Name (CN) value -in the generated self-signed certificate. The following messages will appear in the server log file:

-
-
-
-
13:21:39,197 WARN  [org.wildfly.extension.elytron] (MSC service thread 1-6) WFLYELY01083: KeyStore /wildfly/standalone/configuration/application.keystore not found, it will be auto generated on first use with a self-signed certificate for host localhost
-...
-13:39:57,152 WARN  [org.wildfly.extension.elytron] (default task-1) WFLYELY01084: Generated self-signed certificate at /wildfly/dist/target/wildfly-21.0.0.Beta1-SNAPSHOT/standalone/configuration/application.keystore. Please note that self-signed certificates are not secure and should only be used for testing purposes. Do not use this self-signed certificate in production.
-SHA-1 fingerprint of the generated key is fc:16:cf:bf:de:3a:6d:d6:fe:ec:f9:cd:9d:22:c9:3d:43:d7:e3:57
-SHA-256 fingerprint of the generated key is 38:69:00:4e:39:e2:40:e2:ef:b6:95:58:c6:ba:d0:0f:56:c5:7c:5d:fc:d5:c3:b9:b0:94:80:9c:f5:45:9d:40
-
-
-
-

NOTE To disable the automatic self-signed certificate generation, undefine the generate-self-signed-certificate-host -attribute on the applicationKM key manager.

-
-
-

WARNING This self-signed certificate is only intended to be used for testing purposes. This self-signed certificate -should never be used in a production environment. For more information on configuring an ssl-context, -see Configuring a server SSLContext. For more information on how to -easily obtain a signed certificate using the WildFly CLI, see Obtain a signed certificate from Let’s Encrypt.

-
-
-
-

3.4.2. Default Elytron ApplicationDomain Configuration

-
-

The http-authentication-factory can be configured to use the ApplicationDomain -security domain.

-
-
-
-
/subsystem=elytron/security-domain=ApplicationDomain:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "default-realm" => "ApplicationRealm",
-        "permission-mapper" => "default-permission-mapper",
-        "post-realm-principal-transformer" => undefined,
-        "pre-realm-principal-transformer" => undefined,
-        "principal-decoder" => undefined,
-        "realm-mapper" => undefined,
-        "realms" => [{
-            "realm" => "ApplicationRealm",
-            "role-decoder" => "groups-to-roles"
-        }],
-        "role-mapper" => undefined,
-        "trusted-security-domains" => undefined
-    }
-}
-
-
-
-

The ApplicationDomain security domain is backed by the -ApplicationRealm Elytron security realm, which is a properties-based -realm.

-
-
-
-
/subsystem=elytron/properties-realm=ApplicationRealm:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "groups-attribute" => "groups",
-        "groups-properties" => {
-            "path" => "application-roles.properties",
-            "relative-to" => "jboss.server.config.dir"
-        },
-        "users-properties" => {
-            "path" => "application-users.properties",
-            "relative-to" => "jboss.server.config.dir",
-            "digest-realm-name" => "ApplicationRealm"
-        }
-    }
-}
-
-
-
-
-
-

3.5. Default Management Authentication Configuration

-
-

By default, the WildFly management interfaces are secured using WildFly -Elytron capabilities.

-
-
-

3.5.1. Default Elytron Management HTTP Authentication Configuration

-
-

When you access the management interface over HTTP, for example when -using the web-based management console, WildFly will use the -management-http-authentication http-authentication-factory.

-
-
-
-
/subsystem=elytron/http-authentication-factory=management-http-authentication:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "http-server-mechanism-factory" => "global",
-        "mechanism-configurations" => [{
-            "mechanism-name" => "DIGEST",
-            "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
-        }],
-        "security-domain" => "ManagementDomain"
-    }
-}
-
-
-
-

The management-http-authentication http-authentication-factory, is -configured to use the ManagementDomain security domain.

-
-
-
-
/subsystem=elytron/security-domain=ManagementDomain:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "default-realm" => "ManagementRealm",
-        "outflow-anonymous" => false,
-        "outflow-security-domains" => undefined,
-        "permission-mapper" => "default-permission-mapper",
-        "post-realm-principal-transformer" => undefined,
-        "pre-realm-principal-transformer" => undefined,
-        "principal-decoder" => undefined,
-        "realm-mapper" => undefined,
-        "realms" => [
-            {
-                "realm" => "ManagementRealm",
-                "role-decoder" => "groups-to-roles"
-            },
-            {
-                "realm" => "local",
-                "role-mapper" => "super-user-mapper"
-            }
-        ],
-        "role-mapper" => undefined,
-        "security-event-listener" => undefined,
-        "trusted-security-domains" => undefined
-    }
-}
-
-
-
-

The ManagementDomain security domain is backed by the -ManagementRealm Elytron security realm, which is a properties-based -realm.

-
-
-
-
/subsystem=elytron/properties-realm=ManagementRealm:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "groups-attribute" => "groups",
-        "groups-properties" => {
-            "path" => "mgmt-groups.properties",
-            "relative-to" => "jboss.server.config.dir"
-        },
-        "plain-text" => false,
-        "users-properties" => {
-            "path" => "mgmt-users.properties",
-            "relative-to" => "jboss.server.config.dir",
-            "digest-realm-name" => "ManagementRealm"
-        }
-    }
-}
-
-
-
-
-

3.5.2. Default Elytron Management CLI Authentication

-
-

By default, the management CLI ( jboss-cli.sh) is configured to -connect over remote+http.

-
-
-

Default jboss-cli.xml

-
-
-
-
<jboss-cli xmlns="urn:jboss:cli:3.3">
- 
-    <default-protocol use-legacy-override="true">remote+http</default-protocol>
- 
-    <!-- The default controller to connect to when 'connect' command is executed w/o arguments -->
-    <default-controller>
-        <protocol>remote+http</protocol>
-        <host>localhost</host>
-        <port>9990</port>
-    </default-controller>
-
-
-
-

This will establish a connection over HTTP and use HTTP upgrade to -change the communication protocol to native. The HTTP upgrade -connection is secured in the http-upgrade section of the -http-interface using a sasl-authentication-factory.

-
-
-

Example Configuration with Default Components

-
-
-
-
/core-service=management/management-interface=http-interface:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "allowed-origins" => undefined,
-        "console-enabled" => true,
-        "http-authentication-factory" => "management-http-authentication",
-        "http-upgrade" => {
-            "enabled" => true,
-            "sasl-authentication-factory" => "management-sasl-authentication"
-        },
-        "http-upgrade-enabled" => true,
-        "sasl-protocol" => "remote",
-        "secure-socket-binding" => undefined,
-        "security-realm" => undefined,
-        "server-name" => undefined,
-        "socket-binding" => "management-http",
-        "ssl-context" => undefined
-    }
-}
-
-
-
-

The default sasl-authentication-factory is -management-sasl-authentication.

-
-
-
-
/subsystem=elytron/sasl-authentication-factory=management-sasl-authentication:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "mechanism-configurations" => [
-            {
-                "mechanism-name" => "JBOSS-LOCAL-USER",
-                "realm-mapper" => "local"
-            },
-            {
-                "mechanism-name" => "DIGEST-MD5",
-                "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
-            }
-        ],
-        "sasl-server-factory" => "configured",
-        "security-domain" => "ManagementDomain"
-    }
-}
-
-
-
-

The management-sasl-authentication sasl-authentication-factory -specifies JBOSS-LOCAL-USER and DIGEST-MD5 mechanisms.

-
-
-

JBOSS-LOCAL-USER Realm

-
-
-
-
/subsystem=elytron/identity-realm=local:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "attribute-name" => undefined,
-        "attribute-values" => undefined,
-        "identity" => "$local"
-    }
-}
-
-
-
-

The local Elytron security realm is for handling silent authentication -for local users.

-
-
-

The ManagementRealm Elytron security realm is the same realm used in -the management-http-authentication http-authentication-factory.

-
-
-
-
-

3.6. Comparing Legacy Approaches to Elytron Approaches

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Legacy ApproachElytron Approach

UsersRoles Login Module

Configure Authentication with a Properties -File-Based Identity Store

Database Login Module

Configure Authentication with a Database -Identity Store

Ldap, LdapExtended, AdvancedLdap, AdvancedADLdap Login Modules

Configure Authentication with an LDAP-Based Identity Store

Certificate, Certificate Roles Login Module

Configure Authentication -with Certificates

Kerberos, SPNEGO Login Modules

Configure Authentication with a -Kerberos-Based Identity Store

Kerberos, SPNEGO Login Modules with Fallback

Configure Authentication -with a Form as a Fallback for Kerberos

RoleMapping Login Module

Configure Authentication -with a Mapped Role Mapper

Vault

Create and Use a Credential Store

Legacy Security Realms

Secure the Management Interfaces with a New -Identity Store, Silent Authentication

RBAC

Using RBAC with Elytron

Legacy Security Realms for One-way and Two-way SSL/TLS for Applications

Enable One-way SSL/TLS for Applications, Enable Two-way SSL/TLS in -WildFly for Applications

Legacy Security Realms for One-way and Two-way SSL/TLS for Management -Interfaces

Enable One-way for the Management Interfaces Using the -Elytron Subsystem, Enable Two-way SSL/TLS for the Management Interfaces -using the Elytron Subsystem

-
-
-
-
-

4. Using the Elytron Subsystem

-
-
-

4.1. Set Up and Configure Authentication for Applications

-
-

4.1.1. Configure Authentication with a Properties File-Based Identity Store

-
-
Create properties files:
-
-

You need to create two properties files: one that maps user to passwords -and another that maps users to roles. Usually these files are located in -the jboss.server.config.dir directory and follow the naming convention -*-users.properties and *-roles.properties, but other locations and -names may be used. The *-users.properties file must also contain a -reference to the properties-realm, which you will create in the next -step: #$REALM_NAME=YOUR_PROPERTIES_REALM_NAME$

-
-
-

Example user to password file: example-users.properties

-
-
-
-
#$REALM_NAME=examplePropRealm$
-user1=password123
-user2=password123
-
-
-
-

Example user to roles file: example-roles.properties

-
-
-
-
user1=Admin
-user2=Guest
-
-
-
-

The Properties Realm also supports storing hashed passwords in the properties -files, namely DIGEST passwords. Learn how to specify the encoding and character set for these passwords -in the next section.

-
-
-
-
Configure a properties-realm in WildFly:
-
-
-
/subsystem=elytron/properties-realm=examplePropRealm:add(groups-attribute=groups,groups-properties={path=example-roles.properties,relative-to=jboss.server.config.dir},users-properties={path=example-users.properties,relative-to=jboss.server.config.dir,plain-text=true})
-
-
-
-

The name of the properties-realm is examplePropRealm, which is used -in the previous step in the example-users.properties file. Also, if -your properties files are located outside of jboss.server.config.dir, -then you need to change the path and relative-to values -appropriately.

-
-
-

Additionally, if storing hashed passwords in the properties file, you can specify the following -attributes:

-
-
-
    -
  • -

    hash-encoding: This attribute specifies the string format for the password if it is not stored in plain -text. It is set to hex encoding by default, but base64 is also supported.

    -
  • -
  • -

    hash-charset: This attribute specifies the character set to use when converting the password string to a -byte array. It is set to UTF-8 by default.

    -
  • -
-
-
-

For example, the following properties realm is configured to use base64 encoding and the character set -GB2312.

-
-
-
-
/subsystem=elytron/properties-realm=examplePropRealm:add(groups-attribute=groups,groups-properties={path=example-roles.properties,relative-to=jboss.server.config.dir},users-properties={path=example-users.properties,relative-to=jboss.server.config.dir},hash-encoding=base64,hash-charset=GB2312)
-
-
-
-
-
Configure a security-domain:
-
-
-
/subsystem=elytron/security-domain=exampleSD:add(realms=[{realm=examplePropRealm,role-decoder=groups-to-roles}],default-realm=examplePropRealm,permission-mapper=default-permission-mapper)
-
-
-
-
-
Configure an http-authentication-factory:
-
-
-
/subsystem=elytron/http-authentication-factory=example-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleSD,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])
-
-
-
-

This example shows creating an http-authentication-factory using -BASIC authentication, but it could be updated to other mechanisms such -as FORM.

-
-
-
-
Configure an application-security-domain in the Undertow subsystem:
-
-
-
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-http-auth)
-
-
-
-
-
Configure your application’s web.xml and jboss-web.xml.
-
-

Your application’s web.xml and jboss-web.xml must be updated to use -the application-security-domain you configured in WildFly. An example -of this is available in the -Configure Applications to Use Elytron for Authentication -section.

-
-
-
-
-

4.1.2. Configure Authentication with a Filesystem-Based Identity Store

-
-
Chose a directory for users:
-
-

You need a directory where your users will be stored. In this example, -we are using a directory called fs-realm-users located in -jboss.server.config.dir.

-
-
-
-
Configure a filesystem-realm in WildFly:
-
-
-
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir)
-
-
-
-

If your directory is located outside of jboss.server.config.dir, then -you need to change the path and relative-to values appropriately.

-
-
-
-
Encryption
-
-

To enable encryption for a filesystem-realm, there are a couple of attributes that can be configured.

-
-
-
    -
  • -

    credential-store: This attribute specifies the credential-store where the secret key used for encrypting and decrypting the realm is stored.

    -
  • -
  • -

    secret-key: This attribute specifies the alias within the credential-store that contains the secret key to be used to encrypt and decrypt the realm.

    -
  • -
-
-
-

As an example, to create a credential-store that is automatically populated with a SecretKey under the alias key, the following command can be used:

-
-
-
-
/subsystem=elytron/secret-key-credential-store=mycredstore:add(path=propcredstore.cs, relative-to=jboss.server.config.dir, create=true, populate=true)
-
-
-
-

An encrypted filesystem-realm that makes use of the credential-store could be then created as follows:

-
-
-
-
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir, credential-store=mycredstore, secret-key=key)
-
-
-
-
-
Integrity
-
-

It is also possible to enable support for integrity checking on the filesystem realm by configuring the key-store and key-store-alias attributes for the realm.

-
-
-

When enabling integrity checking on a filesystem realm, you will have to specify the following 2 attributes

-
-
-
    -
  • -

    key-store: This attribute specifies the key-store that contains the key pair (private key and public key) that’s used for signing each identity file and for integrity checking.

    -
  • -
  • -

    key-store-alias: This attribute specifies the alias within the key-store that identifies the PrivateKeyEntry to use to sign identity files and perform filesystem integrity checks.

    -
  • -
-
-
-

To create a key-store and a key-pair for the attributes above, you can create a key-store resource using the following commands. This will create a key-store called keystore with the alias localhost, and the password secret.

-
-
-
-
/subsystem=elytron/key-store=keystore:add(path=keystore, relative-to=jboss.server.config.dir, type=PKCS12, credential-reference={clear-text=secret})
-/subsystem=elytron/key-store=keystore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=1024,validity=365,distinguished-name="CN=localhost")
-/subsystem=elytron/key-store=keystore:store()
-
-
-
-

To create an integrity enabled filesystem realm with a key-store called keystore and the key-store-alias localhost, the following command would be used

-
-
-
-
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir, key-store=keystore, key-store-alias=localhost)
-
-
-
-

Integrity and Encryption can be used in conjuction together. To create an encrypted filesystem realm with integrity enabled, the following command would be used

-
-
-
-
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir, credential-store=mycredstore, secret-key=key, key-store=keystore, key-store-alias=localhost)
-
-
-
-
-
Add a user:
-
-

When using the filesystem-realm, you can add users using the -management CLI.

-
-
-
-
/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=user1)
-/subsystem=elytron/filesystem-realm=exampleFsRealm:set-password(clear={password="password123"}, identity=user1)
-/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=user1, name=Roles, value=["Admin","Guest"])
-
-
-
-
-
Add a simple-role-decoder:
-
-
-
/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
-
-
-
-

This simple-role-decoder decodes a principal’s roles from the Roles -attribute. You can change this value if your roles are in a different -attribute.

-
-
-
-
Configure a security-domain:
-
-
-
/subsystem=elytron/security-domain=exampleFsSD:add(realms=[{realm=exampleFsRealm,role-decoder=from-roles-attribute}],default-realm=exampleFsRealm,permission-mapper=default-permission-mapper)
-
-
-
-
-
Configure an http-authentication-factory:
-
-
-
/subsystem=elytron/http-authentication-factory=example-fs-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleFsSD,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])
-
-
-
-

This example shows creating an http-authentication-factory using -BASIC authentication, but it could be updated to other mechanisms such -as FORM.

-
-
-
-
Configure an application-security-domain in the Undertow subsystem:
-
-
-
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-fs-http-auth)
-
-
-
-
-
Configure your application’s web.xml and jboss-web.xml.
-
-

Your application’s web.xml and jboss-web.xml must be updated to use -the application-security-domain you configured in WildFly. An example -of this is available in the -Configure Applications to Use Elytron for Authentication -section.

-
-
-

Your application is now using a filesystem-based identity store for -authentication.

-
-
-
-
-

4.1.3. Configure Authentication with a Database Identity Store

-
-
Determine your database format for usernames, passwords, and roles:
-
-

To set up authentication using a database for an identity store, you -need to determine how your usernames, passwords, and roles are stored in -that database. In this example, we are using a single table with the -following sample data:

-
- ----- - - - - - - - - - - - - - - - - - - - -
usernamepasswordroles

user1

password123

Admin

user2

password123

Guest

-
-
-
Configure a datasource:
-
-

To connect to a database from WildFly, you must have the appropriate -database driver deployed as well as a datasource configured. This -example shows deploying the driver for postgres and configuring a -datasource in WildFly:

-
-
-
-
deploy /path/to/postgresql-9.4.1210.jar
- 
-data-source add --name=examplePostgresDS --jndi-name=java:jboss/examplePostgresDS --driver-name=postgresql-9.4.1210.jar  --connection-url=jdbc:postgresql://localhost:5432/postgresdb --user-name=postgresAdmin --password=mysecretpassword
-
-
-
-
-
Configure a jdbc-realm in WildFly:
-
-
-
/subsystem=elytron/jdbc-realm=exampleDbRealm:add(principal-query=[{sql="SELECT password,roles FROM wildfly_users WHERE username=?",data-source=examplePostgresDS,clear-password-mapper={password-index=1},attribute-mapping=[{index=2,to=groups}]}])
-
-
-
-

NOTE: The above example shows how to obtain passwords and roles from a -single principal-query. You can also create additional -principal-query with attribute-mapping attributes if you require -multiple queries to obtain roles or additional authentication or -authorization information.

-
-
-
-
Configure a security-domain:
-
-
-
/subsystem=elytron/security-domain=exampleDbSD:add(realms=[{realm=exampleDbRealm,role-decoder=groups-to-roles}],default-realm=exampleDbRealm,permission-mapper=default-permission-mapper)
-
-
-
-
-
Configure an http-authentication-factory:
-
-
-
/subsystem=elytron/http-authentication-factory=example-db-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleDbSD,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=exampleDbSD}]}])
-
-
-
-

This example shows creating an http-authentication-factory using -BASIC authentication, but it could be updated to other mechanisms such -as FORM.

-
-
-
-
Configure an application-security-domain in the Undertow subsystem:
-
-
-
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-db-http-auth)
-
-
-
-
-
Configure your application’s web.xml and jboss-web.xml.
-
-

Your application’s web.xml and jboss-web.xml must be updated to use -the application-security-domain you configured in WildFly. An example -of this is available in the -Configure Applications to Use Elytron for Authentication -section.

-
-
-
-
-

4.1.4. Configure Authentication with an LDAP-Based Identity Store

-
-
Determine your LDAP format for usernames, passwords, and roles:
-
-

To set up authentication using an LDAP server for an identity store, you -need to determine how your usernames, passwords, and roles are stored. -In this example, we are using the following structure:

-
-
-
-
dn: dc=wildfly,dc=org
-dc: wildfly
-objectClass: top
-objectClass: domain
- 
-dn: ou=Users,dc=wildfly,dc=org
-objectClass: organizationalUnit
-objectClass: top
-ou: Users
- 
-dn: uid=jsmith,ou=Users,dc=wildfly,dc=org
-objectClass: top
-objectClass: person
-objectClass: inetOrgPerson
-cn: John Smith
-sn: smith
-uid: jsmith
-userPassword: password123
- 
-dn: ou=Roles,dc=wildfly,dc=org
-objectclass: top
-objectclass: organizationalUnit
-ou: Roles
- 
-dn: cn=Admin,ou=Roles,dc=wildfly,dc=org
-objectClass: top
-objectClass: groupOfNames
-cn: Admin
-member: uid=jsmith,ou=Users,dc=wildfly,dc=org
-
-
-
-
-
Configure a dir-context:
-
-

To connect to the LDAP server from WildFly, you need to configure a -dir-context that provides the URL as well as the principal used to -connect to the server.

-
-
-
-
/subsystem=elytron/dir-context=exampleDC:add(url="ldap://127.0.0.1:10389",principal="uid=admin,ou=system",credential-reference={clear-text="secret"})
-
-
-
-
-
Configure an ldap-realm in WildFly:
-
-
-
/subsystem=elytron/ldap-realm=exampleLR:add(dir-context=exampleDC,identity-mapping={search-base-dn="ou=Users,dc=wildfly,dc=org",rdn-identifier="uid",user-password-mapper={from="userPassword"},attribute-mapping=[{filter-base-dn="ou=Roles,dc=wildfly,dc=org",filter="(&(objectClass=groupOfNames)(member={1}))",from="cn",to="Roles"}]})
-
-
-
-

Additionally, if storing hashed passwords in the LDIF file, you can specify the following -attributes:

-
-
-
    -
  • -

    hash-encoding: This attribute specifies the string format for the password if it is not stored in plain -text. It is set to base64 encoding by default, but hex is also supported.

    -
  • -
  • -

    hash-charset: This attribute specifies the character set to use when converting the password string to a -byte array. It is set to UTF-8 by default.

    -
  • -
-
-
-

For example, the following LDAP realm is storing hexadecimal encoded strings hashed using the GB2312 character set:

-
-
-
-
/subsystem=elytron/ldap-realm=exampleLR:add(dir-context=exampleDC,identity-mapping={...},hash-encoding=hex,hash-charset=GB2312)
-
-
-
-
-
Add a simple-role-decoder:
-
-
-
/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
-
-
-
-
-
Configure a security-domain:
-
-
-
/subsystem=elytron/security-domain=exampleLdapSD:add(realms=[{realm=exampleLR,role-decoder=from-roles-attribute}],default-realm=exampleLR,permission-mapper=default-permission-mapper)
-
-
-
-
-
Configure an http-authentication-factory:
-
-
-
/subsystem=elytron/http-authentication-factory=example-ldap-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleLdapSD,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])
-
-
-
-

This example shows creating an http-authentication-factory using -BASIC authentication, but it could be updated to other mechanisms such -as FORM.

-
-
-
-
Configure an application-security-domain in the Undertow subsystem:
-
-
-
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-ldap-http-auth)
-
-
-
-
-
Configure your application’s web.xml and jboss-web.xml.
-
-

Your application’s web.xml and jboss-web.xml must be updated to use -the application-security-domain you configured in WildFly. An example -of this is available in the -Configure Applications to Use Elytron for Authentication -section.

-
-
-

IMPORTANT: In cases where you configure an LDAP server in the -elytron subsystem for authentication and that LDAP server then becomes -unreachable, WildFly will return a 500, or internal server error, -error code when attempting authentication using that unreachable LDAP -server. This behavior differs from the legacy security subsystem, -which will return a 401, or unauthorized, error code under the same -conditions.

-
-
-
-
-

4.1.5. Configure Authentication with Certificates

-
-

IMPORTANT: Before you can set up certificate-based authentication, you -must have two-way SSL configured.

-
-
-
Configure a key-store-realm.
-
-
-
/subsystem=elytron/key-store-realm=ksRealm:add(key-store=twoWayTS)
-
-
-
-

You must configure this realm with a truststore that contains the -client’s certificate. The authentication process uses the same -certificate presented by the client during the two-way SSL handshake.

-
-
-
-
Create a Decoder.
-
-

You need to create a x500-attribute-principal-decoder to decode the -principal you get from your certificate. The below example will decode -the principal based on the first CN value.

-
-
-
-
/subsystem=elytron/x500-attribute-principal-decoder=CNDecoder:add(oid="2.5.4.3",maximum-segments=1)
-
-
-
-

For example, if the full DN was -CN=client,CN=client-certificate,DC=example,DC=jboss,DC=org, -CNDecoder would decode the principal as client. This decoded -principal is used as the alias value to lookup a certificate in the -truststore configured in ksRealm.

-
-
-

IMPORTANT: The decoded principal * MUST* must be the alias value -you set in your server’s truststore for the client’s certificate.

-
-
-
-
Configure an evidence-decoder
-
-

By default, the principal associated with a certificate will be the subject name -from the certificate. This subject name will then be rewritten using any configured -principal decoders and principal transformers to obtain the name that should be used -when locating and loading the identity from the underlying identity store.

-
-
-

To specify that a subject alternative name from a certificate should be used as the -principal associated with that certificate, an x509-subject-alt-name-evidence-decoder -needs to be configured. This element has two attributes:

-
-
-
    -
  • -

    alt-name-type - The subject alternative name type to decode. This attribute is -required. Must be one of the subject alternative name types that can be represented -as a String:

    -
    -
      -
    • -

      rfc822Name

      -
    • -
    • -

      dNSName

      -
    • -
    • -

      uniformResourceIdentifier

      -
    • -
    • -

      iPAddress

      -
    • -
    • -

      registeredID

      -
    • -
    • -

      directoryName

      -
    • -
    -
    -
  • -
  • -

    segment - The 0-based occurrence of the subject alternative name to map. This -attribute is optional and only used when there is more than one subject alternative -name of the given alt-name-type. The default value is 0.

    -
  • -
-
-
-

For example, consider the following X.509 v3 Subject Alternative Name extension from -the first certificate in an X.509 certificate chain:

-
-
-
-
X509v3 Subject Alternative Name:
-DNS:one.example.org, IP Address:127.0.0.1
-
-
-
-

To associate the certificate chain evidence with the principal "one.example.org", the -following x509-subject-alt-name-evidence-decoder could be configured:

-
-
-
-
/subsystem=elytron/x509-subject-alt-name-evidence-decoder=exampleDnsDecoder:add(alt-name-type=dNSName)
-
-
-
-

Next, consider the following X.509 v3 Subject Alternative Name extension from the first -certificate in an X.509 certificate chain:

-
-
-
-
X509v3 Subject Alternative Name:
-DNS:one.example.org, DNS:two.example.org, IP Address:127.0.0.1
-
-
-
-

To associate the evidence with the principal "two.example.org", the following -x509-subject-alt-name-evidence-decoder could be configured:

-
-
-
-
/subsystem=elytron/x509-subject-alt-name-evidence-decoder=anotherDnsDecoder:add(alt-name-type=dNSName, segment=1)
-
-
-
-

It is also possible to configure an x500-subject-evidence-decoder. This evidence decoder -will extract the subject from the first certificate in the certificate chain, as an X500Principal. -Example configuration:

-
-
-
-
/subsystem=elytron/x500-subject-evidence-decoder=exampleSubjectDecoder:add()
-
-
-
-

To make use of a custom org.wildfly.security.auth.server.EvidenceDecoder implementation, a -custom-evidence-decoder can be configured. The custom implementation class needs to first be -packaged in a JAR. A module can then be added to WildFly that contains this JAR. See -Custom Components for more information on how to add a custom Elytron -component to WildFly.

-
-
-

Example configuration:

-
-
-
-
/subsystem=elytron/custom-evidence-decoder=myCustomEvidenceDecoder:add(module=org.wildfly.security.examples, class-name=org.wildfly.security.examples.MyCustomEvidenceDecoder)
-
-
-
-

Finally, it is also possible to configure an aggregate-evidence-decoder. This consists of -two or more evidence-decoder elements where each element is reference to a configured -evidence decoder. Given evidence, these evidence decoders will be attempted in order until -one returns a non-null principal or until there are no more evidence decoders left to try.

-
-
-

Example configuration:

-
-
-
-
/subsystem=elytron/x509-subject-alt-name-evidence-decoder=emailDecoder:add(alt-name-type=rfc822Name)
-/subsystem=elytron/x509-subject-alt-name-evidence-decoder=dnsDecoder:add(alt-name-type=dNSName)
-/subsystem=elytron/x500-subject-evidence-decoder=subjectDecoder:add()
-/subsystem=elytron/aggregate-evidence-decoder=aggregateDecoder:add(evidence-decoders=[emailDecoder,subjectDecoder,dnsDecoder])
-
-
-
-

Once an evidence-decoder has been configured, it can be referenced from a security-domain:

-
-
-
-
/subsystem=elytron/security-domain=exampleCertSD:add(..., evidence-decoder=aggregateDecoder)
-
-
-
-

If no evidence-decoder is specified for a security-domain, then the principal associated with the evidence will -just be the default principal for the evidence type, i.e., for an X.509 certificate chain, this would continue to -default to the subject from the first certificate in the certificate chain.

-
-
-
-
Add a constant-role-mapper for assigning roles.
-
-

This is example uses a constant-role-mapper to assign roles to a -principal from ksRealm but other approaches may also be used.

-
-
-
-
/subsystem=elytron/constant-role-mapper=constantClientCertRole:add(roles=[Admin,Guest])
-
-
-
-
-
Configure a security-domain.
-
-
-
/subsystem=elytron/security-domain=exampleCertSD:add(realms=[{realm=ksRealm}],default-realm=ksRealm,permission-mapper=default-permission-mapper,principal-decoder=CNDecoder,role-mapper=constantClientCertRole)
-
-
-
-
-
Configure an http-authentication-factory.
-
-
-
/subsystem=elytron/http-authentication-factory=exampleCertHttpAuth:add(http-server-mechanism-factory=global,security-domain=exampleCertSD,mechanism-configurations=[{mechanism-name=CLIENT_CERT,mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])
-
-
-
-
-
Configure an application-security-domain in the Undertow subsystem.
-
-
-
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=exampleCertHttpAuth)
-
-
-
-
-
Update server-ssl-context.
-
-
-
/subsystem=elytron/server-ssl-context=twoWaySSC:write-attribute(name=security-domain,value=exampleCertSD)
-/subsystem=elytron/server-ssl-context=twoWaySSC:write-attribute(name=authentication-optional, value=true)
-
-
-
-
-
Configure your application’s web.xml and jboss-web.xml.
-
-

Your application’s web.xml and jboss-web.xml must be updated to use -the application-security-domain you configured in WildFly. An example -of this is available in the -Configure Applications to Use Elytron for Authentication -section.

-
-
-

In addition, you need to update your web.xml to use CLIENT-CERT as -its authentication method.

-
-
-
-
<login-config>
-  <auth-method>CLIENT-CERT</auth-method>
-  <realm-name>exampleApplicationDomain</realm-name>
-</login-config>
-
-
-
-
-
-

4.1.6. Configure Authentication with a Kerberos-Based Identity Store

-
-

IMPORTANT: The following steps assume you have a working KDC and -Kerberos domain as well as your client browsers configured.

-
-
-
Configure a kerberos-security-factory.
-
-
-
/subsystem=elytron/kerberos-security-factory=krbSF:add(principal="HTTP/host@REALM",path="/path/to/http.keytab",mechanism-oids=[1.2.840.113554.1.2.2,1.3.6.1.5.5.2])
-
-
-
-
-
Configure the system properties for Kerberos.
-
-

Depending on how your environment is configured, you will need to set -some of the system properties below.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
System PropertyDescription

java.security.krb5.kdc

The host name of the KDC.

java.security.krb5.realm

The name of the realm.

java.security.krb5.conf

The path to the configuration krb5.conf file.

sun.security.krb5.debug

If true, debugging mode will be enabled.

-
-

To configure a system property in WildFly:

-
-
-
-
/system-property=java.security.krb5.conf:add(value="/path/to/krb5.conf")
-
-
-
-
-
Configure an Elytron security realm for assigning roles.
-
-

The the client’s Kerberos token will provide the principal, but you need -a way to map that principal to a role for your application. There are -several ways to accomplish this, but this example creates a -filesystem-realm, adds a user to the realm that matches the principal -from the Kerberos token, and assigns roles to that user.

-
-
-
-
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir)
-/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=user1@REALM)
-/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=user1@REALM,name=Roles,value=["Admin","Guest"])
-
-
-
-
-
Add a simple-role-decoder.
-
-
-
/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
-
-
-
-

This simple-role-decoder decodes a principal’s roles from the Roles -attribute. You can change this value if your roles are in a different -attribute.

-
-
-
-
Configure a security-domain.
-
-
-
/subsystem=elytron/security-domain=exampleFsSD:add(realms=[{realm=exampleFsRealm,role-decoder=from-roles-attribute}],default-realm=exampleFsRealm,permission-mapper=default-permission-mapper)
-
-
-
-
-
Configure an http-authentication-factory that uses the
-
-

kerberos-security-factory.

-
-
-
-
/subsystem=elytron/http-authentication-factory=example-krb-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleFsSD,mechanism-configurations=[{mechanism-name=SPNEGO,mechanism-realm-configurations=[{realm-name=exampleFsSD}],credential-security-factory=krbSF}])
-
-
-
-
-
Configure an application-security-domain in the Undertow subsystem:
-
-
-
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-krb-http-auth)
-
-
-
-
-
Configure your application’s web.xml, jboss-web.xml and
-
-

jboss-deployment-structure.xml.

-
-
-

Your application’s web.xml and jboss-web.xml must be updated to use -the application-security-domain you configured in WildFly. An example -of this is available in the -Configure Applications to Use Elytron for Authentication -section.

-
-
-

In addition, you need to update your web.xml to use SPNEGO as its -authentication method.

-
-
-
-
<login-config>
-  <auth-method>SPNEGO</auth-method>
-  <realm-name>exampleApplicationDomain</realm-name>
-</login-config>
-
-
-
-
-
-

4.1.7. Configure Authentication with a Form as a Fallback for Kerberos

-
-
Configure kerberos-based authentication.
-
-

Configuring kerberos-based authentication is covered in a previous -section.

-
-
-
-
Add a mechanism for FORM authentication in the
-
-

http-authentication-factory.

-
-
-

You can use the existing http-authentication-factory you configured -for kerberos-based authentication and and an additional mechanism for -FORM authentication.

-
-
-
-
/subsystem=elytron/http-authentication-factory=example-krb-http-auth:list-add(name=mechanism-configurations, value={mechanism-name=FORM})
-
-
-
-
-
Add additional fallback principals.
-
-

The existing configuration for kerberos-based authentication should -already have a security realm configured for mapping principals from -kerberos token to roles for the application. You can add additional -users for fallback authentication to that realm. For example if you used -a filesystem-realm, you can simply create a new user with the -appropriate roles:

-
-
-
-
/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=fallbackUser1)
-/subsystem=elytron/filesystem-realm=exampleFsRealm:set-password(identity=fallbackUser1,clear={password="password123"})
-/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=fallbackUser1,name=Roles,value=["Admin","Guest"])
-
-
-
-
-
Update the web.xml for FORM fallback.
-
-

You need to update the web.xml to use the value SPNEGO,FORM for the -auth-method, which will use FORM as a fallback authentication method -if SPNEGO fails. You also need to specify the location of your login -and error pages.

-
-
-
-
<login-config>
-  <auth-method>SPNEGO,FORM</auth-method>
-  <realm-name>exampleApplicationDomain</realm-name>
-  <form-login-config>
-    <form-login-page>/login.jsp</form-login-page>
-    <form-error-page>/error.jsp</form-error-page>
-  </form-login-config>
-</login-config>
-
-
-
-
-
-

4.1.8. Configure Applications to Use Elytron for Authentication

-
-

After you have configured the elytron subsystem -for authentication, you need to configure your application to use it.

-
-
-
Configure your application’s web.xml.
-
-

Your application’s web.xml needs to be configured to use the -appropriate authentication method. When using elytron, this is defined -in the http-authentication-factory you created.

-
-
-

Example web.xml with BASIC Authentication

-
-
-
-
<web-app>
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>secure</web-resource-name>
-      <url-pattern>/secure/*</url-pattern>
-    </web-resource-collection>
-    <auth-constraint>
-      <role-name>Admin</role-name>
-    </auth-constraint>
-  </security-constraint>
-  <security-role>
-    <description>The role that is required to log in to /secure/*</description>
-    <role-name>Admin</role-name>
-  </security-role>
-  <login-config>
-    <auth-method>BASIC</auth-method>
-    <realm-name>exampleApplicationDomain</realm-name>
-  </login-config>
-</web-app>
-
-
-
-

BASIC Authentication can be configured to be silent

-
-
-
-
<auth-method>BASIC?silent=true</auth-method>
-
-
-
-

Basic authentication in silent mode will send challenge to authenticate only if the request -contained authorization header, otherwise it is assumed another method will send the challenge.

-
-
-
-
Configure your application to use a security domain.
-
-

You can configure your application’s jboss-web.xml to specify the -security domain you want to use for authentication. When using the -elytron subsystem, this is defined when you created the -application-security-domain.

-
-
-

Example jboss-web.xml

-
-
-
-
<jboss-web>
-  <security-domain>exampleApplicationDomain</security-domain>
-</jboss-web>
-
-
-
-

Using jboss-web.xml allows you to configure the security domain for a -single application only. Alternatively, you can specify a default -security domain for all applications using the undertow subsystem. -This allows you to omit using jboss-web.xml to configure a security -domain for an individual application.

-
-
-
-
/subsystem=undertow:write-attribute(name=default-security-domain, value="exampleApplicationDomain")
-
-
-
-

IMPORTANT: Setting default-security-domain in the undertow -subsystem will apply to ALL applications. If default-security-domain -is set and an application specifies a security domain in a -jboss-web.xml file, the configuration in jboss-web.xml will override -the default-security-domain in the undertow subsystem.

-
-
-
-
-

4.1.9. Override an Application’s Authentication Configuration

-
-

You can override the authentication configuration of an application with -one configured in WildFly. To do this, use the -override-deployment-configuration property in the -application-security-domain section of the undertow subsystem:

-
-
-
-
/subsystem=undertow/application-security-domain=exampleApplicationDomain:write-attribute(name=override-deployment-config,value=true)
-
-
-
-

For example, an application is configured to use FORM authentication -with the exampleApplicationDomain in its jboss-web.xml.

-
-
-

Example jboss-web.xml

-
-
-
-
<login-config>
-  <auth-method>FORM</auth-method>
-  <realm-name>exampleApplicationDomain</realm-name>
-</login-config>
-
-
-
-

By enabling override-deployment-configuration, you can create a new -http-authentication-factory that specifies a different authentication -mechanism such as BASIC.

-
-
-

Example http-authentication-factory

-
-
-
-
/subsystem=elytron/http-authentication-factory=exampleHttpAuth:read-resource()
-{
-    "outcome" => "success",
-    "result" => {
-        "http-server-mechanism-factory" => "global",
-        "mechanism-configurations" => [{
-            "mechanism-name" => "BASIC",
-            "mechanism-realm-configurations" => [{"realm-name" => "exampleApplicationDomain"}]
-        }],
-        "security-domain" => "exampleSD"
-    }
-}
-
-
-
-

This will override the authentication mechanism defined in the -application’s jboss-web.xml and attempt to authenticate a user using -BASIC instead of FORM.

-
-
-
-

4.1.10. Create and Use a Credential Store

-
-
Create credential store.
-
-
-
/subsystem=elytron/credential-store=exampleCS:add(relative-to=jboss.server.data.dir, location=example.jceks,create=true,credential-reference={clear-text=cs-secret})
-
-
-
-
-
Add a credential to a credential store.
-
-
-
/subsystem=elytron/credential-store=exampleCS:add-alias(alias=keystorepw,secret-value=secret)
-
-
-
-
-
List all credentials in a credential store.
-
-
-
/subsystem=elytron/credential-store=exampleCS:read-aliases()
-{
-    "outcome" => "success",
-    "result" => ["keystorepw"]
-}
-
-
-
-
-
Remove a credential from a credential store.
-
-
-
/subsystem=elytron/credential-store=exampleCS:remove-alias(alias=keystorepw)
-
-
-
-
-
Use a credential store.
-
-
-
/subsystem=elytron/key-store=twoWayKS:write-attribute(name=credential-reference,value={store=exampleCS,alias=keystorepw})
-
-
-
-
-
-
-

4.2. Set up and Configure Authentication for the Management Interfaces

-
-

4.2.1. Secure the Management Interfaces with a New Identity Store

-
-
Create a security domain and any supporting security realms,
-
-

decoders, or mappers for your identity store.

-
-
-

This process is covered in a previous section. For example, if you -wanted to secure the management interfaces using a filesystem-based -identity store, you would follow the steps in -Configure -Authentication with a Filesystem-Based Identity Store.

-
-
-
-
Create an http-authentication-factory or
-
-

sasl-authentication-factory.

-
-
-

Example http-authentication-factory

-
-
-
-
/subsystem=elytron/http-authentication-factory=example-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleSD,mechanism-configurations=[{mechanism-name=DIGEST,mechanism-realm-configurations=[{realm-name=exampleManagementRealm}]}])
-
-
-
-

Example sasl-authentication-factory

-
-
-
-
/subsystem=elytron/sasl-authentication-factory=example-sasl-auth:add(sasl-server-factory=configured,security-domain=exampleSD,mechanism-configurations=[{mechanism-name=DIGEST-MD5,mechanism-realm-configurations=[{realm-name=exampleManagementRealm}]}])
-
-
-
-
-
Update the management interfaces to use your
-
-

http-authentication-factory or sasl-authentication-factory.

-
-
-

Example update http-authentication-factory

-
-
-
-
/core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=example-http-auth)
-{
-   "outcome" => "success",
-   "response-headers" => {
-       "operation-requires-reload" => true,
-       "process-state" => "reload-required"
-   }
-}
- 
-reload
-
-
-
-

Example update sasl-authentication-factory

-
-
-
-
/core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=example-sasl-auth)
-{
-   "outcome" => "success",
-   "response-headers" => {
-       "operation-requires-reload" => true,
-       "process-state" => "reload-required"
-   }
-}
- 
-reload
-
-
-
-
-
-

4.2.2. Silent Authentication

-
-

By default, WildFly provides an authentication mechanism for local -users, also know as silent authentication, through the local security -realm.

-
-
-

Silent authentication must be used via a sasl-authentication-factory.

-
-
-

IMPORTANT: When enabling silent authentication, you must ensure the -security domain referenced by your sasl-authentication-factory -references a security realm that contains the $local user. By default, -WildFly provides the local identity realm that provides this user.

-
-
-
Add silent authentication to an existing
-
-

sasl-authentication-factory.

-
-
-
-
/subsystem=elytron/sasl-authentication-factory=example-sasl-auth:list-add(name=mechanism-configurations, value={mechanism-name=JBOSS-LOCAL-USER, realm-mapper=local})
- 
-reload
-
-
-
-
-
Create a new sasl-server-factory with silent authentication.
-
-
-
/subsystem=elytron/sasl-authentication-factory=example-sasl-auth:add(sasl-server-factory=configured,security-domain=exampleSD,mechanism-configurations=[{mechanism-name=DIGEST-MD5,mechanism-realm-configurations=[{realm-name=exampleManagementRealm}]},{mechanism-name=JBOSS-LOCAL-USER, realm-mapper=local}])
- 
-reload
-
-
-
-
-
Remove silent authentication from an existing sasl-server-factory:
-
-
-
/subsystem=elytron/sasl-authentication-factory=managenet-sasl-authentication:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "mechanism-configurations" => [
-            {
-                "mechanism-name" => "JBOSS-LOCAL-USER",
-                "realm-mapper" => "local"
-            },
-            {
-                "mechanism-name" => "DIGEST-MD5",
-                "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
-            }
-        ],
-        "sasl-server-factory" => "configured",
-        "security-domain" => "ManagementDomain"
-    }
-}
- 
-/subsystem=elytron/sasl-authentication-factory=temp-sasl-authentication:list-remove(name=mechanism-configurations,index=0)
- 
-reload
-
-
-
-
-
-

4.2.3. Using RBAC with Elytron

-
-

RBAC can be configured to automatically assign or exclude roles for -users that are members of groups. This is configured in the -access-control section of the core management. When the management -interfaces are secured with the elytron subsystem, and users are -assigned groups when they authenticate. You can also configure roles to -be assigned to authenticated users in a variety of ways using the -elytron subsystem, for example using a role mapper or a role decoder.

-
-
-
-
-

4.3. Configure SSL/TLS

-
-

4.3.1. Enable One-way SSL/TLS for Applications

-
-

There are a couple ways to enable one-way SSL/TLS for deployed applications.

-
-
-
Using a security command:
-
-

The security enable-ssl-http-server command can be used to enable one-way -SSL/TLS for deployed applications. Example of wizard usage:

-
-
-
-
security enable-ssl-http-server --interactive --override-ssl-context
-Please provide required pieces of information to enable SSL:
-Key-store file name (default default-server.keystore): keystore.pkcs12
-Password (blank generated): secret
-What is your first and last name? [Unknown]: localhost
-What is the name of your organizational unit? [Unknown]:
-What is the name of your organization? [Unknown]:
-What is the name of your City or Locality? [Unknown]:
-What is the name of your State or Province? [Unknown]:
-What is the two-letter country code for this unit? [Unknown]:
-Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
-Validity (in days, blank default): 365
-Alias (blank generated): localhost
-Enable SSL Mutual Authentication y/n (blank n): n
-
-SSL options:
-key store file: keystore.pkcs12
-distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
-password: secret
-validity: 365
-alias: localhost
-Server keystore file keystore.pkcs12, certificate file keystore.pem and keystore.csr file
-will be generated in server configuration directory.
-Do you confirm y/n: y
-
-
-
-

NB: Once the command is executed, the CLI will reload the server.

-
-
-

HTTPS is now enabled for applications.

-
-
-
-
Using Elytron subsystem commands:
-
-

You can also use the Elytron subsystem, along with the Undertow subsystem, to -enable HTTPS for deployed applications.

-
-
-
Configure a key-store in WildFly:
-
-
-
/subsystem=elytron/key-store=httpsKS:add(path=/path/to/keystore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
-
-
-
-

The previous command uses an absolute path to the keystore. -Alternatively you can use the relative-to attribute to specify the -base directory variable and path specify a relative path. -Also, in case of file-based keystore the type attribute can be omitted and -the keystore type will be automatically detected.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:add(path=keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
-
-
-
-

If the keystore file does not exist yet, the following commands can be used to -generate an example key pair:

-
-
-
-
/subsystem=elytron/key-store=httpsKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")
-/subsystem=elytron/key-store=httpsKS:store()
-
-
-
-
-
-
List all aliases (recursively) in a key store.
-
-
-
/subsystem=elytron/key-store=httpsKS:read-aliases(recursive=true,verbose=true)
-{
-    "outcome" => "success",
-    "result" => {"localhost" => {
-        "alias" => "localhost",
-        "entry-type" => "PrivateKeyEntry",
-        "creation-date" => "2022-12-28T15:58:04.818+0530",
-        "certificate-chain" => [{
-            "type" => "X.509",
-            "algorithm" => "RSA",
-            "format" => "X.509",
-            "public-key" => "30:82:01:22:30:0d:06:09:2a:86:48:86:f7:0d:01:01:01:
-05:00:03:82:01:0f:00:30:82:01:0a:02:82:01:01:00:9e:b2:6f:4e:92:e9:f3:69:eb:9c:0e
-:63:1e:d6:d4:4b:2b:5d:46:e2:68:fd:96:83:a1:3b:83:a2:70:a8:6e:e1:2e:8d:e9:8d:ed:9
-d:d3:f3:56:26:00:29:32:a0:95:61:54:6f:35:95:41:95:76:73:34:46:db:4b:75:3c:f1:64:
-91:4a:a6:61:89:80:8c:6b:87:75:8d:d1:d1:56:bb:5e:1b:ed:97:5a:b4:ac:1e:16:06:07:e5
-:cb:6c:a8:c5:66:16:e2:92:6a:db:a6:b0:09:d2:7d:dc:fa:68:f3:2c:c5:c2:a6:f2:bd:73:f
-5:3b:94:17:16:2f:d0:8a:e6:d0:f3:53:c4:71:c6:31:61:9b:87:9d:5e:63:d8:c3:e3:81:f8:
-6f:f6:35:7b:85:9c:81:c9:94:91:d3:5d:bc:89:3b:dc:7d:c2:ae:d2:ca:b4:61:6f:04:5b:4f
-:8f:c6:ac:e0:49:de:5f:bf:84:f5:38:b1:07:48:1f:17:fb:72:15:ac:31:7a:13:f8:58:aa:6
-7:b0:67:b1:2b:99:c0:7a:a7:f6:42:d3:f9:f5:33:90:2a:9c:7c:78:73:7f:74:54:91:04:c2:
-51:ff:59:11:cd:7d:d7:61:e9:5c:c6:c7:d1:a1:f2:f5:7b:41:94:c4:cd:8d:5e:06:f1:6a:f4
-:72:24:37:be:27:02:03:01:00:01",
-            "sha-1-digest" => "70:46:1d:af:1a:5e:30:34:e9:dd:53:f4:38:b6:3e:89:5
-a:1c:f9:90",
-            "sha-256-digest" => "61:43:2e:6f:c0:ed:91:b1:3a:20:51:fc:2b:e9:33:d2
-:66:d2:a6:f2:32:5c:ca:91:14:67:7b:f2:4e:55:ed:77",
-            "encoded" => "30:82:02:cb:30:82:01:b5:a0:03:02:01:02:02:08:0c:e1:64:
-83:a0:95:28:72:30:0b:06:09:2a:86:48:86:f7:0d:01:01:0b:30:14:31:12:30:10:06:03:55
-:04:03:13:09:6c:6f:63:61:6c:68:6f:73:74:30:22:18:0f:32:30:32:32:31:32:32:38:31:3
-0:32:38:30:34:5a:18:0f:32:30:32:33:31:32:32:38:31:30:32:38:30:34:5a:30:14:31:12:
-30:10:06:03:55:04:03:13:09:6c:6f:63:61:6c:68:6f:73:74:30:82:01:22:30:0d:06:09:2a
-:86:48:86:f7:0d:01:01:01:05:00:03:82:01:0f:00:30:82:01:0a:02:82:01:01:00:9e:b2:6
-f:4e:92:e9:f3:69:eb:9c:0e:63:1e:d6:d4:4b:2b:5d:46:e2:68:fd:96:83:a1:3b:83:a2:70:
-a8:6e:e1:2e:8d:e9:8d:ed:9d:d3:f3:56:26:00:29:32:a0:95:61:54:6f:35:95:41:95:76:73
-:34:46:db:4b:75:3c:f1:64:91:4a:a6:61:89:80:8c:6b:87:75:8d:d1:d1:56:bb:5e:1b:ed:9
-7:5a:b4:ac:1e:16:06:07:e5:cb:6c:a8:c5:66:16:e2:92:6a:db:a6:b0:09:d2:7d:dc:fa:68:
-f3:2c:c5:c2:a6:f2:bd:73:f5:3b:94:17:16:2f:d0:8a:e6:d0:f3:53:c4:71:c6:31:61:9b:87
-:9d:5e:63:d8:c3:e3:81:f8:6f:f6:35:7b:85:9c:81:c9:94:91:d3:5d:bc:89:3b:dc:7d:c2:a
-e:d2:ca:b4:61:6f:04:5b:4f:8f:c6:ac:e0:49:de:5f:bf:84:f5:38:b1:07:48:1f:17:fb:72:
-15:ac:31:7a:13:f8:58:aa:67:b0:67:b1:2b:99:c0:7a:a7:f6:42:d3:f9:f5:33:90:2a:9c:7c
-:78:73:7f:74:54:91:04:c2:51:ff:59:11:cd:7d:d7:61:e9:5c:c6:c7:d1:a1:f2:f5:7b:41:9
-4:c4:cd:8d:5e:06:f1:6a:f4:72:24:37:be:27:02:03:01:00:01:a3:21:30:1f:30:1d:06:03:
-55:1d:0e:04:16:04:14:ac:99:db:c3:82:18:60:51:92:7d:75:51:ba:b4:a9:65:90:0e:7d:13
-:30:0b:06:09:2a:86:48:86:f7:0d:01:01:0b:03:82:01:01:00:97:83:30:22:ed:2e:4e:55:3
-3:73:4c:e2:56:d2:37:0a:47:39:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:
-f1:92:42:64:a5:ee:56:ca:f1:da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0
-:f6:80:c8:05:1b:29:c0:66:14:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:4
-6:50:9c:e3:d5:6b:0b:48:b4:7f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:
-63:3c:a4:8a:c5:f8:d1:6e:ae:eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a
-:30:cc:5b:c0:fc:70:f2:2b:50:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6
-b:04:02:b5:49:0c:7f:a1:a0:ef:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:
-cf:0f:85:3a:c8:18:89:22:68:04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64
-:59:63:50:88:f4:05:9e:e6:fa:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:6
-9:d9:89:0b:51:99:00:35",
-            "subject" => "CN=localhost",
-            "issuer" => "CN=localhost",
-            "not-before" => "2022-12-28T15:58:04.000+0530",
-            "not-after" => "2023-12-28T15:58:04.000+0530",
-            "serial-number" => "0c:e1:64:83:a0:95:28:72",
-            "signature-algorithm" => "SHA256withRSA",
-            "signature" => "97:83:30:22:ed:2e:4e:55:33:73:4c:e2:56:d2:37:0a:47:3
-9:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:f1:92:42:64:a5:ee:56:ca:f1:
-da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0:f6:80:c8:05:1b:29:c0:66:14
-:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:46:50:9c:e3:d5:6b:0b:48:b4:7
-f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:63:3c:a4:8a:c5:f8:d1:6e:ae:
-eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a:30:cc:5b:c0:fc:70:f2:2b:50
-:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6b:04:02:b5:49:0c:7f:a1:a0:e
-f:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:cf:0f:85:3a:c8:18:89:22:68:
-04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64:59:63:50:88:f4:05:9e:e6:fa
-:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:69:d9:89:0b:51:99:00:35",
-            "version" => "v3"
-        }]
-    }}
-}
-
-
-
-
-
List all aliases (recursively, non-verbose) in a key store.
-
-
-
/subsystem=elytron/key-store=httpsKS:read-aliases(recursive=true, verbose=false)
-{
-    "outcome" => "success",
-    "result" => {"localhost" => {
-        "alias" => "localhost",
-        "entry-type" => "PrivateKeyEntry",
-        "creation-date" => "2022-12-28T15:58:04.818+0530",
-        "certificate-chain" => [{
-            "type" => "X.509",
-            "algorithm" => "RSA",
-            "format" => "X.509",
-            "sha-1-digest" => "70:46:1d:af:1a:5e:30:34:e9:dd:53:f4:38:b6:3e:89:5
-a:1c:f9:90",
-            "sha-256-digest" => "61:43:2e:6f:c0:ed:91:b1:3a:20:51:fc:2b:e9:33:d2
-:66:d2:a6:f2:32:5c:ca:91:14:67:7b:f2:4e:55:ed:77",
-            "subject" => "CN=localhost",
-            "issuer" => "CN=localhost",
-            "not-before" => "2022-12-28T15:58:04.000+0530",
-            "not-after" => "2023-12-28T15:58:04.000+0530",
-            "serial-number" => "0c:e1:64:83:a0:95:28:72",
-            "signature-algorithm" => "SHA256withRSA",
-            "signature" => "97:83:30:22:ed:2e:4e:55:33:73:4c:e2:56:d2:37:0a:47:3
-9:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:f1:92:42:64:a5:ee:56:ca:f1:
-da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0:f6:80:c8:05:1b:29:c0:66:14
-:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:46:50:9c:e3:d5:6b:0b:48:b4:7
-f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:63:3c:a4:8a:c5:f8:d1:6e:ae:
-eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a:30:cc:5b:c0:fc:70:f2:2b:50
-:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6b:04:02:b5:49:0c:7f:a1:a0:e
-f:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:cf:0f:85:3a:c8:18:89:22:68:
-04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64:59:63:50:88:f4:05:9e:e6:fa
-:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:69:d9:89:0b:51:99:00:35",
-            "version" => "v3"
-        }]
-    }}
-}
-
-
-
-
-
Read an alias in a key store.
-
-
-
/subsystem=elytron/key-store=httpsKS:read-alias(alias="localhost")
-{
-    "outcome" => "success",
-    "result" => {
-        "alias" => "localhost",
-        "entry-type" => "PrivateKeyEntry",
-        "creation-date" => "2022-12-28T15:58:04.818+0530",
-        "certificate-chain" => [{
-            "type" => "X.509",
-            "algorithm" => "RSA",
-            "format" => "X.509",
-            "public-key" => "30:82:01:22:30:0d:06:09:2a:86:48:86:f7:0d:01:01:01:
-05:00:03:82:01:0f:00:30:82:01:0a:02:82:01:01:00:9e:b2:6f:4e:92:e9:f3:69:eb:9c:0e
-:63:1e:d6:d4:4b:2b:5d:46:e2:68:fd:96:83:a1:3b:83:a2:70:a8:6e:e1:2e:8d:e9:8d:ed:9
-d:d3:f3:56:26:00:29:32:a0:95:61:54:6f:35:95:41:95:76:73:34:46:db:4b:75:3c:f1:64:
-91:4a:a6:61:89:80:8c:6b:87:75:8d:d1:d1:56:bb:5e:1b:ed:97:5a:b4:ac:1e:16:06:07:e5
-:cb:6c:a8:c5:66:16:e2:92:6a:db:a6:b0:09:d2:7d:dc:fa:68:f3:2c:c5:c2:a6:f2:bd:73:f
-5:3b:94:17:16:2f:d0:8a:e6:d0:f3:53:c4:71:c6:31:61:9b:87:9d:5e:63:d8:c3:e3:81:f8:
-6f:f6:35:7b:85:9c:81:c9:94:91:d3:5d:bc:89:3b:dc:7d:c2:ae:d2:ca:b4:61:6f:04:5b:4f
-:8f:c6:ac:e0:49:de:5f:bf:84:f5:38:b1:07:48:1f:17:fb:72:15:ac:31:7a:13:f8:58:aa:6
-7:b0:67:b1:2b:99:c0:7a:a7:f6:42:d3:f9:f5:33:90:2a:9c:7c:78:73:7f:74:54:91:04:c2:
-51:ff:59:11:cd:7d:d7:61:e9:5c:c6:c7:d1:a1:f2:f5:7b:41:94:c4:cd:8d:5e:06:f1:6a:f4
-:72:24:37:be:27:02:03:01:00:01",
-            "sha-1-digest" => "70:46:1d:af:1a:5e:30:34:e9:dd:53:f4:38:b6:3e:89:5
-a:1c:f9:90",
-            "sha-256-digest" => "61:43:2e:6f:c0:ed:91:b1:3a:20:51:fc:2b:e9:33:d2
-:66:d2:a6:f2:32:5c:ca:91:14:67:7b:f2:4e:55:ed:77",
-            "encoded" => "30:82:02:cb:30:82:01:b5:a0:03:02:01:02:02:08:0c:e1:64:
-83:a0:95:28:72:30:0b:06:09:2a:86:48:86:f7:0d:01:01:0b:30:14:31:12:30:10:06:03:55
-:04:03:13:09:6c:6f:63:61:6c:68:6f:73:74:30:22:18:0f:32:30:32:32:31:32:32:38:31:3
-0:32:38:30:34:5a:18:0f:32:30:32:33:31:32:32:38:31:30:32:38:30:34:5a:30:14:31:12:
-30:10:06:03:55:04:03:13:09:6c:6f:63:61:6c:68:6f:73:74:30:82:01:22:30:0d:06:09:2a
-:86:48:86:f7:0d:01:01:01:05:00:03:82:01:0f:00:30:82:01:0a:02:82:01:01:00:9e:b2:6
-f:4e:92:e9:f3:69:eb:9c:0e:63:1e:d6:d4:4b:2b:5d:46:e2:68:fd:96:83:a1:3b:83:a2:70:
-a8:6e:e1:2e:8d:e9:8d:ed:9d:d3:f3:56:26:00:29:32:a0:95:61:54:6f:35:95:41:95:76:73
-:34:46:db:4b:75:3c:f1:64:91:4a:a6:61:89:80:8c:6b:87:75:8d:d1:d1:56:bb:5e:1b:ed:9
-7:5a:b4:ac:1e:16:06:07:e5:cb:6c:a8:c5:66:16:e2:92:6a:db:a6:b0:09:d2:7d:dc:fa:68:
-f3:2c:c5:c2:a6:f2:bd:73:f5:3b:94:17:16:2f:d0:8a:e6:d0:f3:53:c4:71:c6:31:61:9b:87
-:9d:5e:63:d8:c3:e3:81:f8:6f:f6:35:7b:85:9c:81:c9:94:91:d3:5d:bc:89:3b:dc:7d:c2:a
-e:d2:ca:b4:61:6f:04:5b:4f:8f:c6:ac:e0:49:de:5f:bf:84:f5:38:b1:07:48:1f:17:fb:72:
-15:ac:31:7a:13:f8:58:aa:67:b0:67:b1:2b:99:c0:7a:a7:f6:42:d3:f9:f5:33:90:2a:9c:7c
-:78:73:7f:74:54:91:04:c2:51:ff:59:11:cd:7d:d7:61:e9:5c:c6:c7:d1:a1:f2:f5:7b:41:9
-4:c4:cd:8d:5e:06:f1:6a:f4:72:24:37:be:27:02:03:01:00:01:a3:21:30:1f:30:1d:06:03:
-55:1d:0e:04:16:04:14:ac:99:db:c3:82:18:60:51:92:7d:75:51:ba:b4:a9:65:90:0e:7d:13
-:30:0b:06:09:2a:86:48:86:f7:0d:01:01:0b:03:82:01:01:00:97:83:30:22:ed:2e:4e:55:3
-3:73:4c:e2:56:d2:37:0a:47:39:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:
-f1:92:42:64:a5:ee:56:ca:f1:da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0
-:f6:80:c8:05:1b:29:c0:66:14:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:4
-6:50:9c:e3:d5:6b:0b:48:b4:7f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:
-63:3c:a4:8a:c5:f8:d1:6e:ae:eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a
-:30:cc:5b:c0:fc:70:f2:2b:50:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6
-b:04:02:b5:49:0c:7f:a1:a0:ef:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:
-cf:0f:85:3a:c8:18:89:22:68:04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64
-:59:63:50:88:f4:05:9e:e6:fa:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:6
-9:d9:89:0b:51:99:00:35",
-            "subject" => "CN=localhost",
-            "issuer" => "CN=localhost",
-            "not-before" => "2022-12-28T15:58:04.000+0530",
-            "not-after" => "2023-12-28T15:58:04.000+0530",
-            "serial-number" => "0c:e1:64:83:a0:95:28:72",
-            "signature-algorithm" => "SHA256withRSA",
-            "signature" => "97:83:30:22:ed:2e:4e:55:33:73:4c:e2:56:d2:37:0a:47:3
-9:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:f1:92:42:64:a5:ee:56:ca:f1:
-da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0:f6:80:c8:05:1b:29:c0:66:14
-:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:46:50:9c:e3:d5:6b:0b:48:b4:7
-f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:63:3c:a4:8a:c5:f8:d1:6e:ae:
-eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a:30:cc:5b:c0:fc:70:f2:2b:50
-:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6b:04:02:b5:49:0c:7f:a1:a0:e
-f:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:cf:0f:85:3a:c8:18:89:22:68:
-04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64:59:63:50:88:f4:05:9e:e6:fa
-:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:69:d9:89:0b:51:99:00:35",
-            "version" => "v3"
-        }]
-    }
-}
-
-
-
-
-
Read an alias in a key store (non-verbose).
-
-
-
/subsystem=elytron/key-store=httpsKS:read-alias(alias="localhost",verbose=false)
-{
-    "outcome" => "success",
-    "result" => {
-        "alias" => "localhost",
-        "entry-type" => "PrivateKeyEntry",
-        "creation-date" => "2022-12-28T15:58:04.818+0530",
-        "certificate-chain" => [{
-            "type" => "X.509",
-            "algorithm" => "RSA",
-            "format" => "X.509",
-            "sha-1-digest" => "70:46:1d:af:1a:5e:30:34:e9:dd:53:f4:38:b6:3e:89:5
-a:1c:f9:90",
-            "sha-256-digest" => "61:43:2e:6f:c0:ed:91:b1:3a:20:51:fc:2b:e9:33:d2
-:66:d2:a6:f2:32:5c:ca:91:14:67:7b:f2:4e:55:ed:77",
-            "subject" => "CN=localhost",
-            "issuer" => "CN=localhost",
-            "not-before" => "2022-12-28T15:58:04.000+0530",
-            "not-after" => "2023-12-28T15:58:04.000+0530",
-            "serial-number" => "0c:e1:64:83:a0:95:28:72",
-            "signature-algorithm" => "SHA256withRSA",
-            "signature" => "97:83:30:22:ed:2e:4e:55:33:73:4c:e2:56:d2:37:0a:47:3
-9:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:f1:92:42:64:a5:ee:56:ca:f1:
-da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0:f6:80:c8:05:1b:29:c0:66:14
-:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:46:50:9c:e3:d5:6b:0b:48:b4:7
-f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:63:3c:a4:8a:c5:f8:d1:6e:ae:
-eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a:30:cc:5b:c0:fc:70:f2:2b:50
-:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6b:04:02:b5:49:0c:7f:a1:a0:e
-f:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:cf:0f:85:3a:c8:18:89:22:68:
-04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64:59:63:50:88:f4:05:9e:e6:fa
-:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:69:d9:89:0b:51:99:00:35",
-            "version" => "v3"
-        }]
-    }
-}
-
-
-
-
Configure a key-manager that references your key-store:
-
-
-
/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret})
-
-
-
-
-
Configure a server-ssl-context that references your key-manager:
-
-
-
/subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.2"])
-
-
-
-

IMPORTANT: You need to determine what SSL/TLS protocols you want to -support. The example commands above uses TLSv1.2.

-
-
-
-
Check and see if the https-listener is configured to use a legacy security realm for its SSL configuration:
-
-
-
/subsystem=undertow/server=default-server/https-listener=https:read-attribute(name=security-realm)
-{
-    "outcome" => "success",
-    "result" => "ApplicationRealm"
-}
-
-
-
-

The above command shows that the https-listener is configured to use -the ApplicationRealm legacy security realm for its SSL configuration. -Undertow cannot reference both a legacy security realm and an -ssl-context in Elytron at the same time so you must remove the -reference to the legacy security realm. Also there has to be always -configured either ssl-context or security-realm. Thus when changing -between those, you have to use batch operation:

-
-
-

Remove the reference to the legacy security realm and update the -https-listener to use the ssl-context from Elytron :

-
-
-
-
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=httpsSSC)
-
-
-
-
-
Reload the server:
-
-
-
reload
-
-
-
-

HTTPS is now enabled for applications.

-
-
-
-
-
-

4.3.2. Enable Two-way SSL/TLS in WildFly for Applications

-
-

First, obtain or generate your client keystore.

-
-
-
-
$ keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -validity 365 -keystore client.keystore.pkcs12 -dname "CN=client" -keypass secret -storepass secret
-
-
-
-

Export the client certificate:

-
-
-
-
$ keytool -exportcert  -keystore client.keystore.pkcs12 -alias client -keypass secret -storepass secret -file /path/to/client.cer
-
-
-
-

There are a couple ways to enable two-way SSL/TLS for deployed applications.

-
-
-
Using a security command:
-
-

The security enable-ssl-http-server command can be used to enable two-way -SSL/TLS for the deployed applications. Example of wizard usage:

-
-
- - - - - -
- - -
-

In the following example, we enter n when propmted with Validate certificate because the example uses a self-signed certificate. If you use Cretificate Authority (CA) signed certificates, enter y when prompted.

-
-
-
-
-
-
security enable-ssl-http-server --interactive --override-ssl-context
-Please provide required pieces of information to enable SSL:
-Key-store file name (default default-server.keystore): server.keystore.pkcs12
-Password (blank generated): secret
-What is your first and last name? [Unknown]: localhost
-What is the name of your organizational unit? [Unknown]:
-What is the name of your organization? [Unknown]:
-What is the name of your City or Locality? [Unknown]:
-What is the name of your State or Province? [Unknown]:
-What is the two-letter country code for this unit? [Unknown]:
-Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
-Validity (in days, blank default): 365
-Alias (blank generated): localhost
-Enable SSL Mutual Authentication y/n (blank n): y
-Client certificate (path to pem file): /path/to/client.cer
-Validate certificate y/n (blank y): n
-Trust-store file name (management.truststore): server.truststore.pkcs12
-Password (blank generated): secret
-
-SSL options:
-key store file: server.keystore.pkcs12
-distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
-password: secret
-validity: 365
-alias: localhost
-client certificate: /path/to/client.cer
-trust store file: server.trustore.pkcs12
-trust store password: secret
-Server keystore file server.keystore.pkcs12, certificate file server.pem and server.csr file will be generated in server configuration directory.
-Server truststore file server.trustore.pkcs12 will be generated in server configuration directory.
-Do you confirm y/n: y
-
-
-
-

NB: Once the command is executed, the CLI will reload the server. To complete -the two-way SSL/TLS authentication, you need to -import the server certificate -into the client truststore and -configure your client -to present the client certificate.

-
-
-
-
Using Elytron subsystem commands:
-
-

You can also use the Elytron subsystem, along with the Undertow subsystem, -to enable two-way SSL/TLS for deployed applications.

-
-
-
Obtain or generate your key stores:
-
-

Before enabling HTTPS in WildFly, you must obtain or generate the server key -store and trust store you plan on using. To generate an example key store and -trust store, use the following commands.

-
-
-

Create a server key-store:

-
-
-
-
/subsystem=elytron/key-store=twoWayKS:add(path=/path/to/server.keystore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
-/subsystem=elytron/key-store=twoWayKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")
-/subsystem=elytron/key-store=twoWayKS:store()
-
-
-
-

NOTE
-The first command above uses an absolute path to the keystore. -Alternatively you can use the relative-to attribute to specify the -base directory variable and path specify a relative path.

-
-
-
-
/subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
-
-
-
-

Export the server certificate:

-
-
-
-
/subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
-
-
-
-

Create a key-store for the server truststore and import the client certificate -into the server truststore:

-
-
- - - - - -
- - -
-

In the following example, we enter validate=false in the import-certificate command because the example uses a self-signed certificate. If you use Certificate Authority (CA) signed certificates, omit validate=false.

-
-
-
-
-
-
/subsystem=elytron/key-store=twoWayTS:add(path=/path/to/server.truststore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
-/subsystem=elytron/key-store=twoWayTS:import-certificate(alias=client,path=/path/to/client.cer,credential-reference={clear-text=secret},trust-cacerts=true,validate=false)
-/subsystem=elytron/key-store=twoWayTS:store()
-
-
-
-
-
Configure a key-manager that references your key store key-store:
-
-
-
/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS,credential-reference={clear-text=secret})
-
-
-
-
-
Configure a trust-manager that references your truststore key-store:
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS)
-
-
-
-
-
Configure a server-ssl-context that references your key-manager, trust-manager, and enables client authentication:
-
-
-
/subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM,protocols=["TLSv1.2"],trust-manager=twoWayTM,need-client-auth=true)
-
-
-
-

IMPORTANT
-You need to determine what SSL/TLS protocols you want to support. The -example commands above uses TLSv1.2.

-
-
-
-
Check and see if the https-listener is configured to use a legacy security realm for its SSL configuration:
-
-
-
/subsystem=undertow/server=default-server/https-listener=https:read-attribute(name=security-realm)
-{
-    "outcome" => "success",
-    "result" => "ApplicationRealm"
-}
-
-
-
-

The above command shows that the https-listener is configured to use -the ApplicationRealm legacy security realm for its SSL configuration. -Undertow cannot reference both a legacy security realm and an -ssl-context in Elytron at the same time so you must remove the -reference to the legacy security realm. Also there has to be always -configured either ssl-context or security-realm. Thus when changing -between those, you have to use batch operation:

-
-
-
-
Remove the reference to the legacy security realm and update the https-listener to use the ssl-context from Elytron:
-
-
-
batch
-/subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
-/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=twoWaySSC)
-run-batch
-
-
-
-
-
Reload the server
-
-
-
reload
-
-
-
-

To complete the two-way SSL/TLS authentication, you need to -import the server certificate -into the client truststore and -configure your client -to present the client certificate.

-
-
-
-
-
Import the server certificate into the client truststore
-
-
-
$ keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file /path/to/server.cer
-
-
-
-
-
Configure your client to use the client certificate
-
-

You need to configure your client to present the trusted client -certificate to the server to complete the two-way SSL/TLS -authentication. For example, if using a browser, you need to import the -trusted certificate into the browser’s truststore.

-
-
-

Two-Way HTTPS is now enabled for applications.

-
-
-
-
-

4.3.3. Configure certificate revocation in trust-manager

-
-
Configure Certificate Revocation List:
-
-

You can configure your trust-manager to use certificate-revocation-list (CRL) to check revocation status of obtained certificates.

-
-
-

The supported attributes for a certificate-revocation-list include:

-
-
-
    -
  • -

    path: The path to the configuration file that is used to initialize the certificate revocation list.

    -
  • -
  • -

    relative-to: The base path of the certificate revocation list file.

    -
  • -
  • -

    maximum-cert-path: The maximum number of non-self-issued intermediate certificates that can exist in a certification path. -The default value is 5. (Deprecated. Use maximum-cert-path in trust-manager).

    -
  • -
-
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=certificate-revocation-list, value={})
-
-
-
-

This will use CRLs obtained from distribution points referenced in your certificates.

-
-
-

NOTE: To use a CRL your trust store must contain the certificate chain in order to check validity of both CRL list.

-
-
-
Override CRL location obtained from certificates:
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=certificate-revocation-list.path, value=intermediate.crl.pem)
-
-
-
-
-
Configure multiple certificate revocation lists
-
-

Alternatively, you can configure multiple certificate revocation lists in your trust-manager using -the certificate-revocation-lists attribute as follows:

-
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=certificate-revocation-lists, value=[{path="PATH/TO/CRL"}, {path="PATH/TO/OTHER/CRL"}])
-
-
-
-

The supported attributes for certificate-revocation-lists include a list of certificate-revocation-list objects containing:

-
-
-
    -
  • -

    path: The path to the configuration file that is used to initialize the certificate revocation list.

    -
  • -
  • -

    relative-to: The base path of the certificate revocation list file.

    -
  • -
-
-
-
-
-
Configure OCSP certificate revocation:
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=ocsp, value={})
-
-
-
-

This will enable OCSP certificate revocation by using OCSP responder inside the certificate. In case the responder is known but OCSP revocation status is unknown, the verification will fail.

-
-
-
Override OCSP responder URI extracted from certificate:
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=ocsp.responder, value="http://example.com/ocsp-responder")
-
-
-
-
-
-
Configure order of revocation mechanisms:
-
-

If both CRL and OCSP are defined, Elytron will use OCSP for obtaining revocation status as first by default. In case you want to prefer CRL:

-
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=ocsp.prefer-crls, value="true")
-
-
-
-
-
Other trust-manager configuration:
-
-
Configure trust-manager to only check leaf certificates for revocation status
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=only-leaf-cert, value="true")
-
-
-
-
-
Configure trust-manager to accept certificates with unknown revocation status
-
-

In case you want to accept certificates with unknown revocation status, you can enable soft-fail behaviour in your trust-manager.

-
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=soft-fail, value=true)
-
-
-
-
-
Set maximum number of intermediate certificates of trust-manager
-
-

Sets the value of the maximum number of non-self-issued intermediate certificates that may exist in a certification path with default value of 5.

-
-
-
-
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=maximum-cert-path, value=10)
-
-
-
-
-
-
-

4.3.4. Enable One-way SSL/TLS for the Management Interfaces

-
-

There are a couple ways to enable one-way SSL/TLS for the management interfaces.

-
-
-
Using a security command:
-
-

The security enable-ssl-management command can be used to enable one-way -SSL/TLS for the management interfaces. Example of wizard usage:

-
-
-
-
security enable-ssl-management --interactive
-Please provide required pieces of information to enable SSL:
-Key-store file name (default management.keystore): keystore.pkcs12
-Password (blank generated): secret
-What is your first and last name? [Unknown]: localhost
-What is the name of your organizational unit? [Unknown]:
-What is the name of your organization? [Unknown]:
-What is the name of your City or Locality? [Unknown]:
-What is the name of your State or Province? [Unknown]:
-What is the two-letter country code for this unit? [Unknown]:
-Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
-Validity (in days, blank default): 365
-Alias (blank generated): localhost
-Enable SSL Mutual Authentication y/n (blank n): n
-
-SSL options:
-key store file: keystore.pkcs12
-distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
-password: secret
-validity: 365
-alias: localhost
-Server keystore file keystore.pkcs12, certificate file keystore.pem and keystore.csr file
-will be generated in server configuration directory.
-Do you confirm y/n :y
-
-
-
-

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

-
-
-

HTTPS is now enabled for the management interfaces.

-
-
-
-
Using Elytron subsystem commands:
-
-

Elytron subsystem commands can also be used to enable one-way SSL/TLS for the -management interfaces.

-
-
-
Configure a key-store:
-
-
-
/subsystem=elytron/key-store=httpsKS:add(path=keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
-
-
-
-

NOTE: The above command uses relative-to to reference the location -of the keystore file. Alternatively, you can specify the full path to -the keystore in path and omit relative-to.

-
-
-

If the keystore file does not exist yet, the following commands can be used to -generate an example key pair:

-
-
-
-
/subsystem=elytron/key-store=httpsKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")
-/subsystem=elytron/key-store=httpsKS:store()
-
-
-
-
-
Create a key-manager and server-ssl-context.
-
-
-
/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret})
- 
-/subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.2"])
-
-
-
-

IMPORTANT: You need to determine what SSL/TLS protocols you want to -support. The example commands above uses TLSv1.2.

-
-
-
-
Enable HTTPS on the management interface.
-
-
-
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=httpsSSC)
- 
-/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
-
-
-
-
-
Reload the WildFly instance.
-
-
-
reload
-
-
-
-

HTTPS is now enabled for the management interfaces.

-
-
-
-
-
-

4.3.5. Enable Two-way SSL/TLS for the Management Interfaces

-
-

First, obtain or generate your client keystore.

-
-
-
-
$ keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -validity 365 -keystore client.keystore.pkcs12 -dname "CN=client" -keypass secret -storepass secret
-
-
-
-

Export your client certificate.

-
-
-
-
$ keytool -exportcert  -keystore client.keystore.pkcs12 -alias client -keypass secret -storepass secret -file /path/to/client.cer
-
-
-
-

There are a couple ways to enable two-way SSL/TLS for the management interfaces.

-
-
-
Using a security command:
-
-

The security enable-ssl-management command can be used to enable two-way -SSL/TLS for the management interfaces. Example of wizard usage:

-
-
- - - - - -
- - -
-

In the following example, we enter n when propmted with Validate certificate because the example uses a self-signed certificate. If you use Certificate Authority (CA) signed certificates, enter y when prompted.

-
-
-
-
-
-
security enable-ssl-management --interactive
-Please provide required pieces of information to enable SSL:
-Key-store file name (default management.keystore): server.keystore.pkcs12
-Password (blank generated): secret
-What is your first and last name? [Unknown]: localhost
-What is the name of your organizational unit? [Unknown]:
-What is the name of your organization? [Unknown]:
-What is the name of your City or Locality? [Unknown]:
-What is the name of your State or Province? [Unknown]:
-What is the two-letter country code for this unit? [Unknown]:
-Is CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
-Validity (in days, blank default): 365
-Alias (blank generated): localhost
-Enable SSL Mutual Authentication y/n (blank n): y
-Client certificate (path to pem file): /path/to/client.cer
-Validate certificate y/n (blank y): n
-Trust-store file name (management.truststore): server.truststore.pkcs12
-Password (blank generated): secret
-
-SSL options:
-key store file: server.keystore.pkcs12
-distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
-password: secret
-validity: 365
-alias: localhost
-client certificate: /path/to/client.cer
-trust store file: server.trustore.pkcs12
-trust store password: secret
-Server keystore file server.keystore.pkcs12, certificate file server.pem and server.csr file will be generated in server configuration directory.
-Server truststore file server.trustore.pkcs12 will be generated in server configuration directory.
-Do you confirm y/n: y
-
-
-
-

NB: Once the command is executed, the CLI will reload the server and -attempt to reconnect to it. To complete the two-way SSL/TLS authentication, -you need to import the server certificate -into the client truststore and -configure your client -to present the client certificate.

-
-
-
-
Using Elytron subsystem commands:
-
-

Elytron subsystem commands can also be used to enable two-way SSL/TLS for the -management interfaces.

-
-
-
Obtain or generate your key stores.
-
-

Before enabling HTTPS in WildFly, you must obtain or generate the server -key store and trust store you plan on using. To generate an example key -store and trust store, use the following commands.

-
-
-

Configure a key-store.

-
-
-
-
/subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
-
-/subsystem=elytron/key-store=twoWayKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")
-
-/subsystem=elytron/key-store=twoWayKS:store()
-
-
-
-

NOTE: The above command uses relative-to to reference the location -of the keystore file. Alternatively, you can specify the full path to -the keystore in path and omit relative-to.

-
-
-

Export your server certificate.

-
-
-
-
/subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
-
-
-
-

Create a key-store for the server trust store and import the client certificate -into the server trust store.

-
-
- - - - - -
- - -
-

In the following example, we enter validate=false in the import-certificate command because the example uses a self-signed certificate. If you use Certificate Authority (CA) signed certificates, omit validate=false.

-
-
-
-
-
-
/subsystem=elytron/key-store=twoWayTS:add(path=server.truststore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
-
-/subsystem=elytron/key-store=twoWayTS:import-certificate(alias=client,path=/path/to/client.cer,credential-reference={clear-text=secret},trust-cacerts=true,validate=false)
-
-/subsystem=elytron/key-store=twoWayTS:store()
-
-
-
-
-
Configure a key-manager, trust-manager, and server-ssl-context for the server key store and trust store.
-
-
-
/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS,credential-reference={clear-text=secret})
- 
-/subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS)
- 
-/subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM,protocols=["TLSv1.2"],trust-manager=twoWayTM,want-client-auth=true,need-client-auth=true)
-
-
-
-

IMPORTANT: You need to determine what SSL/TLS protocols you want to -support. The example commands above uses TLSv1.2.

-
-
-
-
Enable HTTPS on the management interface.
-
-
-
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=twoWaySSC)
- 
-/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
-
-
-
-
-
Reload the WildFly instance.
-
-
-
reload
-
-
-
-

To complete the two-way SSL/TLS authentication, you need to -import the server certificate -into the client truststore and -configure your client -to present the client certificate.

-
-
-
-
-
Import the server certificate into the client truststore.
-
-
-
$ keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file /path/to/server.cer
-
-
-
-
-
Configure your client to use the client certificate.
-
-

You need to configure your client to present the trusted client -certificate to the server to complete the two-way SSL/TLS -authentication. For example, if using a browser, you need to import the -trusted certificate into the browser’s trust store.

-
-
-

Two-way SSL/TLS is now enabled for the management interfaces.

-
-
-
-
-

4.3.6. KeyStore manipulation operations

-
-

It is possible to perform various KeyStore manipulation operations on an -Elytron key-store resource using the management CLI.

-
-
-
Generate a key pair
-
-

The generate-key-pair command generates a key pair and wraps the resulting -public key in a self-signed X.509 certificate. The generated private key and -self-signed certificate will be added to the KeyStore.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:generate-key-pair(alias=example,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=www.example.com")
-
-
-
-
-
Generate a certificate signing request
-
-

The generate-certificate-signing-request command generates a PKCS #10 -certificate signing request using a PrivateKeyEntry from the KeyStore. The -generated certificate signing request will be output to a file.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:generate-certificate-signing-request(alias=example,path=server.csr,relative-to=jboss.server.config.dir,distinguished-name="CN=www.example.com",extensions=[{critical=false,name=KeyUsage,value=digitalSignature}],credential-reference={clear-text=secret})
-
-
-
-
-
Import a certificate or certificate chain
-
-

The import-certificate command imports a certificate or certificate chain -from a file into an entry in the KeyStore.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:import-certificate(alias=example,path=/path/to/certificate_or_chain/file,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},trust-cacerts=true)
-
-
-
-
-
Export a certificate
-
-

The export-certificate command exports a certificate from an entry in the -KeyStore to a file.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:export-certificate(alias=example,path=serverCert.cer,relative-to=jboss.server.config.dir,pem=true)
-
-
-
-
-
Change an alias
-
-

The change-alias command moves an existing KeyStore entry to a new alias.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:change-alias(alias=example,new-alias=newExample,credential-reference={clear-text=secret})
-
-
-
-
-
Store changes made to key-stores
-
-

The store command persists any changes that have been made to the file that -backs the KeyStore.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:store()
-
-
-
-
-
Obtain a signed certificate from Let’s Encrypt
-
-

Before obtaining a signed certificate from Let’s Encrypt, you must configure -a Let’s Encrypt account using the following commands.

-
-
-
Create a key-store to hold your Let’s Encrypt account key.
-
-
-
/subsystem=elytron/key-store=accountsKS:add(path=accounts.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
-
-
-
-
-
Configure a Let’s Encrypt account
-
-
-
/subsystem=elytron/certificate-authority-account=myLEAccount:add(alias=example,key-store=accountsKS,contact-urls=[mailto:admin@example.org])
-
-
-
-

Note: Let’s Encrypt is the default certificate authority and therefore the certificate-authority attribute can be omitted when creating a certificate-authority-account. -It is also possible to configure an account with different certificate authority than Let’s Encrypt by adding custom certificate-authority resource and passing it to certificate-authority-account.

-
-
-
-
/subsystem=elytron/certificate-authority=myCA:add(url="https://my.example.url/acme/directory", staging-url="https://my.example.staging.url/acme/directory")
-/subsystem=elytron/certificate-authority-account=myCAAccount:add(certificate-authority=myCA,alias=example,key-store=accountsKS,contact-urls=[mailto:admin@example.org])
-
-
-
-
-
Obtain a signed certificate from Let’s Encrypt
-
-

The obtain-certificate command creates an account with Let’s Encrypt, if such an account does not already exist, -obtains a signed certificate from Let’s Encrypt, and stores it in the KeyStore.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:obtain-certificate(alias=server,domain-names=[www.example.org],certificate-authority-account=myLEAccount,agree-to-terms-of-service=true,algorithm=RSA,key-size=2048,credential-reference={clear-text=secret})
-
-
-
-
-
-
Revoke a signed certificate
-
-

The revoke-certificate command revokes a certificate that was issued by Let’s Encrypt.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:revoke-certificate(alias=server,reason=keyCompromise,certificate-authority-account=myLEAccount)
-
-
-
-
-
Check if a certificate is due for renewal
-
-

The should-renew-certificate command checks if a certificate is due for renewal. In particular, it will return true if the certificate expires in less than the given number of days and false otherwise.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:should-renew-certificate(alias=server,expiration=7)
-
-
-
-
-
-

4.3.7. Certificate authority account operations

-
-

It is possible to perform various operations on an Elytron certificate-authority-account -resource using the management CLI.

-
-
-
Create an account with the certificate authority
-
-

The create-account command creates an account with the certificate authority if one does not already exist.

-
-
-
-
/subsystem=elytron/certificate-authority-account=myLEAccount:create-account(agree-to-terms-of-service=true)
-
-
-
-
-
Update an account with the certificate authority
-
-

The update-account command updates an account with the certificate authority.

-
-
-
-
/subsystem=elytron/certificate-authority-account=myLEAccount:update-account(agree-to-terms-of-service=true)
-
-
-
-
-
Change the account key
-
-

The change-account-key command changes the key associated with the certificate authority account.

-
-
-
-
/subsystem=elytron/certificate-authority-account=myLEAccount:change-account-key()
-
-
-
-
-
Deactivate the account
-
-

The deactivate-account command deactivates the certificate authority account.

-
-
-
-
/subsystem=elytron/certificate-authority-account=myLEAccount:deactivate-account()
-
-
-
-
-
Get metadata
-
-

The get-metadata command retrieves the metadata (e.g., terms of service URL, website URL, CAA identities, -and whether or not an external account is required), if any, associated with the certificate authority.

-
-
-
-
/subsystem=elytron/certificate-authority-account=myLEAccount:get-metadata()
-
-
-
-
-
-

4.3.8. Using an ldap-key-store

-
-

An ldap-key-store allows you to use a keystore stored in an LDAP -server. You can use an ldap-key-store in same way you can use a -key-store.

-
-
-

To create and use an ldap-key-store:

-
-
-
Configure a dir-context.
-
-

To connect to the LDAP server from WildFly, you need to configure a -dir-context that provides the URL as well as the principal used to -connect to the server.

-
-
-

Example dir-context

-
-
-
-
/subsystem=elytron/dir-context=exampleDC:add( \
-  url="ldap://127.0.0.1:10389", \
-  principal="uid=admin,ou=system", \
-  credential-reference={clear-text=secret} \
-)
-
-
-
-
-
Configure an ldap-key-store.
-
-

When configure an ldap-key-store, you need to specify both the -dir-context used to connect to the LDAP server as well as how to -locate the keystore stored in the LDAP server. At a minimum, this -requires you specify a search-path.

-
-
-

Example ldap-key-store

-
-
-
-
/subsystem=elytron/ldap-key-store=ldapKS:add( \
-  dir-context=exampleDC, \
-  search-path="ou=Keystores,dc=wildfly,dc=org" \
-)
-
-
-
-
-
Use the ldap-key-store.
-
-

Once you have defined your ldap-key-store, you can use it in the same -places where a key-store could be used. For example, you could use an -ldap-key-store when configuring HTTPS and Two-Way HTTPS for -applications.

-
-
-
-
-

4.3.9. Using a filtering-key-store

-
-

A filtering-key-store allows you to expose a subset of aliases from an -existing key-store, and use it in the same places you could use a -key-store. For example, if a keystore contained alias1, alias2, -and alias3, but you only wanted to expose alias1 and alias3, a -filtering-key-store provides you several ways to do that.

-
-
-

To create a filtering-key-store:

-
-
-
Configure a key-store.
-
-
-
/subsystem=elytron/key-store=myKS:add( \
-  path=keystore.pkcs12, \
-  relative-to=jboss.server.config.dir, \
-  credential-reference={ \
-    clear-text=secret \
-  }, \
-  type=PKCS12 \
-)
-
-
-
-
-
Configure a filtering-key-store.
-
-

When you configure a filtering-key-store, you specify which -key-store you want to filter and the alias-filter for filtering -aliases from the key-store. The filter can be specified in one of the -following formats:

-
-
-
    -
  • -

    alias1,alias3, which is a comma-delimited list of aliases to expose.

    -
  • -
  • -

    ALL:-alias2, which exposes all aliases in the keystore except the -ones listed.

    -
  • -
  • -

    NONE:+alias1:+alias3, which exposes no aliases in the keystore -except the ones listed.

    -
  • -
-
-
-

This example uses a comma-delimted list to expose alias1 and alias3.

-
-
-
-
/subsystem=elytron/filtering-key-store=filterKS:add( \
-  key-store=myKS, \
-  alias-filter="alias1,alias3" \
-)
-
-
-
-
-
Use the filtering-key-store.
-
-

Once you have defined your filtering-key-store, you can use it in the -same places where a key-store could be used. For example, you could -use a filtering-key-store when configuring HTTPS and Two-Way HTTPS for -applications.

-
-
-
-
-

4.3.10. Reload a Keystore

-
-

You can reload a keystore configured in WildFly from the management CLI. -This is useful in cases where you have made changes to certificates -referenced by a keystore.

-
-
-

To reload a keystore.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:load
-
-
-
-
-

4.3.11. Reinitialize a Key Manager

-
-

You can reinitialize a key-manager configured in WildFly from the management CLI. -This is useful in cases where you have made changes in certificates provided by keystore -resource and you want to apply this change to new SSL connections without restarting the server.

-
-
-

If the key-store is file based then it must be loaded first.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:load()
-
-
-
-

To reinitialize a key-manager.

-
-
-
-
/subsystem=elytron/key-manager=httpsKM:init()
-
-
-
-
-

4.3.12. Reinitialize a Trust Manager

-
-

You can reinitialize a trust-manager configured in WildFly from the management CLI. -This is useful in cases where you have made changes to certificates provided by keystore -resource and you want to apply this change to new SSL connections without restarting the server.

-
-
-

If the key-store is file based then it must be loaded first.

-
-
-
-
/subsystem=elytron/key-store=httpsKS:load()
-
-
-
-

To reinitialize a trust-manager.

-
-
-
-
/subsystem=elytron/trust-manager=httpsTM:init()
-
-
-
-
-

4.3.13. Check the Content of a Keystore by Alias

-
-

If you add a keystore to the elytron subsystem using the key-store -component, you can check the keystore’s contents using the alias child -element and reading its attributes.

-
-
-

For example:

-
-
-
-
/subsystem=elytron/key-store=httpsKS/alias=localhost:read-attribute(name=certificate-chain)
-{
-    "outcome" => "success",
-    "result" => [{
-        "type" => "X.509",
-        "algorithm" => "RSA",
-        "format" => "X.509",
-        "public-key" => "30:81:9f:30:0d:06:09:2a:8......
-
-
-
-

The following attributes can be read:

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescription

certificate

The certificate associated with the alias. If the alias -has a certificate chain this will always be undefined.

certificate-chain

The certificate chain associated with the alias.

creation-date

The creation date of the entry represented by this -alias.

entry-type

The type of the entry for this alias. Available types: -PasswordEntry, PrivateKeyEntry, SecretKeyEntry, TrustedCertificateEntry, -and Other. Unrecognized types will be reported as Other.

-
-
-

4.3.14. Custom Components

-
-

When configuring SSL/TLS in the elytron subsystem, you can provide and -use custom implementations of the following components:

-
-
-
    -
  • -

    key-store

    -
  • -
  • -

    key-manager

    -
  • -
  • -

    trust-manager

    -
  • -
  • -

    client-ssl-context

    -
  • -
  • -

    server-ssl-context

    -
  • -
  • -

    certificate-authority-account

    -
  • -
-
-
-

When creating custom implementations of Elytron components, they must -present the appropriate capabilities and requirements.

-
-
-
-

4.3.15. Configuring a server SSLContext

-
-

Using the Elytron subsystem, it is possible to configure an SSLContext for use on the server side of a connection.

-
-
-

Adding a server SSLContext takes the general form:

-
-
-
-
/subsystem=elytron/server-ssl-context=test-server-ssl-context:add(...)
-
-
-
-

The following attributes can be specified when creating a server-ssl-context:

-
-
-
-
security-domain
-
-

(Optional) A reference to the security-domain to use for authentication during SSL session -establishment.

-
-
key-manager
-
-

(Optional) A reference to the KeyManager to be used by this SSLContext.

-
-
trust-manager
-
-

(Optional) A reference to the TrustManager to be used by this SSLContext.

-
-
cipher-suite-filter
-
-

(Optional) The filter to be applied to the cipher suites for TLSv1.2 and below made available -by this SSLContext. The format of this attribute is described in detail in -org.wildfly.security.ssl.CipherSuiteSelector.fromString(selector). -The default value is DEFAULT, which corresponds to all known cipher suites that do not have NULL encryption and -excludes any cipher suites that have no authentication.

-
-
cipher-suite-names
-
-

(Optional) The enabled cipher suites for TLSv1.3. The format of this attribute is a simple colon -(":") separated list of TLSv1.3 cipher suite names (e.g., TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256). -This attribute must be specified in order for TLSv1.3 to be enabled.

-
-
protocols
-
-

(Optional) A space separated list of the protocols to be supported by this SSLContext. The default value -is TLSv1 TLSv1.1 TLSv1.2 TLSv1.3. Note that the TLSv1.3 protocol will only be usable when running against JDK 11 or -higher.

-
-
want-client-auth
-
-

(Optional) To request (but not to require) a client certificate on SSL handshake. If a -security-domain is configured and supports X509 evidence, this will be set to true automatically. Ignored when -need-client-auth is set. The default value is false.

-
-
need-client-auth
-
-

(Optional) If true, a client certificate is required on SSL handshake. A connection without a -trusted client certificate will be rejected. The default value is false.

-
-
authentication-optional
-
-

(Optional) Rejection of the client certificate by the configured security-domain will not -prevent the connection. This allows a fall through to use other authentication mechanisms (like form login) when the -client certificate is rejected by the -security-domain. This has an effect only when the security-domain is configured. The default value is false.

-
-
use-cipher-suites-order
-
-

(Optional) If true, the cipher suites order defined on the server will be used. If false, -the cipher suites order presented by the client will be used. The default value is true.

-
-
provider-name
-
-

(Optional) The name of the provider to use. If not specified, all providers from providers will be -passed to the SSLContext.

-
-
providers
-
-

(Optional) The name of the providers to obtain the Provider[] to use to load the SSLContext.

-
-
maximum-session-cache-size
-
-

(Optional) The maximum number of SSL sessions to be cached. The default value -1 -indicates that the JVM default value should be used. A value of 0 means there is no limit.

-
-
session-timeout
-
-

(Optional) The timeout for SSL sessions. The default value -1 indicates that the JVM default value -should be used. A value of 0 means there is no limit.

-
-
wrap
-
-

(Optional) If true, the returned SSLEngine, SSLSocket, and SSLServerSocket instances will be wrapped to -protect against further modification. The default value is false.

-
-
pre-realm-principal-transformer
-
-

(Optional) A principal transformer to apply before the realm is selected.

-
-
post-realm-principal-transformer
-
-

(Optional) A principal transformer to apply after the realm is selected.

-
-
final-principal-transformer
-
-

(Optional) A final principal transformer to apply for this mechanism realm.

-
-
realm-mapper
-
-

(Optional) The realm mapper to be used for SSL authentication.

-
-
-
-
-
-

4.3.16. Configuring a client SSLContext

-
-

Using the Elytron subsystem, it is possible to configure an SSLContext for use on the client side of a connection.

-
-
-

Adding a client SSLContext takes the general form:

-
-
-
-
/subsystem=elytron/client-ssl-context=test-client-ssl-context:add(...)
-
-
-
-

The following attributes can be specified when creating a client-ssl-context:

-
-
-
-
key-manager
-
-

(Optional) A reference to the KeyManager to be used by this SSLContext.

-
-
trust-manager
-
-

(Optional) A reference to the TrustManager to be used by this SSLContext.

-
-
cipher-suite-filter
-
-

(Optional) The filter to be applied to the cipher suites for TLSv1.2 and below made available -by this SSLContext. The format of this attribute is described in detail in -org.wildfly.security.ssl.CipherSuiteSelector.fromString(selector). -The default value is DEFAULT, which corresponds to all known cipher suites that do not have NULL encryption and -excludes any cipher suites that have no authentication.

-
-
cipher-suite-names
-
-

(Optional) The enabled cipher suites for TLSv1.3. The format of this attribute is a simple colon -(":") separated list of TLSv1.3 cipher suite names (e.g., TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256). -This attribute must be specified in order for TLSv1.3 to be enabled.

-
-
protocols
-
-

(Optional) A space separated list of the protocols to be supported by this SSLContext. The default value -is TLSv1 TLSv1.1 TLSv1.2 TLSv1.3. Note that the TLSv1.3 protocol will only be usable when running against JDK 11 or higher.

-
-
provider-name
-
-

(Optional) The name of the provider to use. If not specified, all providers from providers will be -passed to the SSLContext.

-
-
providers
-
-

(Optional) The name of the providers to obtain the Provider[] to use to load the SSLContext.

-
-
-
-
-

WARNING It is possible to use TLSv1.3 with WildFly when running against JDK 11 or higher. However, if JDK 11 -is in use and if there is a very large number of TLSv1.3 requests being made, it is possible that a drop in -performance (throughput and response time) will occur compared to TLSv1.2. Upgrading to newer JDK versions -should improve performance. For this reason, the use of TLSv1.3 is currently disabled by default. TLSv1.3 can -be enabled by configuring the new cipher-suite-names attribute in the SSL Context resource definition in the -Elytron subsystem as described in the previous two sections. It is recommended to test for performance -degradation prior to enabling TLSv1.3 in a production environment. See WFWIP-160 -for more details.

-
-
-

Note: When using TLSv1.3, it is important to keep in mind that session IDs have become essentially obsolete. -This means that the session ID can no longer reliably be used to test if a session was resumed. Instead, -creation time can be used to test if a session was resumed. Currently, clients need to read from the server after -the first handshake in order to receive the NewSessionTicket that can be used for resumption. However, this may -change once JDK-8209953 is resolved.

-
-
-
-

4.3.17. Configuring SSLv2Hello

-
-

Older JDK versions use SSLv2Hello during the initial SSL handshake message -where the SSL/TLS version that will be used for the rest of the communication is -negotiated.

-
-
-

Using SSLv2Hello is discouraged, therefore newer JDK versions disable this protocol -on the client by default. However, they do provide the ability to re-enable it if necessary.

-
-
-

SSLv2Hello can be configured as a supported protocol for the server SSL context as follows:

-
-
-
-
/subsystem=elytron/server-ssl-context=server-context:add(protocols=[SSLv2Hello,TLSv1], ...)
-
-
-
-

Similarly, it can be configured as a supported protocol for the client SSL context as follows:

-
-
-
-
/subsystem=elytron/client-ssl-context=client-context:add(protocols=[SSLv2Hello,TLSv1], ...)
-
-
-
-
WARNING:
-
-
    -
  • -

    The use of SSLv2Hello is strongly discouraged.

    -
  • -
  • -

    SSLv2Hello cannot be configured by itself, as its purpose is to determine -which encryption protocols are supported by the server it connects to. It always -needs to be configured along side another encryption protocol.

    -
  • -
  • -

    Additionally, IBM JDK does not support specifying SSLv2Hello in its client, although a -server side connection always accepts this protocol.

    -
  • -
-
-
-
-
-

4.3.18. Default SSLContext

-
-

Many libraries that can be used within deployments may require SSL configuration for any connections they establish, these libraries tend to be configurable by the caller or if no configuration is provided fall back to using the default SSLContext for the process available from: -

-
-
-
-
javax.net.ssl.SSLContext.getDefault();
-
-
-
-

By default this SSLContext is configured using system properties, however within the WildFly Elytron subsystem it is possible to specify that one of the configured contexts should be associated and used as the default.

-
-
-

To make use of this feature configure your SSLContext as normal, the following command can then be used to specify which SSLContext should be used as the default.

-
-
-
-
/subsystem=elytron:write-attribute(name=default-ssl-context, value=client-context)
-
-
-
-

As existing services and deployments could have cached the default SSLContext prior to this being set a reload is required to ensure the default gets set before the deployments are activated.

-
-
-
-
:reload
-
-
-
-

Note: If the default-ssl-context attribute is subsequently 'undefined' the standard APIs do not provide us with a mechanism to revert the default so in this situation the Java process would need be restarted.

-
-
-
-
/subsystem=elytron:undefine-attribute(name=default-ssl-context)
-{
-    "outcome" => "success",
-    "response-headers" => {
-        "operation-requires-restart" => true,
-        "process-state" => "restart-required"
-    }
-}
-
-
-
-
-

4.3.19. Configuring SNI

-
-

Using the WildFly Elytron subsystem it is possible to configure an SSL context which supports SNI. By supporting SNI if an SNI host name is available whilst the SSLSession is being negotiated a host specific SSLContext will be selected. If no host specific SSLContext is identified either because no host name was received or because there is no match a default SSLContext will be used instead. By identifying a host specific SSLContext it means that a certificate appropriate for that host can be used.

-
-
-

The following command demonstrates how an SNI aware SSLContext can be added: -

-
-
-
-
[standalone@localhost:9990 /] ./subsystem=elytron/server-ssl-sni-context=test-sni:add(default-ssl-context=jboss,host-context-map={localhost=localhost, wildfly.org=wildfly})
-{"outcome" => "success"}
-
-
-
-

This example assumes that three SSLContexts have been previously defined following the steps available previously in this document, those contexts are jboss, localhost, and wildfly.

-
-
-

During negotiation of the SSLSession if the SNI host name received is localhost then the localhost SSLContext will be used, if the SNI host name is wildfly.org then the wildfly SSLContext will be used. If no SNI host name is received or if we receive a name that does not match this will fallback and use the jboss SSLContext.

-
-
-

The resulting resource looks like: -

-
-
-
-
[standalone@localhost:9990 /] ./subsystem=elytron/server-ssl-sni-context=test-sni:read-resource
-{
-    "outcome" => "success",
-    "result" => {
-        "default-ssl-context" => "jboss",
-        "host-context-map" => {
-            "localhost" => "localhost",
-            "wildfly.org" => "wildfly"
-        }
-    }
-}
-
-
-
-

Within the host-context-map it is also possible to define wildcard mappings such as * and *.wildfly.org.

-
-
-
-

4.3.20. Use the Elytron Subsystem

-
-

For authentication in applications, you can use the -application-security-domain property in the undertow subsystem to -configure a security domain in the elytron subsystem.

-
-
-
-
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-http-auth)
-
-
-
-

NOTE: This must match the security-domain configured in the -jboss-web.xml of your application.

-
-
-

For enabling HTTPS using elytron you need to set the ssl-context attribute.

-
-
-
-
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=httpsSSC)
-
-
-
-
-
-

4.4. Creating Elytron Subsystem Components

-
-

4.4.1. Create an Elytron Security Realm

-
-

Security realms in the Elytron subsystem, when used in conjunction with -security domains, are use for both core management authentication as -well as for authentication with applications. Security realms are also -specifically typed based on their identity store, for example -jdbc-realm, filesystem-realm, properties-realm, etc.

-
-
-

Adding a security realm takes the general form:

-
-
-
-
/subsystem=elytron/type-of-realm=realmName:add(....)
-
-
-
-

Examples of adding specific realms, such as jdbc-realm, -filesystem-realm, and properties-realm can be found in previous -sections.

-
-
-
-

4.4.2. Create an Elytron Role Decoder

-
-

A role decoder converts attributes from the identity provided by the -security realm into roles. Role decoders are also specifically typed -based on their functionality, for example empty-role-decoder, -simple-role-decoder, custom-role-decoder, and aggregate-role-decoder.

-
-
-

Adding a role decoder takes the general form:

-
-
-
-
/subsystem=elytron/ROLE-DECODER-TYPE=roleDeoderName:add(....)
-
-
-
-
Create an Elytron Role Decoder that makes use of the IP Address of the Remote Client
-
-

A role decoder that is configured on a security realm assigns roles to -an identity based on attributes provided by the security realm. It is -also possible to configure a role decoder that makes use of the IP -address of the remote client when determining the roles associated -with an identity. As an example, we might want to make use of the IP -address of the remote client in order to assign a user a particular -role when establishing a connection to the server from a corporate -network and a different role when establishing a connection to the -server from a different network.

-
-
-

Adding a role decoder that makes use of the remote client’s IP -address takes the general form:

-
-
-
-
/subsystem=elytron/source-address-role-decoder=roleDecoderName:add(source-address="...", pattern="...", roles=[...])
-
-
-
-

In particular, a source-address-role-decoder has the following attributes:

-
-
-
    -
  • -

    source-address - The IP address of the remote client.

    -
  • -
  • -

    pattern - A regular expression that specifies the IP address to match.

    -
  • -
  • -

    roles - The list of roles to assign if the source IP address matches the given address.

    -
  • -
-
-
-

Only one of source-address and pattern should be specified.

-
-
-

For example, the following source-address-role-decoder could be configured to specify -that a user should be assigned the "Administrator" role when establishing a connection -to the server from the 10.10.10.10 IP address:

-
-
-
-
/subsystem=elytron/source-address-role-decoder=decoder1:add(source-address="10.10.10.10", roles=["Administrator"])
-
-
-
-

Once a source-address-role-decoder has been configured, it can be referenced from a security-domain:

-
-
-
-
/subsystem=elytron/security-domain=exampleSD:add(..., role-decoder=decoder1)
-
-
-
-

It is also possible to assign permissions to an identity based on its roles using a -simple permission mapper.

-
-
-

Example configuration:

-
-
-
-
/subsystem=elytron/source-address-role-decoder=decoder1:add(source-address="10.10.10.10", roles=["Administrator"])
-/subsystem=elytron/simple-permission-mapper=ipPermissionMapper:add(permission-mappings=[{roles=["Administrator"], permission-sets=[{permission-set=login-permission}]}])
-/subsystem=elytron/security-domain=exampleSD:add(..., role-decoder=decoder1, permission-mapper=ipPermissionMapper)
-
-
-
-

The above example configures a security domain with a source address role decoder that -will assign the "Administrator" role when the IP address of the remote client matches -the configured address and a simple permission mapper that only assigns the -"LoginPermission" if the identity has the "Administrator" role. Thus, authentication -will succeed if the IP address of the remote client matches the configured address.

-
-
-

It is also possible to configure an aggregate-role-decoder. This consists of -two or more role-decoder elements where each element is a reference to a configured -role decoder. Each role decoder will be applied and the returned value will be a union of -the roles returned by each decoder.

-
-
-

Example configuration:

-
-
-
-
/subsystem=elytron/source-address-role-decoder=decoder1:add(source-address="10.10.10.10", roles=["Administrator"])
-/subsystem=elytron/source-address-role-decoder=decoder2:add(source-address="12.12.12.12", roles=["Users"])
-/subsystem=elytron/aggregate-role-decoder=aggregateDecoder:add(role-decoders=[decoder1, decoder2])
-
-
-
-
-
-

4.4.3. Create an Elytron Permission Set

-
-

Permission sets can be used to assign permissions to an identity.

-
-
-

Adding a permission set takes the general form:

-
-
-
-
/subsystem=elytron/permission-set=PermissionSetName:add(permissions=[{class-name="...", module="...", target-name="...", action="..."}...])
-
-
-
-

where permissions consists of a set of permissions, where each permission has the following attributes:

-
-
-
    -
  • -

    class-name is the fully qualified class name of the permission. This is the only permission attribute that is required.

    -
  • -
  • -

    module is the optional module to use to load the permission.

    -
  • -
  • -

    target-name is the optional target name to pass to the permission as it is constructed.

    -
  • -
  • -

    action is the optional action to pass to the permission as it is constructed.

    -
  • -
-
-
-
-

4.4.4. Create an Elytron Permission Mapper

-
-

In addition to roles being assigned to a identity, permissions may also -be assigned. A permission mapper assigns permissions to an identity. -Permission mappers are also specifically typed based on their -functionality, for example logical-permission-mapper, -simple-permission-mapper, and custom-permission-mapper.

-
-
-

Adding a permission mapper takes the general form:

-
-
-
-
/subsystem=elytron/simple-permission-mapper=PermissionMapperName:add(...)
-
-
-
-
-

4.4.5. Create an Elytron Role Mapper

-
-

A role mapper maps roles after they have been decoded to other roles. -Examples include normalizing role names or adding and removing specific -roles from principals after they have been decoded. Role mappers are -also specifically typed based on their functionality, for example -add-prefix-role-mapper, add-suffix-role-mapper, and -constant-role-mapper.

-
-
-

Adding a role mapper takes the general form:

-
-
-
-
/subsystem=elytron/ROLEM-MAPPER-TYPE=roleMapperName:add(...)
-
-
-
-
-

4.4.6. Create an Elytron Security Domain

-
-

Security domains in the Elytron subsystem, when used in conjunction with -security realms, are use for both core management authentication as well -as for authentication with applications.

-
-
-

Adding a security domain takes the general form:

-
-
-
-
/subsystem=elytron/security-domain=domainName:add(realms=[{realm=realmName,role-decoder=roleDecoderName}],default-realm=realmName,permission-mapper=permissionMapperName,role-mapper=roleMapperName,...)
-
-
-
-
-

4.4.7. Create an Elytron Authentication Factory

-
-

An authentication factory is an authentication policy used for specific -authentication mechanisms. Authentication factories are specifically -based on the authentication mechanism, for example -http-authentication-factory and
-sasl-authentication-factory and kerberos-security-factory.

-
-
-

Adding an authentication factory takes the general form:

-
-
-
-
/subsystem=elytron/AUTH-FACTORY-TYPE=authFactoryName:add(....)
-
-
-
-
-

4.4.8. Create an Elytron Policy Provider

-
-

Elytron subsystem provides a specific resource definition that can be -used to configure a default ruby Policy provider. The subsystem allows -you to define multiple policy providers but select a single one as the -default:

-
-
-
-
/subsystem=elytron/policy=policy-provider-a:add(custom-policy=\[{name=policy-provider-a, class-name=MyPolicyProviderA, module=x.y.z}\])
-
-
-
-
-

4.4.9. Create an Elytron Case Principal Transformer

-
-

Principal transformers can take a name and map it to another representation of the name or perform -some normalisation. A case-principal-transformer converts a principal to upper or lower case. -As an example, we might want to convert our principal to upper case if the identities in our realm -are stored in upper case.

-
-
-

Adding a case-principal-transformer that converts a principal to upper/lower case takes the -general form:

-
-
-
-
/subsystem=elytron/case-principal-transformer=transformerName:add(upper-case="...")
-
-
-
-

In particular, a case-principal-transformer has the following attribute:

-
-
-
    -
  • -

    upper-case - A boolean value to indicate whether the principal should be converted to upper case. -Indicating false for this attribute converts the principal to lower case.

    -
  • -
-
-
-

For example, the following case-principal-transformer could be configured to specify that -a principal should be transformed to lower case:

-
-
-
-
/subsystem=elytron/case-principal-transformer=transformer1:add(upper-case="false")
-
-
-
-

On the other hand, a case-principal-transformer could be configured by omitting the -upper-case attribute, which is then set to true by default:

-
-
-
-
/subsystem=elytron/case-principal-transformer=transformer2:add()
-
-
-
-
-
-

4.5. Component Documentation

-
-

4.5.1. Security Realms

-
-

The primary responsibility of a security realm is the ability to load identities with associated attributes, these identities are then used within the authentication process for credential validation and subsequently wrapped to represent the SecurityIdentity instances using within applications for authorization.

-
-
-

Generally a security realm operates in one of three modes, in the first mode on loading an identity from its store the security realm also loads one or more credential representations from the store and holds these within the identity. During authentication the credentials within the identity can be used to verify the connection attempt. The reason multiple credentials are loaded is because specific types may be applicable to specific mechanisms so an appropriate credential representation can be selected at the time of authentication.

-
-
-

In the second mode the identity is loaded as in the first mode however no credentials are loaded, in this mode evidence can be passed in to the identity for verification. This mode is sometimes the only mode available where it is not possible to load the representation of a credential from its store.

-
-
-

In the third mode evidence is passed to the security realm and used to construct the resulting identity, this mode is predominantly used with certificate and token based authentication mechanisms where the verified certificate or token can be used to construct the resulting identity.

-
-
-

Once an identity has been loaded for authorization decisions the identity will have a set of associated attributes, these will subsequent be mapped using role decoders, role mappers, and permission mappers as required for identity specific authorization decisions.

-
-
-
-

4.5.2. Aggregate Security Realm

-
-

The aggregate security realm allows for two or more security realms to be aggregated into a single security realm allowing one to be used during the authentication steps and one or more to be used to assemble the identity used for authorization decisions and aggregating any associated attributes.

-
-
-

The aggregate-realm resource contains the following attributes: -

-
-
-
    -
  • -

    authentication-realm - This realm use used to load the credentials of the identity or perform evidence verification.

    -
  • -
  • -

    authorization-realm - The realm to use to load the identities attributes used for authorization.

    -
  • -
  • -

    authorization-realms - A list of one or more realms to use to load the identities attributes and aggregate into a single set of attributes.

    -
  • -
  • -

    principal-transformer - A principal transformer that can be used to transform the principal after loading the credentials -for authentication but before loading the identities attributes for authorization. This attribute is optional.

    -
  • -
-
-
- - - - - -
- - -authorization-realm and authorization-realms are mutually exclusive so exactly one of these must be specified. -
-
-
-
Defining a Simple Aggregation
-
-

Assuming two realms properties-realm and jdbc-realm already exist an aggregate-realm combining these two can be created with the following command.

-
-
-
-
/subsystem=elytron/aggregate-realm=combined:add(
-    authentication-realm=properties-realm,
-    authorization-realm=jdbc-realm)
-
-
-
-

Where this realm is used the properties-realm will be used to load an identity’s credentials and the jdbc-realm will be used to load the attributes for the identity.

-
-
-

The following command is exactly the same except the authorization-realms attribute is used instead.

-
-
-
-
/subsystem=elytron/aggregate-realm=combined:add(
-    authentication-realm=properties-realm,
-    authorization-realms=[jdbc-realm])
-
-
-
-

The following command will reference a principal transformer defined in the mappers configuration to be used to transform the principal -after authentication.

-
-
-
-
/subsystem=elytron/aggregate-realm=combined:add(
-    authentication-realm=properties-realm,
-    authorization-realms=[jdbc-realm],
-    principal-transformer=custom-transformer)
-
-
-
-
-
Aggregating Attributes
-
-

If a third realm ldap-realm also exists that shoud also be used for the loading of attributes an aggregate-realm can be defined using the following command: -

-
-
-
-
/subsystem=elytron/aggregate-realm=combined:add(
-    authentication-realm=properties-realm,
-    authorization-realms=[jdbc-realm, ldap-realm])
-
-
-
-

As before the properties-realm will be used to load the identity’s credentials or perform evidence verification but the attributes for the identity will be loaded both from the jdbc-realm and ldap-realm then combined together.

-
-
-

The approach taken to combine attributes makes use of the first instance of each attribute, if the same attribute is loaded by multiple realms only the first occurrence will be used. Later occurrences of an existing attribtue will be ignored.

-
-
-

As an example if the following attributes were loaded from the jdbc-realm: -

-
- - ---- - - - - - - - - - - - - - - - - -
Table 1. JDBC Attributes
ATTRIBUTEVALUES

e-mail

example@wildfly.org

groups

Supervisor, User

-
-

And the following attributes were loaded from the ldap-realm: -

-
- - ---- - - - - - - - - - - - - - - - - -
Table 2. LDAP Attributes
ATTRIBUTEVALUES

e-mail

administrator@wildfly.org

phone

0000 0000 0000

-
-

The resulting attributes would be: -

-
- - ---- - - - - - - - - - - - - - - - - - - - - -
Table 3. Combined Attributes
ATTRIBUTEVALUES

e-mail

example@wildfly.org

groups

Supervisor, User

phone

0000 0000 0000

-
-
-
-

4.5.3. Filesystem Security Realm

-
-

The filesystem security realm is a security realm developed to support storing of identities in a filesystem with the option of associating multiple credentials and multiple attributes with each identity. Both credentials and attributes can contain multiple values.

-
-
-
Create and Populate Filesystem Security Realm
-
-

Every identity is stored in an XML file where the name of the file is the name of the identity. It is sufficient to just specify the path to the directory where identity files will be stored. There are other optional attributes.

-
-
-
    -
  • -

    path The actual filesystem path. Treated as an absolute path, unless the 'relative-to' attribute is specified, in which case the value is treated as relative to that path.

    -
  • -
  • -

    relative-to If 'relative-to' is provided, the value of the 'path' attribute is treated as relative to the path specified by this attribute.

    -
  • -
  • -

    levels The number of levels of directory hashing to apply. When this attribute is set to positive value, filesystem realm will store identities in directory structure where the name of subdirectories will be derived from first characters of identity name. For example, location of identity named "alex" could be a/l/alex.xml. This is useful not only because some filesystems can limit the amount of files that can be stored in a single directory, but also for performance reasons, because that might be influenced by the number of entries in a single directory as well. Default value is 2.

    -
  • -
  • -

    encoded When encoding is set to true, the identity names will be BASE32 encoded before they are used as filenames. This is beneficial, because some filesystems are case-insensitive or might restrict set of characters allowed in a filename. Default value is true.

    -
  • -
  • -

    hash-encoding specifies the string format for the password if it is not stored in plain text. Set to BASE64 bt default, but HEX is also supported.

    -
  • -
  • -

    hash-charset specifies the character set to use when converting the password string to a byte array. Set to UTF-8 by default.

    -
  • -
  • -

    credential-store specifies the credential store where the secret key is stored if the filesystem realm is to be encrypted. This attribute is optional.

    -
  • -
  • -

    secret-key specifies the alias of the secret key that is stored in the previously specified credential store. This attribute is optional.

    -
  • -
  • -

    key-store specifies the key store where the key pair is stored if the integrity is to be enabled on the filesystem realm. This attribute is optional.

    -
  • -
  • -

    key-store-alias specifies the alias of the key pair that is stored in the previously specified key store. This attribute is optional.

    -
  • -
-
-
-

Filesystem security realm can be added with WildFly management CLI or with Elytron API.

-
-
-
WildFly management CLI
-
-

The following command creates realm with name fsRealm that resides in directory fs-realm-users inside the base configuration directory defined by jboss.server.config.dir property. The levels number is 2 and encoded value is true. -The charset is UTF-8 and the string encoding is BASE64.

-
-
-

The credential-store being referenced is called mycredstore and the alias of the secret-key in that credential-store is key. The secret key will be used to encrypt and decrypt the filesystem realm.

-
-
-

The key-store being referenced is called keystore and the alias of the key pair in that key-store is localhost. The localhost key pair will be used to sign identity files and verify the pre-existing signatures to ensure that the filesystem realm has not been tampered with.

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:add(path=fs-realm-users, relative-to=jboss.server.config.dir, credential-store=mycredstore, secret-key=key, key-store=keystore, key-store-alias=localhost)
-
-
-
- - - - - -
- - -Although identities stored within the same realm can be hashed using different algorithms, they are all -hashed using the same character set and stored using the same string encoding across the whole realm. -
-
-
-

To add identity with the name "alex" to this filesystem realm:

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:add-identity(identity=alex)
-
-
-
-

To delete existing identity from filesystem realm:

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:remove-identity(identity=alex)
-
-
-
-

It’s possible to update the key-store or key-store-alias to use for integrity checking using the update-key-pair command as shown below. These commands will also update the signature in any existing identity files.

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:write-attribute(name=key-store, value=newKeystore)
-/subsystem=elytron/filesystem-realm=fsRealm:write-attribute(name=key-store-alias, value=newKeystoreAlias)
-/subsystem=elytron/filesystem-realm=fsRealm:update-key-pair()
-
-
-
-
-
Programmatic approach
-
-

When creating filesystem realm with Elytron API, you can specify name rewriter in the constructor. The name rewriter will be applied to identity names to transform them from one form to another. It can be used to normalize the case, trim extra whitespaces, map one naming scheme to another, remove realm component from identity name (e.g. "user@realm" to "user") or to perform validation step on the syntax of the name.

-
-
-

To enable encryption for a filesystem realm programmatically, you can specify a SecretKey when instantiating the realm.

-
-
-

To enable integrity for the filesystem realm programmatically, you can specify a PublicKey and PrivateKey when instantiating the realm.

-
-
-

A org.wildfly.security.auth.realm.FileSystemSecurityRealm can be instantiated using a builder() method as shown in the example below.

-
-
-
-
FileSystemSecurityRealm fsRealm = FileSystemSecurityRealm.builder()
-    .setRoot(fsRealmPath)
-    .setNameRewriter(IDENTITY_REWRITER)
-    .setLevels(2)
-    .setEncoded(true)
-    .setProviders(ELYTRON_PASSWORD_PROVIDERS)
-    .setSecretKey(secretKey)
-    .setPublicKey(publicKey)
-    .setPrivateKey(privateKey)
-    .build();
-
-
-
-

org.wildfly.security.auth.server.NameRewriter.IDENTITY_REWRITER is a simple identity name rewriter that does no rewriting. You can implement the NameRewriter interface and use your own rewriter.

-
-
-

Class org.wildfly.security.auth.principal.NamePrincipal represents principal comprised of a simple name. Handle for the identity can be obtained by passing the NamePrincipal instance to the getRealmIdentity or getRealmIdentityForUpdate method. Received identity for the given principal might or might not exist in the filesystem realm. Method exists can be called to check whether the received identity exists. If it does not, you cannot modify its credentials or attributes.

-
-
-

To add non existent identity to the filesystem realm, create method must be called. After this call, credentials and roles of this identity are empty. The exception will be thrown if method create is called on an existing identity.

-
-
-
-
ModifiableRealmIdentity modifiableIdentity = fsRealm.getRealmIdentityForUpdate(new NamePrincipal("alex"));
-if (!modifiableIdentity.exists()) {
-    modifiableIdentity.create();
-}
-
-
-
-

To obtain read only instance of identity:

-
-
-
-
RealmIdentity identity = fsRealm.getRealmIdentity(identityPrincipal);
-
-
-
-

To obtain identity that can be modified:

-
-
-
-
ModifiableRealmIdentity modifiableIdentity = fsRealm.getRealmIdentityForUpdate(identityPrincipal);
-
-
-
-

ModifiableRealmIdentity handle must be cleaned up by a call to dispose when the modifying is done:

-
-
-
-
modifiableIdentity.dispose();
-
-
-
-

To delete the identity from the realm:

-
-
-
-
identity.delete();
-
-
-
-
-
-
Credentials
-
-

Supported password types for identity in filesystem realm are Bcrypt, Clear, Simple Digest, Salted Simple Digest, Scram Digest, Digest and OTP.

-
-
-
WildFly management CLI
-
-

To set clear password to the identity:

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:set-password(clear={password="alexPassword"}, identity=alex)
-
-
-
-

The above command will store password in clear text in identity’s file. It is not recommended to use clear passwords in a production set up.

-
-
-

To set digest password to the identity:

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:set-password(digest={algorithm=digest-md5,password="demoPassword",realm=demoRealm},identity=alex)
-
-
-
-

Note: Operation set-password` replaces any existing credential(s) with the new value.

-
-
-
-
Programmatic approach
-
-

When using Elytron API, working with passwords require interaction with the org.wildfly.security.password.PasswordFactory API. Here is the simplest example that will store password in clear text in identity’s file. Examples on how to work with other types of passwords can be found in Passwords section of this documentation.

-
-
-
-
PasswordFactory passwordFactory = PasswordFactory.getInstance(ClearPassword.ALGORITHM_CLEAR);
-PasswordCredential clearPassword = new PasswordCredential(passwordFactory.generatePassword(new ClearPasswordSpec("alexPassword".toCharArray())));
-identity.setCredentials(Collections.singleton(clearPassword));
-
-
-
-

Note: Operation setCredentials replaces any existing credential(s) with the new value.

-
-
-
-
-
Attributes
-
-

Attributes associated with identities can be read and updated through CLI as well as programmatically.

-
-
-
WildFly management CLI
-
-

To add attribute to the identity, you have to specify the name of the attribute and its values (values are of type LIST):

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:add-identity-attribute(
-    identity="alex",
-    name=Email,
-    value=["alex@email.com", "alex_email@email.com"])
-{"outcome" => "success"}
-
-
-
-

To read the identity with its attributes:

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:read-identity(identity="alex")
-{
-    "outcome" => "success",
-    "result" => {
-        "name" => "alex",
-        "attributes" => {"Email" => [
-            "alex@email.com",
-            "alex_email@email.com"
-        ]}
-    }
-}
-
-
-
-

To remove individual values of the attribute:

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:remove-identity-attribute(
-    identity=alex,
-    name=Email,
-    value=[alex@email.com])
-{"outcome" => "success"}
-/subsystem=elytron/filesystem-realm=fsRealm:read-identity(identity="alex")
-{
-    "outcome" => "success",
-    "result" => {
-        "name" => "alex",
-        "attributes" => {"Email" => ["alex_email@email.com"]}
-    }
-}
-
-
-
-

To remove the whole attribute:

-
-
-
-
/subsystem=elytron/filesystem-realm=fsRealm:remove-identity-attribute(identity=alex, name=Email)
-{"outcome" => "success"}
-/subsystem=elytron/filesystem-realm=fsRealm:read-identity(identity=alex)
-{
-    "outcome" => "success",
-    "result" => {
-        "name" => "alex",
-        "attributes" => undefined
-    }
-}
-
-
-
-
-
Programmatic approach
-
-

Interface org.wildfly.security.authz.Attributes represents collection of string attributes. To get attributes associated with specific identity:

-
-
-
-
Attributes identityAttributes = identity.getAttributes();
-
-
-
-

To update attributes you can use ModifiableRealmIdentity instance. Class org.wildfly.security.authz.MapAttributes represents collection of attributes backed by java.util.Map:

-
-
-
-
ModifiableRealmIdentity modifiableIdentity = fsRealm.getRealmIdentityForUpdate(identityPrincipal);
-MapAttributes attributes = new MapAttributes();
-attributes.addLast("email","alex@email.com");
-modifiableIdentity.setAttributes(attributes);
-modifiableIdentity.dispose();
-
-
-
-
-
-
Converting legacy properties file into Filesystem realm
-
-

WildFly can use authentication with a properties file based identity store. One properties file maps users to passwords and another maps users to roles. You can use Elytron Tool to convert these properties files into a filesystem realm. Below is an example of how to run this tool from the command line:

-
-
-
-
$JBOSS_HOME/bin/elytron-tool.sh filesystem-realm -u conf/users.properties -r conf/roles.properties --output-location realms/example --summary -f example-fs-realm
-
-
-
-

This command creates new filesystem realm with users taken from users.properties file and roles taken from roles.properties file. Script example-fs-realm.sh that contains the commands for WildFly CLI is generated as well. The script adds this filesystem realm to the Elytron subsystem and also adds new security domain that uses this filesystem realm as a default realm.

-
-
-
-
Converting an unencrypted filesystem realm into an encrypted filesystem realm
-
-

It is possible to convert an unencrypted filesystem realm into an encrypted one using the Elytron Tool. In particular, the filesystem-realm-encrypt command can be used as shown below:

-
-
-
-
$JBOSS_HOME/bin/elytron-tool.sh filesystem-realm-encrypt -i ./standalone/configuration/fs-realm-plain -o ./standalone/configuration/fs-realm-enc -c ./mycredstore.cs
-
-
-
-

This command creates a new filesystem realm by taking the existing filesystem realm from the specified input location, ./standalone/configuration/fs-realm-plain, and encrypting its contents using the secret key with alias key from the specified credential store, ./mycredstore.cs. The new filesystem realm is stored in the specified output location, ./standalone/configuration/fs-realm-enc.

-
-
-

A .cli script will also be generated at the root of the filesystem realm. The script contains WildFly CLI commands that can be used to configure a secret-key-credential-store resource and a filesystem-realm resource in the Elytron subsystem that makes use of the newly encrypted realm content.

-
-
-
-
-

4.5.4. JDBC Security Realm

-
-

The JDBC security realm is a security realm developed to support loading identities from a database with the option of multiple credentials and multiple attributes each with the option of containing multiple values.

-
-
-

When defining the JDBC security realm one or more principal queries can be defined, each of these can load a credential and / or attributes for the resulting identity. Each defined principal query is associated with it’s own datasource, this means quite a complex configuration can be created loading the different aspects of an identity from multiple locations.

-
-
-

Each of the examples documented within this section will be making use of pre-configured datasources, please refer to the datasources subsystem documentation for more information relating to how to define datasources.

-
-
-
Loading a Single Clear Text Password
-
-

The simplest configuration is to load a clear text password for an identity. This approach would not be recommended at all in a production set up, however it does make a suitable starting point to illustrate how the JDBC security realm can be configured.

-
- - ---- - - - - - - - - - - - - -
Table 4. Example Table
NAMEPASSWORD

test

myPassword

-
-

A JDBC security realm can be defined as: -

-
-
-
-
/subsystem=elytron/jdbc-realm=demo-realm:add(
-    principal-query=[{data-source=Identities,
-                      sql="select PASSWORD from IDENTITIES where NAME = ?",
-                      clear-password-mapper={password-index=1}}])
-
-
-
-

This realm is defined within a single principal-query against the Identities datasource. For the user test the result of the query would be: -

-
- - --- - - - - - - - - - - -
Table 5. Query Results
1

myPassword

-
-

The principal query can be defined with password mappers which define which columns should be used to construct the password for the identity being loaded, in this example a clear-password-mapper is used: -

-
-
-
-
clear-password-mapper={password-index=1}
-
-
-
- - - - - -
- - -The index of the first column is 1 -
-
-
-
-
Alternative Password Mappers
-
-

The WildFly Elytron project supports a variety of password types as described within Passwords, some of these password types require multiple values to be loaded from the database to reconstruct the password so alternative password mappers are made available. More than one password mapper can be defined on a single principal-query to support loading multiple passwords simultaneously.

-
-
- - - - - -
- - -Where the various password mappers load encoded representations of passwords and salts from the database these can either be encoded using Base64 or Hexadecimal, by default unless specified Base64 is assumed. -
-
-
-
clear-password-mapper
-
-

This mapper is used to load a clear text password directly from the database.

-
-
-

The following attribute is supported for this password mapper: -

-
-
-
    -
  • -

    password-index - The index of the column containing the clear text password.

    -
  • -
-
-
-
-
bcrypt-password-mapper
-
-

The bcrypt-password-mapper can be used for passwords to be loaded using the bcrypt algorithm, as an iterated salted password type the iteration count and salt are also loaded from the database query.

-
-
-
    -
  • -

    password-index - The index of the column containing the encoded password.

    -
  • -
  • -

    hash-encoding - The encoding of the hash, either base64 or hex.

    -
  • -
  • -

    salt-index - The index of the column containing the encoded salt.

    -
  • -
  • -

    salt-encoding - The encoding of the salt, either base64 or hex.

    -
  • -
  • -

    iteration-count-index - The index of the column containing the iteration count.

    -
  • -
-
-
-
-
modular-crypt-mapper
-
-

The modular-crypt-mapper can be used for passwords encoded using modular crypt, this encoding allows for multiple pieces of information to be encoded in single String such as the password type, the hash or digest, the salt, and the iteraction count.

-
-
-

Information on how to encode and decode modular crypt representations can be seen in Modular Crypt Encoding.

-
-
-

The following attribute is supported for this password mapper: -

-
-
-
    -
  • -

    password-index - The index of the column containing the modular crypt encoded password.

    -
  • -
-
-
-
-
salted-simple-digest-mapper
-
-

The salted-simple-digest-mapper supports the password types hashed with a salt as described in Salted Digest, for this type of password the encoded form of the password is loaded in addition to the salt.

-
-
-
    -
  • -

    algorithm - The algorithm of the password type, the supported values are listed at Salted Digest.

    -
  • -
  • -

    password-index - The index of the column containing the encoded password.

    -
  • -
  • -

    hash-encoding - The encoding of the hash, either base64 or hex.

    -
  • -
  • -

    salt-index - The index of the column containing the encoded salt.

    -
  • -
  • -

    salt-encoding - The encoding of the salt, either base64 or hex.

    -
  • -
-
-
-
-
simple-digest-mapper
-
-

The simple-digest-mapper supports the loading of passwords which have been simply hashed without any salt as described in Simple Digest.

-
-
-
    -
  • -

    algorithm - The algorithm of the password type, the supported values are listed at Simple Digest.

    -
  • -
  • -

    password-index - The index of the column containing the encoded password.

    -
  • -
  • -

    hash-encoding - The encoding of the hash, either base64 or hex.

    -
  • -
-
-
-
-
scram-mapper
-
-

The scram-mapper supports the loading of SCRAM passwords which use both a salt and an interation count as described in Scram.

-
-
-
    -
  • -

    algorithm - The algorithm of the password type, the supported values are listed at Scram.

    -
  • -
  • -

    password-index - The index of the column containing the encoded password.

    -
  • -
  • -

    hash-encoding - The encoding of the hash, either base64 or hex.

    -
  • -
  • -

    salt-index - The index of the column containing the encoded salt.

    -
  • -
  • -

    salt-encoding - The encoding of the salt, either base64 or hex.

    -
  • -
  • -

    iteration-count-index - The index of the column containing the iteration count.

    -
  • -
-
-
-
-
-
Hash Character Sets
-
-

The various password mappers allow loading multiples values from the database to hash the client provided password in order -to compare against the password stored in the database.

-
-
-

The JDBC realm supports specifying the character set via the attribute hash-charset to use when converting -the client provided password string to a byte array. This is useful when our database is storing -hashed passwords using a charset other than UTF-8, as the JDBC realm assumes that is the charset being used by default.

-
-
- - - - - -
- - -Although more than one password mapper can be defined on a single principal-query, only one hash-charset -can be defined across the whole realm. -
-
-
-

For example, the following JDBC realm is configured using the GB2312 charset:

-
-
-
-
 /subsystem=elytron/jdbc-realm=exampleDbRealm:add(principal-query=[{sql="SELECT password FROM all_users WHERE user=?",data-source=exampleDS,simple-digest-mapper={algorithm=password-salt-digest-md5,password-index=1}}])
-
-
-
-
-
Using a Hashed Password Representation
-
-

The same approach can be taken for all hashed password representations, for illustration purposes this section will illustrate how a bcrypt password can be prepared to be stored in a database and the subsequent realm configuration to make use of it. Examples uising the APIs for the different password types can be found in the Passwords section of this documentation.

-
-
-

The following example takes the password myPassword, generates a random salt an produces a bcrypt representation of the password.

-
-
-
-
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
-
-static final String TEST_PASSWORD = "myPassword";
-
-public static void main(String[] args) throws Exception {
-    PasswordFactory passwordFactory = PasswordFactory.getInstance(BCryptPassword.ALGORITHM_BCRYPT, ELYTRON_PROVIDER);
-
-    int iterationCount = 10;
-
-    byte[] salt = new byte[BCryptPassword.BCRYPT_SALT_SIZE];
-    SecureRandom random = new SecureRandom();
-    random.nextBytes(salt);
-
-    IteratedSaltedPasswordAlgorithmSpec iteratedAlgorithmSpec = new IteratedSaltedPasswordAlgorithmSpec(iterationCount, salt);
-    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), iteratedAlgorithmSpec);
-
-    BCryptPassword original = (BCryptPassword) passwordFactory.generatePassword(encryptableSpec);
-
-    byte[] hash = original.getHash();
-
-    Encoder encoder = Base64.getEncoder();
-    System.out.println("Encoded Salt = " + encoder.encodeToString(salt));
-    System.out.println("Encoded Hash = " + encoder.encodeToString(hash));
-}
-
-
-
-

This produces the following output, as the salt is randomly generated the output would differ each time the above code is executed.

-
-
-
-
Encoded Salt = 3bFOQwRU75to+yJ8Cv0g8w==
-Encoded Hash = x9P/0cxfNz+Pf3HCinZ3dLCbNMnBeiU=
-
-
-
-

This could now be stored in a database table: -

-
- - ------ - - - - - - - - - - - - - - - - -
Table 6. Example Table
NAMEPASSWORDSALTITERATION_COUNT

test

x9P/0cxfNz+Pf3HCinZ3dLCbNMnBeiU=

3bFOQwRU75to+yJ8Cv0g8w==

10

-
-

The JDBC security realm can instead be created with the following CLI command: -

-
-
-
-
/subsystem=elytron/jdbc-realm=demo-realm:add(
-    principal-query=[{data-source=Identities,
-                      sql="select PASSWORD, SALT, ITERATION_COUNT from IDENTITIES where NAME = ?",
-                      bcrypt-mapper={password-index=1, salt-index=2, iteration-count-index=3}}])
-
-
-
-

For the user test the result of the query would be: -

-
- - ----- - - - - - - - - - - - - - - -
Table 7. Query Results
123

x9P/0cxfNz+Pf3HCinZ3dLCbNMnBeiU=

3bFOQwRU75to+yJ8Cv0g8w==

10

-
-

The bcrypt-password-mapper is defined to load the encoded password, encoded salt and iteration count from the relevent columns in the query result.

-
-
-
-
bcrypt-mapper={password-index=1, salt-index=2, iteration-count-index=3}
-
-
-
-

Had the values been encoding using hexadecimal instead of Base64 the bcrypt-mapper could have been defined as: -

-
-
-
-
bcrypt-mapper={password-index=1, hash-encoding=hex, salt-index=2, salt-encoding=hex, iteration-count-index=3}
-
-
-
- - - - - -
- - -It is worth noting that as the hash-encoding and salt-encoding are specified separately one could use Base64 whilst the other uses hexadecimal. -
-
-
-
-
Loading Passwords from Different Queries / Datasources
-
-

It is also possible to combine both of the example so far and define two separate principal-query instances to attempt to load both password types from different locations.

-
-
-

Here is an example configuration loading a clear text password from one datasource / table and loading a bcrypt password from a second datasource / table.

-
-
-
-
/subsystem=elytron/jdbc-realm=demo-realm:add(
-    principal-query=[
-        {data-source=LegacyIdentities,
-         sql="select PASSWORD from LEGACY_IDENTITIES where NAME = ?",
-         clear-password-mapper={password-index=1}},
-        {data-source=NewIdentities,
-         sql="select PASSWORD, SALT, ITERATION_COUNT from NEW_IDENTITIES where NAME = ?",
-         bcrypt-mapper={password-index=1, salt-index=2, iteration-count-index=3}}
-                    ])
-
-
-
- - - - - -
- - -It is not required that the identity is found from both of the queries, this can be useful in situations where identities are being migrated from one location to another or for aggregating two together. -
-
-
-
-
Loading Attributes
-
-

The examples so far have focussed on the loading of passwords from the database, the principal queries can also be used to load attributes for the resulting identities.

-
-
-

The loading of attributes can either be defined to happen within the principal queries being used to load the passwords or attribute specific principal queries can be defined, as each principal-query can be defined with it’s own datasource reference this means attributes can also be loaded from alternative locations.

-
-
-

The loaded attributes can then be used for mapping to roles and permissions which should be granted to the identity or they can be obtained programatically within the deployment to identify information about the currently authenticated identity.

-
-
-
Loading Attributes with Passwords
-
-

For single valued attributes these can often be loaded using the same principal-query used to load an identities password, as an example if an identities e-mail address or department is to be loaded from the database these can be loaded at the same time as the password.

-
-
-

A table for this example could look like: -

-
- - ------ - - - - - - - - - - - - - - - - -
Table 8. Example Table
NAMEPASSWORDE_MAILDepartment

test

myPassword

test@example.com

Sales

-
-

The realm can now be defined as: -

-
-
-
-
/subsystem=elytron/jdbc-realm=demo-realm:add(
-    principal-query=[
-        {data-source=Identities,
-         sql="select PASSWORD, E_MAIL, DEPARTMENT from IDENTITIES where NAME = ?",
-         clear-password-mapper={password-index=1},
-         attribute-mapping=[{index=2, to=email},{index=3,to=department}]
-        }])
-
-
-
-

For the user test the result of the query would be: -

-
- - ----- - - - - - - - - - - - - - - -
Table 9. Query Results
123

myPassword

test@example.com

Sales

-
-

The configuration contained the following attribute mappings: -

-
-
-
-
attribute-mapping=[{index=2, to=email},{index=3,to=department}]
-
-
-
-

This means the contents of column 2 will be mapped to the email attribute and the contents of column 3 will be mapped to the department attribute.

-
-
-
-
Loading Attributes Separately.
-
-

For multi-valued attributes such as a list of groups it can often make sense to define a separate principal query.

-
-
-

A list of groups could be represented as follows in a table.

-
- - ---- - - - - - - - - - - - - - - - - -
Table 10. Example Table
NAMETEAM

test

Users

test

Supervisors

-
-

A realm can now be defined with a second principal query to load the groups into an attribute.

-
-
-
-
/subsystem=elytron/jdbc-realm=demo-realm:add(
-    principal-query=[
-        {data-source=Identities,
-         sql="select PASSWORD from IDENTITIES where NAME = ?",
-         clear-password-mapper={password-index=1}
-        },{data-source=Identities,
-         sql="select TEAM from MEMBERSHIP where NAME = ?",
-         attribute-mapping=[{index=1, to=groups}]
-        }])
-
-
-
-

Within this definition the second principal-query will load the attribute groups: -

-
-
-
-
{data-source=Identities,
- sql="select TEAM from MEMBERSHIP where NAME = ?",
- attribute-mapping=[{index=1, to=groups}]
-}
-
-
-
-

For the user test the results would be: -

-
- - --- - - - - - - - - - - - - - -
Table 11. Query Results
1

Users

Supervisors

-
-

The end result would be that the identity contains the attribute groups with the values Users, and Supervisors

-
-
-
-
-
-

4.5.5. JAAS Security Realm

-
-

A JAAS realm utilizes a LoginContext initialized from a JAAS configuration file to authenticate and authorize users with custom Login Modules. Flags and options can be specified in a JAAS configuration file according to the Java documentation.

-
-
-

The jaas-realm resource contains the following attributes: -

-
-
-
    -
  • -

    entry JAAS configuration file entry name

    -
  • -
  • -

    path Path to the JAAS configuration file. You can also specify the location of the configuration with java system property "java.security.auth.login.config" or with java security property "login.config.url"

    -
  • -
  • -

    relative-to Optional base folder for the path.

    -
  • -
  • -

    module The WildFly module with Login Module implementations and Callback Handler implementation.

    -
  • -
  • -

    callback-handler Callback handler to use with the Login Context. Security property "auth.login.defaultCallbackHandler" can be used instead. The default callback handler of the realm will be used if none of these are defined.

    -
  • -
-
-
-

All attributes but entry are optional.

-
-
-

Example of jaas-realm configuration via WildFly CLI:

-
-
-
-
/subsystem=elytron/jaas-realm=theRealm:add(
-    entry=Entry1,
-    path=/path/to/jaas/config/JAASConfig.conf,
-    module=myLoginModule,
-    callback-handler=my.custom.MyCallbackHandler)
-
-
-
-
Subject’s Principals to attributes mapping
-
-

Login Modules use Subjects to represent the user currently being authenticated. Subject’s -principals are mapped to user’s attributes with the following rule:

-
-
-
    -
  • -

    key of the attribute is principal’s simple classname, so the value of principal.getClass().getSimpleName())

    -
  • -
  • -

    value is principal’s name, so the result of principal.getName() call. For principals of the same type / key, the values will be appended to the collection under this attribute key.

    -
  • -
-
-
-

Attributes can be used to associate roles in the Elytron subsystem. Roles is the default attribute name used for this purpose. You can configure a role-decoder to use a different attribute. This means you can add roles to authenticated user by associating principals with the Subject in a Login Module imlpementations.

-
-
-
-
-
-
-
-

5. Using Elytron within WildFly

-
-
-

5.1. Using the Out of the Box Elytron Components

-
-

5.1.1. Securing Management Interfaces

-
-

You can find more details on the enabling WildFly to use the out of the -box Elytron components for securing the management interfaces in the -Default -Management Authentication Configuration section.

-
-
-
-

5.1.2. Securing Applications

-
-

The elytron subsystem provides application-security-domain by -default which can be used to secure applications. For more details on -how application-security-domain is configured, see the -Default -Application Authentication Configuration section.

-
-
-

To configure applications to use application-security-domain, see -Set Up and Configure Authentication for Applications. You -can also override the default behavior of all applications using the -steps in -Override an Application’s Authentication Configuration.

-
-
-
-

5.1.3. Using SSL/TLS

-
-

WildFly does provide a default one-way SSL/TLS configuration using the -legacy core management authentication but does not provide one in the -elytron subsystem. You can find more details on configuring SSL/TLS -using the elytron subsystem for both the management interfaces as well -as for applications in -Configure -SSL/TLS

-
-
-
-

5.1.4. Using Elytron with Other Subsystems

-
-

In addition to securing applications and management interfaces, Elytron -also integrates with other subsystems in WildFly.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SubsystemDetails

batch-jberet

You can configure the batch-jberet to run batch jobs -using an Elytron security domain.

datasources

You can use a credential store or an Elytron security -domain to provide authentication information in a datasource definition.

messaging-activemq

You can secure remote connections to the remote -connections used by the messaging-activemq subsystem.

iiop-openjdk

You can use the elytron subsystem to configure SSL/TLS -between clients and servers using the iiop-openjdk subsystem.

mail

You can use a credential store to provide authentication -information in a server definition in the mail subsystem.

undertow

You can use the elytron subsystem to configure both SSL/TLS -and application authentication.

-
-
-
-

5.2. Undertow Subsystem

-
-

As a web application is deployed the name of the security domain required by that application will be identified, this will either be from within the deployment or if the deployment does not have a security domain the default-security-domain as defined on the Undertow subsystem will be assumed. An application-security-domain resource can be added to the Undertow subsystem which maps from the name of the security domain required by the application to the appropriate WildFly Elytron configuration.

-
-
-

As an example in it’s simplest form a mapping can be added as: -

-
-
-
-
/subsystem=undertow/application-security-domain=MyAppSecurity:add(security-domain=ApplicationDomain)
-
-
-
-

Which results in: -

-
-
-
-
<subsystem xmlns="urn:jboss:domain:undertow:7.0" ... default-security-domain="other">
-...
-    <application-security-domains>
-        <application-security-domain name="MyAppSecurity" security-domain="ApplicationDomain"/>
-    </application-security-domains>
-...
-</subsystem>
-
-
-
-

Note: If the deployment was already deployed at this point the -application server should be reloaded or the deployment redeployed for -the application security domain mapping to take effect.

-
-
-

Here we are mapping from the applications security domain MyAppSecurity to the WildFly Elytron defined domain ApplicationDomain.

-
-
-

This simple form is suitable where a deployment is using the standard HTTP mechanisms as defined within the Servlet specification i.e. BASIC, CLIENT_CERT, DIGEST, FORM and authentication will be performed against the ApplicationDomain security domain. This form is also suitable where an application is not using any authentication mechanisms and instead is using programatic authentication or even wishes to obtain the SecurityDomain associated with the deployment and use it directly.

-
-
-

An advanced form of the mapping can be added as: -

-
-
-
-
/subsystem=undertow/application-security-domain=MyAppSecurity:add(http-authentication-factory=application-http-authentication)
-
-
-
-

Which results in: -

-
-
-
-
<subsystem xmlns="urn:jboss:domain:undertow:7.0" ... default-security-domain="other">
-...
-    <application-security-domains>
-        <application-security-domain name="MyAppSecurity" http-authentication-factory="application-http-authentication"/>
-    </application-security-domains>
-...
-</subsystem>
-
-
-
-

In this form of the configuration instead of referencing a security domain a http-authentication-factory is referenced instead, this is the factory that will be used to obtain the instances of the authentication mechansisms and is in turn associated with the security domain. The standard mechanisms as defined in the Servlet specification can be used in this way but this approach also allows for other mechanisms to be used such as SPNEGO which requires additional configuration or even plug-in custom mechanism implementations.

-
-
-

When the advanced form of the mapping is used a further configuration option is available: -

-
-
-
    -
  • -

    override-deployment-config

    -
  • -
-
-
-

The referenced http-authentication-factory can return a complete set of authentication mechanisms, by default these are filtered to just match the mechanisms requested by the application - if this option is set to true then the mechanisms offered by the factory will override the mechanisms requested by the application. One example of where this could be useful is say an application has been developed to support FORM authentication, by overriding the mechanisms the application could be updated to support SPNEGO, and FORM authentication without any modifications to the deployment.

-
-
-

The application-security-domain resource also has one additional option enable-jacc, if this is set to true JACC will be enabled for any deployments matching against this mapping.

-
-
-

5.2.1. Runtime Information

-
-

Where an application-security-domain mapping is in use it can be useful to double check that deployments did match against it as expected, if the resource is read with include-runtime=true the deployments that are associated with the mapping will also be shown: -

-
-
-
-
[standalone@localhost:9990 /] /subsystem=undertow/application-security-domain=MyAppSecurity:read-resource(include-runtime=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "enable-jacc" => false,
-        "http-authentication-factory" => undefined,
-        "override-deployment-config" => false,
-        "referencing-deployments" => ["simple-webapp.war"],
-        "security-domain" => "ApplicationDomain",
-        "setting" => undefined
-    }
-}
-
-
-
-

In this output the referencing-deployments attribute shows that the deployment simple-webapp.war has been deployed using this mapping.

-
-
-
-
-

5.3. Jakarta Enterprise Beans Subsystem

-
-

Configuration can be added to the Jakarta Enterprise Beans subsystem to map a security domain -name referenced in a deployment to an Elytron security domain:

-
-
-
-
/subsystem=ejb3/application-security-domain=MyAppSecurity:add(security-domain=ApplicationDomain)
-
-
-
-

Which results in:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:ejb3:5.0">
-...
-    <application-security-domains>
-        <application-security-domain name="MyAppSecurity" security-domain="ApplicationDomain"/>
-    </application-security-domains>
-...
-</subsystem>
-
-
-
-

Note: If the deployment was already deployed at this point the -application server should be reloaded or the deployment redeployed for -the application security domain mapping to take effect.

-
-
-

An application-security-domain has two main attributes:

-
-
-
    -
  • -

    name - the name of the security domain as specified in a deployment

    -
  • -
  • -

    security-domain - a reference to the Elytron security domain that -should be used

    -
  • -
-
-
-

There is another attribute called legacy-compliant-principal-propagation. -If it is set to true and there is no incoming run-as identity, -then the principal of the local unsecured bean is the current authenticated identity. This was the case -for legacy PicketBox security. If this attribute is set to false, the behaviour will comply with the Elytron’s previous -behaviour and if there is no incoming run-as identity then the principal of the local unsecured bean is anonymous. -This attribute is optional and the default value is true.

-
-
-

When an application security domain mapping is configured for a bean in -a deployment, this indicates that security should be handled by Elytron.

-
-
-
-

5.4. WebServices Subsystem

-
-

There is adapter in webservices subsystem to make authentication works -for elytron security domain automatically. Like configure with legacy -security domain, you can configure elytron security domain in deployment -descriptor or annotation to secure webservice endpoint.

-
-
-

When Elytron security is enabled, JAAS subject or principal can be pushed -to jbossws-cxf endpoint’s SecurityContext to propagate authenticated -identity to Jakarta Enterprise Beans container. Here is a CXF interceptor example to -propagate authenticated information to Jakarta Enterprise Beans container :

-
-
-
-
public class PropagateSecurityInterceptor extends WSS4JInInterceptor {
-
-   public PropagateSecurityInterceptor() {
-      super();
-      getAfter().add(PolicyBasedWSS4JInInterceptor.class.getName());
-   }
-
-   @Override
-   public void handleMessage(SoapMessage message) throws Fault {
-      ...
-      final Endpoint endpoint = message.getExchange().get(Endpoint.class);
-      final SecurityDomainContext securityDomainContext = endpoint.getSecurityDomainContext();
-      //push subject principal retrieved from CXF to ElytronSecurityDomainContext
-      securityDomainContext.pushSubjectContext(subject, principal, null)
-   }
-
-}
-
-
-
-
-
-
-

6. Client Authentication with Elytron Client

-
-
-

WildFly Elytron uses the Elytron Client project to enable remote clients -to authenticate using Elytron. Elytron Client has the following -components:

-
- ---- - - - - - - - - - - - - - - - - - - - - -
ComponentDescription

Authentication Configuration

Contains authentication information such -as usernames, passwords, allowed SASL mechanisms, and the security realm -to use during digest authentication.

MatchRule

Rule used for deciding which authentication configuration to -use.

Authentication Context

Set of rules and authentication configurations -to use with a client for establishing a connection.

-
-

When a connection is established, the client makes use of an -authentication context, which gives rules that match which -authentication configuration is used with an outbound connection. For -example, you could have a rule that use one authentication -configuration when connecting to server1 and another authentication -configuration when connecting with server2. The authentication context -is comprised of a set of authentication configurations and a set of -rules that define how they are selected when establishing a connection. -An authentication context can also reference ssl-context and can be -matched with rules.

-
-
-

To create a client that uses security information when establishing a -connection:

-
-
-
    -
  • -

    Create one or more authentication configurations.

    -
  • -
  • -

    Create an authentication context by creating rule and authentication -configuration pairs.

    -
  • -
  • -

    Create a runnable for establishing your connection.

    -
  • -
  • -

    Use your authentication context to run your runnable.

    -
  • -
-
-
-

When you establish your connection, Elytron Client will use the set of -rules provided by the authentication context to match the correct -authentication configuration to use during authentication.

-
-
-

You can use one of the following approaches to use security information -when establishing a client connection.

-
-
-

IMPORTANT: When using Elytron Client to make Jakarta Enterprise Beans calls, any hard-coded -programatic authentication information, such as setting -Context.SECURITY_PRINCIPAL in the javax.naming.InitialContext, will -override the Elytron Client configuration.

-
-
-

6.1. The Configuration File Approach

-
-

The configuration file approach involves creating an XML file with your -authentication configuration, authentication context, and match rules.

-
-
-

custom-config.xml

-
-
-
-
<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <authentication-rules>
-            <rule use-configuration="monitor">
-                <match-host name="127.0.0.1" />
-            </rule>
-            <rule use-configuration="administrator">
-                <match-host name="localhost" />
-            </rule>
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="monitor">
-                <allow-sasl-mechanisms names="DIGEST-MD5" />
-                 <use-service-loader-providers />
-                 <set-user-name name="monitor" />
-                 <credentials>
-                     <clear-password password="password1!" />
-                 </credentials>
-                 <set-mechanism-realm name="ManagementRealm" />
-             </configuration>
-
-             <configuration name="administrator">
-                <allow-sasl-mechanisms names="DIGEST-MD5" />
-                 <use-service-loader-providers />
-                 <set-user-name name="administrator" />
-                 <credentials>
-                     <clear-password password="password1!" />
-                 </credentials>
-                 <set-mechanism-realm name="ManagementRealm" />
-             </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-

The above example shows how the password for authentication can be specified in the clear. However, it’s also possible -to use a masked password instead.

-
-
-

custom-config.xml

-
-
-
-
<configuration>
-    <authentication-client xmlns="urn:elytron:1.4">
-        <authentication-rules>
-            <rule use-configuration="monitor">
-                <match-host name="127.0.0.1" />
-            </rule>
-            <rule use-configuration="administrator">
-                <match-host name="localhost" />
-            </rule>
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="monitor">
-                <allow-sasl-mechanisms names="DIGEST-MD5" />
-                 <use-service-loader-providers />
-                 <set-user-name name="monitor" />
-                 <credentials>
-                     <masked-password iteration-count="100" salt="12345678" masked-password="/Nym2s/dssMrabfdIGsZfQ==" />
-                 </credentials>
-                 <set-mechanism-realm name="ManagementRealm" />
-             </configuration>
-
-             <configuration name="administrator">
-                <allow-sasl-mechanisms names="DIGEST-MD5" />
-                 <use-service-loader-providers />
-                 <set-user-name name="administrator" />
-                 <credentials>
-                     <masked-password iteration-count="100" salt="12345678" masked-password="/Nym2s/dssMrabfdIGsZfQ==" />
-                 </credentials>
-                 <set-mechanism-realm name="ManagementRealm" />
-             </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-

You can then reference that file in your client’s code by setting a system property when running your client.

-
-
-
-
$ java -Dwildfly.config.url=/path/to/the.xml .....
-
-
-
-

IMPORTANT: If you use the -The -Programmatic Approach, it will override any provided configuration -files even if the wildfly.config.url system property is set.

-
-
-

When creating rules, you can look for matches on various parameters such -as hostname, port, protocol, or username. A full list of options for -MatchRule are available in the -Javadocs. -Rules are evaluated in the order in which they are configured.

-
-
-

Common Rules

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RuleDescription

match-domain

Takes a single name attribute specifying the security -domain to match against.

match-host

Takes a single name attribute specifying the hostname to -match against. For example, the host 127.0.0.1 would match on -http://127.0.0.1:9990/my/path .

match-no-user

Matches against URIs with no user.

match-path

Takes a single name attribute specifying the path to match -against. For example, the path /my/path/ would match on -http://127.0.0.1:9990/my/path .

match-port

Takes a single name attribute specifying the port to match -against. For example, the port 9990 would match on -http://127.0.0.1:9990/my/path .

match-protocol

Takes a single name attribute specifying the protocol -to match against. For example, the protocol http would match on -http://127.0.0.1:9990/my/path .

match-purpose

Takes a names attribute specifying the list of purposes -to match against.

match-urn

Takes a single name attribute specifying the URN to match -against.

match-user

Takes a single name attribute specifying the user -to match against.

-
-
-

6.2. The Programmatic Approach

-
-

The programatic approach configures all the Elytron Client configuration -in the client’s code:

-
-
-
-
//create your authentication configuration
-AuthenticationConfiguration adminConfig =
-    AuthenticationConfiguration.empty()
-      .useProviders(() -> new Provider[] { new WildFlyElytronProvider() })
-      .allowSaslMechanisms("DIGEST-MD5")
-      .useRealm("ManagementRealm")
-      .useName("administrator")
-      .usePassword("password1!");
- 
-//create your authentication context
-AuthenticationContext context = AuthenticationContext.empty();
-context = context.with(MatchRule.ALL.matchHost("127.0.0.1"), adminConfig);
- 
- 
-//create your runnable for establishing a connection
-Runnable runnable =
-    new Runnable() {
-      public void run() {
-        try {
-           //Establish your connection and do some work
-        } catch (Exception e) {
-          e.printStackTrace();
-        }
-      }
-    };
- 
-//use your authentication context to run your client
-context.run(runnable);
-
-
-
-

The above example shows how the password for authentication can be specified in the clear. However, it’s also possible -to use a masked password instead.

-
-
-
-
//create your authentication configuration
-AuthenticationConfiguration adminConfig =
-    AuthenticationConfiguration.empty()
-      .useProviders(() -> new Provider[] { new WildFlyElytronProvider() })
-      .allowSaslMechanisms("DIGEST-MD5")
-      .useRealm("ManagementRealm")
-      .useName("administrator")
-      .usePassword("/Nym2s/dssMrabfdIGsZfQ==", null, null, "100", "12345678", null);
- 
-//create your authentication context
-AuthenticationContext context = AuthenticationContext.empty();
-context = context.with(MatchRule.ALL.matchHost("127.0.0.1"), adminConfig);
- 
- 
-//create your runnable for establishing a connection
-Runnable runnable =
-    new Runnable() {
-      public void run() {
-        try {
-           //Establish your connection and do some work
-        } catch (Exception e) {
-          e.printStackTrace();
-        }
-      }
-    };
- 
-//use your authentication context to run your client
-context.run(runnable);
-
-
-
-

When adding configuration details to AuthenticationConfiguration and -AuthenticationContext, each method call returns a new instance of that -object. For example, if you wanted separate configurations when -connecting over different hostnames, you could do the following:

-
-
-
-
//create your authentication configuration
-AuthenticationConfiguration commonConfig =
-    AuthenticationConfiguration.empty()
-      .useProviders(() -> new Provider[] { new WildFlyElytronProvider() })
-      .allowSaslMechanisms("DIGEST-MD5")
-      .useRealm("ManagementRealm");
- 
-AuthenticationConfiguration administrator =
-    commonConfig
-      .useName("administrator")
-      .usePassword("password1!");
-
-
-AuthenticationConfiguration monitor =
-    commonConfig
-      .useName("monitor")
-      .usePassword("password1!");
- 
- 
-//create your authentication context
-AuthenticationContext context = AuthenticationContext.empty();
-context = context.with(MatchRule.ALL.matchHost("127.0.0.1"), administrator);
-context = context.with(MatchRule.ALL.matchHost("localhost"), monitor);
-
-
-
-

Common Rules

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RuleDescription

matchLocalSecurityDomain(String name)

This is the same as match-domain -in the configuration file approach.

matchNoUser()

This is the same as match-no-user in the configuration -file approach.

matchPath(String pathSpec)

This is the same as match-path in the -configuration file approach.

matchPort(int port)

This is the same as match-port in the -configuration file approach.

matchProtocol(String protoName)

This is the same as match-port in the -configuration file approach.

matchPurpose(String purpose)

Create a new rule which is the same as -this rule, but also matches the given purpose name.

matchPurposes(String…​ purposes)

This is the same as match-purpose in -the configuration file approach.

matchUrnName(String name)

This is the same as match-urn in the -configuration file approach.

matchUser(String userSpec)

This is the same as match-user in the -configuration file approach.

-
-

Also, instead of starting with an empty authentication configuration, -you can start with the current configured one by using -captureCurrent().

-
-
-
-
//create your authentication configuration
-AuthenticationConfiguration commonConfig = AuthenticationConfiguration.captureCurrent();
-
-
-
-

Using captureCurrent() will capture any previously established -authentication context and use it as your new base configuration. -An authentication context is established once it’s been activated by calling -run(). If captureCurrent() is called and no context is currently -active, it will try and use the default authentication if available. You -can find more details about this in -The -Configuration File Approach, -The -Default Configuration Approach, and -Using Elytron Client -with Clients Deployed to WildFly sections.

-
-
-

Using AuthenticationConfiguration.empty() should only be used as a base -to build a configuration on top of and should not be used on its own. It -provides a configuration that uses the JVM-wide registered providers and -enables anonymous authentication.

-
-
-

When specifying the providers on top of the -AuthenticationConfiguration.empty() configuration, you can specify a -custom list, but most users should use WildFlyElytronProvider() -providers.

-
-
-

When creating an authentication context, using the context.with(…​) -will create a new context that merges the rules and authentication -configuration from the current context with the provided rule and -authentication configuration. The provided rule and authentication -configuration will appear after the ones in the current context.

-
-
-
-

6.3. The Default Configuration Approach

-
-

The default configuration approach relies completely on the -configuration provided by Elytron Client:

-
-
-
-
//create your runnable for establishing a connection
-Runnable runnable =
-    new Runnable() {
-      public void run() {
-        try {
-           //Establish your connection and do some work
-        } catch (Exception e) {
-          e.printStackTrace();
-        }
-      }
-    };
- 
-// run runnable directly
-runnable.run();
-
-
-
-

To provide a default configuration, Elytron Client tries to -auto-discover a wildfly-config.xml file on the filesystem. It looks in -the following locations:

-
-
-
    -
  • -

    Location specified by the wildfly.config.url system property set -outside of the client code.

    -
  • -
  • -

    The classpath root directory.

    -
  • -
  • -

    The META-INF directory on the classpath.

    -
  • -
-
-
-

If it does not find one, it will try and use the default -wildfly-config.xml provided in the -$WILDFLY_HOME/bin/client/jboss-client.jar.

-
-
-

default wildfly-config.xml

-
-
-
-
<configuration>
-  <authentication-client xmlns="urn:elytron:1.0">
-    <authentication-rules>
-      <rule use-configuration="default" />
-    </authentication-rules>
-    <authentication-configurations>
-      <configuration name="default">
-        <allow-all-sasl-mechanisms />
-        <set-mechanism-properties>
-          <property key="wildfly.sasl.local-user.quiet-auth" value="true" />
-        </set-mechanism-properties>
-        <use-service-loader-providers />
-      </configuration>
-    </authentication-configurations>
-  </authentication-client>
-</configuration>
-
-
-
-
-

6.4. Using Elytron Client with Clients Deployed to WildFly

-
-

Clients deployed to WildFly can also make use of Elytron Client. In -cases where you have included a wildfly-config.xml with your -deployment or the system property has been set, an -AuthenticationContext is automatically parsed and created from that -file.

-
-
-

To load a configuration file outside of the deployment, you can use the -parseAuthenticationClientConfiguration(URI) method. This method will -return an AuthenticationContext which you can then use in your client’s -code using the -The -Programmatic Approach.

-
-
-

Additionally, clients will also automatically parse and create an -AuthenticationContext from the client configuration provided by the -elytron subsystem. The client configuration in the elytron subsystem -can also take advantage of other components defined in the elytron -subsystem such as credential stores. If client configuration is provided -by BOTH the deployment and the elytron subsystem, the elytron -subsystem’s configuration is used.

-
-
-
-

6.5. Client configuration using wildfly-config.xml

-
-

Prior to WildFly 11, many WildFly client libraries used different configuration strategies. WildFly 11 introduces a new wildfly-config.xml file which unifies all client configuration in a single place. In addition to being able to configure authentication using Elytron as described in the previous section, a wildfly-config.xml file can also be used to:

-
-
-

6.5.1. Configure Jakarta Enterprise Beans client connections, global interceptors, and invocation timeout

- -
-

Example configuration:

-
-
-
wildfly-config.xml
-
-
<configuration>
-...
-    <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
-        <invocation-timeout seconds="10"/>
-        <connections>
-            <connection uri="remote+http://10.20.30.40:8080"/>
-        </connections>
-        <global-interceptors>
-            <interceptor class="org.jboss.example.ExampleInterceptor"/>
-        </global-interceptors>
-    </jboss-ejb-client>
-...
-</configuration>
-
-
-
-
-

6.5.2. Configure HTTP client

- -
-

Example configuration:

-
-
-
wildfly-config.xml
-
-
<configuration>
-...
-    <http-client xmlns="urn:wildfly-http-client:1.0">
-        <defaults>
-            <eagerly-acquire-session value="true" />
-            <buffer-pool buffer-size="2000" max-size="10" direct="true" thread-local-size="1" />
-        </defaults>
-    </http-client>
-...
-</configuration>
-
-
-
-
-

6.5.3. Configure a remoting endpoint

- -
-

Example configuration:

-
-
-
wildfly-config.xml
-
-
<configuration>
-...
-    <endpoint xmlns="urn:jboss-remoting:5.0">
-        <connections>
-            <connection destination="remote+http://10.20.30.40:8080" read-timeout="50" write-timeout="50" heartbeat-interval="10000"/>
-        </connections>
-    </endpoint>
-...
-</configuration>
-
-
-
-
-

6.5.4. Configure the default XNIO worker

- -
-

Example configuration:

-
-
-

wildfly-config.xml

-
-
-
-
<configuration>
-...
-    <worker xmlns="urn:xnio:3.5">
-        <io-threads value="10"/>
-        <task-keepalive value="100"/>
-        <stack-size value="5000"/>
-    </worker>
-...
-</configuration>
-
-
-
-
-

6.5.5. Configure RESTEasy client

-
-

RESTEasy client will automatically load credentials, bearer token and SSL context from wildfly-config.xml. Credentials will be used for HTTP Basic authentication and bearer token for Bearer token authentication.

-
-
-

Example configuration:

-
-
-

wildfly-config.xml

-
-
-
-
<configuration>
-    <authentication-client xmlns="urn:elytron:client:1.4">
-    ...
-        <set-user-name name="administrator" />
-        <credentials>
-            <bearer-token value="bearerTokenValue"/>
-        </credentials>
-        <key-stores>
-            <key-store name="truststore" type="PKCS12">
-                <file name="src/test/resources/org/jboss/resteasy/test/security/client-different-cert.truststore"/>
-            </key-store>
-        </key-stores>
-        <ssl-contexts>
-            <ssl-context name="client-context">
-                <trust-store key-store-name="truststore"/>
-            </ssl-context>
-        </ssl-contexts>
-        <ssl-context-rules>
-            <rule use-ssl-context="client-context"/>
-        </ssl-context-rules>
-    ...
-    </authentication-client>
-</configuration>
-
-
-
- - - - - -
- - -Note that WildFly client libraries do have reasonable default configuration. Thus, adding configuration for these clients to wildfly-config.xml isn’t mandatory. -
-
-
-
-
-
-
-

7. Elytron and Java Authorization Contract for Containers (JACC)

-
-
-
-This document will guide you on how to enable JACC for your deployments -using the default policy defined in the Elytron subsystem. -
-
-
-

7.1. Defining a JACC Policy Provider

-
-

Elytron subsystem provides a built-in policy provider based on JACC -specification. This policy provider is active by default in the -default configuration.

-
-
-
-

7.2. Enabling JACC to a Web Deployment

-
-

You can enable JACC to web -deployments by executing the following command:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=undertow/application-security-domain=other:add(http-authentication-factory=application-http-authentication,enable-jacc=true)
-
-
-
-

The command above defines a default security domain for applications if -none is provided in jboss-web.xml. In case you already have a -application-security-domain defined and just want to enable JACC you -can execute a command as follows:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=undertow/application-security-domain=my-security-domain:write-attribute(name=enable-jacc,value=true)
-
-
-
-
-

7.3. Enabling JACC to a EJB Deployment

-
-

You can enable JACC to EJB deployments by executing the following command:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=ejb3/application-security-domain=other:add(security-domain=ApplicationDomain,enable-jacc=true)
-
-
-
-

The command above defines a default security domain for EJBs. In case -you already have an application-security-domain defined and just want -to enable JACC you can execute a command as follows:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=ejb3/application-security-domain=my-security-domain:write-attribute(name=enable-jacc,value=true)
-
-
-
- - - - - -
- - -References in this document to Java Authorization Contract for Containers (JACC) refer to Jakarta Authorization unless otherwise noted. - References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -
-
-
-
-
-
-

8. Elytron and Java Authentication SPI for Containers (JASPI)

-
-
-
-Starting from WildFly 15 an implementation of the Servlet profile from the Java Authentication SPI for Containers (JSR-196 / JASPI) is also provided by the WildFly Elytron subsystem allowing tighter integration with the security features provided by WildFly Elytron. This JASPI implementation is available out of the box with minimal steps required to use it for deployments, this section of the documentation describes how to make use of it and the features it provides. -
-
-
-

8.1. Activation

-
-

Presently it is the Servlet profile from the JASPI specification which is supported by this integration, the following information applies to web applications deployed to WildFly.

-
-
-

For the JASPI integration to be enabled for a web application that web application needs to be associated with either an Elytron http-authentication-factory or a security-domain - by doing this the WildFly Elytron security handlers will be installed for the deployment and the WildFly Elytron security framework activated for the deployment. This is all that is required for a deployment to be 'securable' using a JASPI configuration.

-
-
-

Once the WildFly Elytron security framework is activate for a deployment at the time requests are being handled the globally registered AuthConfigFactory will be queried to identify if an AuthConfigProvider has been registered which should be used for that deployment - if an AuthConfigProvider is found then JASPI authentication will be used instead of the deployments authentication configuration. If no AuthConfigProvider is found then the authentication configuration for the deployment will be used instead, this could mean authentication mechanisms from a http-authentication-factory are used or mechanisms specified in the web.xml are used or it could even mean no authentication is performed if the application does not have any mechanisms defined.

-
-
-

Any updates made to the AuthConfigFactory are immediately available, this means that if an AuthConfigProvider is registered which is a match for an existing application it will start to be used immediately without requiring redeployment of the application.

-
-
-

All web applications deployed to WildFly have a security domain which will be resolved in the following order: -

-
-
-
    -
  1. -

    From the deployment descriptors / annotations of the deployment being deployed.

    -
  2. -
  3. -

    The value defined on the default-security-domain attribute on the Undertow subsystem.

    -
  4. -
  5. -

    Default to 'other'.

    -
  6. -
-
-
-

We assume that this security domain is a reference to a PicketBox security domain so the final step in activation is ensuring this is mapped to WildFly Elytron using an application-security-domain resource in the Undertow subsystem. This mapping can either reference a WildFly Elytron security domain directly or it can reference a http-authentication-factory resource to obtain instances of authentication mechanisms.

-
-
-

e.g.

-
-
-
-
/subsystem=undertow/application-security-domain=MyAppSecurity:add(security-domain=ApplicationDomain)
-
-
-
-

or

-
-
-
-
/subsystem=undertow/application-security-domain=MyAppSecurity:add(http-authentication-factory=application-http-authentication)
-
-
-
-

Although this latter form references a http-authentication-factory that in turn will reference a security domain - for both examples the referenced security domain is associated with the deployment.

-
-
-

The minimal steps to enable the JASPI integration are: - - . Leave the default-security-domain attribute on the Undertow subsystem undefined so it defaults to 'other'. - . Add an application-security-domain mapping from 'other' to a WildFly Elytron security domain.

-
-
-

All deployments that do not specify their own security domain will be assigned this default mapping automatically which will activate the WildFly Elytron handlers and subsequently make JASPI available for that deployment.

-
-
-

The security domain associated with a deployment in these steps is the security domain that will be wrapped in a CallbackHandler to be passed into the ServerAuthModule instances used for authentication.

-
-
-

8.1.1. Additional Options

-
-

On the application-security-domain resource two additional attributes have been added to allow some further control of the JASPI behaviour.

-
-
-
    -
  • -

    enable-jaspi - Can be set to false to disable JASPI support for all deployments using this mapping.

    -
  • -
  • -

    integrated-jaspi - By default all identities are loaded from the security domain, if set to false ad-hoc identities will be created instead.

    -
  • -
-
-
-
-
-

8.2. Subsystem Configuration

-
-

One way to register a configuration which will result in an AuthConfigProvider being returned for a deployment is to register a jaspi-configuration in the Elytron subsystem.

-
-
-

The following command demonstrates how to add a configuration containing two ServerAuthModule definitions: -

-
-
-
-
./subsystem=elytron/jaspi-configuration=simple-configuration:add(layer=HttpServlet, application-context="default-host /webctx", \
-        description="Elytron Test Configuration", \
-        server-auth-modules=[{class-name=org.wildfly.security.examples.jaspi.SimpleServerAuthModule, module=org.wildfly.security.examples.jaspi, flag=OPTIONAL, options={a=b, c=d}}, \
-            {class-name=org.wildfly.security.examples.jaspi.SecondServerAuthModule, module=org.wildfly.security.examples.jaspi}])
-
-
-
-

This results in the following configuration being persisted: -

-
-
-
-
<jaspi>
-    <jaspi-configuration name="simple-configuration" layer="HttpServlet" application-context="default-host /webctx" description="Elytron Test Configuration">
-        <server-auth-modules>
-            <server-auth-module class-name="org.wildfly.security.examples.jaspi.SimpleServerAuthModule" module="org.wildfly.security.examples.jaspi" flag="OPTIONAL">
-                <options>
-                    <property name="a" value="b"/>
-                    <property name="c" value="d"/>
-                </options>
-            </server-auth-module>
-            <server-auth-module class-name="org.wildfly.security.examples.jaspi.SecondServerAuthModule" module="org.wildfly.security.examples.jaspi"/>
-        </server-auth-modules>
-    </jaspi-configuration>
-</jaspi>
-
-
-
-

The name attribute is just a name that allows the resource to be referenced in the management model.

-
-
-

The layer and application-context attributes are used when registering this configuration with the AuthConfigFactory - both of these attributes can be omitted allowing wildcard matching. The description attribute is also optional and is used to provide a description to the AuthConfigFactory.

-
-
-

Within the configuration one or more server-auth-module instances can be defined with the following attributes. - * class-name - The fully qualified class name of the ServerAuthModule. - * module - The module to load the ServerAuthModule from. - * flag - The control flag to indicate how this module operates in relation to the other modules. - * options - Configuration options to be passed into the ServerAuthModule on initialisation.

-
-
-

Configuration defined in this way is immediately registered with the AuthConfigFactory so any existing deployments using the WildFly Elytron security framework that match against the layer and application-context will immediately start to make use of the configuration.

-
-
-
-

8.3. Programmatic Configuration

-
-

The APIs defined within the JASPI specification allow for applications to dynamically register custom AuthConfigProvider instances, however the specification does not provide the actual implementations to use or a standard way to create instances of the implementations, the WildFly Elytron project contains a simple utility that can be used by deployments to help with this: -

-
-
-

org.wildfly.security.auth.jaspi.JaspiConfigurationBuilder

-
-
-

The following piece of code illustrates how this API can be used to register a similar configuration to the one illustrated in the subsystem.

-
-
-
-
String registraionId = JaspiConfigurationBuilder.builder("HttpServlet", servletContext.getVirtualServerName() + " " + servletContext.getContextPath())
-    .addAuthModuleFactory(SimpleServerAuthModule::new, Flag.OPTIONAL, Collections.singletonMap("a", "b"))
-    .addAuthModuleFactory(SecondServerAuthModule::new)
-.register();
-
-
-
-

As an example this code could be executed within the init() method of a Servlet to register the AuthConfigProvider specific for that deployment, in this code example the application context has also been assembled by consulting the ServletContext.

-
-
-

The register method returns the resulting registration ID that can also be used to subsequently remove this registration directly from the AuthConfigFactory.

-
-
-

As with the subsystem configuration this call has an immediate effect and will be live for all web applications using the WildFly Elytron security framework immediately.

-
-
-
-

8.4. Authentication Process

-
-

8.4.1. CallbackHandler

-
-

Based on the configuration on the application-security-domain resource in the Undertow subsystem the CallbackHandler passed to the ServerAuthModule in an integrated or non-integrated mode.

-
-
-
-

8.4.2. Integrated

-
-

When operating in integrated mode although the ServerAuthModule instances will be handling the actual authentication the resulting identity will be loaded from the referenced SecurityDomain using the SecurityRealms referenced by that SecurityDomain, it is still possible in this mode to override the roles that will be assigned within the Servlet container.

-
-
-

The advantage of this mode is that ServerAuthModules are able to take advantage of the WildFly Elytron configuration for the loading of identities so identities stored in usual locations such as databases and LDAP can be loaded without the ServerAuthModule needing to be aware of these locations, additionally other WildFly Elytron configuration can be applied such as role and permission mapping. The referenced SecurityDomain can also be referenced in other places such as for SASL authentication or other non JASPI applications all backed by a common repository of identities.

-
-
-

In this mode the CallbackHandlers operate as follows: -

-
-
-
    -
  • -

    PasswordValidationCallback

    -
    -
    -
    The username and password will be used with the SecurityDomain to perform an authentication, if successful there is now an authenticated identity.
    -
    -
    -
  • -
  • -

    CallerPrincipalCallback

    -
    -
    -
    This Callback is used to establish the authorized identity / the identity that will be seen once the request reached the web application.
    -
    -
    -
    -
    -
    If an authenticated identity has already been established via the PasswordValidationCallback this Callback is interpreted as a run-as request and authorization checks are performed to ensure the authenticated identity is authorized to run as the identity specified in this Callback.  If no authenticated identity has been established by a PasswordValidationCallback it is assumed the ServerAuthModule has handled the authentication step so this Callback will cause the specified identity to be loaded from the SecurityDomain and an authorization check to verify this identity has the LoginPermission.
    -
    -
    -
    -
    -
    If a Callback is received with a null Principal and name then if an authenticated identity has already been established authorization will be performed as that identity, if no identity has been established then authorization of the anonymous identity will be performed.  Where authorization of the anonymous identity is performed the SecurityDomain must have been configured to grant the anonymous identity the LoginPermission otherwise authorization will fail.
    -
    -
    -
  • -
  • -

    GroupPrincipalCallback

    -
    -
    -
    By default in this mode the attribute loading, role decoding, and role mapping configured on the security domain will be used to establish the identity - if this Callback is received the groups specified will be taken as the roles that will be assigned to the identity whilst the request is in the servlet container.  These roles will be visible in the servlet container only.
    -
    -
    -
  • -
-
-
-
-

8.4.3. Non Integrated

-
-

When operating in non-integrated mode the ServerAuthModules are completely responsible for all authentication AND identity management, the Callbacks specified in the specification can be used to establish an identity. The resulting identity will be created on the SecurityDomain but it will be independent of any identities stored in referenced SecurityRealms.

-
-
-

The advantage of this mode is that JASPI configurations that are able to 100% handle the identities can be deployed to the application server without requiring anything beyond a simple SecurityDomain definitions, there is no need for this SecurityDomain to actually contain the identities that will be used at runtime. The disadvantage of this mode is that the ServerAuthModule is now reposible for all identity handling potenitally making the implementation much more complex.

-
-
-

In this mode the CallbackHandlers operate as follows: -

-
-
-
    -
  • -

    PasswordValidationCallback

    -
    -
    -
    The Callback is not supported in this mode, the purpose of this mode is for the ServerAuthModule to operate independently of the referenced SecurityDomain so requesting a password to be validated would not be suitable.
    -
    -
    -
  • -
  • -

    CallerPrincipalCallback

    -
    -
    -
    This Callback is used to establish the Principal for the resulting identity, as the ServerAuthModule is handling all of the identity checking requirements no checks are performed to verify if the identity exists in the security domain and no authorization checks are performed.
    -
    -
    -
    -
    -
    If a Callback is received with a null Principal and name then then the identity will be established as the anonymous identity, as the ServerAuthModule is making the decisions no authorizaton check will be performed with the SecurityDomain.
    -
    -
    -
  • -
  • -

    GroupPrincipalCallback

    -
    -
    -
    As the identity is created in this mode without loading from the SecurityDomain it will by default have no roles assigned, if this Callback is received the groups will be taken and assigned to the resulting identity whilst the request is in the servlet container. These roles will be visible in the servlet container only.
    -
    -
    -
  • -
-
-
-
-

8.4.4. validateRequest

-
-

During the call to validateRequest on the ServerAuthContext the individual ServerAuthModule instances will be called in the order they are defined. A control flag can also be specified for each module, this defines how the response should be interpreted and if processing should continue to the next auth module or return immediately.

-
-
-
Control Flags
-
-

Where the configuration was provided either within the WildFly Elytron subsystem or using the JaspiConfigurationBuilder API it is possible to associate a control flag with each ServerAuthModule - if one is not specified we assume REQUIRED. The flags have the following meanings depending on their result.

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Flag

AuthStatus.SEND_SUCCESS

AuthStatus.SEND_FAILURE, AuthStatus.SEND_CONTINUE

Required

Validation will continue to the remaining modules, provided the requirements of the remaining modules are satisfied the request will be allowed to proceed to authorization.

Validation will continue to the remaining modules, however regardless of their outcome the validation is not successful so control will return to the client.

Requisite

Validation will continue to the remaining modules, provided the requirements of the remaining modules are satisfied the request will be allowed to proceed to authorization.

The request will return immediately to the client.

Sufficient

Validation is deemed successful and complete, provided no previous Required or Requisite module has returned an AuthStatus other than AuthStatus.SUCCESS the request will proceed to authorization of the secured resource.

Validation will continue down the list of remaining modules, this status will only affect the decision if there are no REQUIRED or REQUISITE modules.

Optional

Validation will continue to the remaining modules, provided no 'Required' or 'Requisite' modules have not returned SUCCESS this will be sufficient for validation to be deemed successful and for the request to proceed to the authorization stage and the secured resource.

Validation will continue down the list of remaining modules, this status will only affect the decision if there are no REQUIRED or REQUISITE modules.

-
-

For all ServerAuthModule instances if they throw an AuthException an error will be immediately reported to the client without further modules being called.

-
-
-
-
-

8.4.5. secureResponse

-
-

During the call to secureResponse each ServerAuthMdoule is called but this time in reverse order. Where a module only undertakes an action in secureResponse if it undertook an action in validateResponse it is the responsibility of the module to track this.

-
-
-

The control flag has no effect on secureResponse processing, processing ends when one of the following is true: - -. All of the ServerAuthModule instances have been called. -. A module returns AuthStatus.SEND_FAILURE. -. A module throws an AuthException.

-
-
-
-

8.4.6. SecurityIdentity

-
-

Once the authentication process has completed a org.wildfly.security.auth.server.SecurityIdentity for the deployments SecurityDomain will have been created as a result of the Callbacks to the CallbackHandler, depending on the Callbacks this will either be an identity loaded directly from the SecurityDomain or will be an ad-hoc identity described by the callbacks. This SecurityIdentity will be associated with the request as we do for other authentication mechanisms

-
-
-
-
-
-
-

9. Elytron and Jakarta EE Security

-
-
-
-Starting from WildFly 15 an implementation of the Servlet Profile from Java Authentication SPI for Containers (JSR-196 / JASPI) specification has been included in the application server, in addition to making JASPI available for deployments using WildFly Elytron it also makes it possible to make use of EE Security with WildFly Elytron. -
-
-
-

9.1. Activation

-
-

EE Security with WildFly Elytron is available out of the box with just a couple of small steps required.

-
-
-

9.1.1. Define JACC Policy

-
-

The SecurityContext API makes use of JACC to access the current authenticated identity, if deployments are going to make use of this API then a JACC policy needs to be activated in the WildFly Elytron subsystem. If this API is not being used then the activation can be skipped.

-
-
-
-
/subsystem=elytron/policy=jacc:add(jacc-policy={})
-:reload
-
-
-
-

As is shown in the example no specific configuration is required other than the presence of a default JACC policy, additionally after making these changes the server needs to be reloaded to ensure the new policy activates correctly.

-
-
-
-

9.1.2. Add application-security-domain mapping

-
-

As with all deployments a mapping is required from the security domain defined for the deployment to either a WildFly Elytron security domain or http authentication factory to activate security backed by WildFly Elytron.

-
-
-

All web applications deployed to WildFly have a security domain which will be resolved in the following order: -

-
-
-
    -
  1. -

    From the deployment descriptors / annotations of the deployment being deployed.

    -
  2. -
  3. -

    The value defined on the default-security-domain attribute on the Undertow subsystem.

    -
  4. -
  5. -

    Default to 'other'.

    -
  6. -
-
-
-

An application-security-domain resource then needs to be added to map from the deployment’s security domain.

-
-
-

The simplest approach is to add a mapping for other, then no further configuration will be required and provided the deployment does not define it’s own security domain and provided no alternative default is specified all deployments will match this mapping.

-
-
-
-
/subsystem=undertow/application-security-domain=other:add(security-domain=ApplicationDomain, integrated-jaspi=false)
-
-
-
-

The EE Security API is built on JASPI. Within JASPI we support two different modes of operation 'integrated', and 'non-integrated'. In integrated mode any identity being established during authentication is expected to exist in the associated security domain. With the EE Security APIs however it is quite likely an alternative store will be in use so configuration the mapping to use 'non-integrated' JASPI allows for identities to be dynamically created as required.

-
-
- - - - - -
- - -References in this document to Java Authorization Contract for Containers (JACC) refer to the Jakarta Authorization unless otherwise noted -
-
-
-
-
-
-
-

10. Using Keycloak SAML

-
-
-

To secure applications deployed to WildFly using Keycloak SAML, a Galleon feature pack provided -by the Keycloak project needs to be used. This feature pack automatically installs the Keycloak -SAML adapter that results in the keycloak-saml subsystem being added to WildFly.

-
-
-

There are a few ways to install the Keycloak Galleon Feature Pack that provides the SAML adapter.

-
-
-

10.1. Galleon CLI

-
-

A server installation can be provisioned using the Galleon CLI.

-
-
-

More information can be found in the Provisioning WildFly with Galleon -documentation, but assuming you have provisioned a WildFly installation containing the web-server layer -with a command similar to the following:

-
-
-
-
galleon.sh install wildfly:current \
-    --layers=web-server --dir=wildfly
-
-
-
-

The Keycloak SAML adapter can then be added to the WildFly installation with the following command:

-
-
-
-
galleon.sh install org.keycloak:keycloak-saml-adapter-galleon-pack:22.0.1 --layers=keycloak-client-saml --dir=wildfly
-
-
-
- - - - - -
- - -
-

Unlike the WildFly feature pack, this Keycloak feature pack is not part of a universe and so a fully -qualified group:artifact:version reference to the feature pack is required.

-
-
-
-
-

From this point, applications can be configured as described in the -Keycloak documentation.

-
-
-
-

10.2. Bootable JAR

-
-

The next installation option is if you are creating a bootable JAR for your deployment and want to -add the Keycloak SAML adapter to secure the deployment. More details about bootable JAR support can -be found in the Bootable JAR Guide.

-
-
-

The following is an example plug-in configuration to create a bootable JAR for a web application -using both the web-server and keycloak-client-saml layers:

-
-
-
-
<plugin>
-    <groupId>org.wildfly.plugins</groupId>
-    <artifactId>wildfly-jar-maven-plugin</artifactId>
-    <version>${version.wildfly.jar.maven.plugin}</version>
-    <configuration>
-        <feature-packs>
-            <feature-pack>
-                <location>wildfly@maven(org.jboss.universe:community-universe):current</location>
-            </feature-pack>
-            <feature-pack>
-                <groupId>org.keycloak</groupId>
-                <artifactId>keycloak-saml-adapter-galleon-pack</artifactId>
-                <version>22.0.1</version>
-            </feature-pack>
-        </feature-packs>
-        <layers>
-            <layer>web-server</layer>
-            <layer>keycloak-client-saml</layer>
-        </layers>
-        <context-root>simple-webapp</context-root>
-        <cli-sessions>
-            <cli-session>
-                <script-files>
-                    <script>configure-saml.cli</script>
-                </script-files>
-            </cli-session>
-        </cli-sessions>
-    </configuration>
-    <executions>
-        <execution>
-            <goals>
-                <goal>package</goal>
-            </goals>
-        </execution>
-    </executions>
-</plugin>
-
-
-
- - - - - -
- - -
-

As with using the CLI, the latest version of WildFly in the universe can be dynamically selected but the -Keycloak feature pack requires the complete groupId, artifactId, and version to be specified.

-
-
-
-
-

The approaches to configure the web application are the same as described in the -Keycloak documentation. -In this example, a CLI script, configure-saml.cli, is executed to update the Keycloak SAML subsystem -with relevant configuration.

-
-
-

A sample script is shown below:

-
-
-
-
/subsystem=keycloak-saml/secure-deployment=simple-webapp.war/:add
-
-/subsystem=keycloak-saml/secure-deployment=simple-webapp.war/SP="http://localhost:8090/simple-webapp"/:add(sslPolicy=EXTERNAL,logoutPage="logout")
-
-/subsystem=keycloak-saml/secure-deployment=simple-webapp.war/SP="http://localhost:8090/simple-webapp"/IDP=idp/:add( \
-    SingleSignOnService={ \
-        signRequest=false, \
-        validateResponseSignature=false, \
-        validateAssertionSignature=false, \
-        requestBinding=POST, \
-        bindingUrl=http://localhost:8080/realms/myrealm/protocol/saml}, \
-    SingleLogoutService={ \
-        signRequest=false, \
-        signResponse=false, \
-        validateRequestSignature=false, \
-        validateResponseSignature=false, \
-        requestBinding=POST, \
-        responseBinding=POST, \
-        postBindingUrl=http://localhost:8080/realms/myrealm/protocol/saml, \
-        redirectBindingUrl=http://localhost:8080/realms/myrealm/protocol/saml} \
-)
-
-
-
-

Instead of adding configuration in the Keycloak SAML subsystem, configuration can be added in the deployment -instead. In particular, the auth-method of the web application could be set to KEYCLOAK-SAML and -adapter configuration could be provided in a keycloak-saml.json descriptor placed within the WEB-INF directory -of the deployment.

-
-
-
-

10.3. WildFly Maven Plugin

-
-

The final installation option is to use the wildfly-maven-plugin to provision a server containing -the Keycloak SAML subsystem.

-
-
-

The following is an example plug-in configuration to create a server for a web application -using both the web-server and keycloak-client-saml layers:

-
-
-
-
<plugin>
-    <groupId>org.wildfly.plugins</groupId>
-    <artifactId>wildfly-maven-plugin</artifactId>
-    <version>4.0.0.Final</version>
-    <configuration>
-        <feature-packs>
-            <feature-pack>
-                <location>wildfly@maven(org.jboss.universe:community-universe):current</location>
-            </feature-pack>
-            <feature-pack>
-                <groupId>org.keycloak</groupId>
-                <artifactId>keycloak-saml-adapter-galleon-pack</artifactId>
-                <version>22.0.1</version>
-            </feature-pack>
-        </feature-packs>
-        <layers>
-            <layer>web-server</layer>
-            <layer>keycloak-client-saml</layer>
-        </layers>
-    </configuration>
-    <executions>
-        <execution>
-            <goals>
-                <goal>package</goal>
-            </goals>
-        </execution>
-    </executions>
-</plugin>
-
-
-
- - - - - -
- - -
-

As with the bootable JAR configuration, note that the latest version of WildFly in the universe can be dynamically -selected but the Keycloak feature pack requires the complete groupId, artifactId, and version to be -specified.

-
-
-
-
-
-

10.4. Propagating the Security Context to EJBs

-
-

The sample configuration in the above sections has referenced the keycloak-client-saml layer. -If the security context for the application that is being secured with Keycloak SAML needs to -be propagated to the EJB tier, the keycloak-client-saml-ejb layer should be used instead. -This layer adds an application-security-domain mapping in the EJB3 subsystem to map the default -security domain name other to the KeycloakDomain that is installed by the Keycloak feature pack.

-
-
-
-
-
-

11. Using Keycloak with WildFly Elytron

-
-
-

The ability to secure applications using OpenID Connect is provided by the elytron-oidc-client subsystem. For details about securing applications deployed on WildFly with OpenID Connect, by using Keycloak as the OpenID provider, see the Elytron OIDC Client documentation.

-
-
-
-
-

12. Bearer Token Authorization

-
-
-

Bearer Token Authorization is the process of authorizing HTTP requests based on the existence and validity of a bearer -token representing a subject and his access context, where the token provides valuable information to determine the subject of the call as well whether or not a HTTP resource -can be accessed.

-
-
-

Elytron supports bearer token authorization by providing a BEARER_TOKEN HTTP authentication mechanism based on RFC-6750 and -an specific realm implementation, the token-realm, to validate tokens using the JWT format (for instance, OpenID Connect ID Tokens) or opaque tokens issued by any OAuth2 compliant -authorization server.

-
-
-

12.1. How it Works

-
-

When a HTTP request arrives to your application, the BEARER_TOKEN mechanism will check if a bearer token was provided by checking the existence of an Authorization HTTP header with the following format:

-
-
-
-
GET /resource HTTP/1.1
-Host: server.example.com
-Authorization: Bearer mF_9.B5f-4.1JqM
-
-
-
-

If no bearer token was provided, the mechanism will respond with a 401 HTTP status code as follows:

-
-
-
-
HTTP/1.1 401 Unauthorized
-WWW-Authenticate: Bearer realm="example"
-
-
-
-

When a bearer token is provided, the mechanism will extract the token from the request (in the example above, the token is represented by the string mF_9.B5f-4.1JqM) and pass it over -to the token-realm in order to check if the token is valid and can be used to build a security context based on its information. Note that the BEARER_TOKEN mechanism is only responsible to -check and extract bearer tokens from an HTTP request, whereas the token-realm is the one responsible for validating the token.

-
-
-

If validation succeeds, a security context will be created based on the information represented by the token and the application can use the newly created -security context to obtain information about the subject making the request as well decide whether or not the request should be full filled. In case the validation fails, -the mechanism will respond with a 403 HTTP status code as follows:

-
-
-
-
HTTP/1.1 403 Forbidden
-
-
-
-
-

12.2. Validating JWT Tokens

-
-

Elytron provides built-in support for JWT tokens, which can be enabled by defining a realm in the Elytron subsystem as follows:

-
-
-
-
 <token-realm name="JwtRealm" principal-claim="sub">
-    <jwt issuer="as.example.com"
-         audience="api.example.com"
-         public-key="-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB-----END PUBLIC KEY-----"/>
- </token-realm>
-
-
-
-

In the example above, the token-realm is defined with a principal-claim attribute. This attribute specifies which claim -within the token should be used to identity the principal. If you have a token as follows:

-
-
-
-
 {
-   "iss": "as.example.com",
-   "sub": "24400320",
-   "aud": "s6BhdRkqt3",
-   "exp": 1311281970,
-   "nbf": 1311280970,
-  }
-
-
-
-

Elytron will use the value associated with the sub claim as the identifier of the subject represented by the token.

-
-
-

The jwt element within the token-realm specifies that tokens should be validated as JWT and provides different configuration options on how they -should be validated:

-
-
-
    -
  • -

    issuer

    -
    -

    A list of strings representing the issuers supported by this configuration. During validation JWT tokens must have an "iss" claim that contains one of the values defined here

    -
    -
  • -
  • -

    audience

    -
    -

    A list of strings representing the audiences supported by this configuration. During validation JWT tokens must have an "aud" claim that contains one of the values defined here

    -
    -
  • -
  • -

    public-key

    -
    -

    A public key in PEM Format. During validation, if a public key is provided, signature will be verified based on the key you provided here. Alternatively, -you can define a key-store and certificate attributes to configure the public key. This key will be used to verify tokens without "kid" claim.

    -
    -
  • -
  • -

    key-store

    -
    -

    As an alternative to public-key, you can also define a key store from where the certificate with a public key should be loaded from

    -
    -
  • -
  • -

    certificate

    -
    -

    The name of the certificate with a public key to load from the key store in case you defined the key-store attribute

    -
    -
  • -
  • -

    client-ssl-context

    -
    -

    The SSL context to be used if if you want to use remote JSON Web Keys. This enables you to use url from "jku" token claim to -fetch public keys for token verification.

    -
    -
  • -
  • -

    host-name-verification-policy

    -
    -

    A policy that defines how host names should be verified when using remote JSON Web Keys. Allowed values: "ANY", "DEFAULT".

    -
    -
  • -
-
-
-

For being able to use different key pairs for signing / verification and for easier key rotation you can define key map. This will take the "kid" claim -from the token and use corresponding public key for verification.

-
-
-
-
 <token-realm name="JwtRealm" principal-claim="sub">
-    <jwt issuer="as.example.com" audience="api.example.com">
-        <key kid="1" public-key="-----BEGIN PUBLIC KEY-----MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANc4VlnN6oZwe1PoQQeJsTwu7LGS+eEbgYMNYXahidga4+BhdGKwzMZU54ABFQ11tUMJSENQ6o3n1YKVgMnxvcMCAwEAAQ==-----END PUBLIC KEY-----"/>
-        <key kid="2" public-key="-----BEGIN PUBLIC KEY-----MFswDQYJKoZIhvcNAQEBBQADSgAwRwJAcNpXy6psxC21DdnTtAdlgsEwEuJh/earH3q7xJPjmsygmrlpC66MG4/A/J9Gai2Hp+QdCSEVpBWkIoVff3sIlwIDAQAB-----END PUBLIC KEY-----"/>
-    </jwt>
- </token-realm>
-
-
-
-

This token-realm will verify tokens with "kid" claims of value "1" or "2" using corresponding key.

-
-
-

Tokens without "kid" claim will be verified using the 'public-key' attribute of 'jwt', or in this case invalidated, as there is -no key specified.

-
-
-

The jwt validator performs different checks in order to determine the validity of a JWT:

-
-
-
    -
  • -

    Expiration checks based on the values of the exp and nbf claims

    -
  • -
  • -

    Signature checks based on the public key provided via public-key or certificate attributes, key map with named public keys, or by fetching remote JSON Web Key Set -using provided client-ssl-context. You can skip token signature verification by not defining any of these.

    -
  • -
-
-
-

It is strongly recommended that you use signed JWTs in order to guarantee authenticity of tokens and make sure they were not tampered.

-
-
-
-

12.3. Validating OAuth2 Bearer Tokens

-
-

Elytron provides built-in support for tokens issued by an OAuth2 compliant authorization server, where these tokens are validated -using a token introspection endpoint as defined by OAuth2 specification.

-
-
-
-
<token-realm name="OAuth2Realm" principal-claim="sub">
-    <oauth2-introspection client-id="my-client-id"
-                          client-secret="keep_it_secret"
-                          introspection-url="https://as.example.com/token/introspect"
-                          client-ssl-context="user-defined-ssl-context"
-                          host-name-verification-policy="ANY" />
-</token-realm>
-
-
-
-

The auth2-introspection element within the token-realm specifies that tokens should be validated using an OAuth2 Token Introspection Endpoint and provides different configuration options on how they -should be validated:

-
-
-
    -
  • -

    client-id

    -
    -

    The identifier of the client on the OAuth2 Authorization Server

    -
    -
  • -
  • -

    client-secret

    -
    -

    The secret of the client

    -
    -
  • -
  • -

    introspection-url

    -
    -

    The URL of token introspection endpoint

    -
    -
  • -
  • -

    client-ssl-context

    -
    -

    The SSL context to be used if the introspection endpoint is using HTTPS.

    -
    -
  • -
  • -

    host-name-verification-policy

    -
    -

    A policy that defines how host names should be verified when using HTTPS. Allowed values: "ANY", "DEFAULT".

    -
    -
  • -
-
-
- -
-

12.5. CLI Examples on How to Create a Token Realm

-
-
Create a Token Realm to validate JWT tokens using a key store to retrieve the public key
-
-
# Create a Key Store
-/subsystem=elytron/key-store=my-keystore:add(path=/path/to/keystore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
-
-# Create the realm
-/subsystem=elytron/token-realm=jwt-realm:add(principal-claim=sub, jwt={issuer=["as.example.com"], audience=["api.example.com"], key-store=my-keystore, certificate=as.example.com})
-
-
-
-
Create a Token Realm to validate OAuth2 tokens
-
-
# Create a Client SSLContext
-/subsystem=elytron/key-store=default-trust-store:add(path=/path/to/keystore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
-/subsystem=elytron/trust-manager=default-trust-manager:add(algorithm=PKIX, key-store=default-trust-store)
-/subsystem=elytron/client-ssl-context=default-client-ssl-context:add(trust-manager=default-trust-manager)
-
-# Create the realm
-/subsystem=elytron/token-realm=oauth2-realm:add(principal-claim=preferred_username, oauth2-introspection={client-id=my-client-id, client-secret=keep_it_secret, client-ssl-context=default-client-ssl-context, introspection-url=https://as.example.com/token/introspect})
-
-
-
-
-
-
-

13. OpenSSL

-
-
-

13.1. Configuring WildFly to use the OpenSSL TLS provider

-
-

There are a couple ways you can configure WildFly to use the OpenSSL TLS provider.

-
-
-

13.1.1. Configure the Elytron subsystem to use the OpenSSL TLS provider by default

-
-

The following commands can be used to configure the Elytron subsystem so that the OpenSSL TLS -provider is used by default:

-
-
-
-
/subsystem=elytron:write-attribute(name=initial-providers, value=combined-providers)
-/subsystem=elytron:undefine-attribute(name=final-providers)
-reload
-
-
-
-
-

13.1.2. Configure the OpenSSL TLS provider on an SSL context

-
-

Instead of configuring the Elytron subsystem to use the OpenSSL TLS provider by default, -it is also possible to specify that the OpenSSL TLS provider should be used for a specific -SSL context. For example, the following command can be used to create a server-ssl-context -that will use the OpenSSL TLS provider:

-
-
-
-
/subsystem=elytron/server-ssl-context=httpsSSC:add(providers=openssl, ...)
-reload
-
-
-
-
-
-

13.2. OpenSSL Library Location

-
-

WildFly will search for the OpenSSL library using the standard system library search path. If you’d like to specify a -custom location for the OpenSSL library, the org.wildfly.openssl.path property can be specified during WildFly startup.

-
-
-

If OpenSSL was loaded successfully, a message similar to the one below will occur in the server.log file on startup:

-
-
-
-
15:37:59,814 INFO [org.wildfly.openssl.SSL] (MSC service thread 1-7) WFOPENSSL0002 OpenSSL Version OpenSSL 1.1.1d FIPS  10 Sep 2019
-
-
-
-
-

13.3. Enabling TLSv1.3

-
-

WARNING It is possible to use TLSv1.3 with the OpenSSL TLS provider when using OpenSSL 1.1.1 or higher and -when running against JDK 11 or higher. However, if JDK 11 is in use and if there is a very large number of -TLSv1.3 requests being made, it is possible that a drop in performance (throughput and response time) will occur -compared to TLSv1.2. For this reason, the use of TLSv1.3 is currently disabled by default. TLSv1.3 can be enabled -by configuring the cipher-suite-names attribute for an SSL context. See the sections on -Configuring a server SSLContext and -Configuring a client SSLContext for more details. It is recommended to test -for performance degradation prior to enabling TLSv1.3 in a production environment.

-
-
-
-

13.4. Adding Additional Native Libraries

-
-

By default, WildFly includes WildFly OpenSSL native libraries for commonly used platforms (Linux x86_64, Windows x86_64, -Mac OS X x86_64, and Linux s390). However, the WildFly OpenSSL Natives project -contains modules that can be used to build WildFly OpenSSL native libraries for other platforms as well. The steps needed to build and make -use of a WildFly OpenSSL native library for a different platform than the ones provided by default will be described below.

-
-
-

13.4.1. Building the Native Library

-
-

Make sure you have cloned the WildFly OpenSSL Natives project -locally. We’ll use $WILDFLY_OPENSSL_NATIVES to denote the path to this project. Next, cd to the module that you want -to build. In this example, we’ll use the linux-i386 module but similar steps can be used to build and make use of another -module instead.

-
-
-
-
cd $WILDFLY_OPENSSL_NATIVES/linux-i386
-mvn clean install
-
-
-
-

Notice that this now results in a wildfly-openssl-linux-i386-VERSION.jar in the $WILDFLY_OPENSSL_NATIVES/linux-i386/target directory. -We’ll make use of this in the next step.

-
-
-
-

13.4.2. Overriding the Existing WildFly OpenSSL Module

-
-

We’re going to add a new module that will override the existing WildFly OpenSSL module that’s found in the -$WILDFLY_HOME/modules/system/layers/base/org/wildfly/openssl directory. Notice that the existing module -contains a Java artifact in its main directory and native libraries for the default platforms in its -main/lib directory.

-
-
-

First, create a new module that contains the WildFly OpenSSL Java artifact from the existing module:

-
-
-
-
module add --name=org.wildfly.openssl --resources=$WILDFLY_HOME/modules/system/layers/base/org/wildfly/openssl/main/wildfly-openssl-java-VERSION.jar --dependencies=java.logging,jdk.unsupported
-
-
-
-

Next, add the native library that we already built to this newly created module:

-
-
-
-
mkdir $WILDFLY_HOME/modules/org/wildfly/openssl/main/lib
-cd $WILDFLY_HOME/modules/org/wildfly/openssl/main/lib
-jar xvf $WILDFLY_OPENSSL_NATIVES/linux-i386/target/wildfly-openssl-linux-i386-VERSION.jar linux-i386
-
-
-
-

You should now see a libwfssl.so file in the $WILDFLY_HOME/modules/org/wildfly/openssl/main/lib/linux-i386 directory.

-
-
-

That’s it, WildFly will now make use of the newly added WildFly OpenSSL module instead of the existing one, -allowing it to make use of the new native library when running on the Linux i386 platform. Additional -native libraries can be added to the $WILDFLY_HOME/modules/org/wildfly/openssl/main/lib directory -if desired.

-
-
-
-
-
-
-

14. Web Single Sign-On

-
-
-

This document will guide on how to enable single sign-on across different applications deployed into different servers, where these applications belong to same security domain.

-
-
-

14.1. Create a Server Configuration Template

-
-

For this document, you’ll need to run at least two server instances in order to check single sign-on and how it affect usability in your applications. Users should be able to log in once and have access to any application using the same security domain.

-
-
-

All configuration described in the next sections should be done with a server instance using standalone-ha.xml (or standalone-full-ha.xml).

-
-
-

Run a server instance using the following command:

-
-
-
-
bin/standalone.sh -c standalone-ha.xml
-
-
-
-

14.1.1. Create a HTTP Authentication Factory

-
- - - - - -
- - -If you already have a http-authentication-factory defined in Elytron subsystem and just want to use it to enable single sign-on to your applications, please skip this section.{info} -First, you need a security-domain which we’ll use to authenticate users. Please, execute the following CLI commands: -
-
-
-
-
# Creates a FileSystem Realm, an identity store where users are stored in the local filesystem
-/subsystem=elytron/filesystem-realm=example-realm:add(path=/tmp/example-realm)
-
-# Creates a Security Domain
-/subsystem=elytron/security-domain=example-domain:add(default-realm=example-realm, permission-mapper=default-permission-mapper,realms=[{realm=example-realm, role-decoder=groups-to-roles}]
-
-# Creates an user that you can use to access your applications
-/subsystem=elytron/filesystem-realm=example-realm:add-identity(identity=alice)
-/subsystem=elytron/filesystem-realm=example-realm:add-identity-attribute(identity=alice, name=groups, value=["user"])
-/subsystem=elytron/filesystem-realm=example-realm:set-password(identity=alice, clear={password=alice})
-
-
-
-

Now you can create a http-authentication-factory that you’ll use to actually protect your web applications using Undertow:

-
-
-
-
# Create a Http Authentication Factory
-/subsystem=elytron/http-authentication-factory=example-http-authentication:add(security-domain=example-domain, http-server-mechanism-factory=global, mechanism-configurations=[{mechanism-name=FORM}]
-
-
-
-
-

14.1.2. Create a Application Security Domain in Undertow

-
- - - - - -
- - -If you already have a _application-security-domain_ defined in Undertow subsystem and just want to use it to enable single sign-on to your applications, please skip this section. -
-
-
-

In order to protect applications using the configuration defined in Elytron subsystem, you should create a application-security-domain definition in Undertow subsystem as follows:

-
-
-
-
/subsystem=undertow/application-security-domain=other:add(http-authentication-factory=example-http-authentication)
-
-
-
-

By default, if your application does not define any specific security-domain in jboss-web.xml, the application server will choose one with a name other.

-
-
-
-

14.1.3. Create a Key Store

-
-

In order to create a key-store in Elytron subsystem, first create a Java Key Store as follows:

-
-
-
-
keytool -genkeypair -alias localhost -keyalg RSA -keysize 2048 -validity 365 -keystore keystore.pkcs12 -dname "CN=localhost" -keypass secret -storepass secret
-
-
-
-

Once the keystore.pkcs12 file is created, execute the following CLI commands to create a key-store definition in Elytron:

-
-
-
-
/subsystem=elytron/key-store=example-keystore:add(path=keystore.pkcs12, relative-to=jboss.server.config.dir, credential-reference={clear-text=secret}, type=PKCS12)
-
-
-
-
-

14.1.4. Enable Single Sign-On

-
-

Single Sign-On is enabled to a specific application-security-domain definition in Undertow subsystem. It is important that the servers you will be using to deploy applications are using the same configuration.

-
-
-

To enable single-sign on, just change an existing application-security-domain in Undertow subsystem as follows:

-
-
-
-
/subsystem=undertow/application-security-domain=other/setting=single-sign-on:add(key-store=example-keystore, key-alias=localhost, domain=localhost, credential-reference={clear-text=secret})
-
-
-
-

After restarting the servers, users should be able to log in once and have access to any application using the same application-security-domain.

-
-
-
-
-

14.2. Create Two Server Instances

-
-

All configuration you did so far should be reflected in $JBOSS_HOME/standalone/standalone-ha.xml. You can now create two distinct server configuration directories_:\_

-
-
-
-
cp -r standalone standalone-a
-cp -r standalone standalone-b
-
-
-
-

And you can run the two instances using the command below:

-
-
-
-
$JBOSS_HOME/bin/standalone.sh -c standalone-ha.xml -Djboss.node.name=node-a -Djboss.socket.binding.port-offset=200 -Djboss.server.base.dir=$JBOSS_HOME/standalone-a
-$JBOSS_HOME/bin/standalone.sh -c standalone-ha.xml -Djboss.node.name=node-b -Djboss.socket.binding.port-offset=300 -Djboss.server.base.dir=$JBOSS_HOME/standalone-b ----
-
-
-
-
-

14.3. Deploy an Application

-
-

For the sake of simplicity, these are the minimum files you need in your application:

-
-
-
WEB-INF/web.xml
-
-
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
-
-    <security-constraint>
-        <display-name>SecurityConstraint</display-name>
-        <web-resource-collection>
-            <web-resource-name>All Resources</web-resource-name>
-            <url-pattern>/*</url-pattern>
-        </web-resource-collection>
-        <auth-constraint>
-            <role-name>user</role-name>
-        </auth-constraint>
-    </security-constraint>
-
-    <login-config>
-        <auth-method>FORM</auth-method>
-        <form-login-config>
-            <form-login-page>/login.html</form-login-page>
-            <form-error-page>/login.html</form-error-page>
-        </form-login-config>
-    </login-config>
-
-    <security-role>
-        <role-name>user</role-name>
-    </security-role>
-</web-app>
-
-
-
-
login.html
-
-
<html>
-    <body>
-        <form method="post" action="j_security_check">
-            <input type="text" name="j_username">
-            <input type="password" name="j_password">
-            <input type="submit" value="Log In">
-        </form>
-    </body>
-</html>
-
-
-
- - - - - -
- - -Make sure you have at least a welcome file (e.g.: index.html\|jsp). -
-
-
-
-
-

Deploy your application into both server instances and try to log in using the user you created at the beginning of this document:

-
-
-
    -
  • -

    Username: alice

    -
  • -
  • -

    Password: alice

    -
  • -
-
-
-
-
-
-
-
-

15. Audit

-
-
-

WildFly Elytron supports audit using security event listeners - components -which captures security events, like successful or unsuccessful login attempts.

-
-
-

15.1. File audit log

-
-

File audit log logs security events into a local file. -It requires to define path to the log file, which can be relative-to a system property. -It also allows to set the file format - human readable SIMPLE or JSON. -The encoding used by the audit file can be set using encoding. The default value is UTF-8. Possible values: UTF-8, UTF-16BE, UTF-16LE, UTF-16, US-ASCII or ISO-8859-1. -While in WildFly 14 there was only one attribute synchronized, which had influence on data reliability, now there is possible more fine grained performance and reliability tunning: -* autoflush defines whether should be output stream flushed after every audit event (guarantees that the log message is passed to the operating system immediately) -* synchonized defines whether should be file descriptor synchronized after every audit event (guarantees that all system buffers are synchronized with the underlying device)

-
-
-
-

15.2. Syslog Audit Logging

-
-

Syslog audit logging logs security events to a syslog server using a transmission protocol. -WildFly Elytron supports using UDP, TCP, or TCP with SSL, with the latter protocol requiring -a SSLContext to be defined. When syslog audit logging is first defined, Elytron will send -an INFORMATIONAL priority event to the defined syslog server containing the message -"Elytron audit logging enabled with RFC format: <format>", where <format> is the -RFC format that the audit logging handler has been defined with, defaulting to RFC5424. -If the given syslog server is not defined, resulting in Elytron being unable to send the -message, then Elytron will keep track of the amount of attempts that sending a message has -failed, up to a maximum defined by the reconnect-attempts parameter, before -closing the endpoint and reporting an error. It is possible to define this value -as infinite, by specifying -1, in which case Elytron will never close the -endpoint and so will always attempt to send audit messages despite previous failures.

-
-
-

15.2.1. Required Parameters

- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterValue

server-address

String consisting of the IP address, or a name recognized by Java’s InetAddress.getByName(), of the syslog server

port

int of the listening port on the syslog server

host-name

String of the host name that will be embedded into all events sent to the syslog server

ssl-context

The SSLContext used to connect to the syslog server, only required if transport is set to SSL_TCP

-
-
-

15.2.2. Optional Parameters

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDescriptionPossible ValuesDefault Value

transport

The transport protocol to be used to connect to the syslog server

String of: UDP, TCP, or SSL_TCP

TCP

format

The format that audit events should be recorded in

String of SIMPLE or JSON

SIMPLE

syslog-format

The RFC format to be used for describing the audit event

String of RFC5424 or RFC3164

RFC5424

reconnect-attempts

The maximum number of times that elytron will attempt to send successive messages to a syslog server before closing the endpoint to disallow further attempts to send messages.

int of -1 (infinite attempts) or higher

0

-
-
-

15.2.3. Defining Syslog Audit Logging

-
-

Syslog audit logging can be defined under the elytron subsystem resource. Some -examples syslog audit logging resources can be created with the following commands:

-
-
-
Minimum Resource Definition
-
-

Using the following command will generate a syslog audit logging resource that connects with -TCP, records audit events in a simple format, and uses RFC5424 to describe the audit event.

-
-
-
-
/subsystem=elytron/syslog-audit-log=syslog-example:add(
-    server-address=127.0.0.1,
-    port=10857,
-    host-name=localhost
-)
-
-
-
-
-
Default Format and Reconnect Attempts with UDP and RFC3164
-
-

Using the following command will generate a syslog audit logging resource that connects with -UDP, does not send any further messages to the syslog server if there is an error sending, -records audit events in a simple format, and uses RFC3164 to describe the audit event.

-
-
-
-
/subsystem=elytron/syslog-audit-log=syslog-example:add(
-    server-address=127.0.0.1,
-    port=10837,
-    host-name=localhost,
-    transport=UDP,
-    syslog-format=RFC3164
-)
-
-
-
-
-
Full UDP Definition with RFC5424 Explicitly Set and 10 Reconnect Attempts
-
-

Using the following command will generate a syslog audit logging resource that connects with -UDP, attempts to send messages 10 times if there is an error sending before no longer sending messages, -records audit events in a simple format, and uses RFC5424 to describe the audit event.

-
-
-
-
/subsystem=elytron/syslog-audit-log=syslog-example:add(
-    server-address=127.0.0.1,
-    port=10837,
-    host-name=localhost,
-    transport=UDP,
-    syslog-format=RFC5424,
-    reconnect-attempts=10
-)
-
-
-
-
-
Full UDP Definition with Infinite Reconnect Attempts and JSON Format
-
-

Using the following command will generate a syslog audit logging resource that connects with -UDP, always attempts to send messages despite previous failures sending messages, records audit -events in a JSON format, and uses RFC5424 to describe the audit event.

-
-
-
-
/subsystem=elytron/syslog-audit-log=syslog-example:add(
-    server-address=127.0.0.1,
-    port=10837,
-    host-name=localhost,
-    transport=UDP,
-    format=JSON,
-    reconnect-attempts=-1
-)
-
-
-
-
-
-
-
-
-

16. Credential Store

-
-
-

One new component included with WildFly Elytron for the secure storage of credentials is the Credential Store. Previous versions of the application server made use of the Vault which was used for the secure storage of clear text strings; the credential store moves forward a step to focus on the secure storage of credentials. As with the Vault the stored credentials could be clear text passwords however other formats are also supported.

-
-
-

WildFly Elytron contains two default credential store implementations. The first implementation is the KeyStoreCredentialStore which is an -implementation backed by a KeyStore. The KeyStoreCredentialStore implementation supports the storage of various credential types, -PasswordCredential, KeyPairCredential, and SecretKeyCredential. The second implementation is the PropertiesCredentialStore. This credential -store is dedicated to the storage of SecretKeyCredential instances using a properties file. The PropertiesCredentialStore does not offer any protection -of the credentials it stores so its primary purpose is to provide an initial key to a server environment.

-
-
-

This documentation is primarily focused on the KeyStoreCredentialStore and PropertiesCredentialStore; however the section Custom CredentialStore describes the SPIs for implementing a custom credential store and the section Migrating Existing Vaults describes how to convert a vault to a credential store.

-
-
-

It is possible to operate on credential stores using either a standalone command line tool elytron-tool.sh which is included with WildFly or by using management operations through the jboss-cli.sh, management console or other management client calling the management interface directly.

-
-
-

The elytron-tool.sh script to execute the command line tool can be found within the bin folder of the application server installation.

-
-
-

The WildFly Elytron tool supports a number of commands, one of which being credential-store which operates on a credential store. The commands in this documentation are making use of the .sh script on linux; the elytron-tool.bat and elytron-tools.ps1 scripts can be used on Microsoft Windows.

-
-
-

The following command provides a summary of the command line arguments which can be used with the credential-store command:

-
-
-
-
]$ bin/elytron-tool.sh credential-store
-
-
-
-

16.1. Credential Store Creation

-
-

16.1.1. KeyStoreCredentialStore / credential-store

-
-

The KeyStoreCredentialStore supports the largest number of credential types which can be stored within a credential store, additionally as the implementation is backed by a Java KeyStore the storage is protected using the mechanisms provided by the KeyStore implementations.

-
-
-
Command Line
-
-

When using the credential-store command of the elytron-tool.sh script by default, this command assumes the type of the store is a KeyStoreCredentialStore backed by a JCEKS KeyStore.

-
-
-

A new credential store can be created using the following command: -

-
-
-
-
]$ bin/elytron-tool.sh credential-store --create --location=standalone/configuration/mycredstore.cs
-Credential store password:
-Confirm credential store password:
-Credential Store has been successfully created
-
-
-
-

This command prompts twice for the password that should be used to secure the store. Alternatively the password can be passed in using the --password argument however that may mean the password is cached in the local command history or visible to other users viewing the list of running processes.

-
-
- - - - - -
- - -The command line tool only creates the instance of the credential store on the underlying file system; the management operation is still required to define the credential store in the elytron subsystem. -
-
-
-
-
Management Operation
-
-

It is also possible to operate on a credential store using management operations against a running server using the application server’s CLI.

-
-
-

The following operation can be used to add a credential-store resource to the elytron subsystem referencing this newly created credential store.

-
-
-
-
/] /subsystem=elytron/credential-store=mycredstore:add(path=mycredstore.cs, relative-to=jboss.server.config.dir, credential-reference={clear-text=StorePassword})
-{"outcome" => "success"}
-
-
-
-

In this example the resource was added to reference an existing credential store, however with a small change this command can also automatically create the store if it does not exist.

-
-
-
-
/] /subsystem=elytron/credential-store=mycredstore:add(path=mycredstore.cs, relative-to=jboss.server.config.dir, credential-reference={clear-text=StorePassword}, create=true)
-{"outcome" => "success"}
-
-
-
- - - - - -
- - -The file representing the credential store is not created immediately, it will instead be created the first time a credential is added. -
-
-
-

Previous versions of the application server supported a single vault definition only; credential stores however are cross-referenced by name so multiple credential stores can be defined simultaneously.

-
-
-
-
-

16.1.2. PropertiesCredentialStore / secret-key-credential-store

-
-

This is a simple credential store implementation which can only be used to store SecretKey instances. This credential store also does not offer any protection of the contents. -Within an application server environment it is always possible to get into a cycle of how is an initial secret provided to unlock further resources, this is primarily the purpose -of this credential store. The strategy in the past had been to use masking of a password using password based encryption, the down side of this approach was the password used for -the masking was stored in the source code and being an open source project this means the password is well known. By using the PropertiesCredentialStore installations are back -in control of the initial secret. Although this credential store does not offer its own protection filesystem level access control can still be used to restrict access ideally to -just the application server process.

-
-
-
Command Line
-
-

A new credential store can be created using the following command: -

-
-
-
-
]$ bin/elytron-tool.sh credential-store --create --location=standalone/configuration/propcredstore.cs --type PropertiesCredentialStore
-Credential Store has been successfully created
-
-
-
-
-
Management Operation
-
-

It is also possible to operate on a credential store using management operations against a running server using the application server’s CLI.

-
-
-

The following operation can be used to add a secret-key-credential-store resource to the elytron subsystem referencing this newly created credential store.

-
-
-
-
/] /subsystem=elytron/secret-key-credential-store=mycredstore:add(path=propcredstore.cs, relative-to=jboss.server.config.dir, create=false, populate=false)
-{"outcome" => "success"}
-
-
-
-

In this example the resource was added to reference an existing credential store, however with a small change this command can also automatically create the store if it does not exist, and -populate it with a generated SecretKey under the alias key if it does not already exist.

-
-
-
-
/] /subsystem=elytron/secret-key-credential-store=mycredstore:add(path=propcredstore.cs, relative-to=jboss.server.config.dir)
-{"outcome" => "success"}
-
-
-
- - - - - -
- - -If you rely on automatic generation of a SecretKey be sure to create a backup of the key as soon as possible. If you were to loose the key we do not have a mechanism to decrypt anything -encrypted with the lost key. -
-
-
-
-
-
-

16.2. Credential Manipulation

-
-

The contents of the credential stores can be manipulated using either the command line tool or by using management operations. Unlike key stores the credential store APIs allow for multiple entries to be stored under a single alias provided each entry is of a different credential type.

-
-
-

16.2.1. Adding Credentials

-
-

The different credential store implementations support different credential types as illustrated in this table.

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
Credential TypeKeyStoreCredentialStorePropertiesCredentialStore

PasswordCredential

Supported

Unsupported

KeyPairCredential

Supported

Unsupported

SecretKeyCredential

Supported

Supported

-
-

As with all the manipulation options it is possible to use either the command line tool or management operations against a running server to modify the contents of the store.

-
-
- - - - - -
- - -Care should be taken when using the command line tool to ensure the store is not currently in use by any other processes. If the store is in use by another process which updates the contents of the store changes made by the tool could be lost. -
-
-
-
PasswordCredential
-
-

Using the tooling it is possible to add a clear text password as a credential.

-
-
-
Command Line
-
-

The following command adds a new credential with an alias of example to the store using the command line tool: -

-
-
-
-
]$ bin/elytron-tool.sh credential-store --add=example --location=standalone/configuration/mycredstore.cs
-Credential store password:
-Secret to store:
-Confirm secret to store:
-Alias "example" has been successfully stored
-
-
-
-
-
Management Operation
-
-

Using a management operation the following command can be used to add a new alias of example to the credential store.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=elytron/credential-store=mycredstore:add-alias(alias=example, secret-value=ExamplePassword)
-{
-    "outcome" => "success",
-    "result" => undefined
-}
-
-
-
-
-
-
KeyPairCredential
-
-
Command Line
-
-

The following command allows you to import a key pair credential with an alias of example from a file containing -a private key in OpenSSH format:

-
-
-
-
]$ bin/elytron-tool.sh credential-store --import-key-pair example --private-key-location /home/user/.ssh/id_rsa --location=standalone/configuration/mycredstore.cs
-Credential store password:
-Confirm credential store password:
-Passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key): secret
-Confirm passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key): secret
-Alias "example" has been successfully stored
-
-
-
-

The following command allows you to import a key pair credential with an alias of example by specifying a private key in OpenSSH format :

-
-
-
-
]$ bin/elytron-tool.sh credential-store --import-key-pair example --private-key-string="-----BEGIN OPENSSH PRIVATE KEY-----
-                                                   b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCdRswttV
-                                                   UNQ6nKb6ojozTGAAAAEAAAAAEAAABoAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlz
-                                                   dHAyNTYAAABBBAKxnsRT7n6qJLKoD3mFfAvcH5ZFUyTzJVW8t60pNgNaXO4q5S4qL9yCCZ
-                                                   cKyg6QtVgRuVxkUSseuR3fiubyTnkAAADQq3vrkvuSfm4n345STr/i/29FZEFUd0qD++B2
-                                                   ZoWGPKU/xzvxH7S2GxREb5oXcIYO889jY6mdZT8LZm6ZZig3rqoEAqdPyllHmEadb7hY+y
-                                                   jwcQ4Wr1ekGgVwNHCNu2in3cYXxbrYGMHc33WmdNrbGRDUzK+EEUM2cwUiM7Pkrw5s88Ff
-                                                   IWI0V+567Ob9LxxIUO/QvSbKMJGbMM4jZ1V9V2Ti/GziGJ107CBudZr/7wNwxIK86BBAEg
-                                                   hfnrhYBIaOLrtP8R+96i8iu4iZAvcIbQ==
-                                                   -----END OPENSSH PRIVATE KEY-----"
-                                                   --location=standalone/configuration/mycredstore.cs
-Credential store password:
-Confirm credential store password:
-Passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key): secret
-Confirm passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key): secret
-Alias "example" has been successfully stored
-
-
-
- - - - - -
- - -If specifying your key in PKCS format rather than OpenSSH format, you must specify both the private and public key. The -PKCS private key must also not be encrypted with a passphrase. -
-
-
-

Alternatively to importing, you may use the command line tool to generate and store a key pair credential in a credential store. -The following command allows you to generate and store a key pair credential under the alias example using the ecdsa algorithm:

-
-
-
-
]$ bin/elytron-tool.sh credential-store --generate-key-pair example --algorithm EC --location=standalone/configuration/mycredstore.cs
-Credential store password:
-Confirm credential store password:
-Alias "example" has been successfully stored
-
-
-
-

You can then export the public key generated in OpenSSH format using the following command:

-
-
-
-
]$ bin/elytron-tool.sh credential-store --export-key-pair-public-key example
-Credential store password:
-Confirm credential store password:
-ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMfncZuHmR7uglb0M96ieArRFtp42xPn9+ugukbY8dyjOXoi
-cZrYRyy9+X68fylEWBMzyg+nhjWkxJlJ2M2LAGY=
-
-
-
-
-
-
SecretKeyCredential
-
-
Command Line
-
-

Each of the examples in this section uses the KeyStoreCredentialStore to use the PropertiesCredentialStore this can be specified on the command line by adding the --type PropertiesCredentialStore parameter to the command line.

-
-
-

A new secret key can be generated with the following command.

-
-
-
-
]$ bin/elytron-tool.sh credential-store --generate-secret-key=example --location=standalone/configuration/mycredstore.cs
-Credential store password:
-Alias "example" has been successfully stored
-
-
-
-

By default this will create a 256 bit secret key, if either a 128 bit or 192 bit secret key is desired this can be specified with the --size=128 or --size=192 parameters respectively.

-
-
-

An existing secret key can be exported with the following command.

-
-
-
-
]$ bin/elytron-tool.sh credential-store --export-secret-key=example --location=standalone/configuration/mycredstore.cs
-Credential store password:
-Exported SecretKey for alias example=RUxZAUucgH8RSMNvoUj/rMz+pBZddttGCuT9of4TgfYLnN5Z1w==
-
-
-
- - - - - -
- - -The exported key uses a custom representation to allow Elytron to recognise exported keys. -
-
-
-

Finally a previously exported secret key can be imported with the following command.

-
-
-
-
]$ bin/elytron-tool.sh credential-store --import-secret-key=imported --location=standalone/configuration/mycredstore.cs
-Credential store password:
-SecretKey to import: RUxZAUucgH8RSMNvoUj/rMz+pBZddttGCuT9of4TgfYLnN5Z1w==
-Alias "imported" has been successfully stored
-
-
-
-

It is possible to also specify the key to import on the command line e.g. --key=RUxZAUucgH8RSMNvoUj/rMz+pBZddttGCuT9of4TgfYLnN5Z1w== but this would be vieweable by others users that can consult running processes and might also be cached in the history of the shell executing the commands.

-
-
-
-
Management Operations
-
-

For secret key manipulation the same set of command are available for both the credential-store resource and the secret-key-credential-store resource.

-
-
-

A new secret key can be generated with the following command.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=elytron/credential-store=mycredstore:generate-secret-key(alias=example)
-{"outcome" => "success"}
-
-
-
-

To generate either a 128 bit key or 192 bit key the parameter key-size=128 or key-size=192 can be specified respectively.

-
-
-

An existing secret key can be exported with the following command.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=elytron/credential-store=mycredstore:export-secret-key(alias=example)
-{
-    "outcome" => "success",
-    "result" => {"key" => "RUxZAUs+Y1CzEPw0g2AHHOZ+oTKhT9osSabWQtoxR+O+42o11g=="}
-}
-
-
-
-
-
Finally a previously exported secret key can be imported with the following commands.
-
-[standalone@localhost:9990 /] history --disable
-[standalone@localhost:9990 /] /subsystem=elytron/credential-store=mycredstore:import-secret-key(alias=imported, key="RUxZAUs+Y1CzEPw0g2AHHOZ+oTKhT9osSabWQtoxR+O+42o11g==")
-{"outcome" => "success"}
-[standalone@localhost:9990 /] history --enable
-
-
-
-

In this last example we also temporarily disable the history in the CLI to prevent the key from being cached in the CLI hisory.

-
-
-
-
-
-

16.2.2. Listing Aliases

-
-

It is possible to list the aliases contained within the credential store, however it is not possible to list the actual values stored.

-
-
-
Command Line
-
-

Using the command line tool will show a list of aliases stored within the credential store:

-
-
-
-
]$ bin/elytron-tool.sh credential-store --aliases --location=standalone/configuration/mycredstore.cs
-Credential store password:
-Credential store contains following aliases: example
-
-
-
-
-
Management Operation
-
-

The following management operation will also show the aliases contained within the credential store.

-
-
-
-
/] /subsystem=elytron/credential-store=mycredstore:read-aliases
-{
-    "outcome" => "success",
-    "result" => ["example"]
-}
-
-
-
-
-
-

16.2.3. Removing Credentials

-
-

Finally, it is also possible to remove an alias from the credential store.

-
-
-
Command Line
-
-

Using the WildFly Elytron Tool the following command will remove an alias from the store.

-
-
-
-
]$ bin/elytron-tool.sh credential-store --remove=example --location=standalone/configuration/mycredstore.cs
-Credential store password:
-Confirm credential store password:
-Alias "example" has been successfully removed
-
-
-
-
-
Management Operation
-
-

The following management operation can be used to remove an alias from the credential store.

-
-
-
-
/] /subsystem=elytron/credential-store=mycredstore:remove-alias(alias=example)
-{
-    "outcome" => "success",
-    "result" => undefined,
-    "response-headers" => {"warnings" => [{
-        "warning" => "Update dependent resources as alias 'example' does not exist anymore",
-        "level" => "WARNING",
-        "operation" => {
-            "address" => [
-                ("subsystem" => "elytron"),
-                ("credential-store" => "mycredstore")
-            ],
-            "operation" => "remove-alias"
-        }
-    }]}
-}
-
-
-
-

By default the credential-store resource assumes the type to be removed is PasswordCredential. If a different type is to be removed it can be specified with the entry-type=SecretKeyCredential parameter. The secret-key-credential-store only holds secret keys so the entry type never needs to be specified.

-
-
-
-
-
-

16.3. Referencing Credentials

-
-

After being able to populate and manipulate a credential store the next step is being able to reference the stored credential so that it can be used.

-
-
-

16.3.1. Management Model References

-
-

Various resources that make use of credentials across the application server’s management model contain credential-reference attributes that can be used either to specify a clear-password or to cross-reference a credential from within a configured credential store.

-
-
-

The following is an example of how to define a key-store within the Elytron subsystem specifying a clear text password to access the store.

-
-
-
-
/] /subsystem=elytron/key-store=exampleKS:add(relative-to=jboss.server.config.dir, path=example.keystore,    \
-                                              type=JCEKS, credential-reference={clear-text=ExamplePassword})
-{"outcome" => "success"}
-
-
-
-

To reference a credential from the previously defined credential store the following command could be used instead.

-
-
-
-
/] /subsystem=elytron/key-store=exampleKS:add(relative-to=jboss.server.config.dir, path=example.keystore, type=JCEKS, credential-reference={store=mycredstore, alias=example})
-{"outcome" => "success"}
-
-
-
-

The above command assumes that the referenced credential already exists in the previously defined credential store. -The next section will describe how credentials can automatically be added to the previously defined credential store.

-
-
-
-

16.3.2. Automatic Updates of Credential Stores

-
-

Instead of needing to add a credential to a previously defined credential store in order to reference it from a credential-reference, -it is possible to have the credential get added automatically to the previously defined credential store by specifying both -the store and clear-text attributes for the credential-reference. In particular, when adding a new credential-reference -with both the store and clear-text attributes specified:

-
-
-
    -
  • -

    If the alias attribute is also specified, then one of the following will occur:

    -
    -
      -
    • -

      If the previously defined credential store does not contain an entry for the given alias, a new entry will be added -to the credential store to hold the clear text password that was specified. The clear-text attribute will then be -removed from the management model.

      -
    • -
    • -

      If the credential store does contain an entry for the given alias, the existing credential will be replaced with the -clear text password that was specified. The clear-text attribute will then be removed from the management model.

      -
    • -
    -
    -
  • -
  • -

    If the alias attribute is not specified, an alias will be generated and a new entry will be added to the credential -store to hold the clear text password that was specified. The clear-text attribute will then be removed from the -management model.

    -
  • -
-
-
-

As an example, the following CLI command will result in a new entry being added to the previously defined credential -store, mycredstore, with alias myNewAlias and credential myNewPassword:

-
-
-
-
/subsystem=elytron/key-store=exampleKS:add(relative-to=jboss.server.config.dir, path=example.keystore, type=JCEKS, credential-reference={store=mycredstore, alias=myNewAlias, clear-text=myNewPassword})
-{
-    "outcome" => "success",
-    "result" => {"credential-store-update" => {
-        "status" => "new-entry-added",
-        "new-alias" => "myNewAlias"
-    }}
-}
-
-
-
-

When updating an existing credential-reference that contains both the alias and store attributes to also specify -the clear-text attribute:

-
-
-
    -
  • -

    The existing credential in the previously defined credential store will be replaced with the clear text password that -was specified. The clear-text attribute will then be removed from the management model.

    -
  • -
-
-
-

As an example, the following CLI command will result in updating the credential for the myNewAlias entry that was just -added to the previously defined credential store:

-
-
-
-
/subsystem=elytron/key-store=exampleKS:write-attribute(name=credential-reference.clear-text,value=myUpdatedPassword)
-{
-    "outcome" => "success",
-    "result" => {"credential-store-update" => {"status" => "existing-entry-updated"}},
-    "response-headers" => {
-        "operation-requires-reload" => true,
-        "process-state" => "reload-required"
-    }
-}
-
-
-
- - - - - -
- - -If an operation that includes a credential-reference parameter fails for any reason, - no automatic credential store update will take place, i.e., any credential store that was - specified via the credential-reference attribute will contain the same contents as it - did before the operation was executed. -
-
-
-
-

16.3.3. wildfly-config.xml

-
-

If you are making use of the wildfly-config.xml descriptor it is also possible to define a credential store within this descriptor to obtain credentials without requiring them to be in-lined within the configuration.

-
-
-

As an example the CLI can be executed with a configuration:

-
-
-
-
]$ bin/jboss-cli.sh -c -Dwildfly.config.url=bin/wildfly-config.xml
-
-
-
-

Without using a credential store the username and credential can be specified in the clear e.g.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <authentication-rules>
-                    <rule use-configuration="default" />
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="default">
-                <sasl-mechanism-selector selector="DIGEST-MD5" />
-                <providers>
-                    <use-service-loader/>
-                </providers>
-                <set-user-name name="User" />
-                <credentials>
-                    <clear-password password="UserPassword" />
-                </credentials>
-             </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-

However, it is possible to move this password to the credential store and update the configuration to load it from the store e.g.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <credential-stores>
-            <credential-store name="mycredstore">
-                <attributes>
-                    <attribute name="keyStoreType" value="JCEKS" />
-                    <attribute name="location" value="standalone/configuration/mycredstore.cs" />
-                </attributes>
-                <protection-parameter-credentials>
-                    <clear-password password="StorePassword" />
-                </protection-parameter-credentials>
-            </credential-store>
-        </credential-stores>
-
-        <authentication-rules>
-            <rule use-configuration="default" />
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="default">
-                <sasl-mechanism-selector selector="DIGEST-MD5" />
-                <providers>
-                    <use-service-loader/>
-                </providers>
-                <set-user-name name="User" />
-                <credentials>
-                    <credential-store-reference store="mycredstore" alias="User" />
-                </credentials>
-             </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-

Within this second example the key changes being the addition of the <credential-stores /> section and updating the <credentials/> section to use a <credential-store-reference/> to specify which credential store should be used and which alias from that credential store should be used.

-
-
-

In the above example, the credential store’s protection parameter is specified as a clear password, but it is also possible -to specify it as a masked password.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.4">
-        <credential-stores>
-            <credential-store name="mycredstore">
-                <attributes>
-                    <attribute name="keyStoreType" value="JCEKS" />
-                    <attribute name="location" value="standalone/configuration/mycredstore.cs" />
-                </attributes>
-                <protection-parameter-credentials>
-                    <masked-password masked-password="M3loEZ7uua1X1PiYCYJDpg==" iteration-count="100" salt="12345678"/>
-                </protection-parameter-credentials>
-            </credential-store>
-        </credential-stores>
-
-        <authentication-rules>
-                    <rule use-configuration="default" />
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="default">
-                <sasl-mechanism-selector selector="DIGEST-MD5" />
-                <providers>
-                    <use-service-loader/>
-                </providers>
-                <set-user-name name="User" />
-                <credentials>
-                    <credential-store-reference store="mycredstore" alias="User" />
-                </credentials>
-             </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-
-
-

16.4. CredentialStore APIs

-
-

It is also possible to make use of the CredentialStore APIs directly. This could be useful for applications that require access to securely stored credentials. This could also be an option for an application to populate a credential store for use elsewhere.

-
-
-

The following code demonstrates how to obtain an initialised instance of KeyStoreCredentialStore so it can be used to store and retrieve credentials.

-
-
-
-
Password storePassword = ClearPassword.createRaw(ClearPassword.ALGORITHM_CLEAR, "StorePassword".toCharArray());
-ProtectionParameter protectionParameter = new CredentialSourceProtectionParameter(IdentityCredentials.NONE.withCredential(new PasswordCredential(storePassword)));
-
-CredentialStore credentialStore = CredentialStore.getInstance("KeyStoreCredentialStore", CREDENTIAL_STORE_PROVIDER);
-
-Map<String, String> configuration = new HashMap<>();
-configuration.put("location", "mystore.cs");
-configuration.put("create", "true");
-
-credentialStore.initialize(configuration, protectionParameter);
-
-
-
-

The following code illustrates how a couple of different credential types can be added to a credential store:

-
-
-
-
Password clearPassword = ClearPassword.createRaw(ClearPassword.ALGORITHM_CLEAR, "ExamplePassword".toCharArray());
-credentialStore.store("clearPassword", new PasswordCredential(clearPassword));
-
-KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
-keyGenerator.init(256);
-SecretKey secretKey = keyGenerator.generateKey();
-credentialStore.store("secretKey", new SecretKeyCredential(secretKey));
-
-
-
-

These credentials can then be obtained again from the store:

-
-
-
-
Password password = credentialStore.retrieve("clearPassword", PasswordCredential.class).getPassword();
-SecretKey secretKey = credentialStore.retrieve("secretKey", SecretKeyCredential.class).getSecretKey();
-
-
-
- - - - - -
- - -As the type is specified when retrieving a credential it is possible to store multiple credentials under the same alias. -
-
-
-

Please use the published javadoc for more information in relation to the APIs and the credential types supported within WildFly Elytron.

-
-
-
-

16.5. Migrating Existing Vaults

-
-

If migrating from a prior version of the application server it is possible that you already are making use of a PicketBox vault for the storage of clear text passwords. The tooling provided can be used to convert the vault to the format used by the KeyStoreCredentialStore.

-
-
-

Within the WildFly Elytron command line tool an additional command vault is available specifically for the conversion of legacy vaults to a credential store. A complete vault can be converted to a credential store with the following command: -

-
-
-
-
]$ bin/elytron-tool.sh vault --enc-dir standalone/configuration/vault --keystore standalone/configuration/vault.keystore --iteration 44 --salt 00000000 --alias vault \
-    --location standalone/configuration/newcredstore.cs
-Vault password:
-Confirm vault password:
-Vault (enc-dir="standalone/configuration/vault";keystore="standalone/configuration/vault.keystore") converted to credential store "standalone/configuration/newcredstore.cs"
-
-
-
-

When executing this command the destination credential store must not already exist. The password used for the credential store will be the password originally used for the vault.

-
-
-

Entries stored within the vault would have been stored specifying a "block" and "alias" value; within the credential store the new alias will be block::alias.

-
-
-
-

16.6. Custom Credential Store

-
-

It is also possible to provide custom credential store implementations. Overall the pattern to implementing a custom credential store is very similar to the pattern that would be followed to implement a custom key store.

-
-
-
    -
  • -

    Extend the SPI

    -
  • -
  • -

    Implement a java.security.Provider to register the implementation.

    -
  • -
-
-
-

The SPI to be extended is org.wildfly.security.credential.store.CredentialStoreSpi. The custom implementation will be required to implement the following methods.

-
-
-
-
public abstract void initialize(Map<String, String> attributes, CredentialStore.ProtectionParameter protectionParameter, Provider[] providers) throws CredentialStoreException;
-
-
-
-

This method is required to perform the initialisation of the credential store, by taking in a Map of attributes it allows for custom configuration to be provided as required by the store.

-
-
-
-
public abstract boolean isModifiable();
-
-
-
-

A credential store needs to advertise if it supports modifications so clients can determine if the modification APIs can be used.

-
-
-
-
public abstract <C extends Credential> C retrieve(String credentialAlias, Class<C> credentialType, String credentialAlgorithm, AlgorithmParameterSpec parameterSpec, CredentialStore.ProtectionParameter protectionParameter) throws CredentialStoreException;
-
-
-
-

The retrieve method is essential for all credential store implementations to retrieve credentials of a specific type using the alias specified.

-
-
-

In addition to retrieve there are two more methods that can optionally be implemented.

-
-
-
-
public boolean exists(String credentialAlias, Class<? extends Credential> credentialType) throws CredentialStoreException;
-
-public Set<String> getAliases() throws UnsupportedOperationException, CredentialStoreException;
-
-
-
-

A default implementation of exists already is implemented which checks if a call to retrieve returns a credential as requested. However it could be optimal to check the existence of a credential without actually loading it. The getAliases method is optional as some implementations may only be able to retrieve a credential by name rather than query all available credentials.

-
-
-

The next set of methods to implement are the methods needed for updates to be applied to the underlying credential store.

-
-
-
-
public abstract void store(String credentialAlias, Credential credential, CredentialStore.ProtectionParameter protectionParameter)
-            throws CredentialStoreException, UnsupportedCredentialTypeException;
-
-public abstract void remove(String credentialAlias, Class<? extends Credential> credentialType, String credentialAlgorithm, AlgorithmParameterSpec parameterSpec) throws CredentialStoreException;
-
-public void flush() throws CredentialStoreException;
-
-
-
-

The store and remove methods either add credentials to a credential store or remove them. Implementing the flush method is optional but this method can be used as a trigger for a store to persist its state.

-
-
-

The final stage is to provide an implementation of java.security.Provider which can return an instance of the SPI for the CredentialStore service type. The WildFly Elytron provider which makes the Elytron implementations available is org.wildfly.security.credential.store.WildFlyElytronCredentialStoreProvider. The source code for this provider can be used as an example.

-
-
-
-

16.7. Reference

-
-

The previous sections have made use of either the WildFly Elytron Tool or the management operations and specified the arguments and configuration options required for the action being performed. These operations and tools however support a variety of other options so this section provides some additional detail.

-
-
-

16.7.1. Elytron Tool - credential-store Command

-
-

Examples of how to structure calling the credential-store command were provided earlier. When using the credential-store command the following actions are possible: -

-
- - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 12. credential-store Actions
ActionDescription

-a,--add <alias>

Add a new entry to the credential store using the specified alias.

-c,--create

Create a new credential store instance.

-e,--exists <alias>

Test if the specified alias already exists in the credential store.

-r,--remove <alias>

Remove the alias specified from the credential store.

-g,--generate-key-pair <alias>

Generate a new key pair credential and add it as an entry to the credential store using the specified alias.

--generate-secret-key <alias>

Generate a new secret key credential and add it as an entry to the credential store using the specified alias.

--export-secret-key <alias>

Export a secret key credential identified using the specified alias.

-xp,--export-key-pair-public-key <alias>

Display the public key of a key pair credential entry under the specified alias in OpenSSH format.

--import-secret-key <alias>

Import a secret key credential and add it as an entry to the credential store using the specified alias.

-ikp,--import-key-pair <alias>

Add a new key pair credential entry to the credential store using the specified alias.

--encrypt <alias>

Encrypt a clear text string using the secret key stored under the specified alias.

-v,--aliases

Display all aliases

-f,--summary

Print summary, especially command how to create this credential store

-h,--help

Get help with usage of this command

-
-

The following parameters can be provided for each action to specify how to load the store.

-
- - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 13. credential-store Parameters
ParameterDescription

-d,--debug

Print stack trace when error occurs.

-i,--iteration <arg>

Iteration count for final masked password of the credential store

-l,--location <loc>

Location of credential store storage file

-n,--entry-type <type>

Type of entry in credential store

-o,--other-providers <providers>

Comma separated list of Jakarta Connectors provider names. Providers will be supplied to the credential store instance. Each provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.

-p,--password <pwd>

Password for credential store

-q,--credential-store-provider <cs-provider>

Provider name containing CredentialStoreSpi implementation. Provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.

-s,--salt <arg>

Salt to apply for final masked password of the credential store

-t,--type <type>

Credential store type

-u,--properties <arg>

Implementation properties for credential store type in form of "prop1=value1; …​ ;propN=valueN"

-x,--secret <secret to store>

Password credential value

-
-

The following parameters can be provided for the generate-key-pair command:

-
- - ----- - - - - - - - - - - - - - - - - - - - -
Table 14. generate-key-pair Parameters
ParameterDescriptionDefault Value

-k, --algorithm <algorithm name>

The encryption algorithm to be used. One of: RSA, DSA, or EC

RSA

-j,--size <size in bytes>

Size of the private key in bytes

RSA: 2048, DSA: 2048, EC: 256

-
-

The following parameter can be provided for the generate-secret-key command:

-
- - ----- - - - - - - - - - - - - - - -
Table 15. generate-secret-key Parameter
ParameterDescriptionDefault Value

--size

Size of the secret key in bits, can be one of 128, 192, or 256.

256

-
-

The following parameters can be provided for the import-key-pair command:

-
- - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 16. import-key-pair Parameters
ParameterDescription

-pvk, --private-key-string <private key to store>

The private key as a string. Alternative to private-key-location

-pvl, --private-key-location <path>

The path to a file containing a private key. Alternative to private-key-string

-pbk, --public-key-string <public key to store>

The public key as a string. Alternative to public-key-location

-pbl, --public-key-location <path>

The path to a file containing a public key. Alternative to public-key-string

-kp, --key-passphrase <passphrase>

The passphrase used to decrypt the private key if needed. Can also be specified via prompt

-
-

The following parameter can be provided for the import-secret-key command:

-
- - ----- - - - - - - - - - - - - - - -
Table 17. import-secret-key Parameter
ParameterDescriptionDefault Value

--key

The secret key to be imported, if not specified the key will be prompted for.

N/A

-
-

The following parameters can be provided for the encrypt command:

-
- - ----- - - - - - - - - - - - - - - -
Table 18. encrypt Parameters
ParameterDescriptionDefault Value

--clear-text <clear text>

The clear text string to encrypt, if omitted this wil be prompted for.

N/AThe following parameters can be provided for the generate-key-pair command:

-

.generate-key-pair Parameters

-
-

|Parameter |Description |Default Value

-
-
-

|-k, --algorithm <algorithm name> -|The encryption algorithm to be used. One of: RSA, DSA, or EC -|RSA

-
-
-
-

16.7.2. Elytron Tool - vault Command

-
-

The vault command is used to convert a legacy vault to a credential store and supports the following parameters.

-
- - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 19. vault Parameters
ParameterDescription

-b,--bulk-convert <description file>

Bulk conversion with options listed in description file.

-d,--debug

Print stack trace when error occurs.

-e,--enc-dir <dir>

Vault directory containing encrypted files (defaults to "vault")

-f,--summary

Print summary of conversion

-h,--help

Get help with usage of this command

-i,--iteration <arg>

Iteration count (defaults to "23")

-k,--keystore <keystore>

Vault keystore URL (defaults to "vault.keystore")

-l,--location <loc>

Location of credential store storage file (defaults to "converted-vault.cr-store" in vault encryption directory)

-o,--other-providers <providers>

Comma separated list of Jakarta Connectors provider names. Providers will be supplied to the credential store instance. Each provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.

-p,--keystore-password <pwd>

Vault keystore password, used to open original vault key store, and used as password for new converted credential store

-q,--credential-store-provider <cs-provider>

Provider name containing CredentialStoreSpi implementation. Provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.

-s,--salt <salt>

8 character salt (defaults to "12345678")

-t,--type <type>

Converted credential store type (defaults to "KeyStoreCredentialStore")

-u,--properties <arg>

Configuration parameters for credential store in form of: "parameter1=value1; …​ ;parameterN=valueN"

-v,--alias <arg>

Vault key alias within key store (defaults to "vault")

-
-
-

16.7.3. KeyStoreCredentialStore

-
-

When configuring the KeyStoreCredentialStore the following configuration options are supported.

-
- - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 20. KeyStoreCredentialStore Configuration
NameDefaultDescription

create

false

If the credential store does not exist should it be created?

cryptographicAlgorithm

AES/CBC/NoPadding

The algorithm to use when using an external store.

external

false

Should external storage be used?

externalPath

N/A

Path to external storage.

keyAlias

cs_key

The alias to use from the KeyStore when working with external storage.

keyStoreType

KeyStore.getDefault()

The type of the key store used for the credential store.

location

N/A

The location of the credential store.

modifiable

true

Should the store be modifiable via the exposed API.

-
-
-
-
-
-

17. Encrypted Expressions

-
-
-

WildFly Elytron provides support for handling encrypted expressions in the management model using a SecretKey from a CredentialStore to decrypt the expression at runtime.

-
-
-

For information regarding how to create, configure, and populate credential stores including the manipulation of secret keys please refer to the Credential Store chapter.

-
-
-

Within the elytron subsystem one or more resolvers can be defined to handle the decryption of a previously encrypted expression. Each resolver will reference a single secret key in a -single credential store which it will use to decrypt the expressions. Encrypted expressions can take one of two forms:

-
-
-
    -
  • -

    ${ENC::ResolverName:RUxZAUMQXUj3qP1hbXyO5PpmsbgkepjoscIf3tKXvGiPDXYqNAc=}

    -
  • -
  • -

    ${ENC::RUxZAUMQXUj3qP1hbXyO5PpmsbgkepjoscIf3tKXvGiPDXYqNAc=}

    -
  • -
-
-
-

In both cases the ENC prefix is used to identify the expression is an encrypted expression. This prefix is the default however it is possible to define an alternative prefix for use -across the configuration.

-
-
-

Within the first example the ResolverName is the name of an individual resolver definition. The name of the resolver has been omitted in the second example as it is also possible -to define a default resolver which will be used if no resolver is specified within the expression.

-
-
-

17.1. expression=encryption resource

-
-

Support for decrypting expressions is enabled by defining a singleton expression=encryption resource within the elytron subsystem.

-
-
-

This resource can be defined with the following attributes.

-
-
-
    -
  • -

    prefix (Default ENC) - The prefix used within the encrypted expressions.

    -
  • -
  • -

    default-resolver (Optional) - For expressions that do not define a resolver, the default resolver to use.

    -
  • -
  • -

    resolvers - A lit of one more named resolver definitions.

    -
  • -
-
-
-

An individual resolver is defined with three attributes:

-
-
-
    -
  • -

    name - The name of the individual configuration used to reference it.

    -
  • -
  • -

    credential-store - Reference to the credential store instance that contains the secret key this resolver will use.

    -
  • -
  • -

    secret-key - The alias of the secret key within the credential store to use.

    -
  • -
-
-
-

The following is an example CLI command to define an expression=encryption resource in the elytron subsystem with two resolver definitions one if which is a -default and an alternative prefix.

-
-
-
-
[standalone@localhost:9990 /] /subsystem=elytron/expression=encryption:add(prefix=ENCRYPTED, default-resolver=one, \
-    resolvers=[{name=one, credential-store=store-one, secret-key=key}, \
-               {name=two, credential-store=store-two,secret-key=key}])
-{"outcome" => "success"}
-
-
-
-
-

17.2. Creating Expressions

-
- - - - - -
- - -The following section illustrates how to create an encrypted expression. If you repeat the same command for the same clear text it is normal that a different -result is returned for the same key. This is because a unique initialisation vector is used for each call. -
-
-
-

17.2.1. Management Operation

-
-

Once the expression=encryption resource has been defined the create-expression management operation can be called to generate an expression using the referenced -secret key.

-
-
- - - - - -
- - -When using management operations to create expressions from a clear-text string remember to disable the history in the CLI first otherwise the clear text string will be cached. -
-
-
-

In these examples the expression=encryption resource has been configured to use the default prefix.

-
-
-
-
[standalone@localhost:9990 /] history --disable
-[standalone@localhost:9990 /] /subsystem=elytron/expression=encryption:create-expression(resolver=two, clear-text=MyPassword)
-{
-    "outcome" => "success",
-    "result" => {"expression" => "${ENC::two:RUxZAUMQcUVLxqjt8zh8FabcA+wcnux+mqfLE27sfmHfKNG9BcY=}"}
-}
-
-[standalone@localhost:9990 /] history --enable
-
-
-
-

When using the create-expression operation the resolver attribute can be ommited, in that case the default-resolver will be used instead.

-
-
-
-
[standalone@localhost:9990 /] history --disable
-[standalone@localhost:9990 /] /subsystem=elytron/expression=encryption:create-expression(clear-text=MyPassword)
-{
-    "outcome" => "success",
-    "result" => {"expression" => "${ENC::RUxZAUMQu7biKBAwtUi+to+BlQnbjK3URUHMUDh8ReTlN0Alao0=}"}
-}
-
-[standalone@localhost:9990 /] history --enable
-
-
-
-

In both cases the resulting expression can be used on any attribute of a resource which supports the use of expressions.

-
-
-
-

17.2.2. Command Line Tool

-
-

Once a credential store has been populated with a secret key the credential-store command of the elytron-tool can also be used to create the encrypted string to include in an expression.

-
-
-
-
]$ bin/elytron-tool.sh credential-store --location standalone/configuration/store-one.cs --type PropertiesCredentialStore --encrypt key
-Clear text value:
-Confirm clear text value:
-Clear text encrypted to token 'RUxZAUMQvGzk6Vaadp2cahhZ6rlPhHOZcWyjXALlAthrENvRTvQ=' using alias 'key'.
-
-
-
-

The --encrypt action is used with the credential-store command, the argument to this action is the alias of the secret key to use. In this form the tool will prompt -twice for the clear text which is being encrypted. When using the command line tool the output is just the Base64 encoded encrypted ciphertext. To use this in the management model -it will need to be included in an expression as described earlier i.e. using the appropriate prefix and if required resolver name.

-
-
-

When using the --encrypt action it is also possible to pass in --clear-text parameter to pass in the clear text directly but this may be visible to other users and may also -be cached in the command history of your shell.

-
-
-
-
-

17.3. Domain Mode

-
-

When using encrypted expressions in domain mode things are slightly different to how the legacy vault may have been used in the past.

-
-
-

To make use of encrypted expressions in the host controller configuration the expression=encryption resource and relevant *credential-store definitions must be defined -within the elytron subsystem definition of the host controller i.e. in the same host.xml configuration.

-
-
-

For expressions within a domain profile being used to configure one or more servers the expression=encryption resource and relevant *credential-store definitions must be defined within the elytron subsystem -definition of the same profile.

-
-
-

The runtime management operations are not supported against the expression=encryption or *credential-store when defined within a domain profile so for these environments the credential store and relevant -expressions should be created offline before defining in the model. It is possible to reference a common credential store file shared between the host controller management model and the domain profile but after making -any updates to the credential store from the host controller the application server processes will need to be restarted to force them to reload the credential store.

-
-
-
-
-
-

18. Custom Components

-
-
-

WildFly Elytron subsystem allows adding custom implementation of different -components in form of WildFly modules into the WildFly instance and use them -by the same way as built-in Elytron subsystem components. -For example, you can create custom security event listener to develop custom -audit mechanisms and store information about user authentication attempts in -custom storage structure. Or you can create custom security realm to -authenticate users against your own identities storage.

-
-
-

To find what types of custom components you can implement you can use Tab -completion:

-
-
-
-
[standalone@localhost:9990 /] /subsystem=elytron/custom-
-custom-credential-security-factory  custom-realm
-custom-evidence-decoder             custom-realm-mapper
-custom-modifiable-realm             custom-role-decoder
-custom-permission-mapper            custom-role-mapper
-custom-principal-decoder            custom-security-event-listener
-custom-principal-transformer
-
-
-
-

18.1. Security event listener

-
-

This section describes how to add a custom security event listener. Similar steps can be followed to add another -custom component type.

-
-
-

To create custom security event listener you need to implement java.util.function.Consumer<org.wildfly.security.auth.server.event.SecurityEvent> interface. -Resulting class needs to be packed into JAR and WildFly module created. -You can create appropriate directory structure and module descriptor manually, or you can use following command of WildFly CLI:

-
-
-
-
bin/jboss-cli.sh
-module add --name=my.module --resources=my-listener.jar --dependencies=org.wildfly.security.elytron
-
-
-
-

Check -Class loading doc -for more information how to create WildFly module.

-
-
-

When appropriate module is on place, you can start using it by adding Elytron subsystem resource:

-
-
-
-
/subsystem=elytron/custom-security-event-listener=myListener:add(
-        module=my.module, class-name=my.module.MyAuditListener)
-
-
-
-

Now you can start to use it as any other security event listener - typically to set it as listener of ApplicationDomain:

-
-
-
-
/subsystem=elytron/security-domain=ApplicationDomain:write-attribute(name=security-event-listener, value=myListener)
-
-
-
-

After server reload the listener will receive all security events from given security domain.

-
-
-
-

18.2. Configurable custom components

-
-

You can also provide some component configuration from the subsystem, if class of your component will implement following method:

-
-
-
-
public void initialize(Map<String, String> configuration)
-
-
-
-

Afterwards you can provide configuration into your component from the subsystem using attribute configuration:

-
-
-
-
/subsystem=elytron/custom-...=my-component:add(module=..., class-name=..., configuration={myAttribute="myValue"})
-
-
-
-

After the component construction, the initialize method will be called with the configuration.

-
-
-
-
-
-

19. Elytron WildFly Java Security Manager

-
-
-

19.1. Overview

-
-

19.1.1. General introduction

-
-

The Elytron WildFly Java Security Manager is build on top of and within the Java SE Platform Security Architecture.

-
-
-

The Java Enterprise Edition (EE) 7 specification introduced a new feature which allows application developers to specify a Java Security Manager (JSM) policy for their Java EE applications, when deployed to a compliant Java EE Application Server such as WildFly. Until now, writing JSM policies has been pretty tedious. Now a new tool has been developed which allows the generation of a JSM policy for deployments running on WildFly. It is possible that running with JSM enabled may affect performance, JEP 232 indicates the performance impact would be 10-15%, but it is still recommended to test the impact per application.

-
-
-

Elytron WildFly Java Security Manager basic enhancements are

-
-
-
    -
  • -

    Support of JavaEE 7 (and newer) Java EE application permissions schema to allow declarative security per application deployment.

    -
  • -
  • -

    Support of minimum and maximum permissions per server instance.

    -
  • -
  • -

    Support of a "log-only" mode to ease development and testing of permissions.

    -
  • -
  • -

    Output of debug information to detect missing permissions.

    -
  • -
  • -

    Output of trace information to analyse special situations with protection domains, classloaders, and codesources.

    -
  • -
-
-
-
Why Run with the Java Security Manager Enabled?
-
-

Running a JSM will not fully protect the server from malicious attackers exploiting security vulnerabilities. It does, however, offer another layer of protection which can help reduce the impact of serious security vulnerabilities, such as deserialization attacks. For example, most of the recent attacks against Jackson Databind rely on making a Socket connection to an attacker-controlled JNDI Server to load malicious code. This article provides information on how this issue potentially affects an application written for JBoss EAP, which would be same for WildFly. The Security Manager could block the socket creation, and potentially thwart the attack.

-
-
-
-
JavaSE 17 Deprecate the Security Manager for Removal
-
-

The community decided to deprecate the Java Security Manager with Java 17. The full details are described in JEP 411: Deprecate the Security Manager for Removal. WildFly 29 still tests and actively supports the Security Manager. Used in conjunction with other tools such as Serialization Filtering the JSM is still a good defense in depth measure.

-
-
-
-
Multi-Layer Security
-
-

The Elytron WildFly Java Security Manager is just one piece in a multi-layer security with Defense in depth. Take care to harden your environment and minimize rights of the process for example with SELinux and systemd service hardening.

-
-
-
-
-
-

19.2. The Security manager subsystem

-
-

19.2.1. Enabling the Security Manager

-
-

You can enable the security manager with one of the following options:

-
-
-
-
./standalone.sh -secmgr # command line argument or
-./standalone.sh SECMGR=true
-
-
-
-

The server startup log should indicate this

-
-
-
-
INFO  [org.jboss.as] (MSC service thread 1-8) WFLYSRV0235: Security Manager is enabled
-
-
-
-

The use of -Djava.security.manager as described in Managing Applets and Applications has been removed from WildFly.

-
-
-
-

19.2.2. Security Policy Support

-
-

You can still utilize a custom security policy file with the -Djava.security.policy option. This is useful for special cases, for example a java agent. The default is the JVM provided policy.

-
-
-
-
./standalone.sh -secmgr -Djava.security.policy=file://$JBOSS_HOME/standalone/configuration/customjsm.policy
-
-
-
-

-Djava.security.policy= with one equal sign (=) utilizes the default policy plus the custom policy. --Djava.security.policy== with two equal signs (==) utilizes only the custom policy, take care for the necessary rights of the JVM in this case.

-
-
-
Property replacement in security policies
-
-

You can use variables in custom security policies which are resolved at runtime. You have to specify them on the command line or in the $JBOSS_HOME/bin/standalone.conf file. Properties in the server configuration are not available at the time of variable resolution on startup for the JSM.

-
-
-
-
-

19.2.3. Log-only mode

-
-

The log-only mode could be described as JSM simulation mode: Every permission check will be done but the result will not be propagated to the system - no SecurityException will be thrown. It is NOT about enabling or disabling log entries, which is solely driven by the logging configuration. The log-only mode is controlled with the -Dorg.wildfly.security.manager.log-only option. The default is false.

-
-
-
-
./standalone.sh -secmgr -Dorg.wildfly.security.manager.log-only=true
-
-
-
-

Do NOT use this option in production environments.

-
-
-
-

19.2.4. Logging Debug and trace

-
-

You can find a detailed description and how to about the command line interface and the logging configuration in the Admin Guide. The logger name to configure for the Elytron WildFly Security Manager is org.wildfly.security.access.

-
-
-
WildFly Security Manager Debug logging
-
-

Debug is enabled via the following CLI commands

-
-
-
-
/subsystem=logging/logger=org.wildfly.security.access:add
-/subsystem=logging/logger=org.wildfly.security.access:write-attribute(name=level,value=DEBUG)
-
-
-
-

A sample output will look like this:

-
-
-
-
DEBUG [org.wildfly.security.access] (Batch Thread - 1) Permission check failed (permission "("java.util.PropertyPermission" "java.io.tmpdir" "read")" in code source "(vfs:/content/batch-processing.war/WEB-INF/classes <no signer certificates>)" of "ModuleClassLoader for Module "deployment.batch-processing.war" from Service Module Loader")
-
-
-
-
-
WildFly Security Manager Trace logging
-
-

You might have a case where you need to find out what exactly caused a certain permission request. Or you have an error case with an null classloader or null codesource. To get a stacktrace you can enable org.wildfly.security.access on log level TRACE.

-
-
-
-
/subsystem=logging/logger=org.wildfly.security.access:add
-/subsystem=logging/logger=org.wildfly.security.access:write-attribute(name=level,value=TRACE)
-
-
-
-

Attention: This generates a lot of log output and has a severe performance impact. It’s not intended for permanent activation in development or testing but for special cases only.

-
-
-
-
Logging Profiles
-
-

If you are using one or more logging profiles it is strongly recommended to configure the org.wildfly.security.access logger for the server AND all logging profiles. If not, you might miss a relevant output.

-
-
-
-
-

19.2.5. Minimum and maximum permissions

-
-

The security-manager subsystem configures a maximum-set with the AllPermission by default:

-
-
-
-
            <deployment-permissions>
-                <maximum-set>
-                    <permission class="java.security.AllPermission"/>
-                </maximum-set>
-            </deployment-permissions>
-
-
-
-

If you cannot configure a third-party blackbox deployment unit or you want to share a common set of permissions across multiple deployments you can add a minimum-set of permissions. -You could modify the maximum-set, remove the AllPermission and setup further restrictions to permissions you are willing to grant to deployments.

-
-
-
-

19.2.6. Property replacement in permissions.xml

-
-

Expression resolution in EE security manager deployment descriptors (permissions.xml and jboss-permissions.xml) is supported since WildFly 19. You can use the familiar ${foo:true} syntax in these deployment descriptors to allow customization of settings at runtime.

-
-
-

Enable in standalone mode

-
-
-
-
[standalone@localhost:9990 /] /subsystem=ee:write-attribute(name=jboss-descriptor-property-replacement,value=TRUE)
-[standalone@localhost:9990 /] /subsystem=ee:write-attribute(name=spec-descriptor-property-replacement,value=TRUE)
-
-
-
-

Enable in domain mode

-
-
-
-
[domain@localhost:9990 /] /profile=*/subsystem=ee:write-attribute(name=jboss-descriptor-property-replacement, value=TRUE)
-[domain@localhost:9990 /] /profile=*/subsystem=ee:write-attribute(name=spec-descriptor-property-replacement, value=TRUE)
-
-
-
-
-

19.2.7. Sample permissions.xml

-
-

The permissions.xml file has to be placed below META-INF of deployment unit. The following example shows some entries, including -property replacement. This is especially useful for immutable artifacts.

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-<permissions xmlns="https://jakarta.ee/xml/ns/jakartaee"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
-             https://jakarta.ee/xml/ns/jakartaee/permissions_10.xsd"
-             version="10">
-    <permission>
-        <class-name>java.util.PropertyPermission</class-name>
-        <name>*</name> <!-- many 3rd party APIs cache and require access to all properties -->
-        <actions>read, write</actions>
-    </permission>
-    <permission>
-        <class-name>java.lang.RuntimePermission</class-name>
-        <name>getClassLoader</name>
-    </permission>
-    <permission>
-        <class-name>java.io.FilePermission</class-name>
-        <name>${install.app.home}/a/folder/-</name> <!-- recursive in and below folder -->
-        <actions>read</actions> <!-- but not write, delete, execute -->
-    </permission>
-    <permission>
-        <class-name>java.io.FilePermission</class-name>
-        <name>${install.app.home}/b/folder</name> <!-- folder itself -->
-        <actions>read, write, delete</actions> <!-- but not execute -->
-    </permission>
-    <permission>
-        <class-name>java.io.FilePermission</class-name>
-        <name>${install.app.home}/b/folder/*</name> <!-- all IN the folder -->
-        <actions>read, write, delete</actions> <!-- but not execute -->
-    </permission>
-    <permission>
-        <class-name>java.net.URLPermission</class-name>
-        <name>${myserver.prot}://${myserver.hostname}:${myserver.port}/c/path/-</name> <!-- recursive in and below path -->
-        <actions>POST,GET,DELETE:*</actions> <!-- refer to JavaDoc for more samples -->
-    </permission>
-</permissions>
-
-
-
-
-
-

19.3. How to generate a Java Security Manager Policy

-
-

19.3.1. Prerequisites

-
-
    -
  • -

    Java EE EAR or WAR file to add policies to;

    -
  • -
  • -

    Targeting WildFly 11 or later;

    -
  • -
  • -

    the Gradle build tool https://gradle.org/install/

    -
  • -
  • -

    Comprehensive test plan which exercises every "normal" function of the application.

    -
  • -
-
-
-

If a comprehensive test plan isn’t available, a policy could be generated in a production environment, as long as some extra disk space for logging is available and there is confidence the security of the application is not going to be compromised while generating policies.

-
-
-
-

19.3.2. Setup 'Log Only' mode and 'debug' logging for the Security Manager

-
-

Please enable the log-only mode and debug logging.

-
-
-
-

19.3.3. Test the application to generate policy violations

-
-

For this example we’ll use the batch-processing quickstart. Follow the README to deploy the application and access it running on the application server at http://localhost:8080/batch-processing. Click the 'Generate a new file and start import job' button in the Web UI and notice some policy violations are logged to the $JBOSS_HOME/standalone/log/server.log file, for example:

-
-
-
-
DEBUG [org.wildfly.security.access] (Batch Thread - 1) Permission check failed (permission "("java.util.PropertyPermission" "java.io.tmpdir" "read")" in code source "(vfs:/content/batch-processing.war/WEB-INF/classes <no signer certificates>)" of "ModuleClassLoader for Module "deployment.batch-processing.war" from Service Module Loader")
-
-
-
-
-

19.3.4. Generate a policy file for the application

-
-

Checkout the source code for the wildfly-policygen project written by Red Hat Product Security.

-
-
-
-
git clone git@github.com:jasinner/wildfly-policygen.git
-
-
-
-

Set the location of the server.log file which contains the generated security violations in the build.gradle script, i.e.:

-
-
-
-
task runScript (dependsOn: 'classes', type: JavaExec) {
-    main = 'com.redhat.prodsec.eap.EntryPoint'
-    classpath = sourceSets.main.runtimeClasspath
-    args '$JBOSS_HOME/standalone/log/server.log'
-}
-
-
-
-

Run wildfly-policygen using gradle, i.e.:

-
-
-
-
gradle runScript
-
-
-
-

A permissions.xml file should be generated in the current directory. Using the example application, the file is called batch-processing.war.permissions.xml. Copy that file to src/main/webapp/META-INF/permissions.xml, build, and redeploy the application, for example:

-
-
-
-
cp batch-processing.war.permissions.xml $APP_HOME/src/main/webapp/META-INF/permissions.xml
-
-
-
-

Where APP_HOME is an environment variable pointing to the batch-processing application’s home directory.

-
-
-
-

19.3.5. Run with the security manager in enforcing mode

-
-

Recall that we set the org.wildfly.security.manager.log-only system property in order to log permission violations. Remove that system property or set it to false in order to enforce the JSM policy that’s been added to the deployment. Once that line has been changed or removed from bin/standalone.conf, restart the application server, build, and redeploy the application.

-
-
-

Also go ahead and remove the extra logging category that was added previously using the CLI, e.g.:

-
-
-
-
/subsystem=logging/logger=org.wildfly.security.access:remove
-
-
-
-

This time there shouldn’t be any permission violations logged in the server.log file.

-
-
-
-
-

19.4. Conclusion

-
-

While the Java Security Manager will not prevent all security vulnerabilities possible against an application deployed to WildFly, it will add another layer of protection, which could mitigate the impact of serious security vulnerabilities such as deserialization attacks. If running with Security Manager enabled, be sure to check the impact on the performance of the application to make sure it’s within acceptable limits. Finally, use of the wildfly-policygen tool is not officially supported by Red Hat, however issues can be raised for the project in Github or in the WildFly User Forum.

-
-
-
-

19.5. Further background

-
-

Additionally to the documentation of JBoss Modules and the Security Manager the following explanations have been extracted from an WildFly developer conversation.

-
-
-

19.5.1. Elytron WildFly Security Manager and Protection Domains

-
-

Within WildFly there are two types of ProtectionDomain:

-
-
-
    -
  • -

    Server module (everything under the modules folder).

    -
  • -
  • -

    Deployment.

    -
  • -
-
-
-

Server modules automatically have the AllPermission granted. -Deployments have a combination of their permission.xml as well as possibly the minimal permission set from the security manager subsystem.

-
-
-
Permission checks
-
-

As a call progresses from class to class, module to module, deployment to module a list of all of the protection domains of each of these builds up. -When a permission check is performed it will only succeed if each and every protection domain on the call stack has been granted the permission.

-
-
-

This is where doPrivileged comes in, this is effectively saying "At this point in the callstack it is verified safe, forget the protection domains that called me." -So when a deployment calls into a server module and that server module calls doPrivileged then the deployments module will not longer be a part of the permission check.

-
-
-

Adding a doPrivileged seems an obvious solution but when added one also need to think about how deployments could abuse this to get their protection domain dropped from the permissions check.

-
-
-
-
Privileged blocks in dependencies
-
-

Adding the privileged block in a dependency used by WildFly works because the protection domain of the server modules has all the permissions. It is important to understand how module all permissions and doPrivileged checks work combined for a deployment.

-
-
-

One point to start with there is nothing special about a PrivilegedAction: PrivilegedAction is an interface which allows a Runnable class to be passed in and also has a return type. If this was added later it could have been implemented with the functional interfaces. The special part is the doPrivileged call. -Under normal circumstances every jar would be represented by it’s own protection domain and each jar could be assigned it’s own permissions. When the security manager performs it’s permissions check it would make sure every protection domain in the call stack has been granted that permission.

-
-
-

The WildFly modules case is slightly special as all the modules just get granted AllPermission, so we end up in a situation where deployments have a defined set of permissions and the WildFly modules have all - by default the security manager checks the permissions of both of these during a permission check that spans them - the WildFly module will of course always pass.

-
-
-

Because of WildFly’s model it is easy to get into the assumption that it is the doPrivileged call which is doing something special to bypass the security manager permissions check, it is not - all it is doing is dropping the protection domains from the call stack prior to that point, so we just end up with the protection domains for WildFly modules on the call stack which have the all permission.

-
-
-

So where you say the current protection domain where the dependency is has all permissions granted - yes that is it - the remaining protections domains on the call stack have the appropriate permissions granted.

-
-
-

The documentation might lead to the view the doPriviledge does some magical things that allowed your code run as trusted code that can bypass the permissions, for example at What It Means to Have Privileged Code, with sentences as:

-
-
-
-
-

Marking code as "privileged" enables a piece of trusted code to temporarily enable access to more resources than are available directly to the code that called it. This is necessary in some situations. For example, an application may not be allowed direct access to files that contain fonts, but the system utility to display a document must obtain those fonts, on behalf of the user. In order to do this, the system utility becomes privileged while obtaining the fonts.

-
-
-
-
-

This is all part of the argument for removing it, the confusion around how to apply the APIs - one could say the following sentence is correct but hides the important detail. "Marking code as "privileged" enables a piece of trusted code to temporarily enable access to more resources than are available directly to the code that called it."

-
-
-

If we have module A calling module B - by default the permissions check checks both. -If module B contains a doPrivileged before the permission check then only module B’s protection domain will be checked.

-
-
-

The reason for using the doPrivileged is the assumption module B has the greater (or more appropriate permissions) and just want these compared without those from A.

-
-
-

But it is also possible that A actually had the required permissions and B does not do even though one adds a doPrivileged it still fails as B does not have sufficient permissions anyway.

-
-
-

The reason for using the doPrivileged is the assumption module B has the greater (or more appropriate permissions) and just want these compared without those from A.

-
-
-
-
Privileged blocks implications for third party libraries
-
-

It is not a requirement for a developer of a third-party library to add a doProviledge block and configure the corresponding protection domain with the permissions the library requires for doing the work.

-
-
-

A third-party developer of a library could add a doPrivileged block to allow the consumers of the library to have the freedom to not require all the permissions needed available on all the protection domains. However, consumers have to at least give the required permissions to the protection domain where the third-party library is. This is just to add a possibility for the consumers of the library.

-
-
-
-
Privileged blocks implications for WildFly modules
-
-

Without WildFly’s special AllPermission assignment each module should specify the permissions that it needs.

-
-
-

But this is where the permissions get even more complex. Let’s say in that example module B needs to read a file, the developer of module B may not know where that file will exist as it is not until the module is used in another project (like an app server we know file locations).

-
-
-

One way is avoiding doPrivileged:

-
-
-
    -
  • -

    Module B has the permission to access all files.

    -
  • -
  • -

    Module A has the permission to access just a specific file.

    -
  • -
-
-
-

Combined a permission check would pass.

-
-
-

Second is module B contains a doPrivileged.

-
-
-

If module B still has the permission to access all files but module A has no file permission. If module A can pass the path of the file to module B one now has the problem that modules can potentially use this to bypass permissions and get access to all files.

-
-
-

The next variation is the permissions for module B need adjusting in context, i.e. it now needs to specify which file module B can access so there is no way for A to abuse it.

-
-
-

WildFly developers should not need to specify permissions for all modules in the app server, and if they need context that would be even more difficult.

-
-
-

The first example would be the equivalent of all deployments now needing the permissions granted but deployments are not supposed to need to be aware of the inner workings of the application server to decide what permissions they need.

-
-
-

So it ends up in that middle ground where if WildFly developers are not careful it could be open to abuse from deployments.

-
-
-
-
-
-
-
-

20. Migrate Legacy Security to Elytron Security

-
-
-

20.1. Authentication Configuration

- -
-
-

20.2. Properties Based Authentication / Authorization

-
-

20.2.1. PicketBox Based Configuration

-
-

This migration example assumes a deployed web application is configured -to require authentication using FORM based authentication and is -referencing a PicketBox based security domain using the -UsersRolesLoginModule to load user information from a pair or properties -files.

-
-
-
Original Configuration
-
-

A security domain can be defined in the legacy security subsystem using -the following management operations: -

-
-
-
-
./subsystem=security/security-domain=application-security:add
-./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=UsersRoles, flag=Required, module-options={usersProperties=file://${jboss.server.config.dir}/example-users.properties, rolesProperties=file://${jboss.server.config.dir}/example-roles.properties}}])
-
-
-
-

This would result in a security domain definition: -

-
-
-
-
  <security-domain name="application-security">
-    <authentication>
-      <login-module code="UsersRoles" flag="required">
-        <module-option name="usersProperties" value="file://${jboss.server.config.dir}/example-users.properties"/>
-        <module-option name="rolesProperties" value="file://${jboss.server.config.dir}/example-roles.properties"/>
-      </login-module>
-    </authentication>
-  </security-domain>
-
-
-
-
-
Intermediate Configuration
-
-

It is possible to take a previously defined PicketBox security domain -and expose it as an Elytron security realm so it can be wired into a -complete Elytron based configuration, if only properties based -authentication was to be migrated it would be recommended to jump to the -fully migration configuration and avoid the unnecessary dependency on -the legacy security subsystem but for situations where that is not -immediately possible these commands illustrate an intermediate solution.

-
-
-

These steps assume the original configuration is already in place.

-
-
-

The first step is to add a mapping to an Elytron security realm within -the legacy security subsystem.

-
-
-
-
./subsystem=security/elytron-realm=application-security:add(legacy-jaas-config=application-security)
-
-
-
-

This results in the following configuration.

-
-
-
-
  <subsystem xmlns="urn:jboss:domain:security:2.0">
-    ...
-    <elytron-integration>
-      <security-realms>
-        <elytron-realm name="application-security" legacy-jaas-config="application-security"/>
-      </security-realms>
-    </elytron-integration>
-    ...
-  </subsystem>
-
-
-
-

Within the Elytron subsystem a security domain can be defined which -references the exported security realm and also a http authentication -factory which supports FORM based authentication.

-
-
-
-
./subsystem=elytron/security-domain=application-security:add(realms=[{realm=application-security}], default-realm=application-security, permission-mapper=default-permission-mapper)
-./subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=FORM}])
-
-
-
-

And the resulting configuration: -

-
-
-
-
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-    ...
-    <security-domains>
-      ...
-      <security-domain name="application-security" default-realm="application-security" permission-mapper="default-permission-mapper">
-        <realm name="application-security"/>
-      </security-domain>
-    </security-domains>
-    ...
-    <http>
-      ...
-      <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
-        <mechanism-configuration>
-          <mechanism mechanism-name="FORM"/>
-        </mechanism-configuration>
-      </http-authentication-factory>
-      ...
-    </http>
-    ...
-  </subsystem>
-
-
-
-

Finally configuration needs to be added to the Undertow subsystem to map -the security domain referenced by the deployment to the newly defined -http authentication factory.

-
-
-
-
./subsystem=undertow/application-security-domain=application-security:add(http-authentication-factory=application-security-http)
-
-
-
-

Which results in: -

-
-
-
-
  <subsystem xmlns="urn:jboss:domain:undertow:4.0">
-    ...
-    <application-security-domains>
-      <application-security-domain name="application-security" http-authentication-factory="application-security-http"/>
-    </application-security-domains>
-    ...
-  </subsystem>
-
-
-
-

Note: If the deployment was already deployed at this point the -application server should be reloaded or the deployment redeployed for -the application security domain mapping to take effect.

-
-
-

The following command can then be used to verify the mapping was applied -to the deployment.

-
-
-
-
[standalone@localhost:9990 /] ./subsystem=undertow/application-security-domain=application-security:read-resource(include-runtime=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "enable-jacc" => false,
-        "http-authentication-factory" => "application-security-http",
-        "override-deployment-config" => false,
-        "referencing-deployments" => ["HelloWorld.war"],
-        "setting" => undefined
-    }
-}
-
-
-
-

The deployment being tested here is 'HelloWorld.war' and the output from -the previous command shows this deployment is referencing the mapping.

-
-
-

At this stage the previously defined security domain is used for it’s -LoginModule configuration but this is wrapped by Elytron components -which take over authentication.

-
-
-
-
Fully Migrated Configuration
-
-

Alternatively the configuration can be completely defined within the -Elytron subsystem, in this case it is assumed none of the previous -commands have been executed and this is started from a clean -configuration - however if the security domain definition does exist in -the legacy security subsystem that will remain completely independent.

-
-
-

First a new security realm can be defined within the Elytron subsystem -referencing the files referenced previously: -

-
-
-
-
./subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"}, groups-properties={path=example-roles.properties, relative-to=jboss.server.config.dir}, groups-attribute=Roles)
-
-
-
-

As before a security domain and http authentication factory can be -defined.

-
-
-
-
./subsystem=elytron/security-domain=application-security:add(realms=[{realm=application-properties}], default-realm=application-properties, permission-mapper=default-permission-mapper)
-./subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=FORM}])
-
-
-
-

This results in the following overall configuration.

-
-
-
-
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-    ...
-    <security-domains>
-      ...
-      <security-domain name="application-security" default-realm="application-properties" permission-mapper="default-permission-mapper">
-        <realm name="application-properties"/>
-      </security-domain>
-    </security-domains>
-    <security-realms>
-      ...
-      <properties-realm name="application-properties" groups-attribute="Roles">
-        <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/>
-        <groups-properties path="example-roles.properties" relative-to="jboss.server.config.dir"/>
-      </properties-realm>
-    </security-realms>
-    ...
-    <http>
-      ...
-      <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
-        <mechanism-configuration>
-          <mechanism mechanism-name="FORM"/>
-        </mechanism-configuration>
-      </http-authentication-factory>
-      ...
-    </http>
-    ...
-  </subsystem>
-
-
-
-

As before the application-security-domain mapping should be added to the -Undertow subsystem and the server reloaded or the deployment redeployed -as required.

-
-
-
-
./subsystem=undertow/application-security-domain=application-security:add(http-authentication-factory=application-security-http)
-
-
-
-

Which results in: -

-
-
-
-
  <subsystem xmlns="urn:jboss:domain:undertow:4.0">
-    ...
-    <application-security-domains>
-      <application-security-domain name="application-security" http-authentication-factory="application-security-http"/>
-    </application-security-domains>
-    ...
-  </subsystem>
-
-
-
-

At this stage the authentication is the equivalent of the original -configuration however now Elytron components are used exclusively.

-
-
-
-
-

20.2.2. Migrating to FileSystemRealm Based Authentication

-
-

An alternative to using a legacy properties-realm in Elytron is to use -the new filesystem-realm. An Elytron filesystem-realm will use file-backed -authentication methods to secure the server. It is now easy to migrate from a -legacy properties-realm to an Elytron filesystem-realm by using the -Elytron Tool. The new Elytron Tool command, FileSystemRealmCommand, will convert -the given properties files and create an Elytron FileSystemRealm, along with a script -with the WildFly CLI commands for registering the FileSystemRealm and Security Domain -on the WildFly server. After using the tool, it will still be necessary to configure -an authentication-factory and an application-security-domain, as in the steps -above.

-
-
-
Single User-Roles Conversion
-
-

To convert a single user-roles properties files combination, the parameters -can be passed directly into the command:

-
-
-
-
./bin/elytron-tool.sh filesystem-realm --users-file users.properties --roles-file roles.properties --output-location filesystem_realm_dir
-
-
-
-

This will then configure a filesystem-realm in filesystem_realm_dir and -will create a script converted-properties-filesystem-realm.sh in -filesystem_realm_dir with the WildFly CLI commands to register the filesystem-realm -and the security-domain, with the security-domain named -converted-properties-security-domain. To customize the filesystem-realm name -and the security-domain name, the --filesystem-realm-name and ---security-domain-name parameters can be used.

-
-
-

Use elytron-tool.sh filesystem-realm --help to get description of all parameters.

-
-
-
Notes:
-
-
    -
  • -

    The short form options, as shown in the --help option, can be used, such as --u in place of --users-file.

    -
  • -
  • -

    When the --summary parameter is specified, an output of operations performed -during conversion, including warnings and errors, will be shown once the -command finishes conversion.

    -
  • -
  • -

    When the --silent parameter is specified, Elytron Tool will not give no -information output, as compared to normal operation where warnings are shown. -The --silent command will not override --summary, resulting in the ability to -hide output until the command finishes conversion.

    -
  • -
  • -

    Elytron Tool will not configure the filesystem-realm and security-domain -within WildFly itself, it will just provide the necessary commands in the -output script file.

    -
  • -
-
-
-
-
-
Bulk User-Roles Conversion
-
-

It is possible to convert multiple users-roles files combinations at once -by using --bulk-convert parameter with a descriptor file.

-
-
-

An example descriptor-file from our tests is:

-
-
-
-
users-file:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/users/users-5.properties
-roles-file:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/roles/roles-5.properties
-output-location:./target/test-classes/filesystem-realm/output-5-bulk
-filesystem-realm-name:nameOfFileSystemRealm5
-security-domain-name:nameOfSecurityDomain5
-
-users-file:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/users/users-6.properties
-roles-file:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/roles/roles-6.properties
-output-location:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/output-6-bulk
-filesystem-realm-name:nameOfFileSystemRealm6
-security-domain-name:nameOfSecurityDomain6
-
-
-
-

Each blank line starts a new conversion operation. As with a single conversion, -the users-file, roles-file, and output-location are required parameters while -the filesystem-realm-name and security-domain-name are optional parameters.

-
-
-

Execute the following command to convert with the descriptor file:

-
-
-
-
./bin/elytron-tool.sh filesystem-realm --bulk-convert descriptor-file
-
-
-
-
Notes:
-
-
    -
  • -

    For bulk conversion, only the long form option can be used, unlike the CLI -mode where both long and short form options can be used.

    -
  • -
  • -

    The --summary and --silent parameters can be used here too. However, they -must be specified while executing the command and apply to all conversions -specified in the descriptor file.

    -
  • -
  • -

    If the --summary parameter is used, then a summary will be provided -after each execution as opposed to after the command finishes all conversions.

    -
  • -
  • -

    As with the single conversion, absolute or relative paths can be used for -users-file, roles-file, and output-location.

    -
  • -
  • -

    Each execution of the command will produce a separate script in the given -output-location directory.

    -
  • -
  • -

    Repeated output-location paths can result in an error

    -
  • -
  • -

    If there is an error in one users-roles files combination then Elytron Tool -will report the issue, such as a missing required parameter, and continue -with the conversion of all remaining combinations.

    -
  • -
-
-
-
-
-
-

20.2.3. Legacy Security Realm

-
-
Original Configuration
-
-

A legacy security realm can be defined using the following commands to -load users passwords and group information from properties files.

-
-
-
-
./core-service=management/security-realm=ApplicationSecurity:add
-./core-service=management/security-realm=ApplicationSecurity/authentication=properties:add(relative-to=jboss.server.config.dir, path=example-users.properties, plain-text=true)
-./core-service=management/security-realm=ApplicationSecurity/authorization=properties:add(relative-to=jboss.server.config.dir, path=example-roles.properties)
-
-
-
-

This results in the following realm definition.

-
-
-
-
  <security-realm name="ApplicationSecurity">
-    <authentication>
-      <properties path="example-users.properties" relative-to="jboss.server.config.dir" plain-text="true"/>
-    </authentication>
-    <authorization>
-      <properties path="example-roles.properties" relative-to="jboss.server.config.dir"/>
-    </authorization>
-  </security-realm>
-
-
-
-

A legacy security realm would typically be used to secure either the -management interfaces or remoting connectors.

-
-
-
-
Migrated Configuration
-
-

One of the motivations for adding the Elytron based security to the -application server is to allow a consistent security solution to be used -across the server, to replace the security realm the same steps as -described in the previous 'Fully Migrated' section can be followed again -up until the http-authentication-factory is defined.

-
-
-

A legacy security realm can also be used for SASL based authentication -so a sasl-authentication-factory should also be defined.

-
-
-
-
./subsystem=elytron/sasl-authentication-factory=application-security-sasl:add(sasl-server-factory=elytron, security-domain=application-security, mechanism-configurations=[{mechanism-name=PLAIN}])
-
-
-
-
-
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-    ...
-    <sasl>
-      ...
-      <sasl-authentication-factory name="application-security-sasl" sasl-server-factory="elytron" security-domain="application-security">
-        <mechanism-configuration>
-          <mechanism mechanism-name="PLAIN"/>
-        </mechanism-configuration>
-      </sasl-authentication-factory>
-      ...
-    </sasl>
-  </subsystem>
-
-
-
-

This can be associated with a Remoting connector to use for -authentication and the existing security realm reference cleared.

-
-
-
-
./subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=sasl-authentication-factory, value=application-security-sasl)
-./subsystem=remoting/http-connector=http-remoting-connector:undefine-attribute(name=security-realm)
-
-
-
-
-
  <subsystem xmlns="urn:jboss:domain:remoting:4.0">
-    ...
-    <http-connector name="http-remoting-connector" connector-ref="default" sasl-authentication-factory="application-security-sasl"/>
-  </subsystem>
-
-
-
-

If this new configuration was to be used to secure the management -interfaces more suitable names should be chosen but the following -commands illustrate how to set the two authentication factories and -clear the existing security realm reference.

-
-
-
-
./core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=application-security-http)
-./core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=application-security-sasl)
-./core-service=management/management-interface=http-interface:undefine-attribute(name=security-realm)
-
-
-
-
-
  <management-interfaces>
-    <http-interface http-authentication-factory="application-security-http">
-      <http-upgrade enabled="true" sasl-authentication-factory="application-security-sasl"/>
-      <socket-binding http="management-http"/>
-    </http-interface>
-  </management-interfaces>
-
-
-
-
-
-
-

20.3. LDAP Authentication Migration

-
-

The section describing how to migrate from properties based -authentication using either PicketBox or legacy security realms to -Elytron also contained a lot of additional information regarding -defining security domains, authentication factories, and how these are -mapped to be used for authentication. This section will illustrate some -equivalent LDAP configuration using legacy security realms and PicketBox -security domains and show the equivalent configuration using Elytron but -will not repeat the steps to wire it all together covered in the -previous section.

-
-
-

These configuration examples are developed against a test LDAP sever -with user entries like: -

-
-
-
-
dn: uid=TestUserOne,ou=users,dc=group-to-principal,dc=wildfly,dc=org
-objectClass: top
-objectClass: inetOrgPerson
-objectClass: uidObject
-objectClass: person
-objectClass: organizationalPerson
-cn: Test User One
-sn: Test User One
-uid: TestUserOne
-userPassword: {SSHA}UG8ov2rnrnBKakcARVvraZHqTa7mFWJZlWt2HA==
-
-
-
-

The group entries then look like: -

-
-
-
-
dn: uid=GroupOne,ou=groups,dc=group-to-principal,dc=wildfly,dc=org
-objectClass: top
-objectClass: groupOfUniqueNames
-objectClass: uidObject
-cn: Group One
-uid: GroupOne
-uniqueMember: uid=TestUserOne,ou=users,dc=group-to-principal,dc=wildfly,dc=org
-
-
-
-

For authentication purposes the username will be matched against the -'uid' attribute, also the resulting group name will be taken from the -'uid' attribute of the group entry.

-
-
-

20.3.1. Legacy Security Realm

-
-

A connection to the LDAP server and related security realm can be -created with the following commands: -

-
-
-
-
batch
-./core-service=management/ldap-connection=MyLdapConnection:add(url="ldap://localhost:10389", search-dn="uid=admin,ou=system", search-credential="secret")
- 
-./core-service=management/security-realm=LDAPRealm:add
-./core-service=management/security-realm=LDAPRealm/authentication=ldap:add(connection="MyLdapConnection", username-attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org")
- 
- 
-./core-service=management/security-realm=LDAPRealm/authorization=ldap:add(connection=MyLdapConnection)
-./core-service=management/security-realm=LDAPRealm/authorization=ldap/username-to-dn=username-filter:add(attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org")
-./core-service=management/security-realm=LDAPRealm/authorization=ldap/group-search=group-to-principal:add(base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", iterative=true, prefer-original-connection=true, principal-attribute=uniqueMember, search-by=DISTINGUISHED_NAME, group-name=SIMPLE, group-name-attribute=uid)
-run-batch
-
-
-
-

This results in the following configuration.

-
-
-
-
  <management>
-    <security-realms>
-      ...
-      <security-realm name="LDAPRealm">
-        <authentication>
-          <ldap connection="MyLdapConnection" base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
-            <username-filter attribute="uid"/>
-          </ldap>
-        </authentication>
-        <authorization>
-          <ldap connection="MyLdapConnection">
-            <username-to-dn>
-              <username-filter base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org" attribute="uid"/>
-            </username-to-dn>
-            <group-search group-name="SIMPLE" iterative="true" group-name-attribute="uid">
-              <group-to-principal search-by="DISTINGUISHED_NAME" base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org" prefer-original-connection="true">
-                <membership-filter principal-attribute="uniqueMember"/>
-              </group-to-principal>
-            </group-search>
-          </ldap>
-        </authorization>
-      </security-realm>
-    </security-realms>
-    <outbound-connections>
-      <ldap name="MyLdapConnection" url="ldap://localhost:10389" search-dn="uid=admin,ou=system" search-credential="secret"/>
-    </outbound-connections>
-    ...
-  </management>
-
-
-
-
-

20.3.2. PicketBox LdapExtLoginModule

-
-

The following commands can create a PicketBox security domain configured -to use the LdapExtLoginModule to verify a username and password.

-
-
-
-
./subsystem=security/security-domain=application-security:add
-./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=LdapExtended, flag=Required, module-options={ \
-java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, \
-java.naming.provider.url=ldap://localhost:10389, \
-java.naming.security.authentication=simple, \
-bindDN="uid=admin,ou=system", \
-bindCredential=secret, \
-baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
-baseFilter="(uid={0})", \
-rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",\
-roleFilter="(uniqueMember={1})", \
-roleAttributeID="uid" \
-}}])
-
-
-
-

This results in the following configuration.

-
-
-
-
  <subsystem xmlns="urn:jboss:domain:security:2.0">
-    ...
-    <security-domains>
-      ...
-      <security-domain name="application-security">
-        <authentication>
-          <login-module code="LdapExtended" flag="required">
-            <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
-            <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/>
-            <module-option name="java.naming.security.authentication" value="simple"/>
-            <module-option name="bindDN" value="uid=admin,ou=system"/>
-            <module-option name="bindCredential" value="secret"/>
-            <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/>
-            <module-option name="baseFilter" value="(uid={0})"/>
-            <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
-            <module-option name="roleFilter" value="(uniqueMember={1})"/>
-            <module-option name="roleAttributeID" value="uid"/>
-          </login-module>
-        </authentication>
-      </security-domain>
-    </security-domains>
-  </subsystem>
-
-
-
-
-

20.3.3. Migrated

-
-

Within the Elytron subsystem a directory context can be defined for the -connection to LDAP: -

-
-
-
-
./subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret})
-
-
-
-

Then a security realm can be created to search LDAP and verify the -supplied password: -

-
-
-
-
./subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, \
-direct-verification=true, \
-identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
-rdn-identifier="uid", \
-attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]})
-
-
-
-

In the prior two examples information is loaded from LDAP to use -directly as groups or roles, in the Elytron case information can be -loaded from LDAP to associate with the identity as attributes - these -can subsequently be mapped to roles but attributes can be loaded for -other purposes as well.

-
-
- - - - - -
- - -By default, if no role-decoder is defined for given security-domain, -identity attribute " `Roles`" is mapped to the identity roles. -
-
-
-

This leads to the following configuration.

-
-
-
-
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-    ...
-    <security-realms>
-      ...
-      <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true">
-        <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
-          <attribute-mapping>
-            <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
-          </attribute-mapping>
-        </identity-mapping>
-      </ldap-realm>
-    </security-realms>
-    ...
-    <dir-contexts>
-      <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system">
-        <credential-reference clear-text="secret"/>
-      </dir-context>
-    </dir-contexts>
-  </subsystem>
-
-
-
-
-
-

20.4. Composite Stores Migration

-
-

When using either PicketBox or the legacy security realms it is possible to define a configuration where authentication is performed against one identity store whilst the information used for authorization is loaded from a different store, when using WildFly Elytron this can be achieved by using an aggregate security realm.

-
-
-

The example here makes use of a properties file for authentication and then searches LDAP to load group / role information. Both of these are based on the previous examples within this document so the environmental information is not repeated here.

-
-
-

20.4.1. PicketBox Based Configuration

-
-
-
./subsystem=security/security-domain=application-security:add
-./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[ \
-{code=UsersRoles, flag=Required, module-options={ \
-password-stacking=useFirstPass, \
-usersProperties=file://${jboss.server.config.dir}/example-users.properties, \
-rolesProperties=file://${jboss.server.config.dir}/example-roles.properties}} \
-{code=LdapExtended, flag=Required, module-options={ \
-password-stacking=useFirstPass, \
-java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, \
-java.naming.provider.url=ldap://localhost:10389, \
-java.naming.security.authentication=simple, \
-bindDN="uid=admin,ou=system", \
-bindCredential=secret, \
-baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
-baseFilter="(uid={0})", \
-rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",\
-roleFilter="(uniqueMember={1})", \
-roleAttributeID="uid" \
-}}])
-
-
-
-

This results in the following domain definition

-
-
-
-
<security-domain name="application-security">
-  <authentication>
-    <login-module code="UsersRoles" flag="required">
-      <module-option name="password-stacking" value="useFirstPass"/>
-      <module-option name="usersProperties" value="file://${jboss.server.config.dir}/example-users.properties"/>
-      <module-option name="rolesProperties" value="file://${jboss.server.config.dir}/example-roles.properties"/>
-    </login-module>
-    <login-module code="LdapExtended" flag="required">
-      <module-option name="password-stacking" value="useFirstPass"/>
-      <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
-      <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/>
-      <module-option name="java.naming.security.authentication" value="simple"/>
-      <module-option name="bindDN" value="uid=admin,ou=system"/>
-      <module-option name="bindCredential" value="secret"/>
-      <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/>
-      <module-option name="baseFilter" value="(uid={0})"/>
-      <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
-      <module-option name="roleFilter" value="(uniqueMember={1})"/>
-      <module-option name="roleAttributeID" value="uid"/>
-    </login-module>
-  </authentication>
-</security-domain>
-
-
-
-

During an authentication attempt the 'UsersRoles' login module will first be called to perform authentication based on the supplied credential, then the 'LdapExtLoginModule' will be called which will proceed to query LDAP to load the roles for the identity.

-
-
-
-
./core-service=management/ldap-connection=MyLdapConnection:add(url="ldap://localhost:10389", search-dn="uid=admin,ou=system", search-credential="secret")
-
-./core-service=management/security-realm=ApplicationSecurity:add
-./core-service=management/security-realm=ApplicationSecurity/authentication=properties:add(path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true)
-
-batch
-./core-service=management/security-realm=ApplicationSecurity/authorization=ldap:add(connection=MyLdapConnection)
-./core-service=management/security-realm=ApplicationSecurity/authorization=ldap/username-to-dn=username-filter:add(attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org")
-./core-service=management/security-realm=ApplicationSecurity/authorization=ldap/group-search=group-to-principal:add(base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", iterative=true, prefer-original-connection=true, principal-attribute=uniqueMember, search-by=DISTINGUISHED_NAME, group-name=SIMPLE, group-name-attribute=uid)
-run-batch
-
-
-
-

This results in the following realm definition:

-
-
-
-
<security-realm name="ApplicationSecurity">
-  <authentication>
-    <properties path="example-users.properties" relative-to="jboss.server.config.dir" plain-text="true"/>
-  </authentication>
-  <authorization>
-    <ldap connection="MyLdapConnection">
-      <username-to-dn>
-        <username-filter base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org" attribute="uid"/>
-      </username-to-dn>
-      <group-search group-name="SIMPLE" iterative="true" group-name-attribute="uid">
-        <group-to-principal search-by="DISTINGUISHED_NAME" base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org" prefer-original-connection="true">
-          <membership-filter principal-attribute="uniqueMember"/>
-        </group-to-principal>
-      </group-search>
-    </ldap>
-  </authorization>
-</security-realm>
-
-<outbound-connections>
-  <ldap name="MyLdapConnection" url="ldap://localhost:10389" search-dn="uid=admin,ou=system" search-credential="secret"/>
-</outbound-connections>
-
-
-
-

As with the PicketBox example, authentication is first performed using the properties file - then group searching is performed against LDAP.

-
-
-
-

20.4.2. Migrated WildFly Elytron Configuration

-
-

The equivalent WildFly Elytron configuration can be defined with the following commands:

-
-
-
-
./subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret})
-
-./subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, \
-direct-verification=true, \
-identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
-rdn-identifier="uid", \
-attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]})
-
-./subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"}, groups-properties={path=example-roles.properties, relative-to=jboss.server.config.dir}, groups-attribute=Roles)
-
-./subsystem=elytron/aggregate-realm=combined-realm:add(authentication-realm=application-properties, authorization-realm=ldap-realm)
-
-./subsystem=elytron/security-domain=application-security:add(realms=[{realm=combined-realm}], default-realm=combined-realm, permission-mapper=default-permission-mapper)
-./subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=BASIC}])
-
-
-
-

This results in the following realm definition:

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-  ...
-  <security-domains>
-    ...
-    <security-domain name="application-security" default-realm="combined-realm" permission-mapper="default-permission-mapper">
-      <realm name="combined-realm"/>
-    </security-domain>
-  </security-domains>
-  <security-realms>
-    <aggregate-realm name="combined-realm" authentication-realm="application-properties" authorization-realm="ldap-realm"/>
-      ...
-      <properties-realm name="application-properties" groups-attribute="Roles">
-        <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/>
-        <groups-properties path="example-roles.properties" relative-to="jboss.server.config.dir"/>
-      </properties-realm>
-      <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true">
-        <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
-          <attribute-mapping>
-            <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
-          </attribute-mapping>
-        </identity-mapping>
-      </ldap-realm>
-  </security-realms>
-  ...
-  <http>
-    ...
-    <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
-      <mechanism-configuration>
-        <mechanism mechanism-name="BASIC"/>
-      </mechanism-configuration>
-    </http-authentication-factory>
-    ...
-  </http>
-  ...
-  <dir-contexts>
-    <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system">
-      <credential-reference clear-text="secret"/>
-    </dir-context>
-  </dir-contexts>
-</subsystem>
-
-
-
-

Within the WildFly Elytron example a new security realm 'aggregate-realm' has been defined, this definition specifies which of the defined security realms should be used for the authentication step and which of the security realms should be used for the loading of the identity used for subsequent authorization decisions.

-
-
-
-
-

20.5. Database Authentication

-
-

The section describing how to migrate from database accessible via JDBC -datasource based authentication using PicketBox to Elytron. This section -will illustrate some equivalent configuration using PicketBox security -domains and show the equivalent configuration using Elytron but will not -repeat the steps to wire it all together covered in the previous -sections.

-
-
-

These configuration examples are developed against a test database with -users table like:

-
-
-
-
CREATE TABLE User (
-    id BIGINT NOT NULL,
-    username VARCHAR(255),
-    password VARCHAR(255),
-    role ENUM('admin', 'manager', 'user'),
-    PRIMARY KEY (id),
-    UNIQUE (username)
-)
-
-
-
-

For authentication purposes the username will be matched against the ' -`username’ column, password will be expected in hex-encoded MD5 hash in -' `password’ column. User role for authorization purposes will be taken -from ' `role’ column.

-
-
-

20.5.1. PicketBox Database LoginModule

-
-

The following commands can create a PicketBox security domain configured -to use database accessible via JDBC datasource to verify a username and -password and to assign roles.

-
-
-
-
./subsystem=security/security-domain=application-security/:add
-./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=Database, flag=Required, module-options={ \
-    dsJndiName="java:jboss/datasources/ExampleDS", \
-    principalsQuery="SELECT password FROM User WHERE username = ?", \
-    rolesQuery="SELECT role, 'Roles' FROM User WHERE username = ?", \
-    hashAlgorithm=MD5, \
-    hashEncoding=base64 \
-}}])
-
-
-
-

This results in the following configuration.

-
-
-
-
        <subsystem xmlns="urn:jboss:domain:security:2.0">
-            <security-domains>
-                ...
-                <security-domain name="application-security">
-                    <authentication>
-                        <login-module code="Database" flag="required">
-                            <module-option name="dsJndiName" value="java:jboss/datasources/ExampleDS"/>
-                            <module-option name="principalsQuery" value="SELECT password FROM User WHERE username = ?"/>
-                            <module-option name="rolesQuery" value="SELECT role, 'Roles' FROM User WHERE username = ?"/>
-                            <module-option name="hashAlgorithm" value="MD5"/>
-                            <module-option name="hashEncoding" value="base64"/>
-                        </login-module>
-                    </authentication>
-                </security-domain>
-            </security-domains>
-        </subsystem>
-
-
-
-
-

20.5.2. Migrated

-
-

Within the Elytron subsystem to use database accesible via JDBC you need -to define jdbc-realm:

-
-
-
-
./subsystem=elytron/jdbc-realm=jdbc-realm:add(principal-query=[{ \
-    data-source=ExampleDS, \
-    sql="SELECT role, password FROM User WHERE username = ?", \
-    attribute-mapping=[{index=1, to=Roles}] \
-    simple-digest-mapper={algorithm=simple-digest-md5, password-index=2}, \
-}])
-
-
-
-

This results in the following overall configuration:

-
-
-
-
        <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-            ...
-            <security-realms>
-                ...
-                <jdbc-realm name="jdbc-realm">
-                    <principal-query sql="SELECT role, password FROM User WHERE username = ?" data-source="ExampleDS">
-                        <attribute-mapping>
-                            <attribute to="Roles" index="1"/>
-                        </attribute-mapping>
-                        <simple-digest-mapper password-index="2"/>
-                    </principal-query>
-                </jdbc-realm>
-                ...
-            </security-realms>
-            ...
-        </subsystem>
-
-
-
-

In comparison with PicketBox solution, Elytron jdbc-realm use one SQL -query to obtain all user attributes and credentials. Their extraction -from SQL result specifies mappers.

-
-
-
-

20.5.3. N-M relation beetween user and roles

-
-

When using a n:m-relation beetween user and roles (which means: the user has multiple roles), the previous configuration does not work.

-
-
-

The database:

-
-
-
-
CREATE TABLE User (
-id BIGINT NOT NULL,
-username VARCHAR(255),
-password VARCHAR(255),
-PRIMARY KEY (id),
-UNIQUE (username)
-)
-
-CREATE TABLE Role(
-id BIGINT NOT NULL,
-rolename VARCHAR(255),
-PRIMARY KEY (id),
-UNIQUE (rolename)
-)
-
-CREATE TABLE Userrole(
-userid BIGINT not null,
-roleid BIGINT not null,
-PRIMARY KEY (userid, roleid),
-FOREIGN KEY (userid) references User(id,
-FOREIGN KEY (roleid) references Role(id)
-)
-
-
-
-

Here you need two configure two principal queries:

-
-
-
-
<jdbc-realm name="jdbc-realm">
-    <principal-query sql="SELECT PASSWORD FROM USER WHERE USERNAME = ?" data-source="ExampleDS">
-        <clear-password-mapper password-index="1"/>
-    </principal-query>
-    <principal-query sql="SELECT R.ROLENAME from ROLE AS R, USERROLE AS UR, USER AS U WHERE U.USERNAME=? AND UR.ROLEID = R.ID AND UR.USERID = U.ID" data-source="ExampleDS">
-        <attribute-mapping>
-            <attribute to="roles" index="1"/>
-        </attribute-mapping>
-    </principal-query>
-</jdbc-realm>
-
-
-
-

The second query needs an attribute mapping to decode the selected rolename column (index 1):

-
-
-
-
<mappers>
-...
-<simple-role-decoder name="from-roles-attribute" attribute="roles"/>
-...
-</mappers>
-
-
-
-

The role decoder is referenced by the security domain:

-
-
-
-
<security-domain name="MyDomain" default-realm="jdbc-realm" permission-mapper="default-permission-mapper">
-<realm name="MyDbRealm" role-decoder="from-roles-attribute"/>
-</security-domain>
-
-
-
-
-
-

20.6. Kerberos Authentication Migration

-
-

When working with Kerberos configuration it is possible for the -application server to rely on configuration from the environment or the -key configuration can be specified using system properties, for the -purpose of these examples I define system properties - these properties -are applicable to both the legacy configuration and the migrated Elytron -configuration.

-
-
-
-
./system-property=sun.security.krb5.debug:add(value=true)
-./system-property=java.security.krb5.realm:add(value=ELYTRON.ORG)
-./system-property=java.security.krb5.kdc:add(value=kdc.elytron.org)
-
-
-
-

The first line makes debugging easier but the last two lines specify the -Kerberos realm in use and the address of the KDC.

-
-
-
-
  <system-properties>
-    <property name="sun.security.krb5.debug" value="true"/>
-    <property name="java.security.krb5.realm" value="ELYTRON.ORG"/>
-    <property name="java.security.krb5.kdc" value="kdc.elytron.org"/>
-  </system-properties>
-
-
-
-

20.6.1. HTTP Authentication

-
-
Legacy Security Realm
-
-

A legacy security realm can be define so that SPNEGO authentication can -be enabled for the HTTP management interface.

-
-
-
-
./core-service=management/security-realm=Kerberos:add
-./core-service=management/security-realm=Kerberos/server-identity=kerberos:add
-./core-service=management/security-realm=Kerberos/server-identity=kerberos/keytab=HTTP\/test-server.elytron.org@ELYTRON.ORG:add(path=/home/darranl/src/kerberos/test-server.keytab, debug=true)
-./core-service=management/security-realm=Kerberos/authentication=kerberos:add(remove-realm=true)
-
-
-
-

This results in the following configuration: -

-
-
-
-
  <security-realms>
-    ...
-    <security-realm name="Kerberos">
-      <server-identities>
-        <kerberos>
-          <keytab principal="HTTP/test-server.elytron.org@ELYTRON.ORG" path="/home/darranl/src/kerberos/test-server.keytab" debug="true"/>
-        </kerberos>
-      </server-identities>
-      <authentication>
-        <kerberos remove-realm="true"/>
-      </authentication>
-    </security-realm>
-  </security-realms>
-
-
-
-
-
Application SPNEGO
-
-

Alternatively deployed applications would make use of a pair of security -domains.

-
-
-
-
./subsystem=security/security-domain=host:add
-./subsystem=security/security-domain=host/authentication=classic:add
-./subsystem=security/security-domain=host/authentication=classic/login-module=1:add(code=Kerberos, flag=Required, module-options={storeKey=true, useKeyTab=true, principal=HTTP/test-server.elytron.org@ELYTRON.ORG, keyTab=/home/darranl/src/kerberos/test-server.keytab, debug=true}
-
-
-
-
-
./subsystem=security/security-domain=SPNEGO:add
-./subsystem=security/security-domain=SPNEGO/authentication=classic:add
-./subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=1:add(code=SPNEGO, flag=requisite,  module-options={password-stacking=useFirstPass, serverSecurityDomain=host})
-./subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=1:write-attribute(name=module, value=org.jboss.security.negotiation)
-./subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=2:add(code=UsersRoles, flag=required, module-options={password-stacking=useFirstPass, usersProperties=file:///home/darranl/src/kerberos/spnego-users.properties, rolesProperties=file:///home/darranl/src/kerberos/spnego-roles.properties, defaultUsersProperties=file:///home/darranl/src/kerberos/spnego-users.properties, defaultRolesProperties=file:///home/darranl/src/kerberos/spnego-roles.properties})
-
-
-
-

This results in: -

-
-
-
-
  <subsystem xmlns="urn:jboss:domain:security:2.0">
-    <security-domains>
-      ...
-      <security-domain name="host">
-        <authentication>
-          <login-module name="1" code="Kerberos" flag="required">
-            <module-option name="storeKey" value="true"/>
-            <module-option name="useKeyTab" value="true"/>
-            <module-option name="principal" value="HTTP/test-server.elytron.org@ELYTRON.ORG"/>
-            <module-option name="keyTab" value="/home/darranl/src/kerberos/test-server.keytab"/>
-            <module-option name="debug" value="true"/>
-          </login-module>
-        </authentication>
-      </security-domain>
-      <security-domain name="SPNEGO">
-        <authentication>
-          <login-module name="1" code="SPNEGO" flag="requisite" module="org.jboss.security.negotiation">
-            <module-option name="password-stacking" value="useFirstPass"/>
-            <module-option name="serverSecurityDomain" value="host"/>
-          </login-module>
-          <login-module name="2" code="UsersRoles" flag="required">
-            <module-option name="password-stacking" value="useFirstPass"/>
-            <module-option name="usersProperties" value="file:///home/darranl/src/kerberos/spnego-users.properties"/>
-            <module-option name="rolesProperties" value="file:///home/darranl/src/kerberos/spnego-roles.properties"/>
-            <module-option name="defaultUsersProperties" value="file:///home/darranl/src/kerberos/spnego-users.properties"/>
-            <module-option name="defaultRolesProperties" value="file:///home/darranl/src/kerberos/spnego-roles.properties"/>
-          </login-module>
-        </authentication>
-      </security-domain>
-    </security-domains>
-  </subsystem>
-
-
-
-

An application can now be deployed referencing the SPNEGO security -domain and secured with SPNEGO mechanism.

-
-
-
-
Migrated SPNEGO
-
-

The equivalent configuration can be achieved with WildFly Elytron by -first defining a security realm which will be used to load identity -information.

-
-
-
-
./subsystem=elytron/properties-realm=spnego-properties:add(users-properties={path=/home/darranl/src/kerberos/spnego-users.properties, plain-text=true, digest-realm-name=ELYTRON.ORG}, groups-properties={path=/home/darranl/src/kerberos/spnego-roles.properties})
-
-
-
-

Next a Kerberos security factory is defined which allows the server to -load it’s own Kerberos identity.

-
-
-
-
./subsystem=elytron/kerberos-security-factory=test-server:add(path=/home/darranl/src/kerberos/test-server.keytab, principal=HTTP/test-server.elytron.org@ELYTRON.ORG, debug=true)
-
-
-
-

As with the previous examples we define a security realm to pull -together the policy as well as a HTTP authentication factory for the -authentication policy.

-
-
-
-
./subsystem=elytron/security-domain=SPNEGODomain:add(default-realm=spnego-properties, realms=[{realm=spnego-properties, role-decoder=groups-to-roles}], permission-mapper=default-permission-mapper)
-./subsystem=elytron/http-authentication-factory=spnego-http-authentication:add(security-domain=SPNEGODomain, http-server-mechanism-factory=global,mechanism-configurations=[{mechanism-name=SPNEGO, credential-security-factory=test-server}])
-
-
-
-

Overall this results in the following configuration: -

-
-
-
-
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-    ...
-    <security-domains>
-    ...
-      <security-domain name="SPNEGODomain" default-realm="spnego-properties" permission-mapper="default-permission-mapper">
-        <realm name="spnego-properties" role-decoder="groups-to-roles"/>
-      </security-domain>
-    </security-domains>
-    <security-realms>
-      ...
-      <properties-realm name="spnego-properties">
-        <users-properties path="/home/darranl/src/kerberos/spnego-users.properties" digest-realm-name="ELYTRON.ORG" plain-text="true"/>
-        <groups-properties path="/home/darranl/src/kerberos/spnego-roles.properties"/>
-      </properties-realm>
-    </security-realms>
-    <credential-security-factories>
-      <kerberos-security-factory name="test-server" principal="HTTP/test-server.elytron.org@ELYTRON.ORG" path="/home/darranl/src/kerberos/test-server.keytab" debug="true"/>
-    </credential-security-factories>
-    ...
-    <http>
-      ...
-      <http-authentication-factory name="spnego-http-authentication" http-server-mechanism-factory="global" security-domain="SPNEGODomain">
-        <mechanism-configuration>
-          <mechanism mechanism-name="SPNEGO" credential-security-factory="test-server"/>
-        </mechanism-configuration>
-      </http-authentication-factory>
-      ...
-    </http>
-    ...
-  </subsystem>
-
-
-
-

Now, to enable SPNEGO authentication for the HTTP management interface, -update this interface to reference the http-authentication-factory -defined above, as described in the -properties -authentication section.

-
-
-

Alternatively, to secure an application using SPNEGO authentication, an -application security domain can be defined in the Undertow subsystem to -map security domains to the http-authentication-factory defined above, -as described in the -properties -authentication section.

-
-
-
-
-

20.6.2. Remoting / SASL Authentication

-
-
Legacy Security Realm
-
-

It is also possible to define a legacy security realm for Kerberos / -GSSAPI SASL authenticatio for Remoting authentication such as the native -management interface.

-
-
-
-
./core-service=management/security-realm=Kerberos:add
-./core-service=management/security-realm=Kerberos/server-identity=kerberos:add
-./core-service=management/security-realm=Kerberos/server-identity=kerberos/keytab=remote\/test-server.elytron.org@ELYTRON.ORG:add(path=/home/darranl/src/kerberos/remote-test-server.keytab, debug=true)
-./core-service=management/security-realm=Kerberos/authentication=kerberos:add(remove-realm=true)
-
-
-
-
-
  <management>
-    <security-realms>
-      ...
-      <security-realm name="Kerberos">
-        <server-identities>
-          <kerberos>
-            <keytab principal="remote/test-server.elytron.org@ELYTRON.ORG" path="/home/darranl/src/kerberos/remote-test-server.keytab" debug="true"/>
-          </kerberos>
-        </server-identities>
-        <authentication>
-          <kerberos remove-realm="true"/>
-        </authentication>
-      </security-realm>
-    </security-realms>
-    ...
-  </management>
-
-
-
-
-
Migrated GSSAPI
-
-

The steps to define the equivalent Elytron configuration are very -similar to the HTTP example.

-
-
-

First define the security realm to load the identity from: -

-
-
-
-
./path=kerberos:add(relative-to=user.home, path=src/kerberos)
-./subsystem=elytron/properties-realm=kerberos-properties:add(users-properties={path=kerberos-users.properties, relative-to=kerberos, digest-realm-name=ELYTRON.ORG}, groups-properties={path=kerberos-groups.properties, relative-to=kerberos})
-
-
-
-

Then define the Kerberos security factory for the server’s identity.

-
-
-
-
./subsystem=elytron/kerberos-security-factory=test-server:add(relative-to=kerberos, path=remote-test-server.keytab, principal=remote/test-server.elytron.org@ELYTRON.ORG)
-
-
-
-

Finally define the security domain and this time a SASL authentication -factory.

-
-
-
-
./subsystem=elytron/security-domain=KerberosDomain:add(default-realm=kerberos-properties, realms=[{realm=kerberos-properties, role-decoder=groups-to-roles}], permission-mapper=default-permission-mapper)
-./subsystem=elytron/sasl-authentication-factory=gssapi-authentication-factory:add(security-domain=KerberosDomain, sasl-server-factory=elytron, mechanism-configurations=[{mechanism-name=GSSAPI, credential-security-factory=test-server}])
-
-
-
-

This results in the following subsystem configuration: -

-
-
-
-
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-    ...
-    <security-domains>
-      ...
-      <security-domain name="KerberosDomain" default-realm="kerberos-properties" permission-mapper="default-permission-mapper">
-        <realm name="kerberos-properties" role-decoder="groups-to-roles"/>
-      </security-domain>
-    </security-domains>
-    <security-realms>
-     ...
-       <properties-realm name="kerberos-properties">
-         <users-properties path="kerberos-users.properties" relative-to="kerberos" digest-realm-name="ELYTRON.ORG"/>
-         <groups-properties path="kerberos-groups.properties" relative-to="kerberos"/>
-       </properties-realm>
-     </security-realms>
-     <credential-security-factories>
-       <kerberos-security-factory name="test-server" principal="remote/test-server.elytron.org@ELYTRON.ORG" path="remote-test-server.keytab" relative-to="kerberos"/>
-     </credential-security-factories>
-     ...
-     <sasl>
-       ...
-       <sasl-authentication-factory name="gssapi-authentication-factory" sasl-server-factory="elytron" security-domain="KerberosDomain">
-         <mechanism-configuration>
-           <mechanism mechanism-name="GSSAPI" credential-security-factory="test-server"/>
-         </mechanism-configuration>
-       </sasl-authentication-factory>
-       ...
-     </sasl>
-   </subsystem>
-
-
-
-

The management interface or Remoting connectors can now be updated to -reference the SASL authentication factory.

-
-
-

The two Elytron examples defined here could also be combined into one to -use a shared security domain and security realm and just use protocol -specific authentication factories each referencing their own Kerberos -security factory.

-
-
-
-
-
-

20.7. Caching Migration

-
-

Where a PicketBox based security domain is defined it is possible to enable caching for that security domain, this enables subsequent hits to the identity store to be avoided as an in memory cache can be used instead, this example demonstrates how caching can be used with a WildFly Elytron based configuration.

-
-
-

The purpose of this chapter is to highlight the migration of a configuration with caching enabled, this example is based in the previous LDAP example but with caching enabled.

-
-
-

20.7.1. PicketBox Example

-
-

A PicketBox based security domain can be defined with the following commands.

-
-
-
-
./subsystem=security/security-domain=application-security:add(cache-type=default)
-./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=LdapExtended, flag=Required, module-options={ \
-java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, \
-java.naming.provider.url=ldap://localhost:10389, \
-java.naming.security.authentication=simple, \
-bindDN="uid=admin,ou=system", \
-bindCredential=secret, \
-baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
-baseFilter="(uid={0})", \
-rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",\
-roleFilter="(uniqueMember={1})", \
-roleAttributeID="uid" \
-}}])
-
-
-
-

Resulting in the following security domain definition:

-
-
-
-
<subsystem xmlns="urn:jboss:domain:security:2.0">
-  <security-domains>
-    ...
-    <security-domain name="application-security" cache-type="default">
-      <authentication>
-        <login-module code="LdapExtended" flag="required">
-          <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
-          <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/>
-          <module-option name="java.naming.security.authentication" value="simple"/>
-          <module-option name="bindDN" value="uid=admin,ou=system"/>
-          <module-option name="bindCredential" value="secret"/>
-          <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/>
-          <module-option name="baseFilter" value="(uid={0})"/>
-          <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
-          <module-option name="roleFilter" value="(uniqueMember={1})"/>
-          <module-option name="roleAttributeID" value="uid"/>
-        </login-module>
-      </authentication>
-    </security-domain>
-  </security-domains>
-</subsystem>
-
-
-
-
-

20.7.2. Migrated Example

-
-

When using WildFly Elytron where caching is required the individual security realm is wrapped using a cache, a migrated configuration can be defined with the following commands:

-
-
-
-
./subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret})
-./subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, \
-direct-verification=true, \
-identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
-rdn-identifier="uid", \
-attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]})
-./subsystem=elytron/caching-realm=cached-ldap:add(realm=ldap-realm)
-
-
-
-

These can then be used in a security domain and subsequently an authentication factory.

-
-
-
-
./subsystem=elytron/security-domain=application-security:add(realms=[{realm=cached-ldap}], default-realm=cached-ldap, permission-mapper=default-permission-mapper)
-./subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=BASIC}])
-
-
-
-

In this final step it is very important that the caching-realm is referenced rather than the original realm otherwise caching will be bypassed.

-
-
-

This results in the following definitions:

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-  ...
-  <security-domains>
-    ...
-    <security-domain name="application-security" default-realm="cached-ldap" permission-mapper="default-permission-mapper">
-      <realm name="cached-ldap"/>
-    </security-domain>
-  </security-domains>
-  <security-realms>
-    ...
-    <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true">
-      <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
-        <attribute-mapping>
-          <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
-        </attribute-mapping>
-      </identity-mapping>
-    </ldap-realm>
-    <caching-realm name="cached-ldap" realm="ldap-realm"/>
-  </security-realms>
-  ...
-  <http>
-    ...
-    <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
-      <mechanism-configuration>
-        <mechanism mechanism-name="BASIC"/>
-      </mechanism-configuration>
-    </http-authentication-factory>
-    ...
-  </http>
-  ...
-  <dir-contexts>
-    <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system">
-      <credential-reference clear-text="secret"/>
-    </dir-context>
-  </dir-contexts>
-</subsystem>
-
-
-
-
-
-

20.8. Clients

- -
-
-

20.9. Application Client Migration

-
-

20.9.1. Naming Client

-
-

This migration example assumes a client application performs a remote -JNDI lookup using an  InitialContext backed by the -org.wildfly.naming.client.WildFlyInitialContextFactory class.

-
-
-
Original Configuration
-
-

An InitialContext backed by the -org.wildfly.naming.client.WildFlyInitialContextFactory class can be -created by specifying properties that contain the URL of the naming -provider to connect to along with appropriate user credentials:

-
-
-
-
Properties properties = new Properties();
-properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
-properties.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080");
-properties.put(Context.SECURITY_PRINCIPAL, "bob");
-properties.put(Context.SECURITY_CREDENTIALS, "secret");
-InitialContext context = new InitialContext(properties);
-Bar bar = (Bar) context.lookup("foo/bar");
-...
-
-
-
-
-
Migrated Configuration
-
-

An InitialContext backed by the -org.wildfly.naming.client.WildFlyInitialContextFactory class can be -created by specifying a property that contains the URL of the naming -provider to connect to. The user credentials can be specified using a -WildFly client configuration file or programmatically.

-
-
-
Configuration File Approach
-
-

A wildfly-config.xml file that contains the user credentials to use -when establishing a connection to the naming provider can be added to -the client application’s META-INF directory:

-
-
-

wildfly-config.xml

-
-
-
-
<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <authentication-rules>
-            <rule use-configuration="namingConfig">
-                <match-host name="127.0.0.1"/>
-            </rule>
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="namingConfig">
-                <set-user-name name="bob"/>
-                <credentials>
-                    <clear-password password="secret"/>
-                </credentials>
-            </configuration>
-        </authentication-configurations>
-    </authentication-client>
-</configuration>
-
-
-
-

An InitialContext can then be created as follows:

-
-
-
-
Properties properties = new Properties();
-properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
-properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
-InitialContext context = new InitialContext(properties);
-Bar bar = (Bar) context.lookup("foo/bar");
-...
-
-
-
-
-
Programmatic Approach
-
-

The user credentials to use when establishing a connection to the naming -provider can be specified directly in the client application’s code:

-
-
-
-
// create your authentication configuration
-AuthenticationConfiguration namingConfig = AuthenticationConfiguration.empty().useName("bob").usePassword("secret");
- 
-// create your authentication context
-AuthenticationContext context = AuthenticationContext.empty().with(MatchRule.ALL.matchHost("127.0.0.1"), namingConfig);
- 
-// create a callable that creates and uses an InitialContext
-Callable<Void> callable = () -> {
-    Properties properties = new Properties();
-    properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
-    properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
-    InitialContext context = new InitialContext(properties);
-    Bar bar = (Bar) context.lookup("foo/bar");
-    ...
-    return null;
-};
- 
-// use your authentication context to run your callable
-context.runCallable(callable);
-
-
-
-
-
-
-

20.9.2. EJB Client

-
-

This migration example assumes a client application is configured to -invoke an EJB deployed on a remote server using a -jboss-ejb-client.properties file.

-
-
-
Original Configuration
-
-

A jboss-ejb-client.properties file that contains the information -needed to connect to the remote server can be specified in a client -application’s META-INF directory:

-
-
-

jboss-ejb-client.properties

-
-
-
-
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
-remote.connections=default
-remote.connection.default.host=127.0.0.1
-remote.connection.default.port = 8080
-remote.connection.default.username=bob
-remote.connection.default.password=secret
-
-
-
-

An EJB can then be looked up and a method can be invoked on it as -follows:

-
-
-
-
// create an InitialContext
-Properties properties = new Properties();
-properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
-properties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
-InitialContext context = new InitialContext(properties);
- 
-// look up an EJB and invoke one of its methods
-RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
-    "ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
-int sum = statelessRemoteCalculator.add(101, 202);
-
-
-
-
-
Migrated Configuration
-
-

The information needed to connect to the remote server can be specified -using a WildFly client configuration file or programmatically.

-
-
-
Configuration File Approach
-
-

A wildfly-config.xml file that contains the information needed to -connect to the remote server can be added to the client application’s -META-INF directory:

-
-
-

wildfly-config.xml

-
-
-
-
<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <authentication-rules>
-            <rule use-configuration="ejbConfig">
-                <match-host name="127.0.0.1"/>
-            </rule>
-        </authentication-rules>
-        <authentication-configurations>
-            <configuration name="ejbConfig">
-                <set-user-name name="bob"/>
-                <credentials>
-                    <clear-password password="secret"/>
-                </credentials>
-            </configuration>
-        </authentication-configurations>
-    </authentication-client>
-    <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
-        <connections>
-            <connection uri="remote+http://127.0.0.1:8080" />
-        </connections>
-    </jboss-ejb-client>
-</configuration>
-
-
-
-

An EJB can then be looked up and a method can be invoked on it as -follows:

-
-
-
-
// create an InitialContext
-Properties properties = new Properties();
-properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
-InitialContext context = new InitialContext(properties);
- 
-// look up an EJB and invoke one of its methods (same as before)
-RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
-    "ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
-int sum = statelessRemoteCalculator.add(101, 202);
-
-
-
-
-
Programmatic Approach
-
-

The information needed to connect to the remote server can be specified -directly in the client application’s code:

-
-
-
-
// create your authentication configuration
-AuthenticationConfiguration ejbConfig = AuthenticationConfiguration.empty().useName("bob").usePassword("secret");
- 
-// create your authentication context
-AuthenticationContext context = AuthenticationContext.empty().with(MatchRule.ALL.matchHost("127.0.0.1"), ejbConfig);
- 
-// create a callable that invokes an EJB
-Callable<Void> callable = () -> {
- 
-    // create an InitialContext
-    Properties properties = new Properties();
-    properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
-    properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
-    InitialContext context = new InitialContext(properties);
- 
-    // look up an EJB and invoke one of its methods (same as before)
-    RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
-        "ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
-    int sum = statelessRemoteCalculator.add(101, 202);
-    ...
-    return null;
-};
- 
-// use your authentication context to run your callable
-context.runCallable(callable);
-
-
-
- - - - - -
- - -References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. -:leveloffset: -1 -
-
-
-
-
-
-

20.9.3. General Utilities

- -
-
-

20.9.4. Security Vault Migration

-
-

Security Vault is primarily used in legacy configurations, a vault is -used to store sensitive strings outside of the configuration files. -WildFly server may only contain a single security vault.

-
-
-

Credential Store introduced in WildFly 11 is meant to expand Security -Vault in terms of storing different credential types and introduce easy -to implemnent SPI which allows to deploy custom implemenations of -CredentialStore SPI. Credentials are stored safely encrypted in storage -file outside WildFly configuration files. Each WildFly server may -contain multiple credential stores.

-
-
-

To easily migrate vault content into credential store we have added -"vault" command into WildFly Elytron Tool. The tool could be found at -$JBOSS_HOME/bin directory. It has several scripts named "elytron-tool.*" -dependent on your platform of choice.

-
-
-
Single Security Vault Conversion
-
-

To convert single security vault credential store use following -example:

-
-
-
    -
  • -

    to get sample vault use testing resources of Elytron Tool project from -GitHub

    -
  • -
-
-
-

Command to run actual conversion:

-
-
-
-
-

./bin/elytron-tool.sh vault --enc-dir vault_data/ --keystore vault-jceks.keystore --keystore-password MASK-2hKo56F1a3jYGnJwhPmiF5 --iteration 34 --salt 12345678 --alias test --location cs-v1.store --summary

-
-
-
-
-

Output:

-
-
-
-
-

Vault (enc-dir="vault_data/";keystore="vault-jceks.keystore") converted to credential store "cs-v1.store"
-Vault Conversion summary:
---------------------------------------
-Vault Conversion Successful
-CLI command to add new credential store:
-/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="cs-v1.store",implementation-properties={"keyStoreType"⇒"JCEKS"},credential-reference={clear-text="MASK-2hKo56F1a3jYGnJwhPmiF5;12345678;34"})

-
-
-
-
-

Use elytron-tool.sh vault --help to get description of all parameters.

-
-
-
Notes:
-
-
    -
  • -

    Elytron Tool cannot handle very first version of Security Vault data -file.

    -
  • -
  • -

    --keystore-password can come in two forms (1) masked as shown in the -example or (2) clear text. Parameter --salt and --iteration are there to -supply information to decrypt the masked password or to generate masked -password in output. In case --salt and --iteration are omitted default -values are used.

    -
  • -
  • -

    When --summary parameter is specified, one can see nice output with -CLI command to be used in WildFly console to add converted credential -store to the configuration.

    -
  • -
-
-
-
-
-
Bulk Security Vault Conversion
-
-

There is possibility to convert multiple vaults to credential store -using --bulk-convert parameter with description file.
-Example of description file from our tests:

-
-
-
-
-

# Bulk conversion descriptor
-keystore:target/test-classes/vault-v1/vault-jceks.keystore
-keystore-password:MASK-2hKo56F1a3jYGnJwhPmiF5
-enc-dir:target/test-classes/vault-v1/vault_data/
-salt:12345678
-iteration:34
-location:target/v1-cs-1.store
-alias:test

-
-
-

keystore:target/test-classes/vault-v1/vault-jceks.keystore
-keystore-password:secretsecret
-enc-dir:target/test-classes/vault-v1/vault_data/
-location:target/v1-cs-2.store
-alias:test

-
-
-

# different vault vault-v1-more
-keystore:target/test-classes/vault-v1-more/vault-jceks.keystore
-keystore-password:MASK-2hKo56F1a3jYGnJwhPmiF5
-enc-dir:target/test-classes/vault-v1-more/vault_data/
-salt:12345678
-iteration:34
-location:target/v1-cs-more.store
-alias:test

-
-
-
-
-

After each "keystore:" option new conversion starts. All options are -mandatory except "salt:", "iteration:" and "properties:"

-
-
-

Execute following command:

-
-
-
-
-

./bin/elytron-tool.sh vault --bulk-convert bulk-vault-conversion-desc --summary

-
-
-
-
-

Output:

-
-
-
-
-

Vault (enc-dir="vault-v1/vault_data/";keystore="vault-v1/vault-jceks.keystore") converted to credential store "v1-cs-1.store"
-Vault Conversion summary:
---------------------------------------
-Vault Conversion Successful
-CLI command to add new credential store:
-/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="v1-cs-1.store",implementation-properties={"keyStoreType"⇒"JCEKS"},credential-reference={clear-text="MASK-2hKo56F1a3jYGnJwhPmiF5;12345678;34"})
---------------------------------------

-
-
-

Vault (enc-dir="vault-v1/vault_data/";keystore="vault-v1/vault-jceks.keystore") converted to credential store "v1-cs-2.store"
-Vault Conversion summary:
---------------------------------------
-Vault Conversion Successful
-CLI command to add new credential store:
-/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="v1-cs-2.store",implementation-properties={"keyStoreType"⇒"JCEKS"},credential-reference={clear-text="secretsecret"})
---------------------------------------

-
-
-

Vault (enc-dir="vault-v1-more/vault_data/";keystore="vault-v1-more/vault-jceks.keystore") converted to credential store "v1-cs-more.store"
-Vault Conversion summary:
---------------------------------------
-Vault Conversion Successful
-CLI command to add new credential store:
-/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="v1-cs-more.store",implementation-properties={"keyStoreType"⇒"JCEKS"},credential-reference={clear-text="MASK-2hKo56F1a3jYGnJwhPmiF5;12345678;34"})
---------------------------------------

-
-
-
-
-

The result is conversion of all vaults with proper CLI commands.

-
-
-
-
-

20.9.5. Security Properties

-
-

Lets suppose security properties "a" and "c" defined in legacy security:

-
-
-
-
        <subsystem xmlns="urn:jboss:domain:security:2.0">
-            ...
-            <security-properties>
-                <property name="a" value="b" />
-                <property name="c" value="d" />
-            </security-properties>
-        </subsystem>
-
-
-
-

To define security properties in Elytron subsystem you need to set -attribute security-properties of the subsystem:

-
-
-
-
./subsystem=elytron:write-attribute(name=security-properties, value={ \
-    a = "b", \
-    c = "d" \
-})
-
-
-
-

You can also add or change one another property without modification of -others using map operations. Following command will set property "e":

-
-
-
-
./subsystem=elytron:map-put(name=security-properties, key=e, value=f)
-
-
-
-

By the same way you can also remove one of properties - in example newly -created property "e":

-
-
-
-
./subsystem=elytron:map-remove(name=security-properties, key=e)
-
-
-
-

Output XML configuration will be:

-
-
-
-
        <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-            <security-properties>
-                <security-property name="a" value="b"/>
-                <security-property name="c" value="d"/>
-            </security-properties>
-            ...
-        </subsystem>
-
-
-
-
-

20.9.6. SSL Migration

- -
-
-

20.9.7. Simple SSL Migration

-
-
Simple SSL Migration
-
-

This section describe securing HTTP connections to the server using SSL -using Elytron.
-It suppose you have already configured SSL using legacy -security-realm, for example by -Admin Guide#Enable -SSL, and your configuration looks like:

-
-
-
-
<security-realm name="ApplicationRealm">
-  <server-identities>
-    <ssl>
-      <keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore_password" alias="server" key-password="key_password" />
-    </ssl>
-  </server-identities>
-</security-realm>
-
-
-
-

To switch to Elytron you need to:

-
-
-
    -
  1. -

    Create Elytron key-store - specifying where is the keystore file stored and password by which it is encrypted. Default type of keystore generated using keytool is PKCS12:

    -
    -
    -
    /subsystem=elytron/key-store=LocalhostKeyStore:add(path=server.keystore,relative-to=jboss.server.config.dir,credential-reference={clear-text="keystore_password"},type=PKCS12)
    -
    -
    -
  2. -
  3. -

    Create Elytron key-manager - specifying keystore, alias (using -alias-filter) and password of key:

    -
    -
    -
    /subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})
    -
    -
    -
  4. -
  5. -

    Create Elytron server-ssl-context - specifying only reference to -key-manager defined above:

    -
    -
    -
    /subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager)
    -
    -
    -
  6. -
  7. -

    Switch https-listener from legacy security-realm to newly -created Elytron ssl-context:

    -
    -
    -
    /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
    -/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=LocalhostSslContext)
    -
    -
    -
  8. -
  9. -

    And reload the server:

    -
    -
    -
    reload
    -
    -
    -
  10. -
-
-
-

Output XML configuration of Elytron subsystem should look like:

-
-
-
-
        <subsystem xmlns="urn:wildfly:elytron:1.0" ...>
-            ...
-            <tls>
-                <key-stores>
-                    <key-store name="LocalhostKeyStore">
-                        <credential-reference clear-text="keystore_password"/>
-                        <implementation type="PKCS12"/>
-                        <file path="server.keystore" relative-to="jboss.server.config.dir"/>
-                    </key-store>
-                </key-stores>
-                <key-managers>
-                    <key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore">
-                        <credential-reference clear-text="key_password"/>
-                    </key-manager>
-                </key-managers>
-                <server-ssl-contexts>
-                    <server-ssl-context name="LocalhostSslContext" key-manager="LocalhostKeyManager"/>
-                </server-ssl-contexts>
-            </tls>
-        </subsystem>
-
-
-
-

Output https-listener in Undertow subsystem should be:

-
-
-
-
<https-listener name="https" socket-binding="https" ssl-context="LocalhostSslContext" enable-http2="true"/>
-
-
-
-
-
Client-Cert SSL Authentication Migration
-
-

This suppose you have already configured Client-Cert SSL authentication -using truststore in legacy security-realm, for example by -Admin -Guide#Add Client-Cert to SSL, and your configuration looks like:

-
-
-
-
<security-realm name="ApplicationRealm">
-  <server-identities>
-    <ssl>
-      <keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore_password" alias="server" key-password="key_password" />
-    </ssl>
-  </server-identities>
-  <authentication>
-    <truststore path="server.truststore" relative-to="jboss.server.config.dir" keystore-password="truststore_password" />
-    <local default-user="$local"/>
-    <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
-  </authentication>
-</security-realm>
-
-
-
- - - - - -
- - -Following configuration is sufficient to prevent users without valid -certificate and private key to access the server, but it does not -provide user identity to the application. That require to define -CLIENT_CERT HTTP mechanism / EXTERNAL SASL mechanism, which will be -described later.) -
-
-
-

At first use steps above to migrate basic part of the configuration. -Then continue by following:

-
-
-
    -
  1. -

    Create key-store of truststore - like for keystore above:

    -
    -
    -
    /subsystem=elytron/key-store=TrustStore:add(path=server.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text="truststore_password"},type=PKCS12)
    -
    -
    -
  2. -
  3. -

    Create trust-manager - specifying key-store of trustore, created -above:

    -
    -
    -
    /subsystem=elytron/trust-manager=TrustManager:add(key-store=TrustStore)
    -
    -
    -
  4. -
  5. -

    Modify server-ssl-context to use newly created trustmanager:

    -
    -
    -
    /subsystem=elytron/server-ssl-context=LocalhostSslContext:write-attribute(name=trust-manager,value=TrustManager)
    -
    -
    -
  6. -
  7. -

    Enable client authentication for server-ssl-context:

    -
    -
    -
    /subsystem=elytron/server-ssl-context=LocalhostSslContext:write-attribute(name=need-client-auth,value=true)
    -
    -
    -
  8. -
  9. -

    And reload the server:

    -
    -
    -
    reload
    -
    -
    -
  10. -
-
-
-

Output XML configuration of Elytron subsystem should look like:

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron:1.0" ...>
-    ...
-    <tls>
-        <key-stores>
-            <key-store name="LocalhostKeyStore">
-                <credential-reference clear-text="keystore_password"/>
-                <implementation type="PKCS12"/>
-                <file path="server.keystore" relative-to="jboss.server.config.dir"/>
-            </key-store>
-            <key-store name="TrustStore">
-                <credential-reference clear-text="truststore_password"/>
-                <implementation type="PKCS12"/>
-                <file path="server.truststore" relative-to="jboss.server.config.dir"/>
-            </key-store>
-        </key-stores>
-        <key-managers>
-            <key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server">
-                <credential-reference clear-text="key_password"/>
-            </key-manager>
-        </key-managers>
-        <trust-managers>
-            <trust-manager name="TrustManager" key-store="TrustStore"/>
-        </trust-managers>
-        <server-ssl-contexts>
-            <server-ssl-context name="LocalhostSslContext" need-client-auth="true" key-manager="LocalhostKeyManager" trust-manager="TrustManager"/>
-        </server-ssl-contexts>
-    </tls>
-</subsystem>
-
-
-
-
-
-

20.9.8. SSL with Client Cert Migration

-
-

As this documentation is primarily intended for users migrating to WildFly Elytron I am going to jump straight into the configuration required with WildFly Elytron.

-
-
-

This section will cover how to create the various resources required to achieve CLIENT_CERT authentication with fallback to username / password authentication for both HTTP and SASL (i.e. Remoting) - both are being covered at the same time as predominantly they require the same core configuration, it is not until the definition of the authentication factories that the configuration becomes really specific.

-
-
-

This suppose you have configured legacy Client-Cert SSL authentication using truststore in legacy security-realm, for example by Admin Guide#Add Client-Cert to SSL, and your configuration looks like:

-
-
-
-
<security-realm name="ManagementRealm">
-  <server-identities>
-    <ssl>
-      <keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore_password" alias="server" key-password="key_password" />
-    </ssl>
-  </server-identities>
-  <authentication>
-    <truststore path="server.truststore" relative-to="jboss.server.config.dir" keystore-password="truststore_password" />
-    <local default-user="$local"/>
-    <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
-  </authentication>
-</security-realm>
-
-
-
-

This also suppose you have already followed Simple SSL Migration section, so your partialy migrated configuration looks like:

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron:1.0" ...>
-    ...
-    <tls>
-        <key-stores>
-            <key-store name="LocalhostKeyStore">
-                <credential-reference clear-text="keystore_password"/>
-                <implementation type="PKCS12"/>
-                <file path="server.keystore" relative-to="jboss.server.config.dir"/>
-            </key-store>
-            <key-store name="TrustStore">
-                <credential-reference clear-text="truststore_password"/>
-                <implementation type="PKCS12"/>
-                <file path="server.truststore" relative-to="jboss.server.config.dir"/>
-            </key-store>
-        </key-stores>
-        <key-managers>
-            <key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server">
-                <credential-reference clear-text="key_password"/>
-            </key-manager>
-        </key-managers>
-        <trust-managers>
-            <trust-manager name="TrustManager" key-store="TrustStore"/>
-        </trust-managers>
-        <server-ssl-contexts>
-            <server-ssl-context name="LocalhostSslContext" need-client-auth="true" key-manager="LocalhostKeyManager" trust-manager="TrustManager"/>
-        </server-ssl-contexts>
-    </tls>
-</subsystem>
-
-
-
-

However following steps are needed to be user identity provided to your applications or management console.

-
-
-
Realms and Domains
-
-

We use users stored in standard properties files, so we can predefined Elytron security domain ManagementDomain and realm ManagementRealm:

-
-
-
-
    <security-domains>
-        <security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper">
-            <realm name="ManagementRealm" role-decoder="groups-to-roles"/>
-            <realm name="local"/>
-        </security-domain>
-    </security-domains>
-    <security-realms>
-        <properties-realm name="ManagementRealm">
-            <users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/>
-            <groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
-        </properties-realm>
-    </security-realms>
-
-
-
-

The security realm will be used in two situations: -* Authentication in password fallback case, when certificate authentication fails -* Authorization in both - password and certificate auth - cases - the realm will provide roles of individual users

-
-
-

This mean, for any client certificate there have to exists user in the security realm.

-
-
-
-
Principal decoder
-
-

When certificate authentication is used and the security realm accepts usernames to resolve an identity, there have to be defined way to obtain username from a client certificate. -In this case we will use first CN attribute in certificate subject:

-
-
-
-
./subsystem=elytron/x500-attribute-principal-decoder=x500-decoder:add(attribute-name=CN, maximum-segments=1)
-
-
-
-

Resulting in: -

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-  ...
-  <mappers>
-    ...
-    <x500-attribute-principal-decoder name="x500-decoder" attribute-name="CN" maximum-segments="1"/>
-    ...
-  </mappers>
-  ...
-</subsystem>
-
-
-
-
-
HTTP Authentication Factory
-
-

For the HTTP connections we now define a HTTP authentication factory using the previously defined resources and it is configured to support CLIENT_CERT and DIGEST authentication.

-
-
-

Because our security realm is not able to verify client certificates (properties realm verifies passwords only), we need to add configuring mechanism factory first, which will disable certificate verification against the security realm:

-
-
-
-
/subsystem=elytron/configurable-http-server-mechanism-factory=configured-cert:add(http-server-mechanism-factory=global, properties={org.wildfly.security.http.skip-certificate-verification=true})
-
-
-
-

As following, we can create HTTP authentication alone:

-
-
-
-
./subsystem=elytron/http-authentication-factory=client-cert-digest:add(http-server-mechanism-factory=configured-cert, \
-  security-domain=ManagementDomain, \
- mechanism-configurations=[{ \
-  mechanism-name=CLIENT_CERT, \
-  pre-realm-principal-transformer=x500-decoder}, \
- {mechanism-name=DIGEST, mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])
-
-
-
-

Resulting in: -

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-  ...
-  <http>
-    ...
-    <http-authentication-factory name="client-cert-digest" http-server-mechanism-factory="global" security-domain="ManagementDomain">
-      <mechanism-configuration>
-        <mechanism mechanism-name="CLIENT_CERT" pre-realm-principal-transformer="x500-decoder"/>
-        <mechanism mechanism-name="DIGEST">
-          <mechanism-realm realm-name="ManagementRealm"/>
-        </mechanism>
-      </mechanism-configuration>
-    </http-authentication-factory>
-    ...
-    <configurable-http-server-mechanism-factory name="configured-cert" http-server-mechanism-factory="global">
-        <properties>
-            <property name="org.wildfly.security.http.skip-certificate-verification" value="true"/>
-        </properties>
-    </configurable-http-server-mechanism-factory>
-    ...
-  </http>
-  ...
-</subsystem>
-
-
-
-
-
SASL Authentication Factory
-
-

The architecture of the two authentication factories if very similar so a SASL authentication factory can be defined in the same way as the HTTP equivalent. -However, as EXTERNAL SASL mechanism does not do any certificate verification, there is no need for configuring SASL server factory.

-
-
-
-
./subsystem=elytron/sasl-authentication-factory=client-cert-digest:add(sasl-server-factory=elytron, \
-  security-domain=ManagementDomain, \
-  mechanism-configurations=[{mechanism-name=EXTERNAL, \
-  pre-realm-principal-transformer=x500-decoder}, \
-  {mechanism-name=DIGEST-MD5, mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])
-
-
-
-

This results in: -

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-  ...
-  <sasl>
-    ...
-    <sasl-authentication-factory name="client-cert-digest" sasl-server-factory="elytron" security-domain="ManagementDomain">
-      <mechanism-configuration>
-        <mechanism mechanism-name="EXTERNAL" pre-realm-principal-transformer="x500-decoder"/>
-        <mechanism mechanism-name="DIGEST-MD5">
-          <mechanism-realm realm-name="ManagementRealm"/>
-        </mechanism>
-      </mechanism-configuration>
-    </sasl-authentication-factory>
-    ...
-  </sasl>
-  ...
-</subsystem>
-
-
-
-

There is used the same principal transformer as defined for HTTP.

-
-
-
-
SSL Context
-
-

The SSL context was already defined, but we need to modify it to not fail on client certificate authentication failure, but to fallback to password authentication.

-
-
-
-
./subsystem=elytron/server-ssl-context=LocalhostSslContext:write-attribute(name=need-client-auth, value=false)
-./subsystem=elytron/server-ssl-context=LocalhostSslContext:write-attribute(name=want-client-auth, value=true)
-
-
-
-

Resulting in: -

-
-
-
-
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
-  ...
-  <tls>
-    ...
-    <server-ssl-contexts>
-      <server-ssl-context name="LocalhostSslContext" want-client-auth="true" need-client-auth="false" key-manager="LocalhostKeyManager" trust-manager="TrustManager"/>
-    </server-ssl-contexts>
-  </tls>
-</subsystem>
-
-
-
-

As we will be supporting fallback to username/password authentication need-client-auth is set to false. This allows connections to be established but an alternative form of authentication will be required.

-
-
-
-
Using for Management
-
-

At this point the management interfaces can be updated to use the newly defined resources, we need to add references to the two new authentication factories and the SSL context, we can also remove the existing reference to the legacy security realm. As this is modifying existing interfaces a server reload will also be required.

-
-
-
-
./core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=LocalhostSslContext)
-./core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
-./core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=client-cert-digest)
-./core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=client-cert-digest)
-./core-service=management/management-interface=http-interface:undefine-attribute(name=security-realm)
-:reload
-
-
-
-

The management interface configuration then becomes: -

-
-
-
-
<management>
-  ...
-  <management-interfaces>
-    <http-interface http-authentication-factory="client-cert-digest" ssl-context="LocalhostSslContext">
-      <http-upgrade enabled="true" sasl-authentication-factory="client-cert-digest"/>
-      <socket-binding http="management-http" https="management-https"/>
-    </http-interface>
-  </management-interfaces>
-  ...
-</management>
-
-
-
-
Admin Clients
-
-

At this stage assuming the same files have been used as in this example it should be possible to connect to the management interface of the server either using a web browser or the JBoss CLI with username and password from your original mgmt-users.properties file.

-
-
-

For certificate based authentication certificates signed by your CA, whose subject DN resolves to username existing in properties realm will be accepted.

-
-
-CLI Client Configuration -
-

This suppose you have used following configuration in bin/jboss-cli.xml:

-
-
-
-
<ssl>
-  <alias>adminalias</alias>
-  <key-store>admin.keystore</key-store>
-  <key-store-password>keystore_password</key-store-password>
-  <trust-store>ca.truststore</trust-store>
-  <trust-store-password>truststore_password</trust-store-password>
-</ssl>
-
-
-
-

You can stay using this configuration, but since the integration of WildFly Elytron it is possible with the CLI to use a configuration file wildfly-config.xml to define the security settings including the settings for the client side SSL context.

-
-
-

In such case, following wildfly-config.xml can be created in the location the JBoss CLI is being started from: -

-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-    <authentication-client xmlns="urn:elytron:1.0">
-        <key-stores>
-            <key-store name="admin" type="PKCS12" >
-                <file name="admin.keystore"/>
-                <key-store-clear-password password="keystore_password" />
-            </key-store>
-            <key-store name="ca" type="PKCS12">
-                <file name="ca.truststore"/>
-                <key-store-clear-password password="truststore_password" />
-            </key-store>
-        </key-stores>
-        <ssl-context-rules>
-            <rule use-ssl-context="default" />
-        </ssl-context-rules>
-        <ssl-contexts>
-            <ssl-context name="default">
-                <key-store-ssl-certificate key-store-name="admin" alias="adminalias">
-                    <key-store-clear-password password="key_password" />
-                </key-store-ssl-certificate>
-                <trust-store key-store-name="ca" />
-            </ssl-context>
-        </ssl-contexts>
-    </authentication-client>
-</configuration>
-
-
-
-

The CLI can now be started using the following command: -

-
-
-
-
./jboss-cli.sh -c -Dwildfly.config.url=wildfly-config.xml
-
-
-
-

The :whoami command can be used within the CLI to double check the current identity.

-
-
-
-
[standalone@localhost:9993 /] :whoami(verbose=true)
-{
-    "outcome" => "success",
-    "result" => {
-        "identity" => {"username" => "admin"},
-        "mapped-roles" => ["SuperUser"]
-    }
-}
-
-
-
-
-
-
-
-

20.9.9. Documentation Still Needed

-
-
    -
  • -

    How to migrate application which uses different identity store for -authentication and authorization (migration to Elytron aggregate-realm).

    -
  • -
  • -

    How migrate to using cache (migration to caching-realm)

    -
  • -
  • -

    Limitations for migration from PicketBox/legacy security to Elytron, -for example, Infinispan cache cannot be used, any others?

    -
  • -
-
-
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/WildFly_Elytron_Security.html

+ \ No newline at end of file diff --git a/29/WildFly_and_WildFly_Preview.html b/29/WildFly_and_WildFly_Preview.html index fea1c8181..ac35fc1ae 100644 --- a/29/WildFly_and_WildFly_Preview.html +++ b/29/WildFly_and_WildFly_Preview.html @@ -1,641 +1,11 @@ - - - - - - -WildFly and WildFly Preview - - - - - - -
-
-
-
-

© 2021 The original authors.

-
- -
-
-

Different flavors of WildFly

-
-
-
-

Beginning with the WildFly 22 release, the WildFly project began producing two variants of -its landmark application server — the standard "WildFly" variant and the new "WildFly Preview".

-
-
-

The standard "WildFly" variant is the classic server that users have been familiar with for many -years now. It’s a very mature server, with a lot of care taken to ensure new features are fully -realized and to limit the number of incompatible changes between releases.

-
-
-

WildFly Preview is a tech preview variant of the server. The goal of WildFly Preview is to give -the WildFly community a look at changes that are likely to appear in future releases of the standard -WildFly server. The aim is to get feedback on in-progress work, so it is more likely that features -will not be fully realized, and a greater number of incompatible changes may appear from release -to release. The amount of testing WildFly Preview undergoes will generally not be as high as the -standard WildFly variant.

-
-
-

The expectation is on any given release date, both standard WildFly and WildFly Preview will be released.

-
-
- - - - - -
- - -
-

A WildFly Preview release will have the same version number and suffix (Beta, Final, etc) as the -main WildFly release, but regardless of the suffix, a WildFly Preview release should be treated -as a Technical Preview release.

-
-
-
-
-
-
-

1. Getting WildFly Preview

-
-
-

The zip or tar.gz file for WildFly Preview is available at https://wildfly.org/downloads -right next to the main WildFly release files for the same version.

-
-
-

For bootable jar users and Galleon CLI users, we provide a Galleon feature pack for WildFly Preview. The -Galleon feature pack location for the feature pack is wildfly-preview@maven(org.jboss.universe:community-universe). -This feature pack is the WildFly Preview analogue to main WildFly’s wildfly@maven(org.jboss.universe:community-universe).

-
-
-
-
-

2. WildFly Preview and Jakarta EE

-
-
-

Prior to WildFly 27, the primary difference between standard WildFly and WildFly Preview was that standard WildFly -supported Jakarta EE 8, while WildFly Preview supported Jakarta EE 9. However, beginning with the 27 release both -standard WildFly and WildFly Preview support Jakarta EE 10, so this is no longer a difference between the two variants.

-
-
-

Note that formally certifying WildFly Preview as compatible implementation of Jakarta EE is not a priority -for the WildFly project and may not happen at the time of a release, or ever. Users interested in formal EE -compliance of WildFly Preview should check the WildFly Certifications repository.

-
-
-

2.1. WildFly Preview Support for EE 8 Deployments

-
-

The APIs that WildFly Preview exposes to deployments are the EE 10 APIs, so all the classes and interfaces are in the -jakarta.* packages. But you may be able to run an existing EE 8 application on WildFly Preview.

-
-
-

What we’ve done is we’ve added to the server’s handling of managed deployments a bytecode and text file transformation -process to convert EE 8 content into EE 9. It bytecode transforms deployment jars to alter -references to EE 8 packages in the class file constant tables to change from javax.* to jakarta.*. The transformation -goes beyond simple package renames; a number of other known differences between EE 8 and EE 9 are handled. We owe a -great deal of thanks to the community behind the Eclipse Transformer -project for their work on the underlying transformation tool.

-
-
-

As noted above, this handling is only applied to managed deployments. A managed deployment is one where a management -client (the CLI, HAL console or the deployment scanner) presents deployment content to the server and the server makes -a copy of it in its internal deployment content repository. The content that gets installed into the runtime is that internal copy. -Unmanaged deployments that use EE 8 APIs will not work. We transform managed deployments when we copy the deployment -content into the internal content repo. For unmanaged deployments we use the original content file(s) the user provides, -and WildFly Preview won’t modify those files as we don’t regard them as being 'owned' by the server.

-
-
-

Note that the deployment transformation feature will not update the deployment to adapt to any API differences between -Jakarta EE 9 and EE 10. It only covers the javax to jakarta name changes that came with EE 9.

-
-
-

In the long run it’s better for users if they either convert their application source to EE 10 APIs, or use build-time -tooling that we expect the Jakarta ecosystem to provide over time to do transformation at build time. But some -applications just can’t be changed, so the server-side solution WildFly Preview provides can handle those cases.

-
-
-

This deployment transformation feature will be removed from WildFly Preview in a future release. However it is likely -that the WildFly developers will offer a separate Galleon feature pack that can be used to add this behavior into both -standard WildFly and WildFly Preview.

-
-
-
-
-
-

3. Other Differences in WildFly Preview

-
-
-

WildFly Preview is intended to help get community exposure for other changes we plan to -make in the server. Here are the key differencs between standard WildFly and WildFly Preview:

-
-
-
    -
  • -

    WildFly Preview is not a Jakarta EE 10 compatible implementation. It also is not a MicroProfile platform compatible -implementation. Most EE 10 and MicroProfile applications are expected to run well on WildFly Preview, but it is not -certified compatible.

    -
  • -
  • -

    The standard configuration files do not configure an embedded messaging broker. Instead they configure the -messaging-activemq subsystem to provide connections to a remote ActiveMQ Artemis broker. (It’s a task for the user to -run such a broker or to update the config to integrate with a different broker.) We want WildFly out-of-the-box to be -more of a cloud native appserver and having an embedded messaging broker in the default configuration is not cloud native. -A WildFly container in the cloud running an embedded broker is not scalable, as multiple broker instances need separate -configuration to act as a primary or backup. An embedded messaging broker also has more advanced persistent storage -requirements than a server primarily dedicated to handling HTTP requests would have. Note however that running an -embedded broker is still supported. We’ve added to the $WILDFLY_HOME/docs/examples/configs folder an example -standalone-activemq-embedded.xml configuration showing its use.

    -
  • -
  • -

    WildFly Preview includes a tech preview version of a new Micrometer subsystem.

    -
  • -
  • -

    The Hibernate ORM integration used by the JPA subsystem’s Hibernate Search feature supports using outbox polling as coordination strategy for automatic indexing.

    -
  • -
  • -

    The jaxrs Galleon layer depends on (and thus brings in) the microprofile-rest-client layer. This dependency is optional, so it can be excluded when provisioning a custom WildFly Preview installation.

    -
  • -
  • -

    RESTEasy Spring support only comes with WildFly Preview. Typically standard WildFly provides RESTEasy Spring support, but at the time of the WildFly 27 release the Spring libraries it integrates with had not yet -produced final releases. So to avoid possible incompatible changes in a future standard WildFly release, support -for RESTEasy Spring was moved to WildFly Preview only.

    -
  • -
  • -

    The extensions providing the legacy subsystems 'cmp', 'config-admin', 'jacorb', 'jaxr', 'jsr-77', 'messaging' (HornetQ based), -'security' (not 'elytron'), and 'web' (not 'undertow') are removed. These were only used for domain mode to allow a Domain Controller to control -hosts running much earlier WildFly versions where servers using these subsystems were supported.

    -
  • -
  • -

    Alternate JPA and JSF providers that you can install with standard WildFly are not supported.

    -
  • -
-
-
-
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/WildFly_and_WildFly_Preview.html

+ \ No newline at end of file diff --git a/29/common_attributes.html b/29/common_attributes.html new file mode 100644 index 000000000..03612f711 --- /dev/null +++ b/29/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/29/index.html b/29/index.html index 4ee30c1e3..f408e03cb 100644 --- a/29/index.html +++ b/29/index.html @@ -1,696 +1,11 @@ - - - - - -WildFly Documentation - - - - - - -
-
-
-
-

WildFly

-
-
-

Welcome to the WildFly documentation. The documentation for WildFly is -split into multiple categories:

-
-
-
    -
  • -

    Installation Guides for those wanting to understand the flexibility -that WildFly offers when it comes to server installation and application deployment.

    -
  • -
  • -

    Administrator Guides for those wanting to understand how to install -and configure the server.

    -
  • -
  • -

    Developer Guides for those wanting to understand how to develop -applications for the server.

    -
  • -
  • -

    Migration Guide for information related to migrating away from removed features.

    -
  • -
  • -

    Model Reference for those wanting information about all -of configuration options available via the WildFly management model.

    -
  • -
  • -

    Security Guide for those wanting to understand how to secure the WildFly server and applications.

    -
  • -
  • -

    Client Guide for those wanting to understand configuration of WildFly clients.

    -
  • -
  • -

    Quickstarts for those wanting to jump into code and start using WildFly.

    -
  • -
-
-
-
-
-

Installation Guides

-
-
-
    -
  • -

    The WildFly and WildFly Preview document introduces the different -appserver variants produced by the WildFly project: the standard WildFly variant and the early-look tech preview -WildFly Preview variant.

    -
  • -
  • -

    The Installation Guide helps you identify -the kind of WildFly installation that best fits your application’s deployment needs: -a WildFly zip installation, a WildFly server provisioned with Galleon or a WildFly bootable JAR.

    -
  • -
  • -

    The Bootable JAR Guide shows you how to package your application and the WildFly server -into a bootable JAR.

    -
  • -
  • -

    The Galleon Provisioning Guide shows you how to -provision a customized WildFly server using Galleon.

    -
  • -
  • -

    The Getting Started with WildFly on OpenShift Guide shows you how to use WildFly on OpenShift.

    -
  • -
-
-
-
-
-

Administrator Guides

-
-
-
    -
  • -

    The Getting Started Guide shows you -how to install and start the server, how to configure logging, how to -deploy an application, how to deploy a datasource, and how to get -started using the command line interface and web management interface.

    -
  • -
  • -

    The Admin Guide provides detailed information -on using the CLI and web management interface, shows you how to administer a WildFly managed -domain, and shows you how to configure key subsystems.

    -
  • -
  • -

    The High Availability Guide shows -you how to create a cluster, how to configure the web container and Jakarta Enterprise Beans -container for clustering and how to configure load balancing -and failover.

    -
  • -
-
-
-
-
-

Developer Guides

-
-
-
    -
  • -

    The Getting -Started Developing Applications Guide shows you how to build Jakarta EE -applications and deploy them to WildFly. The guide starts by showing you -the simplest helloworld application using just Servlet and Jakarta Contexts and Dependency Injection, and -then adds in Jakarta Faces, persistence and transactions, Jakarta Enterprise Beans, Bean Validation, -RESTful web services and more. Finally, you’ll get the opportunity to create -your own skeleton project. Each tutorial is accompanied by a quickstart, -which contains the source code, deployment descriptors and a Maven based -build.

    -
  • -
  • -

    The Developer Guide ( in progress) takes -you through every deployment descriptor and every annotation offered by -WildFly.

    -
  • -
  • -

    The Extending WildFly guide walks you -through creating a new WildFly subsystem extension, in order to add more -functionality to WildFly, and shows how to test it before plugging it -into WildFly.

    -
  • -
  • -

    The WildFly Testsuite guide walks you through testing WildFly.

    -
  • -
  • -

    The Hacking on WildFly guide walks you through contributing to WildFly.

    -
  • -
-
-
-
-
-

Migration Guide

-
-
-
    -
  • -

    The Migration Guide describes alternative options for -features which have been removed from WildFly.

    -
  • -
-
-
-
-
-

Model Reference

-
-
-
    -
  • -

    The WildFly model reference provides information about all standalone server and managed domain -configuration options, using information generated directly from the WildFly management model.

    -
  • -
-
-
-
-
-

Security Guide

-
-
- -
-
-
-
-

Client Guide

-
-
- -
-
-
-
-

Quickstarts

-
-
-
    -
  • -

    The WildFly Quickstarts describe how to use the WildFly examples, which introduce a particular technology or feature of the application server.

    -
  • -
-
-
-
-
-

More Resources

- -
-
- - + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/index.html

+ \ No newline at end of file diff --git a/29/wildscribe/core-service/capability-registry/index.html b/29/wildscribe/core-service/capability-registry/index.html index d120e90fb..866708a27 100644 --- a/29/wildscribe/core-service/capability-registry/index.html +++ b/29/wildscribe/core-service/capability-registry/index.html @@ -1,37 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Capability registry


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/capability-registry/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/file-handler/index.html b/29/wildscribe/core-service/management/access/audit/file-handler/index.html index bc3d9407b..2d16cbd19 100644 --- a/29/wildscribe/core-service/management/access/audit/file-handler/index.html +++ b/29/wildscribe/core-service/management/access/audit/file-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

A file handler for use with the management audit logging service.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/in-memory-handler/index.html b/29/wildscribe/core-service/management/access/audit/in-memory-handler/index.html index 87df1b8ce..557b7e622 100644 --- a/29/wildscribe/core-service/management/access/audit/in-memory-handler/index.html +++ b/29/wildscribe/core-service/management/access/audit/in-memory-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A in-memory handler for use with the management audit logging service.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/in-memory-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/index.html b/29/wildscribe/core-service/management/access/audit/index.html index 810fb1be8..583f961b4 100644 --- a/29/wildscribe/core-service/management/access/audit/index.html +++ b/29/wildscribe/core-service/management/access/audit/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

The management audit logging top-level resource.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/json-formatter/index.html b/29/wildscribe/core-service/management/access/audit/json-formatter/index.html index 81a1c6bce..d105d86b9 100644 --- a/29/wildscribe/core-service/management/access/audit/json-formatter/index.html +++ b/29/wildscribe/core-service/management/access/audit/json-formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

A json formatter for audit log messages.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/json-formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/logger/audit-log/handler/index.html b/29/wildscribe/core-service/management/access/audit/logger/audit-log/handler/index.html index 2d0d1b205..9746be111 100644 --- a/29/wildscribe/core-service/management/access/audit/logger/audit-log/handler/index.html +++ b/29/wildscribe/core-service/management/access/audit/logger/audit-log/handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

A reference to a file or syslog audit log handler. The name of the handler is denoted by the value of the address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/logger/audit-log/handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/logger/audit-log/index.html b/29/wildscribe/core-service/management/access/audit/logger/audit-log/index.html index 7da3f4044..f3fb83866 100644 --- a/29/wildscribe/core-service/management/access/audit/logger/audit-log/index.html +++ b/29/wildscribe/core-service/management/access/audit/logger/audit-log/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

The management audit logging top-level resource.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/logger/audit-log/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/periodic-rotating-file-handler/index.html b/29/wildscribe/core-service/management/access/audit/periodic-rotating-file-handler/index.html index 6d18e08ae..a7cbc9492 100644 --- a/29/wildscribe/core-service/management/access/audit/periodic-rotating-file-handler/index.html +++ b/29/wildscribe/core-service/management/access/audit/periodic-rotating-file-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A management audit log handler which writes to a file, rotating the log after a time period derived from the given suffix string, which should be in a format understood by java.text.SimpleDateFormat.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/periodic-rotating-file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/size-rotating-file-handler/index.html b/29/wildscribe/core-service/management/access/audit/size-rotating-file-handler/index.html index fe96dc4a9..a1a374205 100644 --- a/29/wildscribe/core-service/management/access/audit/size-rotating-file-handler/index.html +++ b/29/wildscribe/core-service/management/access/audit/size-rotating-file-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A management audit log handler which writes to a file, rotating the log after the size of the file grows beyond a certain point and keeping a fixed number of backups.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/size-rotating-file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/syslog-handler/index.html b/29/wildscribe/core-service/management/access/audit/syslog-handler/index.html index b76d8ade0..78e5b5eb2 100644 --- a/29/wildscribe/core-service/management/access/audit/syslog-handler/index.html +++ b/29/wildscribe/core-service/management/access/audit/syslog-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

A syslog handler for use with the management audit logging service.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/syslog-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tcp/index.html b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tcp/index.html index 9ed6518fb..de7b74b3e 100644 --- a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tcp/index.html +++ b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tcp/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

Configuration to append to syslog over tcp/ip.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tcp/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/client-certificate-store/index.html b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/client-certificate-store/index.html index fac349b50..82baaa415 100644 --- a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/client-certificate-store/index.html +++ b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/client-certificate-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration for the keystore containing the client certificate if the syslog server requires authentication.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/client-certificate-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/truststore/index.html b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/truststore/index.html index 488478e0b..4f0fcb755 100644 --- a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/truststore/index.html +++ b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/truststore/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration for the truststore for the server certificate, if not signed by an authority.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/truststore/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/index.html b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/index.html index 071017250..3c52e9b28 100644 --- a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/index.html +++ b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

Configuration to append to syslog over tls over tcp/ip.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/udp/index.html b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/udp/index.html index 53b48cc68..c73a7c4ca 100644 --- a/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/udp/index.html +++ b/29/wildscribe/core-service/management/access/audit/syslog-handler/protocol/udp/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

Configuration to append to syslog over udp/ip.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/udp/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/index.html b/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/index.html index 6f5f43b55..ee95a4b26 100644 --- a/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/index.html +++ b/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of the application classification constraints.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/applies-to/index.html b/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/applies-to/index.html index abfe7e883..a6145199c 100644 --- a/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/applies-to/index.html +++ b/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/applies-to/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the resources, attributes and operations to which an access control constraint applies.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/applies-to/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/index.html b/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/index.html index 5c09a956b..fa29f8f65 100644 --- a/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/index.html +++ b/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of an application classification constraint.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/index.html b/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/index.html index 06ead99eb..574baa71a 100644 --- a/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/index.html +++ b/29/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The application classification constraints by type. Type is either 'core' or the name of a subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/index.html b/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/index.html index f9ebda911..41472486b 100644 --- a/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/index.html +++ b/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The sensitivity classification constraints.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/applies-to/index.html b/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/applies-to/index.html index 7e6629345..227914f08 100644 --- a/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/applies-to/index.html +++ b/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/applies-to/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the resources, attributes and operations to which an access control constraint applies.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/applies-to/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/index.html b/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/index.html index 8b12ff632..f4c93915f 100644 --- a/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/index.html +++ b/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of a sensitivity constraint.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/index.html b/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/index.html index 6d14d70ae..f39d75c5a 100644 --- a/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/index.html +++ b/29/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The sensitivity classifications by type. Type is either 'core' or the name of a subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/constraint/vault-expression/index.html b/29/wildscribe/core-service/management/access/authorization/constraint/vault-expression/index.html index c2fbd69fd..79bd0cce3 100644 --- a/29/wildscribe/core-service/management/access/authorization/constraint/vault-expression/index.html +++ b/29/wildscribe/core-service/management/access/authorization/constraint/vault-expression/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of whether vault expressions should be considered sensitive.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/constraint/vault-expression/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/index.html b/29/wildscribe/core-service/management/access/authorization/index.html index ac790e5aa..481c12e94 100644 --- a/29/wildscribe/core-service/management/access/authorization/index.html +++ b/29/wildscribe/core-service/management/access/authorization/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The access control definitions defining the access management restrictions.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/role-mapping/exclude/index.html b/29/wildscribe/core-service/management/access/authorization/role-mapping/exclude/index.html index a35c84a6d..73e14b02c 100644 --- a/29/wildscribe/core-service/management/access/authorization/role-mapping/exclude/index.html +++ b/29/wildscribe/core-service/management/access/authorization/role-mapping/exclude/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual principal used within a role mapping.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/role-mapping/exclude/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/role-mapping/include/index.html b/29/wildscribe/core-service/management/access/authorization/role-mapping/include/index.html index 9b47ca3ed..751671c3a 100644 --- a/29/wildscribe/core-service/management/access/authorization/role-mapping/include/index.html +++ b/29/wildscribe/core-service/management/access/authorization/role-mapping/include/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual principal used within a role mapping.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/role-mapping/include/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/authorization/role-mapping/index.html b/29/wildscribe/core-service/management/access/authorization/role-mapping/index.html index 62dd5e554..efe785283 100644 --- a/29/wildscribe/core-service/management/access/authorization/role-mapping/index.html +++ b/29/wildscribe/core-service/management/access/authorization/role-mapping/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A mapping of users and groups to a specific role.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/authorization/role-mapping/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/access/identity/index.html b/29/wildscribe/core-service/management/access/identity/index.html index 983a5d8db..5ae4d507e 100644 --- a/29/wildscribe/core-service/management/access/identity/index.html +++ b/29/wildscribe/core-service/management/access/identity/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Identity definition for management actions.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/access/identity/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/index.html b/29/wildscribe/core-service/management/index.html index b62468f50..d46f4c1b7 100644 --- a/29/wildscribe/core-service/management/index.html +++ b/29/wildscribe/core-service/management/index.html @@ -1,88 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management services used to control a server or a host's host controller.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/ldap-connection/index.html b/29/wildscribe/core-service/management/ldap-connection/index.html new file mode 100644 index 000000000..4eb49064c --- /dev/null +++ b/29/wildscribe/core-service/management/ldap-connection/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/ldap-connection/property/index.html b/29/wildscribe/core-service/management/ldap-connection/property/index.html new file mode 100644 index 000000000..feec56c55 --- /dev/null +++ b/29/wildscribe/core-service/management/ldap-connection/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/management-interface/http-interface/index.html b/29/wildscribe/core-service/management/management-interface/http-interface/index.html index ad9221e2b..73899b52c 100644 --- a/29/wildscribe/core-service/management/management-interface/http-interface/index.html +++ b/29/wildscribe/core-service/management/management-interface/http-interface/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The http-interface configuration is deprecated and may be removed or moved in future versions.

Configuration of the server's HTTP management interface


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/management-interface/http-interface/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/management-interface/native-interface/index.html b/29/wildscribe/core-service/management/management-interface/native-interface/index.html index c3dbbfc63..15ba90f55 100644 --- a/29/wildscribe/core-service/management/management-interface/native-interface/index.html +++ b/29/wildscribe/core-service/management/management-interface/native-interface/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The native-interface configuration is deprecated and may be removed or moved in future versions.

Configuration of the server's native management interface


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/management-interface/native-interface/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/management-interface/native-remoting-interface/index.html b/29/wildscribe/core-service/management/management-interface/native-remoting-interface/index.html index 4401243fe..22904f119 100644 --- a/29/wildscribe/core-service/management/management-interface/native-remoting-interface/index.html +++ b/29/wildscribe/core-service/management/management-interface/native-remoting-interface/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The native-remoting-interface configuration is deprecated and may be removed or moved in future versions.

Configuration of the server's native management interface using a connector from the remoting subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/management-interface/native-remoting-interface/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/jaas/index.html b/29/wildscribe/core-service/management/security-realm/authentication/jaas/index.html new file mode 100644 index 000000000..d4e8f6401 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/jaas/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/jaas/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html b/29/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html new file mode 100644 index 000000000..1d313a5ec --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html b/29/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html new file mode 100644 index 000000000..73a97a268 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html b/29/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html new file mode 100644 index 000000000..e0999d319 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/ldap/index.html b/29/wildscribe/core-service/management/security-realm/authentication/ldap/index.html new file mode 100644 index 000000000..6f7d6b49a --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/local/index.html b/29/wildscribe/core-service/management/security-realm/authentication/local/index.html new file mode 100644 index 000000000..1dded6e4b --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/local/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/local/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html b/29/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html new file mode 100644 index 000000000..636315784 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html b/29/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html new file mode 100644 index 000000000..ccf854e96 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/properties/index.html b/29/wildscribe/core-service/management/security-realm/authentication/properties/index.html new file mode 100644 index 000000000..bb5e4911c --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/truststore/index.html b/29/wildscribe/core-service/management/security-realm/authentication/truststore/index.html new file mode 100644 index 000000000..8645f26ec --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/truststore/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/truststore/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/users/index.html b/29/wildscribe/core-service/management/security-realm/authentication/users/index.html new file mode 100644 index 000000000..0e3e8fd85 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/users/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authentication/users/user/index.html b/29/wildscribe/core-service/management/security-realm/authentication/users/user/index.html new file mode 100644 index 000000000..272195ec9 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authentication/users/user/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/user/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html new file mode 100644 index 000000000..7fc793d5b --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html new file mode 100644 index 000000000..f93222673 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html new file mode 100644 index 000000000..136d0376d --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html new file mode 100644 index 000000000..e8cf43aad --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html new file mode 100644 index 000000000..15b40896e --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html new file mode 100644 index 000000000..16d9d657a --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/index.html new file mode 100644 index 000000000..b27613910 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..2b378e2d4 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..0214c61e4 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html new file mode 100644 index 000000000..107ed6791 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..be16bef4c --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..d07d5690f --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html new file mode 100644 index 000000000..7c795f655 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html new file mode 100644 index 000000000..eae5454f6 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html new file mode 100644 index 000000000..6dd52324c --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html new file mode 100644 index 000000000..f1340bade --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html b/29/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html new file mode 100644 index 000000000..05e927850 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html b/29/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html new file mode 100644 index 000000000..99b013b15 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/authorization/properties/index.html b/29/wildscribe/core-service/management/security-realm/authorization/properties/index.html new file mode 100644 index 000000000..fb0c38bfd --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/authorization/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/index.html b/29/wildscribe/core-service/management/security-realm/index.html new file mode 100644 index 000000000..022b8aeae --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/plug-in/index.html b/29/wildscribe/core-service/management/security-realm/plug-in/index.html new file mode 100644 index 000000000..b224b9cfe --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/plug-in/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html b/29/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html new file mode 100644 index 000000000..f336b07c9 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html b/29/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html new file mode 100644 index 000000000..9b2474387 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/server-identity/secret/index.html b/29/wildscribe/core-service/management/security-realm/server-identity/secret/index.html new file mode 100644 index 000000000..01995b663 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/server-identity/secret/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/secret/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html b/29/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html new file mode 100644 index 000000000..2023147d9 --- /dev/null +++ b/29/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/service/configuration-changes/index.html b/29/wildscribe/core-service/management/service/configuration-changes/index.html index a0a2143b5..fa4610572 100644 --- a/29/wildscribe/core-service/management/service/configuration-changes/index.html +++ b/29/wildscribe/core-service/management/service/configuration-changes/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Service to store and list configuration changes.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/service/configuration-changes/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/service/management-operations/active-operation/index.html b/29/wildscribe/core-service/management/service/management-operations/active-operation/index.html index a9ee30204..ffad8b438 100644 --- a/29/wildscribe/core-service/management/service/management-operations/active-operation/index.html +++ b/29/wildscribe/core-service/management/service/management-operations/active-operation/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A currently executing operation.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/service/management-operations/active-operation/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/management/service/management-operations/index.html b/29/wildscribe/core-service/management/service/management-operations/index.html index bcf4cb4b4..1cfac2473 100644 --- a/29/wildscribe/core-service/management/service/management-operations/index.html +++ b/29/wildscribe/core-service/management/service/management-operations/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Execution of management operations.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/management/service/management-operations/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/module-loading/index.html b/29/wildscribe/core-service/module-loading/index.html index 5d9986bbd..61857701c 100644 --- a/29/wildscribe/core-service/module-loading/index.html +++ b/29/wildscribe/core-service/module-loading/index.html @@ -1,132 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The modular classloading system.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/module-loading/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/patching/addon/index.html b/29/wildscribe/core-service/patching/addon/index.html new file mode 100644 index 000000000..ea6637bce --- /dev/null +++ b/29/wildscribe/core-service/patching/addon/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/addon/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/patching/index.html b/29/wildscribe/core-service/patching/index.html new file mode 100644 index 000000000..60a949532 --- /dev/null +++ b/29/wildscribe/core-service/patching/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/patching/layer/index.html b/29/wildscribe/core-service/patching/layer/index.html new file mode 100644 index 000000000..70d136817 --- /dev/null +++ b/29/wildscribe/core-service/patching/layer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/layer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/patching/patch-stream/addon/index.html b/29/wildscribe/core-service/patching/patch-stream/addon/index.html new file mode 100644 index 000000000..93621514f --- /dev/null +++ b/29/wildscribe/core-service/patching/patch-stream/addon/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/patch-stream/addon/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/patching/patch-stream/index.html b/29/wildscribe/core-service/patching/patch-stream/index.html new file mode 100644 index 000000000..c034ab458 --- /dev/null +++ b/29/wildscribe/core-service/patching/patch-stream/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/patch-stream/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/patching/patch-stream/layer/index.html b/29/wildscribe/core-service/patching/patch-stream/layer/index.html new file mode 100644 index 000000000..21ac7549a --- /dev/null +++ b/29/wildscribe/core-service/patching/patch-stream/layer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/patch-stream/layer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/index.html b/29/wildscribe/core-service/platform-mbean/index.html index d7082f828..b51ead58b 100644 --- a/29/wildscribe/core-service/platform-mbean/index.html +++ b/29/wildscribe/core-service/platform-mbean/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Provides the management interface for monitoring and management of the Java virtual machine as well as the operating system on which the Java virtual machine is running. Exposes the JDK-provided JMX MBeans in the java.lang and java.nio JMX domains.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/buffer-pool/index.html b/29/wildscribe/core-service/platform-mbean/type/buffer-pool/index.html index fae510b08..087ca2c03 100644 --- a/29/wildscribe/core-service/platform-mbean/type/buffer-pool/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/buffer-pool/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a buffer pool, for example a pool of direct or mapped buffers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/buffer-pool/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/buffer-pool/name/index.html b/29/wildscribe/core-service/platform-mbean/type/buffer-pool/name/index.html index c230dc5b0..3bfe307c0 100644 --- a/29/wildscribe/core-service/platform-mbean/type/buffer-pool/name/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/buffer-pool/name/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a buffer pool, for example a pool of direct or mapped buffers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/buffer-pool/name/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/class-loading/index.html b/29/wildscribe/core-service/platform-mbean/type/class-loading/index.html index 70bb67621..959981553 100644 --- a/29/wildscribe/core-service/platform-mbean/type/class-loading/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/class-loading/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the class loading system of the Java virtual machine.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/class-loading/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/compilation/index.html b/29/wildscribe/core-service/platform-mbean/type/compilation/index.html index 15a8de7e3..d88a2929f 100644 --- a/29/wildscribe/core-service/platform-mbean/type/compilation/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/compilation/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the compilation system of the Java virtual machine


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/compilation/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/garbage-collector/index.html b/29/wildscribe/core-service/platform-mbean/type/garbage-collector/index.html index 597cc937c..d50915e30 100644 --- a/29/wildscribe/core-service/platform-mbean/type/garbage-collector/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/garbage-collector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Parent resource for the resources providing the management interface for the garbage collection of the Java virtual machine.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/garbage-collector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/garbage-collector/name/index.html b/29/wildscribe/core-service/platform-mbean/type/garbage-collector/name/index.html index fa5a7789d..501035759 100644 --- a/29/wildscribe/core-service/platform-mbean/type/garbage-collector/name/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/garbage-collector/name/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for one of the garbage collectors in the Java virtual machine.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/garbage-collector/name/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/memory-manager/index.html b/29/wildscribe/core-service/platform-mbean/type/memory-manager/index.html index 0c84b7a78..cef3894a6 100644 --- a/29/wildscribe/core-service/platform-mbean/type/memory-manager/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/memory-manager/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a memory manager. A memory manager manages one or more memory pools of the Java virtual machine.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/memory-manager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/memory-manager/name/index.html b/29/wildscribe/core-service/platform-mbean/type/memory-manager/name/index.html index 849372453..0746b7cce 100644 --- a/29/wildscribe/core-service/platform-mbean/type/memory-manager/name/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/memory-manager/name/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a memory manager. A memory manager manages one or more memory pools of the Java virtual machine.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/memory-manager/name/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/memory-pool/index.html b/29/wildscribe/core-service/platform-mbean/type/memory-pool/index.html index 158f312ad..1fed126c9 100644 --- a/29/wildscribe/core-service/platform-mbean/type/memory-pool/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/memory-pool/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a memory pool. A memory pool represents the memory resource managed by the Java virtual machine and is managed by one or more memory managers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/memory-pool/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/memory-pool/name/index.html b/29/wildscribe/core-service/platform-mbean/type/memory-pool/name/index.html index 3a371bacb..166c590af 100644 --- a/29/wildscribe/core-service/platform-mbean/type/memory-pool/name/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/memory-pool/name/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a memory pool. A memory pool represents the memory resource managed by the Java virtual machine and is managed by one or more memory managers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/memory-pool/name/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/memory/index.html b/29/wildscribe/core-service/platform-mbean/type/memory/index.html index 5b900e186..1254b83b5 100644 --- a/29/wildscribe/core-service/platform-mbean/type/memory/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/memory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the memory system of the Java virtual machine.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/memory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/operating-system/index.html b/29/wildscribe/core-service/platform-mbean/type/operating-system/index.html index 7c293704e..b9b2d5943 100644 --- a/29/wildscribe/core-service/platform-mbean/type/operating-system/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/operating-system/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the operating system on which the Java virtual machine is running.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/operating-system/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/runtime/index.html b/29/wildscribe/core-service/platform-mbean/type/runtime/index.html index c7a134d2b..95e2839d2 100644 --- a/29/wildscribe/core-service/platform-mbean/type/runtime/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/runtime/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the runtime system of the Java virtual machine.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/runtime/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/platform-mbean/type/threading/index.html b/29/wildscribe/core-service/platform-mbean/type/threading/index.html index 90d63d266..c42d25cd0 100644 --- a/29/wildscribe/core-service/platform-mbean/type/threading/index.html +++ b/29/wildscribe/core-service/platform-mbean/type/threading/index.html @@ -1,808 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the thread system of the Java virtual machine.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/platform-mbean/type/threading/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/server-environment/index.html b/29/wildscribe/core-service/server-environment/index.html index 005b94a86..364d84141 100644 --- a/29/wildscribe/core-service/server-environment/index.html +++ b/29/wildscribe/core-service/server-environment/index.html @@ -1,210 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The server environment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/server-environment/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/service-container/index.html b/29/wildscribe/core-service/service-container/index.html index 259a6b53b..55d01bdf3 100644 --- a/29/wildscribe/core-service/service-container/index.html +++ b/29/wildscribe/core-service/service-container/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The central container that manages all services in a running standalone server or in a host controller in a management domain.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/core-service/service-container/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/core-service/vault/index.html b/29/wildscribe/core-service/vault/index.html new file mode 100644 index 000000000..e80276b00 --- /dev/null +++ b/29/wildscribe/core-service/vault/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/vault/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment-overlay/content/index.html b/29/wildscribe/deployment-overlay/content/index.html index 1aed8c5aa..3e9d95d67 100644 --- a/29/wildscribe/deployment-overlay/content/index.html +++ b/29/wildscribe/deployment-overlay/content/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The content of the deployment overlay


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment-overlay/content/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment-overlay/deployment/index.html b/29/wildscribe/deployment-overlay/deployment/index.html index 2c16ce1d2..4251c2016 100644 --- a/29/wildscribe/deployment-overlay/deployment/index.html +++ b/29/wildscribe/deployment-overlay/deployment/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The deployment that this deployment overlay is linked to


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment-overlay/deployment/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment-overlay/index.html b/29/wildscribe/deployment-overlay/index.html index d9ac65db0..2736bd4d9 100644 --- a/29/wildscribe/deployment-overlay/index.html +++ b/29/wildscribe/deployment-overlay/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A deployment overlay


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment-overlay/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/index.html b/29/wildscribe/deployment/index.html index c8c87aaae..ad2ba7122 100644 --- a/29/wildscribe/deployment/index.html +++ b/29/wildscribe/deployment/index.html @@ -1,26 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A deployment represents anything that can be deployed (e.g. an application such as Jakarta Enterprise Beans-JAR, WAR, EAR, any kind of standard archive such as RAR or JBoss-specific deployment) into a server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/index.html b/29/wildscribe/deployment/subdeployment/index.html index 7e1595b82..32d40dfac 100644 --- a/29/wildscribe/deployment/subdeployment/index.html +++ b/29/wildscribe/deployment/subdeployment/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A deployment represents anything that can be deployed (e.g. an application such as Jakarta Enterprise Beans-JAR, WAR, EAR, any kind of standard archive such as RAR or JBoss-specific deployment) into a server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/index.html b/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/index.html index 999ec6597..b2e6759ae 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the batch subsystem for the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/execution/index.html b/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/execution/index.html index 413cecd89..1a0d9bf8e 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/execution/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/execution/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The execution information for the job with the value of the path being the execution id.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/execution/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/index.html b/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/index.html index 09cc65e57..1f4db3e14 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about a specific batch job.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/connection-properties/index.html b/29/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/connection-properties/index.html index 77b383da8..b11b0b42e 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/connection-properties/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/connection-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The connection-properties element allows you to pass in arbitrary connection properties to the Driver.connect(url, props) method


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/connection-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/index.html b/29/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/index.html index c2e1c0fc1..97308c173 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC data-source configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/datasources/index.html b/29/wildscribe/deployment/subdeployment/subsystem/datasources/index.html index c0bb2b7c1..74d4e3b37 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/datasources/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/datasources/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The data-sources subsystem, used to declare JDBC data-sources


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/datasources/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/index.html b/29/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/index.html index f42b152ef..0bf1dac9d 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC XA data-source configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html b/29/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html index 7060abd5c..fdfa4c9af 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

List of xa-datasource-property


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/index.html index 683d77bfd..06697dfc0 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by Jakarta Enterprise Beans components included in this deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/index.html index a0a4d4baa..514c32f71 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Message driven bean component included in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html index cdc03e039..546a041a5 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html index ec83d23ea..3d746e2f5 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/index.html index 9d57b548f..65e63fd22 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Singleton bean component included in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html index d12b97469..70152e3ab 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html index 1379d9e76..97cf638cc 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/index.html index ab6345eb9..bcffa3518 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Stateful session bean component included in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..e10bde101 --- /dev/null +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..db3c92e24 --- /dev/null +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/index.html index ebbf0c897..20e3aac49 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Stateless session bean component included in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html index 16e1df1cc..8ba441db9 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html index 6a67426f5..e63d67d24 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/jaxrs/index.html b/29/wildscribe/deployment/subdeployment/subsystem/jaxrs/index.html index b422de235..2cb3c1d53 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/jaxrs/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/jaxrs/index.html @@ -1,37 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta RESTful Web Services subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/jaxrs/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/jaxrs/rest-resource/index.html b/29/wildscribe/deployment/subdeployment/subsystem/jaxrs/rest-resource/index.html index 93e56428e..6d2cffd91 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/jaxrs/rest-resource/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/jaxrs/rest-resource/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta RESTful Web Services deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/jaxrs/rest-resource/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/jpa/index.html b/29/wildscribe/deployment/subdeployment/subsystem/jpa/index.html index 3dc12ab46..f42927cbe 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/jpa/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/jpa/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta Persistence subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/jpa/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/error-manager/index.html b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/error-manager/index.html index 119004c14..5d57f8087 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/error-manager/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/error-manager/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured error managers being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/error-manager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/filter/index.html b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/filter/index.html index 6af901110..6dd5729c1 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/filter/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/filter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured filters being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/filter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/formatter/index.html b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/formatter/index.html index de58040a6..08f78e1ca 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/formatter/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured formatters being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/handler/index.html b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/handler/index.html index 9e73f4121..98480ad8f 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/handler/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured handlers being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/index.html b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/index.html index 307d3c844..a1040fd69 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the logging configuration for this deployment. Note that this may not be accurate if the deployment is using some other means of configuring a log manager such as logback. The resolved configuration is what loggers not covered by the deployments specific log manager would use.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/logger/index.html b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/logger/index.html index 2b505ee97..e360e485f 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/logger/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/logger/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured loggers being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/logger/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/pojo/index.html b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/pojo/index.html index 6f17dae04..645ae404d 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/pojo/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/logging/configuration/pojo/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured POJO's being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/pojo/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/logging/index.html b/29/wildscribe/deployment/subdeployment/subsystem/logging/index.html index 55e4caed0..6d67f97a3 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/logging/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/logging/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the logging configuration for this deployment. Note that this may not be accurate if the deployment is using some other means of configuring a log manager such as logback. The resolved configuration is what loggers not covered by the deployments specific log manager would use.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/logging/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/connection-factory/index.html b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/connection-factory/index.html index cf2fe725b..a4c758379 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/connection-factory/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-queue/index.html b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-queue/index.html index 4b75b1665..5f83dd225 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-queue/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-queue/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue to a remote broker.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-queue/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-topic/index.html b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-topic/index.html index ed7a4abd1..81b7c8649 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-topic/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-topic/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic to a remote broker.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-topic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/index.html b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/index.html index 3fb034b60..d566d5f83 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by messaging resources included in this deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/pooled-connection-factory/index.html b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/pooled-connection-factory/index.html index 7edffd093..044369daa 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/pooled-connection-factory/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/pooled-connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/pooled-connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/index.html b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/index.html index a132c17bd..358a3cb87 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An ActiveMQ server instance.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-queue/index.html b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-queue/index.html index 20baf634a..288a606c8 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-queue/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-queue/index.html @@ -1,159 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-queue/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-topic/index.html b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-topic/index.html index 93bdb31b9..c10bcbbe0 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-topic/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-topic/index.html @@ -1,377 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-topic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html index b9ee3c36a..b207c7e5b 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html b/29/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html new file mode 100644 index 000000000..f657ffaf9 --- /dev/null +++ b/29/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/index.html b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/index.html index 14384dcd7..08c818cc5 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime statistics provided by the resource adapter.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html index ed8bc5682..5edc74af8 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Model representing resource adapters activated by ironjacamar.xml file inside rar.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html index 5cee86f61..9ba3e6503 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html index a2fdf5ccc..7d470d935 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies an administration object.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html index 636979ec4..49bed34ae 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html index 6ee798745..4aabf7b96 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html index f40df83f2..41c83703b 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies a connection definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html index adc722042..d66600a9d 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a resource adapter.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/undertow/index.html b/29/wildscribe/deployment/subdeployment/subsystem/undertow/index.html index 589992046..2a9f21182 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/undertow/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/undertow/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the web container handling of this deployment


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/undertow/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/undertow/servlet/index.html b/29/wildscribe/deployment/subdeployment/subsystem/undertow/servlet/index.html index c460b1b0a..ee61d954c 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/undertow/servlet/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/undertow/servlet/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the status and configuration of this servlet


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/undertow/servlet/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/undertow/websocket/index.html b/29/wildscribe/deployment/subdeployment/subsystem/undertow/websocket/index.html index a5bf9abb0..d9c553949 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/undertow/websocket/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/undertow/websocket/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the status and configuration of this websocket


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/undertow/websocket/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/webservices/endpoint/index.html b/29/wildscribe/deployment/subdeployment/subsystem/webservices/endpoint/index.html index ba7da7947..31dfe9b15 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/webservices/endpoint/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/webservices/endpoint/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WS endpoint


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/webservices/endpoint/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subdeployment/subsystem/webservices/index.html b/29/wildscribe/deployment/subdeployment/subsystem/webservices/index.html index 5f97c63a2..3e456c0c0 100644 --- a/29/wildscribe/deployment/subdeployment/subsystem/webservices/index.html +++ b/29/wildscribe/deployment/subdeployment/subsystem/webservices/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by web service components in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subdeployment/subsystem/webservices/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/batch-jberet/index.html b/29/wildscribe/deployment/subsystem/batch-jberet/index.html index 928aabd0b..bb979cd4c 100644 --- a/29/wildscribe/deployment/subsystem/batch-jberet/index.html +++ b/29/wildscribe/deployment/subsystem/batch-jberet/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the batch subsystem for the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/batch-jberet/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/batch-jberet/job/execution/index.html b/29/wildscribe/deployment/subsystem/batch-jberet/job/execution/index.html index 7eb57ab56..257ef1131 100644 --- a/29/wildscribe/deployment/subsystem/batch-jberet/job/execution/index.html +++ b/29/wildscribe/deployment/subsystem/batch-jberet/job/execution/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The execution information for the job with the value of the path being the execution id.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/batch-jberet/job/execution/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/batch-jberet/job/index.html b/29/wildscribe/deployment/subsystem/batch-jberet/job/index.html index bbc7f179f..968bd8274 100644 --- a/29/wildscribe/deployment/subsystem/batch-jberet/job/index.html +++ b/29/wildscribe/deployment/subsystem/batch-jberet/job/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about a specific batch job.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/batch-jberet/job/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/datasources/data-source/connection-properties/index.html b/29/wildscribe/deployment/subsystem/datasources/data-source/connection-properties/index.html index d7f0e60da..df6a5952b 100644 --- a/29/wildscribe/deployment/subsystem/datasources/data-source/connection-properties/index.html +++ b/29/wildscribe/deployment/subsystem/datasources/data-source/connection-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The connection-properties element allows you to pass in arbitrary connection properties to the Driver.connect(url, props) method


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/datasources/data-source/connection-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/datasources/data-source/index.html b/29/wildscribe/deployment/subsystem/datasources/data-source/index.html index 3fccedb5b..fc99de9a0 100644 --- a/29/wildscribe/deployment/subsystem/datasources/data-source/index.html +++ b/29/wildscribe/deployment/subsystem/datasources/data-source/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC data-source configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/datasources/data-source/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/datasources/index.html b/29/wildscribe/deployment/subsystem/datasources/index.html index 96b05d851..63281e527 100644 --- a/29/wildscribe/deployment/subsystem/datasources/index.html +++ b/29/wildscribe/deployment/subsystem/datasources/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The data-sources subsystem, used to declare JDBC data-sources


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/datasources/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/datasources/xa-data-source/index.html b/29/wildscribe/deployment/subsystem/datasources/xa-data-source/index.html index de3ea999a..f3fed5ec6 100644 --- a/29/wildscribe/deployment/subsystem/datasources/xa-data-source/index.html +++ b/29/wildscribe/deployment/subsystem/datasources/xa-data-source/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC XA data-source configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/datasources/xa-data-source/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html b/29/wildscribe/deployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html index 81892aa26..98d808116 100644 --- a/29/wildscribe/deployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html +++ b/29/wildscribe/deployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

List of xa-datasource-property


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/index.html b/29/wildscribe/deployment/subsystem/ejb3/index.html index 407be74cd..1c99da12d 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by Jakarta Enterprise Beans components included in this deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/index.html b/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/index.html index 0344306dd..d6f4ac990 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Message driven bean component included in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html b/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html index 1a701cb7e..97e357c18 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html b/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html index 4c86f08f0..a940e8298 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/index.html b/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/index.html index dcc1baceb..15fac9dee 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Singleton bean component included in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html b/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html index 69d679d30..1055cd30a 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html b/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html index c08462335..1af321bad 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/index.html b/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/index.html index 09164d352..6ccecf290 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Stateful session bean component included in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..aa4317d42 --- /dev/null +++ b/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..af799ba2a --- /dev/null +++ b/29/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/index.html b/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/index.html index 9d5e0f825..0fb5f2bd1 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Stateless session bean component included in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html b/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html index 0e5527893..2f71f5c15 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html b/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html index aa0dd66b7..a2023bfd2 100644 --- a/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html +++ b/29/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/jaxrs/index.html b/29/wildscribe/deployment/subsystem/jaxrs/index.html index 05062c727..77b72f740 100644 --- a/29/wildscribe/deployment/subsystem/jaxrs/index.html +++ b/29/wildscribe/deployment/subsystem/jaxrs/index.html @@ -1,37 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta RESTful Web Services subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/jaxrs/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/jaxrs/rest-resource/index.html b/29/wildscribe/deployment/subsystem/jaxrs/rest-resource/index.html index b4e8d7fa5..c9b51c476 100644 --- a/29/wildscribe/deployment/subsystem/jaxrs/rest-resource/index.html +++ b/29/wildscribe/deployment/subsystem/jaxrs/rest-resource/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta RESTful Web Services deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/jaxrs/rest-resource/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/jpa/index.html b/29/wildscribe/deployment/subsystem/jpa/index.html index 2a3bede6f..9a1d80d45 100644 --- a/29/wildscribe/deployment/subsystem/jpa/index.html +++ b/29/wildscribe/deployment/subsystem/jpa/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta Persistence subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/jpa/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/logging/configuration/error-manager/index.html b/29/wildscribe/deployment/subsystem/logging/configuration/error-manager/index.html index dfa021d4d..459bc11fe 100644 --- a/29/wildscribe/deployment/subsystem/logging/configuration/error-manager/index.html +++ b/29/wildscribe/deployment/subsystem/logging/configuration/error-manager/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured error managers being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/logging/configuration/error-manager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/logging/configuration/filter/index.html b/29/wildscribe/deployment/subsystem/logging/configuration/filter/index.html index e923048eb..ce12219d7 100644 --- a/29/wildscribe/deployment/subsystem/logging/configuration/filter/index.html +++ b/29/wildscribe/deployment/subsystem/logging/configuration/filter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured filters being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/logging/configuration/filter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/logging/configuration/formatter/index.html b/29/wildscribe/deployment/subsystem/logging/configuration/formatter/index.html index 8ef12e6a5..d87c0c4df 100644 --- a/29/wildscribe/deployment/subsystem/logging/configuration/formatter/index.html +++ b/29/wildscribe/deployment/subsystem/logging/configuration/formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured formatters being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/logging/configuration/formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/logging/configuration/handler/index.html b/29/wildscribe/deployment/subsystem/logging/configuration/handler/index.html index 91b456556..5fd25c4d2 100644 --- a/29/wildscribe/deployment/subsystem/logging/configuration/handler/index.html +++ b/29/wildscribe/deployment/subsystem/logging/configuration/handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured handlers being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/logging/configuration/handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/logging/configuration/index.html b/29/wildscribe/deployment/subsystem/logging/configuration/index.html index 18db31319..936cf9035 100644 --- a/29/wildscribe/deployment/subsystem/logging/configuration/index.html +++ b/29/wildscribe/deployment/subsystem/logging/configuration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the logging configuration for this deployment. Note that this may not be accurate if the deployment is using some other means of configuring a log manager such as logback. The resolved configuration is what loggers not covered by the deployments specific log manager would use.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/logging/configuration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/logging/configuration/logger/index.html b/29/wildscribe/deployment/subsystem/logging/configuration/logger/index.html index 8302a87f7..68f669621 100644 --- a/29/wildscribe/deployment/subsystem/logging/configuration/logger/index.html +++ b/29/wildscribe/deployment/subsystem/logging/configuration/logger/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured loggers being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/logging/configuration/logger/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/logging/configuration/pojo/index.html b/29/wildscribe/deployment/subsystem/logging/configuration/pojo/index.html index 443a450c3..3a3883c64 100644 --- a/29/wildscribe/deployment/subsystem/logging/configuration/pojo/index.html +++ b/29/wildscribe/deployment/subsystem/logging/configuration/pojo/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured POJO's being used on a deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/logging/configuration/pojo/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/logging/index.html b/29/wildscribe/deployment/subsystem/logging/index.html index 13a5d9b57..9d7d54af6 100644 --- a/29/wildscribe/deployment/subsystem/logging/index.html +++ b/29/wildscribe/deployment/subsystem/logging/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the logging configuration for this deployment. Note that this may not be accurate if the deployment is using some other means of configuring a log manager such as logback. The resolved configuration is what loggers not covered by the deployments specific log manager would use.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/logging/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/messaging-activemq/connection-factory/index.html b/29/wildscribe/deployment/subsystem/messaging-activemq/connection-factory/index.html index 8d144cbf2..026e82ffd 100644 --- a/29/wildscribe/deployment/subsystem/messaging-activemq/connection-factory/index.html +++ b/29/wildscribe/deployment/subsystem/messaging-activemq/connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/messaging-activemq/connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/messaging-activemq/external-jms-queue/index.html b/29/wildscribe/deployment/subsystem/messaging-activemq/external-jms-queue/index.html index c063ef652..7b5ba598a 100644 --- a/29/wildscribe/deployment/subsystem/messaging-activemq/external-jms-queue/index.html +++ b/29/wildscribe/deployment/subsystem/messaging-activemq/external-jms-queue/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue to a remote broker.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/messaging-activemq/external-jms-queue/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/messaging-activemq/external-jms-topic/index.html b/29/wildscribe/deployment/subsystem/messaging-activemq/external-jms-topic/index.html index f035d5b8c..7e036b042 100644 --- a/29/wildscribe/deployment/subsystem/messaging-activemq/external-jms-topic/index.html +++ b/29/wildscribe/deployment/subsystem/messaging-activemq/external-jms-topic/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic to a remote broker.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/messaging-activemq/external-jms-topic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/messaging-activemq/index.html b/29/wildscribe/deployment/subsystem/messaging-activemq/index.html index 6e5daad68..01d83caa4 100644 --- a/29/wildscribe/deployment/subsystem/messaging-activemq/index.html +++ b/29/wildscribe/deployment/subsystem/messaging-activemq/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by messaging resources included in this deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/messaging-activemq/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/messaging-activemq/pooled-connection-factory/index.html b/29/wildscribe/deployment/subsystem/messaging-activemq/pooled-connection-factory/index.html index b65611bf2..76f629518 100644 --- a/29/wildscribe/deployment/subsystem/messaging-activemq/pooled-connection-factory/index.html +++ b/29/wildscribe/deployment/subsystem/messaging-activemq/pooled-connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/messaging-activemq/pooled-connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/messaging-activemq/server/index.html b/29/wildscribe/deployment/subsystem/messaging-activemq/server/index.html index 77d13f947..4793bbb46 100644 --- a/29/wildscribe/deployment/subsystem/messaging-activemq/server/index.html +++ b/29/wildscribe/deployment/subsystem/messaging-activemq/server/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An ActiveMQ server instance.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/messaging-activemq/server/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/messaging-activemq/server/jms-queue/index.html b/29/wildscribe/deployment/subsystem/messaging-activemq/server/jms-queue/index.html index 2898569bf..dcd54a357 100644 --- a/29/wildscribe/deployment/subsystem/messaging-activemq/server/jms-queue/index.html +++ b/29/wildscribe/deployment/subsystem/messaging-activemq/server/jms-queue/index.html @@ -1,159 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/messaging-activemq/server/jms-queue/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/messaging-activemq/server/jms-topic/index.html b/29/wildscribe/deployment/subsystem/messaging-activemq/server/jms-topic/index.html index 62e921a61..50805fb4a 100644 --- a/29/wildscribe/deployment/subsystem/messaging-activemq/server/jms-topic/index.html +++ b/29/wildscribe/deployment/subsystem/messaging-activemq/server/jms-topic/index.html @@ -1,377 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/messaging-activemq/server/jms-topic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html b/29/wildscribe/deployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html index 70bf35df4..057c41602 100644 --- a/29/wildscribe/deployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html +++ b/29/wildscribe/deployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html b/29/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html new file mode 100644 index 000000000..ed82c622d --- /dev/null +++ b/29/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/resource-adapters/index.html b/29/wildscribe/deployment/subsystem/resource-adapters/index.html index c7a60909b..6296e2e6a 100644 --- a/29/wildscribe/deployment/subsystem/resource-adapters/index.html +++ b/29/wildscribe/deployment/subsystem/resource-adapters/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime statistics provided by the resource adapter.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/resource-adapters/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html index 51e63969f..a501fe7f7 100644 --- a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html +++ b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Model representing resource adapters activated by ironjacamar.xml file inside rar.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html index 4989c8508..5b6b85370 100644 --- a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html +++ b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html index 99e7f17ce..926448229 100644 --- a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html +++ b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies an administration object.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html index 9348e5255..4e8bb70bc 100644 --- a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html +++ b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html index 93922ad5c..32650cb85 100644 --- a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html +++ b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html index 635422a64..158b85e7f 100644 --- a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html +++ b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies a connection definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html index d1c003613..f4b1433dc 100644 --- a/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html +++ b/29/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a resource adapter.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/undertow/index.html b/29/wildscribe/deployment/subsystem/undertow/index.html index 218342c12..be6d67048 100644 --- a/29/wildscribe/deployment/subsystem/undertow/index.html +++ b/29/wildscribe/deployment/subsystem/undertow/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the web container handling of this deployment


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/undertow/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/undertow/servlet/index.html b/29/wildscribe/deployment/subsystem/undertow/servlet/index.html index 0f2bfec4a..1174248b7 100644 --- a/29/wildscribe/deployment/subsystem/undertow/servlet/index.html +++ b/29/wildscribe/deployment/subsystem/undertow/servlet/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the status and configuration of this servlet


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/undertow/servlet/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/undertow/websocket/index.html b/29/wildscribe/deployment/subsystem/undertow/websocket/index.html index b96be7927..e8fe85719 100644 --- a/29/wildscribe/deployment/subsystem/undertow/websocket/index.html +++ b/29/wildscribe/deployment/subsystem/undertow/websocket/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the status and configuration of this websocket


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/undertow/websocket/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/webservices/endpoint/index.html b/29/wildscribe/deployment/subsystem/webservices/endpoint/index.html index 9800dfee7..a818529b1 100644 --- a/29/wildscribe/deployment/subsystem/webservices/endpoint/index.html +++ b/29/wildscribe/deployment/subsystem/webservices/endpoint/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WS endpoint


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/webservices/endpoint/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/deployment/subsystem/webservices/index.html b/29/wildscribe/deployment/subsystem/webservices/index.html index 8a5c4defa..03a861076 100644 --- a/29/wildscribe/deployment/subsystem/webservices/index.html +++ b/29/wildscribe/deployment/subsystem/webservices/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by web service components in the deployment.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/deployment/subsystem/webservices/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/extension/index.html b/29/wildscribe/extension/index.html index 89ad29ef6..88314b093 100644 --- a/29/wildscribe/extension/index.html +++ b/29/wildscribe/extension/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A module that extends the standard capabilities of a domain or a standalone server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/extension/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/extension/subsystem/index.html b/29/wildscribe/extension/subsystem/index.html index fdb9bd851..2e30f8054 100644 --- a/29/wildscribe/extension/subsystem/index.html +++ b/29/wildscribe/extension/subsystem/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A subsystem provided by the extension. What is provided here is information about the xml schema and management interface provided by the subsystem, not the configuration of the subsystem itself.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/extension/subsystem/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/index.html b/29/wildscribe/index.html index 7dad92891..2363e7688 100644 --- a/29/wildscribe/index.html +++ b/29/wildscribe/index.html @@ -1,232 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The root node of the server-level management model.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/interface/index.html b/29/wildscribe/interface/index.html index 3a1e20b18..a9731b59f 100644 --- a/29/wildscribe/interface/index.html +++ b/29/wildscribe/interface/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Interface definition


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/interface/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/log-message-reference.html b/29/wildscribe/log-message-reference.html index adf21b8c3..d36812741 100644 --- a/29/wildscribe/log-message-reference.html +++ b/29/wildscribe/log-message-reference.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

AMQ

Code Level Return Type Message
AMQ022272 WARN Message ack in prepared tx for queue {0} which does not exist. This ack will be ignored.
AMQ022273 WARN Address "{0}" is full. Bridge {1} will disconnect
AMQ101000 INFO Starting ActiveMQ Artemis Server
AMQ101001 INFO Stopping ActiveMQ Artemis Server
AMQ101002 INFO Starting Naming server on {0}:{1,number,#} (rmi {2}:{3,number,#})
AMQ101003 INFO Halting ActiveMQ Artemis Server after user request
AMQ101005 DEBUG Using broker configuration: {0}
AMQ102000 WARN Error during undeployment: {0}
AMQ104000 ERROR Failed to delete file {0}
AMQ104001 ERROR Failed to start server
AMQ104002 ERROR The print data operation failed: {0}
AMQ111000 WARN Scheduled task can't be removed from scheduledPool.
AMQ111001 WARN ******************************************************************************************************************************* Could not re-establish AMQP Server Connection {0} on {1} after {2} retries *******************************************************************************************************************************
AMQ111002 INFO ******************************************************************************************************************************* Retrying Server AMQP Connection {0} on {1} retry {2} of {3} *******************************************************************************************************************************
AMQ111003 INFO ******************************************************************************************************************************* Connected on Server AMQP Connection {0} on {1} after {2} retries *******************************************************************************************************************************
AMQ111004 WARN AddressFullPolicy clash on an anonymous producer between destinations {0}(addressFullPolicy={1}) and {2}(addressFullPolicy={3}). This could lead to semantic inconsistencies on your clients. Notice you could have other instances of this scenario however this message will only be logged once. log.debug output would show all instances of this event.
AMQ121003 INFO JMS Server Manager Running cached command for {0}
AMQ121004 INFO JMS Server Manager Caching command for {0} since the JMS Server is not active yet
AMQ121004 INFO JMS Server Manager Caching command for {0} since the JMS Server is not active.
AMQ121005 INFO Invalid "host" value "0.0.0.0" detected for "{0}" connector. Switching to "{1}". If this new address is incorrect please manually configure the connector to use the proper one.
AMQ122005 WARN Invalid "host" value "0.0.0.0" detected for "{0}" connector. Switching to "{1}". If this new address is incorrect please manually configure the connector to use the proper one.
AMQ122007 WARN Queue {0} does not exist on the topic {1}. It was deleted manually probably.
AMQ122007 WARN Queue {0} does not exist on the topic {1}. It was deleted manually probably.
AMQ122008 WARN XA Recovery can not connect to any ActiveMQ server on recovery {0}
AMQ122008 WARN XA Recovery can not connect to any broker on recovery {0}
AMQ122011 WARN error unbinding {0} from JNDI
AMQ122011 WARN error unbinding {0} from Registry
AMQ122012 WARN JMS Server Manager error
AMQ122012 WARN JMS Server Manager error
AMQ122013 WARN Error in XA Recovery recover
AMQ122013 WARN Error in XA Recovery recover
AMQ122014 WARN Notified of connection failure in xa recovery connectionFactory for provider {0} will attempt reconnect on next pass
AMQ122014 WARN Notified of connection failure in xa recovery connectionFactory for provider {0} will attempt reconnect on next pass
AMQ122015 WARN Can not connect to {0} on auto-generated resource recovery
AMQ122016 DEBUG Error in XA Recovery
AMQ122016 DEBUG Error in XA Recovery
AMQ122017 WARN Tried to correct invalid "host" value "0.0.0.0" for "{0}" connector, but received an exception.
AMQ122017 WARN Tried to correct invalid "host" value "0.0.0.0" for "{0}" connector, but received an exception.
AMQ122018 WARN Could not start recovery discovery on {0}, we will retry every recovery scan until the server is available
AMQ122018 WARN Failed to send notification: {0}
AMQ122019 WARN Unable to deactivate server
AMQ123000 DEBUG JMS Server Manager Running cached command for {0}.(In the event of failover after failback has occurred, this message may be output multiple times.)
AMQ124000 ERROR key attribute missing for JMS configuration {0}
AMQ124000 ERROR key attribute missing for JMS configuration {0}
AMQ124002 ERROR Failed to start JMS deployer
AMQ124002 ERROR Failed to start JMS deployer
AMQ131001 INFO Security Context Setting Subject = {0}
AMQ132000 WARN I''m closing a JMS connection you left open. Please make sure you close all JMS connections explicitly before letting them go out of scope! see stacktrace to find out where it was created
AMQ132001 WARN An error happened while setting the context
AMQ132001 WARN Unhandled exception thrown from onMessage
AMQ134000 ERROR Failed to call JMS exception listener
AMQ134002 ERROR Queue Browser failed to create message {0}
AMQ134003 ERROR Message Listener failed to prepare message for receipt, message={0}
AMQ134004 ERROR Message Listener failed to process message
AMQ134005 ERROR Message Listener failed to recover session
AMQ134006 ERROR Failed to call Failover listener
AMQ141000 INFO *** running direct journal blast: {0}
AMQ141002 INFO starting thread for sync speed test
AMQ141003 INFO Write rate = {0} bytes / sec or {1} MiB / sec
AMQ141004 INFO Flush rate = {0} flushes / sec
AMQ141005 INFO Check Data Files:
AMQ141006 INFO Sequence out of order on journal
AMQ141007 INFO Current File on the journal is <= the sequence file.getFileID={0} on the dataFiles Currentfile.getFileId={1} while the file.getFileID()={2} Is same = ({3})
AMQ141008 INFO Free File ID out of order
AMQ141009 INFO A Free File is less than the maximum data
AMQ141010 INFO Initialising JDBC data source {0} with properties {1}
AMQ142000 WARN You have a native library with a different version than expected
AMQ142001 WARN Could not get lock after 60 seconds on closing Asynchronous File: {0}
AMQ142002 WARN Asynchronous File: {0} being finalized with opened state
AMQ142003 WARN AIO Callback Error: {0}
AMQ142004 WARN Inconsistency during compacting: CommitRecord ID = {0} for an already committed transaction during compacting
AMQ142005 WARN Inconsistency during compacting: Delete record being read on an existent record (id={0})
AMQ142006 WARN Could not find add Record information for record {0} during compacting
AMQ142007 WARN Can not find record {0} during compact replay
AMQ142008 WARN Could not remove file {0} from the list of data files
AMQ142009 WARN ******************************************************************************************************************************* The File Storage Attic is full, as the file {0} does not have the configured size, and the file will be removed *******************************************************************************************************************************
AMQ142010 WARN Failed to add file to opened files queue: {0}. This should NOT happen!
AMQ142011 WARN Error on reading compacting for {0}
AMQ142012 WARN Couldn''t find tx={0} to merge after compacting
AMQ142013 WARN Prepared transaction {0} was not considered completed, it will be ignored
AMQ142014 WARN Transaction {0} is missing elements so the transaction is being ignored
AMQ142015 WARN Uncommitted transaction with id {0} found and discarded
AMQ142016 WARN Could not stop compactor executor after 120 seconds
AMQ142017 WARN Could not stop journal executor after 60 seconds
AMQ142018 WARN Temporary files were left unattended after a crash on journal directory, deleting invalid files now
AMQ142019 WARN Deleting orphaned file {0}
AMQ142020 WARN Could not get lock after 60 seconds on closing Asynchronous File: {0}
AMQ142021 WARN Error on IO callback, {0}
AMQ142022 WARN Timed out on AIO poller shutdown
AMQ142023 WARN Executor on file {0} couldn''t complete its tasks in 60 seconds.
AMQ142024 WARN Error completing callback
AMQ142025 WARN Error calling onError callback
AMQ142026 WARN Timed out on AIO writer shutdown
AMQ142027 WARN Error on writing data! {0} code - {1}
AMQ142028 WARN Error replaying pending commands after compacting
AMQ142029 WARN Error closing file
AMQ142030 WARN Could not open a file in 60 Seconds
AMQ142031 WARN Error retrieving ID part of the file name {0}
AMQ142032 WARN Error reading journal file
AMQ142033 WARN Error reinitializing file {0}
AMQ142034 WARN Exception on submitting write
AMQ142035 WARN Could not stop journal append executor after 60 seconds
AMQ144000 ERROR Failed to delete file {0}
AMQ144001 ERROR Error starting poller
AMQ144002 ERROR Error pushing opened file
AMQ144003 ERROR Error compacting
AMQ144004 ERROR Error scheduling compacting
AMQ144005 ERROR Failed to performance blast
AMQ144006 ERROR IOError code {0}, {1}
AMQ144007 WARN Ignoring journal file {0}: file is shorter then minimum header size. This file is being removed.
AMQ144008 WARN ******************************************************************************************************************************* File {0}: was moved under attic, please review it and remove it. *******************************************************************************************************************************
AMQ144009 WARN Could not get a file in {0} seconds, System will retry the open but you may see increased latency in your system
AMQ144010 WARN Critical IO Exception happened: {0}
AMQ151000 INFO awaiting topic/queue creation {0}
AMQ151001 INFO Attempting to reconnect {0}
AMQ151002 INFO Reconnected with broker
AMQ151003 INFO resource adaptor stopped
AMQ151004 INFO Instantiating {0} "{1}" directly since UseJNDI=false.
AMQ151005 INFO awaiting server availability
AMQ151006 INFO Cluster topology change detected. Re-balancing connections on even {0}.
AMQ151007 INFO Resource adaptor started
AMQ152001 WARN problem resetting xa session after failure
AMQ152002 WARN Unable to roll local transaction back
AMQ152003 WARN unable to reset session after failure, we will place the MDB Inflow now in setup mode for activation={0}
AMQ152004 WARN Handling JMS exception failure
AMQ152005 WARN Failure in broker activation {0}
AMQ152006 WARN Unable to call after delivery
AMQ152007 WARN Thread {0} could not be finished
AMQ152008 WARN Error interrupting handler on endpoint {0} handler = {1}
AMQ152009 WARN Unable to validate properties
AMQ152010 WARN Unable to clear the transaction
AMQ152011 WARN Unable to close the factory
AMQ153001 DEBUG using different ActiveMQRAConnectionFactory
AMQ153002 jakarta.jms.IllegalStateException Cannot create a subscriber on the durable subscription since it already has subscriber(s)
AMQ153003 WARN Unsupported acknowledgement mode {0}
AMQ153004 WARN Invalid number of session (negative) {0}, defaulting to {1}.
AMQ153005 WARN Unable to retrieve "{0}" from JNDI. Creating a new "{1}" named "{2}" to be used by the MDB.
AMQ154000 ERROR Error while creating object Reference.
AMQ154001 ERROR Unable to stop resource adapter.
AMQ154003 ERROR Unable to reconnect {0}
AMQ154004 ERROR Failed to deliver message
AMQ171003 INFO JMS Server Manager Running cached command for {0}
AMQ171004 INFO JMS Server Manager Caching command for {0} since the JMS Server is not active.
AMQ172005 WARN Invalid "host" value "0.0.0.0" detected for "{0}" connector. Switching to "{1}". If this new address is incorrect please manually configure the connector to use the proper one.
AMQ172007 WARN Queue {0} does not exist on the topic {1}. It was deleted manually probably.
AMQ172008 WARN XA Recovery can not connect to any broker on recovery {0}
AMQ172011 WARN error unbinding {0} from JNDI
AMQ172012 WARN JMS Server Manager error
AMQ172013 WARN Error in XA Recovery recover
AMQ172014 WARN Notified of connection failure in xa recovery connectionFactory for provider {0} will attempt reconnect on next pass
AMQ172015 WARN Can not connect to {0} on auto-generated resource recovery
AMQ172016 DEBUG Error in XA Recovery
AMQ172017 WARN Tried to correct invalid "host" value "0.0.0.0" for "{0}" connector, but received an exception.
AMQ172018 WARN Could not start recovery discovery on {0}, we will retry every recovery scan until the server is available
AMQ174000 ERROR key attribute missing for JMS configuration {0}
AMQ174002 ERROR Failed to start JMS deployer
AMQ201000 INFO Network is healthy, starting service {0}
AMQ201001 INFO Network is unhealthy, stopping service {0}
AMQ202000 WARN Missing privileges to set Thread Context Class Loader on Thread Factory. Using current Thread Context Class Loader
AMQ202001 WARN {0} is a loopback address and will be discarded.
AMQ202002 WARN Ping Address {0} wasn't reacheable.
AMQ202003 WARN Ping Url {0} wasn't reacheable.
AMQ202004 WARN Error starting component {0}
AMQ202005 WARN Error stopping component {0}
AMQ202006 WARN Failed to check Url {0}.
AMQ202007 WARN Failed to check Address {0}.
AMQ202008 WARN Failed to check Address list {0}.
AMQ202009 WARN Failed to check Url list {0}.
AMQ202010 WARN Failed to set NIC {0}.
AMQ202011 WARN Failed to read from stream {0}.
AMQ202012 WARN Object cannot be serialized.
AMQ202013 WARN Unable to deserialize object.
AMQ202014 WARN Unable to encode byte array into Base64 notation.
AMQ202015 WARN Failed to clean up file {0}
AMQ202016 WARN Could not list files to clean up in {0}
AMQ211000 INFO **** Dumping session creation stacks ****
AMQ211001 INFO session created
AMQ211002 DEBUG Started {0} Netty Connector version {1} to {2}:{3,number,#}
AMQ211003 DEBUG Started InVM Connector
AMQ212000 WARN {0}
AMQ212001 WARN Error on clearing messages
AMQ212002 WARN Timed out waiting for handler to complete processing
AMQ212003 WARN Unable to close session
AMQ212004 WARN Failed to connect to server.
AMQ212005 WARN Tried {0} times to connect. Now giving up on reconnecting it.
AMQ212007 WARN connector.create or connectorFactory.createConnector should never throw an exception, implementation is badly behaved, but we will deal with it anyway.
AMQ212008 WARN I am closing a core ClientSessionFactory you left open. Please make sure you close all ClientSessionFactories explicitly before letting them go out of scope! {0}
AMQ212009 WARN resetting session after failure
AMQ212010 WARN Server is starting, retry to create the session {0}
AMQ212011 WARN committing transaction after failover occurred, any non persistent messages may be lost
AMQ212012 WARN failure occurred during commit throwing XAException
AMQ212014 WARN failover occurred during prepare rolling back
AMQ212015 WARN failover occurred during prepare rolling back
AMQ212016 WARN I am closing a core ClientSession you left open. Please make sure you close all ClientSessions explicitly before letting them go out of scope! {0}
AMQ212017 WARN error adding packet
AMQ212018 WARN error calling cancel
AMQ212019 WARN error reading index
AMQ212020 WARN error setting index
AMQ212021 WARN error resetting index
AMQ212022 WARN error reading LargeMessage file cache
AMQ212023 WARN error closing LargeMessage file cache
AMQ212024 WARN Exception during finalization for LargeMessage file cache
AMQ212025 WARN did not connect the cluster connection to other nodes
AMQ212026 WARN Timed out waiting for pool to terminate
AMQ212027 WARN Timed out waiting for scheduled pool to terminate
AMQ212028 WARN error starting server locator
AMQ212029 DEBUG Closing a Server Locator left open. Please make sure you close all Server Locators explicitly before letting them go out of scope! {0}
AMQ212030 WARN error sending topology
AMQ212031 WARN error sending topology
AMQ212032 WARN Timed out waiting to stop discovery thread
AMQ212033 WARN unable to send notification when discovery group is stopped
AMQ212034 WARN There are more than one servers on the network broadcasting the same node id. You will see this message exactly once (per node) if a node is restarted, in which case it can be safely ignored. But if it is logged continuously it means you really do have more than one node on the same network active concurrently with the same node id. This could occur if you have a backup node active at the same time as its live node. nodeID={0}
AMQ212035 WARN error receiving packet in discovery
AMQ212036 WARN Can not find packet to clear: {0} last received command id first stored command id {1}
AMQ212037 WARN Connection failure to {0} has been detected: {1} [code={2}]
AMQ212038 WARN Failure in calling interceptor: {0}
AMQ212040 WARN Timed out waiting for netty ssl close future to complete
AMQ212041 WARN Timed out waiting for netty channel to close
AMQ212042 WARN Timed out waiting for packet to be flushed
AMQ212043 WARN Property {0} must be an Integer, it is {1}
AMQ212044 WARN Property {0} must be a Long, it is {1}
AMQ212045 WARN Property {0} must be a Boolean, it is {1}
AMQ212046 WARN Cannot find activemq-version.properties on classpath: {0}
AMQ212047 WARN Warning: JVM allocated more data what would make results invalid {0}:{1}
AMQ212048 WARN Random address ({0}) was already in use, trying another time
AMQ212049 WARN Could not bind to {0} ({1} address); make sure your discovery group-address is of the same type as the IP stack (IPv4 or IPv6). Ignoring discovery group-address, but this may lead to cross talking.
AMQ212050 WARN Compressed large message tried to read {0} bytes from stream {1}
AMQ212051 WARN Invalid concurrent session usage. Sessions are not supposed to be used by more than one thread concurrently.
AMQ212052 WARN Packet {0} was answered out of sequence due to a previous server timeout and it''s being ignored
AMQ212053 WARN CompletionListener/SendAcknowledgementHandler used with confirmationWindowSize=-1. Enable confirmationWindowSize to receive acks from server!
AMQ212054 WARN Destination address={0} is blocked. If the system is configured to block make sure you consume messages on this configuration.
AMQ212055 WARN Unable to close consumer
AMQ212056 WARN local-bind-address specified for broadcast group but no local-bind-port. Using random port for UDP Broadcast ({0})
AMQ212057 WARN Large Message Streaming is taking too long to flush on back pressure.
AMQ212058 WARN Unable to get a message.
AMQ212059 WARN Failed to clean up: {0}
AMQ212060 WARN Unexpected null data received from DiscoveryEndpoint
AMQ212061 WARN Failed to perform force close
AMQ212062 WARN Failed to perform post actions on message processing
AMQ212063 WARN Unable to handle connection failure
AMQ212064 WARN Unable to receive cluster topology
AMQ212065 WARN {0} getting exception when receiving broadcasting
AMQ212066 WARN failed to parse int property
AMQ212067 WARN failed to get system property
AMQ212068 WARN Couldn't finish the client globalThreadPool in less than 10 seconds, interrupting it now
AMQ212069 WARN Couldn't finish the client scheduled in less than 10 seconds, interrupting it now
AMQ212070 WARN Unable to initialize VersionLoader
AMQ212071 WARN Unable to check Epoll availability
AMQ212072 WARN Failed to change channel state to ReadyForWriting
AMQ212073 WARN Unable to check KQueue availability
AMQ212074 WARN SendAcknowledgementHandler will not be asynchronous without setting up confirmation window size
AMQ212074 WARN channel group did not completely close
AMQ212075 WARN KQueue is not available, please add to the classpath or configure useKQueue=false to remove this warning
AMQ212076 WARN Epoll is not available, please add to the classpath or configure useEpoll=false to remove this warning
AMQ212077 WARN Timed out waiting to receive initial broadcast from cluster. Retry {0} of {1}
AMQ212079 WARN The upstream connector from the downstream federation will ignore url parameter {0}
AMQ212080 WARN Using legacy SSL store provider value: {0}. Please use either ''keyStoreType'' or ''trustStoreType'' instead as appropriate.
AMQ214000 ERROR Failed to call onMessage
AMQ214001 ERROR failed to cleanup session
AMQ214002 ERROR Failed to execute failure listener
AMQ214003 ERROR Failed to handle failover
AMQ214004 ERROR XA end operation failed
AMQ214005 ERROR XA start operation failed {0} code:{1}
AMQ214006 ERROR Session is not XA
AMQ214007 ERROR Received exception asynchronously from server
AMQ214008 ERROR Failed to handle packet
AMQ214009 ERROR Failed to stop discovery group
AMQ214010 ERROR Failed to receive datagram
AMQ214011 ERROR Failed to call discovery listener
AMQ214012 ERROR Unexpected error handling packet {0}
AMQ214013 ERROR Failed to decode packet
AMQ214014 ERROR Failed to execute failure listener
AMQ214015 ERROR Failed to execute connection life cycle listener
AMQ214016 ERROR Failed to create netty connection
AMQ214017 ERROR Caught unexpected Throwable
AMQ214018 ERROR Failed to invoke getTextContent() on node {0}
AMQ214019 ERROR Invalid configuration
AMQ214020 ERROR Exception happened while stopping Discovery BroadcastEndpoint {0}
AMQ214021 ERROR Invalid cipher suite specified. Supported cipher suites are: {0}
AMQ214022 ERROR Invalid protocol specified. Supported protocols are: {0}
AMQ214023 DEBUG HTTP Handshake failed, received %s
AMQ214024 ERROR HTTP upgrade not supported by remote acceptor
AMQ214025 ERROR Invalid type {0}, Using default connection factory at {1}
AMQ214026 TRACE Failure captured on connectionID={0}, performing failover or reconnection now
AMQ214027 DEBUG Replaying commands for channelID={0} with lastCommandID from the server={1}
AMQ214028 DEBUG Couldn't reattach session {0}, performing as a failover operation now and recreating objects
AMQ214029 ERROR Unexpected response from HTTP server: %s
AMQ214030 ERROR Failed to bind {0}={1}
AMQ214031 ERROR Failed to decode buffer, disconnect immediately.
AMQ214032 ERROR Unable to initialize VersionLoader
AMQ214033 ERROR Cannot resolve host
AMQ221000 INFO {0} Message Broker is starting with configuration {1}
AMQ221001 INFO Apache ActiveMQ Artemis Message Broker version {0} [{1}, nodeID={2}] {3}
AMQ221002 INFO Apache ActiveMQ Artemis Message Broker version {0} [{1}] stopped, uptime {2}
AMQ221003 INFO Deploying {2} queue {0} on address {1}
AMQ221004 INFO {0}
AMQ221005 INFO Deleting pending large message as it was not completed: {0}
AMQ221006 INFO Waiting to obtain live lock
AMQ221007 INFO Server is now live
AMQ221008 INFO live server wants to restart, restarting server in backup
AMQ221010 INFO Backup Server is now live
AMQ221011 INFO Server {0} is now live
AMQ221012 INFO Using AIO Journal
AMQ221013 INFO Using NIO Journal
AMQ221014 INFO {0}% loaded
AMQ221015 INFO Can not find queue {0} while reloading ACKNOWLEDGE_CURSOR, deleting record now
AMQ221016 INFO Can not find queue {0} while reloading PAGE_CURSOR_COUNTER_VALUE, deleting record now
AMQ221017 INFO Can not find queue {0} while reloading PAGE_CURSOR_COUNTER_INC, deleting record now
AMQ221018 INFO Large message: {0} did not have any associated reference, file will be deleted
AMQ221019 INFO Deleting unreferenced message id={0} from the journal
AMQ221020 INFO Started {0} Acceptor at {1}:{2,number,#} for protocols [{3}]
AMQ221021 INFO failed to remove connection
AMQ221022 INFO unable to start connector service: {0}
AMQ221023 INFO unable to stop connector service: {0}
AMQ221024 INFO Backup server {0} is synchronized with live server, nodeID={1}.
AMQ221025 INFO Replication: sending {0} (size={1}) to replica.
AMQ221026 INFO Bridge {0} connected to forwardingAddress={1}. {2} does not have any bindings. Messages will be ignored until a binding is created.
AMQ221027 INFO Bridge {0} is connected
AMQ221028 INFO Bridge is stopping, will not retry
AMQ221029 INFO stopped bridge {0}
AMQ221030 INFO paused bridge {0}
AMQ221031 INFO backup announced
AMQ221032 INFO Waiting to become backup node
AMQ221033 INFO ** got backup lock
AMQ221034 INFO Waiting {0} to obtain live lock
AMQ221035 INFO Live Server Obtained live lock
AMQ221036 INFO Message with duplicate ID {0} was already set at {1}. Move from {2} being ignored and message removed from {3}
AMQ221037 INFO {0} to become ''live''
AMQ221038 INFO Configuration option ''{0}'' is deprecated. Consult the manual for details.
AMQ221039 INFO Restarting as Replicating backup server after live restart
AMQ221040 INFO Remote group coordinators has not started.
AMQ221041 INFO Cannot find queue {0} while reloading PAGE_CURSOR_COMPLETE, deleting record now
AMQ221042 INFO Bridge {0} timed out waiting for the completion of {1} messages, we will just shutdown the bridge after 10 seconds wait
AMQ221043 INFO Protocol module found: [{1}]. Adding protocol support for: {0}
AMQ221045 INFO libaio is not available, switching the configuration into NIO
AMQ221046 INFO Unblocking message production on address ''{0}''; {1}
AMQ221047 INFO Backup Server has scaled down to live server
AMQ221048 INFO Consumer {0}:{1} attached to queue ''{2}'' from {3} identified as ''slow.'' Expected consumption rate: {4} msgs/second; actual consumption rate: {5} msgs/second.
AMQ221049 INFO Activating Replica for node: {0}
AMQ221050 INFO Activating Shared Store Slave
AMQ221051 INFO Populating security roles from LDAP at: {0}
AMQ221052 INFO Deploying topic {0}
AMQ221053 INFO Disallowing use of vulnerable protocol ''{0}'' on acceptor ''{1}''. See http://www.oracle.com/technetwork/topics/security/poodlecve-2014-3566-2339408.html for more details.
AMQ221054 INFO libaio was found but the filesystem does not support AIO. Switching the configuration into NIO. Journal path: {0}
AMQ221055 INFO There were too many old replicated folders upon startup, removing {0}
AMQ221056 INFO Reloading configuration: {0}
AMQ221057 INFO Global Max Size is being adjusted to 1/2 of the JVM max size (-Xmx). being defined as {0}
AMQ221058 INFO resetting Journal File size from {0} to {1} to fit with alignment of {2}
AMQ221059 INFO Deleting old data directory {0} as the max folders is set to 0
AMQ221060 INFO Sending quorum vote request to {0}: {1}
AMQ221061 INFO Received quorum vote response from {0}: {1}
AMQ221062 INFO Received quorum vote request: {0}
AMQ221063 INFO Sending quorum vote response: {0}
AMQ221064 INFO Node {0} found in cluster topology
AMQ221065 INFO Node {0} not found in cluster topology
AMQ221066 INFO Initiating quorum vote: {0}
AMQ221067 INFO Waiting {0} {1} for quorum vote results.
AMQ221068 INFO Received all quorum votes.
AMQ221069 INFO Timeout waiting for quorum vote responses.
AMQ221070 INFO Restarting as backup based on quorum vote results.
AMQ221071 INFO Failing over based on quorum vote results.
AMQ221072 INFO Can't find roles for the subject.
AMQ221073 INFO Can't add role principal.
AMQ221074 INFO Debug started : size = {0} bytes, messages = {1}
AMQ221075 INFO Usage of wildcardRoutingEnabled configuration property is deprecated, please use wildCardConfiguration.enabled instead
AMQ221076 INFO {0}
AMQ221077 INFO There is no queue with ID {0}, deleting record {1}
AMQ221078 INFO Scaled down {0} messages total.
AMQ221079 INFO Ignoring prepare on xid as already called : {0}
AMQ221080 INFO Deploying address {0} supporting {1}
AMQ221081 INFO There is no address with ID {0}, deleting record {1}
AMQ221082 INFO Initializing metrics plugin {0} with properties: {1}
AMQ221083 INFO ignoring quorum vote as max cluster size is {0}.
AMQ221084 INFO Requested {0} quorum votes
AMQ221085 INFO Route {0} to {1}
AMQ221086 INFO Cannot route {0}
AMQ221109 INFO Apache ActiveMQ Artemis Backup Server version {0} [{1}] started, waiting live to fail before it gets active
AMQ222000 WARN ActiveMQServer is being finalized and has not been stopped. Please remember to stop the server before letting it go out of scope
AMQ222001 WARN Error closing sessions while stopping server
AMQ222002 WARN Timed out waiting for pool to terminate {0}. Interrupting all its threads!
AMQ222004 WARN Must specify an address for each divert. This one will not be deployed.
AMQ222005 WARN Must specify a forwarding address for each divert. This one will not be deployed.
AMQ222006 WARN Binding already exists with name {0}, divert will not be deployed
AMQ222007 WARN Security risk! Apache ActiveMQ Artemis is running with the default cluster admin user and default password. Please see the cluster chapter in the ActiveMQ Artemis User Guide for instructions on how to change this.
AMQ222008 WARN unable to restart server, please kill and restart manually
AMQ222009 WARN Unable to announce backup for replication. Trying to stop the server.
AMQ222010 ERROR Critical IO Error, shutting down the server. file={1}, message={0}
AMQ222011 WARN Error stopping server
AMQ222012 WARN Timed out waiting for backup activation to exit
AMQ222013 WARN Error when trying to start replication
AMQ222014 WARN Error when trying to stop replication
AMQ222016 WARN Cannot deploy a connector with no name specified.
AMQ222017 WARN There is already a connector with name {0} deployed. This one will not be deployed.
AMQ222018 WARN AIO was not located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal
AMQ222019 WARN There is already a discovery group with name {0} deployed. This one will not be deployed.
AMQ222020 WARN error scanning for URL''s
AMQ222021 WARN problem undeploying {0}
AMQ222022 WARN Timed out waiting for paging cursor to stop {0}
AMQ222023 WARN problem cleaning page address {0}
AMQ222024 WARN Could not complete operations on IO context {0}
AMQ222025 WARN Problem cleaning page subscription counter
AMQ222026 WARN Error on cleaning up cursor pages
AMQ222027 WARN Timed out flushing executors for paging cursor to stop {0}
AMQ222028 WARN Could not find page cache for page {0}, on queue {1}/{2} removing it from the journal
AMQ222029 WARN Could not locate page transaction {0}, ignoring message on position {1} on address={2} queue={3}
AMQ222030 WARN File {0} being renamed to {1}.invalidPage as it was loaded partially. Please verify your data.
AMQ222031 WARN Error while deleting page file
AMQ222032 WARN page finalise error
AMQ222033 WARN Page file {0} had incomplete records at position {1} at record number {2}
AMQ222034 WARN Can not delete page transaction id={0}
AMQ222035 WARN Directory {0} did not have an identification file {1}
AMQ222036 WARN Timed out on waiting PagingStore {0} to shutdown
AMQ222037 WARN IO Error, impossible to start paging
AMQ222038 INFO Starting paging on address ''{0}''; {1}
AMQ222039 WARN Messages sent to address ''{0}'' are being dropped; {1}
AMQ222040 WARN Server is stopped
AMQ222041 WARN Cannot find queue {0} to update delivery count
AMQ222042 WARN Cannot find message {0} to update delivery count
AMQ222043 WARN Message for queue {0} which does not exist. This message will be ignored.
AMQ222044 WARN It was not possible to delete message {0}
AMQ222045 WARN Message in prepared tx for queue {0} which does not exist. This message will be ignored.
AMQ222046 WARN Failed to remove reference for {0}
AMQ222047 WARN Can not find queue {0} while reloading ACKNOWLEDGE_CURSOR
AMQ222048 WARN PAGE_CURSOR_COUNTER_VALUE record used on a prepared statement, invalid state
AMQ222049 WARN InternalError: Record type {0} not recognized. Maybe you are using journal files created on a different version
AMQ222050 WARN Can not locate recordType={0} on loadPreparedTransaction//deleteRecords
AMQ222051 WARN Journal Error
AMQ222052 WARN error incrementing delay detection
AMQ222053 WARN Error on copying large message {0} for DLA or Expiry
AMQ222054 WARN Error on executing IOCallback
AMQ222055 WARN Error on deleting duplicate cache
AMQ222056 WARN Did not route to any bindings for address {0} and sendToDLAOnNoRoute is true but there is no DLA configured for the address, the message will be ignored.
AMQ222057 WARN It was not possible to add references due to an IO error code {0} message = {1}
AMQ222059 WARN Duplicate message detected - message will not be routed. Message information: {0}
AMQ222060 WARN Error while confirming large message completion on rollback for recordID={0}
AMQ222061 WARN Client connection failed, clearing up resources for session {0}
AMQ222062 WARN Cleared up resources for session {0}
AMQ222063 WARN Error processing IOCallback code = {0} message = {1}
AMQ222065 DEBUG Client is not being consistent on the request versioning. It just sent a version id={0} while it informed {1} previously
AMQ222066 WARN Reattach request from {0} failed as there is no confirmationWindowSize configured, which may be ok for your system
AMQ222067 WARN Connection failure has been detected: {0} [code={1}]
AMQ222069 WARN error cleaning up stomp connection
AMQ222070 WARN Stomp Transactional acknowledgement is not supported
AMQ222071 WARN Interrupted while waiting for stomp heartbeat to die
AMQ222072 WARN Timed out flushing channel on InVMConnection
AMQ222075 WARN {0} is still connected to {1}
AMQ222076 WARN channel group did not completely unbind
AMQ222077 WARN {0} is still bound to {1}
AMQ222078 WARN Error instantiating remoting interceptor {0}
AMQ222079 WARN The following keys are invalid for configuring the acceptor: {0} the acceptor will not be started.
AMQ222080 WARN Error instantiating remoting acceptor {0}
AMQ222081 WARN Timed out waiting for remoting thread pool to terminate
AMQ222082 WARN error on connection failure check
AMQ222083 WARN The following keys are invalid for configuring the connector service: {0} the connector will not be started.
AMQ222084 WARN The following keys are required for configuring the connector service: {0} the connector will not be started.
AMQ222085 WARN Packet {0} can not be processed by the ReplicationEndpoint
AMQ222086 WARN error handling packet {0} for replication
AMQ222087 WARN Replication Error while closing the page on backup
AMQ222088 WARN Journal comparison mismatch: {0}
AMQ222089 WARN Replication Error deleting large message ID = {0}
AMQ222090 WARN Replication Large MessageID {0} is not available on backup server. Ignoring replication message
AMQ222091 WARN The backup node has been shut-down, replication will now stop
AMQ222092 WARN Connection to the backup node failed, removing replication now
AMQ222093 WARN Timed out waiting to stop Bridge
AMQ222094 WARN Bridge unable to send message {0}, will try again once bridge reconnects
AMQ222095 WARN Connection failed with failedOver={0}
AMQ222096 WARN Error on querying binding on bridge {0}. Retrying in 100 milliseconds
AMQ222097 WARN Address {0} does not have any bindings, retry #({1})
AMQ222098 WARN Server is starting, retry to create the session for bridge {0}
AMQ222099 WARN Bridge {0} is unable to connect to destination. It will be disabled.
AMQ222100 WARN ServerLocator was shutdown, can not retry on opening connection for bridge
AMQ222101 WARN Bridge {0} achieved {1} maxattempts={2} it will stop retrying to reconnect
AMQ222102 WARN Unexpected exception while trying to reconnect
AMQ222103 WARN transaction with xid {0} timed out
AMQ222104 WARN IO Error completing the transaction, code = {0}, message = {1}
AMQ222106 WARN Replacing incomplete LargeMessage with ID={0}
AMQ222107 WARN Cleared up resources for session {0}
AMQ222108 WARN unable to send notification when broadcast group is stopped
AMQ222109 WARN Timed out waiting for write lock on consumer {0} from {1}. Check the Thread dump
AMQ222110 WARN no queue IDs defined!, originalMessage = {0}, copiedMessage = {1}, props={2}
AMQ222111 TRACE exception while invoking {0} on {1}
AMQ222112 WARN exception while retrieving attribute {0} on {1}
AMQ222113 WARN On ManagementService stop, there are {0} unexpected registered MBeans: {1}
AMQ222114 WARN Unable to delete group binding info {0}
AMQ222115 WARN Error closing serverLocator={0}
AMQ222116 WARN unable to start broadcast group {0}
AMQ222117 WARN unable to start cluster connection {0}
AMQ222118 WARN unable to start Bridge {0}
AMQ222119 WARN No connector with name {0}. backup cannot be announced.
AMQ222120 WARN no cluster connections defined, unable to announce backup
AMQ222121 WARN Must specify a unique name for each bridge. This one will not be deployed.
AMQ222122 WARN Must specify a queue name for each bridge. This one {0} will not be deployed.
AMQ222123 WARN Forward address is not specified on bridge {0}. Will use original message address instead
AMQ222124 WARN There is already a bridge with name {0} deployed. This one will not be deployed.
AMQ222125 WARN No queue found with name {0} bridge {1} will not be deployed.
AMQ222126 WARN No discovery group found with name {0} bridge will not be deployed.
AMQ222127 WARN Must specify a unique name for each cluster connection. This one will not be deployed.
AMQ222128 WARN Must specify an address for each cluster connection. This one will not be deployed.
AMQ222129 WARN No connector with name {0}. The cluster connection will not be deployed.
AMQ222130 WARN Cluster Configuration {0} already exists. The cluster connection will not be deployed.
AMQ222131 WARN No discovery group with name {0}. The cluster connection will not be deployed.
AMQ222132 WARN There is already a broadcast-group with name {0} deployed. This one will not be deployed.
AMQ222133 WARN There is no connector deployed with name {0}. The broadcast group with name {1} will not be deployed.
AMQ222134 WARN No connector defined with name {0}. The bridge will not be deployed.
AMQ222135 WARN Stopping Redistributor, Timed out waiting for tasks to complete
AMQ222136 WARN IO Error during redistribution, errorCode = {0} message = {1}
AMQ222137 WARN Unable to announce backup, retrying
AMQ222138 WARN Local Member is not set at on ClusterConnection {0}
AMQ222139 WARN {0}::Remote queue binding {1} has already been bound in the post office. Most likely cause for this is you have a loop in your cluster due to cluster max-hops being too large or you have multiple cluster connections to the same nodes using overlapping addresses
AMQ222141 WARN Node Manager can not open file {0}
AMQ222142 WARN Error on resetting large message deliver - {0}
AMQ222143 WARN Timed out waiting for executor to complete
AMQ222144 WARN Queue could not finish waiting executors. Try increasing the thread pool size
AMQ222145 WARN Error expiring reference {0} on queue
AMQ222146 WARN Message has expired. No bindings for Expiry Address {0} so dropping it
AMQ222147 WARN Messages are being expired on queue {0}, but there is no Expiry Address configured so messages will be dropped.
AMQ222148 WARN Message {0} has exceeded max delivery attempts. No bindings for Dead Letter Address {1} so dropping it
AMQ222149 WARN Message {0} has reached maximum delivery attempts, sending it to Dead Letter Address {1} from {2}
AMQ222150 WARN Message {0} has exceeded max delivery attempts. No Dead Letter Address configured for queue {1} so dropping it
AMQ222151 WARN removing consumer which did not handle a message, consumer={0}, message={1}
AMQ222152 WARN Unable to decrement reference counting on queue
AMQ222153 WARN Cannot locate record for message id = {0} on Journal
AMQ222154 WARN Error checking DLQ
AMQ222155 WARN Failed to register as backup. Stopping the server.
AMQ222156 WARN Less than {0}% {1} You are in danger of running out of RAM. Have you set paging parameters on your addresses? (See user manual "Paging" chapter)
AMQ222157 WARN Error completing callback on replication manager
AMQ222158 WARN {0} activation thread did not finish.
AMQ222159 WARN unable to send notification when broadcast group is stopped
AMQ222160 WARN unable to send notification when broadcast group is stopped
AMQ222161 WARN Group Handler timed-out waiting for sendCondition
AMQ222162 INFO Moving data directory {0} to {1}
AMQ222163 WARN Server is being completely stopped, since this was a replicated backup there may be journal files that need cleaning up. The Apache ActiveMQ Artemis broker will have to be manually restarted.
AMQ222164 WARN Error when trying to start replication {0}
AMQ222165 WARN No Dead Letter Address configured for queue {0} in AddressSettings
AMQ222166 WARN No Expiry Address configured for queue {0} in AddressSettings
AMQ222167 WARN Group Binding not available so deleting {0} groups from {1}, groups will be bound to another node
AMQ222168 WARN The ''protocol'' property is deprecated. If you want this Acceptor to support multiple protocols, use the ''protocols'' property, e.g. with value ''CORE,AMQP,STOMP''
AMQ222169 WARN You have old legacy clients connected to the queue {0} and we can''t disconnect them, these clients may just hang
AMQ222170 WARN Bridge {0} forwarding address {1} has confirmation-window-size ({2}) greater than address'' max-size-bytes'' ({3})
AMQ222171 WARN Bridge {0} forwarding address {1} could not be resolved on address-settings configuration
AMQ222172 WARN Queue {0} was busy for more than {1} milliseconds. There are possibly consumers hanging on a network operation
AMQ222173 WARN Queue {0} is duplicated during reload. This queue will be renamed as {1}
AMQ222174 WARN Queue {0}, on address={1}, is taking too long to flush deliveries. Watch out for frozen clients.
AMQ222175 WARN Bridge {0} could not find configured connectors
AMQ222176 WARN A session that was already doing XA work on {0} is replacing the xid by {1} . This was most likely caused from a previous communication timeout
AMQ222177 WARN Wrong configuration for role, {0} is not a valid permission
AMQ222178 WARN Error during recovery of page counters
AMQ222181 WARN Unable to scaleDown messages
AMQ222182 WARN Missing cluster-configuration for scale-down-clustername {0}
AMQ222183 WARN Blocking message production on address ''{0}''; {1}
AMQ222184 WARN Unable to recover group bindings in SCALE_DOWN mode, only FULL backup server can do this
AMQ222185 WARN no cluster connection for specified replication cluster
AMQ222186 WARN unable to authorise cluster control: {0}
AMQ222187 WARN Failed to activate replicated backup
AMQ222188 WARN Unable to find target queue for node {0}
AMQ222189 WARN Failed to activate shared store slave
AMQ222191 WARN Could not find any configured role for user {0}.
AMQ222192 WARN Could not delete: {0}
AMQ222193 WARN Memory Limit reached. Producer ({0}) stopped to prevent flooding {1} (blocking for {2}s). See http://activemq.apache.org/producer-flow-control.html for more info.
AMQ222194 WARN PageCursorInfo == null on address {0}, pos = {1}, queue = {2}.
AMQ222195 WARN Large message {0} wasn''t found when dealing with add pending large message
AMQ222196 WARN Could not find binding with id={0} on routeFromCluster for message={1} binding = {2}
AMQ222197 WARN Internal error! Delivery logic has identified a non delivery and still handled a consumer!
AMQ222198 WARN Could not flush ClusterManager executor ({0}) in 10 seconds, verify your thread pool size
AMQ222199 WARN Thread dump: {0}
AMQ222200 WARN Could not finish executor on {0}
AMQ222201 WARN Timed out waiting for activation to exit
AMQ222202 WARN {0}: <{1}> should not be set to the same value as <{2}>. If a system is under high load, or there is a minor network delay, there is a high probability of a cluster split/failure due to connection timeout.
AMQ222203 WARN Classpath lacks a protocol-manager for protocol {0}, Protocol being ignored on acceptor {1}
AMQ222204 WARN Duplicated Acceptor {0} with parameters {1} classFactory={2} duplicated on the configuration
AMQ222205 WARN OutOfMemoryError possible! There are currently {0} addresses with a total max-size-bytes of {1} bytes, but the maximum memory available is {2} bytes.
AMQ222206 WARN Connection limit of {0} reached. Refusing connection from {1}.
AMQ222207 WARN The backup server is not responding promptly introducing latency beyond the limit. Replication server being disconnected now.
AMQ222208 WARN SSL handshake failed for client from {0}: {1}.
AMQ222209 WARN Could not contact group handler coordinator after 10 retries, message being routed without grouping information
AMQ222210 WARN Free storage space is at {0} of {1} total. Usage rate is {2} which is beyond the configured . System will start blocking producers.
AMQ222211 INFO Free storage space is at {0} of {1} total. Usage rate is {2} which is below the configured .
AMQ222212 WARN Disk Full! Blocking message production on address ''{0}''. Clients will report blocked.
AMQ222213 WARN There was an issue on the network, server is isolated!
AMQ222214 WARN Destination {1} has an inconsistent and negative address size={0}.
AMQ222215 WARN Global Address Size has negative and inconsistent value as {0}
AMQ222216 WARN Security problem while authenticating: {0}
AMQ222217 WARN Cannot find connector-ref {0}. The cluster-connection {1} will not be deployed.
AMQ222218 WARN Server disconnecting: {0}
AMQ222219 WARN File {0} does not exist
AMQ222220 WARN Error while cleaning paging on queue {0}
AMQ222221 WARN Error while cleaning page, during the commit
AMQ222222 WARN Error while deleting page-complete-record
AMQ222223 WARN Failed to calculate message memory estimate
AMQ222224 WARN Failed to calculate scheduled delivery time
AMQ222225 WARN Sending unexpected exception to the client
AMQ222226 WARN Connection configuration is null for connectorName {0}
AMQ222227 WARN Failed to process an event
AMQ222228 WARN Missing replication token on queue
AMQ222229 WARN Failed to perform rollback
AMQ222230 WARN Failed to send notification
AMQ222231 WARN Failed to flush outstanding data from the connection
AMQ222232 WARN Unable to acquire lock
AMQ222233 WARN Unable to destroy connection with session metadata
AMQ222234 WARN Unable to invoke a callback
AMQ222235 WARN Unable to inject a monitor
AMQ222236 WARN Unable to flush deliveries
AMQ222237 WARN Unable to stop redistributor
AMQ222238 WARN Unable to commit transaction
AMQ222239 WARN Unable to delete Queue status
AMQ222240 WARN Unable to pause a Queue
AMQ222241 WARN Unable to resume a Queue
AMQ222242 WARN Unable to obtain message priority, using default
AMQ222243 WARN Unable to extract GroupID from message
AMQ222244 WARN Unable to check if message expired
AMQ222245 WARN Unable to perform post acknowledge
AMQ222246 WARN Unable to rollback on close
AMQ222247 WARN Unable to close consumer
AMQ222248 WARN Unable to remove consumer
AMQ222249 WARN Unable to rollback on TX timed out
AMQ222250 WARN Unable to delete heuristic completion from storage manager
AMQ222251 WARN Unable to start replication
AMQ222252 WARN Unable to calculate file size
AMQ222253 WARN Error while syncing data on largeMessageInSync:: {0}
AMQ222254 WARN Invalid record type {0}
AMQ222255 WARN Unable to calculate file store usage
AMQ222256 WARN Failed to unregister acceptors
AMQ222257 WARN Failed to decrement message reference count
AMQ222258 WARN Error on deleting queue {0}
AMQ222259 WARN Failed to flush the executor
AMQ222260 WARN Failed to perform rollback
AMQ222261 WARN Failed to activate a backup
AMQ222262 WARN Failed to stop cluster manager
AMQ222263 WARN Failed to stop cluster connection
AMQ222264 WARN Failed to process message reference after rollback
AMQ222265 WARN Failed to finish delivery, unable to lock delivery
AMQ222266 WARN Failed to send request to the node
AMQ222267 WARN Failed to disconnect bindings
AMQ222268 WARN Failed to remove a record
AMQ222269 WARN Please use a fixed value for "journal-pool-files". Default changed per https://issues.apache.org/jira/browse/ARTEMIS-1628
AMQ222270 WARN Unable to create management notification address: {0}
AMQ222274 WARN Failed to deploy address {0}: {1}
AMQ222275 WARN Failed to deploy queue {0}: {1}
AMQ222276 WARN Failed to process changes to the logging configuration file: {0}
AMQ222277 WARN Problem initializing automatic logging configuration reload for {0}
AMQ222278 WARN Unable to extract GroupSequence from message
AMQ222279 WARN Federation upstream {0} policy ref {1} could not be resolved in federation configuration
AMQ222280 WARN Federation upstream {0} policy ref {1} is of unknown type in federation configuration
AMQ222281 WARN Federation upstream {0} policy ref {1} are too self referential, avoiding stack overflow ,
AMQ222282 WARN Federation downstream {0} upstream transport configuration ref {1} could not be resolved in federation configuration
AMQ222283 INFO Federation downstream {0} has been deployed
AMQ222284 INFO Federation downstream {0} has been undeployed
AMQ222285 WARN File {0} at {1} is empty. Delete the empty file to stop this message.
AMQ222286 WARN Error executing {0} federation plugin method.
AMQ222287 WARN Error looking up bindings for address {}.
AMQ222288 WARN Page {0}, message {1} could not be found on offset {2}, with starting message {3}. This represents a logic error or inconsistency on the data, and the system will try once again from the beggining of the page file.
AMQ222289 WARN Did not route to any matching bindings on dead-letter-address {0} and auto-create-dead-letter-resources is true; dropping message: {1}
AMQ222290 WARN Failed to find cluster-connection when handling cluster-connect packet. Ignoring: {0}
AMQ222291 WARN The metrics-plugin element is deprecated and replaced by the metrics element
AMQ222292 WARN The metrics-plugin element is ignored because the metrics element is defined
AMQ222294 WARN There is a possible split brain on nodeID {0}, coming from connectors {1}. Topology update ignored.
AMQ222295 WARN There is a possible split brain on nodeID {0}. Topology update ignored
AMQ222296 WARN Unable to deploy Hawtio MBeam, console client side RBAC not available
AMQ222297 WARN Unable to start Management Context, RBAC not available
AMQ222298 WARN Failed to create bootstrap user "{0}". User management may not function.
AMQ222299 WARN No bootstrap credentials found. User management may not function.
AMQ222300 WARN Getting SSL handler failed when serving client from {0}: {1}.
AMQ222301 WARN Duplicate address-setting match found: {0}. These settings will be ignored! Please review your broker.xml and consolidate any duplicate address-setting elements.
AMQ222302 WARN Failed to deal with property {0} when converting message from core to OpenWire: {1}
AMQ222303 WARN Redistribution by {0} of messageID = {1} failed
AMQ222304 WARN Unable to load message from journal
AMQ222305 WARN Error federating message {0}.
AMQ222306 WARN Failed to load prepared TX and it will be rolled back: {0}
AMQ222307 WARN The queues element is deprecated and replaced by the addresses element
AMQ222308 WARN Unable to listen for incoming fail-back request because {0} is null. Ensure the broker has the proper cluster-connection configuration.
AMQ223000 DEBUG Received Interrupt Exception whilst waiting for component to shutdown: {0}
AMQ223001 DEBUG Ignored quorum vote due to quorum reached or vote casted: {0}
AMQ224000 ERROR Failure in initialisation
AMQ224001 ERROR Error deploying URI {0}
AMQ224002 ERROR Error deploying URI
AMQ224003 ERROR Error undeploying URI {0}
AMQ224005 ERROR Unable to deploy node {0}
AMQ224006 ERROR Invalid filter: {0}
AMQ224007 ERROR page subscription = {0} error={1}
AMQ224008 ERROR Failed to store id
AMQ224009 ERROR Cannot find message {0}
AMQ224010 ERROR Cannot find queue messages for queueID={0} on ack for messageID={1}
AMQ224011 ERROR Cannot find queue messages {0} for message {1} while processing scheduled messages
AMQ224012 ERROR error releasing resources
AMQ224014 ERROR Failed to close session
AMQ224015 ERROR Caught XA exception
AMQ224016 ERROR Caught exception
AMQ224017 ERROR Invalid packet {0}
AMQ224018 ERROR Failed to create session
AMQ224019 ERROR Failed to reattach session
AMQ224020 ERROR Failed to handle create queue
AMQ224021 ERROR Failed to decode packet
AMQ224022 ERROR Failed to execute failure listener
AMQ224024 ERROR Stomp Error, tx already exist! {0}
AMQ224027 ERROR Failed to write to handler on invm connector {0}
AMQ224028 ERROR Failed to stop acceptor {0}
AMQ224029 ERROR large message sync: largeMessage instance is incompatible with it, ignoring data
AMQ224030 ERROR Could not cancel reference {0}
AMQ224032 ERROR Failed to pause bridge
AMQ224033 ERROR Failed to broadcast connector configs
AMQ224034 ERROR Failed to close consumer
AMQ224035 ERROR Failed to close cluster connection flow record
AMQ224036 ERROR Failed to update cluster connection topology
AMQ224037 ERROR cluster connection Failed to handle message
AMQ224038 ERROR Failed to ack old reference
AMQ224039 ERROR Failed to expire message reference
AMQ224040 ERROR Failed to remove consumer
AMQ224041 ERROR Failed to deliver
AMQ224042 ERROR Error while restarting the backup server: {0}
AMQ224043 ERROR Failed to send forced delivery message
AMQ224044 ERROR error acknowledging message
AMQ224045 ERROR Failed to run large message deliverer
AMQ224046 ERROR Exception while browser handled from {0}
AMQ224047 ERROR Failed to delete large message file
AMQ224048 ERROR Failed to remove temporary queue {0}
AMQ224049 ERROR Cannot find consumer with id {0}
AMQ224050 ERROR Failed to close connection {0}
AMQ224051 ERROR Failed to call notification listener
AMQ224052 ERROR Unable to call Hierarchical Repository Change Listener
AMQ224053 ERROR failed to timeout transaction, xid:{0}
AMQ224054 ERROR exception while stopping the replication manager
AMQ224055 ERROR Bridge Failed to ack
AMQ224056 ERROR Live server will not fail-back automatically
AMQ224057 ERROR Backup server that requested fail-back was not announced. Server will not stop for fail-back.
AMQ224058 ERROR Stopping ClusterManager. As it failed to authenticate with the cluster: {0}
AMQ224059 ERROR Invalid cipher suite specified. Supported cipher suites are: {0}
AMQ224060 ERROR Invalid protocol specified. Supported protocols are: {0}
AMQ224061 ERROR Setting both <{0}> and is invalid. Please use exclusively as <{0}> is deprecated. Ignoring <{0}> value.
AMQ224062 ERROR Failed to send SLOW_CONSUMER notification: {0}
AMQ224063 ERROR Failed to close consumer connections for address {0}
AMQ224064 ERROR Setting <{0}> is invalid with this HA Policy Configuration. Please use exclusively or remove. Ignoring <{0}> value.
AMQ224065 ERROR Failed to remove auto-created {1} {0}
AMQ224066 ERROR Error opening context for LDAP
AMQ224067 ERROR Error populating security roles from LDAP
AMQ224068 ERROR Unable to stop component: {0}
AMQ224069 ERROR Change detected in broker configuration file, but reload failed
AMQ224072 WARN Message Counter Sample Period too short: {0}
AMQ224073 INFO Using MAPPED Journal
AMQ224074 ERROR Failed to purge queue {0} on no consumers
AMQ224075 ERROR Cannot find pageTX id = {0}
AMQ224076 INFO Undeploying address {0}
AMQ224077 INFO Undeploying queue {0}
AMQ224078 WARN The size of duplicate cache detection () appears to be too large {0}. It should be no greater than the number of messages that can be squeezed into confirmation window buffer () {1}.
AMQ224079 ERROR The process for the virtual machine will be killed, as component {0} is not responsive
AMQ224080 ERROR The server process will now be stopped, as component {0} is not responsive
AMQ224081 WARN The component {0} is not responsive
AMQ224082 ERROR Failed to invoke an interceptor
AMQ224083 ERROR Failed to close context
AMQ224084 ERROR Failed to open context
AMQ224085 ERROR Failed to load property {0}, reason: {1}
AMQ224086 ERROR Caught unexpected exception
AMQ224087 ERROR Error announcing backup: backupServerLocator is null. {0}
AMQ224088 ERROR Timeout ({0} seconds) on acceptor "{1}" during protocol handshake with {2} has occurred.
AMQ224089 WARN Failed to calculate persistent size
AMQ224090 WARN This node is not configured for Quorum Voting, all nodes must be configured for HA
AMQ224091 WARN Bridge {0} is unable to connect to destination. Retrying
AMQ224092 INFO Despite disabled persistence, page files will be persisted.
AMQ224093 ERROR Reference to message is null
AMQ224094 TRACE Quorum vote result await is interrupted
AMQ224095 ERROR Error updating Consumer Count: {0}
AMQ224096 ERROR Error setting up connection from {0} to {1}; protocol {2} not found in map: {3}
AMQ224097 ERROR Failed to start server
AMQ224098 INFO Received a vote saying the backup is live with connector: {0}
AMQ224099 WARN Message with ID {0} has a header too large. More information available on debug level for class {1}
AMQ224100 INFO Timed out waiting for large messages deletion with IDs {0}, might not be deleted if broker crashes atm
AMQ224101 WARN Apache ActiveMQ Artemis is using a scheduled pool without remove on cancel policy, so a cancelled task could be not automatically removed from the work queue, it may also cause unbounded retention of cancelled tasks.
AMQ224102 INFO unable to undeploy address {0} : reason {1}
AMQ224103 INFO unable to undeploy queue {0} : reason {1}
AMQ224104 ERROR Error starting the Acceptor {0} {1}
AMQ224105 WARN Connecting to cluster failed
AMQ224106 ERROR failed to remove transaction, xid:{0}
AMQ224107 INFO The Critical Analyzer detected slow paths on the broker. It is recommended that you enable trace logs on org.apache.activemq.artemis.utils.critical while you troubleshoot this issue. You should disable the trace logs when you have finished troubleshooting.
AMQ224108 INFO Stopped paging on address ''{0}''; {1}
AMQ224109 WARN ConnectionRouter {0} not found
AMQ224110 WARN Configuration 'whitelist' is deprecated, please use the 'allowlist' configuration
AMQ224111 WARN Both 'whitelist' and 'allowlist' detected. Configuration 'whitelist' is deprecated, please use only the 'allowlist' configuration
AMQ224112 INFO Auto removing Queue {0} with queueID={1} on address={2}
AMQ224113 INFO Auto removing Address {0}
AMQ224114 INFO Address control block, blocking message production on address ''{0}''. Clients will not get further credit.
AMQ224115 INFO Address control unblock of address ''{0}''. Clients will be granted credit as normal.
AMQ224116 WARN The component {0} is not responsive during start up. The Server may be taking too long to start
AMQ224117 INFO "page-max-cache-size" being used on broker.xml. This configuration attribute is no longer used and it will be ignored.
AMQ332068 WARN connection closed {0}
AMQ332069 WARN Sent ERROR frame to STOMP client {0}: {1}
AMQ334023 ERROR Unable to send frame {0}
AMQ341000 INFO Failed to set up JMS bridge {1} connections. Most probably the source or target servers are unavailable. Will retry after a pause of {0} ms
AMQ341001 INFO JMS Bridge {0} succeeded in reconnecting to servers
AMQ341002 INFO JMSBridge {0} succeeded in connecting to servers
AMQ342000 WARN Attempt to start JMS Bridge {0}, but is already started
AMQ342001 WARN Failed to start JMS Bridge {0}
AMQ342002 WARN Failed to unregisted JMS Bridge {0} - {1}
AMQ342003 WARN JMS Bridge {0} unable to set up connections, bridge will be stopped
AMQ342004 WARN JMS Bridge {1}, will retry after a pause of {0} ms
AMQ342005 WARN JMS Bridge {0} unable to set up connections, bridge will not be started
AMQ342006 WARN JMS Bridge {0}, detected failure on bridge connection
AMQ342009 WARN JMS Bridge {0} failed to send + acknowledge batch, closing JMS objects
AMQ342010 WARN Failed to connect JMS Bridge {0}
AMQ342011 WARN Transaction rolled back, retrying TX
AMQ344001 ERROR JMS Bridge {0}, failed to start source connection
AMQ344002 ERROR Failed to start JMS Bridge {1}. QoS Mode: {0} requires a Transaction Manager, none found
AMQ352000 WARN Attempted to locate a Transaction Manager but none found.
AMQ601000 INFO User {0} is getting routing type property on target resource: {1} {2}
AMQ601001 INFO User {0} is getting routing type property as json on target resource: {1} {2}
AMQ601002 INFO User {0} is getting queue names on target resource: {1} {2}
AMQ601003 INFO User {0} is getting binding names on target resource: {1} {2}
AMQ601004 INFO User {0} is getting roles on target resource: {1} {2}
AMQ601005 INFO User {0} is getting roles as json on target resource: {1} {2}
AMQ601006 INFO User {0} is getting number of bytes per page on target resource: {1} {2}
AMQ601007 INFO User {0} is getting address size on target resource: {1} {2}
AMQ601008 INFO User {0} is getting number of messages on target resource: {1} {2}
AMQ601009 INFO User {0} is getting isPaging on target resource: {1} {2}
AMQ601010 INFO User {0} is getting number of pages on target resource: {1} {2}
AMQ601011 INFO User {0} is getting routed message count on target resource: {1} {2}
AMQ601012 INFO User {0} is getting unrouted message count on target resource: {1} {2}
AMQ601013 INFO User {0} is sending a message on target resource: {1} {2}
AMQ601014 INFO User {0} is getting name on target resource: {1} {2}
AMQ601015 INFO User {0} is getting address on target resource: {1} {2}
AMQ601016 INFO User {0} is getting filter on target resource: {1} {2}
AMQ601017 INFO User {0} is getting durable property on target resource: {1} {2}
AMQ601018 INFO User {0} is getting message count on target resource: {1} {2}
AMQ601019 INFO User {0} is getting mbean info on target resource: {1} {2}
AMQ601020 INFO User {0} is getting factory class name on target resource: {1} {2}
AMQ601021 INFO User {0} is getting parameters on target resource: {1} {2}
AMQ601022 INFO User {0} is doing reload on target resource: {1} {2}
AMQ601023 INFO User {0} is querying isStarted on target resource: {1} {2}
AMQ601024 INFO User {0} is starting an acceptor on target resource: {1} {2}
AMQ601025 INFO User {0} is stopping an acceptor on target resource: {1} {2}
AMQ601026 INFO User {0} is getting version on target resource: {1} {2}
AMQ601027 INFO User {0} is querying isBackup on target resource: {1} {2}
AMQ601028 INFO User {0} is querying isSharedStore on target resource: {1} {2}
AMQ601029 INFO User {0} is getting bindings directory on target resource: {1} {2}
AMQ601030 INFO User {0} is getting incoming interceptor class names on target resource: {1} {2}
AMQ601031 INFO User {0} is getting outgoing interceptor class names on target resource: {1} {2}
AMQ601032 INFO User {0} is getting journal buffer size on target resource: {1} {2}
AMQ601033 INFO User {0} is getting journal buffer timeout on target resource: {1} {2}
AMQ601034 INFO User {0} is setting failover on server shutdown on target resource: {1} {2}
AMQ601035 INFO User {0} is querying is-failover-on-server-shutdown on target resource: {1} {2}
AMQ601036 INFO User {0} is getting journal's max io on target resource: {1} {2}
AMQ601037 INFO User {0} is getting journal directory on target resource: {1} {2}
AMQ601038 INFO User {0} is getting journal file size on target resource: {1} {2}
AMQ601039 INFO User {0} is getting journal min files on target resource: {1} {2}
AMQ601040 INFO User {0} is getting journal compact min files on target resource: {1} {2}
AMQ601041 INFO User {0} is getting journal compact percentage on target resource: {1} {2}
AMQ601042 INFO User {0} is querying persistence enabled on target resource: {1} {2}
AMQ601043 INFO User {0} is getting journal type on target resource: {1} {2}
AMQ601044 INFO User {0} is getting paging directory on target resource: {1} {2}
AMQ601045 INFO User {0} is getting scheduled threadpool max size on target resource: {1} {2}
AMQ601046 INFO User {0} is getting threadpool max size on target resource: {1} {2}
AMQ601047 INFO User {0} is getting security invalidation interval on target resource: {1} {2}
AMQ601048 INFO User {0} is querying is-clustered on target resource: {1} {2}
AMQ601049 INFO User {0} is querying is-create-bindings-dir on target resource: {1} {2}
AMQ601050 INFO User {0} is querying is-create-journal-dir on target resource: {1} {2}
AMQ601051 INFO User {0} is querying is-journal-sync-non-transactional on target resource: {1} {2}
AMQ601052 INFO User {0} is querying is-journal-sync-transactional on target resource: {1} {2}
AMQ601053 INFO User {0} is querying is-security-enabled on target resource: {1} {2}
AMQ601054 INFO User {0} is query is-async-connection-execution-enabled on target resource: {1} {2}
AMQ601055 INFO User {0} is getting disk scan period on target resource: {1} {2}
AMQ601056 INFO User {0} is getting max disk usage on target resource: {1} {2}
AMQ601057 INFO User {0} is getting global max size on target resource: {1} {2}
AMQ601058 INFO User {0} is getting address memory usage on target resource: {1} {2}
AMQ601059 INFO User {0} is getting address memory usage percentage on target resource: {1} {2}
AMQ601060 INFO User {0} is freezing replication on target resource: {1} {2}
AMQ601061 INFO User {0} is creating an address on target resource: {1} {2}
AMQ601062 INFO User {0} is updating an address on target resource: {1} {2}
AMQ601063 INFO User {0} is deleting an address on target resource: {1} {2}
AMQ601064 INFO User {0} is creating a queue on target resource: {1} {2}
AMQ601065 INFO User {0} is creating a queue on target resource: {1} {2}
AMQ601066 INFO User {0} is updating a queue on target resource: {1} {2}
AMQ601067 INFO User {0} is getting cluster connection names on target resource: {1} {2}
AMQ601068 INFO User {0} is getting uptime on target resource: {1} {2}
AMQ601069 INFO User {0} is getting uptime in milliseconds on target resource: {1} {2}
AMQ601070 INFO User {0} is querying is-replica-sync on target resource: {1} {2}
AMQ601071 INFO User {0} is getting address names on target resource: {1} {2}
AMQ601072 INFO User {0} is deleting a queue on target resource: {1} {2}
AMQ601073 INFO User {0} is getting address info on target resource: {1} {2}
AMQ601074 INFO User {0} is listing bindings for address on target resource: {1} {2}
AMQ601075 INFO User {0} is listing addresses on target resource: {1} {2}
AMQ601076 INFO User {0} is getting connection count on target resource: {1} {2}
AMQ601077 INFO User {0} is getting total connection count on target resource: {1} {2}
AMQ601078 INFO User {0} is getting total message count on target resource: {1} {2}
AMQ601079 INFO User {0} is getting total messages added on target resource: {1} {2}
AMQ601080 INFO User {0} is getting total messages acknowledged on target resource: {1} {2}
AMQ601081 INFO User {0} is getting total consumer count on target resource: {1} {2}
AMQ601082 INFO User {0} is enabling message counters on target resource: {1} {2}
AMQ601083 INFO User {0} is disabling message counters on target resource: {1} {2}
AMQ601084 INFO User {0} is resetting all message counters on target resource: {1} {2}
AMQ601085 INFO User {0} is resetting all message counter histories on target resource: {1} {2}
AMQ601086 INFO User {0} is querying is-message-counter-enabled on target resource: {1} {2}
AMQ601087 INFO User {0} is getting message counter sample period on target resource: {1} {2}
AMQ601088 INFO User {0} is setting message counter sample period on target resource: {1} {2}
AMQ601089 INFO User {0} is getting message counter max day count on target resource: {1} {2}
AMQ601090 INFO User {0} is setting message counter max day count on target resource: {1} {2}
AMQ601091 INFO User {0} is listing prepared transactions on target resource: {1} {2}
AMQ601092 INFO User {0} is listing prepared transaction details as json on target resource: {1} {2}
AMQ601093 INFO User {0} is listing prepared transaction details as HTML on target resource: {1} {2}
AMQ601094 INFO User {0} is listing heuristic committed transactions on target resource: {1} {2}
AMQ601095 INFO User {0} is listing heuristic rolled back transactions on target resource: {1} {2}
AMQ601096 INFO User {0} is commiting prepared transaction on target resource: {1} {2}
AMQ601097 INFO User {0} is rolling back prepared transaction on target resource: {1} {2}
AMQ601098 INFO User {0} is listing remote addresses on target resource: {1} {2}
AMQ601099 INFO User {0} is closing connections for address on target resource: {1} {2}
AMQ601100 INFO User {0} is closing consumer connections for address on target resource: {1} {2}
AMQ601101 INFO User {0} is closing connections for user on target resource: {1} {2}
AMQ601102 INFO User {0} is closing a connection by ID on target resource: {1} {2}
AMQ601103 INFO User {0} is closing session with id on target resource: {1} {2}
AMQ601104 INFO User {0} is closing consumer with id on target resource: {1} {2}
AMQ601105 INFO User {0} is listing connection IDs on target resource: {1} {2}
AMQ601106 INFO User {0} is listing sessions on target resource: {1} {2}
AMQ601107 INFO User {0} is listing producers info as json on target resource: {1} {2}
AMQ601108 INFO User {0} is listing connections on target resource: {1} {2}
AMQ601109 INFO User {0} is listing consumers on target resource: {1} {2}
AMQ601110 INFO User {0} is listing queues on target resource: {1} {2}
AMQ601111 INFO User {0} is listing producers on target resource: {1} {2}
AMQ601112 INFO User {0} is listing connections as json on target resource: {1} {2}
AMQ601113 INFO User {0} is listing sessions as json on target resource: {1} {2}
AMQ601114 INFO User {0} is listing all sessions as json on target resource: {1} {2}
AMQ601115 INFO User {0} is listing consumers as json on target resource: {1} {2}
AMQ601116 INFO User {0} is listing all consumers as json on target resource: {1} {2}
AMQ601117 INFO User {0} is getting connectors on target resource: {1} {2}
AMQ601118 INFO User {0} is getting connectors as json on target resource: {1} {2}
AMQ601119 INFO User {0} is adding security settings on target resource: {1} {2}
AMQ601120 INFO User {0} is removing security settings on target resource: {1} {2}
AMQ601121 INFO User {0} is getting address settings as json on target resource: {1} {2}
AMQ601122 INFO User {0} is adding addressSettings on target resource: {1} {2}
AMQ601123 INFO User {0} is removing address settings on target resource: {1} {2}
AMQ601124 INFO User {0} is getting divert names on target resource: {1} {2}
AMQ601125 INFO User {0} is creating a divert on target resource: {1} {2}
AMQ601126 INFO User {0} is destroying a divert on target resource: {1} {2}
AMQ601127 INFO User {0} is getting bridge names on target resource: {1} {2}
AMQ601128 INFO User {0} is creating a bridge on target resource: {1} {2}
AMQ601129 INFO User {0} is destroying a bridge on target resource: {1} {2}
AMQ601130 INFO User {0} is creating connector service on target resource: {1} {2}
AMQ601131 INFO User {0} is destroying connector service on target resource: {1} {2}
AMQ601132 INFO User {0} is getting connector services on target resource: {1} {2}
AMQ601133 INFO User {0} is forceing a failover on target resource: {1} {2}
AMQ601134 INFO User {0} is performing scale down on target resource: {1} {2}
AMQ601135 INFO User {0} is listing network topology on target resource: {1} {2}
AMQ601136 INFO User {0} is removing notification listener on target resource: {1} {2}
AMQ601137 INFO User {0} is adding notification listener on target resource: {1} {2}
AMQ601138 INFO User {0} is getting notification info on target resource: {1} {2}
AMQ601139 INFO User {0} is getting connection ttl override on target resource: {1} {2}
AMQ601140 INFO User {0} is getting ID cache size on target resource: {1} {2}
AMQ601141 INFO User {0} is getting large message directory on target resource: {1} {2}
AMQ601142 INFO User {0} is getting management address on target resource: {1} {2}
AMQ601143 INFO User {0} is getting node ID on target resource: {1} {2}
AMQ601144 INFO User {0} is getting management notification address on target resource: {1} {2}
AMQ601145 INFO User {0} is getting message expiry scan period on target resource: {1} {2}
AMQ601146 INFO User {0} is getting message expiry thread priority on target resource: {1} {2}
AMQ601147 INFO User {0} is getting transaction timeout on target resource: {1} {2}
AMQ601148 INFO User {0} is getting transaction timeout scan period on target resource: {1} {2}
AMQ601149 INFO User {0} is querying is-persist-delivery-before-delivery on target resource: {1} {2}
AMQ601150 INFO User {0} is querying is-persist-id-cache on target resource: {1} {2}
AMQ601151 INFO User {0} is querying is-wildcard-routing-enabled on target resource: {1} {2}
AMQ601152 INFO User {0} is adding a user on target resource: {1} {2}
AMQ601153 INFO User {0} is listing a user on target resource: {1} {2}
AMQ601154 INFO User {0} is removing a user on target resource: {1} {2}
AMQ601155 INFO User {0} is resetting a user on target resource: {1} {2}
AMQ601156 INFO User {0} is getting user property on target resource: {1} {2}
AMQ601157 INFO User {0} is getting routing type property on target resource: {1} {2}
AMQ601158 INFO User {0} is getting temporary property on target resource: {1} {2}
AMQ601159 INFO User {0} is getting persistent size on target resource: {1} {2}
AMQ601160 INFO User {0} is getting durable message count on target resource: {1} {2}
AMQ601161 INFO User {0} is getting durable persist size on target resource: {1} {2}
AMQ601162 INFO User {0} is getting consumer count on target resource: {1} {2}
AMQ601163 INFO User {0} is getting delivering count on target resource: {1} {2}
AMQ601164 INFO User {0} is getting delivering size on target resource: {1} {2}
AMQ601165 INFO User {0} is getting durable delivering count on target resource: {1} {2}
AMQ601166 INFO User {0} is getting durable delivering size on target resource: {1} {2}
AMQ601167 INFO User {0} is getting messages added on target resource: {1} {2}
AMQ601168 INFO User {0} is getting messages acknowledged on target resource: {1} {2}
AMQ601169 INFO User {0} is getting messages expired on target resource: {1} {2}
AMQ601170 INFO User {0} is getting messages killed on target resource: {1} {2}
AMQ601171 INFO User {0} is getting ID on target resource: {1} {2}
AMQ601172 INFO User {0} is getting scheduled count on target resource: {1} {2}
AMQ601173 INFO User {0} is getting scheduled size on target resource: {1} {2}
AMQ601174 INFO User {0} is getting durable scheduled count on target resource: {1} {2}
AMQ601175 INFO User {0} is getting durable scheduled size on target resource: {1} {2}
AMQ601176 INFO User {0} is getting dead letter address on target resource: {1} {2}
AMQ601177 INFO User {0} is getting expiry address on target resource: {1} {2}
AMQ601178 INFO User {0} is getting max consumers on target resource: {1} {2}
AMQ601179 INFO User {0} is getting purge-on-consumers property on target resource: {1} {2}
AMQ601180 INFO User {0} is getting configuration-managed property on target resource: {1} {2}
AMQ601181 INFO User {0} is getting exclusive property on target resource: {1} {2}
AMQ601182 INFO User {0} is getting last-value property on target resource: {1} {2}
AMQ601183 INFO User {0} is listing scheduled messages on target resource: {1} {2}
AMQ601184 INFO User {0} is listing scheduled messages as json on target resource: {1} {2}
AMQ601185 INFO User {0} is listing delivering messages on target resource: {1} {2}
AMQ601186 INFO User {0} is listing delivering messages as json on target resource: {1} {2}
AMQ601187 INFO User {0} is listing messages on target resource: {1} {2}
AMQ601188 INFO User {0} is listing messages as json on target resource: {1} {2}
AMQ601189 INFO User {0} is getting first message on target resource: {1} {2}
AMQ601190 INFO User {0} is getting first message as json on target resource: {1} {2}
AMQ601191 INFO User {0} is getting first message's timestamp on target resource: {1} {2}
AMQ601192 INFO User {0} is getting first message's age on target resource: {1} {2}
AMQ601193 INFO User {0} is counting messages on target resource: {1} {2}
AMQ601194 INFO User {0} is counting delivery messages on target resource: {1} {2}
AMQ601195 INFO User {0} is removing a message on target resource: {1} {2}
AMQ601196 INFO User {0} is removing messages on target resource: {1} {2}
AMQ601197 INFO User {0} is expiring messages on target resource: {1} {2}
AMQ601198 INFO User {0} is expiring messages on target resource: {1} {2}
AMQ601199 INFO User {0} is retry sending message on target resource: {1} {2}
AMQ601200 INFO User {0} is retry sending messages on target resource: {1} {2}
AMQ601201 INFO User {0} is moving a message to another queue on target resource: {1} {2}
AMQ601202 INFO User {0} is moving messages to another queue on target resource: {1} {2}
AMQ601203 INFO User {0} is sending messages to dead letter address on target resource: {1} {2}
AMQ601204 INFO User {0} is sending messages to dead letter address on target resource: {1} {2}
AMQ601205 INFO User {0} is changing message's priority on target resource: {1} {2}
AMQ601206 INFO User {0} is changing a message's priority on target resource: {1} {2}
AMQ601207 INFO User {0} is listing message counter on target resource: {1} {2}
AMQ601208 INFO User {0} is resetting message counter on target resource: {1} {2}
AMQ601209 INFO User {0} is listing message counter as HTML on target resource: {1} {2}
AMQ601210 INFO User {0} is listing message counter history on target resource: {1} {2}
AMQ601211 INFO User {0} is listing message counter history as HTML on target resource: {1} {2}
AMQ601212 INFO User {0} is pausing on target resource: {1} {2}
AMQ601213 INFO User {0} is resuming on target resource: {1} {2}
AMQ601214 INFO User {0} is getting paused property on target resource: {1} {2}
AMQ601215 INFO User {0} is browsing a queue on target resource: {1} {2}
AMQ601216 INFO User {0} is flushing executor on target resource: {1} {2}
AMQ601217 INFO User {0} is resetting all groups on target resource: {1} {2}
AMQ601218 INFO User {0} is resetting group on target resource: {1} {2}
AMQ601219 INFO User {0} is getting group count on target resource: {1} {2}
AMQ601220 INFO User {0} is listing groups as json on target resource: {1} {2}
AMQ601221 INFO User {0} is resetting added messages on target resource: {1} {2}
AMQ601222 INFO User {0} is resetting acknowledged messages on target resource: {1} {2}
AMQ601223 INFO User {0} is resetting expired messages on target resource: {1} {2}
AMQ601224 INFO User {0} is resetting killed messages on target resource: {1} {2}
AMQ601225 INFO User {0} is getting static connectors on target resource: {1} {2}
AMQ601226 INFO User {0} is getting forwarding address on target resource: {1} {2}
AMQ601227 INFO User {0} is getting the queue name on target resource: {1} {2}
AMQ601228 INFO User {0} is getting discovery group name on target resource: {1} {2}
AMQ601229 INFO User {0} is getting filter string on target resource: {1} {2}
AMQ601230 INFO User {0} is getting reconnect attempts on target resource: {1} {2}
AMQ601231 INFO User {0} is getting retry interval on target resource: {1} {2}
AMQ601232 INFO User {0} is getting retry interval multiplier on target resource: {1} {2}
AMQ601233 INFO User {0} is getting transformer class name on target resource: {1} {2}
AMQ601234 INFO User {0} is getting transformer properties as json on target resource: {1} {2}
AMQ601235 INFO User {0} is getting transformer properties on target resource: {1} {2}
AMQ601236 INFO User {0} is checking if bridge started on target resource: {1} {2}
AMQ601237 INFO User {0} is querying use duplicate detection on target resource: {1} {2}
AMQ601238 INFO User {0} is querying isHA on target resource: {1} {2}
AMQ601239 INFO User {0} is starting a bridge on target resource: {1} {2}
AMQ601240 INFO User {0} is stopping a bridge on target resource: {1} {2}
AMQ601241 INFO User {0} is getting messages pending acknowledgement on target resource: {1} {2}
AMQ601242 INFO User {0} is getting metrics on target resource: {1} {2}
AMQ601243 INFO User {0} is getting broadcast period on target resource: {1} {2}
AMQ601244 INFO User {0} is getting connector pairs on target resource: {1} {2}
AMQ601245 INFO User {0} is getting connector pairs as json on target resource: {1} {2}
AMQ601246 INFO User {0} is getting group address on target resource: {1} {2}
AMQ601247 INFO User {0} is getting group port on target resource: {1} {2}
AMQ601248 INFO User {0} is getting local binding port on target resource: {1} {2}
AMQ601249 INFO User {0} is starting broadcasting group on target resource: {1} {2}
AMQ601250 INFO User {0} is stopping broadcasting group on target resource: {1} {2}
AMQ601251 INFO User {0} is getting max hops on target resource: {1} {2}
AMQ601252 INFO User {0} is geting static connectors as json on target resource: {1} {2}
AMQ601253 INFO User {0} is querying use duplicate detection on target resource: {1} {2}
AMQ601254 INFO User {0} is getting message loadbalancing type on target resource: {1} {2}
AMQ601255 INFO User {0} is getting topology on target resource: {1} {2}
AMQ601256 INFO User {0} is getting nodes on target resource: {1} {2}
AMQ601257 INFO User {0} is start cluster connection on target resource: {1} {2}
AMQ601258 INFO User {0} is stop cluster connection on target resource: {1} {2}
AMQ601259 INFO User {0} is getting bridge metrics on target resource: {1} {2}
AMQ601260 INFO User {0} is getting routing name on target resource: {1} {2}
AMQ601261 INFO User {0} is getting unique name on target resource: {1} {2}
AMQ601262 INFO User {0} is creating address on target resource: {1} {2}
AMQ601263 INFO User {0} is handling a management message on target resource {1} {2}
AMQ601264 INFO User {0} gets security check failure
AMQ601265 INFO User {0} is creating a core consumer on target resource {1} {2}
AMQ601266 INFO User {0} is creating a shared queue on target resource {1} {2}
AMQ601267 INFO User {0} is creating a core session on target resource {1} {2}
AMQ601269 INFO User {0} is getting messages acknowledged attempts on target resource: {1} {2}
AMQ601270 INFO User {0} is getting ring size on target resource: {1} {2}
AMQ601271 INFO User {0} is getting retroactiveResource property on target resource: {1} {2}
AMQ601272 INFO User {0} is getting disk store usage on target resource: {1} {2}
AMQ601273 INFO User {0} is getting disk store usage percentage on target resource: {1} {2}
AMQ601274 INFO User {0} is getting group rebalance property on target resource: {1} {2}
AMQ601275 INFO User {0} is getting group buckets on target resource: {1} {2}
AMQ601276 INFO User {0} is getting group first key on target resource: {1} {2}
AMQ601500 INFO User {0} sent a message {1}, context: {2}, transaction: {3}
AMQ601501 INFO User {0} is consuming a message from {1}: {2}
AMQ601502 INFO User {0} acknowledged message from {1}: {2}, transaction: {3}
AMQ601509 INFO User {0} is getting currentDuplicateIdCacheSize property on target resource: {1} {2}
AMQ601510 INFO User {0} is clearing duplicate ID cache on target resource: {1} {2}
AMQ601511 INFO User {0} is getting channelName property on target resource: {1} {2}
AMQ601512 INFO User {0} is getting fileContents property on target resource: {1} {2}
AMQ601513 INFO User {0} is getting file property on target resource: {1} {2}
AMQ601514 INFO User {0} is getting preparedTransactionMessageCount property on target resource: {1} {2}
AMQ601701 INFO User {0} successfully created address: {1} with routing types {2}
AMQ601702 INFO User {0} failed to created address: {1} with routing types {2}
AMQ601703 INFO User {0} successfully updated address: {1} with routing types {2}
AMQ601704 INFO User {0} successfully updated address: {1} with routing types {2}
AMQ601705 INFO User {0} successfully deleted address: {1}
AMQ601706 INFO User {0} failed to deleted address: {1}
AMQ601707 INFO User {0} successfully created queue: {1} on address: {2} with routing type {3}
AMQ601708 INFO User {0} failed to create queue: {1} on address: {2} with routing type {3}
AMQ601709 INFO User {0} successfully updated queue: {1} with routing type {2}
AMQ601710 INFO User {0} failed to update queue: {1} with routing type {2}
AMQ601711 INFO User {0} successfully deleted queue: {1}
AMQ601712 INFO User {0} failed to delete queue: {1}
AMQ601713 INFO User {0} has removed {1} messages from queue: {2}
AMQ601714 INFO User {0} failed to remove messages from queue: {1}
AMQ601715 INFO User {0} successfully authenticated
AMQ601716 INFO User {0} failed authentication, reason: {1}
AMQ601717 INFO User {0} accessed {2} on management object {1}
AMQ601718 INFO User {0} does not have correct role to access {2} on management object {1}
AMQ601719 INFO User {0} has paused queue {1}
AMQ601720 INFO User {0} failed to pause queue {1}
AMQ601721 INFO User {0} has resumed queue {1}
AMQ601722 INFO User {0} failed to resume queue {1}
AMQ601723 INFO User {0} sent message to {1} as user {2}
AMQ601724 INFO User {0} failed to send message to {1} as user {2}
AMQ601725 INFO User {0} browsed {2} messages from queue {1}
AMQ601726 INFO User {0} failed to browse messages from queue {1}
AMQ601727 INFO User {0} is updating a divert on target resource: {1} {2}
AMQ601728 INFO User {0} is getting enabled property on target resource: {1} {2}
AMQ601729 INFO User {0} is disabling on target resource: {1} {2}
AMQ601730 INFO User {0} is enabling on target resource: {1} {2}
AMQ601731 INFO User {0} has paused address {1}
AMQ601732 INFO User {0} failed to pause address {1}
AMQ601733 INFO User {0} has resumed address {1}
AMQ601734 INFO User {0} failed to resume address {1}
AMQ601735 INFO User {0} is getting group rebalance pause dispatch property on target resource: {1} {2}
AMQ601736 INFO User {0} is getting authentication cache size on target resource: {1} {2}
AMQ601737 INFO User {0} is getting authorization cache size on target resource: {1} {2}
AMQ601738 INFO User {0} is requesting a list of broker connections
AMQ601739 INFO User {0} is requesting to stop broker connection {1}
AMQ601740 INFO User {0} is requesting to start broker connection {1}
AMQ601741 INFO User {0} is getting address count on target resource: {1} {2}
AMQ601742 INFO User {0} is getting the queue count on target resource: {1} {2}
AMQ601743 INFO User {0} is getting last-value-key property on target resource: {1} {2}
AMQ601744 INFO User {0} is getting consumers-before-dispatch property on target resource: {1} {2}
AMQ601745 INFO User {0} is getting delay-before-dispatch property on target resource: {1} {2}
AMQ601746 INFO User {0} is getting internal property on target resource: {1} {2}
AMQ601747 INFO User {0} is getting auto-created property on target resource: {1} {2}
AMQ601748 INFO User {0} is getting max retry interval on target resource: {1} {2}
AMQ601749 INFO User {0} is getting activation sequence on target resource: {1} {2}
AMQ601750 INFO User {0} is purging target resource: {1} {2}
AMQ601751 INFO User {0} has purged address {1}
AMQ601752 INFO User {0} failed to purge address {1}
AMQ601753 INFO User {0} is getting address limit % on target resource: {1} {2}
AMQ601754 INFO User {0} is blocking target resource: {1}
AMQ601755 INFO User {0} is unblocking target resource: {1}
AMQ601756 INFO User {0} is getting acceptors on target resource: {1} {2}
AMQ601757 INFO User {0} is getting acceptors as json on target resource: {1} {2}
AMQ601758 INFO User {0} is calling schedulePageCleanup on address: {1}
AMQ601759 INFO User {0} added acknowledgement of a message from {1}: {2} to transaction: {3}
AMQ601760 INFO User {0} added a message send for: {1} to transaction: {2}
AMQ601761 INFO User {0} rolled back transaction {1} involving {2}
AMQ601762 INFO User {0} is adding a connector on target resource: {1} {2}
AMQ601763 INFO User {0} is removing a connector on target resource: {1} {2}
AMQ601764 INFO User {0} is calling deliverScheduledMessage on queue: {1} {2}
AMQ601765 INFO User {0} is getting status on target resource: {1}
AMQ841000 INFO created connection: {0}
AMQ841001 INFO destroyed connection: {0}
AMQ841002 INFO created session name: {0}, session connectionID: {1}
AMQ841003 INFO closed session with session name: {0}, failed: {1}
AMQ841004 INFO added session metadata for session name : {0}, key: {1}, data: {2}
AMQ841005 INFO created consumer with ID: {0}, with session name: {1}
AMQ841006 INFO closed consumer ID: {0}, with consumer Session: {1}, failed: {2}
AMQ841007 INFO created queue: {0}
AMQ841008 INFO destroyed queue: {0}, with args address: {1}, session: {2}, checkConsumerCount: {3}, removeConsumers: {4}, autoDeleteAddress: {5}
AMQ841009 INFO sent message with ID: {0}, result: {1}, transaction: {2}
AMQ841010 INFO routed message with ID: {0}, result: {1}
AMQ841011 INFO delivered message with message ID: {0}, consumer info UNAVAILABLE
AMQ841012 INFO delivered message with message ID: {0}, to consumer on address: {1}, queue: {2}, consumer sessionID: {3}, consumerID: {4}
AMQ841013 INFO expired message: {0}, messageExpiryAddress: {1}
AMQ841014 INFO messageAcknowledged: {0}, with transaction: {2}
AMQ841015 INFO deployed bridge: {0}
AMQ841016 INFO criticalFailure called with criticalComponent: {0}
AMQ841017 INFO error sending message with ID: {0}, session name: {1}, session connectionID: {2}, exception: {3}
AMQ841018 INFO error routing message with ID: {0}, exception: {1}
AMQ843000 DEBUG beforeCreateSession called with name: {0}, username: {1}, minLargeMessageSize: {2}, connection: {3}, autoCommitSends: {4}, autoCommitAcks: {5}, preAcknowledge: {6}, xa: {7}, publicAddress: {8}
AMQ843001 DEBUG beforeCloseSession called with session name : {0}, session: {1}, failed: {2}
AMQ843002 DEBUG beforeSessionMetadataAdded called with session name: {0} , session: {1}, key: {2}, data: {3}
AMQ843003 DEBUG added session metadata for session name : {0}, session: {1}, key: {2}, data: {3}
AMQ843004 DEBUG beforeCreateConsumer called with ConsumerID: {0}, QueueBinding: {1}, filterString: {2}, browseOnly: {3}, supportLargeMessage: {4}
AMQ843005 DEBUG beforeCloseConsumer called with consumer: {0}, consumer sessionID: {1}, failed: {2}
AMQ843006 DEBUG beforeCreateQueue called with queueConfig: {0}
AMQ843007 DEBUG beforeDestroyQueue called with queueName: {0}, session: {1}, checkConsumerCount: {2}, removeConsumers: {3}, autoDeleteAddress: {4}
AMQ843008 DEBUG beforeSend called with message: {0}, tx: {1}, session: {2}, direct: {3}, noAutoCreateQueue: {4}
AMQ843009 DEBUG afterSend message: {0}, result: {1}, transaction: {2}, session: {3}, connection: {4}, direct: {5}, noAutoCreateQueue: {6}
AMQ843010 DEBUG beforeMessageRoute called with message: {0}, context: {1}, direct: {2}, rejectDuplicates: {3}
AMQ843011 DEBUG afterMessageRoute message: {0}, with context: {1}, direct: {2}, rejectDuplicates: {3}
AMQ843012 DEBUG beforeDeliver called with consumer: {0}, reference: {1}
AMQ843013 DEBUG delivered message with message ID: {0} to consumer on address: {1}, queue: {2}, consumer sessionID: {3}, consumerID: {4}, full message reference: {5}, full consumer: {6}
AMQ843014 DEBUG messageAcknowledged ID: {0}, sessionID: {1}, consumerID: {2}, queue: {3}, transaction: {4}, ackReason: {5}
AMQ843015 DEBUG beforeDeployBridge called with bridgeConfiguration: {0}
AMQ843016 DEBUG onSendError message ID: {0}, message {1}, session name: {2} with tx: {3}, session: {4}, direct: {5}, noAutoCreateQueue: {6}
AMQ843017 DEBUG onMessageRouteError message: {0}, with context: {1}, direct: {2}, rejectDuplicates: {3}
AMQ843020 DEBUG rolled back transaction {0} involving {1}

ARJUNA

Code Level Return Type Message
ARJUNA012001 WARN ActivationRecord::set_value() called illegally
ARJUNA012002 WARN Invocation of ActivationRecord::restore_state for {0} inappropriate - ignored for {1}
ARJUNA012003 WARN Attempted abort operation on deleted object id {0} of type {1} ignored
ARJUNA012005 WARN DisposeRecord::save_state - failed
ARJUNA012006 WARN DisposeRecord::save_state - no object store defined.
ARJUNA012008 WARN DisposeRecord::topLevelCommit - exception while deleting state
ARJUNA012009 WARN PersistenceRecord::restore_state: Failed to unpack object store type
ARJUNA012011 WARN PersistenceRecord::save_state - packing top level state failed
ARJUNA012012 WARN PersistenceRecord::save_state - failed
ARJUNA012013 WARN PersistenceRecord::save_state - no object store defined for object
ARJUNA012015 WARN PersistenceRecord::topLevelAbort() - Could not remove state from object store!
ARJUNA012016 WARN PersistenceRecord::topLevelCommit - commit_state call failed for {0}
ARJUNA012017 WARN PersistenceRecord::topLevelAbort() - Received ObjectStoreException
ARJUNA012018 WARN PersistenceRecord.topLevelPrepare - write_uncommitted error
ARJUNA012019 WARN PersistenceRecord::topLevelCommit - no state to commit!
ARJUNA012020 WARN PersistenceRecord::topLevelCommit - caught exception
ARJUNA012021 WARN PersistenceRecord::topLevelCommit - no object store specified!
ARJUNA012022 WARN PersistenceRecord::topLevelCommit - commit_state error
ARJUNA012023 WARN PersistenceRecord deactivate error, object probably already deactivated!
ARJUNA012024 WARN PersistenceRecord.topLevelPrepare - setup error!
ARJUNA012025 WARN RecoveryRecord::setValue not given OutputObjectState.
ARJUNA012026 WARN RecoveryRecord::nestedAbort - restore_state on object failed!
ARJUNA012027 WARN LockManager::terminate() should be invoked in every destructor
ARJUNA012028 WARN StateManager::modified() invocation on an object whose state has not been restored - activating object
ARJUNA012029 WARN Delete called on object with uid {0} and type {1} within atomic action.
ARJUNA012030 WARN StateManager.cleanup - could not save_state from terminate!
ARJUNA012031 WARN Attempt to use volatile store.
ARJUNA012032 java.lang.String Volatile store not implemented!
ARJUNA012033 java.lang.String Invalid object state.
ARJUNA012035 WARN Activate of object with id = {0} and type {1} unexpectedly failed
ARJUNA012036 WARN StateManager::deactivate - object store error
ARJUNA012037 WARN StateManager::deactivate - save_state error
ARJUNA012038 WARN StateManager.destroy - failed to add abstract record to transaction {0}; check transaction status.
ARJUNA012039 WARN StateManager.destroy - caught object store exception
ARJUNA012040 WARN StateManager.destroy - called on non-persistent or new object!
ARJUNA012041 WARN StateManager.restore_state - could not find StateManager state in object state!
ARJUNA012043 WARN Mutex.unlock - called by non-owning thread!
ARJUNA012044 WARN cannot get local host.
ARJUNA012046 java.lang.String Uid.Uid recreate constructor could not recreate Uid!
ARJUNA012047 java.lang.String Uid.Uid string constructor could not create nullUid
ARJUNA012048 WARN Uid general parsing error: {0}
ARJUNA012049 FATAL Uid.Uid string constructor could not create nullUid for incorrect string: {0}
ARJUNA012050 java.lang.String Uid.Uid string constructor incorrect: {0}
ARJUNA012051 WARN Uid.generateHash called for invalid Uid. Will ignore.
ARJUNA012055 WARN Exception thrown creating Uid from bytes!
ARJUNA012056 WARN Exception thrown getting bytes!
ARJUNA012057 WARN Uid.Uid string constructor {0} caught other throwable
ARJUNA012058 WARN AbstractRecord.create {0} failed to find record.
ARJUNA012059 java.lang.String Memory exhausted.
ARJUNA012060 WARN Action nesting error - deletion of action id {0} invoked while child actions active
ARJUNA012061 WARN Aborting child {0}
ARJUNA012062 WARN BasicAction.restore_state - could not recover {0}
ARJUNA012063 WARN BasicAction.restore_state - error unpacking action status.
ARJUNA012065 WARN BasicAction.Begin of action {0} ignored - incorrect invocation sequence {1}
ARJUNA012066 WARN Destructor of still running action id {0} invoked - Aborting
ARJUNA012067 WARN BasicAction.Begin of action {0} ignored - no parent and set as nested action!
ARJUNA012068 WARN BasicAction.Begin of action {0} ignored - parent action {1} is not running: {2}
ARJUNA012070 WARN End called on non-running atomic action {0}
ARJUNA012071 WARN End called on already committed atomic action {0}
ARJUNA012072 WARN End called illegally on atomic action {0}
ARJUNA012073 WARN BasicAction.End() - prepare phase of action-id {0} failed.
ARJUNA012074 WARN Received heuristic: {0} .
ARJUNA012075 WARN Action Aborting
ARJUNA012076 WARN Abort called on non-running atomic action {0}
ARJUNA012077 WARN Abort called on already aborted atomic action {0}
ARJUNA012078 WARN Abort called illegaly on atomic action {0}
ARJUNA012079 WARN BasicAction {0} - non-empty ( {1} ) pendingList {2}
ARJUNA012080 WARN Transaction {0} marked as rollback only. Will abort.
ARJUNA012081 WARN Cannot force parent to rollback - no handle!
ARJUNA012082 WARN BasicAction::prepare - creating intentions list failed for {0}
ARJUNA012083 WARN BasicAction::prepare - intentions list write failed for {0}
ARJUNA012084 WARN One-phase commit of action {0} received heuristic decision: {1}
ARJUNA012085 FATAL BasicAction.onePhaseCommit failed - no object store for atomic action state!
ARJUNA012086 WARN Prepare phase of nested action {0} received inconsistent outcomes.
ARJUNA012087 WARN Activate of atomic action with id {0} and type {1} unexpectedly failed, could not load state.
ARJUNA012088 WARN Prepare phase of action {0} received heuristic decision: {1}
ARJUNA012089 WARN Top-level abort of action {0} received heuristic decision: {1}
ARJUNA012090 WARN Nested abort of action {0} received heuristic decision: {1}
ARJUNA012091 WARN Top-level abort of action {0} received {1} from {2}
ARJUNA012092 WARN Nested abort of action {0} received {1} from {2}
ARJUNA012093 WARN BasicAction.checkIsCurrent {0} - terminating non-current transaction: {1}
ARJUNA012094 WARN Commit of action id {0} invoked while multiple threads active within it.
ARJUNA012095 WARN Abort of action id {0} invoked while multiple threads active within it.
ARJUNA012096 WARN Commit of action id {0} invoked while child actions active
ARJUNA012097 WARN Deactivate of atomic action with id {0} and type {1} unexpectedly failed, could not save state.
ARJUNA012098 WARN Abort of action id {0} invoked while child actions active
ARJUNA012099 WARN Aborting child: {0}
ARJUNA012100 WARN Now aborting self: {0}
ARJUNA012101 WARN BasicAction.updateState - Could not create ObjectState for failedList
ARJUNA012102 WARN BasicAction.End - Could not write failed list
ARJUNA012103 WARN (Internal) BasicAction.merge - record rejected
ARJUNA012104 java.lang.String No object store for:
ARJUNA012105 WARN Could not remove intentions list:
ARJUNA012107 WARN CheckedAction::check - atomic action {0} commiting with {1} threads active!
ARJUNA012108 WARN CheckedAction::check - atomic action {0} aborting with {1} threads active!
ARJUNA012109 java.lang.String TransactionReaper - attempting to insert an element that is already present.
ARJUNA012110 WARN TransactionReaper::check successfuly marked TX {0} as rollback only
ARJUNA012111 WARN TransactionReaper::check failed to mark TX {0} as rollback only
ARJUNA012112 WARN TransactionReaper::check exception while marking TX {0} as rollback only
ARJUNA012113 WARN TransactionReaper::doCancellations worker {0} missed interrupt when cancelling TX {1} -- exiting as zombie (zombie count decremented to {2})
ARJUNA012114 WARN TransactionReaper::doCancellations worker {0} successfuly marked TX {1} as rollback only
ARJUNA012115 WARN TransactionReaper::doCancellations worker {0} failed to mark TX {1} as rollback only
ARJUNA012116 WARN TransactionReaper::doCancellations worker {0} exception while marking TX {1} as rollback only
ARJUNA012117 WARN TransactionReaper::check processing TX {0} in state {1}
ARJUNA012118 WARN TransactionReaper NORMAL mode is deprecated. Update config to use PERIODIC for equivalent behaviour.
ARJUNA012119 ERROR TransactionReaper::check worker zombie count {0} exceeds specified limit
ARJUNA012120 WARN TransactionReaper::check worker {0} not responding to interrupt when cancelling TX {1} -- worker marked as zombie and TX scheduled for mark-as-rollback
ARJUNA012121 WARN TransactionReaper::doCancellations worker {0} successfully canceled TX {1}
ARJUNA012122 WARN TransactionReaper::doCancellations worker {0} failed to cancel TX {1} -- rescheduling for mark-as-rollback
ARJUNA012123 WARN TransactionReaper::doCancellations worker {0} exception during cancel of TX {1} -- rescheduling for mark-as-rollback
ARJUNA012124 WARN TwoPhaseCoordinator.beforeCompletion - attempted rollback_only failed!
ARJUNA012125 WARN TwoPhaseCoordinator.beforeCompletion - failed for {0}
ARJUNA012126 WARN TwoPhaseCoordinator.beforeCompletion TwoPhaseCoordinator.afterCompletion called on still running transaction!
ARJUNA012127 WARN TwoPhaseCoordinator.afterCompletion - returned failure for {0}
ARJUNA012128 WARN TwoPhaseCoordinator.afterCompletion - failed for {0} with exception
ARJUNA012129 WARN TwoPhaseCoordinator.afterCompletion - failed for {0} with error
ARJUNA012130 WARN Name of XA node not defined. Using {0}
ARJUNA012131 WARN Supplied name of node is too long. Using {0}
ARJUNA012132 WARN Supplied name of node contains reserved character ''-''. Using {0}
ARJUNA012135 java.lang.String Could not create Store type:
ARJUNA012136 WARN Could not recreate abstract record {0}
ARJUNA012137 WARN Cannot begin new transaction as TM is disabled. Marking as rollback-only.
ARJUNA012138 WARN Node name cannot exceed {0} bytes!
ARJUNA012139 WARN You have chosen to disable the Multiple Last Resources warning. You will see it only once.
ARJUNA012140 WARN Adding multiple last resources is disallowed. Trying to add {0}, but already have {1}
ARJUNA012141 WARN Multiple last resources have been added to the current transaction. This is transactionally unsafe and should not be relied upon. Current resource is {0}
ARJUNA012142 WARN You have chosen to enable multiple last resources in the transaction manager. This is transactionally unsafe and should not be relied upon.
ARJUNA012143 WARN unknown store: {0}
ARJUNA012144 java.lang.String unknown store:
ARJUNA012146 WARN ActionStatusService: searching for uid: {0}
ARJUNA012147 INFO transactionType: {0} uid: {1} Status is {2}
ARJUNA012148 WARN Other Exception
ARJUNA012149 WARN Exception retrieving action status
ARJUNA012150 INFO matching Uid {0} found
ARJUNA012151 WARN Exception when accessing transaction store
ARJUNA012152 WARN Connection Lost to Recovery Manager
ARJUNA012153 WARN RecoverAtomicAction.replayPhase2: Unexpected status: {0}
ARJUNA012154 WARN RecoverAtomicAction: transaction {0} not activated, unable to replay phase 2 commit. Check state has not already been completed.
ARJUNA012155 WARN RecoverAtomicAction - tried to move failed activation log {0}
ARJUNA012159 INFO Connected to recovery manager on {0}:{1}
ARJUNA012161 WARN Exception when accessing data store
ARJUNA012162 WARN Object store exception
ARJUNA012163 INFO Starting service {0} on port {1}
ARJUNA012167 java.lang.String Invalid host or port
ARJUNA012168 WARN Failed to create server socket on address {0} and port: {1}
ARJUNA012169 WARN Listener failed
ARJUNA012170 INFO TransactionStatusManager started on port {0} and host {1} with service {2}
ARJUNA012171 WARN Failed to setup class for {0}
ARJUNA012176 java.lang.String Could not get unique port.
ARJUNA012177 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_1 - Invalid input buffer: byte.
ARJUNA012178 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_10 - Invalid input buffer: string.
ARJUNA012179 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_11 - Invalid from buffer
ARJUNA012180 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_2 - Invalid input buffer: bytes.
ARJUNA012181 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_3 - Invalid input buffer: boolean.
ARJUNA012182 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_4 - Invalid input buffer: char.
ARJUNA012183 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_5 - Invalid input buffer: short.
ARJUNA012184 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_6 - Invalid input buffer: int.
ARJUNA012185 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_7 - Invalid input buffer: long.
ARJUNA012186 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_8 - Invalid input buffer: float.
ARJUNA012187 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_9 - Invalid input buffer: double
ARJUNA012188 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_1 - Invalid input buffer: byte.
ARJUNA012189 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_10 - Invalid input buffer: string.
ARJUNA012190 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_11 - Invalid from buffer
ARJUNA012191 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_2 - Invalid input buffer: bytes.
ARJUNA012192 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_3 - Invalid input buffer: boolean.
ARJUNA012193 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_4 - Invalid input buffer: char.
ARJUNA012194 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_5 - Invalid input buffer: short.
ARJUNA012195 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_6 - Invalid input buffer: int.
ARJUNA012196 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_7 - Invalid input buffer: long.
ARJUNA012197 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_8 - Invalid input buffer: float.
ARJUNA012198 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_9 - Invalid input buffer: double
ARJUNA012202 INFO registering bean {0}.
ARJUNA012203 INFO Instance already exists: {0}.
ARJUNA012204 WARN Error registering {0}
ARJUNA012206 WARN Unable to unregister bean {0}
ARJUNA012207 WARN Unable to unregister bean {0}
ARJUNA012208 WARN An error occurred while creating file {0}
ARJUNA012209 WARN Utility.getDefaultProcess failed
ARJUNA012210 WARN Unable to use InetAddress.getLocalHost() to resolve address.
ARJUNA012211 WARN Attempt to suspend a non-AtomicAction transaction. Type is {0}
ARJUNA012212 WARN StateManagerFriend.forgetAction
ARJUNA012213 WARN StateManagerFriend.destroyed
ARJUNA012214 WARN StateManagerFriend.rememberAction
ARJUNA012215 WARN className is null
ARJUNA012216 WARN attempt to load {0} threw ClassNotFound. Wrong classloader?
ARJUNA012217 WARN class {0} does not implement {1}
ARJUNA012218 WARN cannot create new instance of {0}
ARJUNA012219 WARN cannot access {0}
ARJUNA012220 WARN cannot initialize from string {0}
ARJUNA012221 WARN Commit state failed for {0} and {1}
ARJUNA012222 WARN Remove state failed for {0} and {1} and {2}
ARJUNA012223 WARN Write state failed for {0} and {1} and {2} and {3}
ARJUNA012224 WARN Unknown work type {0}
ARJUNA012225 java.lang.String FileSystemStore::setupStore - cannot access root of object store: {0}
ARJUNA012226 WARN FileSystemStore.removeFromCache - no entry for {0}
ARJUNA012227 WARN FileSystemStore.renameFromTo - from {0} not present. Possibly renamed by crash recovery.
ARJUNA012228 java.lang.String FileSystemStore::allObjUids - could not pack Uid.
ARJUNA012229 java.lang.String FileSystemStore::allObjUids - could not pack end of list Uid.
ARJUNA012230 java.lang.String FileSytemStore::allTypes - could not pack entry string.
ARJUNA012231 java.lang.String FileSystemStore::allTypes - could not pack end of list string.
ARJUNA012232 java.lang.String FileSystemStore::setupStore - error from unpack object store.
ARJUNA012233 java.lang.String FileSystemStore::allTypes - could not pack entry string.
ARJUNA012234 java.lang.String FileSystemStore::createHierarchy - null directory name.
ARJUNA012236 WARN invalid number of hash directories: {0}. Will use default.
ARJUNA012237 java.lang.String HashedStore.allObjUids - could not pack Uid.
ARJUNA012238 java.lang.String HashedStore.allObjUids - could not pack end of list Uid.
ARJUNA012239 WARN hide_state caught exception
ARJUNA012240 WARN remove_state - type() operation of object with uid {0} returns NULL
ARJUNA012241 WARN invalid initial pool size: {0}
ARJUNA012242 WARN invalid maximum pool size: {0}
ARJUNA012243 WARN initialise caught exceptionatorLoader_3
ARJUNA012244 WARN getState caught exception
ARJUNA012245 WARN removeFromCache - no entry for {0}
ARJUNA012246 WARN getPool caught exception
ARJUNA012247 INFO getPool - interrupted while waiting for a free connection
ARJUNA012248 WARN freePool - freeing a connection which is already free!
ARJUNA012249 WARN reveal_state caught exception
ARJUNA012250 WARN currentState caught exception
ARJUNA012251 WARN allObjUids caught exception
ARJUNA012252 WARN allObjUids - pack of Uid failed
ARJUNA012253 WARN allTypes caught exception
ARJUNA012254 WARN allTypes - pack of Uid failed
ARJUNA012255 WARN remove_state caught exception
ARJUNA012256 WARN remove_state() attempted removal of {0} state for object with uid {1}
ARJUNA012257 WARN JDBCImple:read_state failed
ARJUNA012258 WARN JDBCImple:write_state caught exception
ARJUNA012259 FATAL JDBCStore could not setup store < {0} , {1}>
ARJUNA012260 FATAL Received exception for {0}
ARJUNA012261 WARN JDBCStore.setupStore failed to initialise!
ARJUNA012263 java.lang.String No JDBCAccess implementation provided!
ARJUNA012265 WARN ShadowingStore::remove_state() - state {0} does not exist for type {1}
ARJUNA012266 WARN ShadowingStore::remove_state() - unlink failed on {0}
ARJUNA012267 WARN ShadowingStore.remove_state() - fd error for {0}
ARJUNA012269 INFO UNKNOWN state for object with uid {0} , type {1}
ARJUNA012270 INFO HIDDEN state for object with uid {0} , type {1}
ARJUNA012272 WARN ShadowingStore.remove_state - type() operation of object with uid {0} returns NULL
ARJUNA012273 WARN ShadowingStore::write_state() - openAndLock failed for {0}
ARJUNA012274 WARN ShadowingStore::write_state - unlock or close of {0} failed.
ARJUNA012275 WARN ShadowStore::commit_state - failed to rename {0} to {1}
ARJUNA012278 WARN ShadowStore::hide_state - failed to rename {0} to {1}
ARJUNA012279 WARN ShadowStore::reveal_state - failed to rename {0} to {1}
ARJUNA012280 WARN ShadowingStore::read_state() - openAndLock failed for {0}
ARJUNA012282 WARN ShadowingStore::read_state() failed
ARJUNA012283 WARN ShadowingStore::read_state - unlock or close of {0} failed
ARJUNA012284 WARN ShadowingStore::remove_state() - access problems on {0} and {1}
ARJUNA012285 WARN oracle:read_state failed
ARJUNA012286 WARN oracle:write_state caught exception
ARJUNA012287 java.lang.String No typename for object:
ARJUNA012288 java.lang.String allTypes - could not pack end of list string.
ARJUNA012289 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA012290 WARN failed to recover Transaction {0}
ARJUNA012291 WARN failed to access transaction store {0}
ARJUNA012292 WARN Connection error on running a work on the socket. IOException: {0}
ARJUNA012293 WARN Setting timeout exception.
ARJUNA012297 INFO ExpiredEntryMonitor - no scans on first iteration
ARJUNA012301 WARN ExpiredTransactionScanner - exception during attempted move {0}
ARJUNA012303 INFO ExpiredTransactionScanner - log {0} is assumed complete and will be moved.
ARJUNA012310 INFO Recovery manager listening on endpoint {0}:{1}
ARJUNA012318 WARN Could not create recovery listener
ARJUNA012326 WARN socket I/O exception
ARJUNA012327 WARN TransactionStatusConnector.delete called erroneously
ARJUNA012328 WARN Connection lost to TransactionStatusManagers'' process
ARJUNA012329 WARN Connection lost to TransactionStatusManagers'' process
ARJUNA012330 INFO TransactionStatusManager process for uid {0} is ALIVE. connected to host: {1}, port: {2} on socket: {3}
ARJUNA012331 INFO TransactionStatusManager process for uid {0} is DEAD.
ARJUNA012332 INFO Failed to establish connection to server
ARJUNA012333 WARN Problem with removing host/port item
ARJUNA012334 WARN Problem with storing host/port
ARJUNA012335 WARN Problem retrieving host/port
ARJUNA012336 WARN Failed to obtain host
ARJUNA012338 WARN Other Exception:
ARJUNA012339 WARN Cannot read line from the socket. IOException: {0}
ARJUNA012340 INFO RecoveryManager scan scheduled to begin.
ARJUNA012341 INFO RecoveryManager scan completed.
ARJUNA012342 FATAL RecoveryManagerImple: cannot bind to socket on address {0} and port {1}
ARJUNA012344 INFO RecoveryManagerImple is ready on port {0}
ARJUNA012345 WARN Transaction {0} and {1} not activate.
ARJUNA012346 WARN Error - could not get resource to forget heuristic. Left on Heuristic List.
ARJUNA012347 java.lang.String Could not get back a valid pid.
ARJUNA012348 java.lang.String Problem executing getpids utility:
ARJUNA012349 java.lang.String Problem executing command:
ARJUNA012350 java.lang.String Problem getting pid information from stream:
ARJUNA012351 WARN Encountered a problem when closing the data stream
ARJUNA012352 java.lang.String FileProcessId.getpid - could not locate temporary directory.
ARJUNA012353 java.lang.String FileProcessId.getpid could not create unique file.
ARJUNA012354 java.lang.String Could not get back a valid pid.
ARJUNA012355 java.lang.String getName returned unrecognized format:
ARJUNA012356 java.lang.String Could not get back a valid pid.
ARJUNA012359 java.lang.String SocketProcessId.getpid could not get unique port.
ARJUNA012361 INFO Error constructing mbean
ARJUNA012362 INFO Failed to create StateManagerWrapper
ARJUNA012363 java.lang.String Invalid rootName. Expected {0} but was {1}
ARJUNA012364 java.lang.String RecoveryActivator init failed for {0}
ARJUNA012365 java.lang.String Method not implemented
ARJUNA012366 WARN Unexpected data read from journal - file may be corrupt.
ARJUNA012367 java.lang.String Failed to create store dir {0}
ARJUNA012368 java.lang.String Node identifiers must be an integer and must be 1 or greater: {0}
ARJUNA012369 java.lang.String The node identifier was already set
ARJUNA012370 TRACE Previously committed row(s) deleted {0}
ARJUNA012371 WARN Image size {0} is greater than max allowed {1}
ARJUNA012372 FATAL The node identifier {0} was too long {1}, aborting initialization
ARJUNA012373 java.lang.String The node identifier {0} was too long {1}, aborting initialization
ARJUNA012374 FATAL The node identifier cannot be null, aborting initialization
ARJUNA012375 java.lang.String The node identifier cannot be null, aborting initialization
ARJUNA012376 WARN ObjectStore remove_state caught exception:
ARJUNA012377 WARN HornetqObjectStore remove_state caught exception:
ARJUNA012378 WARN ReaperElement appears to be wedged: {0}
ARJUNA012379 WARN ExpiredTransactionScanner - {0} is assumed complete and will be moved.
ARJUNA012380 INFO OSB: Error constructing record header reader
ARJUNA012381 WARN Action id {0} completed with multiple threads - thread {1} was in progress with {2}
ARJUNA012382 WARN Action id {0} could not be transitioned to committed
ARJUNA012383 WARN Action id {0} could not be updated during write_state
ARJUNA012384 WARN Action id {0} could not be inserted during write_state
ARJUNA012385 java.lang.String Could not read from object store
ARJUNA012386 java.lang.String Unexpected state type {0}
ARJUNA012387 FATAL Encoding {0} is not supported
ARJUNA012388 java.lang.String Encoding {0} is not supported
ARJUNA012389 INFO OSB: Error constructing record header reader: {0}
ARJUNA012390 WARN Error constructing mbean
ARJUNA012391 java.lang.String Could not initialize object store ''{0}'' of type ''{1}''
ARJUNA012392 WARN AbstractRecord.create {0} failed to create record class {1}.
ARJUNA012393 WARN The Artemis journal was requested to be AIO version but this is not available on your machine
ARJUNA012394 WARN Could not close transaction listener server socket ''{0}''
ARJUNA012395 WARN Could not close transaction listener socket connection ''{0}''
ARJUNA012396 WARN Cannot activate type ''{0}'' at object store ''{1}''
ARJUNA012397 WARN Could not extract elements from the cache store list
ARJUNA012398 WARN ObjectStoreException in doWork of CacheStore trying to perform state management
ARJUNA012399 WARN Problem in doWork of CacheStore trying to perform state management
ARJUNA012400 java.lang.String Cannot terminate the recovery manager as the implementation is not known. Could be the recovery manager was not started yet?
ARJUNA012401 java.lang.String There is already started a recovery manager in mode ''{0}'' which is different from the requested mode ''{1}''.If you consider starting in a different mode then first terminate the currently running recovery manager.
ARJUNA012402 java.lang.String PMemSlots instance already initialized, can't call init again
ARJUNA012403 java.lang.String Can't create pmem store in ''{0}'' - may not be an fs-dax location
ARJUNA012404 INFO Action id {0} - thread {1} at time {2} had stackTrace {3}
ARJUNA012405 INFO The asyncIO mode for the Artemis journal does not support maxIO=1, using the nearest value which is 2
ARJUNA012406 WARN Invalid class type in system property ObjStoreBrowserHandlers: ''{0}''
ARJUNA015001 WARN LockManagerFriend.getLink
ARJUNA015002 WARN LockManagerFriend.setLink
ARJUNA015004 WARN Object store exception on committing {0}
ARJUNA015009 WARN RecoveredTransactionalObject tried to access object store
ARJUNA015011 WARN RecoveredTransactionalObject::findHoldingTransaction - exception
ARJUNA015012 WARN Object store exception on removing uncommitted state: {0}
ARJUNA015017 WARN TORecoveryModule: searching for TOs:
ARJUNA015022 java.lang.String CadaverLockRecord::nestedAbort - no Current!
ARJUNA015023 java.lang.String CadaverLockRecord::nestedCommit - no Current!
ARJUNA015024 java.lang.String CadaverLockRecord::topLevelAbort - no Current!
ARJUNA015025 java.lang.String CadaverLockRecord::topLevelCommit - no Current!
ARJUNA015026 WARN LockManager: lock propagation failed
ARJUNA015027 WARN LockManager::unloadState() failed to remove empty lock state for object {0} of type {1}
ARJUNA015028 WARN LockManager.unloadState - could not save lock state: {0}
ARJUNA015029 WARN LockManager::unloadState() failed to write new state for object {0} of type {1}
ARJUNA015030 WARN LockManager::unloadState() failed to pack up new state for object {0} of type {1}
ARJUNA015031 WARN LockManager::setlock() no lock!
ARJUNA015032 WARN LockManager::setlock() cannot find action hierarchy
ARJUNA015033 WARN LockManager::setlock() cannot load existing lock states
ARJUNA015034 WARN LockManager::setlock() cannot activate object
ARJUNA015035 WARN LockManager::setlock() cannot save new lock states
ARJUNA015036 WARN Lockmanager::releaselock() could not load old lock states
ARJUNA015037 WARN Lockmanager::releaselock() could not unload new lock states
ARJUNA015038 WARN LockRecord::set_value() called illegally
ARJUNA015039 WARN LockRecord - release failed for action {0}
ARJUNA015040 WARN LockRecord::nestedAbort - no current action
ARJUNA015041 WARN LockRecord::nestedCommit - no current action
ARJUNA015042 WARN LockRecord - release failed for action {0}
ARJUNA015043 WARN LockRecord::topLevelCommit - no current action
ARJUNA015044 WARN Invocation of LockRecord::restore_state for {0} inappropriate - ignored for {1}
ARJUNA015050 WARN OptimisticLockRecord.topLevelPrepare state check failed for {0} will force rollback.
ARJUNA015051 WARN OptimisticLockRecord.topLevelCommit state check failed for {0} will force rollback.
ARJUNA015052 WARN LockManager::initialise() could not initialise lock store
ARJUNA016001 WARN could not get all object Uids.
ARJUNA016002 WARN Cannot add resource to table: no XID value available.
ARJUNA016004 WARN XARecoveryModule setup failed
ARJUNA016005 WARN {0} - failed to recover XAResource. status is {1}
ARJUNA016006 WARN {0} - forget threw exception
ARJUNA016008 WARN {0} - caught exception
ARJUNA016009 WARN Caught:
ARJUNA016013 INFO Rolling back {0}
ARJUNA016016 INFO {0} not an Arjuna XID
ARJUNA016017 INFO No XA recovery nodes specified. May not recover orphans.
ARJUNA016018 WARN XARecoveryModule periodicWork failed
ARJUNA016019 WARN {0} exception
ARJUNA016020 WARN {0} exception
ARJUNA016021 INFO JTA recovery delayed for {0}; got status {1} so waiting for coordinator driven recovery
ARJUNA016022 WARN Recovery threw:
ARJUNA016023 WARN JTA failed to recovery {0}; got status {1}
ARJUNA016025 WARN Unexpected recovery error
ARJUNA016027 WARN {0} got XA exception {1}
ARJUNA016028 WARN {0} got exception
ARJUNA016029 WARN SynchronizationImple.afterCompletion - failed for {0} with exception
ARJUNA016030 java.lang.String XAOnePhaseResource.pack failed to serialise resource
ARJUNA016031 WARN XAOnePhaseResource.rollback for {0} failed with exception
ARJUNA016032 java.lang.String failed to deserialise resource
ARJUNA016033 java.lang.String Unknown recovery type {0}
ARJUNA016034 INFO Being told to assume complete on Xid {0}
ARJUNA016035 WARN {0} - null transaction!
ARJUNA016036 WARN commit on {0} ({1}) failed with exception ${2}
ARJUNA016037 WARN Could not find new XAResource to use for recovering non-serializable XAResource {0}
ARJUNA016038 WARN No XAResource to recover {0}
ARJUNA016039 WARN onePhaseCommit on {0} ({1}) failed with exception {2}
ARJUNA016040 WARN {0} - null transaction!
ARJUNA016041 WARN prepare on {0} ({1}) failed with exception {2}
ARJUNA016042 WARN {0} - null transaction!
ARJUNA016043 WARN Exception on attempting to restore XAResource
ARJUNA016044 WARN An error occurred during restore_state for XAResource {0} and transaction {1}
ARJUNA016045 WARN attempted rollback of {0} ({1}) failed with exception code {2}
ARJUNA016046 WARN {0} - null transaction!
ARJUNA016047 WARN Could not serialize a Serializable XAResource!
ARJUNA016048 WARN An error occurred during save_state for XAResource {0} and transaction {1}
ARJUNA016049 WARN {0} called illegally.
ARJUNA016051 java.lang.String thread is already associated with a transaction!
ARJUNA016053 java.lang.String Could not commit transaction.
ARJUNA016054 java.lang.String could not register transaction
ARJUNA016055 WARN {0} caught exception
ARJUNA016056 WARN {0} - caught exception during delist : {1}
ARJUNA016058 WARN Ending suspended RMs failed when rolling back the transaction!
ARJUNA016059 java.lang.String Ending suspended RMs failed when rolling back the transaction, but transaction rolled back.
ARJUNA016060 WARN {0} - caught: {1}
ARJUNA016061 WARN {0} - XAResource.start returned: {2} for {1}
ARJUNA016062 java.lang.String illegal resource state
ARJUNA016063 java.lang.String The transaction is not active!
ARJUNA016064 java.lang.String The transaction is in an invalid state!
ARJUNA016066 ERROR Failed to create instance of TransactionImporter
ARJUNA016067 ERROR Failed to create instance of XATerminator
ARJUNA016068 java.lang.String Work already active!
ARJUNA016069 WARN failed to load Last Resource Optimisation Interface {0}
ARJUNA016070 WARN {0} - could not mark {1} as rollback only
ARJUNA016071 WARN {0} caught XAException: {1}
ARJUNA016072 java.lang.String No such transaction!
ARJUNA016073 WARN Current transaction is not an AtomicAction!
ARJUNA016074 java.lang.String no transaction!
ARJUNA016075 java.lang.String null synchronization parameter!
ARJUNA016076 java.lang.String Resource paramater is null!
ARJUNA016078 java.lang.String resource already suspended.
ARJUNA016079 java.lang.String Transaction rollback status is:
ARJUNA016080 java.lang.String Not allowed to terminate subordinate transaction directly.
ARJUNA016081 java.lang.String The transaction implementation threw a RollbackException
ARJUNA016082 java.lang.String Synchronizations are not allowed! Transaction status is
ARJUNA016083 java.lang.String Cannot register synchronization because the transaction is in aborted state
ARJUNA016084 java.lang.String The transaction implementation threw a SystemException
ARJUNA016085 WARN Caught the following error
ARJUNA016086 WARN {0} setTransactionTimeout on XAResource {1} threw: {2}
ARJUNA016087 WARN {0} - unknown resource
ARJUNA016088 WARN Could not call end on a suspended resource!
ARJUNA016089 WARN {0} - caught: {2} for {1}
ARJUNA016091 WARN Failed to lookup transaction manager in JNDI context
ARJUNA016093 WARN Failed to lookup user transaction in JNDI context
ARJUNA016096 java.lang.String Unable to instantiate TransactionSynchronizationRegistry implementation class!
ARJUNA016098 java.lang.String Null exception!
ARJUNA016099 java.lang.String Unknown error code:
ARJUNA016100 java.lang.String Xid unset
ARJUNA016101 java.lang.String Could not pack XidImple {0}
ARJUNA016102 java.lang.String The transaction is not active! Uid is {0}
ARJUNA016103 java.lang.String Error getting the status of the current transaction
ARJUNA016104 java.lang.String Error getting the current transaction
ARJUNA016105 java.lang.String Could not lookup the TransactionManager
ARJUNA016106 java.lang.String Could not lookup the TransactionSynchronizationRegistry
ARJUNA016107 java.lang.String Expected an @Transactional annotation at class and/or method level
ARJUNA016108 java.lang.String Wrong transaction on thread
ARJUNA016109 java.lang.String Contextual is null
ARJUNA016110 java.lang.String Transaction is required for invocation
ARJUNA016111 java.lang.String The node identifier cannot be null
ARJUNA016112 WARN Could not determine commit status of CMR resource {0} and transaction {1}
ARJUNA016113 INFO Xid {0} was committed by resource manager
ARJUNA016114 WARN Could not load {0} will try to get XAResource from the recovery helpers
ARJUNA016115 WARN Could not access object store to check for log so will leave record alone
ARJUNA016116 WARN Failed to create JMS connection
ARJUNA016117 WARN Failed to close JMS connection {0}
ARJUNA016118 WARN Failed to close JMS session {0}
ARJUNA016119 java.lang.String Failed to get transaction
ARJUNA016120 WARN Failed to get transaction
ARJUNA016121 java.lang.String Failed to get transaction status
ARJUNA016122 WARN Failed to get transaction status
ARJUNA016123 java.lang.String Failed to register synchronization
ARJUNA016124 WARN Failed to register synchronization
ARJUNA016125 java.lang.String Failed to enlist XA resource
ARJUNA016126 WARN Failed to enlist XA resource
ARJUNA016127 java.lang.String Failed to delist XA resource
ARJUNA016128 WARN Failed to delist XA resource
ARJUNA016129 WARN Could not end XA resource {0}
ARJUNA016130 FATAL Subordinate transaction was committed during prepare, this will look like a rollback {0}
ARJUNA016131 FATAL Subordinate transaction was not recovered successfully {0}
ARJUNA016132 WARN Cannot packt into output object state {0}
ARJUNA016133 WARN Cannot create a new instance of Xid of uid {0}, is branch: {1}, eisname: {2}
ARJUNA016134 WARN Cannot create a new instance of Xid of base xid {0}, is branch: {1}, eisname: {2}
ARJUNA016135 WARN Cannot read object {0} store for xid {1}
ARJUNA016136 WARN Cannot unpact state of the xid {0} loaded from recovery store {1} of txn type {2}
ARJUNA016137 ERROR Failed to get transaction status of {0}
ARJUNA016138 WARN Failed to enlist XA resource {0}
ARJUNA016139 ERROR Fail to cast class of transaction action {0}
ARJUNA016140 java.lang.String No subordinate transaction to drive for commit with xid: {0}
ARJUNA016141 java.lang.String Error committing transaction ''{0}'' for xid: {1}
ARJUNA016142 java.lang.String Not actived transaction ''{0}'' for xid: {1}
ARJUNA016143 WARN Problem during waiting for lock ''{0}'' whilst in state {1}
ARJUNA016144 java.lang.String No subordinate transaction to drive {0}, xid: {1}
ARJUNA016145 java.lang.String One phase commit for transaction ''{0}'' does not store data in the object store. Recovery is won''t able to decide about outcome. Transaction is marked as heuristic to be decided by administrator.
ARJUNA016146 java.lang.String Cannot work with the imported transaction as UID is null.
ARJUNA016147 java.lang.String Cannot recover imported transaction of UID ''{0}'' of transaction ''{1}'' as transaction base Xid is null.
ARJUNA016148 java.lang.String Cannot work further as the argument Xid is null.
ARJUNA016149 WARN Returned global transaction identifier and branch qualifier are null but format id is not -1. {0}
ARJUNA016150 INFO Returned global transaction identifier or branch qualifier is null. {0}
ARJUNA016151 java.lang.String Not supported for interception factory with non-weld CDI implementation for bean {0}.
ARJUNA016152 java.lang.String TransactionScoped context is not active as there is no active transaction on the thread
ARJUNA016153 java.lang.String Transaction is not allowed for invocation
ARJUNA017001 java.lang.String Rollback not allowed by transaction service.
ARJUNA017002 java.lang.String Connection is already associated with a different transaction! Obtain a new connection for this transaction.
ARJUNA017003 java.lang.String Checking transaction and found that this connection is already associated with a different transaction! Obtain a new connection for this transaction.
ARJUNA017004 java.lang.String AutoCommit is not allowed by the transaction service.
ARJUNA017005 java.lang.String An error occurred during close:
ARJUNA017006 java.lang.String Invalid transaction during close {0}
ARJUNA017007 DEBUG Connection will be closed now. Indications are that this db does not allow multiple connections in the same transaction {0}
ARJUNA017008 INFO No modifier information found for db. Connection will be closed immediately {0}
ARJUNA017009 java.lang.String Commit not allowed by transaction service.
ARJUNA017010 java.lang.String JDBC2 connection initialisation problem
ARJUNA017011 java.lang.String Delist of resource failed.
ARJUNA017013 WARN Caught exception
ARJUNA017016 java.lang.String Failed to load dynamic class
ARJUNA017017 java.lang.String enlist of resource failed
ARJUNA017018 WARN Failed to get modifier for driver:
ARJUNA017020 java.lang.String Transaction is not active on the thread!
ARJUNA017021 java.lang.String Could not get transaction information.
ARJUNA017024 WARN {0} - failed to set isolation level
ARJUNA017025 java.lang.String Could not resolve JNDI XADataSource
ARJUNA017027 WARN An exception occurred during initialisation.
ARJUNA017028 WARN {0} could not find information for connection!
ARJUNA017029 WARN An exception occurred during initialisation.
ARJUNA017031 java.lang.String rollback(Savepoint) not allowed inside distributed tx.
ARJUNA017032 WARN {0} - could not mark transaction rollback
ARJUNA017033 java.lang.String rollback(Savepoint) not allowed inside distributed tx.
ARJUNA017034 java.lang.String Cannot set readonly when within a transaction!
ARJUNA017035 java.lang.String setSavepoint not allowed inside distributed tx.
ARJUNA017037 java.lang.String Could not resolve JNDI XADataSource
ARJUNA017038 WARN ConnectionSynchronization could not close connection
ARJUNA017039 java.lang.String BasicXARecovery did not have enough connection configuration
ARJUNA017040 ERROR Cannot create JDBCXARecovery datasource of jndi name ''{0}''
ARJUNA017041 ERROR Cannot create JDBCXARecovery connection of datasource ''{0}'', user: {1}, password: {2}
ARJUNA017042 java.lang.String Could not resolve JNDI ''{0}'' of XADataSource from jndi properties ''{1}''
ARJUNA021001 WARN {0} caught exception whilst initialising Object Adapter.
ARJUNA021002 WARN {0}: exception caught for {1}
ARJUNA021003 WARN caught org.omg.CORBA.INITIALIZE whilst initialising Object Adapter. Check another ORB/service is not active on same port.
ARJUNA021004 WARN {0} - invalid POA: {1}
ARJUNA021005 WARN OA.createPOA - createPOA called without OA being initialised
ARJUNA021006 java.lang.String OA.initPOA called without initialised ORB.
ARJUNA021010 FATAL ORBInfo ORB specific class creation failed with exception
ARJUNA021013 WARN {0} - {1} option not supported by ORB.
ARJUNA021015 WARN Services.getService - could not find service: {0} in configuration file: {1}
ARJUNA021016 WARN {0} Suspect entry in configuration file: {1}
ARJUNA021017 WARN {0} - caught unexpected exception
ARJUNA021018 WARN Services.getService - {0} option not supported by ORB.
ARJUNA021019 WARN {0} - invalid bind mechanism in properties file
ARJUNA021021 WARN {0} - for: {1} threw exception
ARJUNA021023 WARN {0} called without root POA.
ARJUNA021025 WARN Exception whilst loading {1}
ARJUNA021026 WARN {0} - attempt to initialise {1} with null class name!
ARJUNA022003 INFO Removing old assumed complete transaction {0}
ARJUNA022006 FATAL The ORB has not been initialized yet
ARJUNA022008 WARN {0} caught exception
ARJUNA022009 WARN {0} does not support ORB: {1}
ARJUNA022010 java.lang.String Failed when getting a reference to PICurrent.
ARJUNA022011 WARN Failed to cancel transaction
ARJUNA022012 WARN Failed to mark transaction as rollback only
ARJUNA022013 WARN Failed to cancel transaction
ARJUNA022014 WARN {0} - default already set!
ARJUNA022015 WARN {0} - could not find {1} to remove.
ARJUNA022016 WARN Nested transactions not identical.
ARJUNA022017 WARN Interposed hierarchy is null!
ARJUNA022018 WARN TopLevel transactions not identical: {0} {1}
ARJUNA022019 WARN {0} - error, no child found!
ARJUNA022020 WARN {0} - not my child!
ARJUNA022021 WARN hierarchy: {0}
ARJUNA022022 WARN {0} for transaction {1} caught exception
ARJUNA022023 WARN {0} - no parent transaction given!
ARJUNA022024 WARN {0} caught exception
ARJUNA022025 WARN {0} attempt to mark transaction {1} as rollback only threw exception
ARJUNA022026 WARN Creation of RecoveryCoordinator for {0} threw exception
ARJUNA022027 java.lang.String not created!
ARJUNA022028 WARN {0} called on still running transaction!
ARJUNA022029 WARN {0} - could not get unique identifier of object.
ARJUNA022030 WARN {0} - none zero Synchronization list!
ARJUNA022031 java.lang.String could not destroy object:
ARJUNA022032 WARN {0} caught exception
ARJUNA022033 WARN {0} - synchronizations have not been called!
ARJUNA022034 WARN {0} - transaction not in prepared state: {1}
ARJUNA022035 WARN {0} could not destroy object
ARJUNA022036 WARN Could not remove child {0} from {1}
ARJUNA022037 WARN {0} caught exception
ARJUNA022038 WARN {0} caught exception
ARJUNA022039 WARN {0} - could not register interposed hierarchy!
ARJUNA022040 WARN {0} - could not register interposed hierarchy!
ARJUNA022041 WARN {0} - no coordinator to use!
ARJUNA022042 WARN {0} - no transaction!
ARJUNA022043 WARN {0} - attempt to commit with null control!
ARJUNA022044 WARN {0} - attempt to rollback transaction will null control!
ARJUNA022045 WARN {0} - could not register as no Coordinator has been given!
ARJUNA022046 WARN Failed to destroy server-side synchronization object!
ARJUNA022047 java.lang.String Concurrent children found for restricted interposition!
ARJUNA022048 java.lang.String {0} Concurrent children found for restricted interposition!
ARJUNA022049 WARN {0} - found concurrent ({1}) transactions!
ARJUNA022050 WARN {0} - found concurrent ({1}) transactions!
ARJUNA022051 WARN {0} status of transaction is different from our status: <{1}, {2}>
ARJUNA022052 WARN {0} - could not register interposed hierarchy!
ARJUNA022053 WARN {0} - could not register interposed hierarchy!
ARJUNA022054 java.lang.String Invalid Uid:
ARJUNA022069 WARN Failed to retreive the Object reference of the default RecoverCoordinator Object.
ARJUNA022071 WARN Failed to build service context with the ObjectId
ARJUNA022072 WARN Failed in ClientInitializer::post_init -
ARJUNA022075 WARN {0}.replay_completion got exception
ARJUNA022077 WARN RCManager.makeRC did not make rcvco reference
ARJUNA022078 WARN RCManager could not find file in object store.
ARJUNA022079 WARN RCManager could not find file in object store during setup.
ARJUNA022080 WARN Unexpected exception during IOR setup
ARJUNA022081 WARN Failed to create poa for recoverycoordinators
ARJUNA022083 WARN {0} - Failed to start RC service
ARJUNA022085 FATAL Unable to create file ObjectId - security problems
ARJUNA022087 INFO RecoveryServer using existing ORB
ARJUNA022089 WARN RootPOA is null. Initialization failed. Check no conflicting or duplicate service is running.
ARJUNA022091 WARN Failed in ServerInitializer::post_init -
ARJUNA022093 java.lang.String Cannot create a codec of the required encoding.
ARJUNA022094 WARN {0} - a failure occured when getting {1} codec - unknown encoding.
ARJUNA022095 WARN {0} - duplicate interceptor name for {1} when registering
ARJUNA022096 WARN Context interceptor caught an unexpected exception
ARJUNA022097 java.lang.String Invalid portable interceptor transaction parameter!
ARJUNA022098 java.lang.String A server-side request interceptor already exists with that name.
ARJUNA022099 WARN {0} caught an unexpected exception
ARJUNA022100 java.lang.String Cannot create a codec of the required encoding.
ARJUNA022101 WARN {0} - a failure occured when getting {1} codec - unknown encoding.
ARJUNA022102 WARN {0} - duplicate interceptor name for {1} when registering
ARJUNA022103 java.lang.String Invalid portable interceptor transaction parameter!
ARJUNA022104 java.lang.String A server-side request interceptor already exists with that name.
ARJUNA022105 WARN {0} caught an unexpected exception
ARJUNA022106 java.lang.String is not a valid unique identifier!
ARJUNA022107 WARN {0} for {1} caught exception
ARJUNA022108 WARN {0} attempt to clean up failed with exception
ARJUNA022109 WARN Resolution of OTS server failed
ARJUNA022110 WARN Resolution of OTS server failed - invalid name
ARJUNA022113 INFO Removing old contact item {0}
ARJUNA022116 WARN Could not locate supported ORB for RecoveryCoordinator initialisation.
ARJUNA022121 WARN The Recovery Service Initialisation failed
ARJUNA022125 FATAL RecoveryCoordinator service can only be provided in RecoveryManager
ARJUNA022127 WARN Problem with storing process/factory link
ARJUNA022128 WARN Attempted to read FactoryContactItem of different version
ARJUNA022129 WARN Stored IOR is not an ArjunaFactory
ARJUNA022130 WARN Problem with restoring process/factory link
ARJUNA022131 WARN Problem with restoring process/factory link
ARJUNA022132 WARN Problem with storing process/factory link
ARJUNA022133 WARN Problem with removing contact item
ARJUNA022138 WARN NoTransaction exception on trying to contact original process
ARJUNA022139 WARN CORBA exception on trying to contact original process
ARJUNA022140 WARN Exception on trying to contact original process
ARJUNA022142 WARN no known contactitem for {0}
ARJUNA022143 WARN surprise item in StatusChecker list for {0}
ARJUNA022145 WARN StatusChecked.getStatus - found intentions list for apparently unknown transaction: {0}
ARJUNA022151 WARN BAD_PARAM exception on trying to contact original process
ARJUNA022152 WARN {0} - being passed a null reference. Will ignore!
ARJUNA022156 WARN GenericRecoveryCreator: Missing params to create
ARJUNA022158 WARN System exception when creating RecoveryCoordinator object key
ARJUNA022159 WARN RecoveryCoordinatorId could not decode data {0}
ARJUNA022161 WARN Failure recovery not supported for this ORB.
ARJUNA022167 WARN Got TRANSIENT from ORB for tx {0}, unable determine status, will retry later
ARJUNA022169 WARN RecoveredServerTransaction: caught NotPrepared
ARJUNA022170 WARN RecoveredServerTransaction: caught unexpected exception
ARJUNA022171 WARN RecoveredServerTransaction: {0} is invalid
ARJUNA022175 WARN RecoveredServerTransaction - activate of {0} failed!
ARJUNA022178 INFO ServerTransaction {0} unable determine status - retry later
ARJUNA022179 WARN RecoveredServerTransaction.replayPhase2: unexpected Status: {0}
ARJUNA022183 WARN RecoveredTransaction activate of {0} failed
ARJUNA022184 WARN RecoveredTransaction activate of {0} failed
ARJUNA022186 WARN RecoveredTransaction.replayPhase2 for {0} failed
ARJUNA022188 WARN RecoveredTransaction.removeOldStoreEntry - problem
ARJUNA022190 INFO ServerTransactionRecoveryModule - First Pass
ARJUNA022191 INFO ServerTransactionRecoveryModule - Second Pass
ARJUNA022192 INFO ServerTransactionRecoveryModule - Transaction {0} still in ActionStore
ARJUNA022199 INFO TopLevelTransactionRecoveryModule First Pass
ARJUNA022200 INFO TopLevelTransactionRecoveryModule Second Pass
ARJUNA022202 WARN TransactionCacheItem.loadTransaction - unknown type: {0}
ARJUNA022206 INFO Transaction {0} assumed complete - will not poll any more
ARJUNA022207 INFO Transaction {0} recovery completed
ARJUNA022213 INFO TransactionRecoveryModule.periodicWorkFirstPass()
ARJUNA022214 INFO TransactionRecoveryModule.periodicWorkSecondPass()
ARJUNA022215 WARN TransactionRecoveryModule: transaction type not set
ARJUNA022217 WARN TransactionRecoveryModule: Object store exception
ARJUNA022219 INFO Transaction {0} still in ActionStore
ARJUNA022223 WARN {0} caught exception
ARJUNA022224 WARN {0} - no parent!
ARJUNA022225 WARN {0} called without a resource reference!
ARJUNA022226 WARN {0} failed. Returning default value: {1}
ARJUNA022227 WARN {0} called illegally!
ARJUNA022228 WARN {0} failed. Returning default value: {1}
ARJUNA022229 WARN {0} has no parent transaction!
ARJUNA022230 WARN {0} caught exception
ARJUNA022231 WARN {0} called illegally.
ARJUNA022232 WARN {0} called without a resource!
ARJUNA022233 WARN {0} caught unexpected exception
ARJUNA022234 WARN {0} called multiple times.
ARJUNA022235 WARN Could not rollback transaction {0}
ARJUNA022236 WARN Could not rollback transaction {0} as it does not exist!
ARJUNA022237 WARN {0} - cannot rollback {1}
ARJUNA022239 WARN {0} caught unexpected exception
ARJUNA022240 WARN {0} - no transaction!
ARJUNA022241 WARN {0} - terminated out of sequence {1}
ARJUNA022242 WARN {0} - running atomic transaction going out of scope. Will roll back. {1}
ARJUNA022243 WARN {0} - transaction unavailable.
ARJUNA022244 WARN Will roll back. Current transaction is {0}
ARJUNA022245 WARN Cannot determine transaction name!
ARJUNA022246 WARN {0} caught exception
ARJUNA022247 WARN Top-level transaction going out of scope with nested transaction {0} still set.
ARJUNA022248 WARN {0} - could not unregister from transaction!
ARJUNA022249 WARN {0} - could not resume transaction
ARJUNA022250 java.lang.String could not resume transaction:
ARJUNA022251 INFO The ORBManager is already associated with an ORB/OA.
ARJUNA022252 WARN Failed to remove old ObjectStore entry
ARJUNA022255 java.lang.String A client-side request interceptor already exists with that name.
ARJUNA022256 java.lang.String A client-side request interceptor already exists with that name.
ARJUNA022257 WARN {0} - unknown interposition type: {1}
ARJUNA022258 java.lang.String Transaction was inactive
ARJUNA022259 WARN ExtendedResourceRecord detected that the remote side had cleaned up, assuming 1PC resource
ARJUNA022260 DEBUG {0} caught exception
ARJUNA022261 WARN ServerTopLevelAction detected that the transaction was inactive
ARJUNA022262 java.lang.String The node identifier cannot be null
ARJUNA022263 INFO rollback for {0} was already rolled back
ARJUNA022264 INFO cannot read subordinate uid from object store {0} on input object state {1}
ARJUNA022265 INFO failure on processing doRecover for xid {0} and parent node name {1}
ARJUNA022266 WARN topLevelCommit of resource {0} failed
ARJUNA024001 INFO XA recovery committing {0}
ARJUNA024002 INFO XA recovery rolling back {0}
ARJUNA024004 WARN Caught the following error while trying to single phase complete resource
ARJUNA024005 WARN Committing of resource state failed.
ARJUNA024006 WARN {0} caused an error from resource {1} in transaction {2}
ARJUNA024007 WARN You have chosen to disable the Multiple Last Resources warning. You will see it only once.
ARJUNA024008 WARN Adding multiple last resources is disallowed. Current resource is {0}
ARJUNA024009 WARN Multiple last resources have been added to the current transaction. This is transactionally unsafe and should not be relied upon. Current resource is {0}
ARJUNA024010 WARN You have chosen to enable multiple last resources in the transaction manager. This is transactionally unsafe and should not be relied upon.
ARJUNA024011 WARN Reading state caught exception
ARJUNA024012 WARN Could not find new XAResource to use for recovering non-serializable XAResource {0}
ARJUNA024013 WARN {0} caught NotPrepared exception during recovery phase!
ARJUNA024014 WARN {0} - null or invalid transaction!
ARJUNA024015 WARN XAResource prepare failed on resource {0} for transaction {1} with: {2}
ARJUNA024016 WARN Recovery of resource failed when trying to call {0} got exception
ARJUNA024017 WARN Attempted shutdown of resource failed with exception
ARJUNA024018 WARN Exception on attempting to resource XAResource
ARJUNA024019 WARN Unexpected exception on attempting to resource XAResource
ARJUNA024020 WARN Could not serialize a serializable XAResource!
ARJUNA024021 WARN {0} caught unexpected exception during recovery phase!
ARJUNA024022 WARN Updating of resource state failed.
ARJUNA024023 WARN {0} caused an XA error: {1} from resource {2} in transaction {3}
ARJUNA024024 java.lang.String thread is already associated with a transaction and subtransaction support is not enabled!
ARJUNA024025 WARN Delist of resource failed with exception
ARJUNA024026 WARN Ending suspended RMs failed when rolling back the transaction!
ARJUNA024027 java.lang.String Ending suspended RMs failed when rolling back the transaction, but transaction rolled back.
ARJUNA024028 java.lang.String illegal resource state:
ARJUNA024029 java.lang.String Transaction is not active.
ARJUNA024031 java.lang.String Invalid transaction.
ARJUNA024032 java.lang.String Work already active!
ARJUNA024033 WARN failed to load Last Resource Optimisation Interface {0}
ARJUNA024034 java.lang.String Could not enlist resource because the transaction is marked for rollback.
ARJUNA024035 java.lang.String No such transaction!
ARJUNA024036 WARN Current transaction is not a TransactionImple
ARJUNA024037 java.lang.String no transaction!
ARJUNA024038 java.lang.String no transaction! Caught:
ARJUNA024040 java.lang.String paramater is null!
ARJUNA024042 java.lang.String is already suspended!
ARJUNA024043 WARN An error occurred while checking if this is a new resource manager:
ARJUNA024044 WARN {0} could not mark the transaction as rollback only
ARJUNA024046 WARN {0} returned XA error {1} for transaction {2}
ARJUNA024048 java.lang.String Synchronizations are not allowed!
ARJUNA024049 WARN cleanup synchronization failed to register:
ARJUNA024050 java.lang.String The transaction implementation threw a RollbackException
ARJUNA024051 java.lang.String The transaction implementation threw a SystemException
ARJUNA024052 WARN Active thread error:
ARJUNA024053 WARN {0} attempt to delist unknown resource!
ARJUNA024054 java.lang.String The current transaction does not match this transaction!
ARJUNA024055 WARN Could not call end on a suspended resource!
ARJUNA024056 WARN {0} caught XA exception: {1}
ARJUNA024057 WARN {0} setTransactionTimeout on XAResource {2} threw: {1}
ARJUNA024058 WARN Could not deserialize class. Will wait for bottom up recovery
ARJUNA024059 java.lang.String Inflow recovery is not supported for JTS mode
ARJUNA024060 WARN Could not end XA resource {0}
ARJUNA024061 WARN Could not enlist XA resource {0} with params {1}
ARJUNA024062 WARN ORB ''{0}'' occured on one phase commit for xid {1}
ARJUNA024063 WARN Cannot save state of xid {0}
ARJUNA024064 java.lang.String The current transaction {0} does not match this transaction
ARJUNA024065 WARN Cannot save state of output object state {0} of object type {1}
ARJUNA024066 WARN Cannot restore state of input object state {0} of object type {1}
ARJUNA032001 ERROR createConnection got exception
ARJUNA032002 ERROR createDataSource got exception during getXADataSource call
ARJUNA032003 WARN InstanceNotFound. Datasource {0} not deployed, or wrong name?
ARJUNA032004 ERROR createDataSource {0} got exception
ARJUNA032005 ERROR Unexpected exception occurred
ARJUNA032006 ERROR unknown Tx PropagationContext
ARJUNA032007 ERROR getCurrentTransaction() failed
ARJUNA032008 ERROR unknown Tx PropagationContext
ARJUNA032009 ERROR Unexpected exception occurred
ARJUNA032010 INFO JBossTS Recovery Service (tag: {0}) - JBoss Inc.
ARJUNA032011 java.lang.String No suitable recovery module in which to register XAResourceRecovery instance
ARJUNA032012 java.lang.String No recovery system in which to register XAResourceRecovery instance
ARJUNA032013 INFO Starting transaction recovery manager
ARJUNA032014 INFO Stopping transaction recovery manager
ARJUNA032015 java.lang.String Transaction has or will rollback.
ARJUNA032016 java.lang.String Unexpected error retrieving transaction status
ARJUNA032017 INFO JBossTS Transaction Service ({0} version - tag: {1}) - JBoss Inc.
ARJUNA032018 INFO Destroying TransactionManagerService
ARJUNA032019 WARN XAExceptionFormatters are not supported by the JBossTS Transaction Service - this warning can safely be ignored
ARJUNA032020 java.lang.String Transaction is completing!
ARJUNA032021 java.lang.String Transaction is inactive!
ARJUNA032022 java.lang.String Unexpected error!
ARJUNA032023 java.lang.String Work not registered!
ARJUNA032024 INFO JTS transaction recovery manager
ARJUNA032025 java.lang.String Transaction has or will rollback.
ARJUNA032026 java.lang.String Unexpected error retrieving transaction status
ARJUNA032027 java.lang.String Problem encountered while trying to register transaction manager with ORB!
ARJUNA032028 INFO registering transaction manager
ARJUNA032029 java.lang.String Transaction is completing!
ARJUNA032030 java.lang.String Transaction is inactive!
ARJUNA032031 java.lang.String Unexpected error!
ARJUNA032032 java.lang.String Work not registered!
ARJUNA032033 WARN AppServerJDBCXARecovery should no longer be used. See jira.jboss.org/browse/JBTM-756
ARJUNA032034 INFO Suspending transaction recovery manager
ARJUNA032035 INFO Resuming transaction recovery manager
ARJUNA032036 java.lang.String Unsupported transaction type. Transaction type is {0}
ARJUNA032037 java.lang.String Transaction listeners are disabled and should not be used. If you need them they can be enabled via -D{0}=true
ARJUNA032038 java.lang.String Invalid transaction local resource [{0}] associated with key {1}.
ARJUNA032039 java.lang.String Cannot lock a TransactionLocal after the Transaction [{0}] has ended
ARJUNA032040 java.lang.String Cannot store value in a TransactionLocal after the Transaction [{0}] has ended
ARJUNA032041 java.lang.String Unlock called from wrong thread. Locking thread: {0}, current thread: {1}
ARJUNA033001 ERROR Unable to get subordinate transaction id
ARJUNA033002 ERROR Unable to recover subordinate transaction id {0}
ARJUNA033003 WARN prepare on Xid={0} returning Aborted
ARJUNA033004 ERROR commit on Xid={0} failed
ARJUNA033005 ERROR rollback on Xid={0} failed
ARJUNA033006 INFO InboundBridgeRecoveryManager starting
ARJUNA033007 INFO InboundBridgeRecoveryManager stopping
ARJUNA033008 ERROR problem rolling back orphaned subordinate tx {0}
ARJUNA033009 ERROR Problem whilst scanning for in-doubt subordinate transactions
ARJUNA033010 WARN prepare on Xid={0} failed, setting RollbackOnly
ARJUNA033011 WARN setRollbackOnly failed
ARJUNA033012 WARN stop failed for Xid {0}
ARJUNA033013 INFO OutboundBridgeRecoveryManager starting
ARJUNA033014 INFO OutboundBridgeRecoveryManager stopping
ARJUNA033015 WARN unexpected Status {0}, treating as ROLLEDBACK
ARJUNA033016 ERROR Unable to recover subordinate transaction id={0},
ARJUNA033017 ERROR Unable to enlist BridgeXAResource or register BridgeSynchronization
ARJUNA033018 ERROR Error on prepareVolatile of bridge wrapper {0}
ARJUNA041001 WARN allHighLevelServices threw exception
ARJUNA041002 WARN assembling contexts and received exception
ARJUNA041004 java.lang.String Failed to create doc
ARJUNA041005 WARN Activity.start caught exception
ARJUNA041006 WARN currentActivity.end threw:
ARJUNA041007 WARN Activity.completed caught exception
ARJUNA041008 WARN Activity.suspended caught:
ARJUNA041009 WARN Activity.resumed caught exception
ARJUNA041010 java.lang.String Unknown activity implementation!
ARJUNA041011 java.lang.String State incompatible to start activity:
ARJUNA041012 java.lang.String Cannot remove child activity from parent as parent''s status is:
ARJUNA041013 java.lang.String Activity cannot complete as it has active children:
ARJUNA041014 java.lang.String Cannot complete activity in status:
ARJUNA041015 java.lang.String Cannot set completion status on activity as the status is incompatible:
ARJUNA041016 java.lang.String Cannot change completion status, value is incompatible:
ARJUNA041017 java.lang.String Cannot enlist null child!
ARJUNA041018 java.lang.String Cannot enlist child activity with parent as parent''s status is:
ARJUNA041019 java.lang.String Cannot remove null child!
ARJUNA041020 java.lang.String The following child activity is unknown to the parent:
ARJUNA041021 WARN ActivityReaper: could not terminate.
ARJUNA041022 java.lang.String HLS not found!
ARJUNA042001 ERROR Unhandled error executing task
ARJUNA042002 java.lang.String Invalid fault type enumeration: {0}
ARJUNA042003 java.lang.String setNamespaceContext unsupported
ARJUNA042004 java.lang.String writeEndDocument unsupported
ARJUNA042005 java.lang.String close unsupported
ARJUNA042006 java.lang.String writeComment unsupported
ARJUNA042007 java.lang.String writeProcessingInstruction unsupported
ARJUNA042008 java.lang.String writeProcessingInstruction unsupported
ARJUNA042009 java.lang.String writeEntityRef unsupported
ARJUNA042010 java.lang.String writeDTD unsupported
ARJUNA042011 java.lang.String writeStartDocument unsupported
ARJUNA042012 java.lang.String writeStartDocument unsupported
ARJUNA042013 java.lang.String writeStartDocument unsupported
ARJUNA042014 java.lang.String End of stream
ARJUNA042015 java.lang.String Unexpected child node: {0}
ARJUNA042016 java.lang.String Unexpected type: {0}
ARJUNA042017 java.lang.String Unexpected type: {0}
ARJUNA042018 java.lang.String Unexpected event type
ARJUNA042019 java.lang.String Unsupported operation
ARJUNA042020 java.lang.String Unsupported operation
ARJUNA042021 java.lang.String CData sections not currently supported.
ARJUNA042022 WARN Service {0} received unexpected fault: {1}
ARJUNA042023 java.lang.String Unexpected start element: {0}
ARJUNA042024 java.lang.String Unexpected start element: {0}
ARJUNA042025 java.lang.String NotUnderstood elements cannot have embedded elements.
ARJUNA042026 java.lang.String Unexpected element: {0}
ARJUNA042027 java.lang.String Unexpected body element: {0}
ARJUNA042028 java.lang.String Did not understand header: {0}
ARJUNA042029 java.lang.String Encountered unexpected event type: {0}
ARJUNA042030 java.lang.String Text elements cannot have embedded elements.
ARJUNA042031 java.lang.String No response from RPC request
ARJUNA042032 java.lang.String Invalid destination URL
ARJUNA042033 java.lang.String Unsupported URL type, not HTTP or HTTPS
ARJUNA042034 java.lang.String Invalid response code returned: {0}
ARJUNA042035 java.lang.String Unexpected end element: {0}
ARJUNA042036 java.lang.String Unexpected end of document reached
ARJUNA042037 java.lang.String Unexpected start element: {0}
ARJUNA042038 java.lang.String Addressing context is not valid
ARJUNA042039 java.lang.String Unexpected element name: {0}
ARJUNA042040 java.lang.String Invalid QName value for attributed QName
ARJUNA042041 java.lang.String Unexpected element name: {0}
ARJUNA042043 java.lang.String Unexpected element name: {0}
ARJUNA042044 java.lang.String Unexpected second element name: {0}
ARJUNA042045 java.lang.String Invalid QName value for attributed QName
ARJUNA042046 java.lang.String Unexpected element name: {0}
ARJUNA042047 java.lang.String Unexpected element name: {0}
ARJUNA042048 java.lang.String Addressing context does not specify destination.
ARJUNA042049 java.lang.String Invalid destination specified in addressing context.
ARJUNA042050 java.lang.String No SOAP client registered for scheme: {0}.
ARJUNA042051 java.lang.String Invalid replyTo specified in addressing context.
ARJUNA042052 java.lang.String Unexpected SOAP message type returned.
ARJUNA042053 ERROR Unhandled SOAP fault {0} during asynchronous execution of service.
ARJUNA042054 java.lang.String Arjuna context is not valid
ARJUNA042055 java.lang.String Unexpected element name: {0}
ARJUNA042056 java.lang.String InstanceIdentifier elements cannot have embedded elements.
ARJUNA042057 java.lang.String non numerical value: {0}
ARJUNA042058 java.lang.String Coordination Context is not valid
ARJUNA042059 java.lang.String Unexpected element name: {0}
ARJUNA042060 java.lang.String Create Coordination Context Response is not valid
ARJUNA042061 java.lang.String Unexpected element name: {0}
ARJUNA042062 java.lang.String Create Coordination Context is not valid
ARJUNA042063 java.lang.String Unexpected element name: {0}
ARJUNA042064 java.lang.String Register is not valid
ARJUNA042065 java.lang.String Unexpected element name: {0}
ARJUNA042066 java.lang.String Register is not valid
ARJUNA042067 java.lang.String Unexpected element name: {0}
ARJUNA042071 java.lang.String Callback execution failed
ARJUNA042072 java.lang.String Callback was not triggered
ARJUNA042073 java.lang.String Callback execution failed
ARJUNA042074 java.lang.String Callback was not triggered
ARJUNA042075 java.lang.String Invalid create coordination context parameters
ARJUNA042076 java.lang.String Participant already registered
ARJUNA042077 java.lang.String Invalid protocol identifier
ARJUNA042078 java.lang.String Invalid coordination context state
ARJUNA042079 java.lang.String Unknown activity identifier
ARJUNA042080 java.lang.String Invalid create coordination context parameters
ARJUNA042081 java.lang.String Participant already registered for this protocol identifier
ARJUNA042082 java.lang.String Invalid protocol identifier
ARJUNA042083 java.lang.String Invalid coordination context state
ARJUNA042084 java.lang.String Unknown activity identifier
ARJUNA042085 WARN Failed to create service instance: {0}
ARJUNA042086 ERROR Empty messageId received by an async endpoint
ARJUNA042087 ERROR Failure to register protocol {0} and instance {1}
ARJUNA042088 ERROR Failure to create coordination context of type {0}
ARJUNA043001 java.lang.String Invalid outcome enumeration: {0}
ARJUNA043002 java.lang.String PrepareResponse elements cannot have embedded elements.
ARJUNA043003 java.lang.String ReplayResponse elements cannot have embedded elements.
ARJUNA043004 java.lang.String Invalid fault type enumeration: {0}
ARJUNA043005 java.lang.String Invalid vote enumeration: {0}
ARJUNA043006 java.lang.String State elements cannot have embedded elements.
ARJUNA043007 java.lang.String Invalid state enumeration: {0}
ARJUNA043008 java.lang.String Invalid soap fault type
ARJUNA043009 java.lang.String Invalid fault type enumeration: {0}
ARJUNA043010 java.lang.String Invalid state enumeration: {0}
ARJUNA043011 java.lang.String Unknown transaction
ARJUNA043012 java.lang.String Unknown participant
ARJUNA043013 java.lang.String Unknown error
ARJUNA043014 java.lang.String Unknown participant
ARJUNA043015 java.lang.String Unknown transaction
ARJUNA043016 java.lang.String Unknown error
ARJUNA043017 INFO Unexpected exception while sending InvalidStateFault to participant {0}
ARJUNA043018 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043020 java.lang.String Complete called on unknown participant
ARJUNA043021 INFO Unexpected exception while sending InvalidStateFault to coordinator for participant {0}
ARJUNA043022 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043023 WARN Unexpected exception thrown from aborted:
ARJUNA043024 WARN Aborted called on unknown coordinator: {0}
ARJUNA043025 WARN Unexpected exception thrown from committed:
ARJUNA043026 WARN Committed called on unknown coordinator: {0}
ARJUNA043027 WARN Unexpected exception thrown from prepared
ARJUNA043028 WARN Prepared called on unknown coordinator: {0}
ARJUNA043029 WARN Ignoring prepared called on unidentified coordinator until recovery pass is complete: {0}
ARJUNA043030 WARN Unexpected exception thrown from readOnly
ARJUNA043031 WARN ReadOnly called on unknown coordinator: {0}
ARJUNA043032 WARN Unexpected exception thrown from replay
ARJUNA043033 WARN Replay called on unknown coordinator: {0}
ARJUNA043034 java.lang.String Unknown Transaction.
ARJUNA043035 WARN Unexpected exception thrown from soapFault
ARJUNA043036 WARN SoapFault called on unknown coordinator: {0}
ARJUNA043038 INFO Unexpected exception while sending InvalidStateFault to participant {0}
ARJUNA043039 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043041 INFO Unexpected exception while sending InvalidStateFault to coordinator for participant {0}
ARJUNA043042 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043043 WARN Unexpected exception thrown from commit
ARJUNA043044 WARN Commit called on unknown participant: {0}
ARJUNA043045 WARN Commit request dropped pending WS-AT participant recovery manager initialization for participant: {0}
ARJUNA043046 WARN Commit request dropped pending WS-AT participant recovery manager scan for unknown participant: {0}
ARJUNA043047 WARN Commit request dropped pending registration of application-specific recovery module for WS-AT participant: {0}
ARJUNA043048 WARN Unexpected exception thrown from prepare
ARJUNA043049 WARN Prepare called on unknown participant: {0}
ARJUNA043051 WARN Unexpected exception thrown from rollback
ARJUNA043052 WARN Rollback called on unknown participant: {0}
ARJUNA043053 WARN Rollback request dropped pending WS-AT participant recovery manager initialization for participant: {0}
ARJUNA043054 WARN Rollback request dropped pending WS-AT participant recovery manager scan for unknown participant: {0}
ARJUNA043055 WARN Rollback request dropped pending registration of application-specific recovery module for WS-AT participant: {0}
ARJUNA043056 WARN Unexpected exception thrown from soapFault
ARJUNA043057 WARN SoapFault called on unknown participant: {0}
ARJUNA043058 java.lang.String Unknown transaction
ARJUNA043059 java.lang.String Unknown participant
ARJUNA043060 java.lang.String Unknown transaction
ARJUNA043061 java.lang.String Unknown error
ARJUNA043062 java.lang.String Unknown participant
ARJUNA043063 java.lang.String Unknown error
ARJUNA043064 java.lang.String Unknown participant
ARJUNA043065 java.lang.String Unknown transaction
ARJUNA043066 java.lang.String Transaction rolled back
ARJUNA043067 java.lang.String Unknown error
ARJUNA043071 WARN Faulted exception from participant compensate for WS-BA participant {0}
ARJUNA043073 WARN Unable to write log record during participant complete for WS-BA parfticipant {0}
ARJUNA043074 WARN Unable to delete recovery record during faulted for WS-BA participant {0}
ARJUNA043076 WARN Unable to delete recovery record during soapFault processing for WS-BA participant {0}
ARJUNA043077 WARN Compensating participant {0}
ARJUNA043078 WARN Notifying unexpected error for participant {0}
ARJUNA043079 java.lang.String Inconsistent internal state.
ARJUNA043080 WARN Unable to write recovery record during completed for WS-BA participant {0}
ARJUNA043081 WARN Unable to delete recovery record during completed for WS-BA participant {0}
ARJUNA043082 WARN Unable to delete recovery record during close for WS-BA participant {0}
ARJUNA043083 WARN Faulted exception from participant compensate for WS-BA participant {0}
ARJUNA043084 WARN Unexpected exception from participant compensate for WS-BA participant {0}
ARJUNA043085 WARN Unable to delete recovery record during compensate for WS-BA participant {0}
ARJUNA043086 WARN Unable to delete recovery record during faulted for WS-BA participant {0}
ARJUNA043088 WARN Unable to delete recovery record during soapFault processing for WS-BA participant {0}
ARJUNA043089 WARN Cancelling participant {0}
ARJUNA043090 WARN Notifying unexpected error for participant {0}
ARJUNA043091 WARN Unable to delete recovery record during prepare for participant {0}
ARJUNA043092 WARN Unable to delete recovery record at commit for participant {0}
ARJUNA043094 WARN could not delete recovery record for participant {0}
ARJUNA043095 ERROR Unrecoverable error for participant {0} : {1} {2}
ARJUNA043096 ERROR Unable to delete recovery record at commit for participant {0}
ARJUNA043097 java.lang.String Unknown error
ARJUNA043098 ERROR Error persisting participant state
ARJUNA043099 ERROR Error restoring participant state
ARJUNA043100 WARN Error persisting participant state
ARJUNA043101 ERROR Error restoring participant state
ARJUNA043102 WARN Error persisting participant state
ARJUNA043103 WARN Error restoring participant state
ARJUNA043104 java.lang.String Unknown transaction
ARJUNA043105 java.lang.String Unknown participant
ARJUNA043106 java.lang.String Unknown error
ARJUNA043107 java.lang.String Unknown participant
ARJUNA043108 java.lang.String Unknown transaction
ARJUNA043109 java.lang.String Unknown error
ARJUNA043110 INFO Unexpected exception while sending InvalidStateFault to participant {0}
ARJUNA043111 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043112 WARN Cancel request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043113 WARN Cancel request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043114 WARN Cancel request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043115 WARN Close request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043116 WARN Close request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043117 WARN Close request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043118 WARN Compensate request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043119 WARN Compensate request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043120 WARN Compensate request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043122 WARN Complete request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043123 WARN Complete request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043124 WARN Complete request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043127 INFO Unexpected exception while sending InvalidStateFault to coordinator for participant {0}
ARJUNA043128 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043129 WARN Unexpected exception thrown from aborted
ARJUNA043130 WARN Aborted called on unknown coordinator: {0}
ARJUNA043131 WARN Unexpected exception thrown from committed
ARJUNA043132 WARN Committed called on unknown coordinator: {0}
ARJUNA043133 WARN Unexpected exception thrown from prepared
ARJUNA043134 WARN Prepared called on unknown coordinator: {0}
ARJUNA043135 WARN Ignoring prepared called on unidentified coordinator until recovery pass is complete: {0}
ARJUNA043136 WARN Unexpected exception thrown from readOnly
ARJUNA043137 WARN ReadOnly called on unknown coordinator: {0}
ARJUNA043138 java.lang.String Unknown Transaction.
ARJUNA043139 WARN Unexpected exception thrown from soapFault
ARJUNA043140 WARN SoapFault called on unknown coordinator: {0}
ARJUNA043143 INFO Unexpected exception while sending InvalidStateFault to participant {0}
ARJUNA043144 java.lang.String GetStatus requested for unknown participant completion participant
ARJUNA043145 WARN Cancel request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043146 WARN Cancel request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043147 WARN Cancel request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043148 WARN Close request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043149 WARN Close request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043150 WARN Close request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043151 WARN Compensate request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043152 WARN Compensate request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043153 WARN Compensate request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043154 INFO Unexpected exception while sending InvalidStateFault to coordinator for participant {0}
ARJUNA043155 java.lang.String GetStatus requested for unknown participant completion participant
ARJUNA043156 WARN Unexpected exception thrown from commit
ARJUNA043157 WARN Commit called on unknown participant: {0}
ARJUNA043158 WARN Commit request dropped pending WS-AT participant recovery manager initialization for participant: {0}
ARJUNA043159 WARN Commit request dropped pending WS-AT participant recovery manager scan for unknown participant: {0}
ARJUNA043160 WARN Commit request dropped pending registration of application-specific recovery module for WS-AT participant: {0}
ARJUNA043161 WARN Unexpected exception thrown from prepare
ARJUNA043162 WARN Prepare called on unknown participant: {0}
ARJUNA043163 WARN Unexpected exception thrown from rollback
ARJUNA043164 WARN Rollback called on unknown participant: {0}
ARJUNA043165 WARN Rollback request dropped pending WS-AT participant recovery manager initialization for participant: {0}
ARJUNA043166 WARN Rollback request dropped pending WS-AT participant recovery manager scan for unknown participant: {0}
ARJUNA043167 WARN Rollback request dropped pending registration of application-specific recovery module for WS-AT participant: {0}
ARJUNA043168 WARN Unexpected exception thrown from soapFault
ARJUNA043169 WARN SoapFault called on unknown participant: {0}
ARJUNA043170 java.lang.String Unknown transaction
ARJUNA043171 java.lang.String Unknown participant
ARJUNA043172 java.lang.String Unknown transaction
ARJUNA043173 java.lang.String Unknown error
ARJUNA043174 java.lang.String Unknown participant
ARJUNA043175 java.lang.String Unknown error
ARJUNA043176 java.lang.String Unknown participant
ARJUNA043177 java.lang.String Unknown transaction
ARJUNA043178 java.lang.String Transaction rolled back
ARJUNA043179 java.lang.String Unknown error
ARJUNA043180 java.lang.String Invalid coordinator completion coordinator state
ARJUNA043185 WARN Unable to write log record during participant complete for WS-BA participant {0}
ARJUNA043186 WARN Unable to delete recovery record during failed for WS-BA participant {0}
ARJUNA043188 WARN Unable to delete recovery record during soapFault processing for WS-BA participant {0}
ARJUNA043189 WARN Cancelling participant {0}
ARJUNA043190 WARN Notifying unexpected error for participant {0}
ARJUNA043191 java.lang.String Unknown transaction
ARJUNA043192 WARN Unexpected exception while sending UnknownTransaction for participant {0}
ARJUNA043193 WARN Unable to write recovery record during completed for WS-BA participant {0}
ARJUNA043194 WARN Unable to delete recovery record during completed for WS-BA participant {0}
ARJUNA043195 WARN Unable to delete recovery record during close for WS-BA participant {0}
ARJUNA043196 WARN Unable to delete recovery record during compensate for WS-BA participant {0}
ARJUNA043197 WARN Unable to delete recovery record during failed for WS-BA participant {0}
ARJUNA043199 WARN Unable to delete recovery record during soapFault processing for WS-BA participant {0}
ARJUNA043200 WARN Compensating participant {0}
ARJUNA043201 WARN Notifying unexpected error for participant {0}
ARJUNA043203 WARN Unable to delete recovery record during prepare for participant {0}
ARJUNA043204 WARN Unable to delete recovery record at commit for participant {0}
ARJUNA043206 WARN could not delete recovery record for participant {0}
ARJUNA043207 ERROR Unrecoverable error for participant {0} : {1} {2}
ARJUNA043208 ERROR Unable to delete recovery record at commit for participant {0}
ARJUNA043209 java.lang.String Unknown error
ARJUNA043210 ERROR Error persisting participant state
ARJUNA043211 ERROR Error restoring participant state
ARJUNA043212 ERROR Error persisting participant state
ARJUNA043213 ERROR Error restoring participant state
ARJUNA043214 ERROR Error persisting participant state
ARJUNA043215 ERROR Error restoring participant state
ARJUNA043216 java.lang.String participant {0} has no saved recovery state to recover
ARJUNA043217 WARN XML stream exception restoring recovery state for participant {0}
ARJUNA043218 WARN I/O exception saving restoring state for participant {0}
ARJUNA043219 WARN Could not save recovery state for non-serializable durable WS-AT participant {0}
ARJUNA043220 WARN XML stream exception saving recovery state for participant {0}
ARJUNA043221 WARN I/O exception saving recovery state for participant {0}
ARJUNA043222 java.lang.String participant {0} has no saved recovery state to recover
ARJUNA043223 WARN XML stream exception restoring recovery state for participant {0}
ARJUNA043224 WARN I/O exception saving restoring state for participant {0}
ARJUNA043225 WARN Could not save recovery state for non-serializable WS-BA participant {0}
ARJUNA043226 WARN XML stream exception saving recovery state for participant {0}
ARJUNA043227 WARN I/O exception saving recovery state for participant {0}
ARJUNA043228 WARN SystemException thrown from rollback: {0}
ARJUNA043229 WARN Unexpected exception thrown from rollback: {0}
ARJUNA043230 WARN Unexpected exception thrown from commit: {0}
ARJUNA043231 WARN Faulted exception from participant cancel for WS-BA participant: {0}
ARJUNA043232 WARN Unexpected exception from participant cancel for WS-BA participant: {0}
ARJUNA043233 WARN Unexpected exception from participant close for WS-BA participant: {0}
ARJUNA043234 WARN Unexpected exception from participant compensate for WS-BA participant: {0}
ARJUNA043235 WARN Unexpected exception from participant complete for WS-BA participant: {0}
ARJUNA043236 WARN Faulted exception from participant cancel for WS-BA participant: {0}
ARJUNA043237 WARN Unexpected exception from participant cancel for WS-BA participant: {0}
ARJUNA043238 WARN Unexpected exception from participant close for WS-BA participant: {0}
ARJUNA044001 ERROR WSCF Initialisation: init failed
ARJUNA044002 ERROR WSCF11 Initialisation: init failed
ARJUNA044003 WARN Failed to create {0}
ARJUNA044004 WARN Failed to create {0}
ARJUNA044005 WARN Failed to create {0}
ARJUNA044006 WARN Failed to create {0}
ARJUNA044007 java.lang.String Could not find protocol:
ARJUNA044008 java.lang.String Failed to find document:
ARJUNA044009 WARN Failed to create {0}
ARJUNA044010 WARN Failed to create {0}
ARJUNA044011 WARN Failed to create {0}
ARJUNA044012 WARN Failed to create {0}
ARJUNA044013 java.lang.String Could not find protocol:
ARJUNA044014 java.lang.String Failed to find document:
ARJUNA044015 WARN Participant failed to complete in activity {1}
ARJUNA044016 java.lang.String Null is an invalid parameter.
ARJUNA044017 java.lang.String Wrong state for operation!
ARJUNA044018 java.lang.String Removal of business activity synchronization is not allowed
ARJUNA044019 java.lang.String Unknown response!
ARJUNA044020 java.lang.String CoordinatorControl.begin:
ARJUNA044021 WARN SynchronizationRecord {0} - null participant provided!
ARJUNA044022 WARN ParticipantRecord {0} - null participant provided!
ARJUNA044023 WARN ParticipantRecord.topLevelOnePhaseCommit {0} caught exception
ARJUNA044024 WARN ParticipantRecord.forgetHeuristic for {0} called without a resource!
ARJUNA044025 WARN ParticipantRecord.forgetHeuristic {0} caught exception
ARJUNA044026 WARN ParticipantRecord.complete {0} caught exception
ARJUNA044027 WARN ParticipantRecord.restore_state caught exception
ARJUNA044028 WARN ParticipantRecord.save_state caught exception
ARJUNA044029 WARN ParticipantRecord.setValue() called illegally.
ARJUNA044030 WARN ParticipantRecord.nestedAbort {0} caught exception
ARJUNA044031 WARN ParticipantRecord.nestedCommit {0} caught exception
ARJUNA044032 WARN ParticipantRecord.nestedPrepare {0} caught exception
ARJUNA044033 WARN ParticipantRecord.topLevelAbort {0} caught exception
ARJUNA044034 WARN ParticipantRecord.topLevelCommit {0} caught exception
ARJUNA044035 WARN ParticipantRecord.topLevelPrepare {0} caught exception
ARJUNA044036 WARN ParticipantRecord.nestedOnePhaseCommit {0} caught exception
ARJUNA044037 java.lang.String ArjunaCore does not support removal of participants
ARJUNA044038 java.lang.String Null is an invalid parameter!
ARJUNA044039 java.lang.String Wrong state for operation!
ARJUNA044040 java.lang.String Unknown response!
ARJUNA044041 java.lang.String CoordinatorControl.begin:
ARJUNA044042 WARN ParticipantRecord {0} - null participant provided!
ARJUNA044043 WARN ParticipantRecord.topLevelOnePhaseCommit {0} caught exception
ARJUNA044044 WARN ParticipantRecord.forgetHeuristic for {0} called without a resource!
ARJUNA044045 WARN ParticipantRecord.forgetHeuristic {0} caught exception
ARJUNA044046 WARN ParticipantRecord.restore_state caught exception
ARJUNA044047 WARN ParticipantRecord.save_state caught exception
ARJUNA044048 WARN ParticipantRecord.setValue() called illegally.
ARJUNA044049 WARN ParticipantRecord.nestedAbort {0} caught exception
ARJUNA044050 WARN ParticipantRecord.nestedCommit {0} caught exception
ARJUNA044051 WARN ParticipantRecord.nestedPrepare {0} caught exception
ARJUNA044052 WARN ParticipantRecord.topLevelAbort {0} caught exception
ARJUNA044053 WARN ParticipantRecord.topLevelCommit {0} caught exception
ARJUNA044054 WARN ParticipantRecord.topLevelPrepare {0} caught exception
ARJUNA044055 WARN ParticipantRecord.nestedOnePhaseCommit {0} caught exception
ARJUNA044056 WARN SynchronizationRecord {0} - null participant provided!
ARJUNA044057 java.lang.String Failed to create:
ARJUNA044058 java.lang.String First parameter is null!
ARJUNA044059 java.lang.String Second parameter is null!
ARJUNA044060 java.lang.String not found
ARJUNA044061 java.lang.String Failed to create:
ARJUNA044062 INFO No protocol implementations configured
ARJUNA044063 ERROR Unable to identify protocol type for class {0}
ARJUNA044064 ERROR Unable to load protocol implementation class {0} caught exception
ARJUNA044065 INFO Installed implementation class {0} for protocol type {1}
ARJUNA044066 ERROR Unable to instantiate protocol implementation class {0} caught exception
ARJUNA044067 WARN SynchronizationRecord.beforeCompletion caught exception
ARJUNA045001 WARN Error in {0}
ARJUNA045002 WARN Error in {0} Unknown context type: {1}
ARJUNA045004 ERROR WSTX Initialisation: init failed
ARJUNA045005 java.lang.String {0} not found.
ARJUNA045006 java.lang.String Failed to create document: {0}
ARJUNA045007 java.lang.String Missing WSTX Initialisation
ARJUNA045008 WARN Error in {0}
ARJUNA045009 WARN Error in {0} Unknown context type: {1}
ARJUNA045011 WARN Error in {0}
ARJUNA045012 WARN Error in {0} Unknown context type: {1}
ARJUNA045014 ERROR WSTX11 Initialisation: init failed
ARJUNA045015 java.lang.String {0} not found.
ARJUNA045016 java.lang.String Failed to create document: {0}
ARJUNA045017 java.lang.String Missing WSTX Initialisation
ARJUNA045018 WARN Error in {0}
ARJUNA045019 WARN Error in {0} Unknown context type: {1}
ARJUNA045021 WARN Invalid type URI: < {0} , {1}>
ARJUNA045022 java.lang.String Invalid type URI:
ARJUNA045023 WARN Invalid type URI: < {0} , {1}>
ARJUNA045024 java.lang.String Invalid type URI:
ARJUNA045025 WARN Invalid type URI: < {0} , {1}>
ARJUNA045026 WARN Invalid type URI: < {0} , {1}>
ARJUNA045027 WARN ignoring context {0}
ARJUNA045028 java.lang.String One context was null!
ARJUNA045029 WARN Invalid type URI: < {0} , {1}>
ARJUNA045030 java.lang.String Invalid type URI:
ARJUNA045031 WARN Invalid type URI: < {0} , {1}>
ARJUNA045032 java.lang.String Not implemented!
ARJUNA045033 ERROR comms timeout attempting to cancel WS-AT participant {0}
ARJUNA045034 WARN comms timeout attempting to commit WS-AT participant {0} : {1}
ARJUNA045035 WARN comms timeout attempting to prepare WS-AT participant {0} : {1}
ARJUNA045036 java.lang.String Not implemented!
ARJUNA045037 java.lang.String Not implemented!
ARJUNA045038 java.lang.String Received context is null!
ARJUNA045039 java.lang.String Received context is null!
ARJUNA045040 WARN Invalid type URI: < {0} , {1}>
ARJUNA045041 java.lang.String Invalid type URI:
ARJUNA045042 WARN Invalid type URI: < {0} , {1}>
ARJUNA045043 java.lang.String Invalid type URI:
ARJUNA045044 WARN Invalid type URI: < {0} , {1}>
ARJUNA045045 WARN Invalid type URI: < {0} , {1}>
ARJUNA045046 WARN Invalid type URI: < {0} , {1}>
ARJUNA045047 WARN ignoring context {0}
ARJUNA045048 java.lang.String One context was null!
ARJUNA045049 java.lang.String Invalid type URI:
ARJUNA045050 WARN Invalid type URI: < {0} , {1}>
ARJUNA045052 java.lang.String Received context is null!
ARJUNA045053 java.lang.String No termination context!
ARJUNA045054 ERROR Participant not persistable.
ARJUNA045055 ERROR Error persisting participant.
ARJUNA045056 ERROR Error restoring participant.
ARJUNA045057 WARN ignoring context {0}
ARJUNA045058 WARN ignoring context {0}
ARJUNA045060 java.lang.String Received context is null!
ARJUNA045061 java.lang.String No termination context!
ARJUNA045062 WARN Coordinator cancelled the activity
ARJUNA045063 ERROR Wrong vote type {0} on prepare of volatile 2PC participant {1}.Expecting one from {2}.
ARJUNA045064 ERROR Calling prepare on volatile participant but participant is null.
ARJUNA045065 ERROR Cannot prepare participant {0}.
ARJUNA045066 ERROR Calling confirm on volatile participant but participant is null.
ARJUNA045067 ERROR Calling cancel on volatile participant but participant is null.
ARJUNA045068 ERROR cannot commit durable participant {0} : {1}
ARJUNA045069 ERROR Calling confirm on durable participant but participant with id {0} is null.
ARJUNA045070 ERROR cannot prepare durable participant {0} : {1}
ARJUNA045071 WARN cannot commit one phase durable participant {0} : {1}
ARJUNA045072 ERROR Calling cancel on durable participant but participant with id {0} is null.
ARJUNA045073 WARN Durable participant {0} : {1} was cancelled.
ARJUNA045074 ERROR Confirm one phase call of durable participant {0} : {1} failed.
ARJUNA045075 ERROR Calling confirm one phase on durable participant but participant with id {0} is null.
ARJUNA045076 ERROR Unknown call of participant {0} : {1} failed.
ARJUNA045077 ERROR One phase confirm of participant {0} : {1} returned not expected vote {2}.
ARJUNA046002 WARN RecoveryATCoordinator.replayPhase2 transaction {0} not activated, unable to replay phase 2 commit
ARJUNA046004 WARN RecoverySubordinateATCoordinator.replayPhase2 transaction {0} not activated, unable to replay phase 2 commit
ARJUNA046006 WARN RecoverBASubordinateCoordinator.replayPhase2 transaction {0} not activated, unable to replay phase 2 commit
ARJUNA046008 WARN RecoveryBACoordinator.replayPhase2 transaction {0} not activated, unable to replay phase 2 commit
ARJUNA046010 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046011 WARN failed to recover Transaction {0}
ARJUNA046012 WARN failed to access transaction store {0}
ARJUNA046013 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046014 WARN failed to recover Transaction {0}
ARJUNA046015 WARN failed to access transaction store {0}
ARJUNA046016 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046017 WARN failed to recover Transaction {0}
ARJUNA046018 WARN failed to access transaction store {0}
ARJUNA046019 WARN failed to recover Transaction {0}
ARJUNA046020 WARN failed to access transaction store {0}
ARJUNA046021 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046022 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046023 WARN failed to access transaction store {0}
ARJUNA046024 ERROR unable to load recovery record implementation class {0} for WS-AT participant recovery record {1}
ARJUNA046025 ERROR unable to instantiate recovery record implementation class {0} for WS-AT participant recovery record {1}
ARJUNA046026 ERROR unable to unpack recovery record data for WS-AT participant recovery record {0}
ARJUNA046027 ERROR missing recovery record data for WS-AT participant recovery record {0}
ARJUNA046028 ERROR unable to read recovery record data for WS-AT participant recovery record {0}
ARJUNA046029 WARN exception writing recovery record for WS-AT participant {0}
ARJUNA046030 WARN exception removing recovery record {0} for WS-AT participant {1}
ARJUNA046031 WARN exception reactivating recovered WS-AT participant {0}
ARJUNA046032 WARN no XTS application recovery module found to help reactivate recovered WS-AT participant {0}
ARJUNA046033 WARN Compensating orphaned subordinate WS-AT transcation {0}
ARJUNA046034 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046035 WARN failed to access transaction store {0}
ARJUNA046036 ERROR unable to load recovery record implementation class {0} for WS-BA participant recovery record {1}
ARJUNA046037 ERROR unable to instantiate recovery record implementation class {0} for WS-BA participant recovery record {1}
ARJUNA046038 WARN unable to unpack recovery record data for WS-BA participant recovery record {0}
ARJUNA046039 ERROR missing recovery record data for WS-BA participant recovery record {0}
ARJUNA046040 ERROR unable to read recovery record data for WS-BA participant recovery record {0}
ARJUNA046041 WARN exception writing recovery record for WS-BA participant {0}
ARJUNA046042 WARN exception removing recovery record {0} for WS-BA participant {1}
ARJUNA046043 WARN exception reactivating recovered WS-BA participant {0}
ARJUNA046044 WARN no XTS application recovery module found to help reactivate recovered WS-BA participant {0}
ARJUNA046045 WARN Compensating orphaned subordinate WS-BA transcation {0}
ARJUNA046046 ERROR Unable to load recovery module class {0}
ARJUNA046047 ERROR Not a recovery module class {0}
ARJUNA046048 ERROR Unable to instantiate module class {0}
ARJUNA046049 ERROR Unable to access module class {0}
ARJUNA046050 ERROR Unable to load recovery module class {0}
ARJUNA046051 ERROR Not a recovery module class {0}
ARJUNA046052 ERROR Unable to instantiate module class {0}
ARJUNA046053 ERROR Unable to access module class {0}
ARJUNA047001 ERROR Unable to load XTS initialisation class {0}
ARJUNA047002 ERROR Not an XTS initialisation class {0}
ARJUNA047003 ERROR Unable to instantiate XTS initialisation class {0}
ARJUNA047004 ERROR Unable to access XTS initialisation class {0}
ARJUNA048001 WARN Could not find manifest {0}
ARJUNA048002 WARN Could not find configuration file, URL was: {0}
ARJUNA048003 WARN className is null
ARJUNA048004 WARN attempt to load {0} threw ClassNotFound. Wrong classloader?
ARJUNA048005 WARN class {0} does not implement {1}
ARJUNA048006 WARN cannot create new instance of {0}
ARJUNA048007 WARN cannot access {0}
ARJUNA048008 WARN cannot initialize from string {0}

AT

Code Level Return Type Message
AT027001 WARN Failure while removing participant information from the object store. '%s'
AT027002 WARN Failure while synchronizing participant url with RecoveryManager. '%s'
AT027003 WARN Failed to start the bridge. '%s'
AT027004 WARN Failed to stop the bridge. '%s'
AT027005 WARN Failed to enlist inbound bridge to the transaction '%s'
AT027006 WARN Failed to import transaction. '%s'
AT027007 ERROR FATAL System Exception '%s'
AT027008 WARN Exception while verifying/loading id isInStore InboundBridgeOrphanFilter.
AT027009 WARN Exception while verifying id isInStore InboundBridgeOrphanFilter.
AT027010 WARN XAException occured while subordinate rollback. '%s'
AT027011 WARN XAException occured while subordinate commit. '%s'
AT027012 WARN XAException occured while subordinate vote. '%s'
AT027013 WARN XAException occured while InboundBridgeRecoveryModule periodicWorkSecondPass. '%s'
AT027014 WARN XAException occured while InboundBridgeRecoveryModule addBridgesToMapping. '%s'
AT027015 WARN Exception occured while InboundBridgeRecoveryModule getUidsToRecover. '%s'
AT027016 WARN Exception occured while Tx Support getIntValue. '%s'
AT027017 DEBUG Exception occured while Tx Support HttpRequest. '%s'
AT027018 WARN Exception occured while Tx Support AddLocationHeader. '%s'
AT027019 WARN Exception occured while InboundBridgeParticipantDeserializer Participant deserialize. '%s'
AT027020 WARN Exception while recovering participant in Recovery Manager. '%s'
AT027021 WARN Exception while recovering participant in Recovery Manager. '%s'
AT027022 WARN Heuristic Exception while recreateParticipantInformation in Recovery Manager. '%s'
AT027023 WARN Participant Exception while recreateParticipantInformation in Recovery Manager. '%s'
AT027024 WARN Failure while persisting participant information. '%s'
AT027025 WARN Participant Exception while participant rollback in ParticipantResource. '%s'
AT027026 WARN Exception while participant rollback in ParticipantResource. '%s'
AT027027 WARN Exception while readOnly participant info in ParticipantResource. '%s'
AT027028 WARN ParticipantException while commitOnePhase in ParticipantResource. '%s'
AT027029 WARN ParticipantException while prepare in ParticipantResource. '%s'
AT027030 WARN Exception Before completion failed in VolatileParticipantResource. '%s'
AT027031 WARN Exception After completion failed in VolatileParticipantResource. '%s'
AT027032 WARN Exception while getUids in VolatileParticipantResource. '%s'
AT027033 WARN Exception could not reactivate pending transaction.'%s','%s'
AT027034 WARN Exception TM JAX-RS application failed to start.'%s'
AT027035 DEBUG Exception TM JAX-RS application failed to start.

COM

Code Level Return Type Message
COM03000 DEBUG Reaping a reference failed
COM03100 WARN Property or feature %s not supported by %s

EJBCLIENT

Code Level Return Type Message
EJBCLIENT-00001 INFO JBoss EJB Client version %s
EJBCLIENT-00001 java.lang.String No such EJB: %s
EJBCLIENT-00001 java.lang.String EJB is not stateful: %s
EJBCLIENT-00001 java.lang.String No such EJB method %s found on %s
EJBCLIENT-00001 java.lang.String Session is not active for invocation of method %s on %s
EJBCLIENT-00001 java.lang.String EJB view is not remote: %s
EJBCLIENT-00001 java.lang.IllegalStateException Context data under org.jboss.private.data was not of type Set
EJBCLIENT-00001 jakarta.ejb.EJBException IO channel timed out or closed. Check server endpoint read or write timeout settings
EJBCLIENT000000 java.lang.IllegalArgumentException Module name cannot be null or empty
EJBCLIENT000001 java.lang.IllegalArgumentException Bean name cannot be null or empty
EJBCLIENT000002 java.lang.IllegalArgumentException Bean interface type cannot be null
EJBCLIENT000003 INFO Incorrect max-allowed-connected-nodes value %s specified for cluster named %s. Defaulting to %s
EJBCLIENT000004 INFO Incorrect connection timeout value %s specified for cluster named %s. Defaulting to %s
EJBCLIENT000005 INFO Incorrect connection timeout value %s specified for node %s in cluster named %s. Defaulting to %s
EJBCLIENT000006 INFO No host/port configured for connection named %s. Skipping connection creation
EJBCLIENT000007 INFO Incorrect port value %s specified for connection named %s. Skipping connection creation
EJBCLIENT000008 INFO Incorrect connection timeout value %s specified for connection named %s. Defaulting to %s
EJBCLIENT000009 INFO Incorrect invocation timeout value %s specified. Defaulting to %s
EJBCLIENT000010 INFO Incorrect reconnect tasks timeout value %s specified. Defaulting to %s
EJBCLIENT000011 INFO Discarding result for invocation id %s since no waiting context found
EJBCLIENT000012 INFO Cannot create a EJB receiver for %s since there was no match for a target destination
EJBCLIENT000015 INFO Initial module availability report for %s wasn't received during the receiver context association
EJBCLIENT000016 INFO Channel %s can no longer process messages
EJBCLIENT000017 INFO Received server version %d and marshalling strategies %s
EJBCLIENT000022 java.lang.IllegalStateException No EJB client context is available
EJBCLIENT000024 jakarta.ejb.NoSuchEJBException No EJB receiver available for handling destination "%s"
EJBCLIENT000027 java.lang.IllegalStateException No EJBReceiver available for node name %s
EJBCLIENT000028 java.lang.IllegalStateException No EJB receiver contexts available in cluster %s
EJBCLIENT000029 java.lang.IllegalStateException No cluster context available for cluster named %s
EJBCLIENT000030 java.lang.IllegalStateException sendRequest() called during wrong phase
EJBCLIENT000031 java.lang.IllegalStateException No receiver associated with invocation
EJBCLIENT000032 java.lang.IllegalStateException Cannot retry a request which hasn't previously been completed
EJBCLIENT000033 java.lang.IllegalStateException getResult() called during wrong phase
EJBCLIENT000034 java.lang.IllegalStateException discardResult() called during wrong phase
EJBCLIENT000035 javax.naming.NamingException Not supported
EJBCLIENT000036 javax.naming.NamingException Read only naming context, operation not supported
EJBCLIENT000037 javax.naming.NamingException Could not load ejb proxy class %s
EJBCLIENT000038 java.lang.IllegalStateException Transaction enlistment did not yield a transaction ID
EJBCLIENT000039 java.lang.IllegalStateException Cannot enlist transaction
EJBCLIENT000041 java.lang.RuntimeException A session bean does not have a primary key class
EJBCLIENT000042 WARN Failed to load EJB client configuration file specified in %s system property: %s
EJBCLIENT000043 java.lang.RuntimeException Error reading EJB client properties file %s
EJBCLIENT000044 java.lang.IllegalStateException No transaction context available
EJBCLIENT000045 java.lang.IllegalStateException User transactions not supported by this context
EJBCLIENT000046 jakarta.transaction.NotSupportedException A transaction is already associated with this thread
EJBCLIENT000047 java.lang.IllegalStateException A transaction is not associated with this thread
EJBCLIENT000048 java.lang.IllegalStateException Transaction for this thread is not active
EJBCLIENT000049 java.lang.IllegalStateException Cannot proceed with invocation since transaction is pinned to node %s which has been excluded from handling invocation for the current invocation context %s
EJBCLIENT000050 java.lang.IllegalStateException Node of the current transaction %s does not accept %s
EJBCLIENT000051 java.lang.IllegalStateException Cannot proceed with invocation since the locator %s has an affinity on node %s which has been excluded from current invocation context %s
EJBCLIENT000052 java.lang.RuntimeException %s for cluster %s is not of type org.jboss.ejb.client.ClusterNodeSelector
EJBCLIENT000053 java.lang.RuntimeException Could not create the cluster node selector for cluster %s
EJBCLIENT000054 java.lang.IllegalStateException Cannot specify both a callback handler and a username/password
EJBCLIENT000055 java.lang.RuntimeException Could not decode base64 encoded password
EJBCLIENT000056 java.lang.IllegalStateException Cannot specify both a plain text and base64 encoded password
EJBCLIENT000058 java.lang.IllegalArgumentException Failed to instantiate deployment node selector class "%s"
EJBCLIENT000059 WARN Could not send a message over remoting channel, to cancel invocation for invocation id %s
EJBCLIENT000060 java.lang.RuntimeException Failed to create scoped EJB client context
EJBCLIENT000061 WARN Cannot send a transaction recovery message to the server since the protocol version of EJBReceiver %s doesn't support it
EJBCLIENT000062 javax.naming.CommunicationException Failed to look up "%s"
EJBCLIENT000063 java.lang.IllegalArgumentException EJB proxy is already stateful
EJBCLIENT000064 INFO org.jboss.ejb.client.naming.ejb.ejbURLContextFactory is deprecated; new applications should use org.wildfly.naming.client.WildFlyInitialContextFactory instead
EJBCLIENT000065 javax.naming.CommunicationException Null session was created for "%s", affinity %s, identifier %s
EJBCLIENT000066 jakarta.ejb.EJBException Operation interrupted
EJBCLIENT000067 java.lang.IllegalArgumentException Cannot convert %s to stateful
EJBCLIENT000068 java.lang.IllegalArgumentException Failed to instantiate callback handler class "%s"
EJBCLIENT000069 INFO Using legacy jboss-ejb-client.properties security configuration
EJBCLIENT000070 INFO Using legacy jboss-ejb-client.properties Remoting configuration
EJBCLIENT000071 INFO Using legacy jboss-ejb-client.properties discovery configuration
EJBCLIENT000072 INFO Using legacy jboss-ejb-client.properties EJB client configuration
EJBCLIENT000073 java.lang.IllegalStateException Failed to construct Remoting endpoint
EJBCLIENT000074 java.lang.IllegalStateException Configured selector "%s" returned null
EJBCLIENT000075 jakarta.ejb.NoSuchEJBException No transport provider available for URI scheme %2$s for locator %1$s
EJBCLIENT000076 java.lang.IllegalStateException Configured selector "%s" returned unknown node "%s"
EJBCLIENT000077 java.lang.IllegalArgumentException EJB receiver "%s" returned a null session ID for EJB "%s"
EJBCLIENT000078 java.lang.IllegalArgumentException EJB receiver "%s" returned a stateful locator with the wrong view type (expected %s, but actual was %s)
EJBCLIENT000079 jakarta.ejb.NoSuchEJBException Unable to discover destination for request for EJB %s
EJBCLIENT000080 java.lang.IllegalStateException Request not sent
EJBCLIENT000081 java.lang.IllegalArgumentException Failed to instantiate cluster node selector class "%s"
EJBCLIENT000082 jakarta.transaction.SystemException Cannot outflow the remote transaction "%s" as its timeout elapsed
EJBCLIENT000100 java.lang.IllegalArgumentException Object '%s' is not a valid proxy object
EJBCLIENT000101 java.lang.IllegalArgumentException Proxy object '%s' was not generated by %s
EJBCLIENT000102 java.lang.IllegalStateException No asynchronous operation in progress
EJBCLIENT000200 org.wildfly.client.config.ConfigXMLParseException Cannot load from a module when jboss-modules is not available
EJBCLIENT000300 java.lang.IllegalArgumentException No valid no-argument constructor on interceptor %s
EJBCLIENT000301 java.lang.IllegalArgumentException Constructor is not accessible on interceptor %s
EJBCLIENT000302 java.lang.IllegalStateException Construction of interceptor %s failed
EJBCLIENT000400 java.util.concurrent.ExecutionException Remote invocation failed due to an exception
EJBCLIENT000401 java.lang.IllegalStateException Result was discarded (one-way invocation)
EJBCLIENT000402 java.util.concurrent.CancellationException Remote invocation request was cancelled
EJBCLIENT000403 java.util.concurrent.TimeoutException Timed out
EJBCLIENT000408 jakarta.transaction.SystemException Inflowed transaction is no longer active
EJBCLIENT000409 org.jboss.ejb.client.RequestSendFailedException No more destinations are available
EJBCLIENT000500 java.io.InvalidObjectException Protocol error: mismatched method location
EJBCLIENT000501 DEBUG Protocol error: invalid message ID %02x received
EJBCLIENT000502 java.io.IOException Protocol error: invalid transaction type %02x received
EJBCLIENT000503 java.io.IOException Protocol error: unable to inflow remote transaction
EJBCLIENT000504 java.lang.IllegalStateException Server error: no session was created
EJBCLIENT000505 java.lang.IllegalStateException No remote transport is present on the current EJB client context
EJBCLIENT000506 jakarta.ejb.EJBException Server error (invalid view): %s
EJBCLIENT000507 jakarta.transaction.SystemException Internal server error occurred while processing a transaction
EJBCLIENT000508 ERROR Failed to execute Runnable %s
EJBCLIENT000509 ERROR Unexpected exception processing EJB request
EJBCLIENT000510 java.io.IOException Failed to configure SSL context
EJBCLIENT000511 java.lang.IllegalArgumentException Cannot automatically convert stateless EJB to stateful with this protocol version
EJBCLIENT000512 jakarta.ejb.EJBException Server error (remote EJB is not stateful): %s
EJBCLIENT000513 ERROR Exception occurred when trying to close the transport provider
EJBCLIENT000514 INFO No URI configured for HTTP connection named %s. Skipping connection creation
EJBCLIENT000515 INFO HTTP connection was configured with invalid URI: %s .
EJBCLIENT000516 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted
EJBCLIENT000517 WARN Exception occurred when writing EJB transaction response to invocation %s over channel %s
EJBCLIENT000518 WARN Exception occurred when writing EJB transaction recovery response for invocation %s over channel %s
EJBCLIENT000519 WARN Exception occurred when writing EJB response to invocation %s over channel %s
EJBCLIENT000520 WARN Exception occurred when writing EJB session open response to invocation %s over channel %s
EJBCLIENT000521 WARN Exception occurred when writing proceed async response to invocation %s over channel %s
EJBCLIENT000522 WARN Exception occurred when writing EJB cluster message to channel %s
EJBCLIENT000523 WARN Exception occurred when writing module availability message, closing channel %s
EJBCLIENT000524 DEBUG JavaEE to JakartaEE backward compatibility layer have been installed

ELY

Code Level Return Type Message
ELY00000 java.lang.String Unexpected value for azp (issued for) claim
ELY00001 INFO WildFly Elytron version %s
ELY00002 java.lang.IllegalArgumentException Parameter %s is empty
ELY00002 java.lang.IllegalArgumentException Parameter %s is empty
ELY00002 java.lang.IllegalArgumentException Parameter %s is empty
ELY00003 java.lang.IllegalStateException This builder has already been built
ELY00003 java.lang.IllegalStateException This builder has already been built
ELY00003 java.lang.IllegalStateException This builder has already been built
ELY00003 java.lang.IllegalStateException This builder has already been built
ELY00004 java.lang.IllegalArgumentException Unrecognized algorithm "%s"
ELY00004 java.lang.IllegalArgumentException Unrecognized algorithm "%s"
ELY00004 java.lang.IllegalArgumentException Unrecognized algorithm "%s"
ELY00005 java.lang.IllegalStateException Cannot instantiate self-referential factory
ELY00006 java.lang.IllegalArgumentException Unexpected trailing garbage in X.500 principal
ELY00007 WARN Credential destroying failed
ELY00007 WARN Credential destroying failed
ELY00008 java.lang.IllegalArgumentException The given credential is not supported here
ELY00009 java.lang.IllegalArgumentException Invalid name "%s"
ELY00011 java.security.NoSuchAlgorithmException Unable to create service for '%s.%s'
ELY00012 java.lang.IllegalStateException Unable to load OIDs database from properties file
ELY01000 java.lang.IllegalStateException Authentication name was already set on this context
ELY01001 org.wildfly.client.config.ConfigXMLParseException No module found for identifier "%s"
ELY01002 org.wildfly.client.config.ConfigXMLParseException Invalid port number "%s" specified for attribute "%s" of element "%s"; expected a numerical value between 1 and 65535 (inclusive)
ELY01003 java.lang.IllegalStateException No authentication is in progress
ELY01005 java.lang.IllegalArgumentException Realm map does not contain mapping for default realm '%s'
ELY01006 org.wildfly.security.auth.server.RealmUnavailableException No realm name found in users property file - non-plain-text users file must contain "#$REALM_NAME=RealmName$" line
ELY01007 DEBUG JAAS authentication failed for principal %s
ELY01008 org.wildfly.security.auth.server.RealmUnavailableException Failed to create login context
ELY01009 org.wildfly.security.auth.server.RealmUnavailableException Failed to instantiate custom CallbackHandler
ELY01012 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm unexpectedly failed to open path "%s" for identity name "%s"
ELY01013 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm unexpectedly failed to read path "%s" for identity name "%s"
ELY01015 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid file content in path "%s" line %d for identity name "%s"
ELY01016 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered missing required attribute "%s" in path "%s" line %d for identity name "%s"
ELY01017 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid password format "%s" in path "%s" line %d for identity name "%s"
ELY01018 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid password algorithm "%s" in path "%s" line %d for identity name "%s"
ELY01019 org.wildfly.security.auth.server.RealmUnavailableException Unable to obtain exclusive access to backing identity
ELY01020 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm failed to update identity "%s"
ELY01021 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm failed to delete identity "%s"
ELY01022 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm failed to find identity "%s"
ELY01023 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm failed to write to file "%s" for identity "%s"
ELY01024 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm cannot create duplicate identity for identity "%s"
ELY01025 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid certificate format "%s" in path "%s" line %d for identity name "%s"
ELY01026 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid key format "%s" in path "%s" line %d for identity name "%s"
ELY01027 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid key algorithm for format "%s" in path "%s" line %d for identity name "%s"
ELY01028 java.lang.IllegalArgumentException Invalid port number "%d"
ELY01029 java.lang.IllegalArgumentException Invalid host specification "%s"
ELY01030 java.io.IOException Unable to read credential
ELY01033 java.lang.IllegalStateException User does not exist
ELY01034 java.lang.IllegalStateException Invalid credential type specified
ELY01035 java.io.IOException Unable to create key manager
ELY01036 java.io.IOException Unable to create trust manager
ELY01037 java.lang.IllegalArgumentException Certificate chain is empty
ELY01041 java.lang.RuntimeException Could not obtain credential
ELY01041 java.lang.RuntimeException Could not obtain credential
ELY01042 java.lang.RuntimeException Could not obtain credential
ELY01043 java.lang.RuntimeException Invalid password key specification for algorithm "%s"
ELY01045 java.lang.RuntimeException Could not obtain PasswordFactory for algorithm "%s"
ELY01049 org.wildfly.security.auth.server.RealmUnavailableException Could not open connection
ELY01050 org.wildfly.security.auth.server.RealmUnavailableException Could not execute query "%s"
ELY01052 org.wildfly.security.auth.server.RealmUnavailableException Unexpected error when processing authentication query "%s"
ELY01053 java.security.spec.InvalidKeySpecException Insufficient data to form a digest and a salt
ELY01053 java.security.spec.InvalidKeySpecException Insufficient data to form a digest and a salt
ELY01054 java.lang.IllegalArgumentException Invalid salt "%s%s"
ELY01055 java.lang.IllegalArgumentException Invalid rounds "%s%s%s%s"
ELY01056 java.lang.IllegalArgumentException Invalid salt "%s%s%s%s"
ELY01057 java.lang.IllegalStateException No DirContext supplier set
ELY01058 java.lang.IllegalStateException No principal mapping definition
ELY01059 java.lang.IllegalArgumentException Public and private key algorithm names are mismatched
ELY01060 java.lang.RuntimeException Could not obtain principal
ELY01061 java.lang.IllegalArgumentException Public key is null
ELY01062 java.lang.IllegalStateException No provider URL has been set
ELY01063 java.lang.IllegalArgumentException Private key is null
ELY01064 java.lang.IllegalArgumentException Invalid identity name
ELY01064 java.lang.IllegalArgumentException Invalid identity name
ELY01064 java.lang.IllegalArgumentException Invalid identity name
ELY01064 java.lang.IllegalArgumentException Invalid identity name
ELY01065 java.lang.IllegalArgumentException Pattern requires a capture group
ELY01066 WARN Invalid string count for mechanism database entry "%s"
ELY01067 WARN Invalid key exchange "%s" for mechanism database entry "%s"
ELY01068 WARN Invalid authentication "%s" for mechanism database entry "%s"
ELY01069 WARN Invalid encryption "%s" for mechanism database entry "%s"
ELY01070 WARN Invalid digest "%s" for mechanism database entry "%s"
ELY01071 WARN Invalid protocol "%s" for mechanism database entry "%s"
ELY01072 WARN Invalid level "%s" for mechanism database entry "%s"
ELY01073 WARN Invalid strength bits "%s" for mechanism database entry "%s"
ELY01074 WARN Invalid algorithm bits "%s" for mechanism database entry "%s"
ELY01075 WARN Invalid duplicate mechanism database entry "%s"
ELY01076 WARN Invalid duplicate OpenSSL-style alias "%s" for mechanism database entry "%s" (original is "%s")
ELY01077 WARN Invalid alias "%s" for missing mechanism database entry "%s"
ELY01079 java.lang.RuntimeException Ldap-backed realm failed to obtain attributes for entry [%s]
ELY01080 java.lang.RuntimeException Attribute [%s] value [%s] must be in X.500 format in order to obtain RDN [%s].
ELY01081 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid OTP definition in path "%s" line %d for identity name "%s"
ELY01082 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid OTP algorithm "%s" in path "%s" line %d for identity name "%s"
ELY01083 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm cannot to obtain not existing identity "%s"
ELY01084 java.lang.RuntimeException Error while consuming results from search. SearchDn [%s], Filter [%s], Filter Args [%s].
ELY01085 org.wildfly.security.auth.server.RealmUnavailableException LDAP realm persister does not support given credential type
ELY01086 org.wildfly.security.auth.server.RealmUnavailableException Persisting credential %s into Ldap-backed realm failed. Identity dn: "%s"
ELY01087 org.wildfly.security.auth.server.RealmUnavailableException Clearing credentials from Ldap-backed realm failed. Identity dn: "%s"
ELY01088 org.wildfly.security.authz.AuthorizationFailureException Attempting to run as "%s" authorization operation failed
ELY01090 java.security.spec.InvalidKeySpecException Unknown LDAP password scheme
ELY01091 WARN Post-association peer context action failed
ELY01092 java.lang.IllegalArgumentException Invalid mechanism realm selection "%s"
ELY01093 java.lang.IllegalStateException Mechanism realm was already selected
ELY01094 ERROR An event handler threw an exception
ELY01095 org.wildfly.security.auth.server.RealmUnavailableException Unable to create identity
ELY01096 org.wildfly.security.auth.server.RealmUnavailableException No such identity
ELY01096 org.wildfly.security.auth.server.RealmUnavailableException No such identity
ELY01097 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm failed to delete identity from server
ELY01098 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm failed to create identity on server
ELY01099 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm is not configured to allow create new identities (new identity parent and attributes has to be set)
ELY01100 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm does not contain mapping to set Elytron attribute "%s" of identity "%s"
ELY01101 WARN Ldap-backed realm does not support setting of filtered attribute "%s" (identity "%s")
ELY01102 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm requires exactly one value of attribute "%s" mapped to RDN (identity "%s")
ELY01103 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm failed to set attributes of identity "%s"
ELY01104 java.lang.RuntimeException OAuth2-based realm failed to obtain principal
ELY01105 org.wildfly.security.auth.server.RealmUnavailableException OAuth2-based realm failed to introspect token
ELY01106 java.lang.IllegalStateException Could not obtain SSLContext
ELY01108 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm identity search failed
ELY01109 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm is not configured to allow iterate over identities (iterator filter has to be set)
ELY01112 java.lang.IllegalStateException Authentication cannot succeed; not authorized
ELY01113 java.lang.IllegalStateException Token-based realm failed to obtain principal from token using claim [%s]
ELY01114 java.lang.IllegalArgumentException Invalid token format. Tokens must have a signature part accordingly with JWS specification
ELY01115 java.lang.IllegalStateException Failed to parse token
ELY01116 java.lang.IllegalStateException Signature verification failed
ELY01117 java.lang.IllegalArgumentException Invalid signature algorithm [%s]
ELY01118 java.lang.IllegalArgumentException Public key could not be obtained. Probably due to an invalid PEM format.
ELY01119 java.lang.IllegalStateException Unable to resolve MechanismConfiguration for mechanismType='%s', mechanismName='%s', hostName='%s', protocol='%s'.
ELY01120 java.lang.IllegalStateException Too late to set mechanism information as authentication has already begun.
ELY01121 java.security.GeneralSecurityException Unable to perform initial JAAS login.
ELY01121 java.security.GeneralSecurityException Unable to perform initial JAAS login.
ELY01122 java.security.GeneralSecurityException No Kerberos principals found.
ELY01122 java.security.GeneralSecurityException No Kerberos principals found.
ELY01123 java.security.GeneralSecurityException Too many Kerberos principals found.
ELY01123 java.security.GeneralSecurityException Too many Kerberos principals found.
ELY01124 java.lang.UnsupportedOperationException The security realm does not support updating a credential
ELY01125 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm failed to obtain context
ELY01126 WARN Jwt-based token realm not configured with a list of valid issuers. Ignoring issuer verification.
ELY01127 WARN Jwt-based token not configured with a list of valid audiences. Ignoring audience verification.
ELY01128 WARN Jwt-based token not configured with a public key. Ignoring signature verification.
ELY01129 org.wildfly.client.config.ConfigXMLParseException Unknown SSL context "%s" specified
ELY01130 org.wildfly.client.config.ConfigXMLParseException Duplicate SSL context name "%s"
ELY01132 org.wildfly.client.config.ConfigXMLParseException Unknown authentication configuration "%s" specified
ELY01133 org.wildfly.client.config.ConfigXMLParseException Failed to create credential
ELY01134 org.wildfly.client.config.ConfigXMLParseException Duplicate authentication configuration name "%s"
ELY01135 org.wildfly.client.config.ConfigXMLParseException Failed to load keystore data
ELY01136 org.wildfly.client.config.ConfigXMLParseException Failed to create keystore
ELY01137 org.wildfly.client.config.ConfigXMLParseException Invalid key store entry type for alias "%s" (expected %s, got %s)
ELY01138 org.wildfly.security.auth.server.RealmUnavailableException Decoding hashed password from users property file failed - should not be set as plain-text property file?
ELY01139 org.wildfly.client.config.ConfigXMLParseException Failed to create credential store
ELY01140 org.wildfly.client.config.ConfigXMLParseException Wrong PEM content type; expected %s, actually was %s
ELY01141 org.wildfly.client.config.ConfigXMLParseException No PEM content found
ELY01143 org.wildfly.client.config.ConfigXMLParseException Invalid URL [%s]
ELY01145 java.lang.IllegalArgumentException Security realm [%s] must implement [%s]
ELY01146 INFO LDAP Realm unable to register listener, defering action.
ELY01147 java.lang.RuntimeException Invalid LDAP name [%s]
ELY01148 java.lang.IllegalStateException A SecurityDomain has already been associated with the specified ClassLoader
ELY01149 java.lang.IllegalArgumentException Can not use SecurityIdentity with SecurityIdentity from same SecurityDomain
ELY01150 javax.naming.NamingException Obtaining DirContext credentials from AuthenticationContext failed.
ELY01151 java.lang.SecurityException Evidence Verification Failed.
ELY01151 java.lang.SecurityException Evidence Verification Failed.
ELY01152 java.lang.SecurityException Authorization Check Failed.
ELY01153 org.wildfly.security.auth.server.RealmUnavailableException Direct LDAP verification failed with DN [%s] and absolute DN [%s]
ELY01154 org.wildfly.security.auth.server.RealmUnavailableException Failed to read key store
ELY01155 java.lang.IllegalArgumentException Security domain mismatch
ELY01156 java.io.IOException Cannot obtain a credential from a security factory
ELY01157 WARN Unable to resolve MechanismConfiguration for MechanismInformation
ELY01159 org.wildfly.client.config.ConfigXMLParseException Key store entry for alias "%s" is missing.
ELY01160 java.io.IOException KeyTab [%s] does not exists.
ELY01160 java.io.IOException KeyTab [%s] does not exists.
ELY01161 java.io.IOException No keys for Kerberos principal [%s] was found in KeyTab [%s].
ELY01161 java.io.IOException No keys for Kerberos principal [%s] was found in KeyTab [%s].
ELY01162 org.wildfly.client.config.ConfigXMLParseException Invalid GSS mechanism name "%s" - unable to convert to mechanism OID
ELY01163 org.wildfly.client.config.ConfigXMLParseException Mechanism OID conversion from string "%s" failed
ELY01164 org.wildfly.client.config.ConfigXMLParseException Unable to identify provider name=%s, for service type=%s, algorithm=%s
ELY01165 java.security.GeneralSecurityException Initial JAAS login skipped as it has failed in last %d seconds
ELY01165 java.security.GeneralSecurityException Initial JAAS login skipped as it has failed in last %d seconds
ELY01166 WARN %2$s: Element "%1$s" is deprecated
ELY01167 java.lang.SecurityException Unable to construct provider '%s'.
ELY01168 java.lang.IllegalStateException JASPIC Configuration for messageLayer=%s, and applicationContext=%s already registered.
ELY01169 java.lang.IllegalArgumentException Message type '%s' is not supported by authentication module '%s'
ELY01170 jakarta.security.auth.message.AuthException Unrecognised authContextId '%s'
ELY01171 java.lang.IllegalArgumentException Invalid message type '%s', expected '%s'.
ELY01172 java.lang.IllegalArgumentException Message does not wrap existing message of type '%s'
ELY01173 java.lang.IllegalArgumentException Message does not un-wrap existing message of type '%s'
ELY01174 java.lang.IllegalStateException Setting message of type '%s' not allowed at this time.
ELY01175 java.lang.IllegalStateException The wrapping or request / response messages is only allowed where AuthStatus==SUCCESS ServerAuthenticationModule=%s
ELY01176 java.lang.IllegalStateException Invalid AuthStatus %s returned from ServerAuthModule %s.
ELY01177 java.io.IOException Authorization failed.
ELY01178 WARN Unable to update jwk set from "%1$s".
ELY01179 WARN SSL not configured. jku claim will not be supported.
ELY01180 INFO Fetched jwk does not contain "%1$s" claim, ignoring...
ELY01181 WARN Not sending new request to jwks url "%s". Last request time was %d.
ELY02001 java.security.UnrecoverableKeyException Invalid key store entry password for alias "%s"
ELY02002 java.security.KeyStoreException Invalid key store entry type for alias "%s" (expected %s, got %s)
ELY02003 java.security.KeyStoreException Key store key for alias "%s" cannot be protected
ELY02004 java.io.IOException Key store failed to translate password for alias "%s"
ELY02005 java.security.NoSuchAlgorithmException Key store failed to identify a suitable algorithm for alias "%s"
ELY02006 java.io.IOException Unexpected whitespace in password file
ELY02007 java.io.EOFException Unexpected end of file
ELY02008 java.lang.IllegalStateException A reversible load is not possible until the KeyStore has first been initialized
ELY02009 java.io.IOException Unable to create a new KeyStore instance
ELY02009 java.io.IOException Unable to create a new KeyStore instance
ELY02010 org.wildfly.client.config.ConfigXMLParseException Unknown key store specified
ELY02012 java.lang.IllegalArgumentException An empty alias filter was supplied
ELY02013 java.lang.IllegalArgumentException Filter is missing '+' or '-' at offset %d
ELY02014 java.lang.IllegalArgumentException Invalid first word '%s', must be one of ALL/NONE
ELY02015 java.lang.IllegalStateException Failed to obtain DirContext
ELY02016 java.lang.IllegalStateException Failed to return DirContext
ELY02017 java.lang.IllegalStateException LdapKeyStore failed to obtain alias [%s]
ELY02018 java.lang.IllegalStateException LdapKeyStore failed to obtain certificate [%s]
ELY02019 java.lang.IllegalStateException LdapKeyStore failed to obtain certificate chain [%s]
ELY02020 java.lang.IllegalStateException LdapKeyStore failed to recover key of alias [%s]
ELY02021 java.lang.IllegalStateException LdapKeyStore failed to obtain alias by certificate
ELY02022 java.security.UnrecoverableKeyException LdapKeyStore failed to recover key of alias [%s]
ELY02023 java.lang.IllegalStateException LdapKeyStore failed to obtain creation date of alias [%s]
ELY02024 java.security.KeyStoreException Alias [%s] does not exist in LdapKeyStore and not configured for creation
ELY02025 java.security.KeyStoreException LdapKeyStore failed store alias [%s]
ELY02026 java.security.KeyStoreException LdapKeyStore failed to serialize certificate of alias [%s]
ELY02027 java.security.KeyStoreException LdapKeyStore failed to protect (pack into keystore) key of alias [%s]
ELY02028 java.security.KeyStoreException LdapKeyStore failed to delete alias [%s]
ELY02029 java.security.KeyStoreException LdapKeyStore failed to delete alias [%s] - alias not found
ELY02030 java.lang.IllegalStateException LdapKeyStore failed to test alias [%s] existence
ELY02031 java.lang.IllegalStateException LdapKeyStore failed to iterate aliases
ELY02032 java.security.spec.InvalidKeySpecException keySpec must be SecretKeySpect, given: [%s]
ELY02033 java.security.spec.InvalidKeySpecException key must implement SecretKeySpec and keySpec must be SecretKeySpec, given key, keySpec: [%s]
ELY02034 org.wildfly.client.config.ConfigXMLParseException Alias must be specified if more than one entry exist in keystore
ELY02035 java.security.KeyStoreException KeyStore type could not be detected
ELY03010 java.lang.IllegalArgumentException Malformed PEM content at offset %d
ELY03011 java.lang.IllegalArgumentException Invalid PEM type (expected "%s", got "%s"
ELY03012 java.lang.IllegalArgumentException Certificate parse error
ELY03013 java.lang.SecurityException Permission collection must be read-only
ELY03015 org.wildfly.security.permission.InvalidPermissionClassException Could not load permission class "%s"
ELY03016 org.wildfly.security.permission.InvalidPermissionClassException Could not instantiate permission class "%s"
ELY03017 org.wildfly.security.permission.InvalidPermissionClassException No valid permission constructor found on class "%s"
ELY03018 java.lang.SecurityException Cannot add permissions to a read-only permission collection
ELY03018 java.lang.SecurityException Cannot add permissions to a read-only permission collection
ELY03019 java.io.InvalidObjectException Failure to deserialize object: field "%s" is null
ELY03020 java.lang.IllegalArgumentException Expected empty actions string, got "%s"
ELY03021 java.lang.IllegalArgumentException Invalid permission type; expected %s, got %s
ELY03022 java.lang.SecurityException Permission check failed: %s is not implied by %s
ELY03023 java.lang.IllegalArgumentException PublicKey parse error
ELY03025 java.lang.IllegalArgumentException Iteration count not specified for password based encryption
ELY03026 java.lang.IllegalArgumentException Salt not specified for password based encryption
ELY03027 java.lang.IllegalArgumentException Initial key not specified for password based encryption
ELY03028 java.lang.IllegalArgumentException Security provider "%s" doesn't exist
ELY03029 java.lang.IllegalArgumentException No such key algorithm "%s"
ELY03030 java.io.IOException I/O operation failed: closed
ELY03031 java.security.GeneralSecurityException Too many KerberosTicket instances in private credentials
ELY03031 java.security.GeneralSecurityException Too many KerberosTicket instances in private credentials
ELY03032 java.lang.IllegalArgumentException Base64 string created with unsupported PicketBox version "%s"
ELY03033 java.lang.IllegalArgumentException PrivateKey parse error
ELY04001 java.security.NoSuchAlgorithmException No algorithm found matching TLS/SSL protocol selection criteria
ELY04002 java.security.cert.CertificateException Empty certificate chain is not trusted
ELY04003 java.security.cert.CertificateException Certificate not trusted due to realm failure for principal [%s]
ELY04004 java.security.cert.CertificateException Credential validation failed: certificate is not trusted for principal [%s]
ELY04005 java.security.NoSuchAlgorithmException No default trust manager available
ELY04005 java.security.NoSuchAlgorithmException No default trust manager available
ELY04006 javax.net.ssl.SSLHandshakeException No context for SSL connection
ELY04007 javax.net.ssl.SSLException SSL channel is closed
ELY04008 javax.net.ssl.SSLHandshakeException Initial SSL/TLS data is not a handshake record
ELY04009 javax.net.ssl.SSLHandshakeException Initial SSL/TLS handshake record is invalid
ELY04010 javax.net.ssl.SSLHandshakeException Initial SSL/TLS handshake spans multiple records
ELY04011 javax.net.ssl.SSLHandshakeException Expected "client hello" record
ELY04012 javax.net.ssl.SSLHandshakeException Unsupported SSL/TLS record
ELY04013 javax.net.ssl.SSLProtocolException Invalid TLS extension data
ELY04014 javax.net.ssl.SSLProtocolException Not enough data in record to fill declared item size
ELY04015 javax.net.ssl.SSLProtocolException Empty host name in SNI record data
ELY04016 javax.net.ssl.SSLProtocolException Duplicated SNI server name of type %d
ELY04017 java.lang.IllegalArgumentException Unknown authentication name "%s"
ELY04018 java.lang.IllegalArgumentException Unknown encryption name "%s"
ELY04019 java.lang.IllegalArgumentException Unknown key exchange name "%s"
ELY04020 java.lang.IllegalArgumentException Mechanism "%s" not supported by transformation mapper
ELY04024 java.lang.IllegalArgumentException Invalid client mode, expected %s, got %s
ELY04025 java.lang.IllegalStateException DirContext tries to connect without ThreadLocalSSLSocketFactory thread local setting
ELY04026 java.lang.IllegalStateException Could not create trust manager [%s]
ELY04027 java.lang.IllegalArgumentException SecurityDomain of SSLContext does not support X509PeerCertificateChainEvidence verification
ELY04028 java.security.NoSuchAlgorithmException No default key manager available
ELY04029 java.lang.IllegalStateException Default context cannot be null
ELY04030 javax.net.ssl.SSLException No context for SSL connection
ELY04031 java.lang.IllegalStateException TrustManagerFactory algorithm [%s] does not support certificate revocation
ELY05001 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism exchange received a message after authentication was already complete
ELY05001 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism exchange received a message after authentication was already complete
ELY05002 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism user name contains an invalid or disallowed character
ELY05004 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authorization failed
ELY05005 java.lang.IllegalStateException Authentication mechanism authentication is not yet complete
ELY05005 java.lang.IllegalStateException Authentication mechanism authentication is not yet complete
ELY05006 java.lang.IllegalStateException Authentication mechanism does not support security layer (wrapping/unwrapping)
ELY05007 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid authentication mechanism negotiation message received
ELY05008 org.wildfly.security.mechanism.AuthenticationMechanismException No authentication mechanism login name was given
ELY05009 org.wildfly.security.mechanism.AuthenticationMechanismException No authentication mechanism password was given
ELY05010 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authentication failed due to one or more malformed fields
ELY05011 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism message is too long
ELY05012 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism server-side authentication failed
ELY05013 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism password not verified
ELY05014 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authorization failed: "%s" running as "%s"
ELY05015 java.lang.IllegalArgumentException Unexpected character U+%04x at offset %d of mechanism selection string "%s"
ELY05015 java.lang.IllegalArgumentException Unexpected character U+%04x at offset %d of mechanism selection string "%s"
ELY05016 java.lang.IllegalArgumentException Unrecognized token "%s" in mechanism selection string "%s"
ELY05017 java.lang.IllegalArgumentException Token "%s" not allowed at offset %d of mechanism selection string "%s"
ELY05017 java.lang.IllegalArgumentException Token "%s" not allowed at offset %d of mechanism selection string "%s"
ELY05018 org.wildfly.security.mechanism.AuthenticationMechanismException Channel binding data changed
ELY05019 org.wildfly.security.mechanism.AuthenticationMechanismException No token was given
ELY05020 java.lang.IllegalArgumentException Unexpected end of mechanism selection string "%s"
ELY05022 org.wildfly.security.mechanism.AuthenticationMechanismException Initial challenge must be empty
ELY05023 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to set channel binding
ELY05024 org.wildfly.security.mechanism.AuthenticationMechanismException Failed to determine channel binding status
ELY05025 org.wildfly.security.mechanism.AuthenticationMechanismException Mutual authentication not enabled
ELY05026 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to map SASL mechanism name to a GSS-API OID
ELY05027 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to dispose of GSSContext
ELY05028 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create name for acceptor
ELY05029 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create GSSContext
ELY05030 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to set GSSContext request flags
ELY05031 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to accept SASL client message
ELY05032 org.wildfly.security.mechanism.AuthenticationMechanismException GSS-API mechanism mismatch between SASL client and server
ELY05033 org.wildfly.security.mechanism.AuthenticationMechanismException Channel binding not supported for this SASL mechanism
ELY05034 org.wildfly.security.mechanism.AuthenticationMechanismException Channel binding type mismatch between SASL client and server
ELY05035 org.wildfly.security.mechanism.AuthenticationMechanismException Channel binding not provided by client
ELY05036 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to determine peer name
ELY05037 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism client refuses to initiate authentication
ELY05038 org.wildfly.security.mechanism.AuthenticationMechanismException Nonces do not match
ELY05039 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid length of nonce received
ELY05040 org.wildfly.security.mechanism.AuthenticationMechanismException Iteration count %d is below the minimum of %d
ELY05041 org.wildfly.security.mechanism.AuthenticationMechanismException Iteration count %d is above the maximum of %d
ELY05043 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid server message
ELY05044 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid server message
ELY05045 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid client message
ELY05046 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid client message
ELY05047 org.wildfly.security.mechanism.AuthenticationMechanismException [%s] Authentication mechanism message is for mismatched mechanism "%s"
ELY05049 org.wildfly.security.mechanism.AuthenticationMechanismException Server authenticity cannot be verified
ELY05050 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler does not support user name
ELY05051 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler does not support credential acquisition
ELY05052 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler does not support authorization
ELY05053 javax.security.sasl.SaslException Callback handler failed for unknown reason
ELY05053 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler failed for unknown reason
ELY05053 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler failed for unknown reason
ELY05053 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler failed for unknown reason
ELY05055 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication rejected (invalid proof)
ELY05056 org.wildfly.security.mechanism.AuthenticationMechanismException Client sent extra message
ELY05057 org.wildfly.security.mechanism.AuthenticationMechanismException Server sent extra message
ELY05058 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication failed
ELY05058 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication failed
ELY05060 java.lang.NumberFormatException Empty number
ELY05061 java.lang.NumberFormatException Invalid numeric character
ELY05062 java.lang.NumberFormatException Too big number
ELY05063 org.wildfly.security.mechanism.AuthenticationMechanismException Cannot get clear password from two way password
ELY05064 org.wildfly.security.mechanism.AuthenticationMechanismException Hashing algorithm not supported
ELY05065 org.wildfly.security.mechanism.AuthenticationMechanismException keyword cannot be empty
ELY05066 org.wildfly.security.mechanism.AuthenticationMechanismException No value found for keyword: %s
ELY05067 org.wildfly.security.mechanism.AuthenticationMechanismException '=' expected after keyword: %s
ELY05068 org.wildfly.security.mechanism.AuthenticationMechanismException Unmatched quote found for value: %s
ELY05069 org.wildfly.security.mechanism.AuthenticationMechanismException Expecting comma or linear whitespace after quoted string: %s
ELY05070 org.wildfly.security.mechanism.AuthenticationMechanismException MessageType must equal to %d, but it is %d
ELY05071 org.wildfly.security.mechanism.AuthenticationMechanismException Bad sequence number while unwrapping: expected %d, but %d received
ELY05072 org.wildfly.security.mechanism.AuthenticationMechanismException Problem during crypt
ELY05073 org.wildfly.security.mechanism.AuthenticationMechanismException Problem during decrypt
ELY05074 org.wildfly.security.mechanism.AuthenticationMechanismException Unknown cipher "%s"
ELY05075 org.wildfly.security.mechanism.AuthenticationMechanismException Authorization ID changed unexpectedly
ELY05076 org.wildfly.security.mechanism.AuthenticationMechanismException Problem getting required cipher. Check your transformation mapper settings.
ELY05077 org.wildfly.security.mechanism.AuthenticationMechanismException No common protection layer between client and server
ELY05078 org.wildfly.security.mechanism.AuthenticationMechanismException No common cipher between client and server
ELY05079 org.wildfly.security.mechanism.AuthenticationMechanismException No ciphers offered by server
ELY05080 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler not provided user name
ELY05083 org.wildfly.security.mechanism.AuthenticationMechanismException Missing "%s" directive
ELY05084 org.wildfly.security.mechanism.AuthenticationMechanismException nonce-count must equal to %d, but it is %d
ELY05085 org.wildfly.security.mechanism.AuthenticationMechanismException Server is set to not support %s charset
ELY05086 org.wildfly.security.mechanism.AuthenticationMechanismException Charset can be only "utf-8" or unspecified (to use ISO 8859-1)
ELY05087 org.wildfly.security.mechanism.AuthenticationMechanismException Client selected realm not offered by server (%s)
ELY05088 org.wildfly.security.mechanism.AuthenticationMechanismException digest-uri "%s" not accepted
ELY05089 org.wildfly.security.mechanism.AuthenticationMechanismException Unexpected qop value: "%s"
ELY05090 java.lang.IllegalStateException Wrapping is not configured
ELY05090 java.lang.IllegalStateException Wrapping is not configured
ELY05091 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication name string is too long
ELY05092 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication name is empty
ELY05093 org.wildfly.security.mechanism.AuthenticationMechanismException Authorization for anonymous access is denied
ELY05094 java.lang.IllegalArgumentException Required padded length (%d) is less than length of conversion result (%d)
ELY05095 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid key provided for Digest HMAC computing
ELY05097 java.lang.IllegalStateException Unable to determine subject name from X.509 certificate
ELY05098 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to verify client signature
ELY05099 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to verify server signature
ELY05101 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler not provided server certificate
ELY05102 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler not provided client certificate
ELY05103 org.wildfly.security.mechanism.AuthenticationMechanismException Server identifier mismatch
ELY05104 org.wildfly.security.mechanism.AuthenticationMechanismException Client identifier mismatch
ELY05105 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to determine client name
ELY05106 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler not provided private key
ELY05107 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create signature
ELY05108 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create response token
ELY05109 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create response token
ELY05110 java.lang.IllegalArgumentException Invalid value for trusted authority type; expected a value between 0 and 4 (inclusive)
ELY05111 java.lang.IllegalArgumentException Invalid value for a general name type; expected a value between 0 and 8 (inclusive)
ELY05112 org.wildfly.security.mechanism.AuthenticationMechanismException Getting authentication mechanisms supported by GSS-API failed
ELY05113 java.lang.RuntimeException Unable to initialize OID of Kerberos V5
ELY05114 org.wildfly.security.mechanism.AuthenticationMechanismException Receive buffer requested '%d' is greater than supported maximum '%d'
ELY05115 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to wrap message
ELY05116 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to unwrap message
ELY05117 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to unwrap security layer negotiation message
ELY05118 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid message of length %d on unwrapping
ELY05119 org.wildfly.security.mechanism.AuthenticationMechanismException Negotiated mechanism was not Kerberos V5
ELY05120 org.wildfly.security.mechanism.AuthenticationMechanismException Insufficient levels of protection available for supported security layers
ELY05121 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to generate security layer challenge
ELY05122 org.wildfly.security.mechanism.AuthenticationMechanismException Client selected a security layer that was not offered by server
ELY05123 org.wildfly.security.mechanism.AuthenticationMechanismException No security layer selected but message length received
ELY05124 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to get maximum size of message before wrap
ELY05125 javax.security.sasl.SaslException Unable to handle response from server
ELY05125 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to handle response from server
ELY05125 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to handle response from server
ELY05126 org.wildfly.security.mechanism.AuthenticationMechanismException Bad length of message for negotiating security layer
ELY05127 org.wildfly.security.mechanism.AuthenticationMechanismException No security layer supported by server but maximum message size received: "%d"
ELY05128 org.wildfly.security.mechanism.AuthenticationMechanismException Failed to read challenge file
ELY05129 org.wildfly.security.mechanism.AuthenticationMechanismException Failed to create challenge file
ELY05130 java.lang.IllegalArgumentException Invalid non-ASCII space "0x%X"
ELY05131 java.lang.IllegalArgumentException Invalid ASCII control "0x%X"
ELY05132 java.lang.IllegalArgumentException Invalid non-ASCII control "0x%X"
ELY05133 java.lang.IllegalArgumentException Invalid private use character "0x%X"
ELY05134 java.lang.IllegalArgumentException Invalid non-character code point "0x%X"
ELY05135 java.lang.IllegalArgumentException Invalid surrogate code point "0x%X"
ELY05136 java.lang.IllegalArgumentException Invalid plain text code point "0x%X"
ELY05137 java.lang.IllegalArgumentException Invalid non-canonical code point "0x%X"
ELY05138 java.lang.IllegalArgumentException Invalid control character "0x%X"
ELY05139 java.lang.IllegalArgumentException Invalid tagging character "0x%X"
ELY05140 java.lang.IllegalArgumentException Unassigned code point "0x%X"
ELY05141 java.lang.IllegalArgumentException Invalid surrogate pair (high at end of string) "0x%X"
ELY05142 java.lang.IllegalArgumentException Invalid surrogate pair (second is not low) "0x%X 0x%X"
ELY05143 java.lang.IllegalArgumentException Invalid surrogate pair (low without high) "0x%X"
ELY05144 java.lang.IllegalArgumentException Invalid code point "0x%X"
ELY05145 java.lang.IllegalArgumentException Disallowed R/AL directionality character in L string
ELY05146 java.lang.IllegalArgumentException Disallowed L directionality character in R/AL string
ELY05147 java.lang.IllegalArgumentException Missing trailing R/AL directionality character
ELY05148 java.lang.IllegalArgumentException Invalid escape sequence
ELY05150 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authorization ID is too long
ELY05151 javax.security.sasl.SaslException Invalid OTP algorithm "%s"
ELY05151 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP algorithm "%s"
ELY05151 javax.security.sasl.SaslException Invalid OTP algorithm "%s"
ELY05152 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP response type
ELY05153 org.wildfly.security.mechanism.AuthenticationMechanismException Incorrect parity in SASL client message
ELY05154 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid character in seed
ELY05155 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP seed, must be between 1 and 16 characters long
ELY05156 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP pass phrase, must be between 10 and 63 characters long
ELY05157 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP sequence number
ELY05158 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP
ELY05159 org.wildfly.security.mechanism.AuthenticationMechanismException OTP pass phrase and seed must not match
ELY05160 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP alternate dictionary
ELY05161 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to retrieve password for "%s"
ELY05162 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to update password for "%s"
ELY05163 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism server timed out
ELY05163 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism server timed out
ELY05164 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to obtain exclusive access for "%s"
ELY05165 org.wildfly.security.mechanism.AuthenticationMechanismException OTP re-initialization failed
ELY05166 org.wildfly.security.mechanism.ScramServerException Server rejected authentication
ELY05167 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP password format type
ELY05168 org.wildfly.security.mechanism.AuthenticationMechanismException Unsupported algorithm selected "%s"
ELY05169 java.lang.String [%s] Clients response token does not match expected token
ELY05170 org.wildfly.security.mechanism.AuthenticationMechanismException Problem during crypt: The encrypted result is null. The input data has a length of zero or too short to result in a new block.
ELY05171 org.wildfly.security.mechanism.AuthenticationMechanismException Problem during decrypt: The decrypted result is null. The input data has a length of zero or too short to result in a new block.
ELY05172 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to locate MechanismConfiguration for mechanism.
ELY05173 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to obtain server credential.
ELY05174 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler has not chosen realm
ELY05175 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to determine bound server name
ELY05176 org.wildfly.security.mechanism.AuthenticationMechanismException Unsupported callback
ELY05177 org.wildfly.security.mechanism.AuthenticationMechanismException One of "%s" and "%s" directives has to be defined
ELY06000 java.lang.IllegalStateException Status code can not be set at this time.
ELY06001 java.lang.String An incorrectly formatted '%s'header was encountered.
ELY06002 java.lang.String An authentication attempt for user '%s' failed validation using mechanism '%s'.
ELY06003 java.lang.String An authentication attempt failed validation.
ELY06005 java.lang.UnsupportedOperationException Attachments are not supported on this scope.
ELY06006 java.lang.String An authorization check for user '%s' failed.
ELY06007 java.lang.String Username or password missing from authentication attempt.
ELY06008 WARN Failed to logout participant [%s]. Participant will be removed from list of participants but its local session may still be active.
ELY06012 java.lang.IllegalStateException Invalid logout message received for local session [%s]
ELY06013 ERROR Failed to invalidate local session
ELY06014 org.wildfly.security.http.HttpAuthenticationException Authentication mechanism '%s' cannot be found
ELY06015 org.wildfly.security.http.HttpAuthenticationException Unable to authenticate using DIGEST mechanism - realm name needs to be specified
ELY06016 org.wildfly.security.http.HttpAuthenticationException HTTP authentication failed validating request, no mechanisms remain to continue authentication.
ELY06017 org.wildfly.security.http.HttpAuthenticationException HTTP authentication is required but no authentication mechansims are available.
ELY06018 org.wildfly.security.http.HttpAuthenticationException HTTP authentication none of the responders successfuly sent a response.
ELY06019 org.wildfly.security.http.HttpAuthenticationException Unable to authenticate using DIGEST mechanism - mechanism realm name (%s) is not valid
ELY06020 java.lang.IllegalArgumentException Scope unsuitable for use with authentication state '%s'
ELY06021 java.lang.IllegalArgumentException Unable to identify suitable HttpScope for mechanism state storage
ELY06022 org.wildfly.security.http.HttpAuthenticationException Invalid nonce count %s
ELY07001 org.wildfly.security.asn1.ASN1Exception Unrecognized encoding algorithm [%s]
ELY07001 org.wildfly.security.asn1.ASN1Exception Unrecognized encoding algorithm [%s]
ELY07002 org.wildfly.security.asn1.ASN1Exception Invalid general name type
ELY07004 org.wildfly.security.asn1.ASN1Exception Unexpected ASN.1 tag encountered
ELY07004 org.wildfly.security.asn1.ASN1Exception Unexpected ASN.1 tag encountered
ELY07004 org.wildfly.security.asn1.ASN1Exception Unexpected ASN.1 tag encountered
ELY07005 org.wildfly.security.asn1.ASN1Exception Unable to read X.509 certificate data
ELY07006 org.wildfly.security.asn1.ASN1Exception Invalid general name for URI type
ELY07007 org.wildfly.security.asn1.ASN1Exception Invalid general name for IP address type
ELY07008 org.wildfly.security.asn1.ASN1Exception IP address general name cannot be resolved
ELY07009 java.lang.IllegalStateException No sequence to end
ELY07010 java.lang.IllegalStateException No set to end
ELY07011 java.lang.IllegalStateException No explicitly tagged element to end
ELY07012 org.wildfly.security.asn1.ASN1Exception Unexpected end of input
ELY07013 org.wildfly.security.asn1.ASN1Exception Invalid number of unused bits
ELY07014 org.wildfly.security.asn1.ASN1Exception Non-zero length encountered for null type tag
ELY07015 org.wildfly.security.asn1.ASN1Exception Invalid high-tag-number form
ELY07016 org.wildfly.security.asn1.ASN1Exception Length encoding exceeds 4 bytes
ELY07017 org.wildfly.security.asn1.ASN1Exception Invalid OID character
ELY07018 org.wildfly.security.asn1.ASN1Exception OID must have at least 2 components
ELY07019 org.wildfly.security.asn1.ASN1Exception Invalid value for first OID component; expected 0, 1, or 2
ELY07020 org.wildfly.security.asn1.ASN1Exception Invalid value for second OID component; expected a value between 0 and 39 (inclusive)
ELY07021 org.wildfly.security.asn1.ASN1Exception Invalid length
ELY07022 org.wildfly.security.asn1.ASN1Exception Unknown tag type: %d
ELY07023 org.wildfly.security.asn1.ASN1Exception Unexpected character byte for printable string
ELY07024 org.wildfly.security.asn1.ASN1Exception Invalid length encountered for boolean type tag
ELY07025 org.wildfly.security.asn1.ASN1Exception Invalid general name for URI type: missing scheme
ELY08001 java.security.spec.InvalidKeySpecException Unrecognized key spec algorithm
ELY08002 java.security.spec.InvalidKeySpecException Password spec cannot be rendered as a string
ELY08003 java.security.spec.InvalidKeySpecException Unknown crypt string algorithm
ELY08004 java.security.spec.InvalidKeySpecException Invalid character encountered
ELY08005 java.security.spec.InvalidKeySpecException No iteration count terminator given
ELY08006 java.security.spec.InvalidKeySpecException Unexpected end of input string
ELY08007 java.security.spec.InvalidKeySpecException No salt terminator given
ELY08008 java.lang.IllegalArgumentException Invalid hash length
ELY08009 java.security.spec.InvalidKeySpecException Unexpected end of password string
ELY08010 java.security.spec.InvalidKeySpecException Unexpected end of password string
ELY08011 java.security.spec.InvalidKeySpecException Invalid minor version
ELY08012 java.security.spec.InvalidKeySpecException Invalid cost: must be a two digit integer
ELY08013 java.security.spec.InvalidKeySpecException No such MessageDigest algorithm for "%s"
ELY08013 java.security.spec.InvalidKeySpecException No such MessageDigest algorithm for "%s"
ELY08014 java.security.InvalidKeyException No such MessageDigest algorithm for "%s"
ELY08014 java.security.InvalidKeyException No such MessageDigest algorithm for "%s"
ELY08015 java.security.InvalidKeyException Cannot verify password
ELY08015 java.security.InvalidKeyException Cannot verify password
ELY08017 java.security.InvalidKeyException DES crypt password hash must be %d bytes
ELY08017 java.security.InvalidKeyException DES crypt password hash must be %d bytes
ELY08018 java.security.spec.InvalidParameterSpecException Salt must be %d bytes (%d bits)
ELY08018 java.security.spec.InvalidParameterSpecException Salt must be %d bytes (%d bits)
ELY08020 java.lang.IllegalArgumentException Invalid number of rounds. Must be an integer between %d and %d, inclusive
ELY08020 java.lang.IllegalArgumentException Invalid number of rounds. Must be an integer between %d and %d, inclusive
ELY08021 java.lang.IllegalArgumentException Invalid salt: must be %d bytes long
ELY08021 java.lang.IllegalArgumentException Invalid salt: must be %d bytes long
ELY08022 java.security.spec.InvalidKeySpecException BSD DES crypt password hash must be %d bytes
ELY08022 java.security.spec.InvalidKeySpecException BSD DES crypt password hash must be %d bytes
ELY08023 java.security.spec.InvalidParameterSpecException Salt must be %d bytes
ELY08023 java.security.spec.InvalidParameterSpecException Salt must be %d bytes
ELY08024 java.security.InvalidKeyException BSD DES crypt password hash must be %d bytes
ELY08024 java.security.InvalidKeyException BSD DES crypt password hash must be %d bytes
ELY08025 java.security.spec.InvalidKeySpecException Expected to get a "%s" as spec, got "%s"
ELY08025 java.security.spec.InvalidKeySpecException Expected to get a "%s" as spec, got "%s"
ELY08026 java.security.spec.InvalidKeySpecException Unknown algorithm or incompatible PasswordSpec
ELY08026 java.security.spec.InvalidKeySpecException Unknown algorithm "%s" or incompatible PasswordSpec "%s"
ELY08027 java.security.InvalidKeyException Unknown password type or algorithm
ELY08027 java.security.InvalidKeyException Unknown password type or algorithm
ELY08027 java.security.InvalidKeyException Unknown password type or algorithm
ELY08028 java.security.NoSuchAlgorithmException Invalid algorithm "%s"
ELY08028 java.security.NoSuchAlgorithmException Invalid algorithm "%s"
ELY08029 java.lang.IllegalArgumentException Could not obtain key spec encoding identifier.
ELY08030 java.security.spec.InvalidParameterSpecException Failed to encode parameter specification
ELY08031 java.io.IOException Failed to decode parameter specification
ELY08032 java.security.spec.InvalidParameterSpecException Invalid parameter specification type (expected %s, got %s)
ELY08033 java.io.IOException Invalid format given (expected %s, got %s)
ELY08034 java.lang.IllegalStateException Algorithm parameters instance not initialized
ELY08500 ERROR Failed to check permissions for protection domain [%s] and permission [%s].
ELY08501 java.lang.UnsupportedOperationException Invalid state [%s] for operation.
ELY08502 java.lang.IllegalArgumentException Can't link policy configuration [%s] to itself.
ELY08503 java.lang.IllegalStateException ContextID not set. Check if the context id was set using PolicyContext.setContextID.
ELY08504 java.lang.IllegalArgumentException Invalid policy context identifier [%s].
ELY08505 jakarta.security.jacc.PolicyContextException Could not obtain PolicyConfiguration for contextID [%s].
ELY08506 java.lang.IllegalStateException Policy configuration with contextID [%s] is not in service state.
ELY08508 DEBUG Could not obtain authorized identity.
ELY08510 java.lang.IllegalStateException Role mapper has already been initialized.
ELY08511 java.lang.IllegalStateException Role mapper hasn't been initialized yet.
ELY09000 java.lang.IllegalArgumentException Public and private key parameters are mismatched
ELY09001 java.lang.IllegalStateException Client credentials not provided
ELY09500 org.wildfly.security.credential.store.CredentialStoreException External storage key under alias "%s" has to be a SecretKey
ELY09501 org.wildfly.client.config.ConfigXMLParseException Duplicate attribute ("%s") found in configuration.
ELY09502 org.wildfly.client.config.ConfigXMLParseException Duplicate credential store name found in configuration "%s"
ELY09503 org.wildfly.client.config.ConfigXMLParseException Credential store name "%s" not defined
ELY09504 org.wildfly.security.credential.store.CredentialStoreException Cannot acquire a credential from the credential store
ELY09505 org.wildfly.security.credential.store.CredentialStoreException Cannot perform operation '%s': Credential store is set non modifiable
ELY09506 java.io.InterruptedIOException Credential store command interrupted
ELY09507 org.wildfly.security.credential.store.CredentialStoreException Invalid protection parameter given: %s
ELY09508 org.wildfly.security.credential.store.CredentialStoreException Cannot write credential to store
ELY09509 org.wildfly.security.credential.store.UnsupportedCredentialTypeException Unsupported credential type %s
ELY09510 org.wildfly.security.credential.store.CredentialStoreException Invalid credential store keystore entry %s: expected %s
ELY09511 org.wildfly.security.credential.store.CredentialStoreException Unable to read credential %s from store
ELY09511 org.wildfly.security.credential.store.CredentialStoreException Unable to read credential %s from store
ELY09512 org.wildfly.security.credential.store.CredentialStoreException Unable to remove credential from store
ELY09513 org.wildfly.security.credential.store.CredentialStoreException Unable to flush credential store to storage
ELY09514 org.wildfly.security.credential.store.CredentialStoreException Unable to initialize credential store
ELY09515 DEBUG Ignored unrecognized key store entry "%s"
ELY09516 WARN Failed to read a credential entry from the key store
ELY09517 org.wildfly.security.credential.store.CredentialStoreException This credential store type requires a store-wide protection parameter
ELY09518 org.wildfly.security.credential.store.CredentialStoreException Automatic storage creation for the Credential Store is disabled "%s"
ELY09519 java.io.IOException Unexpected credential store external storage file version "%s"
ELY09520 java.io.IOException Unrecognized entry type "%s"
ELY09521 java.io.IOException Internal encryption problem while reading "%s"
ELY09522 org.wildfly.security.credential.store.CredentialStoreException "%s" is not a block based algorithm
ELY09523 org.wildfly.security.credential.store.CredentialStoreException Algorithm "%s" does not use an initialization vector (IV)
ELY09524 java.io.IOException The actual number of bytes read %d is different from the expected number of bytes %d to be read
ELY09525 org.wildfly.security.credential.store.CredentialStoreException location and externalPath initial attributes are the same. [location=%s, externalPath=%s]
ELY09526 org.wildfly.security.credential.store.CredentialStoreException Unable to initialize credential store as attribute %s is unsupported in %s
ELY09527 org.wildfly.client.config.ConfigXMLParseException Invalid credential store reference
ELY09528 org.wildfly.security.credential.store.CredentialStoreException The externalPath attribute for key store type %s is missing.
ELY09529 org.wildfly.client.config.ConfigXMLParseException Unsupported algorithm "%s" for %s type
ELY10000 java.lang.IllegalArgumentException X.509 certificate extension with OID %s already exists
ELY10001 java.lang.IllegalArgumentException No signature algorithm name given
ELY10002 java.lang.IllegalArgumentException Signature algorithm name "%s" is not recognized
ELY10003 java.lang.IllegalArgumentException No signing key given
ELY10004 java.lang.IllegalArgumentException Signing key algorithm name "%s" is not compatible with signature algorithm name "%s"
ELY10005 java.lang.IllegalArgumentException Not-valid-before date of %s is after not-valid-after date of %s
ELY10006 java.lang.IllegalArgumentException No issuer DN given
ELY10007 java.lang.IllegalArgumentException No public key given
ELY10008 java.lang.IllegalArgumentException Issuer and subject unique ID are only allowed in certificates with version 2 or higher
ELY10009 java.lang.IllegalArgumentException Extensions are only allowed in certificates with version 3 or higher
ELY10010 java.lang.IllegalArgumentException X.509 encoding of public key with algorithm "%s" failed
ELY10011 java.lang.IllegalArgumentException Failed to sign certificate
ELY10012 java.lang.IllegalArgumentException Certificate serial number must be positive
ELY10013 java.lang.IllegalArgumentException Certificate serial number too large (cannot exceed 20 octets)
ELY10014 java.lang.IllegalArgumentException Failed to sign certification request info
ELY10015 java.lang.IllegalArgumentException No certificate given
ELY10016 java.lang.IllegalArgumentException Unable to determine key size
ELY10016 java.lang.IllegalArgumentException Unable to determine key size
ELY10017 java.lang.IllegalArgumentException No DN given
ELY10018 java.lang.IllegalArgumentException Failed to generate self-signed X.509 certificate
ELY10019 java.lang.IllegalArgumentException Unable to determine default compatible signature algorithm name for key algorithm name "%s"
ELY10019 java.lang.IllegalArgumentException Unable to determine default compatible signature algorithm name for key algorithm name "%s"
ELY10020 java.lang.IllegalArgumentException Creating an X.509 certificate extension from a string value is not supported for extension name "%s"
ELY10021 java.lang.IllegalArgumentException Invalid X.509 certificate extension string value "%s"
ELY10022 java.lang.IllegalArgumentException Failed to create X.509 certificate extension from string value
ELY10023 java.lang.IllegalArgumentException X.509 certificate extension "%s" must be non-critical
ELY10024 java.lang.IllegalArgumentException Invalid X.509 certificate extension string value
ELY10025 java.lang.IllegalArgumentException Non-X.509 certificate found in certificate array
ELY10026 java.lang.IllegalArgumentException Starting public key not found in certificate array
ELY10027 java.lang.IllegalArgumentException Incomplete certificate array
ELY10028 java.lang.IllegalArgumentException Unable to create X.509 certificate chain from map of certificates
ELY10029 java.lang.IllegalArgumentException Failed to generate ACME account key pair
ELY10030 java.lang.IllegalArgumentException No ACME server URL given
ELY10031 java.lang.IllegalArgumentException Unsupported ACME account signature algorithm "%s"
ELY10032 java.lang.IllegalArgumentException Unable to create ACME signature
ELY10033 org.wildfly.security.x500.cert.acme.AcmeException Unable to retrieve ACME server directory URLs
ELY10034 org.wildfly.security.x500.cert.acme.AcmeException No nonce provided by ACME server
ELY10035 org.wildfly.security.x500.cert.acme.AcmeException No %s location URL provided by ACME server
ELY10036 org.wildfly.security.x500.cert.acme.AcmeException Unable to obtain new nonce from ACME server
ELY10037 org.wildfly.security.x500.cert.acme.AcmeException Unable to obtain JSON response from ACME server
ELY10038 org.wildfly.security.x500.cert.acme.AcmeException Unexpected HTTP status code in response from ACME server "%d": "%s"
ELY10039 org.wildfly.security.x500.cert.acme.AcmeException Bad ACME replay nonce, maximum retries attempted
ELY10040 org.wildfly.security.x500.cert.acme.AcmeException Unexpected content type in response from ACME server "%s"
ELY10041 org.wildfly.security.x500.cert.acme.AcmeException Invalid content type in response from ACME server
ELY10042 org.wildfly.security.x500.cert.acme.AcmeException Domain name is null
ELY10043 org.wildfly.security.x500.cert.acme.AcmeException Domain names is empty
ELY10044 org.wildfly.security.x500.cert.acme.AcmeException No certificate URL provided by ACME server
ELY10045 org.wildfly.security.x500.cert.acme.AcmeException No certificate will be issued by the ACME server
ELY10046 org.wildfly.security.x500.cert.acme.AcmeException Unable to get encoded form of certificate to be revoked
ELY10047 org.wildfly.security.x500.cert.acme.AcmeException Unable to determine key authorization string
ELY10048 org.wildfly.security.x500.cert.acme.AcmeException Challenge response failed validation by the ACME server
ELY10049 org.wildfly.security.x500.cert.acme.AcmeException Unable to download certificate chain from ACME server
ELY10050 org.wildfly.security.x500.cert.acme.AcmeException ACME account does not exist
ELY10051 org.wildfly.security.x500.cert.acme.AcmeException User action required since the ACME server's terms of service have changed, visit "%s" for details
ELY10052 org.wildfly.security.x500.cert.acme.AcmeException Rate limit has been exceeded, try again after "%s"
ELY10053 org.wildfly.security.x500.cert.acme.AcmeException Rate limit has been exceeded
ELY10054 org.wildfly.security.x500.cert.acme.AcmeException Resource not supported by the ACME server "%s"
ELY10055 java.lang.IllegalArgumentException Unsupported ACME account public key type "%s"
ELY10056 java.lang.IllegalArgumentException Unable to determine curve parameter from alg header "%s"
ELY10057 org.wildfly.security.x500.cert.acme.AcmeException No ACME server staging URL given
ELY11001 FATAL Endpoint unable to handle SecurityEvent priority=%s, message=%s
ELY11002 java.lang.IllegalArgumentException Invalid EventPriority '%s' passed to AuditEndpoint.
ELY11003 ERROR Unable to rotate log file
ELY11004 java.lang.IllegalArgumentException Invalid suffix "%s" - rotating by second or millisecond is not supported
ELY11005 java.io.IOException Invalid unicode endoding, offending sequence: %s.
ELY11006 org.wildfly.security.credential.store.CredentialStoreException External storage key under alias "%s" does not exist
ELY11007 FATAL Endpoint unable to accept SecurityEvent.
ELY12001 java.io.IOException The maximum reconnect attempts value of %s was reached. The syslog endpoint will be shutdown.
ELY12002 java.net.PortUnreachableException The configured UDP port is unavailable.
ELY12003 java.lang.IllegalArgumentException The reconnect attempts value of %s is invalid. Please use an integer value >= -1.
ELY13000 java.lang.IllegalStateException Authorization principal cannot be null after transformation
ELY13001 WARN Realm is failing over.
ELY13002 javax.security.auth.callback.UnsupportedCallbackException %s does not handle a callback of type %s
ELY13003 org.wildfly.security.auth.server.RealmUnavailableException Failed to load JAAS configuration file.
ELY13004 DEBUG JAAS logout failed for principal %s
ELY13005 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm unable to decrypt identity
ELY13006 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm unable to encrypt identity
ELY13007 org.wildfly.security.auth.realm.IntegrityException Signature for the following identity is invalid: %s.
ELY13008 org.wildfly.security.auth.server.RealmUnavailableException Unable to create a signature for the file: %s.
ELY13009 org.wildfly.security.auth.server.RealmUnavailableException Unable to locate the signature element for the file: %s
ELY13010 java.lang.IllegalArgumentException Both PrivateKey and PublicKey must be defined for realm at: %s
ELY13011 java.lang.IllegalArgumentException Integrity has not been enabled for the realm at: %s
ELY13012 WARN A realm within the distributed realm is unavailable. This realm will be ignored.
ELY14000 org.wildfly.client.config.ConfigXMLParseException At least one of the '%s' and '%s' cipher-suite attributes must be provided
ELY14001 org.wildfly.client.config.ConfigXMLParseException Wrong Key content type; expected OpenSSH private key
ELY14002 org.wildfly.client.config.ConfigXMLParseException Unable to obtain SSLContext
ELY14003 org.wildfly.client.config.ConfigXMLParseException Name callback handling was unsuccessful
ELY14004 org.wildfly.client.config.ConfigXMLParseException Password callback handling was unsuccessful
ELY14005 java.security.NoSuchAlgorithmException Default SSL context in security provider creates infinite loop
ELY14006 java.lang.IllegalArgumentException Configuration file path passed to WildFlyElytronClientDefaultSSLContextProvider not found
ELY14007 java.lang.IllegalArgumentException Invalid path passed to WildFlyElytronClientDefaultSSLContextProvider
ELY14008 java.security.NoSuchAlgorithmException WildFlyElytronClientDefaultSSLContextProvider could not obtain client default SSLContext
ELY15000 java.lang.IllegalArgumentException Unknown cipher suite name '%s' in names string '%s'
ELY15001 java.security.NoSuchAlgorithmException No '%s' provided by the configured providers
ELY16000 java.lang.IllegalArgumentException Invalid replacement in regex role mapper.
ELY16001 java.lang.IllegalArgumentException Invalid pattern in regex role mapper.
ELY16002 java.lang.IllegalArgumentException Can not handle SecurityEvent with SecurityIdentity from other SecurityDomain
ELY17000 java.io.IOException Failed to create credential
ELY19000 java.security.GeneralSecurityException Invalid size value. Must be one of 128, 192, or 256
ELY19001 java.security.GeneralSecurityException Invalid prefix importing SecretKey
ELY19002 java.security.GeneralSecurityException Unsupported version '%d' the maximum supported version is '%d'
ELY19003 java.security.GeneralSecurityException Unexpected token type '%s', expected '%s'
ELY19004 java.security.GeneralSecurityException Unable to decode Base64 token.
ELY20000 org.wildfly.security.credential.store.CredentialStoreException The credential store file %s does not exist or cannot be accessed.
ELY20001 org.wildfly.security.credential.store.CredentialStoreException The credential store has not been initialised.
ELY20002 org.wildfly.security.credential.store.CredentialStoreException The required initialisation attribute '%s' has not been specified.
ELY20003 org.wildfly.security.credential.store.CredentialStoreException Invalid CredentialStore property '%s'.
ELY20004 org.wildfly.security.credential.store.CredentialStoreException Can not load SecretKey for '%s'.
ELY21000 java.security.InvalidAlgorithmParameterException Invalid algorithm parameter specification
ELY21001 java.security.InvalidAlgorithmParameterException Invalid sequence number algorithm parameter "%s"
ELY22000 WARN Changing the session ID has been disabled, ensure session tracking uses cookies only to avoid session fixation.
ELY22500 WARN Changing the session ID has been disabled, ensure session tracking uses cookies only to avoid session fixation.
ELY23000 org.wildfly.security.http.oidc.OidcException Unexpected HTTP status code in response from OIDC provider "%d"
ELY23001 org.wildfly.security.http.oidc.OidcException No entity in response from OIDC provider
ELY23002 org.wildfly.security.http.oidc.OidcException Unexpected error sending request to OIDC provider
ELY23003 java.lang.IllegalArgumentException Either provider-url or auth-server-url needs to be configured
ELY23004 INFO Loaded OpenID provider metadata from '%s'
ELY23005 WARN Unable to load OpenID provider metadata from %s
ELY23006 java.lang.RuntimeException Failed to decode request URI
ELY23007 java.lang.RuntimeException Failed to write to response output stream
ELY23008 java.lang.IllegalArgumentException Unable to parse token
ELY23009 java.lang.RuntimeException OIDC client configuration file not found
ELY23010 ERROR Failed to invoke remote logout
ELY23011 ERROR Refresh token failure
ELY23012 ERROR Refresh token failure status: %d %s
ELY23013 ERROR Failed verification of token: %s
ELY23014 ERROR Failed to refresh the token with a longer time-to-live than the minimum
ELY23015 java.lang.IllegalArgumentException No expected issuer given
ELY23016 java.lang.IllegalArgumentException No client ID given
ELY23017 java.lang.IllegalArgumentException No expected JWS algorithm given
ELY23018 java.lang.IllegalArgumentException No JWKS public key or client secret key given
ELY23019 org.wildfly.security.http.oidc.OidcException Invalid ID token
ELY23020 java.lang.IllegalArgumentException Invalid token claim value
ELY23021 org.wildfly.security.http.oidc.OidcException Invalid ID token claims
ELY23022 java.lang.RuntimeException Must set 'realm' in config
ELY23023 java.lang.RuntimeException Must set 'resource' or 'client-id'
ELY23024 java.lang.IllegalArgumentException For bearer auth, you must set the 'realm-public-key' or one of 'auth-server-url' and 'provider-url'
ELY23025 java.lang.RuntimeException Must set 'auth-server-url' or 'provider-url'
ELY23026 WARN Client '%s' does not have a secret configured
ELY23027 java.lang.IllegalArgumentException Unsupported public key
ELY23028 java.lang.IllegalArgumentException Unable to create signed token
ELY23029 java.lang.RuntimeException Configuration of jwt credentials is missing or incorrect for client '%s'
ELY23030 java.lang.RuntimeException Missing parameter '%s' in jwt credentials for client %s
ELY23031 java.lang.IllegalArgumentException Unable to parse key '%s' with value '%s'
ELY23032 java.lang.RuntimeException Unable to load key with alias '%s' from keystore
ELY23033 java.lang.RuntimeException Unable to load private key from keystore
ELY23034 java.lang.RuntimeException Unable to find keystore file '%s'
ELY23035 java.lang.RuntimeException Configuration of secret jwt client credentials is missing or incorrect for client '%s'
ELY23036 java.lang.RuntimeException Invalid value for 'algorithm' in secret jwt client credentials configuration for client '%s'
ELY23037 java.lang.RuntimeException Unable to determine client credentials provider type for client '%s'
ELY23038 java.lang.RuntimeException Unable to find client credentials provider '%s'
ELY23039 java.lang.RuntimeException Unable to load keystore
ELY23040 java.lang.RuntimeException Unable to load truststore
ELY23041 java.lang.RuntimeException Unable to find truststore file '%s'
ELY23042 java.lang.String Unexpected value for at_hash claim
ELY23043 java.lang.IllegalArgumentException Uknown algorithm: '%s'
ELY23044 WARN Failed to parse token from cookie
ELY23045 java.lang.IllegalArgumentException Unable to create redirect response
ELY23046 java.lang.RuntimeException Unable to set auth server URL
ELY23047 java.lang.RuntimeException Unable resolve a relative URL
ELY23048 java.lang.RuntimeException Invalid URI: '%s'
ELY23049 WARN Invalid 'auth-server-url' or 'provider-url': '%s'
ELY23050 org.wildfly.security.http.oidc.OidcException Invalid bearer token claims
ELY23051 org.wildfly.security.http.oidc.OidcException Invalid bearer token
ELY23052 WARN No trusted certificates in token
ELY23053 WARN No peer certificates established on the connection
ELY23054 java.lang.String Unexpected value for typ claim
ELY23055 java.io.IOException Unable to obtain token: %d
ELY23056 java.io.IOException No message entity
ELY24000 java.lang.IllegalArgumentException Unable to parse string JWK
ELY24001 java.lang.IllegalArgumentException Unsupported key type for JWK: "%s"
ELY24002 java.lang.IllegalArgumentException Unsupported curve
ELY24003 java.lang.RuntimeException Unable to create public key from JWK
ELY24004 java.lang.RuntimeException Unable to generate thumbprint for the certificate
ELY26000 java.lang.RuntimeException JsonNode ["%s"] is not a object.
ELY40000 java.lang.IllegalArgumentException Malformed OpenSSH Private Key: %s
ELY40001 java.lang.IllegalArgumentException Unable to Generate Key: %s
ELY40002 java.lang.IllegalArgumentException Malformed PEM content when parsing SSH at offset %d

ELYEE

Code Level Return Type Message
ELYEE00001 java.lang.IllegalStateException No ThreadLocal CallbackHandler available.
ELYEE00002 java.lang.IllegalStateException Unrecognised context type '%s'.
ELYEE00003 java.lang.IllegalStateException No registration for '%s'.

ELYTOOL

Code Level Return Type Message
ELYTOOL00000 java.lang.String Command or alias "%s" not found.
ELYTOOL00000 java.lang.String Input data not confirmed. Exiting.
ELYTOOL00000 java.lang.String %s %s
ELYTOOL00000 java.lang.String Exception encountered executing the command:
ELYTOOL00000 java.lang.String Printing general help message:
ELYTOOL00000 java.lang.String Location of credential store storage file
ELYTOOL00000 java.lang.String "credential-store" command is used to perform various operations on credential store.
ELYTOOL00000 java.lang.String Implementation properties for credential store type in form of "prop1=value1; ... ;propN=valueN" .%nSupported properties are dependent on credential store type%nKeyStoreCredentialStore (default implementation) supports following additional properties (all are optional):%nkeyStoreType - specifies the key store type to use (defaults to "JCEKS")%nkeyAlias - specifies the secret key alias within the key store to use for encrypt/decrypt of data in external storage (defaults to "cs_key")%nexternal - specifies whether to store data to external storage and encrypted by keyAlias key (defaults to "false")%ncryptoAlg - cryptographic algorithm name to be used to encrypt/decrypt entries at external storage "external" has to be set to "true"
ELYTOOL00000 java.lang.String Password for credential store
ELYTOOL00000 java.lang.String Password for KeyStore. Can also be provided by console prompt.
ELYTOOL00000 java.lang.String Name of an environment variable from which to resolve the KeyStore password.
ELYTOOL00000 java.lang.String Salt to apply for final masked password of the credential store
ELYTOOL00000 java.lang.String Iteration count for final masked password of the credential store
ELYTOOL00000 java.lang.String Password credential value
ELYTOOL00000 java.lang.String The alias of the existing password entry to encrypt
ELYTOOL00000 java.lang.String Type of entry in credential store
ELYTOOL00000 java.lang.String Comma separated list of JCA provider names. Providers will be supplied to the credential store instance.%nEach provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.
ELYTOOL00000 java.lang.String Provider name containing CredentialStoreSpi implementation.%nProvider must be installed through java.security file or through service loader from properly packaged jar file on classpath.
ELYTOOL00000 java.lang.String Create credential store (Action)
ELYTOOL00000 java.lang.String Credential store type
ELYTOOL00000 java.lang.String Add new alias to the credential store (Action)
ELYTOOL00000 java.lang.String Remove alias from the credential store (Action)
ELYTOOL00000 java.lang.String Check if alias exists within the credential store (Action)
ELYTOOL00000 java.lang.String Display all aliases (Action)
ELYTOOL00000 java.lang.String Display all types of stored credentials for given alias (Action)
ELYTOOL00000 java.lang.String Generate private and public key pair and store them as a KeyPairCredential
ELYTOOL00000 java.lang.String Size (number of bytes) of the keys when generating a KeyPairCredential.
ELYTOOL00000 java.lang.String Encryption algorithm to be used when generating a KeyPairCredential: RSA, DSA, or EC. Default RSA
ELYTOOL00000 java.lang.String Prints the public key stored under a KeyPairCredential as Base64 encoded String, in OpenSSH format.
ELYTOOL00000 java.lang.String Import a KeyPairCredential into the credential store.
ELYTOOL00000 java.lang.String The location of a file containing a private key.
ELYTOOL00000 java.lang.String The location of a file containing a public key.
ELYTOOL00000 java.lang.String The passphrase used to decrypt the private key.
ELYTOOL00000 java.lang.String A private key specified as a String.
ELYTOOL00000 java.lang.String A public key specified as a String.
ELYTOOL00000 java.lang.String Print summary, especially command how to create this credential store
ELYTOOL00000 java.lang.String Get help with usage of this command (Action)
ELYTOOL00000 java.lang.String Alias "%s" exists
ELYTOOL00000 java.lang.String Alias "%s" does not exist
ELYTOOL00000 java.lang.String Alias "%s" of type "%s" does not exist
ELYTOOL00000 java.lang.String Alias "%s" has been successfully stored
ELYTOOL00000 java.lang.String Alias "%s" of type "%s" has been successfully stored
ELYTOOL00000 java.lang.String Alias "%s" has been successfully removed
ELYTOOL00000 java.lang.String Alias "%s" of type "%s" has been successfully removed
ELYTOOL00000 java.lang.String Credential store command summary:%n--------------------------------------%n%s
ELYTOOL00000 java.lang.String Credential store contains following aliases: %s
ELYTOOL00000 java.lang.String Credential store contains no aliases
ELYTOOL00000 java.lang.Exception Action to perform on the credential store is not defined
ELYTOOL00000 java.lang.String Credential store password:
ELYTOOL00000 java.lang.String Confirm credential store password:
ELYTOOL00000 java.lang.String Passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key):
ELYTOOL00000 java.lang.String Confirm passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key):
ELYTOOL00000 java.lang.String Secret to store:
ELYTOOL00000 java.lang.String Confirm secret to store:
ELYTOOL00000 java.lang.String The retrieved PasswordCredential does not contain a ClearTextPassword
ELYTOOL00000 java.lang.String "mask" command is used to get MASK- string encrypted using PBEWithMD5AndDES in PicketBox compatible way.
ELYTOOL00000 java.lang.String Salt to apply to masked string
ELYTOOL00000 java.lang.String Iteration count for masked string
ELYTOOL00000 java.lang.String Secret to be encrypted
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Secret not specified.
ELYTOOL00000 java.lang.String "vault" command is used convert PicketBox Security Vault to credential store using default implementation (KeyStoreCredentialStore) or custom implementation set with the "type" option.
ELYTOOL00000 java.lang.String Vault keystore URL (defaults to "vault.keystore")
ELYTOOL00000 java.lang.String Vault keystore password:%n- used to open original vault key store%n- used as password for new converted credential store
ELYTOOL00000 java.lang.String Vault directory containing encrypted files (defaults to "vault")
ELYTOOL00000 java.lang.String 8 character salt (defaults to "12345678")
ELYTOOL00000 java.lang.String Iteration count (defaults to "23")
ELYTOOL00000 java.lang.String Vault key alias within key store (defaults to "vault")
ELYTOOL00000 java.lang.String Configuration parameters for credential store in form of: "parameter1=value1; ... ;parameterN=valueN"%nSupported parameters are dependent on credential store type%nGenerally supported parameters for default credential store implementation (all are optional):%ncreate - automatically creates credential store file (true/false)%nmodifiable - is the credential modifiable (true/false)%nlocation - file location of credential store%nkeyStoreType - specify the key store type to use
ELYTOOL00000 java.lang.String Vault Conversion summary:%n--------------------------------------%n%s%n--------------------------------------%n
ELYTOOL00000 java.lang.String Vault Conversion Successful%n
ELYTOOL00000 java.lang.String CLI command to add new credential store:%n
ELYTOOL00000 java.lang.String Bulk conversion with options listed in description file. All options have no default value and should be set in the file. (Action)%nAll options are required with the exceptions:%n - "properties" option%n - "type" option (defaults to "KeyStoreCredentialStore")%n - "credential-store-provider" option%n - "other-providers" option%n - "salt" and "iteration" options can be omitted when plain-text password is used%nEach set of options must start with the "keystore" option in the following format:%n keystore:%nkeystore-password:%nenc-dir:%nsalt:%niteration:%nlocation:%nalias:%nproperties:=; ... ;=%ntype:%ncredential-store-provider:%nother-providers:
ELYTOOL00000 java.lang.String Print summary of conversion
ELYTOOL00000 java.lang.String Converted credential store type (defaults to "KeyStoreCredentialStore")
ELYTOOL00000 java.lang.String Location of credential store storage file (defaults to "converted-vault.cr-store" in vault encryption directory)
ELYTOOL00000 java.lang.String Vault (enc-dir="%s";keystore="%s") converted to credential store "%s"
ELYTOOL00000 java.lang.String Credential Store has been successfully created
ELYTOOL00000 java.lang.String Vault password:
ELYTOOL00000 java.lang.String Mask secret:
ELYTOOL00000 java.lang.String Confirm mask secret:
ELYTOOL00000 java.lang.String Print stack trace when error occurs.
ELYTOOL00000 java.lang.String Exception encountered executing the command. Use option "--debug" for complete exception stack trace.
ELYTOOL00000 java.lang.String In the message below, option '%s' refers to long option '%s'.
ELYTOOL00000 java.lang.String 'FileSystemRealm' command is used to convert legacy properties files and scripts to an Elytron FileSystemRealm.
ELYTOOL00000 java.lang.String The relative or absolute path to the users file.
ELYTOOL00000 java.lang.String The relative or absolute path to the credential store file that contains the secret key.
ELYTOOL00000 java.lang.String The alias of the secret key stored in the credential store file. Set to key by default
ELYTOOL00000 java.lang.String Whether or not the credential store should be populated with a Secret Key. Set to true by default.
ELYTOOL00000 java.lang.String Whether or not the credential store should be dynamically created if it doesn't exist. Set to true by default.
ELYTOOL00000 java.lang.String The relative or absolute path to the KeyStore file that contains the key pair. Only %napplicable if the filesystem realm has integrity verification enabled.
ELYTOOL00000 java.lang.String The type of KeyStore to be used. Optional, only applicable if the filesystem %nrealm has integrity verification enabled.
ELYTOOL00000 java.lang.String The alias of the key pair to be used, within the KeyStore. Set to integrity-key by default, only %napplicable if the filesystem realm has integrity verification enabled.
ELYTOOL00000 java.lang.String Password for KeyStore. Can also be provided by console prompt. Only applicable if %nthe filesystem realm has integrity verification enabled.
ELYTOOL00000 java.lang.String Name of an environment variable from which to resolve the KeyStore password. Only %napplicable if the filesystem realm has integrity verification enabled.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Input Realm location not specified.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Input Realm location directory does not exist.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Output Realm location not specified.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Credential Store location not specified.
ELYTOOL00000 java.lang.String A required parameter is not specified.
ELYTOOL00000 java.lang.String The hash encoding to be used in the filesystem realm. Set to BASE64 by default.
ELYTOOL00000 java.lang.String If the original realm has encoded set to true. Set to true by default.
ELYTOOL00000 java.lang.String The levels to be used in the filesystem realm. Set to 2 by default.
ELYTOOL00000 java.lang.String The absolute or relative location of the original filesystem realm.
ELYTOOL00000 java.lang.String The directory where the new filesystem realm resides.
ELYTOOL00000 java.lang.String The name of the new filesystem-realm.
ELYTOOL00000 java.lang.String The relative or absolute path to the roles file.
ELYTOOL00000 java.lang.String The relative or absolute path to the output directory.
ELYTOOL00000 java.lang.String Name of the filesystem-realm to be configured.
ELYTOOL00000 java.lang.String Name of the security-domain to be configured.
ELYTOOL00000 java.lang.String Bulk conversion with options listed in description file. Optional options have default values, required options do not. (Action) %nThe options fileSystemRealmName and securityDomainName are optional. %nThese optional options have default values of: converted-properties-filesystem-realm and converted-properties-security-domain. %nValues are required for the following options: users-file, roles-file, and output-location. %nIf one or more these required values are not set, the corresponding block is skipped. %nEach option must be specified in the following format:
ELYTOOL00000 java.lang.String Bulk conversion with options listed in description file. Optional options have default values, required options do not. (Action) %nThe options realm-name, hash-encoding, levels, secret-key, create, populate, keystore, type, password, password-env, and key-pair are optional. %nValues are required for the following options: input-location, output-location, and credential-store. %nThe default values of realm-name, hash-encoding, hash-charset, levels, secret-key, create, and populate are encrypted-filesystem-realm, BASE64, UTF-8, 2, key, true, and true respectively. %nIf one or more these required values are not set, the corresponding block is skipped. %nIf keystore is provided, then either password or password-env are required. %nEach option must be specified in the following format:
ELYTOOL00000 java.lang.String Bulk conversion with options listed in description file. (Action)Optional options have defaults and can be skipped ([type, default_or_NULL]), required options do not (). %nOne of either password or password-env is required. %nBlocks of options must be separated by a blank line; order is not important. Syntax: %ninput-location:%noutput-location:[directory,NULL]%nrealm-name:[name,filesystem-realm-with-integrity]%nkeystore:%ntype:[name,NULL]%npassword:[password,NULL]%npassword-env:[name,NULL]%nkey-pair:[name,integrity-key]%ncredential-store:[file,NULL]%nsecret-key:[name,NULL]%nlevels:[number,2]%nhash-encoding:[name,BASE64]%nhash-charset:[name,UTF-8]%nencoded:[bool,true]
ELYTOOL00000 java.lang.String 'FileSystemRealmEncrypt' command is used to convert non-empty, un-encrypted FileSystemSecurityRealm(s) to encrypted FileSystemSecurityRealm(s) with a SecretKey.
ELYTOOL00000 java.lang.String Secret Key was not found in the Credential Store at %s, and populate option was not set. Skipping descriptor file block number %d.
ELYTOOL00000 java.lang.String The directory where the new filesystem realm resides. If not provided, realm will be upgraded in-place (with backup), %nand realm-name option will not be used in file path.
ELYTOOL00000 java.lang.String The name of the new filesystem-realm. Will be appended to output-location path (if output-location is provided). %nWhen not set, nothing is appended to the path, and `filesystem-realm-with-integrity` is used for the WildFly resource name.%n
ELYTOOL00000 java.lang.String The relative or absolute path to the KeyStore file that contains the key pair.
ELYTOOL00000 java.lang.String The type of KeyStore to be used. Optional.
ELYTOOL00000 java.lang.String The alias of the key pair to be used, within the KeyStore. Set to integrity-key by default.
ELYTOOL00000 java.lang.String The relative or absolute path to the secret-key-credential-store file. Only %napplicable if the filesystem realm is encrypted.
ELYTOOL00000 java.lang.String The alias of the secret key stored in the credential store file. Set to key by default, only %napplicable if the filesystem realm is encrypted.
ELYTOOL00000 java.lang.String The number of levels used in the input filesystem realm. Set to 2 by default.
ELYTOOL00000 java.lang.String The hash encoding used in the input filesystem realm. Set to BASE64 by default.%nRegardless of setting, the output realm will always be BASE64-encoded.
ELYTOOL00000 java.lang.String The character set used to convert the password string to a byte array. Defaults to UTF-8.
ELYTOOL00000 java.lang.String Indicates if the original realm used Base32-encoded identities as file names.%nSet to true by default. Regardless of setting, the output realm will always use Base32-encoding in file names.
ELYTOOL00000 org.apache.commons.cli.MissingOptionException Both --bulk-convert and at least one other realm configuration option was specified. %nThe bulk-convert option may only be used with --help, --debug, --silent, and --summary options.
ELYTOOL00000 java.lang.String 'FileSystem Realm Integrity' command is used to sign existing, non-empty FileSystem Security Realms with a key pair, for future integrity validation.
ELYTOOL00000 java.lang.String KeyStore password:
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException KeyStore path not specified.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException KeyStore does not exist.
ELYTOOL00000 java.lang.IllegalArgumentException Encoded option must be set to 'true' or 'false'.
ELYTOOL00000 java.lang.String Suppresses all output except errors and prompts.
ELYTOOL00000 java.lang.String Provides a detailed summary of all operations performed, once the command finishes.
ELYTOOL00000 org.apache.commons.cli.MissingOptionException No users file specified. Please use either --bulk-convert or specify a users file using --users-file
ELYTOOL00000 org.apache.commons.cli.MissingOptionException No roles file specified. Please use either --bulk-convert or specify a roles file using --roles-file
ELYTOOL00000 org.apache.commons.cli.MissingOptionException No output location specified. Please use either --bulk-convert or specify an output location using --output-location
ELYTOOL00000 org.apache.commons.cli.MissingOptionException Both --bulk-convert and one or more of --users-file, --roles-file, and/or --output-location were specified. Please only use --bulk-convert or all of --users-file, --roles-file, and --output-location.
ELYTOOL00000 org.apache.commons.cli.MissingOptionException Both --bulk-convert and one or more of --old-realm-name, --new-realm-name, --input-location, --output-location, --credential-store, --secret-key, --keystore, --type, --key-pair, --password and/or --password-env were specified. Please only use --bulk-convert or all of the other others.
ELYTOOL00000 java.lang.String No value found for %s.
ELYTOOL00000 java.io.FileNotFoundException Could not find the specified file %s.
ELYTOOL00000 java.lang.String Could not copy input filesystem realm at %s for in-place upgrade.%nOutput filesystem will be placed at %s
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to %s.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing input realm location.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing credential store location.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing output realm location.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing KeyStore path.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing KeyStore password.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to invalid KeyStore path.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to failure to load KeyStore.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to failure to load key pair.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing private key.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing public key.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing new filesystem realm name.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to no identities present in filesystem realm.%nKeys for this realm can be added via the management client.
ELYTOOL00000 java.lang.String Creating encrypted realm for: %s
ELYTOOL00000 java.lang.String Creating filesystem realm with integrity verification for: %s
ELYTOOL00000 java.lang.String In-place upgrade for descriptor block %d: filesystem realm backed up at %s%nRealm name will not be used in output realm path.
ELYTOOL00000 java.lang.String Should file %s be overwritten? (y/n)
ELYTOOL00000 java.lang.String Some of the parameters below are mutually exclusive actions which are marked with (Action) in the description.
ELYTOOL00000 java.lang.String Key size (bits).
ELYTOOL00000 java.lang.String Generate a new SecretKey and store it in the credential store.
ELYTOOL00000 java.lang.String Export existing SecretKey stored in the credential store.
ELYTOOL00000 java.lang.String Exported SecretKey for alias %s=%s
ELYTOOL00000 java.lang.String The encoded Key to import.
ELYTOOL00000 java.lang.String Import an existing encoded SecretKey to the credential store.
ELYTOOL00000 java.lang.String SecretKey to import:
ELYTOOL00000 java.lang.String Encrypt a clear text string using the SecretKey specified by .
ELYTOOL00000 java.lang.String The clear text to encrypt.
ELYTOOL00000 java.lang.String Clear text value:
ELYTOOL00000 java.lang.String Confirm clear text value:
ELYTOOL00000 java.lang.String Clear text encrypted to token '%s' using alias '%s'.
ELYTOOL00000 java.lang.IllegalArgumentException Location that has been specified '%s' does not exist and automatic storage creation for the Credential Store is disabled.
ELYTOOL00000 java.lang.String Credential store contains credentials of types:%s for alias '%s'
ELYTOOL00000 java.lang.String Invalid "%s" parameter. Default value "%s" will be used.
ELYTOOL00000 java.lang.String Invalid "%s" parameter. Generated value "%s" will be used.
ELYTOOL00000 java.lang.String Mask password operation is not allowed in FIPS mode.
ELYTOOL00000 java.lang.String Found credential store and alias, using pre-existing key
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to failure to load Credential Store.
ELYTOOL00000 java.lang.String Credential Store at %s does not support SecretKey. Skipping descriptor file block number %d.
ELYTOOL00000 java.lang.String Exception was thrown while populating Credential Store at %s. Skipping descriptor file block number %d.
ELYTOOL00000 org.apache.commons.cli.MissingOptionException No Credential Store location or Secret Key Alias specified.
ELYTOOL00006 org.apache.commons.cli.MissingArgumentException Salt not specified.
ELYTOOL00007 java.lang.IllegalArgumentException Invalid "%s" value. Must be an integer between %d and %d, inclusive
ELYTOOL00008 java.lang.RuntimeException Cannot locate admin key with alias "%s" or it is of improper type
ELYTOOL00009 java.lang.RuntimeException Cannot parse credential store implementation properties from supplied parameter
ELYTOOL00010 java.io.IOException Cannot parse conversion descriptor file "%s" missing colon at line %s
ELYTOOL00011 java.io.IOException Unrecognized descriptor attribute at line %s
ELYTOOL00012 java.lang.Exception Problem converting vault (enc-dir="%s";keystore="%s")
ELYTOOL00013 java.lang.Exception Invalid option "%s" when performing bulk conversion. Use bulk conversion descriptor file.
ELYTOOL00014 java.lang.IllegalArgumentException Unknown entry-type "%s"
ELYTOOL00015 java.lang.IllegalArgumentException Unknown provider "%s"
ELYTOOL00016 org.apache.commons.cli.MissingArgumentException Option "%s" is not specified.
ELYTOOL00017 java.lang.String Option "%s" specified more than once. Only the first occurrence will be used.
ELYTOOL00018 org.apache.commons.cli.MissingArgumentException Option "%s" does not expect any arguments.
ELYTOOL00019 java.lang.IllegalArgumentException Encryption directory "%s" does not contain "VAULT.dat" file.
ELYTOOL00020 org.apache.commons.cli.MissingArgumentException Alias was not defined.
ELYTOOL00021 org.apache.commons.cli.MissingArgumentException Location of the output file was not defined.
ELYTOOL00022 org.apache.commons.cli.MissingArgumentException Encryption directory was not defined.
ELYTOOL00023 org.apache.commons.cli.MissingArgumentException Vault password was not defined
ELYTOOL00024 java.io.IOException Cannot parse conversion descriptor file "%s". No keystore specified.
ELYTOOL00025 java.lang.IllegalArgumentException Credential store storage file "%s" does not exist.
ELYTOOL00026 java.lang.IllegalArgumentException Credential store storage file "%s" already exists.
ELYTOOL00027 java.lang.IllegalArgumentException Wrong masked password format. Expected format is "MASK-;;"
ELYTOOL00028 org.apache.commons.cli.MissingArgumentException Location parameter is not specified for filebased keystore type '%s'
ELYTOOL00029 java.security.NoSuchAlgorithmException Key Pair Algorithm: '%s' is not supported.
ELYTOOL00030 java.lang.IllegalArgumentException Key file '%s' does not exist.
ELYTOOL00031 org.apache.commons.cli.MissingArgumentException No private key specified for importing.
ELYTOOL00032 org.apache.commons.cli.MissingArgumentException No public key specified for importing.
ELYTOOL00033 org.apache.commons.cli.MissingArgumentException No PEM content found
ELYTOOL00034 java.security.InvalidParameterException Invalid keysize provided: %s
ELYTOOL00035 java.lang.IllegalArgumentException Only one of '%s' and '%s' can be specified at the same time

HHH

Code Level Return Type Message
HHH000002 WARN Already session bound on call to bind(); make sure you clean up your sessions
HHH000006 INFO Autocommit mode: %s
HHH000008 WARN JTASessionContext being used with JDBC transactions; auto-flush will not operate correctly with getCurrentSession()
HHH000010 INFO On release of batch it still contained JDBC statements
HHH000021 INFO Bytecode provider name : %s
HHH000022 WARN c3p0 properties were encountered, but the %s provider class was not found on the classpath; these properties are going to be ignored.
HHH000023 WARN I/O reported cached file could not be found : %s : %s
HHH000024 INFO Cache provider: %s
HHH000027 WARN Calling joinTransaction() on a non JTA EntityManager
HHH000031 DEBUG Closing
HHH000032 INFO Collections fetched (minimize this): %s
HHH000033 INFO Collections loaded: %s
HHH000034 INFO Collections recreated: %s
HHH000035 INFO Collections removed: %s
HHH000036 INFO Collections updated: %s
HHH000037 INFO Columns: %s
HHH000038 WARN Composite-id class does not override equals(): %s
HHH000039 WARN Composite-id class does not override hashCode(): %s
HHH000040 INFO Configuration resource: %s
HHH000041 INFO Configured SessionFactory: %s
HHH000042 INFO Configuring from file: %s
HHH000043 INFO Configuring from resource: %s
HHH000044 INFO Configuring from URL: %s
HHH000045 INFO Configuring from XML document
HHH000048 INFO Connections obtained: %s
HHH000050 ERROR Container is providing a null PersistenceUnitRootUrl: discovery impossible
HHH000051 WARN Ignoring bag join fetch [%s] due to prior collection join fetch
HHH000053 INFO Creating subcontext: %s
HHH000059 WARN Defining %s=true ignored in HEM
HHH000065 WARN DEPRECATED : use [%s] instead with custom [%s] implementation
HHH000067 INFO Disallowing insert statement comment for select-identity due to Oracle driver bug
HHH000069 WARN Duplicate generator name %s
HHH000070 WARN Duplicate generator table: %s
HHH000071 INFO Duplicate import: %s -> %s
HHH000072 WARN Duplicate joins for class: %s
HHH000073 INFO entity-listener duplication, first event definition will be used: %s
HHH000074 WARN Found more than one , subsequent ignored
HHH000076 INFO Entities deleted: %s
HHH000077 INFO Entities fetched (minimize this): %s
HHH000078 INFO Entities inserted: %s
HHH000079 INFO Entities loaded: %s
HHH000080 INFO Entities updated: %s
HHH000082 WARN Entity Manager closed by someone else (%s must not be used)
HHH000084 WARN Entity [%s] is abstract-class/interface explicitly mapped as non-abstract; be sure to supply entity-names
HHH000085 INFO %s %s found
HHH000086 INFO %s No %s found
HHH000087 ERROR Exception in interceptor afterTransactionCompletion()
HHH000088 ERROR Exception in interceptor beforeTransactionCompletion()
HHH000089 INFO Sub-resolver threw unexpected exception, continuing to next : %s
HHH000091 ERROR Expected type: %s, actual value: %s
HHH000092 WARN An item was expired by the cache while it was locked (increase your cache timeout): %s
HHH000094 INFO Bound factory to JNDI name: %s
HHH000096 INFO A factory was renamed from [%s] to [%s] in JNDI
HHH000097 INFO Unbound factory from JNDI name: %s
HHH000098 INFO A factory was unbound from name: %s
HHH000099 ERROR an assertion failure occurred (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): %s
HHH000102 INFO Fetching database metadata
HHH000105 INFO Flushes: %s
HHH000106 INFO Forcing container resource cleanup on transaction completion
HHH000107 INFO Forcing table use for sequence-style generator due to pooled optimizer selection where db does not support pooled sequences
HHH000108 INFO Foreign keys: %s
HHH000109 INFO Found mapping document in jar: %s
HHH000113 WARN GUID identifier generated: %s
HHH000114 INFO Handling transient entity in delete processing
HHH000116 WARN Config specified explicit optimizer of [%s], but [%s=%s]; using optimizer [%s] increment default of [%s].
HHH000117 DEBUG HQL: %s, time: %sms, rows: %s
HHH000118 WARN HSQLDB supports only READ_UNCOMMITTED isolation
HHH000119 WARN On EntityLoadContext#clear, hydratingEntities contained [%s] entries
HHH000120 WARN Ignoring unique constraints specified on table generator [%s]
HHH000122 ERROR IllegalArgumentException in class: %s, getter method of property: %s
HHH000123 ERROR IllegalArgumentException in class: %s, setter method of property: %s
HHH000124 WARN @Immutable used on a non root entity: ignored for %s
HHH000125 WARN Mapping metadata cache was not completely processed
HHH000126 INFO Indexes: %s
HHH000127 DEBUG Could not bind JNDI listener
HHH000130 INFO Instantiating explicit connection provider: %s
HHH000132 ERROR Array element type error %s
HHH000133 WARN Discriminator column has to be defined in the root entity, it will be ignored in subclass: %s
HHH000134 ERROR Application attempted to edit read only item: %s
HHH000135 ERROR Invalid JNDI name: %s
HHH000136 WARN Inapropriate use of @OnDelete on entity, annotation ignored: %s
HHH000137 WARN Root entity should not hold a PrimaryKeyJoinColum(s), will be ignored: %s
HHH000138 WARN Mixing inheritance strategy in a entity hierarchy is not allowed, ignoring sub strategy in: %s
HHH000139 WARN Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: %s
HHH000140 INFO JACC contextID: %s
HHH000141 INFO java.sql.Types mapped the same code [%s] multiple times; was [%s]; now [%s]
HHH000142 java.lang.String Bytecode enhancement failed: %s
HHH000143 java.lang.String Bytecode enhancement failed because no public, protected or package-private default constructor was found for entity: %s. Private constructors don't work with runtime proxies
HHH000144 WARN %s = false breaks the EJB3 specification
HHH000151 java.lang.String JDBC rollback failed
HHH000154 INFO JNDI InitialContext properties:%s
HHH000155 ERROR JNDI name %s does not handle a session factory reference
HHH000157 INFO Lazy property fetching available for: %s
HHH000159 WARN In CollectionLoadContext#endLoadingCollections, localLoadingCollectionKeys contained [%s], but no LoadingCollectionEntry was found in loadContexts
HHH000160 WARN On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [%s] entries
HHH000161 INFO Logging statistics....
HHH000162 DEBUG *** Logical connection closed ***
HHH000163 DEBUG Logical connection releasing its physical connection
HHH000173 INFO Max query time: %sms
HHH000174 WARN Function template anticipated %s arguments, but %s arguments encountered
HHH000177 ERROR Error in named query: %s
HHH000178 WARN Naming exception occurred accessing factory: %s
HHH000179 WARN Narrowing proxy to %s - this operation breaks ==
HHH000180 WARN FirstResult/maxResults specified on polymorphic query; applying in memory
HHH000181 WARN No appropriate connection provider encountered, assuming application will be supplying connections
HHH000182 INFO No default (no-argument) constructor for class: %s (class must be instantiated by Interceptor)
HHH000183 WARN no persistent classes found for query class: %s
HHH000184 ERROR No session factory with JNDI name %s
HHH000187 INFO Optimistic lock failures: %s
HHH000189 WARN @OrderBy not allowed for an indexed collection, annotation ignored.
HHH000193 WARN Overriding %s is dangerous, this might break the EJB3 specification implementation
HHH000194 DEBUG Package not found or wo package-info.java: %s
HHH000196 ERROR Error parsing XML (%s) : %s
HHH000197 ERROR Error parsing XML: %s(%s) %s
HHH000198 ERROR Warning parsing XML (%s) : %s
HHH000199 WARN Warning parsing XML: %s(%s) %s
HHH000200 WARN Persistence provider caller does not implement the EJB3 spec correctly.PersistenceUnitInfo.getNewTempClassLoader() is null.
HHH000201 INFO Pooled optimizer source reported [%s] as the initial value; use of 1 or greater highly recommended
HHH000202 ERROR PreparedStatement was already in the batch, [%s].
HHH000203 WARN processEqualityExpression() : No expression to process
HHH000204 INFO Processing PersistenceUnitInfo [name: %s]
HHH000205 INFO Loaded properties from resource hibernate.properties: %s
HHH000206 DEBUG hibernate.properties not found
HHH000207 WARN Property %s not found in class but described in (possible typo error)
HHH000209 WARN proxool properties were encountered, but the %s provider class was not found on the classpath; these properties are going to be ignored.
HHH000210 INFO Queries executed to database: %s
HHH000213 INFO Query cache hits: %s
HHH000214 INFO Query cache misses: %s
HHH000215 INFO Query cache puts: %s
HHH000218 INFO RDMSOS2200Dialect version: 1.0
HHH000219 INFO Reading mappings from cache file: %s
HHH000220 INFO Reading mappings from file: %s
HHH000221 INFO Reading mappings from resource: %s
HHH000222 WARN read-only cache configured for mutable collection [%s]
HHH000223 WARN Recognized obsolete hibernate namespace %s. Use namespace %s instead. Refer to Hibernate 3.6 Migration Guide
HHH000225 WARN Property [%s] has been renamed to [%s]; update your properties appropriately
HHH000226 INFO Required a different provider: %s
HHH000227 INFO Running hbm2ddl schema export
HHH000228 INFO Running hbm2ddl schema update
HHH000229 INFO Running schema validator
HHH000230 INFO Schema export complete
HHH000231 ERROR Schema export unsuccessful
HHH000232 INFO Schema update complete
HHH000233 WARN Scoping types to session factory %s after already scoped %s
HHH000235 INFO Searching for mapping documents in jar: %s
HHH000237 INFO Second level cache hits: %s
HHH000238 INFO Second level cache misses: %s
HHH000239 INFO Second level cache puts: %s
HHH000240 INFO Service properties: %s
HHH000241 INFO Sessions closed: %s
HHH000242 INFO Sessions opened: %s
HHH000244 WARN @Sort not allowed for an indexed collection, annotation ignored.
HHH000245 WARN Manipulation query [%s] resulted in [%s] split queries
HHH000247 WARN SQL Error: %s, SQLState: %s
HHH000248 INFO Starting query cache at region: %s
HHH000249 INFO Starting service at JNDI name: %s
HHH000250 INFO Starting update timestamps cache at region: %s
HHH000251 INFO Start time: %s
HHH000252 INFO Statements closed: %s
HHH000253 INFO Statements prepared: %s
HHH000255 INFO Stopping service
HHH000257 INFO sub-resolver threw unexpected exception, continuing to next : %s
HHH000258 INFO Successful transactions: %s
HHH000259 INFO Synchronization [%s] was already registered
HHH000260 ERROR Exception calling user Synchronization [%s] : %s
HHH000261 INFO Table found: %s
HHH000262 INFO Table not found: %s
HHH000263 INFO More than one table found: %s
HHH000266 INFO Transactions: %s
HHH000267 WARN Transaction started on non-root session
HHH000268 INFO Transaction strategy: %s
HHH000269 WARN Type [%s] defined no registration keys; ignoring
HHH000270 DEBUG Type registration key [%s] overrode previous key : %s
HHH000271 WARN Naming exception occurred accessing Ejb3Configuration
HHH000272 ERROR Error while accessing session factory with JNDI name %s
HHH000273 WARN Error accessing type info result set : %s
HHH000274 WARN Unable to apply constraints on DDL for %s
HHH000276 WARN Could not bind Ejb3Configuration to JNDI
HHH000277 WARN Could not bind factory to JNDI
HHH000278 INFO Could not bind value '%s' to parameter: %s; %s
HHH000279 ERROR Unable to build enhancement metamodel for %s
HHH000280 INFO Could not build SessionFactory using the MBean classpath - will try again using client classpath: %s
HHH000281 WARN Unable to clean up callable statement
HHH000282 WARN Unable to clean up prepared statement
HHH000283 WARN Unable to cleanup temporary id table after use [%s]
HHH000285 INFO Error closing InitialContext [%s]
HHH000286 ERROR Error closing input files: %s
HHH000287 WARN Could not close input stream
HHH000288 WARN Could not close input stream for %s
HHH000289 INFO Unable to close iterator
HHH000290 ERROR Could not close jar: %s
HHH000291 ERROR Error closing output file: %s
HHH000292 WARN IOException occurred closing output stream
HHH000294 ERROR Could not close session
HHH000295 ERROR Could not close session during rollback
HHH000296 WARN IOException occurred closing stream
HHH000297 ERROR Could not close stream on hibernate.properties: %s
HHH000298 java.lang.String JTA commit failed
HHH000299 ERROR Could not complete schema update
HHH000300 ERROR Could not complete schema validation
HHH000301 WARN Unable to configure SQLExceptionConverter : %s
HHH000302 ERROR Unable to construct current session context [%s]
HHH000303 WARN Unable to construct instance of specified SQLExceptionConverter : %s
HHH000304 WARN Could not copy system properties, system properties will be ignored
HHH000305 WARN Could not create proxy factory for:%s
HHH000306 ERROR Error creating schema
HHH000307 WARN Could not deserialize cache file: %s : %s
HHH000308 WARN Unable to destroy cache: %s
HHH000309 WARN Unable to destroy query cache: %s: %s
HHH000310 WARN Unable to destroy update timestamps cache: %s: %s
HHH000312 java.lang.String Could not determine transaction status
HHH000313 java.lang.String Could not determine transaction status after commit
HHH000314 WARN Unable to evictData temporary id table after use [%s]
HHH000315 ERROR Exception executing batch [%s], SQL: %s
HHH000316 WARN Error executing resolver [%s] : %s
HHH000318 INFO Could not find any META-INF/persistence.xml file in the classpath
HHH000319 ERROR Could not get database metadata
HHH000320 WARN Unable to instantiate configured schema name resolver [%s] %s
HHH000321 WARN Unable to interpret specified optimizer [%s], falling back to noop
HHH000322 WARN Unable to instantiate specified optimizer [%s], falling back to noop
HHH000325 WARN Unable to instantiate UUID generation strategy class : %s
HHH000326 WARN Cannot join transaction: do not override %s
HHH000327 INFO Error performing load command
HHH000328 WARN Unable to load/access derby driver class sysinfo to check versions : %s
HHH000329 ERROR Problem loading properties from hibernate.properties
HHH000330 java.lang.String Unable to locate config file: %s
HHH000331 WARN Unable to locate configured schema name resolver class [%s] %s
HHH000332 WARN Unable to locate MBeanServer on JMX service shutdown
HHH000334 WARN Unable to locate requested UUID generation strategy class : %s
HHH000335 WARN Unable to log SQLWarnings : %s
HHH000336 WARN Could not log warnings
HHH000337 ERROR Unable to mark for rollback on PersistenceException:
HHH000338 ERROR Unable to mark for rollback on TransientObjectException:
HHH000339 WARN Could not obtain connection metadata: %s
HHH000342 WARN Could not obtain connection to query metadata
HHH000343 ERROR Could not obtain initial context
HHH000344 ERROR Could not parse the package-level metadata [%s]
HHH000345 java.lang.String JDBC commit failed
HHH000346 ERROR Error during managed flush [%s]
HHH000347 java.lang.String Unable to query java.sql.DatabaseMetaData
HHH000348 ERROR Unable to read class: %s
HHH000349 INFO Could not read column value from result set: %s; %s
HHH000350 java.lang.String Could not read a hi value - you need to populate the table: %s
HHH000351 ERROR Could not read or init a hi value
HHH000352 ERROR Unable to release batch statement...
HHH000353 ERROR Could not release a cache lock : %s
HHH000354 INFO Unable to release initial context: %s
HHH000355 WARN Unable to release created MBeanServer : %s
HHH000356 INFO Unable to release isolated connection [%s]
HHH000357 WARN Unable to release type info result set
HHH000358 WARN Unable to erase previously added bag join fetch
HHH000359 INFO Could not resolve aggregate function [%s]; using standard definition
HHH000360 INFO Unable to resolve mapping file [%s]
HHH000361 INFO Unable to retrieve cache from JNDI [%s]: %s
HHH000362 WARN Unable to retrieve type info result set : %s
HHH000363 INFO Unable to rollback connection on exception [%s]
HHH000364 INFO Unable to rollback isolated transaction on error [%s] : [%s]
HHH000365 java.lang.String JTA rollback failed
HHH000366 ERROR Error running schema update
HHH000367 ERROR Could not set transaction to rollback only
HHH000368 WARN Exception while stopping service
HHH000369 INFO Error stopping service [%s]
HHH000370 WARN Exception switching from method: [%s] to a method using the column index. Reverting to using: [%
HHH000371 ERROR Could not synchronize database state with session: %s
HHH000372 ERROR Could not toggle autocommit
HHH000373 ERROR Unable to transform class: %s
HHH000374 WARN Could not unbind factory from JNDI
HHH000375 java.lang.String Could not update hi value in: %s
HHH000376 ERROR Could not updateQuery hi value in: %s
HHH000377 INFO Error wrapping result set
HHH000378 WARN I/O reported error writing cached file : %s: %s
HHH000380 WARN Unexpected literal token type [%s] passed for numeric processing
HHH000381 WARN JDBC driver did not return the expected number of row counts
HHH000382 WARN Unrecognized bytecode provider [%s]; using the default implementation [%s]
HHH000383 WARN Unknown Ingres major version [%s]; using Ingres 9.2 dialect
HHH000384 WARN Unknown Oracle major version [%s]
HHH000385 WARN Unknown Microsoft SQL Server major version [%s] using [%s] dialect
HHH000386 WARN ResultSet had no statement associated with it, but was not yet registered
HHH000387 DEBUG ResultSet's statement was not registered
HHH000388 ERROR Unsuccessful: %s
HHH000390 WARN Overriding release mode as connection provider does not support 'after_statement'
HHH000391 WARN Ingres 10 is not yet fully supported; using Ingres 9.3 dialect
HHH000392 WARN Hibernate does not support SequenceGenerator.initialValue() unless '%s' set
HHH000393 WARN The %s.%s.%s version of H2 implements temporary table creation such that it commits current transaction; multi-table, bulk hql/jpaql will not work properly
HHH000394 WARN Oracle 11g is not yet fully supported; using Oracle 10g dialect
HHH000396 INFO Updating schema
HHH000398 INFO Explicit segment value for id generator [%s.%s] suggested; using default [%s]
HHH000399 INFO Using default transaction strategy (direct JDBC transactions)
HHH000400 DEBUG Using dialect: %s
HHH000404 ERROR Don't use old DTDs, read the Hibernate 3.x Migration Guide
HHH000406 INFO Using bytecode reflection optimizer
HHH000409 WARN Using %s which does not generate IETF RFC 4122 compliant UUID values; consider using %s instead
HHH000410 INFO Hibernate Validator not found: ignoring
HHH000412 INFO Hibernate ORM core version %s
HHH000413 WARN Warnings creating temp table : %s
HHH000414 INFO Property hibernate.search.autoregister_listeners is set to false. No attempt will be made to register Hibernate Search event listeners.
HHH000416 WARN Write locks via update not supported for non-versioned entities [%s]
HHH000417 INFO Writing generated schema to file: %s
HHH000418 INFO Adding override for %s: %s
HHH000419 WARN Resolved SqlTypeDescriptor is for a different SQL code. %s has sqlCode=%s; type override %s has sqlCode=%s
HHH000420 DEBUG Closing un-released batch
HHH000421 DEBUG Disabling contextual LOB creation as %s is true
HHH000422 DEBUG Disabling contextual LOB creation as connection was null
HHH000423 DEBUG Disabling contextual LOB creation as JDBC driver reported JDBC version [%s] less than 4
HHH000424 DEBUG Disabling contextual LOB creation as createClob() method threw error : %s
HHH000425 INFO Could not close session; swallowing exception[%s] as transaction completed
HHH000426 WARN You should set hibernate.transaction.jta.platform if cache is enabled
HHH000428 INFO Encountered legacy TransactionManagerLookup specified; convert to newer %s contract specified via %s setting
HHH000429 WARN Setting entity-identifier value binding where one already existed : %s.
HHH000432 WARN There were not column names specified for index %s on table %s
HHH000433 INFO update timestamps cache puts: %s
HHH000434 INFO update timestamps cache hits: %s
HHH000435 INFO update timestamps cache misses: %s
HHH000436 WARN Entity manager factory name (%s) is already registered. If entity manager will be clustered or passivated, specify a unique value for property '%s'
HHH000437 WARN Attempting to save one or more entities that have a non-nullable association with an unsaved transient entity. The unsaved transient entity must be saved in an operation prior to saving these dependent entities. Unsaved transient entity: (%s) Dependent entities: (%s) Non-nullable association(s): (%s)
HHH000438 INFO NaturalId cache puts: %s
HHH000439 INFO NaturalId cache hits: %s
HHH000440 INFO NaturalId cache misses: %s
HHH000441 INFO Max NaturalId query time: %sms
HHH000442 INFO NaturalId queries executed to database: %s
HHH000443 WARN Dialect [%s] limits the number of elements in an IN predicate to %s entries. However, the given parameter list [%s] contained %s entries, which will likely cause failures to execute the query in the database
HHH000444 WARN Encountered request for locking however dialect reports that database prefers locking be done in a separate select (follow-on locking); results will be locked after initial query executes
HHH000445 WARN Alias-specific lock modes requested, which is not currently supported with follow-on locking; all acquired locks will be [%s]
HHH000446 WARN embed-xml attributes were intended to be used for DOM4J entity mode. Since that entity mode has been removed, embed-xml attributes are no longer supported and should be removed from mappings.
HHH000447 WARN Explicit use of UPGRADE_SKIPLOCKED in lock() calls is not recommended; use normal UPGRADE locking instead
HHH000448 INFO 'jakarta.persistence.validation.mode' named multiple values : %s
HHH000449 WARN @Convert annotation applied to Map attribute [%s] did not explicitly specify attributeName using 'key'/'value' as required by spec; attempting to DoTheRightThing
HHH000450 WARN Encountered request for Service by non-primary service role [%s -> %s]; please update usage
HHH000451 WARN Transaction afterCompletion called by a background thread; delaying afterCompletion processing until the original thread can handle it. [status=%s]
HHH000452 WARN Exception while loading a class or resource found during scanning
HHH000453 WARN Exception while discovering OSGi service implementations : %s
HHH000456 WARN Named parameters are used for a callable statement, but database metadata indicates named parameters are not supported.
HHH000457 WARN Joined inheritance hierarchy [%1$s] defined explicit @DiscriminatorColumn. Legacy Hibernate behavior was to ignore the @DiscriminatorColumn. However, as part of issue HHH-6911 we now apply the explicit @DiscriminatorColumn. If you would prefer the legacy behavior, enable the `%2$s` setting (%2$s=true)
HHH000467 DEBUG Creating pooled optimizer (lo) with [incrementSize=%s; returnClass=%s]
HHH000468 WARN Unable to interpret type [%s] as an AttributeConverter due to an exception : %s
HHH000469 org.hibernate.HibernateException The ClassLoaderService can not be reused. This instance was stopped already.
HHH000470 WARN An unexpected session is defined for a collection, but the collection is not connected to that session. A persistent collection may only be associated with one session at a time. Overwriting session. %s
HHH000471 WARN Cannot unset session in a collection because an unexpected session is defined. A persistent collection may only be associated with one session at a time. %s
HHH000472 WARN Hikari properties were encountered, but the Hikari ConnectionProvider was not found on the classpath; these properties are going to be ignored.
HHH000473 INFO Omitting cached file [%s] as the mapping file is newer
HHH000474 java.lang.String Ambiguous persistent property methods detected on %s; mark one as @Transient : [%s] and [%s]
HHH000475 INFO Cannot locate column information using identifier [%s]; ignoring index [%s]
HHH000476 DEBUG Executing script '%s'
HHH000477 DEBUG Starting delayed evictData of schema as part of SessionFactory shut-down'
HHH000478 ERROR Unsuccessful: %s
HHH000479 java.lang.String Collection [%s] was not processed by flush(). This is likely due to unsafe use of the session (e.g. used in multiple threads concurrently, updates during entity lifecycle hooks).
HHH000480 WARN A ManagedEntity was associated with a stale PersistenceContext. A ManagedEntity may only be associated with one PersistenceContext at a time; %s
HHH000481 WARN Encountered Java type [%s] for which we could not locate a JavaType and which does not appear to implement equals and/or hashCode. This can lead to significant performance problems when performing equality/dirty checking involving this Java type. Consider registering a custom JavaType or at least implementing equals/hashCode.
HHH000482 WARN @org.hibernate.annotations.Cache used on a non-root entity: ignored for [%s]. Please see the Hibernate documentation for proper usage.
HHH000483 WARN An experimental - and now also deprecated - feature has been enabled (hibernate.create_empty_composites.enabled=true) that instantiates empty composite/embedded objects when all of its attribute values are null. This feature has known issues and should not be used in production. See Hibernate Jira issue HHH-11936 for details.
HHH000484 WARN Vibur properties were encountered, but the Vibur ConnectionProvider was not found on the classpath; these properties are going to be ignored.
HHH000485 ERROR Illegally attempted to associate a proxy for entity [%s] with id [%s] with two open sessions.
HHH000486 WARN Agroal properties were encountered, but the Agroal ConnectionProvider was not found on the classpath; these properties are going to be ignored.
HHH000487 WARN The query: [%s] attempts to update an immutable entity: %s
HHH000488 java.lang.String Bytecode enhancement failed for class: %1$s. It might be due to the Java module system preventing Hibernate ORM from defining an enhanced class in the same package as class %1$s. In this case, the class should be opened and exported to Hibernate ORM.
HHH000490 INFO Using JtaPlatform implementation: [%s]
HHH000491 WARN '%1$s.%2$s' uses both @NotFound and FetchType.LAZY. @ManyToOne and @OneToOne associations mapped with @NotFound are forced to EAGER fetching.
HHH000492 INFO Query plan cache hits: %s
HHH000493 INFO Query plan cache misses: %s
HHH000494 WARN Attempt to merge an uninitialized collection with queued operations; queued operations will be ignored: %s
HHH000495 WARN Attaching an uninitialized collection with queued operations to a session: %s
HHH000496 INFO Detaching an uninitialized collection with queued operations from a session: %s
HHH000497 WARN The increment size of the [%s] sequence is set to [%d] in the entity mapping while the associated database sequence increment size is [%d]. The database sequence increment size will take precedence to avoid identifier allocation conflicts.
HHH000498 DEBUG Detaching an uninitialized collection with queued operations from a session due to rollback: %s
HHH000499 WARN Using @AttributeOverride or @AttributeOverrides in conjunction with entity inheritance is not supported: %s. The overriding definitions are ignored.
HHH000502 WARN The [%s] property of the [%s] entity was modified, but it won't be updated because the property is immutable.
HHH000503 WARN A class should not be annotated with both @Inheritance and @MappedSuperclass. @Inheritance will be ignored for: %s.
HHH000504 WARN Multiple configuration properties defined to create schema. Choose at most one among 'jakarta.persistence.create-database-schemas' or 'hibernate.hbm2ddl.create_namespaces'.
HHH000505 WARN Ignoring ServiceConfigurationError caught while trying to instantiate service '%s'.
HHH000506 WARN Detaching an uninitialized collection with enabled filters from a session: %s
HHH000508 org.hibernate.HibernateException The Javassist based BytecodeProvider has been removed: remove the `hibernate.bytecode.provider` configuration property to switch to the default provider
HHH000509 WARN Multi-table insert is not available due to missing identity and window function support for: %s
HHH000510 WARN Association with `fetch="join"`/`@Fetch(FetchMode.JOIN)` and `lazy="true"`/`FetchType.LAZY` found. This will be interpreted as lazy: %s
HHH000511 WARN The %2$s version for [%s] is no longer supported, hence certain features may not work properly. The minimum supported version is %3$s. Check the community dialects project for available legacy versions.
HHH000512 WARN The database version version for the Cockroach Dialect could not be determined. The minimum supported version (%s) has been set instead.
HHH000513 DEBUG Unable to create the ReflectionOptimizer for [%s]
HHH000514 WARN PostgreSQL JDBC driver classes are inaccessible and thus, certain DDL types like JSONB, JSON, GEOMETRY can not be used.
HHH000515 org.hibernate.HibernateException Can't retrieve the generated identity value, because the dialect does not support selecting the last generated identity and 'hibernate.jdbc.use_get_generated_keys' was disabled
HHH015001 INFO Bound Ejb3Configuration to JNDI name: %s
HHH015002 INFO Ejb3Configuration name: %s
HHH015003 INFO An Ejb3Configuration was renamed from name: %s
HHH015004 INFO An Ejb3Configuration was unbound from name: %s
HHH015005 WARN Exploded jar file does not exist (ignored): %s
HHH015006 WARN Exploded jar file not a directory (ignored): %s
HHH015007 ERROR Illegal argument on static metamodel field injection : %s#%s; expected type : %s; encountered type : %s
HHH015008 ERROR Malformed URL: %s
HHH015009 WARN Malformed URL: %s
HHH015010 WARN Unable to find file (ignored): %s
HHH015011 WARN Unable to locate static metamodel field : %s#%s; this may or may not indicate a problem with the static metamodel
HHH015012 INFO Using provided datasource
HHH015013 DEBUG Returning null (as required by JPA spec) rather than throwing EntityNotFoundException, as the entity (type=%s, id=%s) does not exist
HHH015014 WARN DEPRECATION - attempt to refer to JPA positional parameter [?%1$s] using String name ["%1$s"] rather than int position [%1$s] (generally in Query#setParameter, Query#getParameter or Query#getParameterValue calls). Hibernate previously allowed such usage, but it is considered deprecated.
HHH015015 INFO Encountered a MappedSuperclass [%s] not used in any entity hierarchy
HHH015016 WARN Encountered a deprecated jakarta.persistence.spi.PersistenceProvider [%s]; [%s] will be used instead.
HHH015017 WARN 'hibernate.ejb.use_class_enhancer' property is deprecated. Use 'hibernate.enhance.enable[...]' properties instead to enable each individual feature.
HHH015018 WARN Encountered multiple persistence-unit stanzas defining same name [%s]; persistence-unit names must be unique
HHH025001 org.hibernate.cache.CacheException Pending-puts cache must not be clustered!
HHH025002 org.hibernate.cache.CacheException Pending-puts cache must not be transactional!
HHH025003 WARN Pending-puts cache configuration should be a template.
HHH025004 org.hibernate.cache.CacheException Pending-puts cache must have expiration.max-idle set
HHH025005 WARN Property 'hibernate.cache.infinispan.use_synchronization' is deprecated; 2LC with transactional cache must always use synchronizations.
HHH025006 ERROR Custom cache configuration '%s' was requested for type %s but it was not found!
HHH025007 ERROR Custom cache configuration '%s' was requested for region %s but it was not found - using configuration by type (%s).
HHH025008 org.hibernate.cache.CacheException Timestamps cache must not use eviction!
HHH025009 org.hibernate.cache.CacheException Unable to start region factory
HHH025010 org.hibernate.cache.CacheException Unable to create default cache manager
HHH025011 org.hibernate.cache.CacheException Infinispan custom cache command factory not installed (possibly because the classloader where Infinispan lives couldn't find the Hibernate Infinispan cache provider)
HHH025012 WARN Requesting TRANSACTIONAL cache concurrency strategy but the cache is not configured as transactional.
HHH025013 WARN Requesting READ_WRITE cache concurrency strategy but the cache was configured as transactional.
HHH025014 WARN Setting eviction on cache using tombstones can introduce inconsistencies!
HHH025015 ERROR Failure updating cache in afterCompletion, will retry
HHH025016 ERROR Failed to end invalidating pending putFromLoad calls for key %s from region %s; the key won't be cached until invalidation expires.
HHH025017 org.hibernate.cache.CacheException Unable to retrieve CacheManager from JNDI [%s]
HHH025018 WARN Unable to release initial context
HHH025019 WARN Use non-transactional query caches for best performance!
HHH025020 ERROR Unable to broadcast invalidations as a part of the prepare phase. Rolling back.
HHH025021 org.hibernate.cache.CacheException Could not suspend transaction
HHH025022 org.hibernate.cache.CacheException Could not resume transaction
HHH025023 org.hibernate.cache.CacheException Unable to get current transaction
HHH025024 org.hibernate.cache.CacheException Failed to invalidate pending putFromLoad calls for key %s from region %s
HHH025025 ERROR Failed to invalidate pending putFromLoad calls for region %s
HHH025026 org.hibernate.cache.CacheException Property 'hibernate.cache.infinispan.cachemanager' not set
HHH025027 org.hibernate.cache.CacheException Timestamp cache cannot be configured with invalidation
HHH025028 WARN Ignoring deprecated property '%s'
HHH025029 WARN Property '%s' is deprecated, please use '%s' instead
HHH025030 WARN Transactional caches are not supported. The configuration option will be ignored; please unset.
HHH025031 WARN Configuration for pending-puts cache '%s' is already defined - another instance of SessionFactory was not closed properly.
HHH025032 WARN Cache configuration '%s' is present but the use has not been defined through hibernate.cache.infinispan.%s.cfg=%s
HHH025033 WARN Configuration properties contain record for unqualified region name '%s' but it should contain qualified region name '%s'
HHH025034 WARN Configuration for unqualified region name '%s' is defined but the cache will use qualified name '%s'
HHH025035 ERROR Operation #%d scheduled to complete before transaction completion failed
HHH025036 ERROR Operation #%d scheduled after transaction completion failed (transaction successful? %s)
HHH035001 DEBUG Using dialect: %s
HHH100001 WARN JDBC driver did not return the expected number of row counts (%s) - expected %s, but received %s
HHH100501 ERROR Exception executing batch [%s], SQL: %s
HHH100502 ERROR Unable to release batch statement...
HHH100503 INFO On release of batch it still contained JDBC statements
HHH10000001 WARN Malformed URL: %s
HHH10000002 WARN File or directory named by URL [%s] could not be found. URL will be ignored
HHH10000003 WARN File or directory named by URL [%s] did not exist. URL will be ignored
HHH10000004 WARN Expecting resource named by URL [%s] to be a directory, but it was not. URL will be ignored
HHH10000005 java.lang.String File [%s] referenced by given URL [%s] does not exist
HHH10001001 INFO Connection properties: %s
HHH10001002 WARN Using built-in connection pool (not intended for production use)
HHH10001003 INFO Autocommit mode: %s
HHH10001004 java.lang.String No JDBC URL specified by property %s
HHH10001005 INFO Loaded JDBC driver class: %s
HHH10001006 WARN No JDBC Driver class was specified by property %s
HHH10001007 INFO JDBC isolation level: %s
HHH10001008 INFO Cleaning up connection pool [%s]
HHH10001009 WARN Problem closing pooled connection
HHH10001010 INFO No JDBC driver class specified by %s
HHH10001011 INFO Loaded JDBC drivers: %s
HHH10001012 INFO Connecting with JDBC URL [%s]
HHH10001115 INFO Connection pool size: %s (min=%s)
HHH10001284 ERROR Error closing connection
HHH10001501 INFO Connection obtained from JdbcConnectionAccess [%s] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
HHH10005001 WARN An explicit CDI BeanManager reference [%s] was passed to Hibernate, but CDI is not available on the Hibernate ClassLoader. This is likely going to lead to exceptions later on in bootstrap
HHH10005002 INFO No explicit CDI BeanManager reference was passed to Hibernate, but CDI is available on the Hibernate ClassLoader.
HHH10005003 INFO Stopping ManagedBeanRegistry : %s
HHH10005004 INFO Stopping BeanContainer : %s
HHH10010001 DEBUG Disabling contextual LOB creation as %s is true
HHH10010002 DEBUG Disabling contextual LOB creation as connection was null
HHH10010003 DEBUG Disabling contextual LOB creation as JDBC driver reported JDBC version [%s] less than 4
HHH10010004 DEBUG Disabling contextual LOB creation as Dialect reported it is not supported
HHH10010005 DEBUG Disabling contextual LOB creation as createClob() method threw error : %s
HHH10010006 DEBUG Disabling contextual NCLOB creation as createNClob() method threw error : %s
HHH90000004 WARN embed-xml attributes were intended to be used for DOM4J entity mode. Since that entity mode has been removed, embed-xml attributes are no longer supported and should be removed from mappings.
HHH90000005 WARN Defining an entity [%s] with no physical id attribute is no longer supported; please map the identifier to a physical entity attribute
HHH90000007 WARN Attempted to specify unsupported NamingStrategy via command-line argument [--naming]. NamingStrategy has been removed in favor of the split ImplicitNamingStrategy and PhysicalNamingStrategy; use [--implicit-naming] or [--physical-naming], respectively, instead.
HHH90000008 WARN Attempted to specify unsupported NamingStrategy via Ant task argument. NamingStrategy has been removed in favor of the split ImplicitNamingStrategy and PhysicalNamingStrategy.
HHH90000009 WARN The outer-join attribute on has been deprecated. Instead of outer-join="false", use lazy="extra" with , , , , or , which will only initialize entities (not as a proxy) as needed.
HHH90000010 WARN The fetch attribute on has been deprecated. Instead of fetch="select", use lazy="extra" with , , , , or , which will only initialize entities (not as a proxy) as needed.
HHH90000012 WARN Recognized obsolete hibernate namespace %s. Use namespace %s instead. Support for obsolete DTD/XSD namespaces may be removed at any time.
HHH90000013 WARN Named ConnectionProvider [%s] has been deprecated in favor of %s; that provider will be used instead. Update your settings
HHH90000014 WARN Found use of deprecated [%s] sequence-based id generator; use org.hibernate.id.enhanced.SequenceStyleGenerator instead. See Hibernate Domain Model Mapping Guide for details.
HHH90000015 WARN Found use of deprecated [%s] table-based id generator; use org.hibernate.id.enhanced.TableGenerator instead. See Hibernate Domain Model Mapping Guide for details.
HHH90000018 WARN Found use of deprecated transaction factory setting [%s]; use the new TransactionCoordinatorBuilder settings [%s] instead
HHH90000021 WARN Encountered deprecated setting [%s], use [%s] instead
HHH90000026 WARN %s has been deprecated
HHH90000026 WARN %s has been deprecated; use %s instead
HHH90000027 WARN Encountered deprecated setting [%s]; instead %s
HHH90000028 WARN Support for `` is deprecated [%s : %s]; migrate to orm.xml or mapping.xml, or enable `hibernate.transform_hbm_xml.enabled` for on the fly transformation
HHH90000029 WARN The [%s] configuration is deprecated and will be removed. Set the value to [%s] to get rid of this warning
HHH90000030 WARN The [%s] configuration is deprecated and will be removed.
HHH90001001 WARN Attempt to restart an already started RegionFactory. Use sessionFactory.close() between repeated calls to buildSessionFactory. Using previously created RegionFactory.
HHH90001002 WARN Attempt to restop an already stopped JCacheRegionFactory.
HHH90001003 WARN Read-only caching was requested for mutable entity [%s]
HHH90001004 WARN Read-only caching was requested for mutable natural-id for entity [%s]
HHH90001005 INFO Cache[%s] Key[%s] A soft-locked cache entry was expired by the underlying cache. If this happens regularly you should consider increasing the cache timeouts and/or capacity limits
HHH90001006 WARN Missing cache[%1$s] was created on-the-fly. The created cache will use a provider-specific default configuration: make sure you defined one. You can disable this warning by setting '%2$s' to '%3$s'.
HHH90001007 WARN Using legacy cache name [%2$s] because configuration could not be found for cache [%1$s]. Update your configuration to rename cache [%2$s] to [%1$s].
HHH90001008 WARN Cache [%1$s] uses the [%2$s] access type, but [%3$s] does not support it natively. Make sure your cache implementation supports JTA transactions.
HHH90003001 ERROR Error in named query: %s
HHH90003002 INFO Unable to determine lock mode value : %s -> %s
HHH90003003 INFO Ignoring unrecognized query hint [%s]
HHH90003004 WARN firstResult/maxResults specified with collection fetch; applying in memory
HHH90003501 ERROR Error in named query: %s
HHH90005601 INFO Envers-generated HBM mapping...%n%s
HHH90005901 WARN `%s#%s` was mapped with explicit lazy-group (`%s`). Hibernate will ignore the lazy-group - this is generally not a good idea for to-one associations as it would lead to 2 separate SQL selects to initialize the association. This is expected to be improved in future versions of Hibernate
HHH90006001 WARN Encountered incubating setting [%s]. See javadoc on corresponding `org.hibernate.cfg.AvailableSettings` constant for details.

HSEARCH

Code Level Return Type Message
HSEARCH-00001 java.lang.String MassIndexer operation
HSEARCH-00001 java.lang.String Indexing instance of entity '%s' during mass indexing
HSEARCH-00001 java.lang.String Fetching identifiers of entities to index for entity '%s' during mass indexing
HSEARCH-00001 java.lang.String Loading and extracting entity data for entity '%s' during mass indexing
HSEARCH-00001 org.hibernate.search.mapper.pojo.common.annotation.impl.SearchProcessingWithContextException %1$s
HSEARCH-00001 java.lang.String Background indexing of entities
HSEARCH-00001 java.lang.String Index Merge operation on index '%1$s'
HSEARCH-00001 java.lang.String This multi-valued field has a 'FLATTENED' structure, which means the structure of objects is not preserved upon indexing, making object projections impossible. Try setting the field structure to 'NESTED' and reindexing all your data.
HSEARCH-00001 java.lang.String The default backend can be retrieved
HSEARCH-00001 java.lang.String The default backend cannot be retrieved, because no entity is mapped to that backend
HSEARCH-00001 java.lang.String Failed to resolve bean from Hibernate Search's internal registry with exception: %1$s
HSEARCH-00001 java.lang.String Failed to resolve bean from bean manager with exception: %1$s
HSEARCH-00001 java.lang.String Failed to resolve bean using reflection with exception: %1$s
HSEARCH-00001 java.lang.String Make sure the field is marked as searchable/sortable/projectable/aggregable/highlightable (whichever is relevant). If it already is, then '%1$s' is not available for fields of this type.
HSEARCH-00001 java.lang.String Some object field features require a nested structure; try setting the field structure to 'NESTED' and reindexing all your data. If you are trying to use another feature, it probably isn't available for this field.
HSEARCH-00001 java.lang.String Make sure the field is marked as searchable/sortable/projectable/aggregable/highlightable (whichever is relevant) in all indexes, and that the field has the same type in all indexes.
HSEARCH-00001 java.lang.String If you are trying to use the 'nested' predicate, set the field structure is to 'NESTED' in all indexes, then reindex all your data.
HSEARCH000017 ERROR Work discarded, thread was interrupted while waiting for space to schedule: %1$s
HSEARCH000027 INFO Mass indexing is going to index %d entities.
HSEARCH000028 INFO Mass indexing complete. Indexed %1$d entities.
HSEARCH000030 INFO Mass indexing progress: indexed %1$d entities in %2$d ms.
HSEARCH000031 INFO Mass indexing progress: %3$.2f%%. Mass indexing speed: %1$f documents/second since last message, %2$f documents/second since start.
HSEARCH000034 INFO Hibernate Search version %1$s
HSEARCH000036 WARN Unable to guess the transaction status: not starting a JTA transaction.
HSEARCH000039 WARN Unable to properly close scroll in ScrollableResults.
HSEARCH000041 INFO Index directory does not exist, creating: '%1$s'
HSEARCH000052 WARN An index writer operation failed. Resetting the index writer and forcing release of locks. %1$s
HSEARCH000055 WARN Unable to close the index reader. %1$s
HSEARCH000058 ERROR %1$s
HSEARCH000062 ERROR Mass indexing received interrupt signal: aborting.
HSEARCH000075 WARN Missing value for configuration property '%1$s': using LATEST (currently '%2$s'). %3$s
HSEARCH000114 org.hibernate.search.util.common.SearchException Resource does not exist in classpath: '%1$s'
HSEARCH000135 org.hibernate.search.util.common.SearchException No default value bridge implementation for type '%1$s'. Use a custom bridge.
HSEARCH000159 org.hibernate.search.util.common.SearchException No property annotated with %1$s(markerSet = "%3$s"). There must be exactly one such property in order to map it to geo-point field '%2$s'.
HSEARCH000160 org.hibernate.search.util.common.SearchException Multiple properties annotated with %1$s(markerSet = "%3$s"). There must be exactly one such property in order to map it to geo-point field '%2$s'.
HSEARCH000177 org.hibernate.search.util.common.SearchException Unable to define a document identifier for indexed type '%1$s', The property representing the entity identifier is unknown. Define the document identifier explicitly by annotating a property whose values are unique with @DocumentId.
HSEARCH000216 org.hibernate.search.util.common.SearchException %1$s defines includePaths filters that do not match anything. Non-matching includePaths filters: %2$s. Encountered field paths: %3$s. Check the filters for typos, or remove them if they are not useful.
HSEARCH000221 org.hibernate.search.util.common.SearchException Infinite embedded recursion involving path '%2$s' on type '%1$s'
HSEARCH000225 WARN Unable to acquire lock on the index while initializing directory '%s'. Either the directory wasn't properly closed last time it was used due to a critical failure, or another instance of Hibernate Search is using it concurrently (which is not supported). If you experience indexing failures on this index you will need to remove the lock, and might need to rebuild the index.
HSEARCH000226 TRACE %s: %s
HSEARCH000228 org.hibernate.search.util.common.SearchException Unable to parse '%1$ss' into a Lucene version: %2$s
HSEARCH000230 DEBUG Starting executor '%1$s'
HSEARCH000231 DEBUG Stopping executor '%1$s'
HSEARCH000234 org.hibernate.search.util.common.SearchException No matching indexed entity types for types: %1$s These types are not indexed entity types, nor is any of their subtypes. Valid indexed entity classes, superclasses and superinterfaces are: %2$s.
HSEARCH000237 org.hibernate.search.util.common.SearchException Invalid range: at least one bound in range predicates must be non-null.
HSEARCH000242 org.hibernate.search.util.common.SearchException Invalid type '%1$s': missing constructor. The type must expose a public, no-arguments constructor.
HSEARCH000274 TRACE Executing Lucene query: %s
HSEARCH000276 org.hibernate.search.util.common.SearchException No transaction active. Consider increasing the connection time-out.
HSEARCH000284 org.hibernate.search.util.common.SearchException Unable to open index readers: %1$s
HSEARCH000295 org.hibernate.search.util.common.SearchException Invalid value for type '$2%s': '$1%s'. %3$s
HSEARCH000297 org.hibernate.search.util.common.SearchException Unable to convert '%2$s' into type '%1$s': value is too large.
HSEARCH000329 org.hibernate.search.util.common.SearchException Unable to apply analysis configuration: %1$s
HSEARCH000337 org.hibernate.search.util.common.SearchException Conflicting usage of @Param annotation for parameter name: '%1$s'. Can't assign both value '%2$s' and '%3$s'
HSEARCH000337 org.hibernate.search.util.common.SearchException Ambiguous value for parameter '%1$s': this parameter is set to two different values '%2$s' and '%3$s'.
HSEARCH000342 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and normalizer '%2$s' are assigned to this type. Either an analyzer or a normalizer can be assigned, but not both.
HSEARCH000344 WARN Invalid normalizer implementation: the normalizer for definition '%s' produced %d tokens. Normalizers should never produce more than one token. The tokens have been concatenated by Hibernate Search, but you should fix your normalizer definition.
HSEARCH000345 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and sorts are enabled. Sorts are not supported on analyzed fields. If you need an analyzer simply to transform the text (lowercasing, ...) without splitting it into tokens, use a normalizer instead. If you need an actual analyzer (with tokenization), define two separate fields: one with an analyzer that is not sortable, and one with a normalizer that is sortable.
HSEARCH000353 org.hibernate.search.util.common.SearchException Unknown analyzer: '%1$s'. Make sure you defined this analyzer.
HSEARCH000501 org.hibernate.search.util.common.SearchException Invalid value for configuration property '%1$s': '%2$s'. %3$s
HSEARCH000502 org.hibernate.search.util.common.SearchException Invalid value: expected either an instance of '%1$s' or a String that can be parsed into that type. %2$s
HSEARCH000503 org.hibernate.search.util.common.SearchException Invalid Boolean value: expected either a Boolean, the String 'true' or the String 'false'. %1$s
HSEARCH000504 org.hibernate.search.util.common.SearchException Invalid Integer value: expected either a Number or a String that can be parsed into an Integer. %1$s
HSEARCH000505 org.hibernate.search.util.common.SearchException Invalid Long value: expected either a Number or a String that can be parsed into a Long. %1$s
HSEARCH000506 org.hibernate.search.util.common.SearchException Invalid multi value: expected either a single value of the correct type, a Collection, or a String, and interpreting as a single value failed with the following exception. %1$s
HSEARCH000514 org.hibernate.search.util.common.SearchException Invalid index field name '%1$s': field names cannot be null or empty.
HSEARCH000515 org.hibernate.search.util.common.SearchException Invalid index field name '%1$s': field names cannot contain a dot ('.'). Remove the dot from your field name, or if you are declaring the field in a bridge and want a tree of fields, declare an object field using the objectField() method.
HSEARCH000516 java.lang.IllegalArgumentException Invalid polygon: the first point '%1$s' should be identical to the last point '%2$s' to properly close the polygon.
HSEARCH000519 java.lang.String Hibernate Search encountered %3$s failures during %1$s. Only the first %2$s failures are displayed here. See the logs for extra failures.
HSEARCH000520 org.hibernate.search.util.common.SearchException Hibernate Search encountered failures during %1$s. Failures: %2$s
HSEARCH000521 ERROR Hibernate Search encountered a failure during %1$s; continuing for now to list all problems, but the process will ultimately be aborted. Context: %2$s Failure:
HSEARCH000522 WARN Exception while collecting a failure -- this may indicate a bug or a missing test in Hibernate Search. Please report it: https://hibernate.org/community/ Nested exception: %1$s
HSEARCH000525 org.hibernate.search.util.common.SearchException Invalid call of ifSupported(...) after orElse(...). Use a separate extension() context, or move the orElse(...) call last.
HSEARCH000526 org.hibernate.search.util.common.SearchException None of the provided extensions can be applied to the current context. Attempted extensions: %1$s. If you want to ignore this, use .extension().ifSupported(...).orElse(ignored -> { }).
HSEARCH000528 org.hibernate.search.util.common.SearchException Security manager does not allow access to the constructor of type '%1$s': %2$s
HSEARCH000530 org.hibernate.search.engine.environment.classpath.spi.ClassLoadingException Unable to load class '%1$s': %2$s
HSEARCH000533 org.hibernate.search.util.common.SearchException No backend with name '%1$s'. Check that at least one entity is configured to target that backend. The following backends can be retrieved by name: %2$s. %3$s
HSEARCH000534 org.hibernate.search.util.common.SearchException No index manager with name '%1$s'. Check that at least one entity is configured to target that index. The following indexes can be retrieved by name: %2$s.
HSEARCH000540 org.hibernate.search.util.common.SearchException Unable to instantiate class '%1$s': %2$s
HSEARCH000542 org.hibernate.search.util.common.SearchException Invalid type '%1$s': this type cannot be assigned to type '%2$s'.
HSEARCH000543 org.hibernate.search.util.common.SearchException Invalid type '%1$s': this type is an interface. An implementation class is required.
HSEARCH000544 org.hibernate.search.util.common.SearchException Invalid type '%1$s': missing constructor. The type must expose a public constructor with a single parameter of type Map.
HSEARCH000546 org.hibernate.search.util.common.SearchException Cyclic recursion starting from '%1$s' on %2$s. Index field path starting from that location and ending with a cycle: '%3$s'. A type cannot declare an unrestricted @IndexedEmbedded to itself, even indirectly. To break the cycle, you should consider adding filters to your @IndexedEmbedded: includePaths, includeDepth, excludePaths, ...
HSEARCH000547 org.hibernate.search.util.common.SearchException Invalid BeanReference value: expected an instance of '%1$s', BeanReference, String or Class. %2$s
HSEARCH000551 org.hibernate.search.util.common.SearchException Invalid use of per-field boost: the predicate score is constant. Cannot assign a different boost to each field when the predicate score is constant.
HSEARCH000553 org.hibernate.search.util.common.SearchException Invalid slop: %1$d. The slop must be positive or zero.
HSEARCH000554 org.hibernate.search.util.common.SearchException Invalid maximum edit distance: %1$d. The value must be 0, 1 or 2.
HSEARCH000555 org.hibernate.search.util.common.SearchException Invalid exact prefix length: %1$d. The value must be positive or zero.
HSEARCH000557 org.hibernate.search.util.common.SearchException Invalid value for type '%1$s': '%2$s'. The expected format is '%3$s'.
HSEARCH000558 org.hibernate.search.util.common.SearchException Invalid %1$s value: expected either a Number or a String that can be parsed into a %1$s. %2$s
HSEARCH000559 org.hibernate.search.util.common.SearchException Invalid string for type '%2$s': '%1$s'. %3$s
HSEARCH000560 org.hibernate.search.util.common.SearchException Invalid value for enum '%2$s': '%1$s'.
HSEARCH000561 org.hibernate.search.util.common.SearchException Multiple hits when a single hit was expected.
HSEARCH000562 org.hibernate.search.util.common.SearchException Unable to submit work to '%1$s': thread received interrupt signal. The work has been discarded.
HSEARCH000563 org.hibernate.search.util.common.SearchException Unable to submit work to '%1$s': this orchestrator is stopped. The work has been discarded.
HSEARCH000564 org.hibernate.search.util.common.SearchException Invalid geo-point value: '%1$s'. The expected format is ', '.
HSEARCH000565 org.hibernate.search.util.common.SearchException Unknown aggregation key '%1$s'. This key was not used when building the search query.
HSEARCH000566 org.hibernate.search.util.common.SearchException Invalid configuration property checking strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH000567 INFO Configuration property tracking is disabled; unused properties will not be logged.
HSEARCH000568 WARN Invalid configuration passed to Hibernate Search: some properties in the given configuration are not used. There might be misspelled property keys in your configuration. Unused properties: %1$s. To disable this warning, set the property '%2$s' to '%3$s'.
HSEARCH000569 ERROR The background failure handler threw an exception while handling a previous failure. The failure may not have been reported.
HSEARCH000570 org.hibernate.search.util.common.SearchException Invalid index field template name '%1$s': field template names cannot be null or empty.
HSEARCH000571 org.hibernate.search.util.common.SearchException Invalid index field template name '%1$s': field template names cannot contain a dot ('.').
HSEARCH000572 org.hibernate.search.util.common.SearchException Inconsistent index data: a supposedly single-valued field returned multiple values. Values: [%1$s, %2$s].
HSEARCH000573 org.hibernate.search.util.common.SearchException Invalid configuration passed to Hibernate Search: some properties in the given configuration are obsolete.Configuration properties changed between Hibernate Search 5 and Hibernate Search 6 Check out the reference documentation and upgrade your configuration. Obsolete properties: %1$s.
HSEARCH000575 org.hibernate.search.util.common.SearchException No default backend. Check that at least one entity is configured to target the default backend. The following backends can be retrieved by name: %1$s.
HSEARCH000576 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Ambiguous bean reference to type '%1$s': multiple beans are explicitly defined for this type in Hibernate Search's internal registry. Explicitly defined beans: %2$s.
HSEARCH000577 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException No beans defined for type '%1$s' in Hibernate Search's internal registry.
HSEARCH000578 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException No beans defined for type '%1$s' and name '%2$s' in Hibernate Search's internal registry.
HSEARCH000579 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Unable to resolve bean reference to type '%1$s' and name '%2$s'. %3$s
HSEARCH000580 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Unable to resolve bean reference to type '%1$s'. %2$s
HSEARCH000581 org.hibernate.search.util.common.SearchException Unable to resolve backend type: configuration property '%1$s' is not set, and there isn't any backend in the classpath. Check that you added the desired backend to your project's dependencies.
HSEARCH000582 org.hibernate.search.util.common.SearchException Ambiguous backend type: configuration property '%1$s' is not set, and multiple backend types are present in the classpath. Set property '%1$s' to one of the following to select the backend type: %2$s
HSEARCH000583 org.hibernate.search.util.common.SearchException Invalid type for DSL arguments: '%1$s'. Expected '%2$s' or a subtype.
HSEARCH000584 org.hibernate.search.util.common.SearchException Invalid type for returned values: '%1$s'. Expected '%2$s' or a supertype.
HSEARCH000586 org.hibernate.search.util.common.SearchTimeoutException Operation exceeded the timeout of %1$s.
HSEARCH000587 org.hibernate.search.util.common.SearchException Unable to provide the exact total hit count: only a lower-bound approximation is available. This is generally the result of setting query options such as a timeout or the total hit count threshold. Either unset these options, or retrieve the lower-bound hit count approximation through '.total().hitCountLowerBound()'.
HSEARCH000588 org.hibernate.search.util.common.SearchException Multiple entity types mapped to index '%1$s': '%2$s', '%3$s'. Each indexed type must be mapped to its own, dedicated index.
HSEARCH000589 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Unable to create bean using reflection: %1$s
HSEARCH000590 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException No configured bean manager.
HSEARCH000591 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Unable to resolve '%2$s' to a class extending '%1$s': %3$s
HSEARCH000592 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Invalid bean reference: '%1$s'. The reference is prefixed with '%2$s', which is not a valid bean retrieval prefix. If you want to reference a bean by name, and the name contains a colon, use 'bean:%1$s'. Otherwise, use a valid bean retrieval prefix among the following: %3$s.
HSEARCH000593 org.hibernate.search.util.common.SearchException Named predicate name '%1$s' is invalid: field names cannot be null or empty.
HSEARCH000594 org.hibernate.search.util.common.SearchException Named predicate name '%1$s' is invalid: field names cannot contain a dot ('.'). Remove the dot from your named predicate name.
HSEARCH000596 org.hibernate.search.util.common.SearchException Different mappings trying to define two backends with the same name '%1$s' but having different expectations on multi-tenancy.
HSEARCH000597 org.hibernate.search.util.common.SearchException Different mappings trying to define default backends having different expectations on multi-tenancy.
HSEARCH000598 org.hibernate.search.util.common.SearchException Invalid type: %1$s is not composite.
HSEARCH000599 org.hibernate.search.util.common.SearchException Invalid type: %1$s is not an object field.
HSEARCH000600 org.hibernate.search.util.common.SearchException Invalid type: %1$s is not a value field.
HSEARCH000601 org.hibernate.search.util.common.SearchException Inconsistent configuration for %1$s in a search query across multiple indexes: %2$s
HSEARCH000602 org.hibernate.search.util.common.SearchException Inconsistent support for '%1$s': %2$s
HSEARCH000603 org.hibernate.search.util.common.SearchException Attribute '%1$s' differs: '%2$s' vs. '%3$s'.
HSEARCH000604 org.hibernate.search.util.common.SearchException Cannot use '%2$s' on %1$s: %3$s
HSEARCH000606 org.hibernate.search.util.common.SearchException '%1$s' can be used in some of the targeted indexes, but not all of them. %2$s
HSEARCH000609 org.hibernate.search.util.common.SearchException This field is a value field in some indexes, but an object field in other indexes.
HSEARCH000610 org.hibernate.search.util.common.SearchException Unknown field '%1$s'.
HSEARCH000611 org.hibernate.search.util.common.SearchException Invalid target fields: fields [%1$s, %3$s] are in different nested documents (%2$s vs. %4$s). All target fields must be in the same document.
HSEARCH000612 org.hibernate.search.util.common.SearchException Unable to close saved value for key %1$s: %2$s
HSEARCH000613 org.hibernate.search.util.common.SearchException Unable to access the Search integration: initialization hasn't completed yet.
HSEARCH000614 org.hibernate.search.util.common.SearchException Cannot project on entity type '%1$s': this type cannot be loaded from an external datasource, and the documents from the index cannot be projected to its Java class '%2$s'. %3$s
HSEARCH000615 org.hibernate.search.util.common.SearchException Unable to resolve field '%1$s': %2$s
HSEARCH000616 DEBUG Ignoring ServiceConfigurationError caught while trying to instantiate service '%s'.
HSEARCH000617 org.hibernate.search.util.common.SearchException Parameter with name '%1$s' was not defined on projection definition '%2$s'.
HSEARCH000618 org.hibernate.search.util.common.SearchException Invalid type for entity projection on type '%1$s': the entity type's Java class '%2$s' does not extend the requested projection type '%3$s'.
HSEARCH000619 org.hibernate.search.util.common.SearchException 'includePaths' and 'excludePaths' cannot be used together in the same filter. Use either `includePaths` or `excludePaths` leaving the other one empty. Included paths are: '%1$s', excluded paths are: '%2$s'.
HSEARCH400007 org.hibernate.search.util.common.SearchException Elasticsearch request failed: %3$s Request: %1$s Response: %2$s
HSEARCH400008 org.hibernate.search.util.common.SearchException Elasticsearch bulked request failed: %3$s Request metadata: %1$sResponse: %2$s
HSEARCH400010 org.hibernate.search.util.common.SearchException Elasticsearch response indicates a timeout (HTTP status 408)
HSEARCH400020 org.hibernate.search.util.common.SearchException Unable to update mapping for index '%1$s': %2$s
HSEARCH400022 org.hibernate.search.util.common.SearchException Invalid index status: '%1$s'. Valid statuses are: %2$s.
HSEARCH400024 org.hibernate.search.util.common.SearchException Index '%1$s' failed to reach status '%2$s' after %3$sms.
HSEARCH400034 org.hibernate.search.util.common.SearchException Unable to retrieve index metadata from Elasticsearch: %1$s
HSEARCH400035 org.hibernate.search.util.common.SearchException Unable to update schema for index '%1$s': %2$s
HSEARCH400050 org.hibernate.search.util.common.SearchException Missing index: index names [%1$s, %2$s] do not point to any index in the Elasticsearch cluster.
HSEARCH400053 TRACE Executing Elasticsearch query on '%s' with parameters '%s': <%s>
HSEARCH400055 org.hibernate.search.util.common.SearchException Duplicate tokenizer definitions: '%1$s'. Tokenizer names must be unique.
HSEARCH400056 org.hibernate.search.util.common.SearchException Duplicate char filter definitions: '%1$s'. Char filter names must be unique.
HSEARCH400057 org.hibernate.search.util.common.SearchException Duplicate token filter definitions: '%1$s'. Token filter names must be unique.
HSEARCH400067 org.hibernate.search.util.common.SearchException Unable to update settings for index '%1$s': %2$s
HSEARCH400069 INFO Closed Elasticsearch index '%1$s' automatically.
HSEARCH400070 INFO Opened Elasticsearch index '%1$s' automatically.
HSEARCH400073 WARN Hibernate Search will connect to Elasticsearch with authentication over plain HTTP (not HTTPS). The password will be sent in clear text over the network.
HSEARCH400075 org.hibernate.search.util.common.SearchException Unable to apply analysis configuration: %1$s
HSEARCH400076 org.hibernate.search.util.common.SearchException Invalid analyzer definition for name '%1$s'. Analyzer definitions must at least define the tokenizer.
HSEARCH400077 org.hibernate.search.util.common.SearchException Invalid tokenizer definition for name '%1$s'. Tokenizer definitions must at least define the tokenizer type.
HSEARCH400078 org.hibernate.search.util.common.SearchException Invalid char filter definition for name '%1$s'. Char filter definitions must at least define the char filter type.
HSEARCH400079 org.hibernate.search.util.common.SearchException Invalid token filter definition for name '%1$s'. Token filter definitions must at least define the token filter type.
HSEARCH400080 org.hibernate.search.util.common.SearchException Unable to detect the Elasticsearch version running on the cluster: %s
HSEARCH400081 org.hibernate.search.util.common.SearchException Incompatible Elasticsearch version running on the cluster: '%s'. Refer to the documentation to know which versions of Elasticsearch are compatible with Hibernate Search.
HSEARCH400082 DEBUG Executed Elasticsearch HTTP %s request to '%s' with path '%s', query parameters %s and %d objects in payload in %dms. Response had status %d '%s'. Request body: <%s>. Response body: <%s>
HSEARCH400085 WARN Unknown Elasticsearch version running on the cluster: '%s'. Hibernate Search may not work correctly. Consider updating to a newer version of Hibernate Search, if any.
HSEARCH400089 org.hibernate.search.util.common.SearchException Unable to parse Elasticsearch response. Status code was '%1$d', status phrase was '%2$s'. Nested exception: %3$s
HSEARCH400090 org.hibernate.search.util.common.SearchException Elasticsearch response indicates a failure.
HSEARCH400093 TRACE Executed Elasticsearch HTTP %s request to '%s' with path '%s', query parameters %s and %d objects in payload in %dms. Response had status %d '%s'. Request body: <%s>. Response body: <%s>
HSEARCH400502 org.hibernate.search.util.common.SearchException Invalid multi-index scope: a scope cannot span both a Elasticsearch index and another type of index. Base scope: '%1$s', incompatible (Elasticsearch) index: '%2$s'.
HSEARCH400503 org.hibernate.search.util.common.SearchException Invalid multi-index scope: a scope cannot span multiple Elasticsearch backends. Base scope: '%1$s', incompatible index (from another backend): '%2$s'.
HSEARCH400506 org.hibernate.search.util.common.SearchException Invalid target for Elasticsearch extension: '%1$s'. This extension can only be applied to components created by an Elasticsearch backend.
HSEARCH400508 org.hibernate.search.util.common.SearchException Invalid search predicate: '%1$s'. You must build the predicate from an Elasticsearch search scope.
HSEARCH400511 org.hibernate.search.util.common.SearchException Invalid search sort: '%1$s'. You must build the sort from an Elasticsearch search scope.
HSEARCH400515 org.hibernate.search.util.common.SearchException Invalid multi-tenancy strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH400516 org.hibernate.search.util.common.SearchException Invalid tenant identifiers: '%1$s'. No tenant identifier is expected, because multi-tenancy is disabled for this backend.
HSEARCH400517 org.hibernate.search.util.common.SearchException Missing tenant identifier. A tenant identifier is expected, because multi-tenancy is enabled for this backend.
HSEARCH400518 org.hibernate.search.util.common.SearchException Invalid requested type for client: '%1$s'. The Elasticsearch low-level client can only be unwrapped to '%2$s'.
HSEARCH400519 org.hibernate.search.util.common.SearchException Invalid requested type for this backend: '%1$s'. Elasticsearch backends can only be unwrapped to '%2$s'.
HSEARCH400520 org.hibernate.search.util.common.SearchException Duplicate index field definition: '%1$s'. Index field names must be unique. Look for two property mappings with the same field name, or two indexed-embeddeds with prefixes that lead to conflicting index field names, or two custom bridges declaring index fields with the same name.
HSEARCH400525 org.hibernate.search.util.common.SearchException Invalid field reference for this document element: this document element has path '%1$s', but the referenced field has a parent with path '%2$s'.
HSEARCH400526 org.hibernate.search.util.common.AssertionFailure Missing data in the Elasticsearch response.
HSEARCH400529 org.hibernate.search.util.common.SearchException Multiple conflicting minimumShouldMatch constraints for ceiling '%1$s'
HSEARCH400530 org.hibernate.search.util.common.SearchException Conflicting index names: Hibernate Search indexes '%1$s' and '%2$s' both target the Elasticsearch index name or alias '%3$s'
HSEARCH400531 org.hibernate.search.util.common.SearchException Unable to resolve index name '%1$s' to an entity type: %2$s
HSEARCH400532 org.hibernate.search.util.common.SearchException Unable to convert DSL argument: %1$s
HSEARCH400533 org.hibernate.search.util.common.SearchException Invalid requested type for this index manager: '%1$s'. Elasticsearch index managers can only be unwrapped to '%2$s'.
HSEARCH400534 org.hibernate.search.util.common.SearchException Invalid typed analyzer definition for name '%1$s'. Typed analyzer definitions must at least define the analyzer type.
HSEARCH400535 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and normalizer '%2$s' are assigned to this type. Either an analyzer or a normalizer can be assigned, but not both.
HSEARCH400536 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and sorts are enabled. Sorts are not supported on analyzed fields. If you need an analyzer simply to transform the text (lowercasing, ...) without splitting it into tokens, use a normalizer instead. If you need an actual analyzer (with tokenization), define two separate fields: one with an analyzer that is not sortable, and one with a normalizer that is sortable.
HSEARCH400537 org.hibernate.search.util.common.SearchException Ambiguous value for parameter '%1$s': this parameter is set to two different values '%2$s' and '%3$s'.
HSEARCH400538 org.hibernate.search.util.common.SearchException Invalid search projection: '%1$s'. You must build the projection from an Elasticsearch search scope.
HSEARCH400544 org.hibernate.search.util.common.SearchException Unable to shut down the Elasticsearch client: %1$s
HSEARCH400545 org.hibernate.search.util.common.SearchException No built-in index field type for class: '%1$s'.
HSEARCH400553 org.hibernate.search.util.common.SearchException Full-text features (analysis, fuzziness) are not supported for fields of this type.
HSEARCH400554 org.hibernate.search.util.common.SearchException Incomplete field definition. You must call toReference() to complete the field definition.
HSEARCH400555 org.hibernate.search.util.common.SearchException Multiple calls to toReference() for the same field definition. You must call toReference() exactly once.
HSEARCH400556 org.hibernate.search.util.common.SearchException Invalid Elasticsearch version: '%1$s'. Expected format is 'x.y.z-qualifier', where 'x', 'y' and 'z' are integers, and 'qualifier' is an string of word characters (alphanumeric or '_'). Incomplete versions are allowed, for example '7.0' or just '7'.
HSEARCH400557 org.hibernate.search.util.common.SearchException Invalid Elasticsearch version: '%1$s'. Expected format is 'x.y.z-qualifier' or ':x.y.z-qualifier', where '' is one of %2$s (defaults to '%3$s'), 'x', 'y' and 'z' are integers, and 'qualifier' is an string of word characters (alphanumeric or '_'). Incomplete versions are allowed, for example 'elastic:7.0', '7.0' or just '7'.
HSEARCH400558 org.hibernate.search.util.common.SearchException Invalid Elasticsearch distribution name: '%1$s'. Valid names are: %2$s.
HSEARCH400559 org.hibernate.search.util.common.SearchException Unexpected Elasticsearch version running on the cluster: '%2$s'. Hibernate Search was configured for Elasticsearch '%1$s'.
HSEARCH400560 org.hibernate.search.util.common.SearchException Cannot skip analysis on field '%1$s': the Elasticsearch backend will always normalize arguments before attempting matches on normalized fields.
HSEARCH400561 org.hibernate.search.util.common.SearchException Ambiguous Elasticsearch version: '%s'. This version matches multiple dialects. Please use a more precise version to remove the ambiguity.
HSEARCH400562 org.hibernate.search.util.common.SearchException Invalid index field type: both null token '%2$s' ('indexNullAs') and analyzer '%1$s' are assigned to this type. 'indexNullAs' is not supported on analyzed fields.
HSEARCH400563 org.hibernate.search.util.common.SearchException Multiple values assigned to field '%1$s': this field is single-valued. Declare the field as multi-valued in order to allow this.
HSEARCH400564 org.hibernate.search.util.common.SearchException Invalid use of explain(Object id) on a query targeting multiple types. Use explain(String typeName, Object id) and pass one of %1$s as the type name.
HSEARCH400565 org.hibernate.search.util.common.SearchException Invalid mapped type name: '%2$s'. This type is not among the mapped types targeted by this query: %1$s.
HSEARCH400566 org.hibernate.search.util.common.SearchException Invalid document identifier: '%2$s'. No such document in index '%1$s'.
HSEARCH400567 org.hibernate.search.util.common.SearchException Invalid index field type: missing decimal scale. Define the decimal scale explicitly. %1$s
HSEARCH400569 org.hibernate.search.util.common.SearchException Unable to encode value '%1$s': this field type only supports values ranging from '%2$s' to '%3$s'. If you want to encode values that are outside this range, change the decimal scale for this field. Do not forget to reindex all your data after changing the decimal scale.
HSEARCH400570 org.hibernate.search.util.common.SearchException Invalid index field type: decimal scale '%1$s' is positive. The decimal scale of BigInteger fields must be zero or negative.
HSEARCH400572 org.hibernate.search.util.common.SearchException Invalid search predicate: '%1$s'. You must build the predicate from a scope targeting indexes %3$s, but the given predicate was built from a scope targeting indexes %2$s.
HSEARCH400573 org.hibernate.search.util.common.SearchException Invalid search sort: '%1$s'. You must build the sort from a scope targeting indexes %3$s, but the given sort was built from a scope targeting indexes %2$s.
HSEARCH400574 org.hibernate.search.util.common.SearchException Invalid search projection: '%1$s'. You must build the projection from a scope targeting indexes %3$s, but the given projection was built from a scope targeting indexes %2$s.
HSEARCH400576 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and aggregations are enabled. Aggregations are not supported on analyzed fields. If you need an analyzer simply to transform the text (lowercasing, ...) without splitting it into tokens, use a normalizer instead. If you need an actual analyzer (with tokenization), define two separate fields: one with an analyzer that is not aggregable, and one with a normalizer that is aggregable.
HSEARCH400580 org.hibernate.search.util.common.SearchException Invalid range: '%1$s'. Elasticsearch range aggregations only accept ranges in the canonical form: (-Infinity, ) or [, ) or [, +Infinity). Call Range.canonical(...) to be sure to create such a range.
HSEARCH400581 org.hibernate.search.util.common.SearchException Invalid search aggregation: '%1$s'. You must build the aggregation from an Elasticsearch search scope.
HSEARCH400582 org.hibernate.search.util.common.SearchException Invalid search aggregation: '%1$s'. You must build the aggregation from a scope targeting indexes %3$s, but the given aggregation was built from a scope targeting indexes %2$s.
HSEARCH400585 org.hibernate.search.util.common.SearchException Duplicate aggregation definitions for key: '%1$s'
HSEARCH400587 org.hibernate.search.util.common.SearchException Invalid index field type: search analyzer '%1$s' is assigned to this type, but the indexing analyzer is missing. Assign an indexing analyzer and a search analyzer, or remove the search analyzer.
HSEARCH400588 org.hibernate.search.util.common.SearchException Call to the bulk REST API failed: %1$s
HSEARCH400589 org.hibernate.search.util.common.SearchException Invalid host/port: '%1$s'. The host/port string must use the format 'host:port', for example 'mycompany.com:9200' The URI scheme ('http://', 'https://') must not be included.
HSEARCH400590 org.hibernate.search.util.common.SearchTimeoutException Request execution exceeded the timeout of %1$s. Request was %2$s
HSEARCH400591 org.hibernate.search.util.common.SearchException Invalid name for the type-name mapping strategy: '%1$s'. Valid names are: %2$s.
HSEARCH400592 org.hibernate.search.util.common.SearchException Missing field '%1$s' for one of the search hits. The document was probably indexed with a different configuration: full reindexing is necessary.
HSEARCH400593 org.hibernate.search.util.common.SearchException Invalid Elasticsearch index layout: index names [%1$s, %2$s] resolve to multiple distinct indexes %3$s. These names must resolve to a single index.
HSEARCH400594 org.hibernate.search.util.common.SearchException Invalid Elasticsearch index layout: primary (non-alias) name for existing Elasticsearch index '%1$s' does not match the expected pattern '%2$s'.
HSEARCH400595 org.hibernate.search.util.common.SearchException Invalid Elasticsearch index layout: unique key '%1$s' extracted from the index name does not match any of %2$s.
HSEARCH400596 org.hibernate.search.util.common.SearchException Invalid Elasticsearch index layout: the write alias and read alias are set to the same value: '%1$s'. The write alias and read alias must be different.
HSEARCH400597 org.hibernate.search.util.common.SearchException Missing or imprecise Elasticsearch version: when configuration property '%1$s' is set to 'false', the version is mandatory and must be at least as precise as 'x.y', where 'x' and 'y' are integers.
HSEARCH400598 org.hibernate.search.util.common.SearchException The lifecycle strategy cannot be set at the index level anymore. Set the schema management strategy via the property 'hibernate.search.schema_management.strategy' instead.
HSEARCH400600 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for fields in nested documents.
HSEARCH400601 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for String fields. Only MIN and MAX are supported.
HSEARCH400602 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for temporal fields. Only MIN, MAX, AVG and MEDIAN are supported.
HSEARCH400603 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for a distance sort. Only MIN, MAX, AVG and MEDIAN are supported.
HSEARCH400604 org.hibernate.search.util.common.SearchException Invalid sort filter: field '%1$s' is not contained in a nested object. Sort filters are only available if the field to sort on is contained in a nested object.
HSEARCH400605 org.hibernate.search.util.common.SearchException Invalid search predicate: %1$s. This predicate targets fields %3$s, but only fields that are contained in the nested object with path '%2$s' are allowed here.
HSEARCH400606 org.hibernate.search.util.common.SearchException Invalid aggregation filter: field '%1$s' is not contained in a nested object. Aggregation filters are only available if the field to aggregate on is contained in a nested object.
HSEARCH400607 org.hibernate.search.util.common.SearchException Duplicate index field template definition: '%1$s'. Multiple bridges may be trying to access the same index field template, or two indexed-embeddeds may have prefixes that lead to conflicting field names, or you may have declared multiple conflicting mappings. In any case, there is something wrong with your mapping and you should fix it.
HSEARCH400608 org.hibernate.search.util.common.SearchException Invalid value type. This field's values are of type '%1$s', which is not assignable from '%2$s'.
HSEARCH400609 org.hibernate.search.util.common.SearchException Unknown field '%1$s'.
HSEARCH400613 org.hibernate.search.util.common.SearchException Invalid cardinality for projection on field '%1$s': the projection is single-valued, but this field is multi-valued. Make sure to call '.multi()' when you create the projection.
HSEARCH400617 org.hibernate.search.util.common.SearchException Implementation class differs: '%1$s' vs. '%2$s'.
HSEARCH400618 org.hibernate.search.util.common.SearchException Field codec differs: '%1$s' vs. '%2$s'.
HSEARCH400621 org.hibernate.search.util.common.SearchException Invalid dynamic type: '%1$s'. Valid values are: %2$s.
HSEARCH400625 org.hibernate.search.util.common.SearchException Unable to update aliases for index '%1$s': %2$s
HSEARCH400626 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: both the 'uris' property and the 'protocol' property are set. Uris: '%1$s'. Protocol: '%2$s'. Either set the protocol and hosts simultaneously using the 'uris' property, or set them separately using the 'protocol' property and the 'hosts' property.
HSEARCH400627 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: both the 'uris' property and the 'hosts' property are set. Uris: '%1$s'. Hosts: '%2$s'. Either set the protocol and hosts simultaneously using the 'uris' property, or set them separately using the 'protocol' property and the 'hosts' property.
HSEARCH400628 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: the 'uris' use different protocols (http, https). All URIs must use the same protocol. Uris: '%1$s'.
HSEARCH400629 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: the list of hosts must not be empty.
HSEARCH400630 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: the list of URIs must not be empty.
HSEARCH400631 org.hibernate.search.util.common.SearchException Unable to find the given custom index settings file: '%1$s'.
HSEARCH400632 org.hibernate.search.util.common.SearchException Error on loading the given custom index settings file '%1$s': %2$s
HSEARCH400633 org.hibernate.search.util.common.SearchException There are some JSON syntax errors on the given custom index settings file '%1$s': %2$s
HSEARCH400634 org.hibernate.search.util.common.SearchException Invalid use of 'missing().first()' for an ascending distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400635 org.hibernate.search.util.common.SearchException Invalid use of 'missing().last()' for a descending distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400636 org.hibernate.search.util.common.SearchException Invalid use of 'missing().use(...)' for a distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400637 org.hibernate.search.util.common.SearchException The index schema named predicate '%1$s' was added twice.
HSEARCH400638 org.hibernate.search.util.common.SearchException Predicate definition differs: '%1$s' vs. '%2$s'.
HSEARCH400640 WARN A search query fetching all hits was requested, but only '%2$s' hits were retrieved because the maximum result window size forces a limit of '%1$s' hits. Refer to Elasticsearch's 'max_result_window_size' setting for more information.
HSEARCH400641 org.hibernate.search.util.common.SearchException Incompatible Elasticsearch version: version '%2$s' does not match version '%1$s' that was provided when the backend was created. You can provide a more precise version on startup, but you cannot override the version that was provided when the backend was created.
HSEARCH400648 org.hibernate.search.util.common.SearchException Invalid backend configuration: mapping requires multi-tenancy but no multi-tenancy strategy is set.
HSEARCH400649 org.hibernate.search.util.common.SearchException Invalid backend configuration: mapping requires single-tenancy but multi-tenancy strategy is set.
HSEARCH400650 org.hibernate.search.util.common.SearchException Param with name '%1$s' has not been defined for the named predicate '%2$s'.
HSEARCH400651 org.hibernate.search.util.common.SearchException Unable to find the given custom index mapping file: '%1$s'.
HSEARCH400652 org.hibernate.search.util.common.SearchException Error on loading the given custom index mapping file '%1$s': %2$s
HSEARCH400653 org.hibernate.search.util.common.SearchException There are some JSON syntax errors on the given custom index mapping file '%1$s': %2$s
HSEARCH400654 org.hibernate.search.util.common.SearchException Invalid context for projection on field '%1$s': the surrounding projection is executed for each object in field '%2$s', which is not a parent of field '%1$s'. Check the structure of your projections.
HSEARCH400655 org.hibernate.search.util.common.SearchException Invalid cardinality for projection on field '%1$s': the projection is single-valued, but this field is effectively multi-valued in this context, because parent object field '%2$s' is multi-valued. Either call '.multi()' when you create the projection on field '%1$s', or wrap that projection in an object projection like this: 'f.object("%2$s").from().as(...).multi()'.
HSEARCH400656 org.hibernate.search.util.common.SearchException Unexpected mapped type name extracted from hits: '%1$s'. Expected one of: %2$s. The document was probably indexed with a different configuration: full reindexing is necessary.
HSEARCH400657 org.hibernate.search.util.common.SearchException Unable to export the schema for '%1$s' index: %2$s
HSEARCH400658 org.hibernate.search.util.common.SearchException Invalid use of 'missing().lowest()' for an ascending distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400659 org.hibernate.search.util.common.SearchException Invalid use of 'missing().lowest()' for a descending distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400660 org.hibernate.search.util.common.SearchException Invalid highlighter: '%1$s'. You must build the highlighter from an Elasticsearch search scope.
HSEARCH400661 org.hibernate.search.util.common.SearchException Invalid highlighter: '%1$s'. You must build the highlighter from a scope targeting indexes %3$s, but the given highlighter was built from a scope targeting indexes %2$s.
HSEARCH400662 WARN No fields were added to be highlighted, but some query level highlighters were provided. These highlighters will be ignored.
HSEARCH400663 org.hibernate.search.util.common.SearchException Cannot find a highlighter with name '%1$s'. Available highlighters are: %2$s. Was it configured with `highlighter("%1$s", highlighterContributor)`?
HSEARCH400664 org.hibernate.search.util.common.SearchException Named highlighters cannot use a blank string as name.
HSEARCH400665 org.hibernate.search.util.common.SearchException Highlighter with name '%1$s' is already defined. Use a different name to add another highlighter.
HSEARCH400666 org.hibernate.search.util.common.SearchException '%1$s' highlighter type cannot be applied to '%2$s' field. '%2$s' must have either 'ANY' or '%1$s' among the configured highlightable values.
HSEARCH400667 org.hibernate.search.util.common.SearchException Cannot use 'NO' in combination with other highlightable values. Applied values are: '%1$s'
HSEARCH400668 org.hibernate.search.util.common.SearchException The '%1$s' term vector storage strategy is not compatible with the fast vector highlighter. Either change the strategy to one of `WITH_POSITIONS_PAYLOADS`/`WITH_POSITIONS_OFFSETS_PAYLOADS` or remove the requirement for the fast vector highlighter support.
HSEARCH400669 org.hibernate.search.util.common.SearchException Setting the `highlightable` attribute to an empty array is not supported. Set the value to `NO` if the field does not require the highlight projection.
HSEARCH400670 org.hibernate.search.util.common.SearchException Highlight projection cannot be applied within nested context of '%1$s'.
HSEARCH400671 org.hibernate.search.util.common.SearchException The highlight projection cannot be applied to a field from an object using `ObjectStructure.NESTED` structure.
HSEARCH400672 org.hibernate.search.util.common.SearchException '%1$s' cannot be nested in an object projection. %2$s
HSEARCH600001 org.hibernate.search.util.common.SearchException Path '%1$s' exists but does not point to a writable directory.
HSEARCH600005 org.hibernate.search.util.common.SearchException Invalid target for Lucene extension: '%1$s'. This extension can only be applied to components created by a Lucene backend.
HSEARCH600010 org.hibernate.search.util.common.SearchException Invalid search predicate: '%1$s'. You must build the predicate from a Lucene search scope.
HSEARCH600014 org.hibernate.search.util.common.SearchException Invalid search sort: '%1$s'. You must build the sort from a Lucene search scope.
HSEARCH600015 org.hibernate.search.util.common.SearchException Unable to initialize index directory: %1$s
HSEARCH600016 org.hibernate.search.util.common.SearchException Unable to index entity of type '%2$s' with identifier '%3$s' and tenant identifier '%1$s': %4$s
HSEARCH600017 org.hibernate.search.util.common.SearchException Unable to delete entity of type '%2$s' with identifier '%3$s' and tenant identifier '%1$s': %4$s
HSEARCH600019 org.hibernate.search.util.common.SearchException Unable to commit: %1$s
HSEARCH600024 org.hibernate.search.util.common.SearchException Invalid multi-index scope: a scope cannot span both a Lucene index and another type of index. Base scope: '%1$s', incompatible (Lucene) index: '%2$s'.
HSEARCH600025 org.hibernate.search.util.common.SearchException Invalid multi-index scope: a scope cannot span multiple Lucene backends. Base scope: '%1$s', incompatible index (from another backend): '%2$s'.
HSEARCH600027 org.hibernate.search.util.common.SearchException Unable to execute search query '%1$s': %2$s
HSEARCH600030 org.hibernate.search.util.common.SearchException Invalid multi-tenancy strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH600031 org.hibernate.search.util.common.SearchException Invalid tenant identifiers: '%1$s'. No tenant identifier is expected, because multi-tenancy is disabled for this backend.
HSEARCH600032 org.hibernate.search.util.common.SearchException Missing tenant identifier. A tenant identifier is expected, because multi-tenancy is enabled for this backend.
HSEARCH600033 org.hibernate.search.util.common.SearchException Invalid requested type for this backend: '%1$s'. Lucene backends can only be unwrapped to '%2$s'.
HSEARCH600034 org.hibernate.search.util.common.SearchException Duplicate index field definition: '%1$s'. Index field names must be unique. Look for two property mappings with the same field name, or two indexed-embeddeds with prefixes that lead to conflicting index field names, or two custom bridges declaring index fields with the same name.
HSEARCH600039 org.hibernate.search.util.common.SearchException Invalid field reference for this document element: this document element has path '%1$s', but the referenced field has a parent with path '%2$s'.
HSEARCH600044 org.hibernate.search.util.common.SearchException Computed minimum for minimumShouldMatch constraint is out of bounds: expected a number between '1' and '%1$s', got '%2$s'.
HSEARCH600045 org.hibernate.search.util.common.SearchException Multiple conflicting minimumShouldMatch constraints for ceiling '%1$s'
HSEARCH600049 org.hibernate.search.util.common.SearchException Invalid field path; expected path '%1$s', got '%2$s'.
HSEARCH600050 org.hibernate.search.util.common.SearchException Unable to convert DSL argument: %1$s
HSEARCH600051 org.hibernate.search.util.common.SearchException Invalid requested type for this index manager: '%1$s'. Lucene index managers can only be unwrapped to '%2$s'.
HSEARCH600052 org.hibernate.search.util.common.SearchException Unable to create analyzer for name '%1$s': %2$s
HSEARCH600053 org.hibernate.search.util.common.SearchException Unable to create normalizer for name '%1$s': %2$s
HSEARCH600054 org.hibernate.search.util.common.SearchException Unknown normalizer: '%1$s'. Make sure you defined this normalizer.
HSEARCH600055 org.hibernate.search.util.common.SearchException Invalid search projection: '%1$s'. You must build the projection from a Lucene search scope.
HSEARCH600061 org.hibernate.search.util.common.SearchException Unable to shut down index: %1$s
HSEARCH600062 org.hibernate.search.util.common.SearchException No built-in index field type for class: '%1$s'.
HSEARCH600067 org.hibernate.search.util.common.SearchException Unable to delete all entries matching query '%1$s': %2$s
HSEARCH600070 org.hibernate.search.util.common.SearchException Full-text features (analysis, fuzziness) are not supported for fields of this type.
HSEARCH600071 org.hibernate.search.util.common.SearchException Incomplete field definition. You must call toReference() to complete the field definition.
HSEARCH600072 org.hibernate.search.util.common.SearchException Multiple calls to toReference() for the same field definition. You must call toReference() exactly once.
HSEARCH600073 org.hibernate.search.util.common.SearchException Invalid index field type: both null token '%2$s' ('indexNullAs') and analyzer '%1$s' are assigned to this type. 'indexNullAs' is not supported on analyzed fields.
HSEARCH600074 org.hibernate.search.util.common.SearchException Multiple values assigned to field '%1$s': this field is single-valued. Declare the field as multi-valued in order to allow this.
HSEARCH600075 org.hibernate.search.util.common.SearchException Invalid use of explain(Object id) on a query targeting multiple types. Use explain(String typeName, Object id) and pass one of %1$s as the type name.
HSEARCH600076 org.hibernate.search.util.common.SearchException Invalid mapped type name: '%2$s'. This type is not among the mapped types targeted by this query: %1$s.
HSEARCH600077 org.hibernate.search.util.common.SearchException Invalid document identifier: '%2$s'. No such document for type '%1$s'.
HSEARCH600078 org.hibernate.search.util.common.SearchException Unable to merge index segments: %1$s
HSEARCH600079 org.hibernate.search.util.common.SearchException Unable to close the index writer after write failures: %1$s
HSEARCH600080 org.hibernate.search.util.common.SearchException Invalid index field type: missing decimal scale. Define the decimal scale explicitly. %1$s
HSEARCH600081 org.hibernate.search.util.common.SearchException Unable to encode value '%1$s': this field type only supports values ranging from '%2$s' to '%3$s'. If you want to encode values that are outside this range, change the decimal scale for this field. Do not forget to reindex all your data after changing the decimal scale.
HSEARCH600082 org.hibernate.search.util.common.SearchException Invalid index field type: decimal scale '%1$s' is positive. The decimal scale of BigInteger fields must be zero or negative.
HSEARCH600084 org.hibernate.search.util.common.SearchException Invalid search predicate: '%1$s'. You must build the predicate from a scope targeting indexes %3$s, but the given predicate was built from a scope targeting indexes %2$s.
HSEARCH600085 org.hibernate.search.util.common.SearchException Invalid search sort: '%1$s'. You must build the sort from a scope targeting indexes %3$s, but the given sort was built from a scope targeting indexes %2$s.
HSEARCH600086 org.hibernate.search.util.common.SearchException Invalid search projection: '%1$s'. You must build the projection from a scope targeting indexes %3$s, but the given projection was built from a scope targeting indexes %2$s.
HSEARCH600087 org.hibernate.search.util.common.SearchException Invalid filesystem access strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH600088 org.hibernate.search.util.common.SearchException Invalid locking strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH600089 org.hibernate.search.util.common.SearchException Incorrect sharding strategy implementation: strategy '%1$s' did not declare any shard identifiers during initialization. Declare shard identifiers using context.shardIdentifiers(...) or, if sharding is disabled, call context.disableSharding().
HSEARCH600090 org.hibernate.search.util.common.SearchException When using sharding strategy '%1$s', this configuration property must be set.
HSEARCH600091 org.hibernate.search.util.common.SearchException Invalid routing key: '%1$s'. Valid keys are: %2$s.
HSEARCH600094 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and aggregations are enabled. Aggregations are not supported on analyzed fields. If you need an analyzer simply to transform the text (lowercasing, ...) without splitting it into tokens, use a normalizer instead. If you need an actual analyzer (with tokenization), define two separate fields: one with an analyzer that is not aggregable, and one with a normalizer that is aggregable.
HSEARCH600098 org.hibernate.search.util.common.SearchException Invalid search aggregation: '%1$s'. You must build the aggregation from a Lucene search scope.
HSEARCH600099 org.hibernate.search.util.common.SearchException Invalid search aggregation: '%1$s'. You must build the aggregation from a scope targeting indexes %3$s, but the given aggregation was built from a scope targeting indexes %2$s.
HSEARCH600102 org.hibernate.search.util.common.SearchException Duplicate aggregation definitions for key: '%1$s'
HSEARCH600104 org.hibernate.search.util.common.SearchException Invalid index field type: search analyzer '%1$s' is assigned to this type, but the indexing analyzer is missing. Assign an indexing analyzer and a search analyzer, or remove the search analyzer.
HSEARCH600108 org.hibernate.search.util.common.SearchException Invalid I/O strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH600109 org.hibernate.search.util.common.SearchException Index does not exist for directory '%1$s'
HSEARCH600110 org.hibernate.search.util.common.SearchException Unable to validate index directory: %1$s
HSEARCH600111 org.hibernate.search.util.common.SearchException Unable to drop index directory: %1$s
HSEARCH600114 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for fields in nested documents.
HSEARCH600115 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for String fields. Only MIN and MAX are supported.
HSEARCH600116 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for temporal fields. Only MIN, MAX, AVG and MEDIAN are supported.
HSEARCH600117 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for a distance sort. Only MIN, MAX, AVG and MEDIAN are supported.
HSEARCH600118 org.hibernate.search.util.common.SearchException A failure occurred during a low-level write operation and the index writer had to be reset. Some write operations may have been lost as a result. Failure: %1$s
HSEARCH600120 org.hibernate.search.util.common.SearchException Invalid sort filter: field '%1$s' is not contained in a nested object. Sort filters are only available if the field to sort on is contained in a nested object.
HSEARCH600121 org.hibernate.search.util.common.SearchException Invalid search predicate: %1$s. This predicate targets fields %3$s, but only fields that are contained in the nested object with path '%2$s' are allowed here.
HSEARCH600122 org.hibernate.search.util.common.SearchException Invalid aggregation filter: field '%1$s' is not contained in a nested object. Aggregation filters are only available if the field to aggregate on is contained in a nested object.
HSEARCH600123 org.hibernate.search.util.common.SearchException Invalid value for IndexWriter setting '%1$s': '%2$s'. %3$s
HSEARCH600124 org.hibernate.search.util.common.SearchException Invalid value for merge policy setting '%1$s': '%2$s'. %3$s
HSEARCH600125 org.hibernate.search.util.common.SearchException Duplicate index field template definition: '%1$s'. Multiple bridges may be trying to access the same index field template, or two indexed-embeddeds may have prefixes that lead to conflicting field names, or you may have declared multiple conflicting mappings. In any case, there is something wrong with your mapping and you should fix it.
HSEARCH600126 org.hibernate.search.util.common.SearchException Invalid value type. This field's values are of type '%1$s', which is not assignable from '%2$s'.
HSEARCH600127 org.hibernate.search.util.common.SearchException Unknown field '%1$s'.
HSEARCH600131 org.hibernate.search.util.common.SearchException Invalid cardinality for projection on field '%1$s': the projection is single-valued, but this field is multi-valued. Make sure to call '.multi()' when you create the projection.
HSEARCH600135 org.hibernate.search.util.common.SearchException Implementation class differs: '%1$s' vs. '%2$s'.
HSEARCH600136 org.hibernate.search.util.common.SearchException Field codec differs: '%1$s' vs. '%2$s'.
HSEARCH600138 WARN Using deprecated filesystem access strategy '%1$s', which will be removed in a future version of Lucene. %2$s
HSEARCH600141 org.hibernate.search.util.common.SearchException Unable to compute size of index: %1$s
HSEARCH600142 org.hibernate.search.util.common.SearchException Unable to create instance of analysis component '%1$s': %2$s
HSEARCH600143 org.hibernate.search.util.common.SearchException The index schema named predicate '%1$s' was added twice.
HSEARCH600144 org.hibernate.search.util.common.SearchException Predicate definition differs: '%1$s' vs. '%2$s'.
HSEARCH600146 org.hibernate.search.util.common.SearchException Unable to apply query caching configuration: %1$s
HSEARCH600148 org.hibernate.search.util.common.SearchException Invalid backend configuration: mapping requires multi-tenancy but no multi-tenancy strategy is set.
HSEARCH600149 org.hibernate.search.util.common.SearchException Invalid backend configuration: mapping requires single-tenancy but multi-tenancy strategy is set.
HSEARCH600150 org.hibernate.search.util.common.SearchException Param with name '%1$s' has not been defined for the named predicate '%2$s'.
HSEARCH600151 java.io.IOException Offset + limit should be lower than Integer.MAX_VALUE, offset: '%1$s', limit: '%2$s'.
HSEARCH600152 org.hibernate.search.util.common.SearchException Invalid context for projection on field '%1$s': the surrounding projection is executed for each object in field '%2$s', which is not a parent of field '%1$s'. Check the structure of your projections.
HSEARCH600153 org.hibernate.search.util.common.SearchException Invalid cardinality for projection on field '%1$s': the projection is single-valued, but this field is effectively multi-valued in this context, because parent object field '%2$s' is multi-valued. Either call '.multi()' when you create the projection on field '%1$s', or wrap that projection in an object projection like this: 'f.object("%2$s").from().as(...).multi()'.
HSEARCH600154 org.hibernate.search.util.common.SearchException Unable to start index: %1$s
HSEARCH600155 org.hibernate.search.util.common.SearchException Unexpected mapped type name extracted from hits: '%1$s'. Expected one of: %2$s. The document was probably indexed with a different configuration: full reindexing is necessary.
HSEARCH600156 org.hibernate.search.util.common.SearchException Nonblocking operation submitter is not supported.
HSEARCH600157 org.hibernate.search.util.common.SearchException Unable to export the schema for '%1$s' index: %2$s
HSEARCH600158 org.hibernate.search.util.common.SearchException Invalid highlighter: '%1$s'. You must build the highlighter from a Lucene search scope.
HSEARCH600159 org.hibernate.search.util.common.SearchException Invalid highlighter: '%1$s'. You must build the highlighter from a scope targeting indexes %3$s, but the given highlighter was built from a scope targeting indexes %2$s.
HSEARCH600160 org.hibernate.search.util.common.SearchException Overriding a '%2$s' highlighter with a '%1$s' is not supported. Overriding highlighters should be of the same type as the global is if the global highlighter was configured.
HSEARCH600161 org.hibernate.search.util.common.SearchException Cannot find a highlighter with name '%1$s'. Available highlighters are: %2$s. Was it configured with `highlighter("%1$s", highlighterContributor)`?
HSEARCH600162 org.hibernate.search.util.common.SearchException '%1$s' highlighter does not support '%2$s' boundary scanner type.
HSEARCH600163 org.hibernate.search.util.common.SearchException Named highlighters cannot use a blank string as name.
HSEARCH600164 org.hibernate.search.util.common.SearchException Highlighter with name '%1$s' is already defined. Use a different name to add another highlighter.
HSEARCH600165 org.hibernate.search.util.common.SearchException '%1$s' highlighter type cannot be applied to '%2$s' field. '%2$s' must have either 'ANY' or '%1$s' among the configured highlightable values.
HSEARCH600166 org.hibernate.search.util.common.SearchException Cannot use 'NO' in combination with other highlightable values. Applied values are: '%1$s'
HSEARCH600167 org.hibernate.search.util.common.SearchException The '%1$s' term vector storage strategy is not compatible with the fast vector highlighter. Either change the strategy to one of `WITH_POSITIONS_PAYLOADS`/`WITH_POSITIONS_OFFSETS_PAYLOADS` or remove the requirement for the fast vector highlighter support.
HSEARCH600168 org.hibernate.search.util.common.SearchException Setting the `highlightable` attribute to an empty array is not supported. Set the value to `NO` if the field does not require the highlight projection.
HSEARCH600169 WARN Lucene's unified highlighter cannot limit the size of a fragment returned when no match is found. Instead if no match size was set to any positive integer - all text will be returned. Configured value '%1$s' will be ignored, and the fragment will not be limited. If you don't want to see this warning set the value to Integer.MAX_VALUE.
HSEARCH600170 org.hibernate.search.util.common.SearchException Lucene's unified highlighter does not support the size fragment setting. Either use a plain or fast vector highlighters, or do not set this setting.
HSEARCH600171 org.hibernate.search.util.common.SearchException Highlight projection cannot be applied within nested context of '%1$s'.
HSEARCH600172 org.hibernate.search.util.common.SearchException The highlight projection cannot be applied to a field from an object using `ObjectStructure.NESTED` structure.
HSEARCH600173 org.hibernate.search.util.common.SearchException '%1$s' cannot be nested in an object projection. %2$s
HSEARCH600174 org.hibernate.search.util.common.SearchException Invalid Lucene schema ID strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH700001 org.hibernate.search.util.common.SearchException No default identifier bridge implementation for type '%1$s'. Implement a custom bridge and assign it to the identifier property with @DocumentId(identifierBridge = ...). See the reference documentation for more information about bridges.
HSEARCH700003 org.hibernate.search.util.common.SearchException Empty binder reference.
HSEARCH700005 org.hibernate.search.util.common.SearchException Ambiguous value bridge reference: both 'valueBridge' and 'valueBinder' are set. Only one can be set.
HSEARCH700006 org.hibernate.search.util.common.SearchException Ambiguous identifier bridge reference: both 'identifierBridge' and 'identifierBinder' are set. Only one can be set.
HSEARCH700007 org.hibernate.search.util.common.SearchException Empty scope. If you want to target all indexes, pass 'Object.class' as the target type.
HSEARCH700010 org.hibernate.search.util.common.SearchException Invalid bridge for input type '%2$s': '%1$s'. This bridge expects an input of type '%3$s'.
HSEARCH700011 org.hibernate.search.util.common.SearchException Missing field name for @GeoPointBinding on type %1$s. The field name is mandatory when the bridge is applied to a type, optional when applied to a property.
HSEARCH700015 org.hibernate.search.util.common.SearchException Unable to interpret the type arguments to the ContainerExtractor interface in implementation '%1$s'. Only the following implementations of ContainerExtractor are valid: 1) implementations setting both type parameters to *raw* types, e.g. class MyExtractor implements ContainerExtractor; 2) implementations setting the first type parameter to an array of an unbounded type variable, and setting the second parameter to the same type variable, e.g. MyExtractor implements ContainerExtractor 3) implementations setting the first type parameter to a parameterized type with one argument set to an unbounded type variable and the other to unbounded wildcards, and setting the second type parameter to the same type variable, e.g. MyExtractor implements ContainerExtractor, T>
HSEARCH700016 org.hibernate.search.util.common.SearchException Invalid container extractor for type '%3$s': '%1$s' (implementation class: '%2$s')
HSEARCH700017 DEBUG Type manager for indexed type '%1$s': %2$s
HSEARCH700018 DEBUG Detected entity types: %1$s, indexed types: %2$s, initial mapped types: %3$s.
HSEARCH700019 DEBUG Type manager for contained type '%1$s': %2$s
HSEARCH700020 org.hibernate.search.util.common.SearchException Unable to find the inverse side of the association on type '%2$s' at path '%3$s'. Hibernate Search needs this information in order to reindex '%2$s' when '%1$s' is modified. You can solve this error by defining the inverse side of this association, either with annotations specific to your integration (@OneToMany(mappedBy = ...) in Hibernate ORM) or with the Hibernate Search @AssociationInverseSide annotation. Alternatively, if you do not need to reindex '%2$s' when '%1$s' is modified, you can disable automatic reindexing with @IndexingDependency(reindexOnUpdate = ReindexOnUpdate.SHALLOW).
HSEARCH700021 org.hibernate.search.util.common.SearchException Unable to apply path '%2$s' to type '%1$s'. This path was resolved as the inverse side of the association '%4$s' on type '%3$s'. Hibernate Search needs to apply this path in order to reindex '%3$s' when '%1$s' is modified. Nested exception: %5$s
HSEARCH700022 org.hibernate.search.util.common.SearchException The inverse association targets type '%1$s', but a supertype or subtype of '%2$s' was expected.
HSEARCH700023 org.hibernate.search.util.common.SearchException @AssociationInverseSide.inversePath is empty.
HSEARCH700027 org.hibernate.search.util.common.SearchException Unable to index type '%1$s': this type is not an entity type. If you only expect subtypes to be instantiated, make this type abstract. If you expect this exact type to be instantiated and want it to be indexed, make it an entity type. Otherwise, ensure this type and its subtypes are never indexed by removing the @Indexed annotation or by annotating the type with @Indexed(enabled = false).
HSEARCH700029 org.hibernate.search.util.common.SearchException @IndexingDependency.derivedFrom contains an empty path.
HSEARCH700030 org.hibernate.search.util.common.SearchException Unable to resolve dependencies of a derived property: there is a cyclic dependency starting from type '%1$s'. Derivation chain starting from that type and ending with a cycle:%2$s A derived property cannot be marked as derived from itself, even indirectly through other derived properties. If your model actually contains such cyclic dependency, you should consider disabling automatic reindexing, at least partially using @IndexingDependency(reindexOnUpdate = ReindexOnUpdate.NO) on one of the properties in the cycle.
HSEARCH700031 org.hibernate.search.util.common.SearchException Unable to apply property mapping: this property mapping must target an index field of standard String type, but the resolved field type is non-standard or non-String. This generally means you need to use a different field annotation or to convert property values using a custom ValueBridge or ValueBinder. If you are already using a custom ValueBridge or ValueBinder, check its field type. Details: encountered type DSL step '%1$s', which does not extend the expected interface '%2$s'.
HSEARCH700037 org.hibernate.search.util.common.SearchException No matching entity type for type identifier '%1$s'. Either this type is not an entity type, or the entity type is not mapped in Hibernate Search. Valid identifiers for mapped entity types are: %2$s
HSEARCH700038 org.hibernate.search.util.common.SearchException The entity identifier must not be null.
HSEARCH700039 org.hibernate.search.util.common.SearchException '%1$s' cannot be assigned to '%2$s'
HSEARCH700040 org.hibernate.search.util.common.SearchException No matching indexed entity type for type identifier '%1$s'. Either this type is not an entity type, or the entity type is not indexed in Hibernate Search. Valid identifiers for indexed entity types are: %2$s
HSEARCH700041 org.hibernate.search.util.common.SearchException Invalid reference to default extractors: a chain of multiple container extractors must not include the default extractors. Either use only the default extractors, or explicitly reference every single extractor to be applied.
HSEARCH700042 org.hibernate.search.util.common.SearchException %1$s failure(s) occurred during mass indexing. See the logs for details. First failure: %2$s
HSEARCH700043 org.hibernate.search.util.common.SearchException Exception creating URL from String '%1$s'.
HSEARCH700044 org.hibernate.search.util.common.SearchException Exception creating URI from String '%1$s'.
HSEARCH700045 org.hibernate.search.util.common.SearchException A PojoModelPath must include at least one property.
HSEARCH700046 org.hibernate.search.util.common.SearchException Unable to apply path '%2$s' to type '%1$s'. This path was declared as a path to collect entities of type '%3$s' to be reindexed. Hibernate Search needs to apply this path in order to reindex '%3$s' when '%1$s' is modified. Nested exception: %4$s
HSEARCH700047 org.hibernate.search.util.common.SearchException Invalid use of 'fromOtherEntity': this method can only be used when the bridged element has an entity type, but the bridged element has type '%1$s', which is not an entity type.
HSEARCH700048 org.hibernate.search.util.common.SearchException Invalid type passed to 'fromOtherEntity': the type must be an entity type. Type '%1$s' is not an entity type.
HSEARCH700049 org.hibernate.search.util.common.SearchException Incorrect binder implementation: the binder did not declare any dependency to the entity model during binding. Declare dependencies using context.dependencies().use(...) or, if the bridge really does not depend on the entity model, context.dependencies().useRootOnly().
HSEARCH700050 org.hibernate.search.util.common.SearchException Incorrect binder implementation: the binder called context.dependencies().useRootOnly() during binding, but also declared extra dependencies to the entity model.
HSEARCH700051 org.hibernate.search.util.common.SearchException Unable to apply property mapping: this property mapping must target an index field of standard, scaled-number type (BigDecimal or BigInteger), but the resolved field type is non-standard or non-scaled. This generally means you need to use a different field annotation or to convert property values using a custom ValueBridge or ValueBinder. If you are already using a custom ValueBridge or ValueBinder, check its field type. Details: encountered type DSL step '%1$s', which does not extend the expected interface '%2$s'.
HSEARCH700052 org.hibernate.search.util.common.SearchException Unexpected extractor references: extractors cannot be defined explicitly when extract = ContainerExtract.NO. Either leave 'extract' to its default value to define extractors explicitly or leave the 'extractor' list to its default, empty value to disable extraction.
HSEARCH700053 org.hibernate.search.util.common.SearchException No container extractor with name '%1$s'. Check that this name matches a container extractor, either a builtin one whose name is a constant in '%2$s' or a custom one that was properly registered.
HSEARCH700058 org.hibernate.search.util.common.SearchException Incorrect binder implementation: binder '%1$s' did not call context.bridge(...).
HSEARCH700059 org.hibernate.search.util.common.SearchException Incorrect binder implementation: binder '%1$s' did not call context.marker(...).
HSEARCH700060 org.hibernate.search.util.common.SearchException Unable to trigger entity processing while already processing entities. Make sure you do not change entities within an entity getter or a custom bridge used for indexing, and avoid any event that could trigger entity processing. Hibernate ORM flushes, in particular, must be avoided in entity getters and bridges.
HSEARCH700061 org.hibernate.search.util.common.SearchException Unable to index-embed type '%1$s': no index mapping (@GenericField, @FullTextField, custom bridges, ...) is defined for that type.
HSEARCH700064 org.hibernate.search.util.common.SearchException Multiple entity names assigned to the same type: '%1$s', '%2$s'.
HSEARCH700065 org.hibernate.search.util.common.SearchException Unable to apply property mapping: this property mapping must target an index field of standard type, but the resolved field type is non-standard. This generally means you need to use a different field annotation or to convert property values using a custom ValueBridge or ValueBinder. If you are already using a custom ValueBridge or ValueBinder, check its field type. Details: encountered type DSL step '%1$s', which does not extend the expected interface '%2$s'.
HSEARCH700066 org.hibernate.search.util.common.SearchException Unable to apply property mapping: this property mapping must target an index field of non-standard type, but the resolved field type is standard. Switch to a standard field annotation such as @GenericField. Details: encountered type DSL step '%1$s', which does extend the interface '%2$s'.
HSEARCH700067 org.hibernate.search.util.common.SearchException Invalid annotation processor: '%1$s'. This processor expects annotations of a different type: '%2$s'.
HSEARCH700068 org.hibernate.search.util.common.SearchException Empty annotation processor reference in meta-annotation '%1$s'.
HSEARCH700069 org.hibernate.search.util.common.SearchException Ambiguous @IndexedEmbedded name: both 'name' and 'prefix' are set. Only one can be set. Name is '%1$s', prefix is '%2$s'.
HSEARCH700070 org.hibernate.search.util.common.SearchException Invalid index field name '%1$s': field names cannot contain a dot ('.').
HSEARCH700071 org.hibernate.search.util.common.SearchException No property annotated with @Alternative(id = %1$s). There must be exactly one such property in order to map property '%2$s' to multi-alternative fields.
HSEARCH700072 org.hibernate.search.util.common.SearchException Multiple properties annotated with @Alternative(id = %1$s). There must be exactly one such property in order to map property '%2$s' to multi-alternative fields.
HSEARCH700073 org.hibernate.search.util.common.SearchException Invalid routing bridge for entity type '%2$s': '%1$s' This bridge expects an entity type extending '%3$s'.
HSEARCH700075 org.hibernate.search.util.common.SearchException Incorrect routing bridge implementation: routing bridge '%1$s' did not define any current route. In the implementation of RoutingBridge.route(...), define exactly one current route by calling 'routes.addRoute()', or explicitly indicate indexing is not required by calling 'routes.notIndexed()'.
HSEARCH700076 org.hibernate.search.util.common.SearchException Incorrect routing bridge implementation: routing bridge '%1$s' defined multiple current routes. In the implementation of RoutingBridge.route(...), define at most one current route by calling 'routes.addRoute()' at most once.
HSEARCH700077 org.hibernate.search.util.common.SearchException Incorrect routing bridge implementation: routing bridge '%1$s' did not define any previous route. In the implementation of RoutingBridge.previousRoutes(...), define at least one previous route by calling 'routes.addRoute()' at least once, or explicitly indicate no prior indexing was performed by calling 'routes.notIndexed()'.
HSEARCH700078 org.hibernate.search.util.common.SearchException No readable property named '%2$s' on type '%1$s'.
HSEARCH700079 org.hibernate.search.util.common.SearchException Exception while retrieving property type model for '%1$s' on '%2$s'.
HSEARCH700080 org.hibernate.search.util.common.SearchException Unable to infer index field type for value bridge '%1$s': this bridge implements ValueBridge, but sets the generic type parameter F to '%2$s'. The index field type can only be inferred automatically when this type parameter is set to a raw class. Use a ValueBinder to set the index field type explicitly, or set the type parameter F to a definite, raw type.
HSEARCH700081 org.hibernate.search.util.common.SearchException Unable to infer expected identifier type for identifier bridge '%1$s': this bridge implements IdentifierBridge, but sets the generic type parameter I to '%2$s'. The expected identifier type can only be inferred automatically when this type parameter is set to a raw class. Use an IdentifierBinder to set the expected identifier type explicitly, or set the type parameter I to a definite, raw type.
HSEARCH700082 org.hibernate.search.util.common.SearchException Unable to infer expected value type for value bridge '%1$s': this bridge implements ValueBridge, but sets the generic type parameter V to '%2$s'. The expected value type can only be inferred automatically when this type parameter is set to a raw class. Use a ValueBinder to set the expected value type explicitly, or set the type parameter V to a definite, raw type.
HSEARCH700083 org.hibernate.search.util.common.SearchException Exception while building document for entity '%1$s': %2$s
HSEARCH700084 org.hibernate.search.util.common.SearchException Exception while resolving other entities to reindex as a result of changes on entity '%1$s': %2$s
HSEARCH700085 WARN Multiple getters exist for property named '%2$s' on type '%1$s'. Hibernate Search will use '%3$s' and ignore %4$s. The selected getter may change from one startup to the next. To get rid of this warning, either remove the extra getters or configure the access type for this property to 'FIELD'.
HSEARCH700086 org.hibernate.search.util.common.SearchException Unexpected entity name for entity loading: '%1$s'. Expected one of %2$s.
HSEARCH700087 org.hibernate.search.util.common.SearchException Invalid indexing request: if the entity is null, the identifier must be provided explicitly.
HSEARCH700088 org.hibernate.search.util.common.SearchException Invalid indexing request: the add and update operations require a non-null entity.
HSEARCH700089 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. Either this is not the name of an entity type, or the entity type is not mapped in Hibernate Search. Valid names for mapped entity types are: %2$s
HSEARCH700090 org.hibernate.search.util.common.SearchException The required identifier type '%1$s' does not match the actual identifier type '%2$s': the required identifier must be a superclass of the actual identifier.
HSEARCH700101 org.hibernate.search.util.common.SearchException %1$s failure(s) occurred during mass indexing. See the logs for details. First failure on entity '%2$s': %3$s
HSEARCH700102 ERROR The mass indexing failure handler threw an exception while handling a previous failure. The failure may not have been reported.
HSEARCH700103 org.hibernate.search.util.common.SearchException Mass indexing received interrupt signal. The index is left in an unknown state!
HSEARCH700104 org.hibernate.search.util.common.SearchException Param with name '%1$s' has not been defined for the binder.
HSEARCH700105 org.hibernate.search.util.common.SearchException Cannot work with the identifier of entities of type '%1$s': identifier mapping (@DocumentId, ...) is not configured for this type.
HSEARCH700107 org.hibernate.search.util.common.SearchException No main constructor for type '%1$s': this type does not declare exactly one constructor.
HSEARCH700109 org.hibernate.search.util.common.SearchException No constructor with parameter types %2$s on type '%1$s'. Available constructors: %3$s
HSEARCH700110 org.hibernate.search.util.common.SearchException Exception while retrieving parameter type model for parameter #%1$s of '%2$s'.
HSEARCH700111 org.hibernate.search.util.common.SearchException Exception while retrieving constructor handle for '%1$s' on '%2$s'.
HSEARCH700112 org.hibernate.search.util.common.SearchException Invalid object class for projection: %1$s. Make sure that this class is mapped correctly, either through annotations (@ProjectionConstructor) or programmatic mapping. If it is, make sure the class is included in a Jandex index made available to Hibernate Search.
HSEARCH700113 org.hibernate.search.util.common.SearchException Invalid declaring type for projection constructor: type '%1$s' is abstract. Projection constructors can only be declared on concrete types.
HSEARCH700114 org.hibernate.search.util.common.SearchException Missing parameter names in Java metadata for projection constructor. When inferring inner projections from constructor parameters, constructor parameter names must be known. Either make sure this class was compiled with the '-parameters' compiler flag, or set the path explicitly with '@FieldProjection(path = ...)' or '@ObjectProjection(path = ...)'.
HSEARCH700115 org.hibernate.search.util.common.SearchException Invalid parameter type for projection constructor: %1$s. When inferring the cardinality of inner projections from constructor parameters, multi-valued constructor parameters must be lists (java.util.List<...>) or list supertypes (java.lang.Iterable<...>, java.util.Collection<...>)
HSEARCH700116 org.hibernate.search.util.common.SearchException Multiple projection constructor are mapped for type '%1$s'. At most one projection constructor is allowed for each type.
HSEARCH700117 DEBUG Constructor projection for type '%1$s': %2$s
HSEARCH700118 org.hibernate.search.util.common.SearchException Cyclic recursion starting from '%1$s' on %2$s. Index field path starting from that location and ending with a cycle: '%3$s'. A projection constructor cannot declare an unrestricted @ObjectProjection to itself, even indirectly. To break the cycle, you should consider adding filters to your @ObjectProjection: includePaths, includeDepth, excludePaths, ...
HSEARCH700119 org.hibernate.search.util.common.SearchException Exception while retrieving the Jandex index for code source location '%1$s': %2$s
HSEARCH700120 WARN Both "dropAndCreateSchemaOnStart()" and "purgeAllOnStart()" are enabled. Consider having just one setting enabled as after the index is recreated there is nothing to purge.
HSEARCH700121 org.hibernate.search.util.common.SearchException Invalid ObjectPath encountered '%1$s': %2$s
HSEARCH700122 WARN An unexpected failure occurred while configuring resolution of association inverse side for reindexing. This may lead to incomplete reindexing and thus out-of-sync indexes. The exception is being ignored to preserve backwards compatibility with earlier versions of Hibernate Search. Failure: %3$s %2$s Association inverse side: %1$s.
HSEARCH700123 org.hibernate.search.mapper.pojo.search.definition.impl.ConstructorProjectionApplicationException Could not apply projection constructor: %1$s
HSEARCH700124 org.hibernate.search.util.common.SearchException Indexing failure: %1$s. The following entities may not have been updated correctly in the index: %2$s.
HSEARCH700125 org.hibernate.search.util.common.SearchException %1$s failures went unreported for this operation to avoid flooding. To disable flooding protection, use 'massIndexer.failureFloodingThreshold(Long.MAX_VALUE)'.
HSEARCH700126 org.hibernate.search.util.common.SearchException Target path '%1$s' already exists and is not an empty directory. Use a path to an empty or non-existing directory.
HSEARCH700127 org.hibernate.search.util.common.SearchException Unable to export the schema: %1$s
HSEARCH700128 org.hibernate.search.util.common.SearchException Indexing plan for '%1$s' cannot be created as this type is excluded by the indexing plan filter.
HSEARCH700129 org.hibernate.search.util.common.SearchException '%1$s' cannot be included and excluded at the same time within one filter. Already included types: '%2$s'. Already excluded types: '%3$s'.
HSEARCH700130 org.hibernate.search.util.common.SearchException No matching entity type for class '%1$s'. This class is neither an entity type mapped in Hibernate Search nor a superclass of such entity type. Note interfaces are not considered superclasses and are not permitted here. Valid classes are: %2$s
HSEARCH700131 org.hibernate.search.util.common.SearchException No matching entity type for the name '%1$s'. This name represents neither an entity type mapped in Hibernate Search nor a superclass of such entity type. Valid entity type names are: %2$s
HSEARCH700132 org.hibernate.search.util.common.SearchException No matching supertype type for type identifier '%1$s'. Valid identifiers for indexed entity types are: %2$s
HSEARCH700133 org.hibernate.search.util.common.SearchException No parameter at index '%2$s' for constructor '%1$s'.
HSEARCH700134 org.hibernate.search.util.common.SearchException Multiple projections are mapped for this parameter. At most one projection is allowed for each parameter.
HSEARCH700135 org.hibernate.search.util.common.SearchException Incorrect binder implementation: binder '%1$s' did not call context.definition(...).
HSEARCH700136 org.hibernate.search.util.common.SearchException Invalid projection definition for constructor parameter type '%2$s': '%1$s'. This projection results in values of type '%3$s'.
HSEARCH700137 org.hibernate.search.util.common.SearchException Invalid multi-valued projection definition for constructor parameter type '%2$s': '%1$s'. This projection results in values of type '%3$s'.
HSEARCH700138 org.hibernate.search.util.common.SearchException Missing parameter names in Java metadata for projection constructor. When mapping a projection constructor parameter to a field projection without providing a field path, constructor parameter names must be known. Either make sure this class was compiled with the '-parameters' compiler flag, or set the path explicitly with '@FieldProjection(path = ...)'.
HSEARCH700139 org.hibernate.search.util.common.SearchException Missing parameter names in Java metadata for projection constructor. When mapping a projection constructor parameter to an object projection without providing a field path, constructor parameter names must be known. Either make sure this class was compiled with the '-parameters' compiler flag, or set the path explicitly with '@ObjectProjection(path = ...)'.
HSEARCH700140 org.hibernate.search.util.common.SearchException Missing parameter names in Java metadata for projection constructor. When mapping a projection constructor parameter to a highlight projection without providing a field path, constructor parameter names must be known. Either make sure this class was compiled with the '-parameters' compiler flag, or set the path explicitly with '@HighlightProjection(path = ...)'.
HSEARCH700141 org.hibernate.search.util.common.SearchException Invalid constructor parameter type: '%1$s'. The highlight projection results in values of type 'List'.
HSEARCH700142 org.hibernate.search.util.common.SearchException %1$s defines excludePaths filters that do not match anything. Non-matching excludePaths filters: %2$s. Encountered field paths: %3$s. Check the filters for typos, or remove them if they are not useful.
HSEARCH800001 org.hibernate.search.util.common.SearchException Hibernate Search was not initialized.
HSEARCH800003 org.hibernate.search.util.common.SearchException Invalid automatic indexing strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH800007 org.hibernate.search.util.common.SearchException Unable to resolve path '%1$s' to a persisted attribute in Hibernate ORM metadata. If this path points to a transient attribute, use @IndexingDependency(derivedFrom = ...) to specify which persisted attributes it is derived from. See the reference documentation for more information.
HSEARCH800008 org.hibernate.search.util.common.SearchException Path '%1$s' points to attribute '%2$s' that will never be reported as dirty by Hibernate ORM. Check that you didn't declare an invalid indexing dependency.
HSEARCH800009 org.hibernate.search.util.common.SearchException Unable to apply container value extractor with name '%2$s' to Hibernate ORM metadata node of type '%1$s'.
HSEARCH800011 org.hibernate.search.util.common.SearchException Unable to create a SearchSession for sessions created using a different session factory. Expected: '%1$s'. In use: '%2$s'.
HSEARCH800012 org.hibernate.search.util.common.SearchException Unable to retrieve property type model for '%1$s' on '%2$s': %3$s
HSEARCH800016 org.hibernate.search.util.common.SearchException Unable to access Hibernate ORM session: %1$s
HSEARCH800017 org.hibernate.search.util.common.SearchException Underlying Hibernate ORM Session is closed.
HSEARCH800018 org.hibernate.search.util.common.SearchException Invalid entity loading cache lookup strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH800019 DEBUG The entity loader for '%1$s' is ignoring the cache lookup strategy '%2$s', because document IDs are distinct from entity IDs and thus cannot be used for persistence context or second level cache lookups.
HSEARCH800020 DEBUG The entity loader for '%1$s' is ignoring the second-level cache even though it was instructed to use it, because caching is not enabled for this entity type.
HSEARCH800021 org.hibernate.search.util.common.SearchException Unable to access Hibernate ORM session factory: %1$s
HSEARCH800022 org.hibernate.search.util.common.SearchException Indexing failure: %1$s. The following entities may not have been updated correctly in the index: %2$s.
HSEARCH800023 org.hibernate.search.util.common.SearchException Unable to process entities for indexing before transaction completion: %1$s
HSEARCH800024 org.hibernate.search.util.common.SearchException Unable to index documents for indexing after transaction completion: %1$s
HSEARCH800025 org.hibernate.search.util.common.SearchException Unable to handle transaction: %1$s
HSEARCH800027 org.hibernate.search.util.common.SearchException Unknown type: '%1$s'. Available named types: %2$s. For entity types, the correct type name is the entity name. For component types (embeddeds, ...) in dynamic-map entities, the correct type name is name of the owner entity followed by a dot ('.') followed by the dot-separated path to the component, e.g. 'MyEntity.myEmbedded' or 'MyEntity.myEmbedded.myNestedEmbedded'.
HSEARCH800028 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. This is not the name of a Hibernate ORM entity type. Valid names for Hibernate ORM entity types are: %2$s
HSEARCH800029 org.hibernate.search.util.common.SearchException Invalid type for '%1$s': the entity type must extend '%2$s', but entity type '%3$s' does not.
HSEARCH800032 org.hibernate.search.util.common.SearchException Invalid schema management strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH800033 org.hibernate.search.util.common.SearchException No matching indexed entity type for class '%1$s'. Either this class is not an entity type, or the entity type is not indexed in Hibernate Search. Valid classes for indexed entity types are: %2$s
HSEARCH800034 org.hibernate.search.util.common.SearchException No matching indexed entity type for name '%1$s'. Either this is not the name of an entity type, or the entity type is not indexed in Hibernate Search. Valid names for indexed entity types are: %2$s
HSEARCH800035 ERROR Unable to shut down Hibernate Search: %1$s
HSEARCH800036 org.hibernate.search.util.common.SearchException Cannot use scroll() with scroll mode '%1$s' with Hibernate Search queries: only ScrollMode.FORWARDS_ONLY is supported.
HSEARCH800037 org.hibernate.search.util.common.SearchException Cannot scroll backwards with Hibernate Search scrolls: they are forwards-only. Ensure you always increment the scroll position, and never decrement it.
HSEARCH800038 org.hibernate.search.util.common.SearchException Cannot set the scroll position relative to the end with Hibernate Search scrolls. Ensure you always pass a positive number to setRowNumber().
HSEARCH800039 org.hibernate.search.util.common.SearchException Cannot use this ScrollableResults instance: it is closed.
HSEARCH800040 org.hibernate.search.util.common.SearchException Multiple instances of entity type '%1$s' have their property '%2$s' set to '%3$s'. '%2$s' is the document ID and must be assigned unique values.
HSEARCH800041 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException No such bean in bean container '%1$s'.
HSEARCH800042 org.hibernate.search.util.common.SearchException Cannot customize the indexing plan synchronization strategy: the selected coordination strategy always processes events asynchronously, through a queue.
HSEARCH800053 WARN Configuration property '%1$s' is deprecated; use '%2$s' instead.
HSEARCH800054 org.hibernate.search.util.common.SearchException Cannot determine the set of all possible tenant identifiers. You must provide this information by setting configuration property '%1$s' to a comma-separated string containing all possible tenant identifiers.
HSEARCH800055 org.hibernate.search.util.common.SearchException Cannot target tenant '%1$s' because this tenant identifier was not listed in the configuration provided on startup. To target this tenant, you must provide the tenant identifier through configuration property '%3$s', which should be set to a comma-separated string containing all possible tenant identifiers. Currently configured tenant identifiers: %2$s.
HSEARCH800056 INFO Ignoring unrecognized query hint [%s]
HSEARCH800057 org.hibernate.search.util.common.SearchException Cannot set the fetch size of Hibernate Search ScrollableResults after having created them. If you want to define the size of batches for entity loading, set loading options when defining the query instead, for example with .loading(o -> o.fetchSize(50)). See the reference documentation for more information.
HSEARCH800058 org.hibernate.search.util.common.SearchException No matching entity type for type identifier '%1$s'. Either this type is not an entity type, or the entity type is not mapped in Hibernate Search. Valid identifiers for mapped entity types are: %2$s
HSEARCH800059 org.hibernate.search.util.common.SearchException No matching indexed entity type for type identifier '%1$s'. Either this type is not an entity type, or the entity type is not indexed in Hibernate Search. Valid identifiers for indexed entity types are: %2$s
HSEARCH800060 org.hibernate.search.util.common.SearchException No matching entity type for class '%1$s'. Either this class is not an entity type, or the entity type is not mapped in Hibernate Search. Valid classes for mapped entity types are: %2$s
HSEARCH800061 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. Either this is not the name of an entity type, or the entity type is not mapped in Hibernate Search. Valid names for mapped entity types are: %2$s
HSEARCH800062 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. Either this is not the JPA name of an entity type, or the entity type is not mapped in Hibernate Search. Valid JPA names for mapped entities are: %2$s
HSEARCH800063 org.hibernate.search.util.common.SearchException No matching indexed entity type for name '%1$s'. Either this is not the JPA name of an entity type, or the entity type is not indexed in Hibernate Search. Valid JPA names for indexed entities are: %2$s
HSEARCH800064 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. Either this is not the Hibernate ORM name of an entity type, or the entity type is not mapped in Hibernate Search. Valid Hibernate ORM names for mapped entities are: %2$s
HSEARCH800121 WARN An unexpected failure occurred while resolving the representation of path '%1$s' in the entity state array, which is necessary to configure resolution of association inverse side for reindexing. This may lead to incomplete reindexing and thus out-of-sync indexes. The exception is being ignored to preserve backwards compatibility with earlier versions of Hibernate Search. Failure: %3$s %2$s
HSEARCH800122 org.hibernate.search.util.common.SearchException Both '%1$s' and '%2$s' are configured. Use only '%1$s' to set the indexing plan synchronization strategy.
HSEARCH800123 WARN Configuration property '%1$s' is deprecated; use '%2$s' instead.
HSEARCH800124 org.hibernate.search.util.common.SearchException Unable to apply the given filter at the session level with the outbox polling coordination strategy. With this coordination strategy, applying a session-level indexing plan filter is only allowed if it excludes all types.
HSEARCH800125 WARN Configuration property '%1$s' is deprecated. This setting will be removed in a future version. There will be no alternative provided to replace it. A dirty check will always be performed when considering triggering the reindexing.
HSEARCH800126 org.hibernate.search.util.common.SearchException Both '%1$s' and '%2$s' are configured. Use only '%2$s' to enable indexing listeners.
HSEARCH900000 java.lang.IllegalArgumentException '%1$s' must not be null.
HSEARCH900001 java.lang.IllegalArgumentException '%1$s' must not be null or empty.
HSEARCH900002 java.lang.IllegalArgumentException '%1$s' must be positive or zero.
HSEARCH900003 java.lang.IllegalArgumentException '%1$s' must not be null or empty.
HSEARCH900004 java.lang.IllegalArgumentException '%1$s' must not be null or empty.
HSEARCH900005 org.hibernate.search.util.common.SearchException Exception while invoking '%1$s' on '%2$s': %3$s.
HSEARCH900006 java.lang.IllegalArgumentException Requested type argument %3$s to type %2$s in implementing type %1$s, but %2$s doesn't declare any type parameter.
HSEARCH900007 java.lang.IllegalArgumentException Requested type argument %3$s to type %2$s in implementing type %1$s, but %2$s only declares %4$s type parameter(s).
HSEARCH900008 java.lang.IllegalArgumentException Requested type argument index %3$s to type %2$s in implementing type %1$s should be 0 or greater.
HSEARCH900009 INFO Unable to access the value of containing annotation '%1$s'. Ignoring annotation.
HSEARCH900010 java.lang.IllegalArgumentException '%1$s' must be strictly positive.
HSEARCH900011 java.lang.IllegalArgumentException '%1$s' must not contain any null element.
HSEARCH900012 org.hibernate.search.util.common.SearchException Exception while invoking '%1$s' with arguments %2$s: %3$s
HSEARCH900013 org.hibernate.search.util.common.SearchException Exception while accessing Jandex index for '%1$s': %2$s
HSEARCH900014 org.hibernate.search.util.common.SearchException Exception while building Jandex index for '%1$s': %2$s
HSEARCH900015 java.lang.IllegalArgumentException Property name '%1$s' cannot contain dots.
HSEARCH900016 java.io.IOException Cannot open filesystem for code source at '%1$s': %2$s
HSEARCH900017 java.io.IOException Cannot interpret '%1$s' as a local directory or JAR.
HSEARCH900018 java.io.IOException Cannot open a ZIP filesystem for code source at '%1$s', because the URI points to content inside a nested JAR.

HV

Code Level Return Type Message
HV000001 INFO Hibernate Validator %s
HV000002 DEBUG Ignoring XML configuration.
HV000003 DEBUG Using %s as constraint validator factory.
HV000004 DEBUG Using %s as message interpolator.
HV000005 DEBUG Using %s as traversable resolver.
HV000006 DEBUG Using %s as validation provider.
HV000007 DEBUG %s found. Parsing XML based configuration.
HV000008 WARN Unable to close input stream.
HV000010 WARN Unable to close input stream for %s.
HV000011 WARN Unable to create schema for %1$s: %2$s
HV000012 jakarta.validation.ValidationException Unable to create annotation for configured constraint
HV000013 jakarta.validation.ValidationException The class %1$s does not have a property '%2$s' with access %3$s.
HV000016 java.lang.IllegalArgumentException %s does not represent a valid BigDecimal format.
HV000017 java.lang.IllegalArgumentException The length of the integer part cannot be negative.
HV000018 java.lang.IllegalArgumentException The length of the fraction part cannot be negative.
HV000019 java.lang.IllegalArgumentException The min parameter cannot be negative.
HV000020 java.lang.IllegalArgumentException The max parameter cannot be negative.
HV000021 java.lang.IllegalArgumentException The length cannot be negative.
HV000022 java.lang.IllegalArgumentException Invalid regular expression.
HV000023 jakarta.validation.ConstraintDeclarationException Error during execution of script "%s" occurred.
HV000024 jakarta.validation.ConstraintDeclarationException Script "%s" returned null, but must return either true or false.
HV000025 jakarta.validation.ConstraintDeclarationException Script "%1$s" returned %2$s (of type %3$s), but must return either true or false.
HV000026 jakarta.validation.ValidationException Assertion error: inconsistent ConfigurationImpl construction.
HV000027 jakarta.validation.ValidationException Unable to find provider: %s.
HV000028 jakarta.validation.ValidationException Unexpected exception during isValid call.
HV000029 jakarta.validation.ValidationException Constraint factory returned null when trying to create instance of %s.
HV000030 jakarta.validation.UnexpectedTypeException No validator could be found for constraint '%s' validating type '%s'. Check configuration for '%s'
HV000031 jakarta.validation.UnexpectedTypeException There are multiple validator classes which could validate the type %1$s. The validator classes are: %2$s.
HV000032 jakarta.validation.ValidationException Unable to initialize %s.
HV000033 jakarta.validation.ValidationException At least one custom message must be created if the default error message gets disabled.
HV000034 java.lang.IllegalArgumentException %s is not a valid Java Identifier.
HV000035 java.lang.IllegalArgumentException Unable to parse property path %s.
HV000036 jakarta.validation.ValidationException Type %s not supported for unwrapping.
HV000037 jakarta.validation.ValidationException Inconsistent fail fast configuration. Fail fast enabled via programmatic API, but explicitly disabled via properties.
HV000038 java.lang.IllegalArgumentException Invalid property path.
HV000039 java.lang.IllegalArgumentException Invalid property path. Either there is no property %2$s in entity %1$s or it is not possible to cascade to the property.
HV000040 java.lang.IllegalArgumentException Property path must provide index or map key.
HV000041 jakarta.validation.ValidationException Call to TraversableResolver.isReachable() threw an exception.
HV000042 jakarta.validation.ValidationException Call to TraversableResolver.isCascadable() threw an exception.
HV000043 jakarta.validation.GroupDefinitionException Unable to expand default group list %1$s into sequence %2$s.
HV000044 java.lang.IllegalArgumentException At least one group has to be specified.
HV000045 jakarta.validation.ValidationException A group has to be an interface. %s is not.
HV000046 jakarta.validation.GroupDefinitionException Sequence definitions are not allowed as composing parts of a sequence.
HV000047 jakarta.validation.GroupDefinitionException Cyclic dependency in groups definition
HV000048 jakarta.validation.GroupDefinitionException Unable to expand group sequence.
HV000052 jakarta.validation.GroupDefinitionException Default group sequence and default group sequence provider cannot be defined at the same time.
HV000053 jakarta.validation.GroupDefinitionException 'Default.class' cannot appear in default group sequence list.
HV000054 jakarta.validation.GroupDefinitionException %s must be part of the redefined default group sequence.
HV000055 jakarta.validation.GroupDefinitionException The default group sequence provider defined for %s has the wrong type
HV000056 java.lang.IllegalArgumentException Method or constructor %1$s doesn't have a parameter with index %2$d.
HV000059 jakarta.validation.ValidationException Unable to retrieve annotation parameter value.
HV000062 java.lang.IllegalArgumentException Method or constructor %1$s has %2$s parameters, but the passed list of parameter meta data has a size of %3$s.
HV000063 jakarta.validation.ValidationException Unable to instantiate %s.
HV000064 jakarta.validation.ValidationException Unable to instantiate %1$s: %2$s.
HV000065 jakarta.validation.ValidationException Unable to load class: %s from %s.
HV000068 java.lang.IllegalArgumentException Start index cannot be negative: %d.
HV000069 java.lang.IllegalArgumentException End index cannot be negative: %d.
HV000070 java.lang.IllegalArgumentException Invalid Range: %1$d > %2$d.
HV000071 java.lang.IllegalArgumentException A explicitly specified check digit must lie outside the interval: [%1$d, %2$d].
HV000072 java.lang.NumberFormatException '%c' is not a digit.
HV000073 jakarta.validation.ConstraintDefinitionException Parameters starting with 'valid' are not allowed in a constraint.
HV000074 jakarta.validation.ConstraintDefinitionException %2$s contains Constraint annotation, but does not contain a %1$s parameter.
HV000075 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the payload parameter default value is not the empty array.
HV000076 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the payload parameter is of wrong type.
HV000077 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the groups parameter default value is not the empty array.
HV000078 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the groups parameter is of wrong type.
HV000079 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the message parameter is not of type java.lang.String.
HV000080 jakarta.validation.ConstraintDefinitionException Overridden constraint does not define an attribute with name %s.
HV000081 jakarta.validation.ConstraintDefinitionException The overriding type of a composite constraint must be identical to the overridden one. Expected %1$s found %2$s.
HV000082 jakarta.validation.ValidationException Wrong type for attribute '%2$s' of annotation %1$s. Expected: %3$s. Actual: %4$s.
HV000083 jakarta.validation.ValidationException The specified annotation %1$s defines no attribute '%2$s'.
HV000084 jakarta.validation.ValidationException Unable to get attribute '%2$s' from annotation %1$s.
HV000085 java.lang.IllegalArgumentException No value provided for attribute '%1$s' of annotation @%2$s.
HV000086 java.lang.RuntimeException Trying to instantiate annotation %1$s with unknown attribute(s): %2$s.
HV000087 java.lang.IllegalArgumentException Property name cannot be null or empty.
HV000088 java.lang.IllegalArgumentException Element type has to be FIELD or METHOD.
HV000089 java.lang.IllegalArgumentException Member %s is neither a field nor a method.
HV000090 jakarta.validation.ValidationException Unable to access %s.
HV000091 java.lang.IllegalArgumentException %s has to be a primitive type.
HV000093 jakarta.validation.ValidationException null is an invalid type for a constraint validator.
HV000094 java.lang.IllegalArgumentException Missing actual type argument for type parameter: %s.
HV000095 jakarta.validation.ValidationException Unable to instantiate constraint factory class %s.
HV000096 jakarta.validation.ValidationException Unable to open input stream for mapping file %s.
HV000097 jakarta.validation.ValidationException Unable to instantiate message interpolator class %s.
HV000098 jakarta.validation.ValidationException Unable to instantiate traversable resolver class %s.
HV000099 jakarta.validation.ValidationException Unable to instantiate validation provider class %s.
HV000100 jakarta.validation.ValidationException Unable to parse %s.
HV000101 jakarta.validation.ValidationException %s is not an annotation.
HV000102 jakarta.validation.ValidationException %s is not a constraint validator class.
HV000103 jakarta.validation.ValidationException %s is configured at least twice in xml.
HV000104 jakarta.validation.ValidationException %1$s is defined twice in mapping xml for bean %2$s.
HV000105 jakarta.validation.ValidationException %1$s does not contain the fieldType %2$s.
HV000106 jakarta.validation.ValidationException %1$s does not contain the property %2$s.
HV000107 jakarta.validation.ValidationException Annotation of type %1$s does not contain a parameter %2$s.
HV000108 jakarta.validation.ValidationException Attempt to specify an array where single value is expected.
HV000109 jakarta.validation.ValidationException Unexpected parameter value.
HV000110 jakarta.validation.ValidationException Invalid %s format.
HV000111 jakarta.validation.ValidationException Invalid char value: %s.
HV000112 jakarta.validation.ValidationException Invalid return type: %s. Should be a enumeration type.
HV000113 jakarta.validation.ValidationException %s, %s, %s are reserved parameter names.
HV000114 jakarta.validation.ValidationException Specified payload class %s does not implement jakarta.validation.Payload
HV000115 jakarta.validation.ValidationException Error parsing mapping file.
HV000116 java.lang.IllegalArgumentException %s
HV000118 java.lang.ClassCastException Unable to cast %s (with element kind %s) to %s
HV000119 DEBUG Using %s as parameter name provider.
HV000120 jakarta.validation.ValidationException Unable to instantiate parameter name provider class %s.
HV000121 jakarta.validation.ValidationException Unable to parse %s.
HV000122 jakarta.validation.ValidationException Unsupported schema version for %s: %s.
HV000124 jakarta.validation.ConstraintDeclarationException Found multiple group conversions for source group %s: %s.
HV000125 jakarta.validation.ConstraintDeclarationException Found group conversions for non-cascading element at: %s.
HV000127 jakarta.validation.ConstraintDeclarationException Found group conversion using a group sequence as source at: %s.
HV000129 WARN EL expression '%s' references an unknown property
HV000130 WARN Error in EL expression '%s'
HV000131 jakarta.validation.ConstraintDeclarationException A method return value must not be marked for cascaded validation more than once in a class hierarchy, but the following two methods are marked as such: %s, %s.
HV000132 jakarta.validation.ConstraintDeclarationException Void methods must not be constrained or marked for cascaded validation, but method %s is.
HV000133 jakarta.validation.ValidationException %1$s does not contain a constructor with the parameter types %2$s.
HV000134 jakarta.validation.ValidationException Unable to load parameter of type '%1$s' in %2$s.
HV000135 jakarta.validation.ValidationException %1$s does not contain a method with the name '%2$s' and parameter types %3$s.
HV000136 jakarta.validation.ValidationException The specified constraint annotation class %1$s cannot be loaded.
HV000137 jakarta.validation.ValidationException The method '%1$s' is defined twice in the mapping xml for bean %2$s.
HV000138 jakarta.validation.ValidationException The constructor '%1$s' is defined twice in the mapping xml for bean %2$s.
HV000139 jakarta.validation.ConstraintDefinitionException The constraint '%1$s' defines multiple cross parameter validators. Only one is allowed.
HV000141 jakarta.validation.ConstraintDeclarationException The constraint %1$s used ConstraintTarget#IMPLICIT where the target cannot be inferred.
HV000142 jakarta.validation.ConstraintDeclarationException Cross parameter constraint %1$s is illegally placed on a parameterless method or constructor '%2$s'.
HV000143 jakarta.validation.ConstraintDeclarationException Cross parameter constraint %1$s is illegally placed on class level.
HV000144 jakarta.validation.ConstraintDeclarationException Cross parameter constraint %1$s is illegally placed on field '%2$s'.
HV000146 java.lang.IllegalStateException No parameter nodes may be added since path %s doesn't refer to a cross-parameter constraint.
HV000147 jakarta.validation.ValidationException %1$s is configured multiple times (note, and nodes for the same method are not allowed)
HV000148 WARN An exception occurred during evaluation of EL expression '%s'
HV000149 jakarta.validation.ValidationException An exception occurred during message interpolation
HV000150 jakarta.validation.UnexpectedTypeException The constraint %1$s defines multiple validators for the type %2$s: %3$s, %4$s. Only one is allowed.
HV000151 jakarta.validation.ConstraintDeclarationException A method overriding another method must not redefine the parameter constraint configuration, but method %2$s redefines the configuration of %1$s.
HV000152 jakarta.validation.ConstraintDeclarationException Two methods defined in parallel types must not declare parameter constraints, if they are overridden by the same method, but methods %s and %s both define parameter constraints.
HV000153 jakarta.validation.ConstraintDeclarationException The constraint %1$s used ConstraintTarget#%2$s but is not specified on a method or constructor.
HV000154 jakarta.validation.ConstraintDefinitionException Cross parameter constraint %1$s has no cross-parameter validator.
HV000155 jakarta.validation.ConstraintDefinitionException Composed and composing constraints must have the same constraint type, but composed constraint %1$s has type %3$s, while composing constraint %2$s has type %4$s.
HV000156 jakarta.validation.ConstraintDefinitionException Constraints with generic as well as cross-parameter validators must define an attribute validationAppliesTo(), but constraint %s doesn't.
HV000157 jakarta.validation.ConstraintDefinitionException Return type of the attribute validationAppliesTo() of the constraint %s must be jakarta.validation.ConstraintTarget.
HV000158 jakarta.validation.ConstraintDefinitionException Default value of the attribute validationAppliesTo() of the constraint %s must be ConstraintTarget#IMPLICIT.
HV000159 jakarta.validation.ConstraintDefinitionException Only constraints with generic as well as cross-parameter validators must define an attribute validationAppliesTo(), but constraint %s does.
HV000160 jakarta.validation.ConstraintDefinitionException Validator for cross-parameter constraint %s does not validate Object nor Object[].
HV000161 jakarta.validation.ConstraintDeclarationException Two methods defined in parallel types must not define group conversions for a cascaded method return value, if they are overridden by the same method, but methods %s and %s both define parameter constraints.
HV000162 java.lang.IllegalArgumentException The validated type %1$s does not specify the constructor/method: %2$s
HV000163 java.lang.IllegalArgumentException The actual parameter type '%1$s' is not assignable to the expected one '%2$s' for parameter %3$d of '%4$s'
HV000164 java.lang.IllegalArgumentException %s has to be a auto-boxed type.
HV000165 java.lang.IllegalArgumentException Mixing IMPLICIT and other executable types is not allowed.
HV000166 jakarta.validation.ValidationException @ValidateOnExecution is not allowed on methods overriding a superclass method or implementing an interface. Check configuration for %1$s
HV000167 jakarta.validation.ValidationException A given constraint definition can only be overridden in one mapping file. %1$s is overridden in multiple files
HV000168 org.hibernate.validator.internal.engine.messageinterpolation.parser.MessageDescriptorFormatException The message descriptor '%1$s' contains an unbalanced meta character '%2$c'.
HV000169 org.hibernate.validator.internal.engine.messageinterpolation.parser.MessageDescriptorFormatException The message descriptor '%1$s' has nested parameters.
HV000170 jakarta.validation.ConstraintDeclarationException No JSR-223 scripting engine could be bootstrapped for language "%s".
HV000171 jakarta.validation.ValidationException %s is configured more than once via the programmatic constraint declaration API.
HV000172 jakarta.validation.ValidationException Property "%2$s" of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000173 jakarta.validation.ValidationException Method %2$s of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000174 jakarta.validation.ValidationException Parameter %3$s of method or constructor %2$s of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000175 jakarta.validation.ValidationException The return value of method or constructor %2$s of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000176 jakarta.validation.ValidationException Constructor %2$s of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000177 jakarta.validation.ValidationException Cross-parameter constraints for the method or constructor %2$s of type %1$s are declared more than once via the programmatic constraint declaration API.
HV000178 java.lang.IllegalArgumentException Multiplier cannot be negative: %d.
HV000179 java.lang.IllegalArgumentException Weight cannot be negative: %d.
HV000180 java.lang.IllegalArgumentException '%c' is not a digit nor a letter.
HV000181 java.lang.IllegalArgumentException Wrong number of parameters. Method or constructor %1$s expects %2$d parameters, but got %3$d.
HV000182 jakarta.validation.ValidationException No validation value unwrapper is registered for type '%1$s'.
HV000183 jakarta.validation.ValidationException Unable to initialize 'jakarta.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead
HV000185 WARN Message contains EL expression: %1s, which is not supported by the selected message interpolator
HV000189 jakarta.validation.ConstraintDeclarationException The configuration of value unwrapping for property '%s' of bean '%s' is inconsistent between the field and its getter.
HV000190 jakarta.validation.ValidationException Unable to parse %s.
HV000192 WARN Couldn't determine Java version from value %1s; Not enabling features requiring Java 8
HV000193 jakarta.validation.ValidationException %s is configured more than once via the programmatic constraint definition API.
HV000194 jakarta.validation.ValidationException An empty element is only supported when a CharSequence is expected.
HV000195 jakarta.validation.ValidationException Unable to reach the property to validate for the bean %s and the property path %s. A property is null along the way.
HV000196 jakarta.validation.ValidationException Unable to convert the Type %s to a Class.
HV000197 jakarta.validation.ConstraintDeclarationException No value extractor found for type parameter '%2$s' of type %1$s.
HV000198 jakarta.validation.ConstraintDeclarationException No suitable value extractor found for type %1$s.
HV000200 DEBUG Using %s as clock provider.
HV000201 jakarta.validation.ValidationException Unable to instantiate clock provider class %s.
HV000202 jakarta.validation.ValidationException Unable to get the current time from the clock provider
HV000203 jakarta.validation.valueextraction.ValueExtractorDefinitionException Value extractor type %1s fails to declare the extracted type parameter using @ExtractedValue.
HV000204 jakarta.validation.valueextraction.ValueExtractorDefinitionException Only one type parameter must be marked with @ExtractedValue for value extractor type %1s.
HV000205 jakarta.validation.ConstraintDeclarationException Invalid unwrapping configuration for constraint %2$s on %1$s. You can only define one of 'Unwrapping.Skip' or 'Unwrapping.Unwrap'.
HV000206 jakarta.validation.ValidationException Unable to instantiate value extractor class %s.
HV000207 DEBUG Adding value extractor %s.
HV000208 jakarta.validation.valueextraction.ValueExtractorDeclarationException Given value extractor %2$s handles the same type and type use as previously given value extractor %1$s.
HV000209 jakarta.validation.ConstraintDeclarationException A composing constraint (%2$s) must not be given directly on the composed constraint (%1$s) and using the corresponding List annotation at the same time.
HV000210 java.lang.IllegalArgumentException Unable to find the type parameter %2$s in class %1$s.
HV000211 jakarta.validation.ValidationException Given type is neither a parameterized nor an array type: %s.
HV000212 jakarta.validation.ValidationException Given type has no type argument with index %2$s: %1$s.
HV000213 jakarta.validation.ValidationException Given type has more than one type argument, hence an argument index must be specified: %s.
HV000214 jakarta.validation.ValidationException The same container element type of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000215 jakarta.validation.ValidationException Calling parameter() is not allowed for the current element.
HV000216 jakarta.validation.ValidationException Calling returnValue() is not allowed for the current element.
HV000217 jakarta.validation.ValidationException The same container element type %2$s is configured more than once for location %1$s via the XML mapping configuration.
HV000218 jakarta.validation.valueextraction.ValueExtractorDefinitionException Having parallel definitions of value extractors on a given class is not allowed: %s.
HV000219 jakarta.validation.ConstraintDeclarationException Unable to get the most specific value extractor for type %1$s as several most specific value extractors are declared: %2$s.
HV000220 jakarta.validation.valueextraction.ValueExtractorDefinitionException When @ExtractedValue is defined on a type parameter of a container type, the type attribute may not be set: %1$s.
HV000221 jakarta.validation.ValidationException An error occurred while extracting values in value extractor %1$s.
HV000222 jakarta.validation.valueextraction.ValueExtractorDeclarationException The same value extractor %s is added more than once via the XML configuration.
HV000223 jakarta.validation.ConstraintDeclarationException Implicit unwrapping is not allowed for type %1$s as several maximally specific value extractors marked with @UnwrapByDefault are declared: %2$s.
HV000224 jakarta.validation.ValidationException Unwrapping of ConstraintDescriptor is not supported yet.
HV000225 jakarta.validation.valueextraction.ValueExtractorDefinitionException Only unbound wildcard type arguments are supported for the container type of the value extractor: %1$s.
HV000226 jakarta.validation.ValidationException Container element constraints and cascading validation are not supported on arrays: %1$s
HV000227 java.lang.IllegalArgumentException The validated type %1$s does not specify the property: %2$s
HV000228 jakarta.validation.ConstraintDeclarationException No value extractor found when narrowing down to the runtime type %3$s among the value extractors for type parameter '%2$s' of type %1$s.
HV000229 java.lang.ClassCastException Unable to cast %1$s to %2$s.
HV000230 DEBUG Using %s as script evaluator factory.
HV000231 jakarta.validation.ValidationException Unable to instantiate script evaluator factory class %s.
HV000232 org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException No JSR 223 script engine found for language "%s".
HV000233 org.hibernate.validator.spi.scripting.ScriptEvaluationException An error occurred while executing the script: "%s".
HV000234 DEBUG Using %1$s as ValidatorFactory-scoped %2$s.
HV000235 jakarta.validation.ValidationException Unable to create an annotation descriptor for %1$s.
HV000236 jakarta.validation.ValidationException Unable to find the method required to create the constraint annotation descriptor.
HV000237 jakarta.validation.ValidationException Unable to access method %3$s of class %2$s with parameters %4$s using lookup %1$s.
HV000238 DEBUG Temporal validation tolerance set to %1$s.
HV000239 jakarta.validation.ValidationException Unable to parse the temporal validation tolerance property %s. It should be a duration represented in milliseconds.
HV000240 DEBUG Constraint validator payload set to %1$s.
HV000241 jakarta.validation.ValidationException Encountered unsupported element %1$s while parsing the XML configuration.
HV000242 WARN Unable to load or instantiate JPA aware resolver %1$s. All properties will per default be traversable.
HV000243 jakarta.validation.ConstraintDefinitionException Constraint %2$s references constraint validator type %1$s, but this validator is defined for constraint type %3$s.
HV000244 java.lang.AssertionError ConstrainedElement expected class was %1$s, but instead received %2$s.
HV000245 java.lang.AssertionError Allowed constraint element types are FIELD and GETTER, but instead received %1$s.
HV000246 DEBUG Using %s as getter property selection strategy.
HV000247 jakarta.validation.ValidationException Unable to instantiate getter property selection strategy class %s.
HV000248 jakarta.validation.ValidationException Unable to get an XML schema named %s.
HV000250 jakarta.validation.ValidationException Uninitialized locale: %s. Please register your locale as a locale to initialize when initializing your ValidatorFactory.
HV000251 ERROR An error occurred while loading an instance of service %s.
HV000252 DEBUG Using %s as property node name provider.
HV000253 jakarta.validation.ValidationException Unable to instantiate property node name provider class %s.
HV000254 WARN Missing parameter metadata for %s, which declares implicit or synthetic parameters. Automatic resolution of generic type information for method parameters may yield incorrect results if multiple parameters have the same erasure. To solve this, compile your code with the '-parameters' flag.
HV000255 DEBUG Using %s as locale resolver.
HV000256 jakarta.validation.ValidationException Unable to instantiate locale resolver class %s.
HV000257 WARN Expression variables have been defined for constraint %1$s while Expression Language is not enabled.
HV000258 java.lang.IllegalStateException Expressions should not be resolved when Expression Language features are disabled.
HV000259 java.lang.IllegalStateException Provided Expression Language feature level is not supported.
HV000260 DEBUG Expression Language feature level for constraints set to %1$s.
HV000261 DEBUG Expression Language feature level for custom violations set to %1$s.
HV000262 jakarta.validation.ValidationException Unable to find an expression language feature level for value %s.
HV000263 WARN EL expression '%s' references an unknown method.
HV000264 ERROR Unable to interpolate EL expression '%s' as it uses a disabled feature.
HV000265 jakarta.validation.ValidationException Inconsistent show validation value in trace logs configuration. It is enabled via programmatic API, but explicitly disabled via properties.

IJ

Code Level Return Type Message
IJ000100 INFO Closing a connection for you. Please close them yourself: %s
IJ000102 INFO Throwable trying to close a connection for you, please close it yourself
IJ000103 INFO Could not find a close method on alleged connection object (%s). Please close your own connections
IJ000201 ERROR SecurityContext setup failed: %s
IJ000202 ERROR SecurityContext setup failed since CallbackSecurity was null
IJ000301 INFO Registered a null handle for managed connection: %s
IJ000302 INFO Unregistered handle that was not registered: %s for managed connection: %s
IJ000303 INFO Unregistered a null handle for managed connection: %s
IJ000305 WARN Connection error occured: %s
IJ000306 WARN Unknown connection error occured: %s
IJ000307 WARN Notified of error on a different managed connection
IJ000311 INFO Throwable from unregister connection
IJ000312 ERROR Error while closing connection handle
IJ000313 ERROR There is something wrong with the pooling
IJ000314 WARN Error during beforeCompletion: %s
IJ000315 ERROR Pool %s has %d active handles
IJ000316 ERROR Handle allocation: %s
IJ000317 ERROR Transaction boundary
IJ000318 ERROR Delisting resource in pool %s failed
IJ000401 WARN Error during tidy up connection: %s
IJ000402 WARN ResourceException in returning connection: %s
IJ000403 WARN Reconnecting a connection handle that still has a managed connection: %s %s
IJ000404 WARN Unchecked throwable in managedConnectionDisconnected() cl=%s
IJ000405 WARN Multiple LocalTransaction connection listeners enlisted for %s, cl=%s
IJ000406 ERROR Throwable in returning connection: %s
IJ000407 WARN No lazy enlistment available for %s
IJ000408 WARN Deprecated pool: %s, using %s instead
IJ000501 WARN Thread %s is not the enlisting thread %s
IJ000502 WARN Transaction %s error in beforeCompletion %s
IJ000503 WARN Transaction %s error in afterCompletion %s
IJ000504 WARN Transaction not found: %s
IJ000601 INFO ConnectionValidator has been interrupted
IJ000602 WARN ConnectionValidator ignored unexpected runtime exception
IJ000603 WARN ConnectionValidator ignored unexpected error
IJ000604 WARN Throwable while attempting to get a new connection: %s
IJ000605 WARN Destroying connection that could not be successfully matched %s for %s
IJ000606 WARN Throwable while trying to match managed connection, destroying connection: %s
IJ000607 WARN ResourceException cleaning up managed connection: %s
IJ000608 WARN Destroying returned connection, maximum pool size exceeded %s
IJ000609 WARN Attempt to return connection twice: %s
IJ000610 WARN Unable to fill pool: %s
IJ000611 WARN Warning: Background validation was specified with a non compliant ManagedConnectionFactory interface
IJ000612 WARN Destroying connection that could not be successfully matched: %s
IJ000613 WARN Throwable while trying to match managed connection, destroying connection: %s
IJ000614 ERROR Exception during createSubject() for %s: %s
IJ000615 WARN Destroying active connection in pool: %s (%s)
IJ000616 ERROR Leak detected in pool: %s (%s) (%d)
IJ000617 WARN Invalid incrementer capacity policy: %s
IJ000618 WARN Invalid decrementer capacity policy: %s
IJ000619 WARN Invalid property '%s' with value '%s' for %s
IJ000620 WARN Warning: ValidateOnMatch validation was specified with a non compliant ManagedConnectionFactory: %s
IJ000621 WARN Destroying connection that could not be validated: %s
IJ000622 WARN Unsupported pool implementation: %s
IJ000701 WARN Exception during unbind
IJ000901 WARN Error during connection close
IJ000902 ERROR Error during inflow crash recovery for '%s' (%s)
IJ000903 ERROR Error creating Subject for crash recovery: %s (%s)
IJ000904 WARN No security domain defined for crash recovery: %s
IJ000905 WARN Subject for crash recovery was null: %s
IJ000906 ERROR Error during crash recovery: %s (%s)
IJ001001 WARN No users.properties were found
IJ001002 ERROR Error while loading users.properties
IJ001003 WARN No roles.properties were found
IJ001004 ERROR Error while loading roles.properties
IJ001005 WARN No callback.properties were found
IJ001006 ERROR Error while loading callback.properties
IJ001101 WARN Prepare called on a local tx. Use of local transactions on a JTA transaction with more than one branch may result in inconsistent data in some cases of failure
IJ010001 ERROR Parsing error of ra.xml file: %s
IJ010002 ERROR Parsing error of ironjacamar.xml file: %s
IJ010003 ERROR No @Connector was found and no definition in the ra.xml metadata either
IJ010004 ERROR More than one @Connector was found but the correct one wasn't defined in the ra.xml metadata
IJ010005 WARN Datasource pools with allow-multiple-users cannot be prefilled. Prefill setting will be ignored.
IJ020001 INFO Required license terms for %s
IJ020002 INFO Deployed: %s
IJ020003 WARN Failure during validation report generation: %s
IJ020004 WARN Only one connection definition found with a mismatch in class-name: %s
IJ020005 WARN Only one admin object found with a mismatch in class-name: %s
IJ020006 ERROR ConnectionFactory is null
IJ020007 ERROR Exception during createSubject(): %s
IJ020008 WARN Invalid config-property: %s
IJ020009 WARN Invalid connection definition with class-name: %s
IJ020010 ERROR Connection definition with missing class-name
IJ020011 ERROR Admin object with missing class-name
IJ020012 WARN Admin object not bound: %s
IJ020013 WARN Connection factory not bound: %s
IJ020014 INFO Admin object not specification compliant. See 13.4.2.3 for additional details: %s
IJ020015 INFO Connection factory not specification compliant. See 6.5.1.3 for additional details: %s
IJ020016 WARN Missing element. XA recovery disabled for: %s
IJ020017 WARN Invalid archive: %s
IJ020018 INFO Enabling for %s
IJ020019 INFO Changed TransactionSupport for %s
IJ020020 WARN Connection Properties for DataSource: '%s' is empty, try to use driver-class: '%s' and connection-url: '%s' to connect database
IJ030000 WARN Unable to load connection listener: %s
IJ030001 WARN Disabling exception sorter for: %s
IJ030002 WARN Disabling exception sorter for: %s
IJ030003 WARN Error checking exception fatality for: %s
IJ030004 WARN Disabling validation connection checker for: %s
IJ030005 WARN Disabling validation connection checker for: %s
IJ030006 WARN Disabling stale connection checker for: %s
IJ030007 WARN Disabling stale connection checker for: %s
IJ030008 WARN HA setup detected for %s
IJ030020 WARN Detected queued threads during cleanup from: %s
IJ030021 WARN Queued thread: %s
IJ030022 WARN Lock owned during cleanup: %s
IJ030023 WARN Lock is locked during cleanup without an owner
IJ030024 WARN Error resetting transaction isolation for: %s
IJ030025 WARN Error during connection listener activation for: %s
IJ030026 WARN Error during connection listener passivation for: %s
IJ030027 WARN Destroying connection that is not valid, due to the following exception: %s
IJ030028 WARN Error notifying of connection error for listener: %s
IJ030040 WARN Closing a statement you left open, please do your own housekeeping for: %s
IJ030041 WARN Error during closing a statement for: %s
IJ030042 WARN Closing a result set you left open, please do your own housekeeping for: %s
IJ030043 WARN Error during closing a result set for: %s
IJ030050 WARN Error creating connection for: %s
IJ030051 ERROR Unable to load undefined URLSelectStrategy for: %s
IJ030052 ERROR Unable to load %s URLSelectStrategy for: %s
IJ030053 ERROR Unable to load %s URLSelectStrategy for: %s
IJ030054 WARN Error creating XA connection for: %s
IJ030055 ERROR Unable to load undefined URLXASelectStrategy for: %s
IJ030056 ERROR Unable to load %s URLXASelectStrategy for: %s
IJ030057 ERROR Unable to load %s URLXASelectStrategy for: %s
IJ030060 WARN Error checking state
IJ030061 WARN Error resetting auto-commit for: %s

IPROTO

Code Level Return Type Message
IPROTO000001 WARN Field %s was read out of sequence leading to sub-optimal performance
IPROTO000002 WARN Field %s was written out of sequence and will lead to sub-optimal read performance
IPROTO000003 org.infinispan.protostream.MalformedProtobufException Input data ended unexpectedly in the middle of a field. The message is corrupt.
IPROTO000004 org.infinispan.protostream.MalformedProtobufException Encountered a malformed varint.
IPROTO000005 org.infinispan.protostream.MalformedProtobufException Encountered a length delimited field with negative length.
IPROTO000006 org.infinispan.protostream.MalformedProtobufException Protobuf message appears to be larger than the configured limit. The message is possibly corrupt.
IPROTO000007 java.io.IOException Ran out of buffer space
IPROTO000008 org.infinispan.protostream.exception.ProtoStreamException The nested message depth appears to be larger than the configured limit of '%s'.It is possible that the entity to marshall with type '%s' can have some circular dependencies.

ISPN

Code Level Return Type Message
ISPN-00001 org.infinispan.commons.CacheConfigurationException Cannot instantiate class '%s'
ISPN000016 ERROR Problem encountered when applying state for key %s!
ISPN000021 WARN Expected just one response; got %s
ISPN000025 INFO wakeUpInterval is <= 0, not starting expired purge thread
ISPN000026 WARN Caught exception purging data container!
ISPN000028 WARN Unable to passivate entry under %s
ISPN000034 org.infinispan.jmx.JmxDomainConflictException The '%s' JMX domain is already in use.
ISPN000036 WARN Did not find attribute %s
ISPN000037 WARN Failed to update attribute name %s with value %s
ISPN000042 WARN Did not find queried attribute with name %s
ISPN000043 WARN Exception while writing value for attribute %s
ISPN000044 WARN Could not invoke set on attribute %s with value %s
ISPN000046 ERROR Unknown responses from remote cache: %s
ISPN000047 ERROR Error while doing remote call
ISPN000048 ERROR Interrupted or timeout while waiting for AsyncCacheWriter worker threads to push all state to the decorated store
ISPN000052 ERROR Interrupted on acquireLock for %d milliseconds!
ISPN000053 WARN Unable to process some async modifications after %d retries!
ISPN000055 ERROR Unexpected error in AsyncStoreCoordinator thread. AsyncCacheWriter is dead!
ISPN000065 ERROR Exception while marshalling object: %s
ISPN000071 WARN Caught exception when handling command %s
ISPN000073 ERROR Unexpected error while replicating
ISPN000078 INFO Starting JGroups channel `%s`
ISPN000078 INFO Starting JGroups channel `%s` with stack `%s`
ISPN000079 INFO Channel `%s` local address is `%s`, physical addresses are `%s`
ISPN000080 INFO Disconnecting JGroups channel `%s`
ISPN000081 ERROR Problem closing channel `%s`; setting it to null
ISPN000083 ERROR Class [%s] cannot be cast to JGroupsChannelLookup! Not using a channel lookup.
ISPN000084 ERROR Errors instantiating [%s]! Not using a channel lookup.
ISPN000085 org.infinispan.commons.CacheConfigurationException Error while trying to create a channel using the specified configuration file: %s
ISPN000086 org.infinispan.commons.CacheConfigurationException Error while trying to create a channel using the specified configuration XML: %s
ISPN000087 org.infinispan.commons.CacheConfigurationException Error while trying to create a channel using the specified configuration string: %s
ISPN000088 INFO Unable to use any JGroups configuration mechanisms provided in properties %s. Using default JGroups configuration!
ISPN000089 ERROR getCoordinator(): Interrupted while waiting for members to be set
ISPN000093 INFO Received new, MERGED cluster view for channel %s: %s
ISPN000094 INFO Received new cluster view for channel %s: %s
ISPN000097 ERROR Error while processing a prepare in a single-phase transaction
ISPN000098 ERROR Exception during rollback
ISPN000100 WARN Stopping, but there are %s local transactions and %s remote transactions that did not finish in time.
ISPN000101 WARN Failed synchronization registration
ISPN000102 WARN Unable to roll back global transaction %s
ISPN000104 INFO Using EmbeddedTransactionManager
ISPN000105 ERROR Failed creating initial JNDI context
ISPN000107 INFO Retrieving transaction manager %s
ISPN000108 ERROR Error enlisting resource
ISPN000109 ERROR beforeCompletion() failed for %s
ISPN000110 ERROR Unexpected error from resource manager!
ISPN000111 ERROR afterCompletion() failed for %s
ISPN000112 WARN exception while committing
ISPN000115 WARN Recovery call will be ignored as recovery is disabled. More on recovery: http://community.jboss.org/docs/DOC-16646
ISPN000116 WARN Missing the list of prepared transactions from node %s. Received response is %s
ISPN000117 ERROR There's already a prepared transaction with this xid: %s. New transaction is %s. Are there two different transactions having same Xid in the cluster?
ISPN000121 ERROR Unable to set value!
ISPN000126 WARN Attempted to stop() from FAILED state, but caught exception
ISPN000128 DEBUG Infinispan version: %s
ISPN000133 WARN Attempted to register listener of class %s, but no valid, public methods annotated with method-level event annotations found! Ignoring listener.
ISPN000134 WARN Unable to invoke method %s on Object instance %s - removing this target object from list of listeners!
ISPN000135 WARN Could not lock key %s in order to invalidate from L1 at node %s, skipping....
ISPN000136 ERROR Error executing command %s on %s, writing keys %s
ISPN000137 INFO Failed invalidating remote cache
ISPN000141 WARN Could not rollback prepared 1PC transaction. This transaction will be rolled back by the recovery process, if enabled. Transaction: %s
ISPN000144 WARN Failed loading value for key %s from cache store
ISPN000147 ERROR Error invalidating keys from L1 after rehash
ISPN000149 WARN Fetch persistent state and purge on startup are both disabled, cache may contain stale entries on startup
ISPN000152 INFO Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
ISPN000160 WARN Could not complete injected transaction.
ISPN000161 INFO Using a batchMode transaction manager
ISPN000162 INFO Could not instantiate transaction manager
ISPN000177 WARN %s has been deprecated as a synonym for %s. Use one of %s instead
ISPN000188 ERROR Error while processing a commit in a two-phase transaction
ISPN000189 WARN While stopping a cache or cache manager, one of its components failed to stop
ISPN000194 WARN Failed loading keys from cache store
ISPN000195 ERROR Error during rebalance for cache %s on node %s, topology id = %d
ISPN000196 WARN Failed to recover cluster state after the current node became the coordinator (or after merge), will retry
ISPN000197 WARN Error updating cluster member list for view %d, waiting for next view
ISPN000201 TRACE This cache is configured to backup to its own site (%s).
ISPN000202 WARN Encountered issues while backing up data for cache %s to site %s
ISPN000203 WARN The rollback request for tx %s cannot be processed by the cache %s as this cache is not transactional!
ISPN000204 WARN The commit request for tx %s cannot be processed by the cache %s as this cache is not transactional!
ISPN000205 WARN Trying to bring back an non-existent site (%s)!
ISPN000207 WARN Could not interrupt as no thread found for command uuid %s
ISPN000208 ERROR No live owners found for segments %s of cache %s. Excluded owners: %s
ISPN000209 WARN Failed to retrieve transactions of cache %s from node %s, segments %s
ISPN000210 WARN Failed to request state of cache %s from node %s, segments %s
ISPN000214 WARN Unable to remove entry under %s from cache store after activation
ISPN000215 java.lang.IllegalArgumentException Unknown migrator %s
ISPN000216 INFO %d entries migrated to cache %s in %s
ISPN000217 org.infinispan.remoting.RemoteException Received exception from %s, see cause for remote stack trace
ISPN000218 INFO Timeout while waiting for the transaction validation. The command will not be processed. Transaction is %s
ISPN000222 org.infinispan.commons.CacheConfigurationException Custom interceptor missing class
ISPN000223 WARN Custom interceptor '%s' does not extend BaseCustomInterceptor, which is recommended
ISPN000224 org.infinispan.commons.CacheConfigurationException Custom interceptor '%s' specifies more than one position
ISPN000225 org.infinispan.commons.CacheConfigurationException Custom interceptor '%s' doesn't specify a position
ISPN000228 ERROR Failed to recover cache %s state after the current node became the coordinator
ISPN000229 java.lang.IllegalArgumentException Unexpected initial version type (only NumericVersion instances supported): %s
ISPN000230 ERROR Failed to start rebalance for cache %s
ISPN000234 WARN Root element for %s already registered in ParserRegistry by %s. Cannot install %s.
ISPN000235 org.infinispan.commons.CacheConfigurationException Configuration parser %s does not declare any Namespace annotations
ISPN000238 org.infinispan.commons.CacheConfigurationException Directory %s does not exist and cannot be created!
ISPN000242 org.infinispan.commons.CacheException Missing foreign externalizer with id=%s, either externalizer was not configured by client, or module lifecycle implementation adding externalizer was not loaded properly
ISPN000243 org.infinispan.commons.CacheException Type of data read is unknown. Id=%d is not amongst known reader indexes.
ISPN000244 org.infinispan.commons.CacheConfigurationException AdvancedExternalizer's getTypeClasses for externalizer %s must return a non-empty set
ISPN000245 org.infinispan.commons.CacheConfigurationException Duplicate id found! AdvancedExternalizer id=%d for %s is shared by another externalizer (%s). Reader index is %d
ISPN000246 org.infinispan.commons.CacheConfigurationException Internal %s externalizer is using an id(%d) that exceeded the limit. It needs to be smaller than %d
ISPN000247 org.infinispan.commons.CacheConfigurationException Foreign %s externalizer is using a negative id(%d). Only positive id values are allowed.
ISPN000249 org.infinispan.commons.CacheConfigurationException The cache loader configuration %s does not specify the loader class using @ConfigurationFor
ISPN000252 ERROR Error executing parallel store task
ISPN000255 ERROR Error while processing prepare
ISPN000259 ERROR Async store executor did not stop properly
ISPN000261 ERROR Failed to execute outbound transfer
ISPN000262 ERROR Failed to enlist TransactionXaAdapter to transaction
ISPN000264 WARN Not using an L1 invalidation reaper thread. This could lead to memory leaks as the requestors map may grow indefinitely!
ISPN000267 WARN Problems creating interceptor %s
ISPN000268 WARN Unable to broadcast invalidations as a part of the prepare phase. Rolling back.
ISPN000269 WARN Cache used for Grid metadata should be synchronous.
ISPN000270 WARN Could not commit local tx %s
ISPN000271 WARN Could not rollback local tx %s
ISPN000272 WARN Exception removing recovery information
ISPN000273 org.infinispan.commons.CacheConfigurationException Indexing can not be enabled on caches in Invalidation mode
ISPN000274 ERROR Persistence enabled without any CacheLoaderInterceptor in InterceptorChain!
ISPN000275 ERROR Persistence enabled without any CacheWriteInterceptor in InterceptorChain!
ISPN000276 org.infinispan.commons.CacheException Could not find migration data in cache %s
ISPN000277 WARN Could not migrate key %s
ISPN000277 WARN Could not migrate key %s
ISPN000278 org.infinispan.commons.CacheConfigurationException Indexing can only be enabled if infinispan-query.jar is available on your classpath, and this jar has not been detected.
ISPN000279 org.infinispan.persistence.spi.PersistenceException Failed to read stored entries from file. Error in file %s at offset %d
ISPN000280 org.infinispan.commons.CacheListenerException Caught exception [%s] while invoking method [%s] on listener instance: %s
ISPN000281 org.infinispan.remoting.transport.jgroups.SuspectException %s reported that a third node was suspected, see cause for info on the node that was suspected
ISPN000282 org.infinispan.commons.CacheConfigurationException Cannot enable Invocation Batching when the Transaction Mode is NON_TRANSACTIONAL, set the transaction mode to TRANSACTIONAL
ISPN000283 org.infinispan.commons.CacheConfigurationException A cache configured with invocation batching can't have recovery enabled
ISPN000284 WARN Problem encountered while installing cluster listener
ISPN000285 WARN Issue when retrieving cluster listeners from %s response was %s
ISPN000286 WARN Issue when retrieving cluster listeners from %s
ISPN000287 java.lang.SecurityException Unauthorized access: subject '%s' lacks '%s' permission
ISPN000288 org.infinispan.commons.CacheConfigurationException A principal-to-role mapper has not been specified
ISPN000289 WARN Cannot send cross-site state chunk to '%s'.
ISPN000291 WARN Cannot apply cross-site state chunk.
ISPN000292 WARN Unrecognized attribute '%s'. Please check your configuration. Ignoring!
ISPN000293 INFO Ignoring XML attribute %s, please remove from configuration file
ISPN000293 INFO Ignoring attribute %s at %s, please remove from configuration file
ISPN000294 INFO Ignoring element %s at %s, please remove from configuration file
ISPN000295 org.infinispan.commons.CacheConfigurationException No thread pool with name '%s' found
ISPN000296 java.lang.IllegalArgumentException Attempt to add a %s permission to a SecurityPermissionCollection
ISPN000297 java.lang.SecurityException Attempt to add a permission to a read-only SecurityPermissionCollection
ISPN000298 DEBUG Using internal security checker
ISPN000299 org.infinispan.util.concurrent.TimeoutException Unable to acquire lock after %s for key %s and requestor %s. Lock is held by %s
ISPN000300 org.infinispan.commons.CacheException There was an exception while processing retrieval of entry values
ISPN000302 WARN Issue when retrieving transactions from %s, response was %s
ISPN000304 WARN More than one configuration file with specified name on classpath. The first one will be used: %s
ISPN000305 org.infinispan.partitionhandling.AvailabilityException Cluster is operating in degraded mode because of node failures.
ISPN000306 org.infinispan.partitionhandling.AvailabilityException Key '%s' is not available. Not all owners are in this partition
ISPN000307 org.infinispan.partitionhandling.AvailabilityException Cannot clear when the cluster is partitioned
ISPN000308 INFO Rebalancing enabled
ISPN000309 INFO Rebalancing suspended
ISPN000310 DEBUG Starting new rebalance phase for cache %s, topology %s
ISPN000321 WARN Cyclic dependency detected between caches, stop order ignored
ISPN000322 WARN Cannot restart cross-site state transfer to site %s
ISPN000323 org.infinispan.commons.IllegalLifecycleStateException %s is in '%s' state and so it does not accept new invocations. Either restart it or recreate the cache container.
ISPN000324 org.infinispan.commons.IllegalLifecycleStateException %s is in 'STOPPING' state and this is an invocation not belonging to an on-going transaction, so it does not accept new invocations. Either restart it or recreate the cache container.
ISPN000325 java.lang.RuntimeException Creating tmp cache %s timed out waiting for rebalancing to complete on node %s
ISPN000326 WARN Remote transaction %s timed out. Rolling back after %d ms
ISPN000327 org.infinispan.commons.CacheConfigurationException Cannot find a parser for element '%s' in namespace '%s' at %s. Check that your configuration is up-to-date for Infinispan '%s' and you have the proper dependency in the classpath
ISPN000328 DEBUG Rebalance phase %s confirmed for cache %s on node %s, topology id = %d
ISPN000329 WARN Unable to read rebalancing status from coordinator %s
ISPN000331 WARN Unable to invoke method %s on Object instance %s
ISPN000335 org.infinispan.commons.CacheConfigurationException Two-phase commit can only be used with synchronous backup strategy.
ISPN000336 DEBUG Finished rebalance for cache %s, topology %s
ISPN000337 org.infinispan.commons.CacheConfigurationException Backup configuration must include a 'site'.
ISPN000338 org.infinispan.commons.CacheConfigurationException You must specify a 'failure-policy-class' to use a custom backup failure policy for backup '%s'.
ISPN000339 org.infinispan.commons.CacheConfigurationException Remote cache name is missing or null in backup configuration.
ISPN000340 org.infinispan.commons.CacheConfigurationException Remote cache name and remote site is missing or null in backup configuration.
ISPN000343 org.infinispan.commons.CacheConfigurationException Must have a transport set in the global configuration in order to define a clustered cache
ISPN000344 org.infinispan.commons.CacheConfigurationException reaperWakeUpInterval must be >= 0, we got %d
ISPN000345 org.infinispan.commons.CacheConfigurationException completedTxTimeout must be >= 0, we got %d
ISPN000350 org.infinispan.commons.CacheConfigurationException Enabling the L1 cache is only supported when using DISTRIBUTED as a cache mode. Your cache mode is set to %s
ISPN000351 org.infinispan.commons.CacheConfigurationException Using a L1 lifespan of 0 or a negative value is meaningless
ISPN000352 org.infinispan.commons.CacheConfigurationException Enabling the L1 cache is not supported when using EXCEPTION based eviction.
ISPN000354 org.infinispan.commons.CacheConfigurationException Cannot define both interceptor class (%s) and interceptor instance (%s)
ISPN000355 org.infinispan.commons.CacheConfigurationException Unable to instantiate loader/writer instance for StoreConfiguration %s
ISPN000357 ERROR end() failed for %s
ISPN000358 org.infinispan.commons.CacheConfigurationException A cache configuration named %s already exists. This cannot be configured externally by the user.
ISPN000359 org.infinispan.partitionhandling.AvailabilityException Keys '%s' are not available. Not all owners are in this partition
ISPN000360 WARN The xml element eviction-executor has been deprecated and replaced by expiration-executor, please update your configuration file.
ISPN000361 org.infinispan.commons.CacheException Cannot commit remote transaction %s as it was already rolled back
ISPN000362 org.infinispan.util.concurrent.TimeoutException Could not find status for remote transaction %s, please increase transaction.completedTxTimeout
ISPN000363 WARN No filter indexing service provider found for indexed filter of type %s
ISPN000364 org.infinispan.commons.CacheException Attempted to register cluster listener of class %s, but listener is annotated as only observing pre events!
ISPN000365 org.infinispan.commons.CacheConfigurationException Could not find the specified JGroups configuration file '%s'
ISPN000366 java.lang.IllegalArgumentException Unable to add a 'null' Custom Cache Store
ISPN000371 java.lang.IllegalStateException Cannot remove cache configuration '%s' because it is in use
ISPN000372 org.infinispan.commons.CacheConfigurationException Statistics are enabled while attribute 'available' is set to false.
ISPN000373 org.infinispan.commons.CacheConfigurationException Attempted to start a cache using configuration template '%s'
ISPN000374 org.infinispan.commons.CacheConfigurationException No such template '%s' when declaring '%s'
ISPN000375 org.infinispan.commons.CacheConfigurationException Cannot use configuration '%s' as a template
ISPN000376 java.lang.UnsupportedOperationException Interceptor stack is not supported in simple cache
ISPN000377 java.lang.UnsupportedOperationException Explicit lock operations are not supported in simple cache
ISPN000378 org.infinispan.commons.CacheConfigurationException Invocation batching not enabled in current configuration! Please enable it.
ISPN000381 org.infinispan.commons.CacheConfigurationException This configuration is not supported for simple cache
ISPN000382 WARN Global state persistence was enabled without specifying a location
ISPN000384 java.lang.RuntimeException Unable to broadcast invalidation messages
ISPN000386 org.infinispan.commons.CacheConfigurationException Failed to read persisted state from file %s. Aborting.
ISPN000387 org.infinispan.commons.CacheConfigurationException Failed to write state to file %s.
ISPN000388 org.infinispan.commons.CacheConfigurationException The state file %s is not writable. Aborting.
ISPN000389 INFO Loaded global state, version=%s timestamp=%s
ISPN000390 INFO Persisted state, version=%s timestamp=%s
ISPN000391 org.infinispan.commons.CacheConfigurationException Recovery not supported with non transactional cache
ISPN000392 org.infinispan.commons.CacheConfigurationException Recovery not supported with Synchronization
ISPN000395 INFO Transaction notifications are disabled. This prevents cluster listeners from working properly!
ISPN000396 DEBUG Received unsolicited state from node %s for segment %d of cache %s
ISPN000397 org.infinispan.commons.CacheException Could not migrate data for cache %s, check remote store config in the target cluster. Make sure only one remote store is present and is pointing to the source cluster
ISPN000398 java.lang.IllegalStateException CH Factory '%s' cannot restore a persisted CH of class '%s'
ISPN000399 org.infinispan.util.concurrent.TimeoutException Timeout while waiting for %d members in cluster. Last view had %s
ISPN000400 org.infinispan.remoting.transport.jgroups.SuspectException Node %s was suspected
ISPN000401 org.infinispan.util.concurrent.TimeoutException Node %s timed out, time : %s %s
ISPN000402 org.infinispan.util.concurrent.TimeoutException Timeout waiting for view %d. Current view is %d, current status is %s
ISPN000403 org.infinispan.commons.CacheConfigurationException No indexable classes were defined for this indexed cache. The configuration must contain classes or protobuf message types annotated with '@Indexed'
ISPN000404 org.infinispan.commons.CacheConfigurationException The configured entity class %s is not indexable. Please remove it from the indexing configuration.
ISPN000405 ERROR Caught exception while invoking a cache manager listener!
ISPN000406 WARN The replication queue is no longer supported since version 9.0. Attribute %s on line %d will be ignored.
ISPN000407 org.infinispan.topology.CacheJoinException Extraneous members %s are attempting to join cache %s, as they were not members of the persisted state
ISPN000408 org.infinispan.topology.CacheJoinException Node %s with persistent state attempting to join cache %s on cluster without state
ISPN000409 org.infinispan.topology.CacheJoinException Node %s without persistent state attempting to join cache %s on cluster with state
ISPN000410 org.infinispan.topology.CacheJoinException Node %s attempting to join cache %s with incompatible state
ISPN000412 org.infinispan.commons.CacheConfigurationException Cannot determine a synthetic transaction configuration from mode=%s, xaEnabled=%s, recoveryEnabled=%s, batchingEnabled=%s
ISPN000413 org.infinispan.commons.CacheConfigurationException Unable to instantiate serializer for %s
ISPN000414 org.infinispan.commons.CacheConfigurationException Global security authorization should be enabled if cache authorization enabled.
ISPN000415 WARN The %s is no longer supported since version %s. Attribute %s on line %d will be ignored.
ISPN000417 org.infinispan.commons.CacheConfigurationException It is not possible for a store to be transactional in a non-transactional cache.
ISPN000418 org.infinispan.commons.CacheConfigurationException It is not possible for a store to be transactional when passivation is enabled.
ISPN000419 WARN Eviction of an entry invoked without an explicit eviction strategy for cache %s
ISPN000420 org.infinispan.commons.CacheConfigurationException Cannot enable '%s' in invalidation caches!
ISPN000421 ERROR Error while handling view %s
ISPN000422 org.infinispan.util.concurrent.TimeoutException Failed waiting for topology %d
ISPN000423 org.infinispan.commons.CacheConfigurationException Duplicate id found! AdvancedExternalizer id=%d is shared by another externalizer (%s)
ISPN000424 org.infinispan.commons.CacheConfigurationException Memory eviction is enabled, please specify a maximum size or count greater than zero
ISPN000427 org.infinispan.util.concurrent.TimeoutException Timeout after %s waiting for acks (%s). Id=%s
ISPN000428 WARN '%1$s' at %3$s has been deprecated. Please use '%2$s' instead
ISPN000429 org.infinispan.transaction.WriteSkewException On key %s previous read version (%s) is different from currently read version (%s)
ISPN000430 org.infinispan.commons.CacheConfigurationException %s cannot be shared
ISPN000432 org.infinispan.commons.CacheConfigurationException Missing configuration for default cache '%s' declared on container
ISPN000433 org.infinispan.commons.CacheConfigurationException A default cache has been requested, but no cache has been set as default for this container
ISPN000435 org.infinispan.commons.CacheConfigurationException Cache manager initialized with a default cache configuration but without a name for it. Set it in the GlobalConfiguration.
ISPN000436 org.infinispan.commons.CacheConfigurationException Cache '%s' has been requested, but no matching cache configuration exists
ISPN000437 WARN Unable to validate %s with the implementing store as the @ConfigurationFor annotation is missing
ISPN000438 org.infinispan.commons.CacheConfigurationException Cache with name %s is defined more than once!
ISPN000439 INFO Received new cross-site view: %s
ISPN000440 ERROR Error sending response for request %d@%s, command %s
ISPN000441 org.infinispan.commons.CacheConfigurationException Unsupported async cache mode '%s' for transactional caches
ISPN000443 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. In order for a cache loader to be transactional, it must also be shared.
ISPN000444 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. A cache loader cannot be both Asynchronous and transactional.
ISPN000446 org.infinispan.commons.CacheConfigurationException Multiple sites have the same name '%s'. This configuration is not valid.
ISPN000448 org.infinispan.commons.CacheConfigurationException 'awaitInitialTransfer' can be enabled only if cache mode is distributed or replicated.
ISPN000449 org.infinispan.commons.CacheConfigurationException Timeout value for cross-site replication state transfer must be equal to or greater than one.
ISPN000450 org.infinispan.commons.CacheConfigurationException Wait time between retries for cross-site replication state transfer must be equal to or greater than one.
ISPN000451 org.infinispan.util.concurrent.TimeoutException Timed out waiting for view %d, current view is %d
ISPN000452 ERROR Failed to update topology for cache %s
ISPN000453 org.infinispan.commons.CacheConfigurationException Attempt to define configuration for cache %s which already exists
ISPN000455 ERROR Failure during leaver transactions cleanup
ISPN000461 org.infinispan.commons.CacheException Class %s should be a subclass of %s
ISPN000462 java.lang.IllegalStateException ConflictManager.getConflicts() already in progress
ISPN000463 java.lang.IllegalStateException Unable to retrieve conflicts as StateTransfer is currently in progress for cache '%s'
ISPN000464 WARN The partition handling 'enabled' attribute has been deprecated. Please update your configuration to use 'when-split' instead
ISPN000466 WARN Exception encountered when trying to resolve conflict on Keys '%s': %s
ISPN000467 org.infinispan.commons.CacheConfigurationException Scattered cache supports only single owner.
ISPN000468 org.infinispan.commons.CacheConfigurationException Invalidation batch size configuration options applies only to scattered caches.
ISPN000469 org.infinispan.commons.CacheConfigurationException Scattered cache does not support transactional mode.
ISPN000470 ERROR Failed confirming revoked segments. State transfer cannot continue.
ISPN000471 ERROR Failed processing values received from remote node during rebalance.
ISPN000472 org.infinispan.commons.IllegalLifecycleStateException Cache manager is stopping
ISPN000473 ERROR Invalid message type %s received from %s
ISPN000474 ERROR Error processing request %d@%s
ISPN000475 ERROR Error processing response for request %d from %s
ISPN000476 org.infinispan.util.concurrent.TimeoutException Timed out waiting for responses for request %d from %s after %s
ISPN000477 ERROR Cannot perform operation %s for site %s
ISPN000478 org.infinispan.commons.CacheException Couldn't find a local transaction corresponding to remote site transaction %s
ISPN000479 java.lang.IllegalStateException LocalTransaction not found but present in the tx table for remote site transaction %s
ISPN000480 WARN Ignoring versions invalidation from topology %d, current topology is %d
ISPN000481 org.infinispan.commons.CacheException Cannot create remote transaction %s, the originator is not in the cluster view
ISPN000482 org.infinispan.commons.CacheException Cannot create remote transaction %s, already completed
ISPN000484 org.infinispan.commons.CacheConfigurationException Wildcards not allowed in cache names: '%s'
ISPN000485 org.infinispan.commons.CacheConfigurationException Configuration '%s' matches multiple wildcard templates
ISPN000486 org.infinispan.commons.dataconversion.EncodingException Cannot register Wrapper: duplicate Id %d
ISPN000487 org.infinispan.commons.dataconversion.EncodingException Wrapper with class '%s' not found
ISPN000488 org.infinispan.commons.dataconversion.EncodingException Wrapper with Id %d not found
ISPN000489 org.infinispan.commons.dataconversion.EncodingException Cannot register Encoder: duplicate Id %d
ISPN000490 org.infinispan.commons.dataconversion.EncodingException Encoder with class '%s' not found
ISPN000491 org.infinispan.commons.dataconversion.EncodingException Encoder with Id %d not found
ISPN000492 org.infinispan.commons.dataconversion.EncodingException Cannot find transcoder between '%s' to '%s'
ISPN000495 org.infinispan.commons.dataconversion.EncodingException %s encountered error transcoding content
ISPN000497 org.infinispan.commons.dataconversion.EncodingException %s encountered unsupported content '%s' during transcoding
ISPN000499 org.infinispan.commons.CacheConfigurationException Could not serialize the configuration of cache '%s' (%s)
ISPN000500 org.infinispan.commons.CacheConfigurationException Cannot create clustered configuration for cache '%s' because configuration %n%s%n is incompatible with the existing configuration %n%s
ISPN000501 org.infinispan.commons.CacheConfigurationException Cannot persist cache configuration as global state is disabled
ISPN000502 org.infinispan.commons.CacheConfigurationException Error while persisting global configuration state
ISPN000504 org.infinispan.commons.CacheConfigurationException Size (bytes) based eviction needs either off-heap or a binary compatible storage configured in the cache encoding
ISPN000506 org.infinispan.commons.CacheConfigurationException Biased reads are supported only in scattered cache. Maybe you were looking for L1?
ISPN000507 org.infinispan.commons.CacheConfigurationException Cache %s already exists
ISPN000508 org.infinispan.commons.CacheConfigurationException Cannot rename file %s to %s
ISPN000509 java.lang.IllegalArgumentException Unable to add a 'null' EntryMergePolicyFactory
ISPN000510 org.infinispan.commons.CacheConfigurationException ConfigurationStrategy set to CUSTOM, but none specified
ISPN000511 org.infinispan.commons.CacheConfigurationException ConfigurationStrategy cannot be set to MANAGED in embedded mode
ISPN000512 org.infinispan.commons.CacheConfigurationException Cannot acquire lock '%s' for persistent global state
ISPN000513 org.infinispan.commons.CacheConfigurationException Exception based eviction requires a transactional cache that doesn't allow for 1 phase commit or synchronizations
ISPN000514 org.infinispan.interceptors.impl.ContainerFullException Container eviction limit %d reached, write operation(s) is blocked
ISPN000515 java.lang.UnsupportedOperationException The configuration is immutable
ISPN000516 org.infinispan.commons.CacheConfigurationException The state file for '%s' is invalid. Startup halted to prevent further corruption of persistent state
ISPN000517 WARN Ignoring cache topology from %s during merge: %s
ISPN000518 DEBUG Updating topology for cache %s, topology %s, availability mode %s
ISPN000519 DEBUG Updating stable topology for cache %s, topology %s
ISPN000520 DEBUG Updating availability mode for cache %s from %s to %s, topology %s
ISPN000521 DEBUG Cache %s recovered after merge with topology = %s, availability mode %s
ISPN000522 DEBUG Conflict resolution starting for cache %s with topology %s
ISPN000523 DEBUG Conflict resolution finished for cache %s with topology %s
ISPN000524 ERROR Conflict resolution failed for cache %s with topology %s
ISPN000525 DEBUG Conflict resolution cancelled for cache %s with topology %s
ISPN000527 org.infinispan.persistence.spi.PersistenceException Maximum startup attempts exceeded for store %s
ISPN000528 org.infinispan.partitionhandling.AvailabilityException Cannot acquire lock %s as this partition is DEGRADED
ISPN000529 org.infinispan.commons.CacheException Class '%s' blocked by deserialization allow list. Include the class name in the server allow list to authorize.
ISPN000530 WARN Unsupported async cache mode '%s' for transactional caches, forcing %s
ISPN000531 org.infinispan.commons.CacheConfigurationException Store or loader %s must implement SegmentedLoadWriteStore or its config must extend AbstractSegmentedStoreConfiguration if configured as segmented
ISPN000532 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. If a cache loader is configured with passivation, the cache loader cannot be shared in a cluster!
ISPN000533 org.infinispan.commons.dataconversion.EncodingException Content '%s (MediaType: '%s') cannot be converted to '%s'
ISPN000534 org.infinispan.commons.CacheConfigurationException Grouping requires OBJECT storage type but was: %s
ISPN000535 org.infinispan.commons.CacheConfigurationException Grouping requires application/x-java-object storage type but was: {key=%s, value=%s}
ISPN000537 org.infinispan.commons.CacheConfigurationException Factory doesn't know how to construct component %s
ISPN000538 ERROR Error stopping module %s
ISPN000539 org.infinispan.commons.CacheConfigurationException Duplicate JGroups stack '%s'
ISPN000540 org.infinispan.commons.CacheConfigurationException No such JGroups stack '%s'
ISPN000541 org.infinispan.commons.CacheConfigurationException Error while trying to create a channel using the specified configuration '%s'
ISPN000542 org.infinispan.commons.CacheConfigurationException Invalid parser scope. Expected '%s' but was '%s'
ISPN000543 org.infinispan.commons.CacheConfigurationException Cannot use stack.position when stack.combine is '%s'
ISPN000544 org.infinispan.commons.CacheConfigurationException The protocol '%s' does not exist in the base stack for operation '%s'
ISPN000545 org.infinispan.commons.CacheConfigurationException Inserting protocol '%s' in a JGroups stack requires the 'stack.position' attribute
ISPN000546 org.infinispan.commons.CacheConfigurationException Duplicate remote site '%s' in stack '%s'
ISPN000547 org.infinispan.commons.CacheConfigurationException JGroups stack '%s' declares remote sites but does not include the RELAY2 protocol.
ISPN000548 org.infinispan.commons.CacheConfigurationException JGroups stack '%s' has a RELAY2 protocol without remote sites.
ISPN000549 org.infinispan.commons.CacheConfigurationException A store cannot be shared when utilised with a local cache.
ISPN000550 org.infinispan.commons.CacheConfigurationException Invalidation mode only supports when-split=ALLOW_READ_WRITES
ISPN000551 WARN The custom interceptors configuration has been deprecated and will be ignored in the future
ISPN000553 WARN Ignoring 'marshaller' attribute. Common marshallers are already available at runtime, and to deploy a custom marshaller, consult the 'Encoding' section in the user guide
ISPN000554 WARN jboss-marshalling is deprecated and planned for removal
ISPN000555 ERROR Unable to set method %s accessible
ISPN000556 INFO Starting user marshaller '%s'
ISPN000557 org.infinispan.commons.CacheConfigurationException Unable to configure JGroups Stack '%s'
ISPN000558 org.infinispan.commons.CacheConfigurationException The store location '%s' is not a child of the global persistent location '%s'
ISPN000559 WARN Cannot marshall '%s'
ISPN000560 WARN The AdvancedExternalizer configuration has been deprecated and will be removed in the future
ISPN000561 org.infinispan.commons.CacheConfigurationException Chunk size must be positive, got %d
ISPN000562 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. If a cache loader is configured with purgeOnStartup, the cache loader cannot be shared in a cluster!
ISPN000563 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. This implementation does not support being segmented!
ISPN000564 WARN Configured store '%s' is segmented and may use a large number of file descriptors
ISPN000565 org.infinispan.commons.CacheConfigurationException Index.%s is no longer supported. Please update your configuration!
ISPN000566 org.infinispan.commons.CacheConfigurationException Thread Pool Factory %s is blocking, but pool %s requires non blocking threads
ISPN000569 WARN Unable to persist Infinispan internal caches as no global state enabled
ISPN000570 java.lang.IllegalArgumentException Unexpected response from %s: %s
ISPN000571 org.infinispan.commons.CacheConfigurationException RELAY2 not found in the protocol stack. Cannot perform cross-site operations.
ISPN000572 WARN index mode attribute is deprecated and should no longer be specified because its value is automatically detected. Most previously supported values are no longer supported. Please check the upgrade guide.
ISPN000573 org.infinispan.commons.CacheConfigurationException Cannot recreate persisted configuration for cache '%s' because configuration %n%s%n is incompatible with the existing configuration %n%s
ISPN000574 WARN Global state cannot persisted because it is incomplete (usually caused by errors at startup).
ISPN000575 org.infinispan.commons.CacheConfigurationException PartitionStrategy must be ALLOW_READ_WRITES when numOwners is 1
ISPN000576 org.infinispan.commons.CacheConfigurationException Cross-site replication not available for local cache.
ISPN000577 org.infinispan.commons.marshall.MarshallingException Converting from unwrapped protostream payload requires the 'type' parameter to be supplied in the destination MediaType
ISPN000578 INFO Migrating '%s' persisted data to new format...
ISPN000579 INFO '%s' persisted data successfully migrated.
ISPN000580 org.infinispan.persistence.spi.PersistenceException Failed to migrate '%s' persisted data.
ISPN000581 org.infinispan.commons.CacheConfigurationException The indexing 'enabled' and the legacy 'index' configs attributes are mutually exclusive
ISPN000582 org.infinispan.commons.CacheConfigurationException A single indexing directory provider is allowed per cache configuration. Setting multiple individual providers for the indexes belonging to a cache is not allowed.
ISPN000583 org.infinispan.commons.CacheConfigurationException Cannot configure both maxCount and maxSize in memory configuration
ISPN000584 org.infinispan.commons.CacheConfigurationException The memory attribute(s) %s have been deprecated and cannot be used in conjunction with the new configuration
ISPN000585 WARN Single media-type was specified for keys and values, ignoring individual configurations
ISPN000586 WARN The memory configuration element '%s' has been deprecated. Please update your configuration
ISPN000587 org.infinispan.commons.CacheConfigurationException Cannot change max-size since max-count is already defined
ISPN000588 org.infinispan.commons.CacheConfigurationException Cannot change max-count since max-size is already defined
ISPN000589 org.infinispan.commons.CacheConfigurationException A store cannot be configured with both preload and purgeOnStartup
ISPN000590 org.infinispan.commons.CacheConfigurationException Store cannot be configured with both read and write only!
ISPN000591 org.infinispan.commons.CacheConfigurationException Store cannot be configured with purgeOnStartup, shared or passivation if it is read only!
ISPN000592 org.infinispan.commons.CacheConfigurationException Store cannot be configured with fetchPersistenceState or preload if it is write only!
ISPN000593 org.infinispan.commons.CacheConfigurationException Store %s cannot be configured to be %s as the implementation specifies it is already %s!
ISPN000594 org.infinispan.commons.CacheConfigurationException At most one store can be set to 'preload'!
ISPN000595 WARN ClusterLoader has been deprecated and will be removed in a future version with no direct replacement
ISPN000596 WARN Indexing auto-config attribute is deprecated. Please check the upgrade guide.
ISPN000597 org.infinispan.commons.CacheConfigurationException Store %s cannot be configured to be transactional as it does not contain the TRANSACTIONAL characteristic
ISPN000598 org.infinispan.commons.CacheConfigurationException Store must specify a location when global state is disabled
ISPN000598 org.infinispan.commons.CacheConfigurationException Store '%s' must specify the '%s' attribute when global state is disabled
ISPN000599 WARN Configuration for cache '%s' does not define the encoding for keys or values. If you use operations that require data conversion or queries, you should configure the cache with a specific MediaType for keys or values.
ISPN000600 org.infinispan.commons.CacheConfigurationException Store %s cannot be configured to be shared as it does not contain the SHARED characteristic
ISPN000601 org.infinispan.commons.CacheConfigurationException Store %s cannot be configured to be segmented as it does not contain the SEGMENTABLE characteristic
ISPN000602 WARN Conversions between JSON and Java Objects are deprecated and will be removed in a future version. To read/write values as JSON, it is recommended to define a protobuf schema and store data in the cache using 'application/x-protostream' as MediaType
ISPN000603 org.infinispan.commons.CacheConfigurationException Cannot handle cross-site request from site '%s'. Cache '%s' not found.
ISPN000604 org.infinispan.commons.CacheConfigurationException Cannot handle cross-site request from site '%s'. Cache '%s' is stopped.
ISPN000605 org.infinispan.commons.CacheConfigurationException Cannot handle cross-site request from site '%s'. Cache '%s' is not clustered.
ISPN000606 ERROR Remote site '%s' has an invalid cache configuration. Taking the backup location offline.
ISPN000607 org.infinispan.commons.CacheConfigurationException The XSiteEntryMergePolicy is missing. The cache configuration must include a merge policy.
ISPN000608 FATAL [IRAC] Unexpected error occurred.
ISPN000609 DEBUG Cannot obtain cache '%s' as it is in FAILED state. Please check the configuration
ISPN000610 org.infinispan.commons.CacheConfigurationException Cache configuration must not declare indexed entities if it is not indexed
ISPN000611 org.infinispan.commons.CacheConfigurationException Invalid index storage
ISPN000612 WARN Indexing configuration using properties has been deprecated and will be removed in a future version, please consult the docs for the replacements. The following properties have been found: '%s'
ISPN000613 WARN Indexing configuration using properties has been deprecated and will be removed in a future version, please use the and elements to configure indexing behavior.
ISPN000614 org.infinispan.commons.CacheConfigurationException It is not allowed to have different indexing configuration for each indexed type in a cache.
ISPN000615 org.infinispan.commons.marshall.MarshallingException Unable to unmarshall '%s' as a marshaller is not present in the user or global SerializationContext
ISPN000616 org.infinispan.persistence.spi.PersistenceException Unsupported persisted data version: %s
ISPN000617 java.lang.IllegalArgumentException Site '%s' not found.
ISPN000618 WARN Cleanup failed for cross-site state transfer. Invoke the cancel-push-state(%s) command if any nodes indicate pending operations to push state.
ISPN000619 WARN Cleanup failed for cross-site state transfer. Invoke the cancel-receive(%s) command in site %s if any nodes indicate pending operations to receive state.
ISPN000620 org.infinispan.commons.CacheException Cross-site state transfer to '%s' already started
ISPN000621 org.infinispan.commons.CacheConfigurationException Element '%1$s' has been removed at %3$s. Please use element '%2$s' instead
ISPN000622 org.infinispan.commons.CacheConfigurationException Element '%s' at %s has been removed with no replacement
ISPN000623 org.infinispan.commons.CacheConfigurationException Attribute '%1$s' has been removed at %3$s. Please use attribute '%2$s' instead
ISPN000624 org.infinispan.commons.CacheConfigurationException Attribute '%s' at %s has been removed with no replacement
ISPN000625 WARN Index path not provided and global state disabled, will use the current working directory for storage.
ISPN000626 WARN Index path '%s' is not absolute and global state is disabled, will use a dir relative to the current working directory.
ISPN000627 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. This implementation only supports being segmented!
ISPN000628 org.infinispan.commons.CacheConfigurationException Invalid cache roles '%s'
ISPN000629 WARN Exception completing partial completed transaction %s. Retrying later.
ISPN000633 org.infinispan.commons.CacheConfigurationException Cross-site state transfer mode cannot be null.
ISPN000634 org.infinispan.commons.CacheConfigurationException Cross-site automatic state transfer is not compatible with SYNC backup strategy.
ISPN000635 WARN [%s] Failed to receive a response from any nodes. Automatic cross-site state transfer to site '%s' is not started.
ISPN000636 org.infinispan.commons.CacheConfigurationException State transfer timeout (%d) must be greater than or equal to the remote timeout (%d)
ISPN000637 org.infinispan.util.concurrent.TimeoutException Timeout waiting for topology %d, current topology is %d
ISPN000638 org.infinispan.util.concurrent.TimeoutException Timeout waiting for topology %d transaction data
ISPN000640 WARN SingleFileStore has been deprecated and will be removed in a future version, replaced by SoftIndexFileStore
ISPN000641 org.infinispan.transaction.xa.InvalidTransactionException The transaction %s is already rolled back
ISPN000642 INFO Attempting to recover possibly corrupted data file %s
ISPN000643 INFO '%s' persisted data successfully recovered %d entries.
ISPN000644 org.infinispan.persistence.spi.PersistenceException Failed to recover '%s' persisted data.
ISPN000645 org.infinispan.commons.CacheConfigurationException Asynchronous cache modes, such as %s, cannot use SYNC touch mode for maximum idle expiration.
ISPN000646 java.lang.IllegalArgumentException capacityFactor must be positive
ISPN000647 java.lang.IllegalArgumentException The configuration for internal cache '%s' cannot be modified
ISPN000648 org.infinispan.persistence.spi.PersistenceException Cache '%s' is non empty, cannot add store.
ISPN000649 org.infinispan.commons.CacheConfigurationException SingleFileStore does not support max-entries when segmented
ISPN000650 org.infinispan.persistence.spi.PersistenceException Read invalid data in SingleFileStore file %s, please remove the file and retry
ISPN000651 org.infinispan.commons.CacheConfigurationException Max idle is not allowed while using a store without passivation
ISPN000652 WARN Max idle is not supported when using a store
ISPN000653 WARN The '%s' attribute on the '%s' element has been deprecated. Please use the '%s' attribute instead
ISPN000654 org.infinispan.persistence.spi.PersistenceException Problem encountered when preloading key %s!
ISPN000655 org.infinispan.commons.dataconversion.EncodingException Unable to convert text content to JSON: '%s'
ISPN000656 org.infinispan.commons.CacheConfigurationException The backup '%s' configuration 'failure-policy=%s' is not valid with an ASYNC backup strategy.
ISPN000657 org.infinispan.commons.CacheConfigurationException The backup '%s' configuration 'failure-policy-class' is not compatible with 'failure-policy=%s'. Use 'failure-policy="CUSTOM"'
ISPN000658 org.infinispan.util.concurrent.TimeoutException Initial state transfer timed out for cache %s on %s
ISPN000659 org.infinispan.commons.CacheConfigurationException Component %s failed to start
ISPN000660 ERROR %s start failed, stopping any running components
ISPN000661 WARN '%s' has been deprecated with no replacement.
ISPN000662 WARN Failed to transfer cross-site tombstones to %s for segments %s.
ISPN000663 org.infinispan.commons.CacheConfigurationException Name must be less than 256 bytes, current name '%s' exceeds the size.
ISPN000664 org.infinispan.commons.CacheConfigurationException Invalid index startup mode: %s
ISPN000665 ERROR There was an error in submitted periodic task with %s, not rescheduling.
ISPN000666 org.infinispan.commons.CacheConfigurationException Transport clusterName cannot be null.
ISPN000667 org.infinispan.commons.CacheConfigurationException Transport node-name is not set.
ISPN000668 org.infinispan.commons.CacheConfigurationException Transport node-name must be present in raft-members: %s
ISPN000669 java.lang.IllegalArgumentException FORK protocol required on JGroups channel.
ISPN000670 ERROR Error creating fork channel for %s
ISPN000671 WARN RAFT protocol is not available. Reason: %s
ISPN000672 INFO RAFT protocol is available.
ISPN000673 org.infinispan.commons.CacheConfigurationException Cannot persist RAFT data as global state is disabled
ISPN000674 org.infinispan.persistence.spi.PersistenceException There was an error when resetting the SIFS index for cache %s
ISPN000675 ERROR Caught exception while invoking a event logger listener!
ISPN000676 WARN Store '%s'#isAvailable check threw Exception
ISPN000677 WARN Store '%s'#isAvailable completed Exceptionally
ISPN000678 WARN Persistence is unavailable because of store %s
ISPN000679 INFO Persistence is now available
ISPN000680 org.infinispan.commons.CacheConfigurationException Expiration (Max idle or Lifespan) is not allowed while using a store '%s' that does not support expiration, unless it is configured as read only
ISPN000681 org.infinispan.commons.CacheConfigurationException Missing required property '%s' for attribute '%s' at %s
ISPN000686 org.infinispan.commons.CacheConfigurationException Attribute '%2$s' of element '%1$s' has an illegal value '%3$s' at %4$s: %5$s
ISPN000687 org.infinispan.commons.CacheConfigurationException Attribute '%2$s' of element '%1$s' has an illegal value '%3$s' at %5$s. Expecting one of %4$s.
ISPN000688 WARN Attribute '%s' of element '%s' has been deprecated since schema version %d.%d. Refer to the upgrade guide
ISPN000689 WARN Recovering cache '%s' but there are missing members, known members %s of a total of %s
ISPN000901 WARN Property %s could not be replaced as intended!
ISPN000902 WARN Invocation of %s threw an exception %s. Exception is ignored.
ISPN000904 org.infinispan.commons.CacheConfigurationException Error while initializing SSL context
ISPN000905 ERROR Unable to load %s from any of the following classloaders: %s
ISPN000906 WARN Unable to convert string property [%s] to an int! Using default value of %d
ISPN000907 WARN Unable to convert string property [%s] to a long! Using default value of %d
ISPN000908 WARN Unable to convert string property [%s] to a boolean! Using default value of %b
ISPN000909 java.lang.IllegalArgumentException Unwrapping %s to a type of %s is not a supported
ISPN000910 org.infinispan.commons.CacheConfigurationException Illegal value for thread pool parameter(s) %s, it should be: %s
ISPN000911 java.lang.IllegalArgumentException Unwrapping of any instances in %s to a type of %s is not a supported
ISPN000912 java.lang.IllegalStateException Expecting a protected configuration for %s
ISPN000913 java.lang.IllegalStateException Expecting an unprotected configuration for %s
ISPN000914 java.lang.IllegalArgumentException Duplicate attribute '%s' in attribute set '%s'
ISPN000915 java.lang.IllegalArgumentException No such attribute '%s' in attribute set '%s'
ISPN000916 java.lang.IllegalArgumentException No attribute copier for type '%s'
ISPN000918 java.io.IOException Cannot find resource '%s'
ISPN000919 org.infinispan.commons.CacheConfigurationException Multiple errors encountered while validating configuration
ISPN000920 java.lang.UnsupportedOperationException Unable to load file using scheme %s
ISPN000921 java.lang.SecurityException The alias '%s' does not exist in the key store '%s'
ISPN000922 ERROR Exception during rollback
ISPN000923 ERROR Error enlisting resource
ISPN000924 ERROR beforeCompletion() failed for %s
ISPN000925 ERROR Unexpected error from resource manager!
ISPN000926 ERROR afterCompletion() failed for %s
ISPN000927 WARN exception while committing
ISPN000928 ERROR end() failed for %s
ISPN000929 org.infinispan.commons.dataconversion.EncodingException Media type cannot be empty or null!
ISPN000930 org.infinispan.commons.dataconversion.EncodingException Invalid media type '%s': must contain a type and a subtype separated by '/'
ISPN000931 org.infinispan.commons.dataconversion.EncodingException Invalid media type '%s': invalid param '%s'
ISPN000932 org.infinispan.commons.dataconversion.EncodingException Invalid media type list '%s': comma expected
ISPN000933 org.infinispan.commons.dataconversion.EncodingException Invalid media type list '%s': type expected after comma
ISPN000934 org.infinispan.commons.dataconversion.EncodingException Errors converting '%s' from '%s' to '%s'
ISPN000935 org.infinispan.commons.dataconversion.EncodingException Invalid Weight '%s'. Supported values are between 0 and 1.0
ISPN000936 org.infinispan.commons.CacheException Class '%s' blocked by deserialization allow list. Adjust the configuration serialization allow list regular expression to include this class.
ISPN000937 org.infinispan.commons.dataconversion.EncodingException Invalid media type. Expected '%s' but got '%s'
ISPN000938 org.infinispan.commons.dataconversion.EncodingException Invalid text content '%s'
ISPN000939 org.infinispan.commons.dataconversion.EncodingException Conversion of content '%s' from '%s' to '%s' not supported
ISPN000940 org.infinispan.commons.dataconversion.EncodingException Invalid application/x-www-form-urlencoded content: '%s'
ISPN000941 org.infinispan.commons.dataconversion.EncodingException Error encoding content '%s' to '%s'
ISPN000942 WARN Unable to convert property [%s] to an enum! Using default value of %d
ISPN000944 org.infinispan.commons.CacheConfigurationException Feature %s is disabled!
ISPN000946 INFO Using OpenSSL Provider
ISPN000947 INFO Using Java SSL Provider
ISPN000948 org.infinispan.commons.dataconversion.EncodingException Unsupported conversion of '%s' from '%s' to '%s'
ISPN000949 org.infinispan.commons.dataconversion.EncodingException Unsupported conversion of '%s' to '%s'
ISPN000950 org.infinispan.commons.dataconversion.EncodingException Encoding '%s' is not supported
ISPN000951 org.infinispan.commons.CacheConfigurationException Invalid value %s for attribute %s: must be a number greater than zero
ISPN000952 INFO OpenTelemetry instance loaded: %s
ISPN000953 INFO OpenTelemetry integration is disabled
ISPN000954 WARN OpenTelemetry cannot be configured
ISPN000955 java.lang.IllegalArgumentException '%s' is not a valid boolean value (true|false|yes|no|y|n|on|off)
ISPN000956 java.lang.IllegalArgumentException '%s' is not one of %s
ISPN000957 ERROR Cannot load %s
ISPN000958 java.lang.IllegalArgumentException Cannot parse bytes quantity %s
ISPN000959 WARN Property '%s' has been deprecated. Please use '%s' instead.
ISPN000960 java.lang.IllegalArgumentException No attribute '%s' in '%s'
ISPN000961 java.lang.IllegalArgumentException Incompatible attribute '%s.%s' existing value='%s', new value='%s'
ISPN000962 java.lang.IllegalStateException Cannot modify protected attribute '%s'
ISPN000963 java.lang.IllegalArgumentException Invalid configuration in '%s'
ISPN004001 WARN Could not find '%s' file in classpath, using defaults.
ISPN004002 INFO Cannot perform operations on a cache associated with an unstarted RemoteCacheManager. Use RemoteCacheManager.start before using the remote cache.
ISPN004003 org.infinispan.client.hotrod.exceptions.InvalidResponseException Invalid magic number. Expected %#x and received %#x
ISPN004005 WARN Error received from the server: %s
ISPN004006 INFO Server sent new topology view (id=%d, age=%d) containing %d addresses: %s
ISPN004007 ERROR Exception encountered. Retry %d out of %d
ISPN004011 WARN No hash function configured for version: %d
ISPN004014 INFO New server added(%s), adding to the pool.
ISPN004015 WARN Failed adding new server %s
ISPN004016 INFO Server not in cluster anymore(%s), removing from the pool.
ISPN004021 INFO Infinispan version: %s
ISPN004024 org.infinispan.commons.CacheConfigurationException SSL Enabled but no TrustStore specified
ISPN004025 org.infinispan.commons.CacheConfigurationException A password is required to open the KeyStore '%s'
ISPN004026 org.infinispan.commons.CacheConfigurationException A password is required to open the TrustStore '%s'
ISPN004027 org.infinispan.commons.CacheConfigurationException Cannot configure custom KeyStore and/or TrustStore when specifying a SSLContext
ISPN004028 org.infinispan.commons.CacheConfigurationException Unable to parse server IP address %s
ISPN004029 org.infinispan.commons.CacheConfigurationException Invalid max_retries (value=%s). Value should be greater or equal than zero.
ISPN004030 org.infinispan.commons.CacheConfigurationException Cannot enable authentication without specifying either a username, a token, a client Subject or a CallbackHandler
ISPN004031 java.lang.SecurityException The selected authentication mechanism '%s' is not among the supported server mechanisms: %s
ISPN004034 org.infinispan.client.hotrod.exceptions.HotRodClientException Unable to unmarshall bytes %s
ISPN004035 org.infinispan.commons.CacheListenerException Caught exception [%s] while invoking method [%s] on listener instance: %s
ISPN004036 org.infinispan.client.hotrod.event.IncorrectClientListenerException Methods annotated with %s must accept exactly one parameter, of assignable from type %s
ISPN004037 org.infinispan.client.hotrod.event.IncorrectClientListenerException Methods annotated with %s should have a return type of void.
ISPN004038 ERROR Unexpected error consuming event %s
ISPN004039 WARN Unable to complete reading event from server %s
ISPN004040 org.infinispan.client.hotrod.event.IncorrectClientListenerException Cache listener class %s must be annotated with org.infinispan.client.hotrod.annotation.ClientListener
ISPN004041 org.infinispan.client.hotrod.exceptions.HotRodClientException Unknown event type %s received
ISPN004042 ERROR Unable to set method %s accessible
ISPN004045 org.infinispan.commons.CacheConfigurationException When enabling near caching, number of max entries must be configured
ISPN004046 DEBUG Successfully closed remote iterator '%s'
ISPN004047 java.lang.IllegalStateException Invalid iteration id '%s'
ISPN004048 java.util.NoSuchElementException Invalid iteration id '%s'
ISPN004050 INFO Switched to cluster '%s'
ISPN004051 INFO Switched back to main cluster
ISPN004052 INFO Manually switched to cluster '%s'
ISPN004053 INFO Manually switched back to main cluster
ISPN004054 org.infinispan.commons.CacheConfigurationException Name of the failover cluster needs to be specified
ISPN004055 org.infinispan.commons.CacheConfigurationException Host needs to be specified in server definition of failover cluster
ISPN004056 org.infinispan.commons.CacheConfigurationException At least one server address needs to be specified for failover cluster %s
ISPN004057 org.infinispan.commons.CacheConfigurationException Duplicate failover cluster %s has been specified
ISPN004058 org.infinispan.client.hotrod.event.IncorrectClientListenerException The client listener must use raw data when it uses a query as a filter: %s
ISPN004059 org.infinispan.client.hotrod.event.IncorrectClientListenerException The client listener must use the '%s' filter/converter factory
ISPN004061 WARN Ignoring error when closing iteration '%s'
ISPN004062 DEBUG Started iteration '%s'
ISPN004063 DEBUG Channel to %s obtained for iteration '%s'
ISPN004064 TRACE Tracking key %s belonging to segment %d, already tracked? = %b
ISPN004067 org.infinispan.commons.CacheConfigurationException Cannot specify both a callback handler and a username/token for authentication
ISPN004069 org.infinispan.client.hotrod.exceptions.TransportException Connection to %s is not active.
ISPN004070 org.infinispan.client.hotrod.exceptions.HotRodClientException Failed to add client listener %s, server responded with status %d
ISPN004071 org.infinispan.client.hotrod.exceptions.TransportException Connection to %s was closed while waiting for response.
ISPN004072 ERROR Cannot create another async thread. Please increase 'infinispan.client.hotrod.default_executor_factory.pool_size' (current value is %d).
ISPN004074 INFO Native Epoll transport not available, using NIO instead: %s
ISPN004075 org.infinispan.commons.CacheConfigurationException TrustStoreFileName and TrustStorePath are mutually exclusive
ISPN004076 java.lang.IllegalStateException Unknown message id %d; cannot find matching request
ISPN004077 org.infinispan.client.hotrod.exceptions.TransportException Closing channel %s due to error in unknown operation.
ISPN004078 org.infinispan.client.hotrod.exceptions.HotRodClientException This channel is about to be closed and does not accept any further operations.
ISPN004079 java.lang.IllegalStateException Unexpected listenerId %s
ISPN004080 java.lang.IllegalStateException Event should use messageId of previous Add Client Listener operation but id is %d and operation is %s
ISPN004082 org.infinispan.commons.CacheConfigurationException TransactionMode must be non-null.
ISPN004083 org.infinispan.commons.CacheConfigurationException TransactionManagerLookup must be non-null
ISPN004084 org.infinispan.client.hotrod.exceptions.CacheNotTransactionalException Cache %s doesn't support transactions. Please check the documentation how to configure it properly.
ISPN004085 ERROR Error checking server configuration for transactional cache %s
ISPN004086 WARN Exception caught while preparing transaction %s
ISPN004087 WARN Use of maxIdle expiration with a near cache is unsupported.
ISPN004088 org.infinispan.client.hotrod.exceptions.HotRodClientException Transactions timeout must be positive
ISPN004089 org.infinispan.client.hotrod.exceptions.HotRodClientException TransactionTable is not started!
ISPN004090 org.infinispan.client.hotrod.exceptions.InvalidResponseException [%s] Invalid response operation. Expected %#x and received %#x
ISPN004091 org.infinispan.client.hotrod.exceptions.HotRodClientException MBean registration failed
ISPN004092 org.infinispan.client.hotrod.exceptions.HotRodClientException MBean unregistration failed
ISPN004093 org.infinispan.commons.CacheConfigurationException OAUTHBEARER mechanism selected without providing a token
ISPN004094 org.infinispan.commons.CacheConfigurationException Cannot specify both template name and configuration for '%s'
ISPN004095 java.lang.IllegalArgumentException Not a Hot Rod URI: %s
ISPN004096 java.lang.IllegalArgumentException Invalid property format in URI: %s
ISPN004097 java.lang.IllegalArgumentException Illegal attempt to redefine an already existing cache configuration: %s
ISPN004098 WARN Closing connection %s due to transport error
ISPN004099 WARN Remote iteration over the entire result set of query '%s' without using pagination options is inefficient for large result sets. Please consider using 'startOffset' and 'maxResults' options.
ISPN004100 WARN Error reaching the server during iteration
ISPN004101 WARN Configuration property '%s' has been deprecated
ISPN004102 org.infinispan.commons.CacheConfigurationException Near cache number of max entries must be a positive number when using bloom filter optimization, it was %d
ISPN004103 org.infinispan.commons.CacheConfigurationException Near cache with bloom filter requires pool max active to be 1, was %s, and exhausted action to be WAIT, was %s
ISPN004104 WARN Failed to load and create an optional ProtoStream serialization context initializer: %s
ISPN004105 WARN Reverting to the initial server list for caches %s
ISPN004106 WARN Invalid active count after closing channel %s
ISPN004107 WARN Invalid created count after closing channel %s
ISPN004108 INFO Native IOUring transport not available, using NIO instead: %s
ISPN004109 DEBUG OpenTelemetry API is not present in the classpath. Client context tracing will not be propagated.
ISPN004110 DEBUG OpenTelemetry API is present in the classpath and the tracing propagation is enabled. Client context tracing will be propagated.
ISPN004111 DEBUG OpenTelemetry API is present in the classpath, but the tracing propagation is not enabled. Client context tracing will not be propagated.
ISPN008001 ERROR Failed clearing cache store
ISPN008003 ERROR SQL failure while integrating state into store
ISPN008009 ERROR I/O error while unmarshalling from stream
ISPN008010 ERROR *UNEXPECTED* ClassNotFoundException.
ISPN008011 ERROR Error while creating table; used DDL statement: '%s'
ISPN008015 ERROR Could not find a connection in jndi under the name '%s'
ISPN008016 ERROR Could not lookup connection with datasource %s
ISPN008017 WARN Failed to close naming context.
ISPN008018 ERROR Sql failure retrieving connection from datasource
ISPN008019 ERROR Issues while closing connection %s
ISPN008022 WARN Unexpected sql failure
ISPN008023 WARN Failure while closing the connection to the database
ISPN008024 ERROR Error while storing string key to database; key: '%s'
ISPN008025 ERROR Error while removing string keys from database
ISPN008026 ERROR In order for JdbcStringBasedStore to support %s, the Key2StringMapper needs to implement TwoWayKey2StringMapper. You should either make %s implement TwoWayKey2StringMapper or disable the sql. See [https://jira.jboss.org/browse/ISPN-579] for more details.
ISPN008027 ERROR SQL error while fetching stored entry with key: %s, lockingKey: %s
ISPN008028 org.infinispan.commons.CacheConfigurationException Attribute '%2$s' has not been set on '%1$s'
ISPN008029 org.infinispan.commons.CacheConfigurationException A ConnectionFactory has not been specified for this store
ISPN008031 ERROR Error committing JDBC transaction
ISPN008032 ERROR Error during rollback of JDBC transaction
ISPN008033 org.infinispan.persistence.spi.PersistenceException Exception encountered when preparing JDBC store Tx
ISPN008036 WARN Unable to notify the PurgeListener of expired cache entries as the configured key2StringMapper does not implement %s
ISPN008037 org.infinispan.persistence.spi.PersistenceException Error while writing entries in batch to the database:
ISPN008038 org.infinispan.persistence.spi.PersistenceException Error whilst removing keys in batch from the database. Keys: %s
ISPN008039 org.infinispan.commons.CacheConfigurationException The existing store was created without segmentation enabled
ISPN008040 org.infinispan.commons.CacheConfigurationException The existing store was created with %d segments configured, but the cache is configured with %d
ISPN008041 ERROR Error retrieving JDBC metadata
ISPN008042 ERROR SQL failure while retrieving size
ISPN008043 org.infinispan.commons.CacheConfigurationException Primary key has multiple columns but no key message schema defined, which is required when there is more than one key column
ISPN008044 org.infinispan.commons.CacheConfigurationException Multiple non key columns but no value message schema defined, which is required when there is more than one value column
ISPN008045 org.infinispan.commons.CacheConfigurationException Primary key %s was not found in the key schema %s
ISPN008046 org.infinispan.commons.CacheConfigurationException Additional value columns %s found that were not part of the schema, make sure the columns returned match the value schema %s
ISPN008047 org.infinispan.commons.CacheConfigurationException Schema not found for : %s
ISPN008048 org.infinispan.commons.CacheConfigurationException Key cannot be embedded when the value schema %s is an enum
ISPN008049 org.infinispan.commons.CacheConfigurationException Repeated fields are not supported, found %s in schema %s
ISPN008050 org.infinispan.commons.CacheConfigurationException Duplicate name %s found for nested schema: %s
ISPN008051 org.infinispan.commons.CacheConfigurationException Schema contained a field %s that is required but wasn't found in the query for schema %s
ISPN008052 org.infinispan.commons.CacheConfigurationException Primary key %s was found in the value schema %s but embedded key was not true
ISPN008053 org.infinispan.commons.CacheConfigurationException Delete and select queries do not have matching arguments. Delete was %s and select was %s
ISPN008054 org.infinispan.commons.CacheConfigurationException Named parameter %s in upsert statement [%s] is not available in columns from selectAll statement [%s]
ISPN008055 org.infinispan.commons.CacheConfigurationException No parameters are allowed for select all statement %s
ISPN008056 org.infinispan.commons.CacheConfigurationException No parameters are allowed for delete all statement %s
ISPN008057 org.infinispan.commons.CacheConfigurationException No parameters are allowed for sizer statement %s
ISPN008058 org.infinispan.commons.CacheConfigurationException Not all key columns %s were returned from select all statement %s
ISPN008059 org.infinispan.commons.CacheConfigurationException Select parameter %s is not returned from select all statement %s, select statement is %s
ISPN008060 org.infinispan.commons.CacheConfigurationException Non-terminated named parameter declaration at position %d in statement: %s
ISPN008061 org.infinispan.commons.CacheConfigurationException Invalid character %s at position %d in statement: %s
ISPN008062 org.infinispan.commons.CacheConfigurationException Unnamed parameters are not allowed, found one at %d in statement %s
ISPN008063 org.infinispan.commons.CacheConfigurationException Provided table name %s is not in form of (.) where SCHEMA is optional
ISPN008064 org.infinispan.commons.CacheConfigurationException No primary keys found for table %s, check case sensitivity
ISPN008065 org.infinispan.commons.CacheConfigurationException No column found that wasn't a primary key for table: %s
ISPN008066 org.infinispan.commons.CacheConfigurationException Unable to detect database dialect from JDBC driver name or connection metadata. Please provide this manually using the 'dialect' property in your configuration. Supported database dialect strings are %s
ISPN008067 org.infinispan.commons.CacheConfigurationException The size, select and select all attributes must be set for a query store
ISPN008068 org.infinispan.commons.CacheConfigurationException The delete, delete all and upsert attributes must be set for a query store that allows writes
ISPN008069 org.infinispan.commons.CacheConfigurationException Key columns are required for QueryStore
ISPN008070 org.infinispan.commons.CacheConfigurationException Message name must not be null if embedded key is true
ISPN008071 org.infinispan.commons.CacheConfigurationException Table name must be non null
ISPN008072 WARN There was no JDBC metadata present in table %s, unable to confirm if segments are properly configured! Segments are assumed to be properly configured.
ISPN010005 org.infinispan.commons.CacheConfigurationException Cannot enable HotRod wrapping if a marshaller and/or an entryWrapper have already been set
ISPN010007 org.infinispan.commons.CacheException The RemoteCacheStore for cache %s should be configured with hotRodWrapping enabled
ISPN010008 org.infinispan.commons.CacheConfigurationException RemoteStore only supports segmentation when using at least protocol version %s or higher
ISPN010009 org.infinispan.commons.CacheConfigurationException A RemoteStore must be shared in a cache that is clustered
ISPN010010 org.infinispan.commons.CacheConfigurationException Segmentation is not supported for a RemoteStore when the configured segments %d do not match the remote servers amount %s
ISPN010011 org.infinispan.commons.CacheConfigurationException Segmentation is not supported for a RemoteStore when the configured key media type %s does not match the remote servers key media type %s
ISPN010012 org.infinispan.commons.CacheConfigurationException The RemoteCacheStore cannot be segmented when grouping is enabled
ISPN014001 ERROR Could not locate key class %s
ISPN014002 ERROR Cannot instantiate Transformer class %s
ISPN014003 INFO Registering Query interceptor for cache %s
ISPN014004 DEBUG Custom commands backend initialized backing index %s
ISPN014009 WARN Indexed type '%1$s' is using a default Transformer. This is slow! Register a custom implementation using @Transformable
ISPN014013 org.infinispan.commons.CacheException Cache named '%1$s' is being shut down. No longer accepting remote commands.
ISPN014014 INFO Reindexed %1$d entities in %2$d ms
ISPN014015 DEBUG %1$d documents indexed in %2$d ms
ISPN014016 INFO Purging instances of '%s' from the index
ISPN014017 INFO Flushing index '%s'
ISPN014019 java.lang.IllegalStateException Cannot run Lucene queries on a cache '%s' that does not have indexing enabled
ISPN014021 org.infinispan.objectfilter.ParsingException Queries containing grouping and aggregation functions must use projections.
ISPN014022 java.lang.IllegalStateException Cannot have aggregate functions in GROUP BY clause
ISPN014023 org.infinispan.objectfilter.ParsingException Using the multi-valued property path '%s' in the GROUP BY clause is not currently supported
ISPN014024 org.infinispan.objectfilter.ParsingException The property path '%s' cannot be used in the ORDER BY clause because it is multi-valued
ISPN014025 java.lang.IllegalStateException The query must not use grouping or aggregation
ISPN014026 org.infinispan.objectfilter.ParsingException The expression '%s' must be part of an aggregate function or it should be included in the GROUP BY clause
ISPN014027 org.infinispan.objectfilter.ParsingException The property path '%s' cannot be projected because it is multi-valued
ISPN014033 org.infinispan.commons.CacheException Unable to resume suspended transaction %s
ISPN014034 org.infinispan.commons.CacheException Unable to suspend transaction
ISPN014036 org.infinispan.objectfilter.ParsingException Prefix, wildcard or regexp queries cannot be fuzzy: %s
ISPN014039 org.infinispan.commons.CacheException Queries containing groups or aggregations cannot be converted to an indexed query
ISPN014040 org.infinispan.commons.CacheException Unable to define filters, please use filters in the query string instead.
ISPN014042 org.infinispan.partitionhandling.AvailabilityException Cannot execute query: cluster is operating in degraded mode and partition handling configuration doesn't allow reads and writes.
ISPN014043 org.infinispan.commons.CacheException Cannot find an appropriate Transformer for key type %s. Indexing only works with entries keyed on Strings, primitives, byte[], UUID, classes that have the @Transformable annotation or classes for which you have defined a suitable Transformer in the indexing configuration. Alternatively, see org.infinispan.query.spi.SearchManagerImplementor.registerKeyTransformer.
ISPN014044 ERROR Failed to parse system property %s
ISPN014046 INFO Setting org.apache.lucene.search.BooleanQuery.setMaxClauseCount from system property %s to value %d
ISPN014047 WARN Ignoring system property %s because the value %d is smaller than the current value (%d) of org.apache.lucene.search.BooleanQuery.getMaxClauseCount()
ISPN014050 org.infinispan.commons.CacheException Interrupted while waiting for completions of some batch indexing operations.
ISPN014051 org.hibernate.search.util.common.SearchException %1$s entities could not be indexed. See the logs for details. First failure on entity '%2$s': %3$s
ISPN014052 java.lang.String Indexing instance of entity '%s' during mass indexing
ISPN014053 org.infinispan.commons.CacheException Invalid property key '%1$s`, it's not a string.
ISPN014054 org.infinispan.commons.CacheException Trying to execute query `%1$s`, but no type is indexed on cache.
ISPN014055 org.infinispan.commons.CacheException Cannot index entry since the search mapping failed to initialize.
ISPN014056 org.infinispan.commons.CacheException Only DELETE statements are supported by executeStatement
ISPN014057 org.infinispan.commons.CacheException DELETE statements cannot use paging (firstResult/maxResults)
ISPN014058 org.infinispan.commons.CacheException Projections are not supported with entryIterator()
ISPN014059 WARN The indexing engine is restarting, index updates will be skipped for the current data changes.
ISPN014060 INFO We're getting some errors from Hibernate Search or Lucene while we compute the index count/size for statistics. There is probably a concurrent reindexing ongoing.
ISPN014062 DEBUG Search engine is reloaded before the reindexing.
ISPN014063 INFO Reindexing starting.
ISPN014501 org.hibernate.search.util.common.SearchException Exception while retrieving the type model for '%1$s'.
ISPN014502 org.hibernate.search.util.common.SearchException Multiple entity types configured with the same name '%1$s': '%2$s', '%3$s'
ISPN014503 org.hibernate.search.util.common.SearchException Infinispan Search Mapper does not support named types. The type with name '%1$s' does not exist.
ISPN014504 org.hibernate.search.engine.environment.classpath.spi.ClassLoadingException Unable to load class [%1$s]
ISPN014505 org.hibernate.search.util.common.SearchException Unknown entity name: '%1$s'.
ISPN014506 org.hibernate.search.util.common.SearchException Invalid type for '%1$s': the entity type must extend '%2$s', but entity type '%3$s' does not.
ISPN014507 ERROR Error processing indexing operation.
ISPN014801 java.lang.IllegalArgumentException Argument cannot be null
ISPN014802 java.lang.IllegalArgumentException '%s' must be an instance of java.lang.Comparable
ISPN014803 java.lang.IllegalArgumentException Parameter name cannot be null or empty
ISPN014804 java.lang.IllegalStateException Query does not have parameters
ISPN014805 java.lang.IllegalArgumentException No parameter named '%s' was found
ISPN014806 java.lang.IllegalArgumentException No parameters named '%s' were found
ISPN014807 java.lang.IllegalArgumentException The list of values for 'in(..)' cannot be null or empty
ISPN014808 java.lang.IllegalStateException operator was already specified
ISPN014809 java.lang.IllegalArgumentException The given condition was created by another factory
ISPN014810 java.lang.IllegalArgumentException The given condition is already in use by another builder
ISPN014811 java.lang.IllegalStateException Sentence already started. Cannot use '%s' again.
ISPN014812 java.lang.IllegalArgumentException %s cannot be null
ISPN014813 java.lang.IllegalStateException This query already belongs to another query builder
ISPN014814 java.lang.IllegalStateException This sub-query does not belong to a parent query builder yet
ISPN014815 java.lang.IllegalArgumentException Grouping cannot be null or empty
ISPN014816 java.lang.IllegalStateException Grouping can be specified only once
ISPN014817 java.lang.IllegalArgumentException Expecting a java.lang.Collection or an array of java.lang.Object
ISPN014818 java.lang.IllegalStateException Incomplete sentence. Missing attribute path or operator.
ISPN014819 java.lang.IllegalStateException Cannot visit an incomplete condition.
ISPN014820 java.lang.IllegalStateException Old child condition not found in parent condition
ISPN014821 java.lang.IllegalArgumentException Projection cannot be null or empty
ISPN014822 java.lang.IllegalStateException Projection can be specified only once
ISPN014823 java.lang.IllegalArgumentException maxResults must be greater than 0
ISPN014824 java.lang.IllegalArgumentException startOffset cannot be less than 0
ISPN014825 java.lang.IllegalStateException Query parameter '%s' was not set
ISPN014826 java.lang.IllegalArgumentException Left and right condition cannot be the same
ISPN014827 WARN Distributed sort not supported for non-indexed query '%s'. Consider using an index for optimal performance.
ISPN017001 INFO Infinispan CDI extension version: %s
ISPN017002 INFO Configuration for cache '%s' has been defined in cache manager '%s'
ISPN017003 java.lang.IllegalArgumentException %s parameter must not be null
ISPN017003 INFO Overriding default embedded configuration not found - adding default implementation
ISPN017004 INFO Overriding default embedded cache manager not found - adding default implementation
ISPN017004 INFO Overriding default remote cache manager not found - adding default implementation
ISPN028501 org.infinispan.objectfilter.ParsingException The type %s does not have an accessible property named '%s'.
ISPN028502 org.infinispan.objectfilter.ParsingException Unknown alias: %s.
ISPN028503 org.infinispan.objectfilter.ParsingException Property %2$s can not be selected from type %1$s since it is an embedded entity.
ISPN028504 org.infinispan.objectfilter.ParsingException The property %s is an embedded entity and does not allow comparison predicates
ISPN028505 org.infinispan.objectfilter.ParsingException Invalid numeric literal '%s'
ISPN028506 org.infinispan.objectfilter.ParsingException Invalid date literal '%s'
ISPN028507 org.infinispan.objectfilter.ParsingException Invalid boolean literal '%s'
ISPN028508 org.infinispan.objectfilter.ParsingException Invalid enum literal '%s' for enum type %s
ISPN028509 org.infinispan.objectfilter.ParsingException Filters cannot use grouping or aggregations
ISPN028510 java.lang.IllegalStateException Unknown entity name %s
ISPN028511 java.lang.IllegalArgumentException namedParameters cannot be null
ISPN028512 java.lang.IllegalStateException Aggregation %s is not supported
ISPN028513 java.lang.IllegalStateException Aggregation AVG cannot be applied to property of type %s
ISPN028514 org.infinispan.objectfilter.ParsingException %s aggregation can only be applied to property references.
ISPN028515 org.infinispan.objectfilter.ParsingException Cannot have aggregate functions in the WHERE clause : %s.
ISPN028516 org.infinispan.objectfilter.ParsingException Cannot have aggregate functions in the GROUP BY clause : %s.
ISPN028517 java.lang.IllegalStateException The predicate %s can not be added since there may be only one root predicate.
ISPN028518 java.lang.IllegalStateException The predicate %s can not be added since there may be only one sub-predicate in a NOT predicate.
ISPN028519 org.infinispan.objectfilter.ParsingException Cannot apply predicates directly to an entity alias: %s
ISPN028520 org.infinispan.objectfilter.ParsingException Full-text queries are not allowed in the HAVING clause
ISPN028521 org.infinispan.objectfilter.ParsingException Full-text queries cannot be applied to property '%2$s' in type %1$s unless the property is indexed and analyzed.
ISPN028522 org.infinispan.objectfilter.ParsingException No relational queries can be applied to property '%2$s' in type %1$s since the property is analyzed.
ISPN028523 org.infinispan.objectfilter.ParsingException Filters cannot use full-text searches
ISPN028524 org.infinispan.objectfilter.ParsingException Left side argument must be a property path
ISPN028525 org.infinispan.objectfilter.ParsingException Invalid query: %s
ISPN028526 org.infinispan.objectfilter.ParsingException Invalid query: %s; Parser error messages: %s.
ISPN028527 org.infinispan.objectfilter.ParsingException Full-text queries cannot be applied to property '%2$s' in type %1$s unless the property is indexed.
ISPN028528 org.infinispan.objectfilter.ParsingException Error parsing content. Data not stored as protobuf?
ISPN029001 org.infinispan.lock.exception.ClusteredLockException The lock was deleted.
ISPN029001 org.infinispan.commons.CacheConfigurationException Max size of index node (%d) is limited to 32767 bytes.
ISPN029002 org.infinispan.commons.CacheConfigurationException Min size of index node (%d) must be less or equal to max size (%d).
ISPN029003 org.infinispan.lock.exception.ClusteredLockException LOCK[%s] Unlock failed from node %s
ISPN029003 org.infinispan.persistence.spi.PersistenceException Calculation of size has been interrupted.
ISPN029004 org.infinispan.lock.exception.ClusteredLockException Missing name for the clustered lock
ISPN029005 org.infinispan.lock.exception.ClusteredLockException Invalid number of owner. It must be higher than zero or -1 but it was %s
ISPN029006 org.infinispan.lock.exception.ClusteredLockException Invalid reliability mode. Modes are AVAILABLE or CONSISTENT
ISPN029006 WARN Cannot truncate index
ISPN029007 org.infinispan.lock.exception.ClusteredLockException Invalid scope for tag . Expected CACHE_CONTAINER but was %s
ISPN029007 ERROR Unexpected error in index updater thread.
ISPN029008 org.infinispan.lock.exception.ClusteredLockException Cannot create clustered locks when clustering is not enabled
ISPN029008 ERROR Failed to close the index file.
ISPN029009 INFO Configuration is not clustered, clustered locks are disabled
ISPN029009 ERROR Unexpected error in data compactor.
ISPN029010 org.infinispan.lock.exception.ClusteredLockException MBean registration failed
ISPN029011 ERROR Cannot close data file.
ISPN029012 org.infinispan.commons.CacheConfigurationException Compaction threshold (%f) should be between 0 (exclusively) and 1 (inclusively).
ISPN029013 org.infinispan.persistence.spi.PersistenceException Cannot open index on %s
ISPN029014 org.infinispan.persistence.spi.PersistenceException Interrupted while stopping the store
ISPN029015 org.infinispan.persistence.spi.PersistenceException Interrupted while pausing the index for clear.
ISPN029016 org.infinispan.persistence.spi.PersistenceException Cannot clear/reopen index.
ISPN029017 org.infinispan.persistence.spi.PersistenceException Cannot clear data directory.
ISPN029018 org.infinispan.persistence.spi.PersistenceException The serialized form of key %s is too long (%d); with maxNodeSize=%d bytes you can use only keys serialized to at most %d bytes.
ISPN029019 org.infinispan.persistence.spi.PersistenceException Cannot load key %s from index.
ISPN029020 org.infinispan.persistence.spi.PersistenceException Index looks corrupt.
ISPN029021 ERROR File id %s encountered an exception while compacting, file may be orphaned
ISPN029501 org.infinispan.counter.exception.CounterOutOfBoundsException %s reached.
ISPN029503 org.infinispan.counter.exception.CounterConfigurationException The counter name is missing.
ISPN029504 org.infinispan.counter.exception.CounterConfigurationException Invalid storage mode. It must be non-null
ISPN029505 org.infinispan.counter.exception.CounterConfigurationException Invalid storage mode. PERSISTENT is not allowed without global state enabled in cache container.
ISPN029506 org.infinispan.counter.exception.CounterConfigurationException Invalid number of owner. It must be higher than zero but it was %s
ISPN029507 org.infinispan.counter.exception.CounterConfigurationException Invalid reliability mode. It must be non-null
ISPN029508 org.infinispan.counter.exception.CounterConfigurationException Invalid initial value for counter. It must be between %s and %s (inclusive) but was %s
ISPN029509 org.infinispan.counter.exception.CounterConfigurationException Invalid concurrency-level. It must be higher than zero but it was %s
ISPN029514 org.infinispan.counter.exception.CounterException Invalid counter type. Expected=%s but got %s
ISPN029514 org.infinispan.counter.exception.CounterException Invalid counter type. Expected=%s but got %s
ISPN029515 org.infinispan.counter.exception.CounterException Unable to fetch counter manager caches.
ISPN029516 org.infinispan.counter.exception.CounterException Counter '%s' is not defined.
ISPN029516 org.infinispan.counter.exception.CounterNotFoundException Counter '%s' is not defined.
ISPN029517 org.infinispan.counter.exception.CounterConfigurationException Duplicated counter name found. Counter '%s' already exists.
ISPN029518 java.lang.IllegalStateException Metadata not found but counter exists. Counter=%s
ISPN029520 org.infinispan.counter.exception.CounterConfigurationException Invalid scope for tag . Expected CACHE_CONTAINER but was %s
ISPN029522 org.infinispan.counter.exception.CounterException WEAK and BOUNDED encoded flag isn't supported!
ISPN029524 org.infinispan.counter.exception.CounterConfigurationException Lower bound (%s) and upper bound (%s) can't be the same.
ISPN029525 org.infinispan.counter.exception.CounterConfigurationException Cannot rename file %s to %s
ISPN029526 org.infinispan.counter.exception.CounterConfigurationException Error while persisting counter's configurations
ISPN029527 org.infinispan.counter.exception.CounterConfigurationException Error while reading counter's configurations
ISPN029528 org.infinispan.counter.exception.CounterException CounterManager hasn't started yet or has been stopped.
ISPN029529 org.infinispan.counter.exception.CounterException MBean registration failed
ISPN290010 ERROR Cannot close/delete data file %d.

JBERET

Code Level Return Type Message
JBERET000001 WARN Failed to run batchlet %s
JBERET000002 WARN A step cannot contain both chunk type and batchlet type: %s
JBERET000003 WARN A concrete step must contain either a chunk or batchlet type: %s
JBERET000004 WARN Unrecognized property category: %s, variable name: %s in property value: %s
JBERET000005 WARN Invalid exception filter class '%s'
JBERET000006 TRACE The job: %s already exists in the job repository and will not be added.
JBERET000007 ERROR Failed to run job %s, %s, %s
JBERET000008 WARN Possible syntax errors in property: %s
JBERET000009 WARN A decision cannot be the first element: %s
JBERET000010 DEBUG Could not resolve expression because: %s
JBERET000011 WARN Failed to stop the job %s, %s, %s
JBERET000012 WARN Failed to clone %s when running job [%s] and step [%s]
JBERET000013 WARN Failed to destroy artifact %s
JBERET000014 DEBUG Tables created for batch job repository with DDL file %s
JBERET000015 DEBUG Adding ddl entry for batch job repository:%n %s
JBERET000016 WARN Failed to close %s: %s
JBERET000017 DEBUG Persisted %s with id %s
JBERET000018 WARN Could not find the original step execution to restart. Current step execution id: %s, step name: %s
JBERET000019 WARN Encountered errors when creating batch job repository tables.
JBERET000020 WARN Failed to get database product name from connection %s
JBERET000021 INFO About to initialize batch job repository with ddl-file: %s for database %s
JBERET000022 TRACE %s is not implemented for local transactions
JBERET000023 INFO Removing %s %s
JBERET000024 INFO About to mark it FAILED before restarting job execution %s, job name %s, batch status %s, restart mode %s
JBERET000025 WARN Failed to set attributes to script context for engine %s, script type %s, and some data will not be passed to script
JBERET000026 INFO job %s is added to waiting queue due to low number of available threads: %s
JBERET000027 INFO job %s is taken from waiting queue and resubmitted
JBERET000028 WARN Failed to serialize exception: %s
JBERET000029 INFO Applied custom restart position: %s, instead of the default restart position: %s
JBERET000030 INFO Resolved job %s
JBERET000031 WARN Problem finalizing partition execution in step execution %s
JBERET000032 WARN Failed to get executions for job %s; instead got cached executions: %s
JBERET000033 INFO Stopping job execution: %s
JBERET000034 DEBUG The number of job executions read from the job repository is limited to %d.

JBREM

Code Level Return Type Message
JBREM-00001 java.io.IOException Internal Error: received a message with a duplicate ID
JBREM-00001 TRACE Message with unknown protocol ID %d received
JBREM-00001 TRACE Rejected invalid SASL mechanism %s
JBREM000200 DEBUG Remote connection failed: %s
JBREM000201 java.io.IOException Received invalid message on %s
JBREM000202 java.io.IOException Abrupt close on %s
JBREM000203 WARN Message missing protocol byte
JBREM000204 WARN Buffer underflow parsing message with protocol ID %02x
JBREM000205 DEBUG Failed to accept a connection: %s
JBREM000206 org.jboss.remoting3.NotOpenException Channel is not open
JBREM000207 org.jboss.remoting3.ChannelBusyException Failed to send a message (channel is busy)
JBREM000208 java.io.InterruptedIOException Write operation interrupted
JBREM000209 ERROR An exception occurred in a message handler
JBREM000210 FATAL Internal Error: received a message with duplicate ID %d from %s
JBREM000211 java.lang.IllegalArgumentException Invalid XNIO worker; the worker must match the Remoting Endpoint worker
JBREM000212 java.io.IOException Failed to configure SSL context
JBREM000300 org.wildfly.security.auth.AuthenticationException Authentication failed due to I/O error
JBREM000301 java.io.IOException Mechanism name "%s" is too long
JBREM000302 java.io.IOException Authentication message too large
JBREM000303 org.wildfly.security.auth.AuthenticationException Authentication protocol failed (extra response)
JBREM000304 org.wildfly.security.auth.AuthenticationException Server rejected authentication
JBREM000305 org.wildfly.security.auth.AuthenticationException Authentication failed (connection closed)
JBREM000306 org.wildfly.security.auth.AuthenticationException Authentication failed (SASL client construction failure)
JBREM000307 org.wildfly.security.auth.AuthenticationException Authentication interrupted
JBREM000308 org.wildfly.security.auth.AuthenticationException Authentication failed (no mechanisms left), tried: %s
JBREM000309 org.wildfly.security.auth.AuthenticationException Authentication not supported for this peer

JBTHR

Code Level Return Type Message
JBTHR-0001 INFO JBoss Threads version %s
JBTHR00001 org.jboss.threads.ThreadCreationException Thread factory did not produce a thread
JBTHR00002 java.util.concurrent.RejectedExecutionException Task limit reached
JBTHR00003 java.util.concurrent.TimeoutException Operation timed out
JBTHR00004 java.util.concurrent.CancellationException Operation was cancelled
JBTHR00005 java.util.concurrent.ExecutionException Operation failed
JBTHR00006 org.jboss.threads.ThreadCreationException Unable to add new thread to the running set
JBTHR00007 org.jboss.threads.ExecutionInterruptedException Task execution interrupted
JBTHR00008 java.util.concurrent.RejectedExecutionException Task rejected
JBTHR00009 org.jboss.threads.StoppedExecutorException Executor has been shut down
JBTHR00010 org.jboss.threads.ExecutionTimedOutException Task execution timed out
JBTHR00011 ERROR Task execution failed for task %s
JBTHR00012 java.lang.IllegalStateException Cannot await termination of a thread pool from one of its own threads
JBTHR00013 java.util.concurrent.RejectedExecutionException No executors available to run task
JBTHR00014 ERROR Error submitting task %s to executor
JBTHR00100 java.lang.IllegalArgumentException Keep-alive may only be set to 0 for this executor type
JBTHR00101 java.lang.IllegalArgumentException Cannot reduce maximum threads below current thread number of running threads
JBTHR00102 java.lang.IllegalArgumentException Empty array parameter is not empty
JBTHR00103 java.lang.IllegalStateException The current thread does not support interrupt handlers
JBTHR00104 java.lang.IllegalStateException Executor is not shut down
JBTHR00105 java.util.ConcurrentModificationException Concurrent modification of collection detected
JBTHR00106 java.util.NoSuchElementException No such element (iteration past end)
JBTHR00107 java.lang.RuntimeException Unknown throwable received
JBTHR00108 ERROR Interrupt handler %s threw an exception
JBTHR00200 java.lang.SecurityException %s() not allowed on container-managed executor

JBWEB

Code Level Return Type Message
JBWEB005000 WARN Invalid %s value for the initParam keepgenerated. Will use the default value of "false"
JBWEB005001 WARN Invalid %s value for the initParam trimSpaces. Will use the default value of "false"
JBWEB005002 WARN Invalid %s value for the initParam enablePooling. Will use the default value of "false"
JBWEB005003 WARN Invalid %s value for the initParam mappedfile. Will use the default value of "true"
JBWEB005004 WARN Invalid %s value for the initParam sendErrToClient. Will use the default value of "false"
JBWEB005005 WARN Invalid %s value for the initParam classdebuginfo. Will use the default value of "true"
JBWEB005006 WARN Invalid %s value for the initParam checkInterval. Will disable periodic checking
JBWEB005007 WARN Invalid %s value for the initParam modificationTestInterval. Will use the default value of "4" seconds
JBWEB005008 WARN Invalid %s value for the initParam recompileOnFail. Will use the default value of "false"
JBWEB005009 WARN Invalid %s value for the initParam development. Will use the default value of "true"
JBWEB005010 WARN Invalid %s value for the initParam suppressSmap. Will use the default value of "false"
JBWEB005011 WARN Invalid %s value for the initParam dumpSmap. Will use the default value of "false"
JBWEB005012 WARN Invalid %s value for the initParam genStrAsCharArray. Will use the default value of "false"
JBWEB005013 WARN Invalid %s value for the initParam errorOnUseBeanInvalidClassAttribute. Will use the default value of "true"
JBWEB005014 ERROR The JSP container needs a work directory
JBWEB005015 ERROR The JSP container needs a valid work directory [%s]
JBWEB005016 WARN Invalid %s value for the initParam fork. Will use the default value of "true"
JBWEB005017 WARN Invalid %s value for the initParam xpoweredBy. Will use the default value of "true"
JBWEB005018 WARN Invalid %s value for the initParam displaySourceFragment. Will use the default value of "true"
JBWEB005019 WARN Failed loading Java compiler %s
JBWEB005020 WARN Failed loading custom options class %s
JBWEB005021 ERROR File "%s" not found
JBWEB005022 ERROR Error destroying JSP Servlet instance
JBWEB005023 WARN Bad value %s in the url-pattern subelement in the webapp descriptor
JBWEB005024 DEBUG Exception closing reader
JBWEB005025 DEBUG Parent class loader is: %s
JBWEB005026 DEBUG Compilation classpath: %s
JBWEB005027 ERROR Error reading source file %s
JBWEB005028 ERROR Error reading class file %s
JBWEB005029 WARN Unknown source JVM %s ignored
JBWEB005030 WARN Unknown target JVM %s ignored
JBWEB005031 ERROR Error creating compiler report
JBWEB005032 ERROR Compiler error
JBWEB005033 ERROR Exception initializing page context
JBWEB005034 ERROR Error loading core class
JBWEB005035 WARN Invalid value '%s' for the initParam maxLoadedJsps. Will use the default value of '-1
JBWEB005036 WARN Invalid value '%s' for the initParam jspIdleTimeout. Will use the default value of '-1'
JBWEB005037 WARN Failed to delete generated Java file '%s'
JBWEB005038 WARN Failed to delete generated class file(s)
JBWEB005039 ERROR Invalid optimizeScriptlets value %s, must be true or false
JBWEB005040 WARN The "isThreadSafe" page directive attribute used in %s has been deprecated and will be removed in version 4.0 of the JSP specification
JBWEB005041 WARN Unsupported source VM %s requested, using %s
JBWEB005042 WARN Unsupported target VM %s requested, using %s

JBWS

Code Level Return Type Message
JBWS020003 TRACE Ignore attribute: [uri=%s, qname=%s, value=%s]
JBWS020005 ERROR Cannnot parse: %s
JBWS020006 TRACE createElement {%s}%s
JBWS020007 TRACE createElement {%s}%s:%s
JBWS020008 TRACE pushGroupID: %s (%s)
JBWS020009 TRACE peekGroupID: %s (%s)
JBWS020010 TRACE popGroupID: %s (%s)
JBWS020012 WARN Non-standard method: %s
JBWS020015 TRACE Could not get %s module classloader: %s
JBWS021003 WARN %s element not supported
JBWS021005 ERROR Cannot get port component name {%s}, we have: %s
JBWS021006 WARN Element in webservices.xml not namespace qualified: %s
JBWS021010 WARN Multiple matching port-component-ref: sei={%s} port={%s}
JBWS021017 ERROR Cannot get children for resource %s
JBWS021018 ERROR Cannot get name for resource %s
JBWS021019 TRACE Cannot get URL for %s
JBWS022001 ERROR Cannot get children for resource %s
JBWS022002 ERROR Cannot get name for resource %s
JBWS022010 TRACE Class %s is not assignable from %s due to conflicting classloaders: %s and %s
JBWS022011 TRACE Could not clear blacklist for classloader %s
JBWS022012 DEBUG Could not load %s
JBWS022013 ERROR Cannot parse: %s
JBWS022021 ERROR Cannot read resource: %s
JBWS022022 WARN Cannot load ID '%s' as URL (protocol = %s)
JBWS022025 DEBUG WSDL import published to %s
JBWS022026 DEBUG XMLSchema import published to %s
JBWS022027 WARN Cannot delete published wsdl document: %s
JBWS022042 DEBUG Cannot register processor %s with JMX server, will be trying using the default managed implementation.
JBWS022043 ERROR Cannot register processor %s with JMX server
JBWS022044 ERROR Cannot unregister processor %s with JMX server
JBWS022052 INFO Starting %s %s
JBWS022053 DEBUG Unable to calculate webservices port, using default %s
JBWS022054 DEBUG Unable to calculate webservices secure port, using default %s
JBWS022055 DEBUG Using undefined webservices host: %s
JBWS022056 DEBUG Setting webservices host to localhost: %s
JBWS022057 DEBUG Could not get address for host: %s
JBWS022058 WARN Could not get port for webservices configuration from configured HTTP connector
JBWS022059 WARN Unable to read from the http servlet request
JBWS022060 ERROR Cannot trace SOAP message
JBWS022061 WARN Method invocation failed with exception
JBWS022090 TRACE Cannot get %s from root file, trying with additional metadata files
JBWS022098 TRACE Cannot get %s from %s
JBWS022099 DEBUG Error during deployment: %s
JBWS022100 ERROR Error while destroying deployment %s due to previous exception
JBWS022102 ERROR Cannot stop endpoint in state %s: %s
JBWS022103 ERROR Cannot start endpoint in state %s: %s
JBWS022110 WARN Could not add handler %s as part of client or endpoint configuration
JBWS022111 WARN PortNamePattern and ServiceNamePattern filters not supported; adding handlers anyway
JBWS022112 WARN Init params not supported; adding handler anyway
JBWS022113 ERROR Error closing JAXBIntro configuration stream: %s
JBWS022114 TRACE %s doesn't work on %s
JBWS022115 TRACE Cannot get URL for %s
JBWS022116 TRACE Could not find %s in the additional metadatafiles
JBWS022118 WARN Cannot obtain host for vituralHost %s, use default host
JBWS022119 WARN Cannot obtain port for vituralHost %s, use default port
JBWS024015 INFO Cannot use the bus associated to the current deployment for starting a new endpoint, creating a new bus...
JBWS024016 TRACE Unable to retrieve server config; this is an expected condition for jboss-modules enabled client.
JBWS024018 WARN Unable to retrieve port QName from %s, trying matching port using endpoint interface name only.
JBWS024033 DEBUG Setting new service endpoint address in wsdl: %s
JBWS024034 DEBUG WSDL service endpoint address rewrite required because of server configuration: %s
JBWS024035 DEBUG WSDL service endpoint address rewrite required because of invalid URL: %s
JBWS024036 DEBUG WSDL service endpoint address rewrite not required: %s
JBWS024037 DEBUG Rewritten new candidate WSDL service endpoint address '%s' to '%s'
JBWS024038 DEBUG Invalid url '%s' provided, using original one without rewriting: %s
JBWS024040 TRACE About to authenticate, using security domain %s
JBWS024041 TRACE Authenticated, principal=%s
JBWS024042 TRACE Security context propagated for principal %s
JBWS024054 ERROR User principal is not available on the current message
JBWS024059 WARN %s cannot open stream for resource: %s
JBWS024060 DEBUG %s cannot resolve resource: %s
JBWS024061 INFO Adding service endpoint metadata: %s
JBWS024062 DEBUG id %s, overriding portName %s with %s
JBWS024063 DEBUG id %s, overriding portName %s with %s
JBWS024064 DEBUG id %s, enabling MTOM...
JBWS024065 DEBUG id %s, enabling Addressing...
JBWS024066 DEBUG id %s, enabling RespectBinding...
JBWS024067 DEBUG id %s, overriding wsdlFile location with %s
JBWS024068 WARN Handler chain deployment descriptor contribution: PortNamePattern, ServiceNamePattern and ProtocolBindings filters not supported; adding handlers anyway.
JBWS024069 WARN Init params not supported, handler: %s
JBWS024073 ERROR Error registering bus for management: %s
JBWS024074 INFO WSDL published to: %s
JBWS024077 WARN Cannot get wsdl publish location for null wsdl location and serviceName
JBWS024078 WARN WSDL publisher not configured, unable to publish contract for endpoint class %s
JBWS024080 DEBUG Actual configuration from file: %s
JBWS024086 TRACE Error while getting default WSSConfig
JBWS024087 WARN Could not early initialize security engine
JBWS024089 TRACE Unable to load additional configuration from %s
JBWS024091 DEBUG Could not get WSDL from %s, aborting soap:address rewrite.
JBWS024092 INFO Adding %s policy attachment with id='%s' to honor requirement from %s.
JBWS024095 WARN Unknown strategy '%s' requested for selecting the Apache CXF Bus to be used for building JAXWS clients; default strategy will be used.
JBWS024097 WARN Could not delete wsdl file %s
JBWS024098 DEBUG Deleted wsdl file %s
JBWS024099 WARN Could not create wsdl data path.
JBWS024100 WARN Could not delete wsdl directory %s
JBWS024102 DEBUG JASPI authentication isn't enabled, can not find JASPI modules and classes
JBWS024103 DEBUG Could not load BouncyCastle security provider; either setup your classpath properly or prevent loading by using the '%s' system property.
JBWS024105 WARN Could not create instance of specified ClientBusSelector: %s
JBWS024106 WARN Could not remove previuosly set features on client: %s
JBWS024110 ERROR Unable to process handler element: %s
JBWS024112 WARN Could not construct reference for config: %s
JBWS024114 ERROR No security domain associated
JBWS024115 ERROR Failed to compute UsernameToken profile digest from expected password

JIPI

Code Level Return Type Message
JIPI020200 WARN Could not load entity class '%s', ignoring this error and continuing with application deployment
JIPI020201 java.lang.IllegalArgumentException Cannot change input stream reference.
JIPI020202 java.lang.IllegalArgumentException Parameter %s is empty
JIPI020203 java.lang.RuntimeException Missing PersistenceUnitMetadata (thread local wasn't set)
JIPI020204 java.lang.RuntimeException Not yet implemented
JIPI020205 java.lang.IllegalArgumentException Parameter %s is null
JIPI020250 java.lang.RuntimeException Unable to open VirtualFile-based InputStream %s
JIPI020251 java.lang.IllegalArgumentException URI syntax error
JIPI020252 WARN second level cache not integrated - %s

JIPIORMV6

Code Level Return Type Message
JIPIORMV6020260 INFO Second level cache enabled for %s
JIPIORMV6020261 java.lang.IllegalStateException Hibernate ORM did not register LifeCycleListener
JIPIORMV6020263 java.lang.IllegalStateException hibernate.id.new_generator_mappings set to false is not supported, remove the setting or set to true. Refer to Hibernate ORM migration documentation for how to update the next id state in the application database.

JIPISEARCH

Code Level Return Type Message
JIPISEARCH020290 java.lang.IllegalStateException Failed to parse property '%2$s' while integrating Hibernate Search into persistence unit '%1$s

JNDIWFHTTP

Code Level Return Type Message
JNDIWFHTTP000001 javax.naming.NamingException Unexpected data in response
JNDIWFHTTP000002 javax.naming.NamingException At least one URI must be provided
JNDIWFHTTP000003 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted

KEYCLOAK

Code Level Return Type Message
KEYCLOAK000001 org.jboss.as.controller.OperationFailedException The migrate operation can not be performed: the server must be in admin-only mode
KEYCLOAK000002 java.lang.String Migration failed, see results for more details.

LITE-EXTENSION-TRANSLATOR-

Code Level Return Type Message
LITE-EXTENSION-TRANSLATOR-000000 org.jboss.weld.exceptions.IllegalStateException Unable to instantiate object from class {0} via no-args constructor. The exception was: {1}
LITE-EXTENSION-TRANSLATOR-000001 org.jboss.weld.exceptions.IllegalArgumentException Unexpected extension method argument: {0}
LITE-EXTENSION-TRANSLATOR-000002 org.jboss.weld.exceptions.IllegalArgumentException {0} methods can't declare a parameter of type {1}, found at {2}. Method name - {3}
LITE-EXTENSION-TRANSLATOR-000003 org.jboss.weld.exceptions.IllegalArgumentException Unknown declaration {0}
LITE-EXTENSION-TRANSLATOR-000004 org.jboss.weld.exceptions.IllegalStateException Observer method without an @Observes parameter: {0}
LITE-EXTENSION-TRANSLATOR-000005 org.jboss.weld.exceptions.IllegalArgumentException Unknown primitive type: {0}
LITE-EXTENSION-TRANSLATOR-000006 org.jboss.weld.exceptions.DefinitionException Zero or more than one parameter of type {0} for method {1} with declaring class {2}
LITE-EXTENSION-TRANSLATOR-000007 org.jboss.weld.exceptions.IllegalStateException Unknown query parameter: {0}
LITE-EXTENSION-TRANSLATOR-000008 org.jboss.weld.exceptions.IllegalStateException Unable to invoke extension method {0} with arguments {1}. The exception was: {2}
LITE-EXTENSION-TRANSLATOR-000009 org.jboss.weld.exceptions.IllegalStateException Unable to load class with name {0}. The exception was: {1}
LITE-EXTENSION-TRANSLATOR-000010 org.jboss.weld.exceptions.IllegalArgumentException Unrecognized parameter of type {0} declared in class {1}#{2}
LITE-EXTENSION-TRANSLATOR-000011 org.jboss.weld.exceptions.IllegalArgumentException Unknown reflection type {0}
LITE-EXTENSION-TRANSLATOR-000012 org.jboss.weld.exceptions.IllegalArgumentException Unknown annotation member {0}
LITE-EXTENSION-TRANSLATOR-000013 org.jboss.weld.exceptions.IllegalArgumentException Not {0}:{1}
LITE-EXTENSION-TRANSLATOR-000014 org.jboss.weld.exceptions.DefinitionException Unable to access annotation member(s) for annotation {0}. The exception was: {1}
LITE-EXTENSION-TRANSLATOR-000015 org.jboss.weld.exceptions.IllegalArgumentException Provided type {0} is illegal because it doesn't match an of known annotation member types.
LITE-EXTENSION-TRANSLATOR-000016 WARN AnnotationBuilderFactoryImpl wasn't initialized properly before using it. This can be caused by attempted usage outside of build compatible extension cycle. The init process will use a fallback method.
LITE-EXTENSION-TRANSLATOR-000017 org.jboss.weld.exceptions.DeploymentException There was a problem executing Build Compatible Extension method {0} during phase {1}. The exception was: {2}

LRA

Code Level Return Type Message
LRA025001 java.lang.String LRA created with an unexpected status code: %d, coordinator response '%s'
LRA025001 java.lang.String LRA created with an unexpected status code: %d, coordinator response '%s'
LRA025002 java.lang.String Leaving LRA: %s, ends with an unexpected status code: %d, coordinator response '%s'
LRA025002 java.lang.String Leaving LRA: %s, ends with an unexpected status code: %d, coordinator response '%s'
LRA025003 java.lang.String LRA participant class '%s' with asynchronous temination but no @Status or @Forget annotations
LRA025003 java.lang.String LRA participant class '%s' with asynchronous temination but no @Status or @Forget annotations
LRA025004 java.lang.String LRA finished with an unexpected status code: %d, coordinator response '%s'
LRA025004 java.lang.String LRA finished with an unexpected status code: %d, coordinator response '%s'
LRA025005 java.lang.String LRA coordinator '%s' returned an invalid status code '%s' for LRA '%s'
LRA025005 java.lang.String LRA coordinator '%s' returned an invalid status code '%s' for LRA '%s'
LRA025006 java.lang.String LRA coordinator '%s' returned no content on #getStatus call for LRA '%s'
LRA025006 java.lang.String LRA coordinator '%s' returned no content on #getStatus call for LRA '%s'
LRA025007 java.lang.String LRA coordinator '%s' returned an invalid status for LRA '%s'
LRA025007 java.lang.String LRA coordinator '%s' returned an invalid status for LRA '%s'
LRA025008 java.lang.String Too late to join with the LRA '%s', coordinator response: '%s'
LRA025008 java.lang.String Too late to join with the LRA '%s', coordinator response: '%s'
LRA025009 java.lang.String Failed enlisting to LRA '%s', coordinator '%s' responded with status '%s'
LRA025009 java.lang.String Failed enlisting to LRA '%s', coordinator '%s' responded with status '%s'
LRA025010 java.lang.String Error when converting String '%s' to URL
LRA025010 java.lang.String Error when converting String '%s' to URL
LRA025011 java.lang.String Invalid LRA id format to create LRA record from LRA id '%s', link URI '%s' (reason: %s)
LRA025011 java.lang.String Invalid LRA id format to create LRA record from LRA id '%s', link URI '%s' (reason: %s)
LRA025012 java.lang.String Cannot found compensator url '%s' for lra '%s'
LRA025012 java.lang.String Cannot found compensator url '%s' for lra '%s'
LRA025013 WARN Could not recreate abstract record '%s'
LRA025013 WARN Could not recreate abstract record '%s'
LRA025014 WARN reason '%s': container request for method '%s': lra: '%s'
LRA025014 WARN reason '%s': container request for method '%s': lra: '%s'
LRA025015 WARN LRA participant completion for asynchronous method %s#%s should return %d and not %d
LRA025015 WARN LRA participant completion for asynchronous method %s#%s should return %d and not %d
LRA025016 java.lang.String Cannot get status of nested lra '%s' as outer one '%s' is still active
LRA025016 java.lang.String Cannot get status of nested lra '%s' as outer one '%s' is still active
LRA025017 java.lang.String Invalid recovery url '%s' to join lra '%s'
LRA025017 java.lang.String Invalid recovery url '%s' to join lra '%s'
LRA025018 ERROR Invalid format of lra id '%s' to replace compensator '%s'
LRA025018 ERROR Invalid format of lra id '%s' to replace compensator '%s'
LRA025019 WARN LRA participant `%s` returned immediate state (Compensating/Completing) from CompletionStage. LRA id: %s
LRA025019 WARN LRA participant `%s` returned immediate state (Compensating/Completing) from CompletionStage. LRA id: %s
LRA025020 ERROR Cannot process non JAX-RS LRA participant
LRA025020 ERROR Cannot process non JAX-RS LRA participant
LRA025021 java.lang.String Invalid format of LRA id to be converted to LRA coordinator url, was '%s'
LRA025021 java.lang.String Invalid format of LRA id to be converted to LRA coordinator url, was '%s'
LRA025022 java.lang.String Failed enlisting to LRA '%s', coordinator '%s' responded with status '%d (%s)'. Returning '%d (%s)'.
LRA025022 java.lang.String Failed enlisting to LRA '%s', coordinator '%s' responded with status '%d (%s)'. Returning '%d (%s)'.
LRA025023 java.lang.String Could not %s LRA '%s': coordinator '%s' responded with status '%s'
LRA025023 java.lang.String Could not %s LRA '%s': coordinator '%s' responded with status '%s'
LRA025024 java.lang.String Error when encoding parent LRA id URL '%s' to String
LRA025024 java.lang.String Error when encoding parent LRA id URL '%s' to String
LRA025025 java.lang.String Unable to process LRA annotations: %s'
LRA025025 java.lang.String Unable to process LRA annotations: %s'
LRA025026 WARN Unable to remove the failed duplicate failed LRA record (Uid: '%s') (which is already present in the failedLRA record location type: '%s'.) from LRA Record location: '%s'
LRA025026 WARN Unable to remove the failed duplicate failed LRA record (Uid: '%s') (which is already present in the failedLRA record location type: '%s'.) from LRA Record location: '%s'
LRA025027 WARN An exception was thrown while moving failed LRA record (Uid: '%s'). Reason: '%s'
LRA025027 WARN An exception was thrown while moving failed LRA record (Uid: '%s'). Reason: '%s'
LRA025028 java.lang.String Demanded API version '%s' is not in the list of the supported versions '%s'. Please, provide the right version for the API.
LRA025028 java.lang.String Demanded API version '%s' is not in the list of the supported versions '%s'. Please, provide the right version for the API.
LRA025029 WARN Cannot notify AfterLRA URL at %s
LRA025029 WARN Cannot notify AfterLRA URL at %s
LRA025030 java.lang.String %s: Invalid link URI (%s): %s
LRA025030 java.lang.String %s: Invalid link URI (%s): %s
LRA025031 java.lang.String %s: Invalid link URI (%s): missing compensator or after LRA callback
LRA025031 java.lang.String %s: Invalid link URI (%s): missing compensator or after LRA callback
LRA025032 WARN LRA Record: Cannot save state (reason: %s
LRA025032 WARN LRA Record: Cannot save state (reason: %s
LRA025033 WARN LRA Record: Cannot restore state (reason: %s)
LRA025033 WARN LRA Record: Cannot restore state (reason: %s)
LRA025034 WARN LRA Recovery cannot remove LRA id %s from the object store. The uid segment '%s' is probably invalid.
LRA025034 WARN LRA Recovery cannot remove LRA id %s from the object store. The uid segment '%s' is probably invalid.
LRA025035 WARN The start LRA call failed with cause: %s
LRA025035 WARN The start LRA call failed with cause: %s
LRA025036 java.lang.String CDI Context not available: %s
LRA025036 java.lang.String CDI Context not available: %s
LRA025037 WARN Participant `%s` is not registered
LRA025037 WARN Participant `%s` is not registered
LRA025038 java.lang.String Invalid participant enlistment with LRA %s: participant data is disabled
LRA025038 java.lang.String Invalid participant enlistment with LRA %s: participant data is disabled

LRAPROXY

Code Level Return Type Message
LRAPROXY025001 ERROR Participant '%s' serialization problem
LRAPROXY025002 ERROR Participant '%s' exception during completion
LRAPROXY025003 java.lang.String Cannot get status of participant '%s' of lra id '%s'

MODCLUSTER

Code Level Return Type Message
MODCLUSTER000000 DEBUG Catching
MODCLUSTER000001 INFO Initializing mod_cluster version %s
MODCLUSTER000002 INFO Initiating mod_cluster shutdown
MODCLUSTER000003 DEBUG Received server start event
MODCLUSTER000004 DEBUG Received server stop event
MODCLUSTER000005 DEBUG Received add context event for %s:%s
MODCLUSTER000006 DEBUG Received remove context event for %s:%s
MODCLUSTER000007 DEBUG Received start context event for %s:%s
MODCLUSTER000008 DEBUG Received stop context event for %s:%s
MODCLUSTER000009 DEBUG Sending %s for %s
MODCLUSTER000010 DEBUG Sending %s for %s:%s
MODCLUSTER000011 INFO %s will use %s as jvm-route
MODCLUSTER000012 INFO %s connector will use %s
MODCLUSTER000020 DEBUG Waiting to drain %d pending requests from %s:%s
MODCLUSTER000021 INFO All pending requests drained from %s:%s in %.1f seconds
MODCLUSTER000022 WARN Failed to drain %d remaining pending requests from %s:%s within %.1f seconds
MODCLUSTER000023 DEBUG Waiting to drain %d active sessions from %s:%s
MODCLUSTER000024 INFO All active sessions drained from %s:%s in %.1f seconds
MODCLUSTER000025 WARN Failed to drain %d remaining active sessions from %s:%s within %.1f seconds
MODCLUSTER000031 WARN Could not bind multicast socket to %s (%s address): %s; make sure your multicast address is of the same type as the IP stack (IPv4 or IPv6). Multicast socket will not be bound to an address, but this may lead to cross talking (see https://developer.jboss.org/docs/DOC-9469 for details).
MODCLUSTER000032 INFO Listening to proxy advertisements on %s
MODCLUSTER000034 ERROR Failed to start advertise listener
MODCLUSTER000040 ERROR Failed to parse response header from %2$s for %1$s command
MODCLUSTER000041 ERROR Unrecoverable syntax error %s sending %s command to %s: %s
MODCLUSTER000042 ERROR Error %s sending %s command to %s, configuration will be reset: %s
MODCLUSTER000043 ERROR Failed to send %s command to %s: %s
MODCLUSTER000045 WARN %s is not supported on this system and will be disabled.
MODCLUSTER000046 INFO Starting to drain %d active sessions from %s:%s in %d seconds.
MODCLUSTER000048 java.lang.RuntimeException Multiple connectors match specified host:port (%s)! Ensure connectorPort and/or connectorAddress are configured.
MODCLUSTER000049 java.lang.RuntimeException Could not resolve configured connector address (%d)!
MODCLUSTER000050 java.lang.RuntimeException Initial load must be within the range [0..100] or -1 to not prepopulate with initial load, but was: %d
MODCLUSTER000051 java.lang.RuntimeException No valid advertise interface configured! Disabling multicast advertise mechanism.
MODCLUSTER000052 java.lang.RuntimeException Attempted to create multicast socket without multicast address specified! Disabling multicast advertise mechanism.
MODCLUSTER000053 java.lang.RuntimeException Attempted to create multicast socket with unicast address (%s)! Disabling multicast advertise mechanism.
MODCLUSTER000054 INFO Starting to drain %d active sessions from %s:%s waiting indefinitely until all remaining sessions are drained or expired.
MODCLUSTER000055 WARN No configured connector for engine %s. If this engine should be used with mod_cluster check connector, connectorPort and/or connectorAddress configuration.

MSC

Code Level Return Type Message
MSC-00001 INFO JBoss MSC version %s
MSC000001 ERROR Failed to start %s
MSC000002 ERROR Invocation of listener "%s" failed
MSC000003 WARN Exception thrown after start was already completed in %s
MSC000004 WARN Failure during stop of %s
MSC000005 WARN Unexpected disappearance of %s during stop
MSC000006 WARN Uninjection "%2$s" of %1$s failed unexpectedly
MSC000007 WARN An internal service error has occurred while processing an operation on %s
MSC000008 ERROR Worker thread %s threw an uncaught exception
MSC000009 WARN An error occurred while trying to close the profile output file: %s
MSC000010 ERROR Failed to register MBean with MBeanServer
MSC000011 java.lang.IllegalStateException Service not started
MSC000012 ERROR Injection failed for service %s
MSC000013 WARN Failed to retrieve platform MBeanServer

RESTEASY

Code Level Return Type Message
RESTEASY-00001 DEBUG Unable to extract parameter from http request: %s value is '%s' for %s
RESTEASY-00001 ERROR Error processing request %s
RESTEASY002000 ERROR Error resuming failed async operation
RESTEASY002005 ERROR Failed executing {0} {1}
RESTEASY002010 ERROR Failed to execute
RESTEASY002015 ERROR Failed to invoke asynchronously
RESTEASY002020 ERROR Unhandled asynchronous exception, sending back 500
RESTEASY002025 ERROR Unknown exception while executing {0} {1}
RESTEASY002030 DEBUG Failed to write event {0}
RESTEASY002035 ERROR Cannot register {0} as HeaderDelegate: it has no type parameter
RESTEASY002040 ERROR GET method returns the patch/merge json object target for request {0} not found
RESTEASY002041 ERROR Failed to get the patch/merge target for request {0}
RESTEASY002050 ERROR The set instance of %s for property %s is not a valid %s.
RESTEASY002100 WARN Accept extensions not supported.
RESTEASY002105 WARN Ambiguity constructors are found in %s. More details please refer to http://jsr311.java.net/nonav/releases/1.1/spec/spec.html
RESTEASY002110 WARN Attempting to register empty contracts for %s
RESTEASY002115 WARN Attempting to register unassignable contract for %s
RESTEASY002117 WARN Charset %s unavailable.
RESTEASY002120 WARN ClassNotFoundException: Unable to load builtin provider {0} from {1}
RESTEASY002123 WARN Could not bind to specified download directory %s so will use temp dir.
RESTEASY002125 WARN Marking file '%s' to be deleted, as it could not be deleted while processing request:
RESTEASY002130 WARN Failed to parse request.
RESTEASY002135 WARN Ignoring unsupported locale: %s
RESTEASY002137 WARN Invalid format for {0}, using default value {1}
RESTEASY002138 WARN Invalid regex for {0}: {2}
RESTEASY002140 WARN Qualifying annotations found at non-public method: {0}.{1}(); Only public methods may be exposed as resource methods.
RESTEASY002142 WARN Multiple resource methods match request {0}. Selecting one. Matching methods: {1}
RESTEASY002145 WARN NoClassDefFoundError: Unable to load builtin provider {0} from {1}
RESTEASY002150 WARN %s is no longer supported. Use a servlet 3.0 container and the ResteasyServletInitializer
RESTEASY002155 WARN Provider class {0} is already registered. 2nd registration is being ignored.
RESTEASY002160 WARN Provider instance {0} is already registered. 2nd registration is being ignored.
RESTEASY002165 WARN No valueOf() method available for %s, trying constructor...
RESTEASY002170 WARN A reader for {0} was not found. This provider is currently configured to handle only {1}
RESTEASY002172 WARN Singleton {0} object class {1} already deployed. Singleton ignored.
RESTEASY002175 WARN The use of %s is deprecated, please use jakarta.ws.rs.Application as a context-param instead
RESTEASY002180 WARN Skip illegal field [%s] in value: [%s]
RESTEASY002185 WARN Skip unknown field [%s]
RESTEASY002186 WARN Failed to set servlet request into asynchronous mode, server sent events may not work
RESTEASY002190 WARN Annotation, @PreMaching, not valid on ClientRequestFilter implementation, [%s]. Annotation is being ignored.
RESTEASY002195 WARN The following sub-resource methods and sub-resource locators have the same path, [%s]. The paths should be unique. [%s]
RESTEASY002196 WARN Component of type %s can't be dynamically bound to a resource method as a %s provider.
RESTEASY002197 WARN The previous response status was {0} {1}. The status should be changed before the entity is set.
RESTEASY002200 INFO Adding class resource {0} from Application {1}
RESTEASY002205 INFO Adding provider class {0} from Application {1}
RESTEASY002210 INFO Adding provider singleton {0} from Application {1}
RESTEASY002215 INFO Adding singleton provider {0} from Application {1}
RESTEASY002220 INFO Adding singleton resource {0} from Application {1}
RESTEASY002225 INFO Deploying {0}: {1}
RESTEASY002227 INFO MediaType {0} on {1}() lacks charset. Consider setting charset or turning on context parameter resteasy.add.charset
RESTEASY002230 INFO Unable to close entity stream
RESTEASY002235 INFO Unable to decode GZIP compressed Base64 data
RESTEASY002300 DEBUG Creating context object <{0} : {1}>
RESTEASY002305 DEBUG Failed executing {0} {1}
RESTEASY002307 DEBUG Failed to execute
RESTEASY002310 DEBUG IN ONE WAY!!!!!
RESTEASY002315 DEBUG PathInfo: %s
RESTEASY002320 DEBUG RUNNING JOB!!!!
RESTEASY002322 DEBUG Temporary file %s has been created. Consider deleting after it has been used.
RESTEASY002325 DEBUG Unable to retrieve config: disableDTDs defaults to true
RESTEASY002330 DEBUG Unable to retrieve config: expandEntityReferences defaults to false
RESTEASY002335 DEBUG Unable to retrieve config: enableSecureProcessingFeature defaults to true
RESTEASY002340 DEBUG Client receive processing failure.
RESTEASY002350 WARN Failed to reset the context on thread: %s
RESTEASY002360 WARN Failed to look up JNDI resource "%s". Using a default ExecutorService.
RESTEASY002370 WARN Failed to load: %s
RESTEASY002375 ERROR Error processing unknown request.
RESTEASY004671 DEBUG Ignoring exception thrown within InvocationCallback
RESTEASY004672 DEBUG Client send processing failure.
RESTEASY004687 WARN Closing a %s instance for you. Please close clients yourself.

SRCFG

Code Level Return Type Message
SRCFG01000 WARN Unable to get context classloader instance
SRCFG01001 DEBUG The config %s was loaded from %s with the value %s
SRCFG01002 DEBUG The config %s was not found
SRCFG01003 WARN Unable to get declared constructor for class %s with arguments %s
SRCFG01004 WARN Unable to set accessible flag on %s
SRCFG01005 WARN Could not find sources with %s in %s
SRCFG03000 WARN Unable to read content from file %s. Exception: %s

SRFTL

Code Level Return Type Message
SRFTL00000 TRACE AsyncTimeoutTask %s created
SRFTL00000 TRACE AsyncTimeoutTask %s completing with %s
SRFTL00000 TRACE AsyncTimeout rethrowing %s
SRFTL00000 TRACE Timer %s created
SRFTL00000 TRACE Timer %s shut down
SRFTL00000 TRACE Scheduled timer task %s to run in %s millis
SRFTL00000 TRACE Running timer task %s
SRFTL00000 TRACE Cancelled timer task %s
SRFTL00000 DEBUG Found event loop integration %s
SRFTL00000 DEBUG No event loop integration found
SRFTL00001 INFO MicroProfile: Fault Tolerance activated (SmallRye Fault Tolerance version: %s)
SRFTL00002 jakarta.enterprise.inject.spi.DefinitionException Multiple circuit breakers have the same name '%s': %s
SRFTL00003 jakarta.enterprise.inject.spi.DefinitionException Backoff annotation @%s present on '%s', but @Retry is missing
SRFTL00004 jakarta.enterprise.inject.spi.DefinitionException Both @Blocking and @NonBlocking present on '%s'
SRFTL00005 jakarta.enterprise.inject.spi.DefinitionException Both @Asynchronous and @AsynchronousNonBlocking present on '%s'
SRFTL11000 WARN Unexpected exception in timer loop, ignoring

SRHCK

Code Level Return Type Message
SRHCK01000 ERROR Error processing Health Checks
SRHCK01001 INFO Reporting health down status: %s

SRJWT

Code Level Return Type Message
SRJWT01000 ERROR path.%s configuration will be ignored because the path depth is too large: %d, maximum depth is %d.
SRJWT01001 ERROR Token header is not 'Cookie', the cookie name value will be ignored
SRJWT01002 ERROR Algorithm %s not supported
SRJWT01003 DEBUG Trying to create a key from the encoded PEM key...
SRJWT01004 DEBUG Failed to create a key from the encoded PEM key
SRJWT01005 DEBUG Trying to create a key from the encoded PEM certificate...
SRJWT01006 DEBUG Failed to to create a key from the encoded PEM certificate
SRJWT01007 DEBUG Trying to load the local JWK(S)...
SRJWT01008 DEBUG Failed to load the JWK(S)
SRJWT01009 DEBUG Failed to parse the JWK JSON representation
SRJWT03000 DEBUG init, mpJwtPublicKey=%s, mpJwtIssuer=%s, mpJwtLocation=%s
SRJWT03001 DEBUG Neither mpJwtPublicKey nor mpJwtLocation properties are configured, JWTAuthContextInfo will not be available
SRJWT03002 DEBUG mpJwtPublicKey parsed as JWK(S)
SRJWT03003 DEBUG mpJwtPublicKey failed as JWK(S), %s
SRJWT03004 DEBUG mpJwtPublicKey parsed as PEM
SRJWT03005 DEBUG Unsupported key format
SRJWT03006 WARN '%s' property is deprecated and will be removed in a future version. Use '%s ' property instead
SRJWT06000 DEBUG tokenHeaderName = %s
SRJWT06001 DEBUG Header %s was null
SRJWT06002 DEBUG tokenCookieName = %s
SRJWT06003 DEBUG Cookie %s was null
SRJWT06004 DEBUG Authorization header does not contain a Bearer prefix
SRJWT06005 DEBUG Authorization header was null
SRJWT08000 DEBUG getAudience failure
SRJWT08001 WARN getGroups failure:
SRJWT08002 WARN getClaimValue failure for: %s
SRJWT08003 WARN replaceClaimValueWithJsonValue failure for: %s
SRJWT08004 DEBUG Token is invalid
SRJWT08005 DEBUG Verification key is unresolvable
SRJWT08006 DEBUG Claim value at the path %s is not a String
SRJWT08007 DEBUG Claim value at the path %s is not an array of strings
SRJWT08008 DEBUG Claim value at the path %s is neither an array of strings nor string
SRJWT08009 TRACE Updated groups to: %s
SRJWT08010 DEBUG Failed to access rolesMapping claim
SRJWT08011 DEBUG No claim exists at the path %s at segment %s
SRJWT08012 DEBUG Claim value at the path %s is not a json object
SRJWT08014 DEBUG Required claims %s are not present in the JWT
SRJWT08015 DEBUG loadSpi, cl=%s, u=%s, sl=%s
SRJWT08016 WARN Multiple JWTCallerPrincipalFactory implementations found: %s and %s
SRJWT08017 DEBUG sl=%s, loaded=%s
SRJWT08018 WARN Failed to locate JWTCallerPrincipalFactory provider
SRJWT08019 DEBUG AuthContextInfo is: %s
SRJWT08020 DEBUG Failed to create a key from the HTTPS JWK Set
SRJWT08021 DEBUG JWK with a matching 'kid' is not available, refreshing HTTPS JWK Set
SRJWT08022 DEBUG Failed to refresh HTTPS JWK Set
SRJWT08023 DEBUG JWK with a matching 'kid' is not available but HTTPS JWK Set has been refreshed less than %d minutes ago, trying to create a key from the HTTPS JWK Set one more time
SRJWT08024 DEBUG Trying to create a key from the HTTPS JWK Set after the refresh
SRJWT08025 DEBUG Failed to create a key from the HTTPS JWK Set after the refresh
SRJWT08026 DEBUG Trying to create a key from the JWK(S)
SRJWT08027 DEBUG Failed to create a key from the JWK(S)
SRJWT08028 DEBUG Invalid token 'kid' header: %s, expected: %s
SRJWT08029 DEBUG Trying to load the keys from the HTTPS JWK(S)
SRJWT08030 DEBUG Checking if the key content is a JWK key or JWK key set
SRJWT08031 DEBUG Checking if the key content is a Base64URL encoded JWK key or JWK key set
SRJWT08032 DEBUG Unable to decode content using Base64 decoder
SRJWT08033 DEBUG Key has been created from the encoded JWK key or JWK key set
SRJWT08034 DEBUG Key has been created from the JWK key or JWK key set
SRJWT08035 DEBUG Checking if the key content is a Base64 encoded PEM key
SRJWT08036 DEBUG Key has been created from the encoded PEM key
SRJWT08037 DEBUG The key content is not a valid encoded PEM key
SRJWT08038 DEBUG Checking if the key content is a Base64 encoded PEM certificate
SRJWT08039 DEBUG PublicKey has been created from the encoded PEM certificate
SRJWT08040 DEBUG The key content is not a valid encoded PEM certificate
SRJWT08041 DEBUG Decryption key is unresolvable
SRJWT08042 DEBUG Encrypted token sequence is invalid
SRJWT08043 DEBUG Trying to create a key from the HTTPS JWK(S)
SRJWT08044 DEBUG Encrypted token headers must contain a content type header
SRJWT11000 DEBUG Success
SRJWT11001 DEBUG Unable to validate bearer token
SRJWT11002 DEBUG No usable bearer token was found in the request, continuing unauthenticated
SRJWT11003 DEBUG Failed to resolve the key. Either corrupt or unavailable.
SRJWT12000 DEBUG getValue(%s), null JsonWebToken
SRJWT12001 DEBUG Failed to find Claim for: %s
SRJWT12002 DEBUG getValue(%s), isOptional=%s, claimValue=%s
SRJWT12003 DEBUG JsonValueProducer(%s).produce
SRJWT12004 DEBUG getOptionalString(%s)
SRJWT12005 DEBUG getOptionalStringSet(%s)
SRJWT12006 DEBUG getOptionalLong(%s)
SRJWT12007 DEBUG getOptionalBoolean(%s)
SRJWT12008 DEBUG addTypeToClaimProducer(%s)
SRJWT12009 DEBUG Checking Provider Claim(%s), ip: %s
SRJWT12010 DEBUG pip: %s
SRJWT12011 DEBUG getClaimAsSet(%s)
SRJWT12012 DEBUG getClaimAsString(%s)
SRJWT12013 DEBUG getClaimAsLong(%s)
SRJWT12014 DEBUG getClaimAsDouble(%s)
SRJWT12015 DEBUG getClaimAsBoolean(%s)
SRJWT12016 DEBUG getOptionalValue(%s)
SRJWT12017 DEBUG beforeBeanDiscovery(%s)
SRJWT12018 DEBUG EE Security is available, JWTHttpAuthenticationMechanism has been registered
SRJWT12019 INFO EE Security is NOT available, JWTAuthenticationFilter has been registered
SRJWT12020 DEBUG Added type: %s

SRMSG

Code Level Return Type Message
SRMSG00200 ERROR The method %s has thrown an exception
SRMSG00201 ERROR Error caught while processing a message in method %s
SRMSG00202 INFO Created new Vertx instance
SRMSG00203 INFO Created worker pool named %s with concurrency of %d
SRMSG00204 WARN Multiple publisher found for %s, using the merge policy `ONE` takes the first found
SRMSG00205 DEBUG Strict mode enabled
SRMSG00206 DEBUG Scanning Type: %s
SRMSG00207 WARN %s
SRMSG00208 WARN The connector '%s' has no downstreams
SRMSG00209 DEBUG Beginning graph resolution, number of components detected: %d
SRMSG00210 DEBUG Graph resolution completed in %d ns
SRMSG00211 ERROR Unable to create invoker instance of %s
SRMSG00212 ERROR Unable to initialize mediator: %s
SRMSG00224 INFO Analyzing mediator bean: %s
SRMSG00226 DEBUG Found incoming connectors: %s
SRMSG00227 DEBUG Found outgoing connectors: %s
SRMSG00228 INFO No MicroProfile Config found, skipping
SRMSG00229 DEBUG Channel manager initializing...
SRMSG00230 ERROR Unable to create the publisher or subscriber during initialization
SRMSG00231 INFO Incoming channel `%s` disabled by configuration
SRMSG00232 INFO Outgoing channel `%s` disabled by configuration
SRMSG00233 WARN Unable to extract the ingested payload type for method `%s`, the reason is: %s
SRMSG00234 WARN Failed to emit a Message to the channel
SRMSG00235 DEBUG Beginning materialization
SRMSG00236 DEBUG Materialization completed in %d ns
SRMSG00237 WARN Use of @jakarta.inject.Named in Reactive Messaging is deprecated, use @io.smallrye.common.annotation.Identifier instead
SRMSG00238 INFO No ExecutionHolder, disabling @Blocking support
SRMSG00239 java.lang.IllegalStateException Cannot specify both client-options-name and client-ssl-context-name
SRMSG00240 java.lang.IllegalStateException Could not find an SSLContext bean with the @Identifier=%s
SRMSG18201 DEBUG Dead queue letter configured with: topic: `%s`, key serializer: `%s`, value serializer: `%s`
SRMSG18202 INFO A message sent to channel `%s` has been nacked, sending the record to a dead letter topic %s
SRMSG18203 ERROR A message sent to channel `%s` has been nacked, fail-stop
SRMSG18204 WARN A message sent to channel `%s` has been nacked, ignored failure is: %s.
SRMSG18205 DEBUG The full ignored failure is
SRMSG18206 ERROR Unable to write to Kafka from channel %s (topic: %s)
SRMSG18206 ERROR Unable to write to Kafka from channel %s (no topic set)
SRMSG18207 ERROR Unable to dispatch message to Kafka
SRMSG18209 DEBUG Sending message %s to Kafka topic '%s'
SRMSG18210 ERROR Unable to send a record to Kafka
SRMSG18211 DEBUG Message %s sent successfully to Kafka topic-partition '%s-%d', with offset %d
SRMSG18212 ERROR Message %s was not sent to Kafka topic '%s' - nacking message
SRMSG18213 INFO Setting %s to %s
SRMSG18214 INFO Key deserializer omitted, using String as default
SRMSG18215 DEBUG An error has been caught while closing the Kafka Write Stream
SRMSG18216 WARN No `group.id` set in the configuration, generate a random id: %s
SRMSG18217 ERROR Unable to read a record from Kafka topics '%s'
SRMSG18218 DEBUG An exception has been caught while closing the Kafka consumer
SRMSG18219 INFO Loading KafkaConsumerRebalanceListener from configured name '%s'
SRMSG18220 INFO Loading KafkaConsumerRebalanceListener from group id '%s'
SRMSG18222 ERROR Unable to execute consumer revoked re-balance listener for group '%s'
SRMSG18224 INFO Executing consumer revoked re-balance listener for group '%s'
SRMSG18225 INFO Executed consumer assigned re-balance listener for group '%s'
SRMSG18226 INFO Executed consumer revoked re-balance listener for group '%s'
SRMSG18227 WARN Re-enabling consumer for group '%s'. This consumer was paused because of a re-balance failure.
SRMSG18228 WARN A failure has been reported for Kafka topics '%s'
SRMSG18229 INFO Configured topics for channel '%s': %s
SRMSG18230 INFO Configured topics matching pattern for channel '%s': %s
SRMSG18231 WARN The record %d from topic-partition '%s' has waited for %s seconds to be acknowledged. This waiting time is greater than the configured threshold (%d ms). At the moment %d messages from this partition are awaiting acknowledgement. The last committed offset for this partition was %d. This error is due to a potential issue in the application which does not acknowledged the records in a timely fashion. The connector cannot commit as a record processing has not completed.
SRMSG18232 DEBUG Will commit for group '%s' every %d milliseconds.
SRMSG18233 ERROR Invalid value serializer to write a structured Cloud Event. Found %s, expected the org.apache.kafka.common.serialization.StringSerializer
SRMSG18234 DEBUG Auto-commit disabled for channel %s
SRMSG18235 WARN Will not health check throttled commit strategy for group '%s'.
SRMSG18236 DEBUG Will mark throttled commit strategy for group '%s' as unhealthy if records go more than %d milliseconds without being processed.
SRMSG18237 DEBUG Setting client.id for Kafka producer to %s
SRMSG18239 DEBUG Received acknowledgement for record %d on '%s' (consumer group: '%s'). Ignoring it because the partition is not assigned to the consume anymore. Record will likely be processed again. Current assignments are %s.
SRMSG18240 DEBUG '%s' commit strategy used for channel '%s'
SRMSG18241 FATAL The deserialization failure handler `%s` throws an exception
SRMSG18242 WARN A failure has been reported during a rebalance - the operation will be retried: '%s'
SRMSG18243 DEBUG Shutting down - Pausing all topic-partitions
SRMSG18244 DEBUG Shutting down - Waiting for message processing to complete, %d messages still in processing
SRMSG18245 WARN There are still %d unprocessed messages after the closing timeout
SRMSG18246 DEBUG Pausing Kafka consumption for client %s (%s), queue size %s >= %s
SRMSG18247 DEBUG Resuming Kafka consumption for channel %s (%s), queue size %s <= %s
SRMSG18248 DEBUG Key serializer omitted, using String as default
SRMSG18249 ERROR Unable to recover from the deserialization failure (topic: %s), configure a DeserializationFailureHandler to recover from errors.
SRMSG18250 WARN The configuration property '%s' is deprecated and is replaced by '%s'.
SRMSG18251 DEBUG Committed %s
SRMSG18252 WARN Failed to commit %s, it will be re-attempted
SRMSG18253 DEBUG Removing topic-partition '%s' from the store - the partition is not assigned to the consumer anymore. Current assignments are: %s
SRMSG18254 DEBUG Topic-partition '%s' has been revoked - going to commit offset %d
SRMSG18255 DEBUG Received a record from topic-partition '%s' at offset %d, while the last committed offset is %d - Ignoring record
SRMSG18256 INFO Initialize record store for topic-partition '%s' at position %d.
SRMSG18257 INFO Kafka consumer %s, connected to Kafka brokers '%s', belongs to the '%s' consumer group and is configured to poll records from %s
SRMSG18258 INFO Kafka producer %s, connected to Kafka brokers '%s', is configured to write records to '%s'
SRMSG18259 WARN Kafka latest commit strategy failed to commit record from topic-partition '%s' at offset %d
SRMSG18260 ERROR Unable to recover from the serialization failure (topic: %s), configure a SerializationFailureHandler to recover from errors.
SRMSG18261 ERROR Unable to initialize producer from channel %s.
SRMSG18262 WARN Aborting transaction for producer id %s in channel %s.
SRMSG18263 FATAL The serialization failure handler `%s` throws an exception
SRMSG18264 WARN No `checkpoint.state-store` given to use with checkpoint commit strategy. `file` will be used.
SRMSG18265 WARN Will not health check checkpoint commit strategy for consumer '%s'.
SRMSG18266 DEBUG Will mark checkpoint commit strategy for consumer '%s' as unhealthy if processing state go more than %d milliseconds without being persisted.
SRMSG18267 DEBUG Partitions assigned to client %s : %s with initial state %s
SRMSG18268 ERROR Failed fetching state on partitions assigned to client %s : %s
SRMSG18269 DEBUG Partitions revoked from client %s: %s with state to persist %s
SRMSG18270 DEBUG Persisted state for client %s : %s
SRMSG18271 WARN Failed persisting state for %s : %s
SRMSG18272 DEBUG Failed persisting state but can be retried for %s : %s
SRMSG18273 WARN Checkpoint commit strategy processing state type not found for channel %s : %s
SRMSG18274 INFO Error caught in producer interceptor `onSend` for channel %s
SRMSG18275 TRACE Error caught in producer interceptor `onAcknowledge` for channel %s
SRMSG18276 TRACE Error caught in producer interceptor `close` for channel %s
SRMSG18277 INFO Delayed retry topics configured for channel `%s` with topics `%s`, max retries, `%d`, timeout `%d`ms, dlq topic `%s`
SRMSG18278 INFO A message sent to channel `%s` has been nacked, sending the record to topic %s
SRMSG18279 WARN A message sent to channel `%s` reached delayed retry timeout `%s` milliseconds reached for record `%s`
SRMSG18280 WARN A message sent to channel `%s` has been nacked and won't be retried again. Configure `dead-letter-queue.topic` for sending the record to a dead letter topic

SROAP

Code Level Return Type Message
SROAP01000 ERROR Failed to introspect BeanInfo for: %s
SROAP01001 INFO Schema with zero references removed from #/components/schemas: %s
SROAP01002 INFO Cyclic object reference detected in OpenAPI model, skipping current node
SROAP01003 WARN Merge of property would result in cyclic object reference in OpenAPI model, skipping property '%s' in type %s
SROAP02000 DEBUG Processing a map of %s annotations.
SROAP02001 DEBUG Processing a json map of %s nodes.
SROAP02002 DEBUG Processing a list of %s annotations.
SROAP02003 DEBUG Processing a json list of %s.
SROAP02004 DEBUG Processing a single %s annotation.
SROAP02005 DEBUG Processing an %s annotation.
SROAP02006 DEBUG Processing a single %s annotation as a %s.
SROAP02007 DEBUG Processing a single %s json node.
SROAP02008 DEBUG Processing an %s json node.
SROAP02009 DEBUG Processing a single %s json object.
SROAP02010 DEBUG Processing a json map of %s.
SROAP02011 ERROR Error reading a CallbackOperation annotation.
SROAP02012 DEBUG Processing a list of %s annotations into an %s.
SROAP02013 DEBUG Processing an enum %s
SROAP02014 DEBUG Processing an array of %s annotations.
SROAP02015 DEBUG Processing a json array of %s json nodes.
SROAP02016 WARN Failed to read enumeration values from enum %s method %s with `@JsonValue`: %s
SROAP04000 DEBUG Scanning deployment for %s Annotations.
SROAP04001 DEBUG Starting processing with root: %s
SROAP04002 DEBUG Getting all fields for: %s in class: %s
SROAP04003 WARN Configured schema for %s could not be parsed
SROAP04004 INFO Configured schema for %s has been registered
SROAP04005 WARN Could not find schema class in index: %s
SROAP06000 DEBUG Processing @Schema annotation %s on a field %s
SROAP06001 DEBUG Annotation value has invalid format: %s
SROAP06002 DEBUG Possible cycle was detected at: %s. Will not search further.
SROAP06003 DEBUG Adding child node to path: %s
SROAP06004 DEBUG Path: %s
SROAP06005 DEBUG Ignoring type that is member of ignore set: %s
SROAP06006 DEBUG Ignoring type and adding to ignore set: %s
SROAP06007 DEBUG Processing an array %s
SROAP06008 DEBUG Processing parameterized type %s
SROAP06009 DEBUG Processing %s. Will treat as an %s.
SROAP07900 WARN Value '%s' is not a valid %s default
SROAP07901 WARN Matrix parameter references missing path segment: %s
SROAP07902 WARN @Parameter annotation missing %s parameter. Class: %s, Method: %s, Parameter.name: %s, Parameter.in: %s
SROAP07903 WARN Duplicate operationId: %s produced by Class: %s, Method: %s and Class: %s, Method: %s
SROAP10000 DEBUG Processing a JAX-RS resource class: %s
SROAP10001 DEBUG Processing JaxRs method: %s
SROAP10002 WARN Matrix parameter references missing path segment: %s
SROAP10003 WARN Value '%s' is not a valid %s default
SROAP31010 DEBUG Processing an enum %s
SROAP31011 DEBUG Encountered type not in Jandex index that is not well-known type. Will not traverse it: %s
SROAP31012 DEBUG Resolved type %s -> %s
SROAP31013 DEBUG Is a terminal type %s
SROAP31014 DEBUG Attempting to do TYPE_VARIABLE substitution: %s -> %s
SROAP31015 DEBUG Class for type %s not available
SROAP31016 ERROR Unanticipated mismatch between type arguments and type variables Args: %s Vars:%s

TXNWFHTTP

Code Level Return Type Message
TXNWFHTTP000001 jakarta.transaction.SystemException The protocol operation was interrupted locally
TXNWFHTTP000002 jakarta.transaction.RollbackException Rollback-only transaction rolled back
TXNWFHTTP000003 java.lang.IllegalStateException Invalid transaction state
TXNWFHTTP000004 javax.transaction.xa.XAException Transaction operation failed due to thread interruption

UT

Code Level Return Type Message
UT005001 ERROR An exception occurred processing the request
UT005003 ERROR IOException reading from channel
UT005005 ERROR Cannot remove uploaded file %s
UT005006 DEBUG Connection from %s terminated as request header was larger than %s
UT005007 DEBUG Request was not fully consumed
UT005008 DEBUG An invalid token '%s' with value '%s' has been received.
UT005009 DEBUG A mandatory token %s is missing from the request.
UT005010 DEBUG Verification of authentication tokens for user '%s' has failed using mechanism '%s'.
UT005011 ERROR Ignoring AJP request with prefix %s
UT005013 DEBUG An IOException occurred
UT005014 DEBUG Failed to parse request
UT005015 ERROR Error rotating access log
UT005016 ERROR Error writing access log
UT005017 ERROR Unknown variable %s. For the literal percent character use two percent characters: '%%'
UT005018 ERROR Exception invoking close listener %s
UT005020 ERROR Error writing JDBC log
UT005022 ERROR Exception generating error page %s
UT005023 ERROR Exception handling request to %s
UT005024 ERROR Could not register resource change listener for caching resource manager, automatic invalidation of cached resource will not work
UT005027 ERROR Timing out request to %s
UT005028 ERROR Proxy request to %s failed
UT005031 ERROR Proxy request to %s could not connect to backend server %s
UT005032 ERROR Listener not making progress on framed channel, closing channel to prevent infinite loop
UT005034 ERROR Remote endpoint failed to send initial settings frame in HTTP2 connection, frame type %s
UT005035 DEBUG Closing channel because of parse timeout for remote address %s
UT005036 ERROR ALPN negotiation failed for %s and no fallback defined, closing connection
UT005037 WARN Name of the cookie containing the session id, %s, had been too long and was truncated to: %s
UT005038 DEBUG Balancer created: id: %s, name: %s, stickySession: %s, stickySessionCookie: %s, stickySessionPath: %s, stickySessionRemove: %s, stickySessionForce: %s, waitWorker: %s, maxattempts: %s
UT005039 INFO Undertow starts mod_cluster proxy advertisements on %s with frequency %s ms
UT005040 DEBUG Gonna send payload: %s
UT005041 ERROR Cannot send advertise message. Address: %s
UT005042 DEBUG Undertow mod_cluster proxy MCMPHandler created
UT005043 ERROR Error in processing MCMP commands: Type:%s, Mess: %s
UT005044 INFO Removing node %s
UT005045 INFO Registering context %s, for node %s
UT005046 DEBUG Registering context %s, for node %s, with aliases %s
UT005047 INFO Unregistering context %s, from node %s
UT005048 DEBUG Node %s in error
UT005049 DEBUG NodeConfig created: connectionURI: %s, balancer: %s, load balancing group: %s, jvmRoute: %s, flushPackets: %s, flushwait: %s, ping: %s,ttl: %s, timeout: %s, maxConnections: %s, cacheConnections: %s, requestQueueSize: %s, queueNewRequests: %s
UT005050 ERROR Failed to process management request
UT005051 ERROR Failed to send ping response
UT005052 DEBUG Failed to send ping response, node.getJvmRoute(): %s, jvmRoute: %s
UT005053 INFO Registering node %s, connection: %s
UT005054 DEBUG MCMP processing, key: %s, value: %s
UT005055 DEBUG HttpClientPingTask run for connection: %s
UT005056 DEBUG Received node load in STATUS message, node jvmRoute: %s, load: %s
UT005057 DEBUG Sending MCMP response to destination: %s, HTTP status: %s, Headers: %s, response: %s
UT005058 WARN Could not bind multicast socket to %s (%s address): %s; make sure your multicast address is of the same type as the IP stack (IPv4 or IPv6). Multicast socket will not be bound to an address, but this may lead to cross talking (see http://www.jboss.org/community/docs/DOC-9469 for details).
UT005060 WARN Predicate %s uses old style square braces to define predicates, which will be removed in a future release. predicate[value] should be changed to predicate(value)
UT005061 java.lang.IllegalStateException More than %s restarts detected, breaking assumed infinite loop
UT005062 ERROR Pattern parse error
UT005063 ERROR Unable to decode with rest of chars starting: %s
UT005064 ERROR No closing ) found for in decode
UT005065 ERROR The next characters couldn't be decoded: %s
UT005066 ERROR X param for servlet request, couldn't decode value: %s
UT005067 ERROR X param in wrong format. Needs to be 'x-#(...)'
UT005068 INFO Pattern was just empty or whitespace
UT005069 ERROR Failed to write JDBC access log
UT005070 ERROR Failed to write pre-cached file
UT005071 ERROR Undertow request failed %s
UT005072 WARN Thread %s (id=%s) has been active for %s milliseconds (since %s) to serve the same request for %s and may be stuck (configured threshold for this StuckThreadDetectionValve is %s seconds). There is/are %s thread(s) in total that are monitored by this Valve and may be stuck.
UT005073 WARN Thread %s (id=%s) was previously reported to be stuck but has completed. It was active for approximately %s milliseconds. There is/are still %s thread(s) that are monitored by this Valve and may be stuck.
UT005074 ERROR Failed to invoke error callback %s for SSE task
UT005075 java.lang.IllegalStateException Unable to resolve mod_cluster management host's address for '%s'
UT005076 ERROR SSL read loop detected. This should not happen, please report this to the Undertow developers. Current state %s
UT005077 ERROR SSL unwrap buffer overflow detected. This should not happen, please report this to the Undertow developers. Current state %s
UT005079 ERROR ALPN negotiation on %s failed
UT005080 ERROR HttpServerExchange cannot have both async IO resumed and dispatch() called in the same cycle
UT005081 ERROR Response has already been started, cannot proxy request %s
UT005082 java.lang.IllegalArgumentException Configured mod_cluster management host address cannot be a wildcard address (%s)!
UT005083 java.io.IOException Unexpected end of compressed input
UT005084 java.io.IOException Attempted to write %s bytes however content-length has been set to %s
UT005085 DEBUG Connection %s for exchange %s was not closed cleanly, forcibly closing connection
UT005086 ERROR Failed to accept SSL request
UT005088 ERROR Failed to execute ServletOutputStream.closeAsync() on IO thread
UT005089 java.lang.IllegalArgumentException Method parameter '%s' cannot be null
UT005090 ERROR Unexpected failure
UT005091 ERROR Failed to initialize DirectByteBufferDeallocator
UT005092 DEBUG Failed to free direct buffer
UT005093 DEBUG Blocking read timed out
UT005094 DEBUG Blocking write timed out
UT005095 DEBUG SSLEngine delegated task was rejected
UT005096 DEBUG Authentication failed for digest header %s in %s
UT005097 DEBUG Failed to obtain subject for %s
UT005098 DEBUG GSSAPI negotiation failed for %s
UT005099 WARN Failed to create SSO for session '%s'
UT005100 DEBUG Failed to list paths for '%s'
UT005101 DEBUG No source to list resources from
UT005102 WARN Flushing waiting in a frame more than %s miliseconds. The framed channel will be forcibly closed.
UT015002 ERROR Stopping servlet %s due to permanent unavailability
UT015003 ERROR Stopping servlet %s till %s due to temporary unavailability
UT015005 ERROR Error invoking method %s on listener %s
UT015006 ERROR IOException dispatching async event
UT015007 WARN Stack trace on error enabled for deployment %s, please do not enable for production use
UT015008 WARN Failed to load development mode persistent sessions
UT015009 WARN Failed to persist session attribute %s with value %s for session %s
UT015010 WARN Failed to persist sessions
UT015012 ERROR Failed to generate error page %s for original exception: %s. Generating error page resulted in a %s.
UT015014 ERROR Error reading rewrite configuration
UT015015 java.lang.IllegalArgumentException Error reading rewrite configuration: %s
UT015016 java.lang.IllegalArgumentException Invalid rewrite map class: %s
UT015017 java.lang.IllegalArgumentException Error reading rewrite flags in line %s as %s
UT015018 java.lang.IllegalArgumentException Error reading rewrite flags in line %s
UT015019 ERROR Failed to destroy %s
UT015020 WARN Path %s is secured for some HTTP methods, however it is not secured for %s
UT015021 ERROR Failure dispatching async event
UT015022 WARN Requested resource at %s does not exist for include method
UT015023 java.lang.IllegalStateException This Context has been already destroyed
UT015024 ERROR Servlet %s init() method in web application %s threw exception
UT025003 DEBUG Decoding WebSocket Frame with opCode %s
UT025007 ERROR Unhandled exception for annotated endpoint %s
UT025008 WARN Incorrect parameter %s for extension
UT026001 ERROR Unable to instantiate endpoint
UT026002 ERROR Unable to instantiate server configuration %s
UT026003 INFO Adding annotated server endpoint %s for path %s
UT026004 INFO Adding annotated client endpoint %s
UT026005 INFO Adding programmatic server endpoint %s for path %s
UT026006 ERROR Exception running web socket method
UT026007 WARN On Endpoint class %s path param %s on method %s does not reference a valid parameter, valid parameters are %s.
UT026008 ERROR Could not close endpoint on undeploy.
UT026009 WARN XNIO worker was not set on WebSocketDeploymentInfo, the default worker will be used
UT026010 WARN Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
UT026011 java.lang.IllegalArgumentException XNIO worker was not set on WebSocketDeploymentInfo, and there is no default to use
UT026012 java.lang.IllegalArgumentException Buffer pool was not set on WebSocketDeploymentInfo, and there is no default to use

VFS

Code Level Return Type Message
VFS000001 WARN A VFS mount (%s) was leaked!
VFS000002 INFO Failed to clean existing content for temp file provider of type %s. Enable DEBUG level log to find what caused this

WELD-

Code Level Return Type Message
WELD-000000 DEBUG Catching
WELD-000000 TRACE No PAT observers resolved for {0}. Skipping.
WELD-000000 TRACE Sending PAT using the default event resolver: {0}
WELD-000000 TRACE Sending PAT using the fast event resolver: {0}
WELD-000001 TRACE Exactly one constructor ({0}) annotated with @Inject defined, using it as the bean constructor for {1}
WELD-000002 TRACE Exactly one constructor ({0}) defined, using it as the bean constructor for {1}
WELD-000004 TRACE Exactly one post construct method ({0}) for {1}
WELD-000006 TRACE Exactly one pre destroy method ({0}) for {1}
WELD-000007 TRACE Created session bean proxy for {0}
WELD-000008 TRACE Called {0} on {1} with parameters {2} which returned {3}
WELD-000009 org.jboss.weld.exceptions.IllegalArgumentException Dynamic lookup of {0} is not supported
WELD-000010 TRACE Using qualifiers {0} for {1}
WELD-000012 TRACE Building bean metadata for {0}
WELD-000014 TRACE Using name {0} for {1}
WELD-000016 TRACE Using scope {0} for {1}
WELD-000018 WARN Executing producer field or method {0} on incomplete declaring bean {1} due to circular injection
WELD-000019 ERROR Error destroying an instance {0} of {1}
WELD-000023 java.lang.String Type parameter must be a concrete type: {0}
WELD-000025 org.jboss.weld.exceptions.IllegalStateException Tried to create an EEResourceProducerField, but no @Resource, @PersistenceContext, @PersistenceUnit, @WebServiceRef or @EJB is present: {0}
WELD-000026 org.jboss.weld.exceptions.IllegalStateException Security Services not available - unable to obtain the Principal
WELD-000027 org.jboss.weld.exceptions.IllegalStateException Transaction Services not available - unable to obtain the UserTransaction
WELD-000028 org.jboss.weld.exceptions.IllegalArgumentException Interception model must not be null
WELD-000029 org.jboss.weld.exceptions.IllegalArgumentException InterceptionType must not be null
WELD-000030 org.jboss.weld.exceptions.IllegalArgumentException Method must not be null
WELD-000031 org.jboss.weld.exceptions.IllegalArgumentException InterceptionType must not be lifecycle, but it is {0}
WELD-000032 org.jboss.weld.exceptions.IllegalArgumentException InterceptionType must be lifecycle, but it is {0}
WELD-000033 java.lang.String Could not instantiate client proxy for {0}
WELD-000034 java.lang.String Could not access bean correctly when creating client proxy for {0}
WELD-000035 org.jboss.weld.exceptions.DefinitionException There was an error creating an id for {0}
WELD-000036 org.jboss.weld.exceptions.IllegalStateException Unexpected unwrapped custom decorator instance: {0}
WELD-000037 org.jboss.weld.exceptions.UnsupportedOperationException Cannot call EJB remove method directly on non-dependent scoped bean {0}
WELD-000038 org.jboss.weld.exceptions.DefinitionException A bean class that is not a decorator has an injection point annotated @Delegate at injection point {0} at {1} StackTrace:
WELD-000039 org.jboss.weld.exceptions.DefinitionException @Typed class {0} not present in the set of bean types of {1} [{2}]
WELD-000040 org.jboss.weld.exceptions.DefinitionException All stereotypes must specify the same scope or the bean must declare a scope - declared on {0}, declared stereotypes [{1}], possible scopes {2}{3}
WELD-000041 org.jboss.weld.exceptions.DefinitionException Specializing bean may not declare a bean name if it is declared by specialized bean specializing: {0} specialized: {1}
WELD-000042 org.jboss.weld.exceptions.IllegalStateException Cannot operate on non container provided decorator {0}
WELD-000043 org.jboss.weld.exceptions.IllegalStateException The following bean is not an EE resource producer: {0}
WELD-000044 org.jboss.weld.exceptions.NullInstanceException Unable to obtain instance from {0}
WELD-000045 org.jboss.weld.exceptions.InvalidObjectException Unable to deserialize object - serialization proxy is required
WELD-000046 org.jboss.weld.exceptions.DefinitionException At most one scope may be specified on {0}
WELD-000047 org.jboss.weld.exceptions.DefinitionException Specializing bean must extend another bean: {0}
WELD-000048 java.lang.String Conflicting interceptor bindings found on {0}
WELD-000049 org.jboss.weld.exceptions.WeldException Unable to invoke {0} on {1}
WELD-000050 org.jboss.weld.exceptions.WeldException Cannot cast producer type {0} to bean type {1}
WELD-000052 org.jboss.weld.exceptions.IllegalProductException Cannot return null from a non-dependent producer method: {0} at {1} StackTrace:
WELD-000053 org.jboss.weld.exceptions.IllegalProductException Producers cannot declare passivating scope and return a non-serializable class: {0} at {1} StackTrace:
WELD-000054 org.jboss.weld.exceptions.IllegalProductException Producers cannot produce unserializable instances for injection into an injection point that requires a passivation capable dependency Producer: {0} at {1} Injection Point: {2} at {3} StackTrace:
WELD-000059 org.jboss.weld.exceptions.DefinitionException No delegate injection point defined for {0}
WELD-000060 org.jboss.weld.exceptions.DefinitionException Too many delegate injection points defined for {0}
WELD-000061 org.jboss.weld.exceptions.DefinitionException The delegate type does not extend or implement the decorated type. Decorated type: {0} Decorator: {1}
WELD-000064 org.jboss.weld.exceptions.IllegalStateException Unable to process decorated type: {0}
WELD-000066 org.jboss.weld.exceptions.DefinitionException {0} has more than one @Dispose parameter at {1} StackTrace:
WELD-000067 org.jboss.weld.exceptions.DefinitionException {0} is not allowed on same method as {1}, see {2} at {3} StackTrace:
WELD-000068 org.jboss.weld.exceptions.DefinitionException {0} method {1} is not a business method of {2} at {3} StackTrace:
WELD-000070 org.jboss.weld.exceptions.DefinitionException Simple bean {0} cannot be a non-static inner class
WELD-000071 org.jboss.weld.exceptions.DefinitionException Managed bean with a parameterized bean class must be @Dependent: {0}
WELD-000072 org.jboss.weld.exceptions.DeploymentException Bean declaring a passivating scope must be passivation capable. Bean: {0}
WELD-000073 org.jboss.weld.exceptions.DeploymentException Bean class which has decorators cannot be declared final: {0}
WELD-000075 org.jboss.weld.exceptions.DefinitionException Normal scoped managed bean implementation class has a public field: {0}
WELD-000076 org.jboss.weld.exceptions.DefinitionException Bean constructor must not have a parameter annotated with {0}: {1} at {2} StackTrace:
WELD-000077 org.jboss.weld.exceptions.DefinitionException Cannot declare multiple disposal methods for this producer method. Producer method: {0} Disposal methods: {1}
WELD-000078 org.jboss.weld.exceptions.DefinitionException Specialized producer method does not override another producer method: {0} at {1} StackTrace:
WELD-000079 org.jboss.weld.exceptions.CreationException Could not instantiate a proxy for a session bean: {0} Proxy: {1}
WELD-000080 org.jboss.weld.exceptions.DefinitionException Enterprise beans cannot be interceptors: {0}
WELD-000081 org.jboss.weld.exceptions.DefinitionException Enterprise beans cannot be decorators: {0}
WELD-000082 org.jboss.weld.exceptions.DefinitionException Scope {0} is not allowed on stateless session beans for {1}. Only @Dependent is allowed.
WELD-000083 org.jboss.weld.exceptions.DefinitionException Scope {0} is not allowed on singleton session beans for {1}. Only @Dependent and @ApplicationScoped is allowed.
WELD-000084 org.jboss.weld.exceptions.DefinitionException Specializing enterprise bean must extend another enterprise bean: {0}
WELD-000085 org.jboss.weld.exceptions.IllegalArgumentException Cannot destroy null instance of {0}
WELD-000086 org.jboss.weld.exceptions.IllegalArgumentException Cannot destroy session bean instance not created by the container: {0}
WELD-000087 org.jboss.weld.exceptions.DefinitionException Message driven beans cannot be Managed Beans: {0}
WELD-000088 org.jboss.weld.exceptions.DefinitionException Observer method must be static or local business method: {0} at {1} StackTrace:
WELD-000089 org.jboss.weld.exceptions.IllegalStateException Unable to determine EJB for {0}, multiple EJBs with that class: {1}
WELD-000090 org.jboss.weld.exceptions.DefinitionException A decorator has an abstract method that is not declared by any decorated type Method: {0} at {1} StackTrace:
WELD-000094 org.jboss.weld.exceptions.DefinitionException Injected field {0} cannot be annotated @Produces on {1}
WELD-000095 org.jboss.weld.exceptions.DefinitionException Session bean with generic class {0} must be @Dependent scope
WELD-000096 org.jboss.weld.exceptions.DefinitionException Producer fields on session beans must be static. Field {0} declared on {1}
WELD-000097 org.jboss.weld.exceptions.DefinitionException A producer method with a parameterized return type with a type variable must be declared @Dependent scoped: {0} at {1} StackTrace:
WELD-000098 org.jboss.weld.exceptions.DefinitionException A producer method return type may not contain a wildcard: {0} at {1} StackTrace:
WELD-000099 org.jboss.weld.exceptions.WeldException Cannot load class {0} during deserialization of proxy
WELD-000100 DEBUG Weld initialized. Validating beans
WELD-000101 INFO Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
WELD-000103 DEBUG Enabled alternatives for {0}: {1}
WELD-000104 DEBUG Enabled decorator types for {0}: {1}
WELD-000105 DEBUG Enabled interceptor types for {0}: {1}
WELD-000106 DEBUG Bean: {0}
WELD-000107 DEBUG Interceptor: {0}
WELD-000108 DEBUG Decorator: {0}
WELD-000109 DEBUG ObserverMethod: {0}
WELD-000110 org.jboss.weld.exceptions.IllegalArgumentException Cannot set the annotation type to null (if you want to stop the type being used, call veto()): {0}
WELD-000111 org.jboss.weld.exceptions.IllegalStateException Bean type is not STATELESS, STATEFUL or SINGLETON: {0}
WELD-000112 org.jboss.weld.exceptions.DefinitionException Class {0} has both @Interceptor and @Decorator annotations
WELD-000113 org.jboss.weld.exceptions.IllegalArgumentException BeanDeploymentArchive must not be null: {0}
WELD-000114 org.jboss.weld.exceptions.IllegalArgumentException Must start the container with a deployment
WELD-000116 org.jboss.weld.exceptions.IllegalStateException Manager has not been initialized
WELD-000117 org.jboss.weld.exceptions.IllegalStateException Required service {0} has not been specified for {1}
WELD-000118 org.jboss.weld.exceptions.DeploymentException Only normal scopes can be passivating. Scope {0}
WELD-000119 INFO Not generating any bean definitions from {0} because of underlying class loading error: Type {1} not found. If this is unexpected, enable DEBUG logging to see the full error.
WELD-000123 org.jboss.weld.exceptions.DeploymentException Error loading {0} defined in {1}
WELD-000124 DEBUG Using {0} threads for bootstrap
WELD-000125 org.jboss.weld.exceptions.DeploymentException Invalid thread pool size: {0}
WELD-000126 WARN Timeout shutting down thread pool {0} at {1}
WELD-000127 org.jboss.weld.exceptions.DeploymentException Invalid thread pool type: {0}
WELD-000128 org.jboss.weld.exceptions.DeploymentException Invalid value for property {0}: {1}
WELD-000130 org.jboss.weld.exceptions.IllegalArgumentException Cannot replace AnnotatedType for {0} with AnnotatedType for {1}
WELD-000132 DEBUG Disabled alternative (ignored): {0}
WELD-000133 DEBUG Specialized bean (ignored): {0}
WELD-000134 DEBUG Producer (method or field) of specialized bean (ignored): {0}
WELD-000135 WARN Legacy deployment metadata provided by the integrator. Certain functionality will not be available.
WELD-000136 ERROR Exception(s) thrown during observer of BeforeShutdown:
WELD-000137 TRACE Exception while loading class '{0}' : {1}
WELD-000138 TRACE Error while loading class '{0}' : {1}
WELD-000139 WARN Ignoring portable extension class {0} because of underlying class loading error: Type {1} not found. Enable DEBUG logging level to see the full error.
WELD-000140 org.jboss.weld.exceptions.IllegalStateException Calling Bootstrap method after container has already been initialized. For correct order, see CDI11Bootstrap's documentation.
WELD-000141 INFO Falling back to the default observer method resolver due to {0}
WELD-000142 DEBUG Exception loading annotated type using ClassFileServices. Falling back to the default implementation. {0}
WELD-000143 org.jboss.weld.exceptions.IllegalStateException Container lifecycle event method invoked outside of extension observer method invocation.
WELD-000144 org.jboss.weld.exceptions.IllegalStateException CDI API version mismatch. CDI 1.0 API detected on classpath. Weld requires version 1.1 or better.
WELD-000145 DEBUG Bean identifier index built: {0}
WELD-000146 WARN BeforeBeanDiscovery.addAnnotatedType(AnnotatedType) used for {0} is deprecated from CDI 1.1!
WELD-000147 WARN Decorator {0} declares inappropriate constructor therefore will not available as a managed bean!
WELD-000148 DEBUG ProcessAnnotatedType.setAnnotatedType() called by {0}: {1} replaced by {2}
WELD-000149 DEBUG ProcessBeanAttributes.setBeanAttributes() called by {0}: {1} replaced by {2}
WELD-000150 DEBUG ProcessInjectionPoint.setInjectionPoint() called by {0}: {1} replaced by {2}
WELD-000151 DEBUG ProcessInjectionTarget.setInjectionTarget() called by {0}: {1} replaced by {2}
WELD-000152 DEBUG ProcessProducer.setProducer() called by {0}: {1} replaced by {2}
WELD-000153 DEBUG AfterTypeDiscovery.addAnnotatedType() called by {0} for {1}
WELD-000154 DEBUG AfterBeanDiscovery.addBean() called by {0} for {1}
WELD-000155 DEBUG AfterBeanDiscovery.addObserverMethod() called by {0} for {1}
WELD-000156 DEBUG AfterBeanDiscovery.addContext() called by {0} for {1}
WELD-000157 DEBUG AfterBeanDiscovery.addDefinitionError() called by {0} for {1}
WELD-000158 DEBUG BeforeBeanDiscovery.addQualifier() called by {0} for {1}
WELD-000159 DEBUG BeforeBeanDiscovery.addScope() called by {0} for {1}
WELD-000160 DEBUG BeforeBeanDiscovery.addStereoType() called by {0} for {1}
WELD-000161 DEBUG BeforeBeanDiscovery.addInterceptorBindingCalled() called by {0} for {1}
WELD-000162 DEBUG BeforeBeanDiscovery.addAnnotatedType() called by {0} for {1}
WELD-000163 org.jboss.weld.exceptions.DeploymentException Non-unique bean deployment identifier detected: {0}
WELD-000164 DEBUG ProcessAnnotatedType.veto() called by {0} for {1}
WELD-000165 DEBUG ProcessBeanAttributes.veto() called by {0} for {1}
WELD-000166 DEBUG AfterTypeDiscovery.{3} modified by {0} {2} {1}
WELD-000167 WARN Class {0} is annotated with @{1} but it does not declare an appropriate constructor therefore is not registered as a bean!
WELD-000168 DEBUG Extension bean deployed: {0}
WELD-000169 INFO Jandex cannot distinguish inner and static nested classes! Update Jandex to 2.0.3.Final version or newer to improve scanning performance.
WELD-000170 org.jboss.weld.exceptions.IllegalStateException {0} observer cannot call both the configurator and set methods. Extension {1} StackTrace:
WELD-000171 DEBUG BeforeBeanDiscovery.configureQualifier() called by {0} for {1}
WELD-000172 DEBUG BeforeBeanDiscovery.configureInterceptorBinding() called by {0} for {1}
WELD-000173 DEBUG ProcessProducer.configureProducer() called by {0} for {1}
WELD-000174 DEBUG ProcessBeanAttributes.configureBeanAttributes() called by {0} for {1}
WELD-000175 DEBUG ProcessBeanAttributes.isIgnoreFinalMethods() called by {0} for {1}
WELD-000176 DEBUG ProcessAnnotatedType.configureAnnotatedType() called by {0} for {1}
WELD-000177 DEBUG ProcessObserverMethod.configureObserverMethod() called by {0} for {1}
WELD-000178 DEBUG ProcessInjectionPoint.configureInjectionPoint() called by {0} for {1}
WELD-000179 org.jboss.weld.exceptions.DeploymentException {0} created by {1} cannot be processed
WELD-000180 DEBUG Drop unused bean metadata: {0}
WELD-000181 WARN org.jboss.weld.executor.threadPoolType=COMMON detected but ForkJoinPool.commonPool() does not work with SecurityManager enabled, switching to {0} thread pool
WELD-000183 org.jboss.weld.exceptions.DefinitionException Multiple different @Priority values derived from stereotype annotations for annotated type - {0}
WELD-000200 TRACE Looked for {0} and got {1} in {2}
WELD-000201 TRACE Context {0} cleared
WELD-000202 TRACE Added {0} with key {1} to {2}
WELD-000203 TRACE Removed {0} from {1}
WELD-000211 org.jboss.weld.exceptions.IllegalArgumentException The delimiter "{0}" should not be in the prefix "{1}"
WELD-000212 org.jboss.weld.exceptions.IllegalArgumentException No contextual specified to retrieve (null)
WELD-000213 org.jboss.weld.exceptions.IllegalStateException No bean store available for {0}
WELD-000215 TRACE Bean store {0} is detached
WELD-000216 TRACE Updating underlying store with contextual {0} under ID {1}
WELD-000217 TRACE Adding detached contextual {0} under ID {1}
WELD-000218 TRACE Removed {0} from session {1}
WELD-000219 TRACE Unable to remove {0} from non-existent session
WELD-000220 TRACE Added {0} to session {1}
WELD-000221 TRACE Unable to add {0} to session as no session could be obtained
WELD-000222 TRACE Loading bean store {0} map from session {1}
WELD-000223 org.jboss.weld.exceptions.DefinitionException Context.getScope() returned null for {0}
WELD-000224 WARN Unable to clear the bean store {0}.
WELD-000225 WARN Bean store leak detected during {0} association: {1}
WELD-000226 org.jboss.weld.exceptions.DeploymentException Cannot register additional context for scope: {0}, {1}
WELD-000227 org.jboss.weld.exceptions.IllegalStateException Bean identifier index inconsistency detected - the distributed container probably does not work with identical applications Expected hash: {0} Current index: {1}
WELD-000228 DEBUG Bean store leak detected during {0} association - instances of beans with the following identifiers might not be destroyed correctly: {1}
WELD-000229 org.jboss.weld.exceptions.IllegalStateException Contextual reference of {0} is not valid after container {1} shutdown
WELD-000304 TRACE Cleaning up conversation {0}
WELD-000313 TRACE Lock acquired on conversation {0}
WELD-000314 TRACE Lock released on conversation {0}
WELD-000315 WARN Failed to acquire conversation lock in {0} ms for {1}
WELD-000316 WARN Attempt to release lock on conversation {0} failed because {1}
WELD-000317 DEBUG Promoted conversation {0} to long-running
WELD-000318 DEBUG Returned long-running conversation {0} to transient
WELD-000320 TRACE Cleaning up transient conversation
WELD-000321 org.jboss.weld.contexts.NonexistentConversationException No conversation found to restore for id {0}
WELD-000322 org.jboss.weld.contexts.BusyConversationException Conversation lock timed out: {0}
WELD-000326 TRACE Found conversation id {0} in request parameter
WELD-000327 DEBUG Resuming conversation with id {0}
WELD-000328 java.lang.IllegalStateException Attempt to call begin() on a long-running conversation
WELD-000329 java.lang.IllegalStateException Attempt to call end() on a transient conversation
WELD-000332 java.lang.IllegalArgumentException Conversation ID {0} is already in use
WELD-000333 java.lang.IllegalStateException Must call associate() before calling activate()
WELD-000334 java.lang.IllegalStateException Must call associate() before calling deactivate()
WELD-000335 WARN Conversation context is already active, most likely it was not cleaned up properly during previous request processing: {0}
WELD-000336 java.lang.IllegalStateException Conversation context is not active
WELD-000337 java.lang.IllegalStateException Unable to find ConversationNamingScheme in the request, this conversation wasn't transient at the start of the request
WELD-000338 java.lang.IllegalStateException Unable to locate ConversationIdGenerator
WELD-000339 java.lang.IllegalStateException A request must be associated with the context in order to generate a conversation id
WELD-000340 java.lang.IllegalStateException A request must be associated with the context in order to load the known conversations
WELD-000341 java.lang.IllegalStateException Unable to load the conversations from the associated request - {0}: {1}, request: {2}
WELD-000342 WARN Going to end a locked conversation with id {0}
WELD-000343 java.lang.IllegalStateException Unable to load the current conversation from the associated request - {0}: {1}, request: {2}
WELD-000400 DEBUG Sending event {0} directly to observer {1}
WELD-000401 ERROR Failure while notifying an observer {0} of event {1}. {2}
WELD-000403 org.jboss.weld.exceptions.InvalidObjectException Proxy required
WELD-000404 org.jboss.weld.exceptions.DefinitionException Conditional observer method cannot be declared by a @Dependent scoped bean: {0} at {1} StackTrace:
WELD-000405 org.jboss.weld.exceptions.DefinitionException Observer method cannot have more than one event parameter annotated with @Observes or @ObservesAsync: {0} at {1} StackTrace:
WELD-000406 org.jboss.weld.exceptions.DefinitionException Observer method cannot have a parameter annotated with @Disposes: {0} at {1} StackTrace:
WELD-000407 org.jboss.weld.exceptions.DefinitionException Observer method cannot be annotated with @Produces: {0} at {1} StackTrace:
WELD-000408 org.jboss.weld.exceptions.DefinitionException Observer method cannot be annotated with @Inject, observer methods are automatically injection points: {0} at {1} StackTrace:
WELD-000409 org.jboss.weld.exceptions.DefinitionException Observer method for container lifecycle event can only inject BeanManager: {0} at {1} StackTrace:
WELD-000410 org.jboss.weld.exceptions.DefinitionException Observer method cannot define @WithAnnotations: {0} at {1} StackTrace:
WELD-000411 INFO Observer method {0} receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
WELD-000412 org.jboss.weld.exceptions.DefinitionException ObserverMethod.{0}() returned null for {1}
WELD-000413 org.jboss.weld.exceptions.DefinitionException {0} cannot be replaced by an observer method with a different bean class {1}
WELD-000414 org.jboss.weld.exceptions.DefinitionException Observer method for container lifecycle event cannot be asynchronous. {0} at {1} StackTrace:
WELD-000415 org.jboss.weld.exceptions.DefinitionException Custom implementation of observer method does not override either notify(T) or notify(EventContext): {0}
WELD-000416 org.jboss.weld.exceptions.IllegalArgumentException None or multiple event parameters declared on: {0} at {1} StackTrace:
WELD-000417 WARN The original observed type {0} is not assignable from {1} set by extension {2} - the observer method invocation may result in runtime exception!
WELD-000418 org.jboss.weld.exceptions.DefinitionException Observer method for container lifecycle event cannot be static. {0} at {1} StackTrace:
WELD-000419 org.jboss.weld.exceptions.IllegalArgumentException {0} is not a valid notification mode for asynchronous observers
WELD-000420 java.lang.UnsupportedOperationException Asynchronous observer notification with timeout option requires an implementation of ExecutorServices which provides an instance of ScheduledExecutorServices.
WELD-000421 org.jboss.weld.exceptions.IllegalArgumentException Invalid input value for asynchronous observer notification timeout. Has to be parseable String, java.lang.Long or long. Original exception: {0}
WELD-000422 java.lang.IllegalStateException WeldEvent.select(Type subtype, Annotation... qualifiers) can be invoked only on an instance of WeldEvent.
WELD-000600 DEBUG {0} is missing @Retention(RUNTIME). Weld will use this annotation, however this may make the application unportable.
WELD-000601 DEBUG {0} is missing @Target. Weld will use this annotation, however this may make the application unportable.
WELD-000602 DEBUG {0} is not declared @Target(TYPE, METHOD) or @Target(TYPE). Weld will use this annotation, however this may make the application unportable.
WELD-000604 DEBUG {0} is not declared @Target(METHOD, FIELD, TYPE). Weld will use this annotation, however this may make the application unportable.
WELD-000605 DEBUG {0} is not declared @Target(METHOD, FIELD, TYPE, PARAMETER), @Target(METHOD, TYPE), @Target(METHOD), @Target(TYPE) or @Target(FIELD). Weld will use this annotation, however this may make the application unportable.
WELD-000606 org.jboss.weld.exceptions.IllegalArgumentException Unable to determine name of parameter
WELD-000607 org.jboss.weld.exceptions.WeldException annotationMap cannot be null
WELD-000608 org.jboss.weld.exceptions.WeldException declaredAnnotationMap cannot be null
WELD-000610 org.jboss.weld.exceptions.WeldException Unable to deserialize constructor. Declaring class {0}, index {1}
WELD-000611 org.jboss.weld.exceptions.WeldException Unable to deserialize method. Declaring class {0}, index {1}
WELD-000612 org.jboss.weld.exceptions.WeldException Unable to deserialize field. Declaring class {0}, field name {1}
WELD-000614 org.jboss.weld.exceptions.DefinitionException Incorrect number of AnnotatedParameters {0} on AnnotatedMethod {1}. AnnotatedMethod has {2} as parameters but should have {3} as parameters
WELD-000616 org.jboss.weld.exceptions.WeldException Instantiation through ReflectionFactory of {0} failed
WELD-000617 org.jboss.weld.exceptions.WeldException Instantiation through Unsafe of {0} failed
WELD-000619 WARN A lifecycle callback interceptor declares an interceptor binding with target other than ElementType.TYPE {0} Binding: {1} Target: {2}
WELD-000620 DEBUG {0} is not declared @Target(METHOD, FIELD, PARAMETER, TYPE). Weld will use this annotation, however this may make the application unportable.
WELD-000621 WARN Interceptor binding {0} with @Target defined as {1} should not be applied on interceptor binding {2} with @Target definition: {3}
WELD-000622 org.jboss.weld.exceptions.WeldException IllegalArgumentException invoking {2} on {1} ({0}) with parameters {3}
WELD-000623 org.jboss.weld.exceptions.IllegalArgumentException Unknown type {0}.
WELD-000624 org.jboss.weld.exceptions.IllegalArgumentException Invalid type argument combination: {0}; {1}.
WELD-000625 org.jboss.weld.exceptions.WeldException Unable to locate method: {0}
WELD-000707 org.jboss.weld.exceptions.IllegalStateException Non Http-Servlet lifecycle not defined
WELD-000708 TRACE Initializing request {0}
WELD-000709 TRACE Destroying request {0}
WELD-000710 org.jboss.weld.exceptions.IllegalStateException Cannot inject {0} outside of a Servlet request
WELD-000711 WARN Context activation pattern {0} ignored as it is overriden by the integrator.
WELD-000712 WARN Unable to dissociate context {0} from the storage {1}
WELD-000713 org.jboss.weld.exceptions.IllegalStateException Unable to inject ServletContext. None is associated with {0}, {1}
WELD-000714 WARN HttpContextLifecycle guard leak detected. The Servlet container is not fully compliant. The value was {0}
WELD-000715 WARN HttpContextLifecycle guard not set. The Servlet container is not fully compliant.
WELD-000716 INFO Running in Servlet 2.x environment. Asynchronous request support is disabled.
WELD-000717 WARN Unable to deactivate context {0} when destroying request {1}
WELD-000718 WARN No EEModuleDescriptor defined for bean archive with ID: {0}. @Initialized and @Destroyed events for ApplicationScoped may be fired twice.
WELD-000719 DEBUG An active HttpSessionDestructionContext detected. This is likely a leftover from previous sessions that ended exceptionally. This context will be terminated.
WELD-000804 org.jboss.weld.exceptions.IllegalArgumentException {0} is not an enum
WELD-000805 org.jboss.weld.exceptions.DefinitionException Cannot have more than one post construct method annotated with @PostConstruct for {0}
WELD-000806 org.jboss.weld.exceptions.DefinitionException Cannot have more than one pre destroy method annotated @PreDestroy for {0}
WELD-000807 org.jboss.weld.exceptions.DefinitionException Initializer method cannot be annotated @Produces {0} at {1} StackTrace:
WELD-000808 org.jboss.weld.exceptions.DefinitionException Initializer method cannot have parameters annotated @Disposes: {0} at {1} StackTrace:
WELD-000810 org.jboss.weld.exceptions.DefinitionException Cannot place qualifiers on final fields: {0}
WELD-000812 org.jboss.weld.exceptions.DefinitionException Cannot determine constructor to use for {0}. Possible constructors {1}
WELD-000813 org.jboss.weld.exceptions.IllegalArgumentException injectableFields and initializerMethods must have the same size. Injectable Fields: {0} InitializerMethods: {1}
WELD-000814 org.jboss.weld.exceptions.IllegalArgumentException Annotation {0} is not a qualifier
WELD-000815 org.jboss.weld.exceptions.IllegalArgumentException Qualifier {0} is already present in the set {1}
WELD-000816 org.jboss.weld.exceptions.DefinitionException Cannot determine constructor to use for {0}
WELD-000817 org.jboss.weld.exceptions.IllegalStateException Unable to find Bean Deployment Archive for {0}
WELD-000818 org.jboss.weld.exceptions.IllegalArgumentException Event type {0} is not allowed
WELD-000819 org.jboss.weld.exceptions.IllegalArgumentException Cannot provide an event type parameterized with a type parameter {0}
WELD-000820 org.jboss.weld.exceptions.IllegalArgumentException Cannot proxy non-Class Type {0}
WELD-000824 org.jboss.weld.exceptions.WeldException Error getting field {0} on {1}
WELD-000826 org.jboss.weld.exceptions.DeploymentException Cannot access values() on annotation
WELD-000827 org.jboss.weld.exceptions.DefinitionException Initializer method may not be a generic method: {0} at {1} StackTrace:
WELD-000833 org.jboss.weld.exceptions.DefinitionException Resource injection point represents a method which doesn't follow JavaBean conventions {0}
WELD-000834 WARN Unable to inject resource - most probably incorrect InjectionServices SPI implementation: {0} at {1}
WELD-000900 INFO {0}
WELD-001001 java.lang.IllegalArgumentException Cannot pass null expressionFactory
WELD-001002 TRACE Looking for EL property {0}
WELD-001003 TRACE EL property {0} resolved to {1}
WELD-001100 org.jboss.weld.exceptions.DefinitionException {0} can only be applied to an annotation. It was applied to {1}
WELD-001101 WARN Member of array type or annotation type must be annotated @NonBinding: {0}
WELD-001102 org.jboss.weld.exceptions.IllegalStateException Stereotype {0} not registered with container
WELD-001103 org.jboss.weld.exceptions.DefinitionException Cannot declare qualifiers on stereotype {0}
WELD-001104 org.jboss.weld.exceptions.DefinitionException Cannot specify a value for @Named stereotype {0}
WELD-001105 org.jboss.weld.exceptions.DefinitionException At most one scope type may be specified for {0}
WELD-001106 org.jboss.weld.exceptions.DefinitionException BeanAttributes.getStereotypes() returned null for {0}
WELD-001107 org.jboss.weld.exceptions.DefinitionException {0}() returned null for {1}
WELD-001108 org.jboss.weld.exceptions.DefinitionException BeanAttributes.getTypes() returned null for {0}
WELD-001109 org.jboss.weld.exceptions.DefinitionException BeanAttributes.getScope() returned null for {0}
WELD-001110 org.jboss.weld.exceptions.DefinitionException {0} defined on {1} is not a stereotype
WELD-001111 org.jboss.weld.exceptions.DefinitionException {0} defined on {1} is not a qualifier
WELD-001112 org.jboss.weld.exceptions.DefinitionException BeanAttributes.getTypes() may not return an empty set {0}
WELD-001113 org.jboss.weld.exceptions.DefinitionException {0} defined on {1} is not a scope annotation
WELD-001114 org.jboss.weld.exceptions.IllegalArgumentException {0} returned null for {1}
WELD-001115 org.jboss.weld.exceptions.IllegalArgumentException Parameter position {0} of parameter {1} is not valid
WELD-001116 WARN AnnotatedType ({0}) without a constructor
WELD-001117 WARN Member {0} ({1}) does not belong to the actual class hierarchy of the annotatedType {2} ({3}) at {4}
WELD-001118 org.jboss.weld.exceptions.DefinitionException A type variable is not a valid bean type. Bean type {0} of bean {1}
WELD-001119 org.jboss.weld.exceptions.DefinitionException A parameterized type containing wildcard parameters is not a valid bean type. Bean type {0} of bean {1}
WELD-001120 org.jboss.weld.exceptions.DefinitionException A bean that has a parameterized bean type containing type variables must be @Dependent scoped. Bean type {0} of bean {1}
WELD-001121 org.jboss.weld.exceptions.DefinitionException Member of array type or annotation type must be annotated @NonBinding: {0}
WELD-001122 org.jboss.weld.exceptions.IllegalStateException Failed to deserialize annotated type identified with {0}
WELD-001123 org.jboss.weld.exceptions.DefinitionException {0} defined on {1} is not an interceptor binding
WELD-001124 WARN Context.getScope() returned {0} which is not a scope annotation. Context: {1}
WELD-001125 INFO Illegal bean type {0} ignored on {1}
WELD-001126 org.jboss.weld.exceptions.IllegalStateException BeanAttributesConfigurator is not able to read {0} - missing BeanManager
WELD-001200 org.jboss.weld.exceptions.IllegalStateException Error configuring XML parser
WELD-001201 org.jboss.weld.exceptions.IllegalStateException Error loading beans.xml {0}
WELD-001202 org.jboss.weld.exceptions.IllegalStateException Error parsing {0}
WELD-001203 org.jboss.weld.exceptions.DefinitionException can only be specified once, but appears multiple times: {0}
WELD-001204 org.jboss.weld.exceptions.DefinitionException can only be specified once, but is specified multiple times: {0}
WELD-001205 org.jboss.weld.exceptions.DefinitionException can only be specified once, but it is specified multiple times: {0}
WELD-001207 org.jboss.weld.exceptions.DefinitionException can only be specified once, but it is specified multiple times: {0}
WELD-001208 WARN Error when validating {0}@{1} against xsd. {2}
WELD-001210 WARN Warning when validating {0}@{1} against xsd. {2}
WELD-001300 javax.naming.NamingException Unable to locate BeanManager
WELD-001301 org.jboss.weld.exceptions.IllegalArgumentException Annotation {0} is not a qualifier
WELD-001302 org.jboss.weld.exceptions.IllegalArgumentException Duplicate qualifiers: {0}
WELD-001303 org.jboss.weld.contexts.ContextNotActiveException No active contexts for scope type {0}
WELD-001304 org.jboss.weld.exceptions.IllegalStateException More than one context active for scope type {0}
WELD-001305 org.jboss.weld.exceptions.IllegalArgumentException The given type {0} is not a type of the bean {1}
WELD-001307 org.jboss.weld.exceptions.UnsatisfiedResolutionException Unable to resolve any beans of type {0} with qualifiers {1}
WELD-001308 org.jboss.weld.exceptions.UnsatisfiedResolutionException Unable to resolve any beans for {0}
WELD-001310 org.jboss.weld.exceptions.IllegalArgumentException No decorator types were specified in the set
WELD-001311 org.jboss.weld.exceptions.IllegalArgumentException Interceptor bindings list cannot be empty
WELD-001312 org.jboss.weld.exceptions.IllegalArgumentException Duplicate interceptor binding type {0} found
WELD-001313 org.jboss.weld.exceptions.IllegalArgumentException Trying to resolve interceptors with non-binding type {0}
WELD-001314 java.lang.String {0} is expected to be a normal scope type
WELD-001316 org.jboss.weld.exceptions.IllegalArgumentException {0} is not an interceptor binding type
WELD-001317 org.jboss.weld.exceptions.IllegalArgumentException {0} is not a stereotype
WELD-001318 org.jboss.weld.exceptions.AmbiguousResolutionException Cannot resolve an ambiguous dependency between: {0}
WELD-001319 org.jboss.weld.exceptions.IllegalArgumentException Bean manager ID must not be null
WELD-001325 org.jboss.weld.exceptions.IllegalArgumentException No instance of an extension {0} registered with the deployment
WELD-001326 org.jboss.weld.exceptions.IllegalArgumentException Cannot create bean attributes - the argument must be either an AnnotatedField or AnnotatedMethod but {0} is not
WELD-001327 org.jboss.weld.exceptions.IllegalStateException Unable to identify the correct BeanManager. The calling class {0} is placed in multiple bean archives
WELD-001328 org.jboss.weld.exceptions.IllegalStateException Unable to identify the correct BeanManager. The calling class {0} is not placed in bean archive
WELD-001329 org.jboss.weld.exceptions.IllegalStateException Unable to identify the correct BeanManager
WELD-001330 org.jboss.weld.exceptions.IllegalStateException BeanManager is not available.
WELD-001331 org.jboss.weld.exceptions.IllegalArgumentException Declaring bean cannot be null for the non-static member {0}
WELD-001332 org.jboss.weld.exceptions.IllegalStateException BeanManager method {0} is not available during application initialization. Container state: {1}
WELD-001333 org.jboss.weld.exceptions.IllegalStateException BeanManager method {0} is not available after shutdown
WELD-001334 org.jboss.weld.exceptions.UnsatisfiedResolutionException Unsatisfied dependencies for type {1} with qualifiers {0} {2}
WELD-001335 org.jboss.weld.exceptions.AmbiguousResolutionException Ambiguous dependencies for type {1} with qualifiers {0} Possible dependencies: {2}
WELD-001336 org.jboss.weld.exceptions.IllegalStateException InjectionTargetFactory.configure() may not be called after createInjectionTarget() invocation. AnnotatedType used: {0}
WELD-001401 org.jboss.weld.exceptions.InconsistentSpecializationException Two beans cannot specialize the same bean {0}
WELD-001402 org.jboss.weld.exceptions.DeploymentException The bean {0} declares a passivating scope but has a non-serializable interceptor {1}
WELD-001403 org.jboss.weld.exceptions.UnserializableDependencyException The bean {0} declares a passivating scope but has a non-serializable decorator {1}
WELD-001404 org.jboss.weld.exceptions.DefinitionException The injection point is annotated with @New which cannot be combined with other qualifiers: {0} at {1} StackTrace
WELD-001405 org.jboss.weld.exceptions.DefinitionException Cannot inject {0} in a class which is not a bean at {1} StackTrace
WELD-001406 org.jboss.weld.exceptions.DefinitionException Cannot inject injection point metadata in a non @Dependent scoped bean: {0} at {1} StackTrace
WELD-001407 org.jboss.weld.exceptions.DefinitionException Cannot declare an injection point with a type variable: {0} at {1} StackTrace
WELD-001408 org.jboss.weld.exceptions.DeploymentException Unsatisfied dependencies for type {2} with qualifiers {1} at injection point {0} at {3} {4}
WELD-001409 org.jboss.weld.exceptions.DeploymentException Ambiguous dependencies for type {2} with qualifiers {1} at injection point {0} at {3} Possible dependencies: {4}
WELD-001410 org.jboss.weld.exceptions.DeploymentException The injection point has non-proxyable dependencies: {0} at {1} StackTrace
WELD-001413 org.jboss.weld.exceptions.UnserializableDependencyException The bean {0} declares a passivating scope but has a non-passivation-capable dependency {1}
WELD-001414 org.jboss.weld.exceptions.DeploymentException Bean name is ambiguous. Name {0} resolves to beans: {1}
WELD-001415 org.jboss.weld.exceptions.DeploymentException Bean name is identical to a bean name prefix used elsewhere. Name {0}
WELD-001416 org.jboss.weld.exceptions.DeploymentException Enabled interceptor class {0} specified twice: - {1}, - {2}
WELD-001417 org.jboss.weld.exceptions.DeploymentException Enabled interceptor class {0} ({1}) does not match an interceptor bean: the class is not found, or not annotated with @Interceptor and still not registered through a portable extension, or not annotated with @Dependent inside an implicit bean archive
WELD-001418 org.jboss.weld.exceptions.DeploymentException Enabled decorator class {0} specified twice: - {1}, - {2}
WELD-001419 org.jboss.weld.exceptions.DeploymentException Enabled decorator class {0} is not the bean class of at least one decorator bean (detected decorator beans: {1})
WELD-001420 org.jboss.weld.exceptions.DeploymentException Enabled alternative {0} is not a stereotype
WELD-001421 org.jboss.weld.exceptions.DeploymentException Cannot enable the same alternative stereotype {0} in beans.xml: - {1}, - {2}
WELD-001422 org.jboss.weld.exceptions.DeploymentException Enabled alternative class {0} ({1}) does not match any bean, or is not annotated with @Alternative or an @Alternative stereotype, or does not declare a producer annotated with @Alternative or an @Alternative stereotype
WELD-001424 org.jboss.weld.exceptions.DefinitionException The following disposal methods were declared but did not resolve to a producer method: {0}
WELD-001425 org.jboss.weld.exceptions.DefinitionException An injection point cannot have a wildcard type parameter: {0} at {1} StackTrace
WELD-001426 org.jboss.weld.exceptions.DefinitionException An injection point must have a type parameter: {0} at {1} StackTrace
WELD-001427 org.jboss.weld.exceptions.DefinitionException Only field injection points can use the @Named qualifier with no value: {0} at {1} StackTrace
WELD-001428 org.jboss.weld.exceptions.DefinitionException A decorator cannot have producer methods, but at least one was found on {0}.
WELD-001429 org.jboss.weld.exceptions.DefinitionException A decorator cannot have producer fields, but at least one was found on {0}.
WELD-001430 org.jboss.weld.exceptions.DefinitionException A decorator cannot have disposer methods, but at least one was found on {0}.
WELD-001431 org.jboss.weld.exceptions.DefinitionException An interceptor cannot have producer methods, but at least one was found on {0}.
WELD-001432 org.jboss.weld.exceptions.DefinitionException An interceptor cannot have producer fields, but at least one was found on {0}.
WELD-001433 org.jboss.weld.exceptions.DefinitionException An interceptor cannot have disposer methods, but at least one was found on {0}.
WELD-001434 org.jboss.weld.exceptions.UnproxyableResolutionException Normal scoped bean {0} is not proxyable for an unknown reason - {1}.
WELD-001435 org.jboss.weld.exceptions.UnproxyableResolutionException Normal scoped bean {0} is not proxyable because it has no no-args constructor - {1}.
WELD-001436 java.lang.String Type {0} is not proxyable because it has a private constructor {1} - {2}.
WELD-001437 org.jboss.weld.exceptions.UnproxyableResolutionException Bean type {0} is not proxyable because it is final - {1}.
WELD-001438 org.jboss.weld.exceptions.UnproxyableResolutionException Bean type {0} is not proxyable because it is a primitive - {1}.
WELD-001439 org.jboss.weld.exceptions.UnproxyableResolutionException Bean type {0} is not proxyable because it is an array type - {1}.
WELD-001440 WARN Scope type {0} used on injection point {1} at {2} StackTrace
WELD-001441 org.jboss.weld.exceptions.DeploymentException Enabled alternative {0} is not a class
WELD-001442 org.jboss.weld.exceptions.DeploymentException Enabled alternative {0} is not annotated @Alternative
WELD-001443 org.jboss.weld.exceptions.DeploymentException Pseudo scoped bean has circular dependencies. Dependency path: {0}
WELD-001445 org.jboss.weld.exceptions.DefinitionException An interceptor cannot have observer methods, but at least one was found on {0}.
WELD-001446 org.jboss.weld.exceptions.DefinitionException A decorator cannot have observer methods, but at least one was found on {0}.
WELD-001447 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not return {3} at {4} StackTrace
WELD-001448 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not have exactly one parameter at {3} StackTrace
WELD-001449 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but its single parameter is not a {3} at {4} StackTrace
WELD-001451 org.jboss.weld.exceptions.DefinitionException jakarta.transaction.UserTransaction cannot be injected into an enterprise bean with container-managed transactions: {0} at {1} StackTrace
WELD-001452 org.jboss.weld.exceptions.DefinitionException {0} is not a valid type for a Bean metadata injection point {1} at {2} StackTrace
WELD-001453 org.jboss.weld.exceptions.DefinitionException {0} is not a valid type argument for a Bean metadata injection point {1} at {2} StackTrace
WELD-001454 org.jboss.weld.exceptions.DefinitionException {0} cannot be used at a Bean metadata injection point of a bean which is not {1}, {2} at {3} StackTrace
WELD-001455 org.jboss.weld.exceptions.DefinitionException {0} does not declare any decorated types.
WELD-001456 org.jboss.weld.exceptions.IllegalArgumentException Argument {0} must not be null
WELD-001457 org.jboss.weld.exceptions.DeploymentException Cannot enable the same alternative class {0} in beans.xml: - {1}, - {2}
WELD-001463 org.jboss.weld.exceptions.DeploymentException Bean declaring a passivating scope must be passivation capable. Bean: {0}
WELD-001465 org.jboss.weld.exceptions.UnserializableDependencyException {0} for a built-in bean {1} must be passivation capable.
WELD-001466 org.jboss.weld.exceptions.DefinitionException Invalid injection point found in a disposer method: {0} at {1} StackTrace
WELD-001467 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not return {3} or {4}. at {5} StackTrace
WELD-001468 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not have a {3} return type. at {4} StackTrace
WELD-001469 WARN Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not have zero parameters.
WELD-001471 WARN Interceptor method {0} defined on class {1} is not defined according to the specification. It should not throw {2}, which is a checked exception. at {3} StackTrace
WELD-001472 org.jboss.weld.exceptions.DefinitionException EventMetadata can only be injected into an observer method: {0} at {1} StackTrace
WELD-001473 WARN jakarta.enterprise.inject.spi.Bean implementation {0} declared a normal scope but does not implementjakarta.enterprise.inject.spi.PassivationCapable. It won'''t be possible to inject this bean into a bean with a passivating scope (@SessionScoped, @ConversationScoped). This can be fixed by assigning the Bean implementation a unique id by implementing the PassivationCapable interface.
WELD-001474 java.lang.String Class {0} is on the classpath, but was ignored because a class it references was not found: {1}.
WELD-001475 java.lang.String The following beans match by type, but none have matching qualifiers:{0}
WELD-001476 org.jboss.weld.exceptions.DefinitionException {0} must be @Dependent
WELD-001477 org.jboss.weld.exceptions.UnserializableDependencyException The bean {0} declares a passivating scope but has a(n) {1} with a non-passivation-capable dependency {2}
WELD-001478 WARN Interceptor {0} is enabled for the application and for the bean archive {1}. It will only be invoked in the @Priority part of the chain.
WELD-001479 WARN Decorator {0} is enabled for the application and for the bean archive {1}. It will only be invoked in the @Priority part of the chain.
WELD-001480 org.jboss.weld.exceptions.UnproxyableResolutionException Bean type {0} is not proxyable because it contains a final method {1} - {2}.
WELD-001481 WARN Final method will be ignored during proxy generation and should never be invoked upon the proxy instance! {0} - {1}.
WELD-001482 org.jboss.weld.exceptions.DefinitionException InterceptionFactory can only be injected in a parameter of a producer method: {0} at {1} StackTrace
WELD-001483 org.jboss.weld.exceptions.IllegalArgumentException Argument must not be null
WELD-001485 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} and it declares more than one parameter. at {3} StackTrace
WELD-001500 org.jboss.weld.exceptions.WeldException Failed to deserialize proxy object with beanId {0}
WELD-001501 org.jboss.weld.exceptions.WeldException Method call requires a BeanInstance which has not been set for this proxy {0}
WELD-001502 org.jboss.weld.exceptions.DefinitionException Resource producer field [{0}] must be @Dependent scoped
WELD-001503 org.jboss.weld.exceptions.DeploymentException Bean class which has interceptors cannot be declared final: {0}
WELD-001504 org.jboss.weld.exceptions.DeploymentException Intercepted bean method {0} (intercepted by {1}) cannot be declared final
WELD-001505 WARN Method {0} cannot be intercepted by {1} - will be ignored by interceptors and should never be invoked upon the proxy instance!
WELD-001506 TRACE Created new client proxy of type {0} for bean {1} with ID {2}
WELD-001507 TRACE Located client proxy of type {0} for bean {1}
WELD-001508 org.jboss.weld.exceptions.DefinitionException Cannot create an InjectionTarget from {0} as it is an interface
WELD-001510 org.jboss.weld.exceptions.WeldException Non passivation capable bean serialized with ProxyMethodHandler
WELD-001511 org.jboss.weld.exceptions.DefinitionException Specializing bean {0} does not have bean type {1} of specialized bean {2}
WELD-001512 org.jboss.weld.exceptions.IllegalArgumentException {0} cannot be constructed for {1}
WELD-001513 org.jboss.weld.exceptions.IllegalArgumentException An implementation of AnnotatedCallable must implement either AnnotatedConstructor or AnnotatedMethod, {0}
WELD-001514 org.jboss.weld.exceptions.IllegalArgumentException An implementation of AnnotatedMember must implement either AnnotatedConstructor, AnnotatedMethod or AnnotatedField, {0}
WELD-001515 org.jboss.weld.exceptions.IllegalStateException Unable to load annotated member {0}
WELD-001516 org.jboss.weld.exceptions.DefinitionException Resource producer field [{0}] must not have an EL name
WELD-001517 org.jboss.weld.exceptions.DefinitionException The type of the resource producer field [{0}] does not match the resource type {1}
WELD-001518 org.jboss.weld.exceptions.IllegalArgumentException Cannot create Producer implementation. Declaring bean missing for a non-static member {0}
WELD-001519 DEBUG An InjectionTarget is created for an abstract {0}. It will not be possible to produce instances of this type!
WELD-001520 org.jboss.weld.exceptions.DefinitionException Beans with different bean names {0}, {1} cannot be specialized by a single bean {2}
WELD-001521 org.jboss.weld.exceptions.IllegalArgumentException InjectionPoint.getAnnotated() must return either AnnotatedParameter or AnnotatedField but {0} was returned for {1}
WELD-001522 org.jboss.weld.exceptions.IllegalStateException Unable to restore InjectionPoint. No matching InjectionPoint found on {0}
WELD-001523 org.jboss.weld.exceptions.IllegalStateException Unable to restore InjectionPoint. Multiple matching InjectionPoints found on {0}: - {1}, - {2}
WELD-001524 org.jboss.weld.exceptions.WeldException Unable to load proxy class for bean {0} with class {1}
WELD-001525 org.jboss.weld.exceptions.UnsupportedOperationException Instance.destroy() is not supported. The underlying context {0} does not support destroying of contextual instances
WELD-001526 org.jboss.weld.exceptions.DeploymentException Managed bean declaring a passivating scope has a non-passivation capable decorator. Bean: {0} Decorator: {1}
WELD-001527 org.jboss.weld.exceptions.DeploymentException Managed bean declaring a passivating scope has a non-serializable interceptor. Bean: {0} Interceptor: {1}
WELD-001529 DEBUG An InjectionTarget is created for a {0} which does not have any appropriate constructor. It will not be possible to produce instances of this type!
WELD-001530 org.jboss.weld.exceptions.CreationException Cannot produce an instance of {0}.
WELD-001531 org.jboss.weld.exceptions.UnsupportedOperationException Instance.iterator().remove() is not supported.
WELD-001532 org.jboss.weld.exceptions.IllegalArgumentException A passivation capable bean cannot have a null id: {0}
WELD-001533 DEBUG An InjectionTarget is created for a non-static inner {0}. It will not be possible to produce instances of this type!
WELD-001534 org.jboss.weld.exceptions.DeploymentException Bean class which has decorators must have a public constructor without parameters: {0}
WELD-001535 org.jboss.weld.exceptions.DeploymentException Constructor without parameters cannot be private in bean class which has decorators: {0} at {1} StackTrace:
WELD-001536 TRACE Found {0} constructors annotated with @Inject for {1}
WELD-001537 org.jboss.weld.exceptions.DefinitionException An InjectionTarget is created for a {0} which does not have any appropriate constructor.
WELD-001538 TRACE Created context instance for bean {0} identified as {1}
WELD-001539 TRACE Created MH initializer body for decorator proxy: {0}
WELD-001540 TRACE Adding method to enterprise proxy: {0}
WELD-001541 TRACE Adding method to proxy: {0}
WELD-001542 TRACE Retrieving/generating proxy class {0}
WELD-001543 TRACE Created Proxy class of type {0} supporting interfaces {1}
WELD-001544 TRACE MethodHandler processing returning bean instance for {0}
WELD-001545 TRACE MethodHandler processing call to {0} for {1}
WELD-001546 TRACE Setting new MethodHandler with bean instance for {0} on {1}
WELD-001547 TRACE Invoking interceptor chain for method {0} on {1}
WELD-001548 TRACE Invoking method {0} directly on {1}
WELD-001549 org.jboss.weld.exceptions.IllegalArgumentException Unable to determine parent creational context of {0}
WELD-001550 org.jboss.weld.exceptions.DefinitionException A producer field with a parameterized type with a type variable must be declared @Dependent scoped: {0} at {1} StackTrace:
WELD-001551 org.jboss.weld.exceptions.DefinitionException A producer field type may not contain a wildcard: {0} at {1} StackTrace:
WELD-001552 WARN An extension ({0}) has a non-static public field ({1}).
WELD-001553 TRACE Proxy activated after passivation for {0}
WELD-001554 org.jboss.weld.exceptions.DefinitionException Bean.{0}() returned null for {1}
WELD-001555 org.jboss.weld.exceptions.DefinitionException Decorator.{0}() returned null for {1}
WELD-001556 org.jboss.weld.exceptions.DefinitionException Specializing {0} cannot specialize a non-managed bean {1}
WELD-001557 WARN Unable to dump the proxy class file for {0}
WELD-001558 WARN Unable to create directory {0} to dump the proxy classes.
WELD-001559 org.jboss.weld.exceptions.DefinitionException Bean builder {0} does not define a create lifecycle callback.
WELD-001560 org.jboss.weld.exceptions.DefinitionException Bean builder {0} does not define a destroy lifecycle callback.
WELD-001561 org.jboss.weld.exceptions.DefinitionException Bean builder {0} does not define a BeanManager.
WELD-001562 org.jboss.weld.exceptions.DefinitionException A producer method return type may not be a type variable or an array type whose component type is a type variable: {0} at {1} StackTrace:
WELD-001563 org.jboss.weld.exceptions.DefinitionException A producer field type may not be a type variable or an array type whose component type is a type variable: {0} at {1} StackTrace:
WELD-001564 org.jboss.weld.exceptions.IllegalStateException Injection point metadata injected into a stateless session bean may only be accessed within its business method invocation
WELD-001565 org.jboss.weld.exceptions.DefinitionException Interceptor builder {0} does not define an interception function.
WELD-001566 org.jboss.weld.exceptions.DefinitionException Interceptor builder {0} does not define any InterceptionType.
WELD-001567 org.jboss.weld.exceptions.IllegalStateException Cannot create contextual instance of {0}
WELD-001568 org.jboss.weld.exceptions.IllegalStateException Unable to create ClassFile for: {1}.
WELD-001569 org.jboss.weld.exceptions.IllegalArgumentException Cannot inject injection point metadata in a non @Dependent bean: {0}
WELD-001570 org.jboss.weld.exceptions.IllegalStateException Invalid BeanConfigurator setup - no callback was specified for {0}
WELD-001571 INFO Proxy for {0} created in {1} because {2}.
WELD-001572 org.jboss.weld.exceptions.CreationException Cannot create instance of session bean from Annotated Type {0} before AfterDeploymentValidation phase.
WELD-001573 org.jboss.weld.exceptions.IllegalStateException Cannot obtain contextual reference for {0} - producing WeldInstance does not exist anymore
WELD-001574 WARN Cannot destroy contextual instance for {0} - producing WeldInstance does not exist anymore
WELD-001575 org.jboss.weld.exceptions.IllegalStateException WeldInstance.select(Type subtype, Annotation... qualifiers) can be invoked only on an instance of WeldInstance.
WELD-001576 DEBUG Using {1} to instantiate a shared proxy class {0}; the deployment implementation [{2}] does not match the instantiator the proxy was created with
WELD-001577 INFO Detected private final method: {1} on an intercepted bean: {0} Weld will ignore this method during interception.
WELD-001578 org.jboss.weld.exceptions.IllegalStateException WeldDefaultProxyServices failed to load/define a class with name {0} whose original class was {1} because all attempts to determine a class loader ended with null.
WELD-001579 org.jboss.weld.exceptions.IllegalArgumentException An instance of ProxyFactory.ProxyNameHolder has to contain a class name. This instance was created for bean class: {1}
WELD-001580 org.jboss.weld.exceptions.IllegalStateException Cannot obtain contextual reference for {0} - a previously obtained reference has already been destroyed.
WELD-001601 java.lang.IllegalArgumentException Cannot extract rawType from {0}
WELD-001602 org.jboss.weld.exceptions.WeldException Cannot create qualifier instance model for {0} at {1} StackTrace:
WELD-001700 WARN Interceptor annotation class {0} not found, interception based on it is not enabled
WELD-001701 TRACE Invoking next interceptor in chain: {0}
WELD-001702 org.jboss.weld.exceptions.DefinitionException Interceptor.getInterceptorBindings() returned null for {0}
WELD-001703 INFO Unable to determine the @Intercepted Bean for {0}
WELD-001704 java.lang.IllegalArgumentException @Intercepted Bean can only be injected into an interceptor: {0}
WELD-001705 org.jboss.weld.exceptions.CreationException Target instance not created - one of the interceptor methods in the AroundConstruct chain did not invoke InvocationContext.proceed() for: {0}
WELD-001706 org.jboss.weld.exceptions.IllegalStateException InterceptionFactory.createInterceptedInstance() may only be called once
WELD-001707 DEBUG InterceptionFactory.configure() was invoked for AnnotatedType: {0}
WELD-001708 DEBUG InterceptionFactory.ignoreFinalMethods() was invoked for AnnotatedType: {0}. Final methods will be ignored during proxy generation!
WELD-001709 DEBUG InterceptionFactory skipped wrapper creation for AnnotatedType {0} because no @AroundInvoke interceptor was bound to it.
WELD-001710 DEBUG InterceptionFactory skipped wrapper creation for an internal container construct of type {0}
WELD-001711 org.jboss.weld.exceptions.IllegalStateException InterceptionFactory is not supported on interfaces. Check InterceptionFactory<{0}>
WELD-001800 org.jboss.weld.exceptions.IllegalStateException Unable to get bean identifier at position {0} from {1}
WELD-001801 org.jboss.weld.exceptions.InvalidObjectException Unable to deserialize {0}
WELD-001900 org.jboss.weld.exceptions.IllegalStateException Invalid configuration property value {0} for key {1}
WELD-001901 org.jboss.weld.exceptions.IllegalStateException Configuration property type {0} does not match the required type {1} for configuration key {2}
WELD-001902 DEBUG Following configuration was detected and applied: {0}
WELD-001903 DEBUG Configuration key {0} already set to {1} in a source with higher priority, value {2} from {3} is ignored
WELD-001904 WARN Unsupported configuration key found and ignored: {0}
WELD-001905 org.jboss.weld.exceptions.IllegalStateException Configuration key {0} set to different values in the same source: - {1} - {2}
WELD-001906 DEBUG ResourceLoader not specified for {0}, file properties will not be loaded
WELD-001907 DEBUG Reading properties file: {0}
WELD-001908 WARN Configuration property {0} can only be set by integrator - value {1} ignored

WFHTTP

Code Level Return Type Message
WFHTTP000002 org.wildfly.client.config.ConfigXMLParseException Port value %s out of range
WFHTTP000003 ERROR Failed to acquire session
WFHTTP000004 java.io.IOException Invalid response type %s
WFHTTP000005 java.io.IOException Invalid response code %s (full response %s)
WFHTTP000006 ERROR Failed to write exception
WFHTTP000007 java.io.IOException Invalid content encoding %s
WFHTTP000008 java.lang.SecurityException Authentication failed
WFHTTP000009 java.lang.RuntimeException Unsupported qop version in digest auth
WFHTTP000010 ERROR Error parsing authentication-info header
WFHTTP000011 java.io.IOException Stream is closed
WFHTTP000012 java.lang.IllegalStateException Attempted to do blocking IO from the IO thread. This is prohibited as it may result in deadlocks
WFHTTP000013 javax.naming.AuthenticationException Authentication failed (full response %s)
WFHTTP000014 DEBUG JavaEE to JakartaEE backward compatibility layer have been installed

WFHTTPEJB

Code Level Return Type Message
WFHTTPEJB000001 java.io.IOException Unexpected data in response
WFHTTPEJB000002 java.io.IOException No session id in response
WFHTTPEJB000003 java.lang.IllegalStateException Could not resolve target for locator %s
WFHTTPEJB000004 java.lang.IllegalArgumentException Could create HTTP EJBReceiver for protocol %s
WFHTTPEJB000006 java.lang.IllegalArgumentException EJB not stateful
WFHTTPEJB000007 java.lang.IllegalArgumentException Session was not active
WFHTTPEJB000008 java.lang.IllegalArgumentException Session was not active
WFHTTPEJB000009 jakarta.ejb.EJBException Wrong view type
WFHTTPEJB000010 java.lang.IllegalStateException Cannot enlist in transaction
WFHTTPEJB000011 java.io.IOException Invalid transaction type %s
WFHTTPEJB000012 ERROR Unable to perform EJB discovery
WFHTTPEJB000013 INFO HTTP discovery has been interrupted
WFHTTPEJB000014 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted

WFLYAC

Code Level Return Type Message
WFLYAC0000 java.lang.String Name of the app client configuration file to use (default is "appclient.xml")
WFLYAC0000 java.lang.String Display this message and exit
WFLYAC0000 java.lang.String Set the url of the application server instance to connect to
WFLYAC0000 java.lang.String Load ejb-client.properties file from the given url
WFLYAC0000 java.lang.String Load system properties from the given url
WFLYAC0000 java.lang.String Set a system property
WFLYAC0000 java.lang.String Print version and exit
WFLYAC0000 java.lang.String Runs the container with the security manager enabled.
WFLYAC0000 java.lang.String The appclient script starts an application client which can be used to test and access the deployed Jakarta Enterprise Beans.
WFLYAC0002 ERROR %s running app client main
WFLYAC0004 java.lang.String You must specify the application client to execute
WFLYAC0005 java.lang.String Argument expected for option %s
WFLYAC0006 java.lang.RuntimeException Could not find application client jar in deployment
WFLYAC0007 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find application client %s
WFLYAC0008 java.lang.RuntimeException Could not load application client main class
WFLYAC0010 java.lang.String Unable to load properties from URL %s
WFLYAC0011 java.lang.RuntimeException Could not start app client %s as no main class was found
WFLYAC0012 java.lang.RuntimeException Could not start app client %s as no main method was found on main class %s
WFLYAC0013 javax.xml.stream.XMLStreamException Duplicate subsystem declaration
WFLYAC0015 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse %s
WFLYAC0016 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse %s at [%d,%d]
WFLYAC0017 java.lang.String Malformed URL provided for option %s
WFLYAC0018 java.lang.RuntimeException More than one application client found and no app client name specified
WFLYAC0020 java.lang.String Unknown option %s
WFLYAC0021 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load callback-handler class %s
WFLYAC0022 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not create instance of callback-handler class %s
WFLYAC0023 java.lang.RuntimeException Could not find application client %s
WFLYAC0024 java.lang.RuntimeException Cannot specify both a host to connect to and an ejb-client.properties file.

WFLYAG

Code Level Return Type Message
WFLYAG0001 INFO Adding deployment processors for DataSourceDefinition annotation and resource-ref entries
WFLYAG0101 INFO Started datasource '%s' bound to [%s]
WFLYAG0102 INFO Stopped datasource '%s'
WFLYAG0103 INFO Started xa-datasource '%s' bound to [%s]
WFLYAG0104 INFO Stopped xa-datasource '%s'
WFLYAG0105 org.jboss.msc.service.StartException Exception starting datasource '%s'
WFLYAG0106 org.jboss.msc.service.StartException Exception starting xa-datasource '%s'
WFLYAG0107 org.jboss.msc.service.StartException Invalid connection provider. Either a java.sql.Driver or javax.sql.DataSource implementation is required. Fix the connection-provider for the driver
WFLYAG0108 org.jboss.msc.service.StartException An xa-datasource requires a javax.sql.XADataSource as connection provider. Fix the connection-provider for the driver
WFLYAG0109 org.jboss.msc.service.StartException Could not start datasource: transaction manager is missing
WFLYAG0110 org.jboss.msc.service.StartException Error obtaining credentials from authentication context for datasource '%s'
WFLYAG0111 org.jboss.msc.service.StartException CredentialSourceSupplier for datasource '%s' is invalid
WFLYAG0201 INFO Performing flush operation, mode %s
WFLYAG0301 org.jboss.as.controller.OperationFailedException Unknown datasource service of type: %s
WFLYAG0302 org.jboss.as.controller.OperationFailedException Invalid connection in '%s'
WFLYAG0303 org.jboss.as.controller.OperationFailedException JNDI name have to start with java:/ or java:jboss/
WFLYAG0304 org.jboss.as.controller.OperationFailedException JNDI name shouldn't include '//' or end with '/'
WFLYAG0401 org.jboss.as.server.deployment.DeploymentUnitProcessingException Invalid connection provider. Either a java.sql.Driver or javax.sql.DataSource implementation is required. Fix the connection-provider for the driver
WFLYAG0402 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to load connection provider class '%s'
WFLYAG0403 org.jboss.as.server.deployment.DeploymentUnitProcessingException Element must provide attribute '%s'
WFLYAG0501 INFO Loaded class %s for driver '%s'
WFLYAG0502 java.lang.IllegalArgumentException Failed to load driver module '%s'
WFLYAG0503 java.lang.IllegalArgumentException Failed to load driver class '%s'
WFLYAG0601 WARN %s: %s

WFLYBATCH

Code Level Return Type Message
WFLYBATCH000001 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error processing META-INF/batch-jobs directory.
WFLYBATCH000002 java.lang.UnsupportedOperationException Resources of type %s cannot be removed
WFLYBATCH000003 java.lang.IllegalArgumentException Could not find deployment name: %s
WFLYBATCH000004 java.lang.IllegalStateException The service JobOperatorService has been stopped and cannot execute operations.
WFLYBATCH000005 jakarta.batch.operations.NoSuchJobException The job name '%s' was not found for the deployment.
WFLYBATCH000006 jakarta.batch.operations.JobStartException Could not find the job XML file in the deployment: %s
WFLYBATCH000007 WARN Failed processing the job XML file %s. Attempting to execute this job may result in errors.
WFLYBATCH000008 WARN Empty job-repository element found in deployment descriptor. Using the default job repository for deployment %s.
WFLYBATCH000009 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYBATCH000011 org.jboss.msc.service.StartException Failed to create %s job repository.
WFLYBATCH000013 ERROR Only one job repository can be defined in the jboss-all.xml deployment descriptor. The first job repository will be used.
WFLYBATCH000014 WARN Stopping execution %d of %s for deployment %s
WFLYBATCH000015 ERROR Failed to stop execution %d for job %s on deployment %s
WFLYBATCH000016 ERROR Failed to restart execution %d for job %s on deployment %s
WFLYBATCH000017 INFO Restarting previously stopped batch job %s. Previous execution id %d. New execution id %d.
WFLYBATCH000019 jakarta.batch.operations.BatchRuntimeException No batch environment was found for class loader: %s
WFLYBATCH000020 jakarta.batch.operations.JobSecurityException Permission denied. User %s does not have %s permissions.

WFLYCC

Code Level Return Type Message
WFLYCC0001 java.lang.IllegalStateException Cannot add deployment actions after starting creation of a rollout plan
WFLYCC0002 java.lang.IllegalStateException Cannot add deployment actions after starting creation of a rollout plan
WFLYCC0003 java.lang.String Cannot convert %s to %s
WFLYCC0004 java.lang.IllegalArgumentException Cannot derive a deployment name from %s -- use an overloaded method variant that takes a 'name' parameter
WFLYCC0005 java.lang.IllegalArgumentException Cannot use a DeploymentPlan not created by this manager
WFLYCC0007 java.lang.String Deployment with name %s already present in the domain
WFLYCC0008 java.lang.String failed
WFLYCC0009 java.lang.IllegalStateException Global rollback is not compatible with a server restart
WFLYCC0010 java.lang.IllegalStateException Graceful shutdown already configured with a timeout of %d ms
WFLYCC0011 java.lang.String Only one version of deployment with a given unique name can exist in the domain. The deployment plan specified that a new version of deployment %s replace an existing deployment with the same unique name, but did not apply the replacement to all server groups. Missing server groups were: %s
WFLYCC0012 java.lang.IllegalStateException Invalid action type %s
WFLYCC0013 java.lang.IllegalStateException Preceding action was not a %s
WFLYCC0014 java.lang.IllegalArgumentException %s is not a valid URI
WFLYCC0015 java.lang.IllegalArgumentException Illegal %s value %d -- must be greater than %d
WFLYCC0016 java.lang.IllegalArgumentException Illegal %s value %d -- must be greater than %d and less than %d
WFLYCC0017 java.lang.RuntimeException Screen real estate is expensive; displayUnits must be 5 characters or less
WFLYCC0019 java.lang.String No failure details provided
WFLYCC0020 java.lang.IllegalStateException No %s is configured
WFLYCC0022 java.lang.IllegalStateException %s is closed
WFLYCC0023 java.lang.RuntimeException Operation outcome is %s
WFLYCC0024 java.lang.IllegalStateException %s operations are not allowed after content and deployment modifications
WFLYCC0025 org.jboss.as.controller.client.helpers.domain.RollbackCancelledException Rollback was cancelled
WFLYCC0026 org.jboss.as.controller.client.helpers.domain.RollbackCancelledException Rollback was itself rolled back
WFLYCC0027 org.jboss.as.controller.client.helpers.domain.RollbackCancelledException Rollback timed out
WFLYCC0028 java.lang.String Deployment with name %s already present in the server
WFLYCC0029 java.lang.IllegalStateException Unknown action type %s
WFLYCC0030 org.jboss.as.controller.client.logging.ControllerClientLogger$LeakDescription Allocation stack trace:
WFLYCC0031 java.lang.IllegalArgumentException No failure description as the operation was successful.
WFLYCC0032 java.lang.IllegalArgumentException The operation name was not defined.
WFLYCC0033 java.lang.IllegalArgumentException The address must be of type ModelType.LIST.
WFLYCC0034 WARN Closing leaked controller client
WFLYCC0035 WARN Cannot delete temp file %s, will be deleted on exit
WFLYCC0036 java.io.IOException Stream was closed
WFLYCC0037 java.lang.RuntimeException Failed to parse the configuration file: %s

WFLYCLCOM

Code Level Return Type Message
WFLYCLCOM0001 org.jboss.as.controller.OperationFailedException %2$g is not a valid value for parameter %1$s. The value must be %3$s %4$g
WFLYCLCOM0002 WARN Failed to close %s
WFLYCLCOM0003 java.lang.String The following attributes do not support negative values: %s
WFLYCLCOM0004 java.lang.String The following attributes do not support zero values: %s
WFLYCLCOM0005 java.lang.String Legacy host does not support multiple values for attributes: %s
WFLYCLCOM0006 WARN The '%s' attribute of the '%s' element is no longer supported and will be ignored
WFLYCLCOM0007 WARN The '%s' element is no longer supported and will be ignored
WFLYCLCOM0008 org.jboss.as.controller.OperationFailedException %s:%s operation is only supported in admin-only mode.

WFLYCLEEINF

Code Level Return Type Message
WFLYCLEEINF0001 INFO Failed to cancel %s on primary owner.
WFLYCLEEINF0002 INFO Failed to schedule %s on primary owner.

WFLYCLEJBINF

Code Level Return Type Message
WFLYCLEJBINF0003 WARN Failed to expire stateful session bean %s
WFLYCLEJBINF0010 WARN Disabling expiration for '%s'. SFSB expiration should be configured per §4.3.11 of the Jakarta Enterprise Beans specification.

WFLYCLI

Code Level Return Type Message
WFLYCLI0001 INFO Processing CLI script %s
WFLYCLI0002 ERROR Error processing CLI script %s
WFLYCLI0003 java.lang.RuntimeException Could not find CLI properties file %s
WFLYCLI0004 ERROR CLI execution output:
WFLYCLI0005 INFO Done processing CLI script %s
WFLYCLI0006 DEBUG Executing CLI command %s
WFLYCLI0007 java.lang.IllegalStateException Unexpected exception while processing CLI commands from %s
WFLYCLI0008 java.lang.IllegalStateException Error processing CLI script %s. The Operations were executed but there were unexpected values. See list of errors in %s
WFLYCLI0009 java.lang.IllegalStateException Unexpected exception while processing CLI command %s from %s

WFLYCLINF

Code Level Return Type Message
WFLYCLINF0001 INFO Activating Infinispan subsystem.
WFLYCLINF0002 INFO Started %s cache from %s container
WFLYCLINF0003 INFO Stopped %s cache from %s container
WFLYCLINF0010 java.lang.IllegalArgumentException %s is not a valid cache store
WFLYCLINF0029 INFO Started remote cache container '%s'.
WFLYCLINF0030 INFO Stopped remote cache container '%s'.
WFLYCLINF0031 org.infinispan.client.hotrod.exceptions.HotRodClientException Specified HotRod protocol version %s does not support creating caches automatically. Cache named '%s' must be already created on the Infinispan Server!
WFLYCLINF0033 WARN Attribute '%s' is configured to use a deprecated value: %s; use one of the following values instead: %s

WFLYCLJG

Code Level Return Type Message
WFLYCLJG0001 INFO Activating JGroups subsystem. JGroups version %s
WFLYCLJG0007 java.lang.String Failed to parse %s
WFLYCLJG0008 java.lang.String Failed to locate %s
WFLYCLJG0010 org.jboss.as.controller.OperationFailedException Transport for stack %s is not defined. Please specify both a transport and protocol list, either as optional parameters to add() or via batching.
WFLYCLJG0015 java.lang.String Unknown metric %s
WFLYCLJG0016 org.jboss.as.controller.OperationFailedException Unable to load protocol class %s
WFLYCLJG0022 java.lang.IllegalArgumentException %s entry not found in configured key store
WFLYCLJG0023 java.lang.IllegalArgumentException %s key store entry is not of the expected type: %s
WFLYCLJG0025 java.lang.IllegalArgumentException Configured credential source does not reference a clear-text password credential
WFLYCLJG0028 java.lang.IllegalArgumentException Could not resolve destination address for outbound socket binding named '%s'
WFLYCLJG0030 WARN Protocol %s is obsolete and will be auto-updated to %s
WFLYCLJG0031 WARN Ignoring unrecognized %s property: %s
WFLYCLJG0032 INFO Connecting '%s' channel. '%s' joining cluster '%s' via %s
WFLYCLJG0033 INFO Connected '%s' channel. '%s' joined cluster '%s' with view: %s
WFLYCLJG0034 INFO Disconnecting '%s' channel. '%s' leaving cluster '%s' with view: %s
WFLYCLJG0035 INFO Disconnected '%s' channel. '%s' left cluster '%s'

WFLYCLSN

Code Level Return Type Message
WFLYCLSN0001 INFO This node will now operate as the singleton provider of the %s service
WFLYCLSN0002 INFO This node will no longer operate as the singleton provider of the %s service
WFLYCLSN0003 INFO %s elected as the singleton provider of the %s service
WFLYCLSN0004 java.lang.IllegalStateException No response received from primary provider of the %s service, retrying...
WFLYCLSN0005 ERROR Failed to start %s service
WFLYCLSN0006 WARN Failed to reach quorum of %2$d for %1$s service. No primary singleton provider will be elected.
WFLYCLSN0007 INFO Just reached required quorum of %2$d for %1$s service. If this cluster loses another member, no node will be chosen to provide this service.
WFLYCLSN0008 java.lang.IllegalArgumentException Detected multiple primary providers for %s service: %s
WFLYCLSN0009 java.lang.IllegalStateException Singleton service %s is not started.
WFLYCLSN0010 WARN No node was elected as the singleton provider of the %s service
WFLYCLSN0011 java.lang.IllegalArgumentException Specified quorum %d must be greater than zero

WFLYCLSNG

Code Level Return Type Message
WFLYCLSNG0001 INFO Singleton deployment detected. Deployment will reset using %s policy.

WFLYCLSV

Code Level Return Type Message
WFLYCLSV0001 java.lang.IllegalArgumentException A command dispatcher already exists for %s
WFLYCLSV0020 WARN Failed to purge %s/%s registry of old registry entries for: %s
WFLYCLSV0021 WARN Failed to notify %s/%s registry listener of %s(%s) event
WFLYCLSV0022 WARN Failed to restore local %s/%s registry entry following network partititon merge
WFLYCLSV0030 WARN Failed to notify %s/%s service provider registration listener of new providers: %s

WFLYCLWEB

Code Level Return Type Message
WFLYCLWEB0001 java.lang.IllegalStateException Session %s is not valid

WFLYCLWEBHR

Code Level Return Type Message
WFLYCLWEBHR0001 WARN Failed to expire session %s
WFLYCLWEBHR0007 WARN Failed to activate attributes of session %s
WFLYCLWEBHR0008 WARN Failed to activate attribute %2$s of session %1$s
WFLYCLWEBHR0009 java.lang.IllegalStateException Failed to read attribute %2$s of session %1$s
WFLYCLWEBHR0010 WARN Failed to activate authentication for single sign on %s
WFLYCLWEBHR0011 WARN Session %s is missing cache entry for attribute %s

WFLYCLWEBINF

Code Level Return Type Message
WFLYCLWEBINF0001 WARN Failed to passivate attributes of session %s
WFLYCLWEBINF0002 WARN Failed to passivate attribute %2$s of session %1$s
WFLYCLWEBINF0003 java.lang.IllegalStateException Session %s is not valid
WFLYCLWEBINF0004 WARN Failed to expire session %s
WFLYCLWEBINF0005 DEBUG Failed to cancel expiration/passivation of session %s on primary owner.
WFLYCLWEBINF0006 DEBUG Failed to schedule expiration/passivation of session %s on primary owner.
WFLYCLWEBINF0007 WARN Failed to activate attributes of session %s
WFLYCLWEBINF0008 WARN Failed to activate attribute %2$s of session %1$s
WFLYCLWEBINF0009 java.lang.IllegalStateException Failed to read attribute %2$s of session %1$s
WFLYCLWEBINF0010 WARN Failed to activate authentication for single sign on %s
WFLYCLWEBINF0011 WARN Session %s is missing cache entry for attribute %s
WFLYCLWEBINF0012 WARN Disabling eviction for cache '%s'. Web session passivation should be configured via in jboss-web.xml.
WFLYCLWEBINF0013 WARN Disabling expiration for cache '%s'. Web session expiration should be configured per §7.5 of the servlet specification.

WFLYCLWEBUT

Code Level Return Type Message
WFLYCLWEBUT0001 java.lang.IllegalStateException Session %s is invalid
WFLYCLWEBUT0002 java.lang.IllegalStateException Session %s already exists
WFLYCLWEBUT0003 java.lang.IllegalStateException Session manager was stopped
WFLYCLWEBUT0004 WARN Legacy overriding attached distributable session management provider for %s
WFLYCLWEBUT0005 WARN No distributable session management provider found for %s; using legacy provider based on
WFLYCLWEBUT0007 WARN No routing provider found for %s; using legacy provider based on static configuration
WFLYCLWEBUT0008 WARN No distributable single sign-on management provider found for %s; using legacy provider based on static configuration
WFLYCLWEBUT0009 java.lang.IllegalStateException Invalidation attempted for session %s after the response was committed (e.g. after HttpServletResponse.sendRedirect or sendError)

WFLYCM

Code Level Return Type Message
WFLYCM0002 java.lang.String Error initializing the process state listener %s
WFLYCM0003 ERROR Error invoking the process state listener %s
WFLYCM0004 ERROR The process state listener %s took to much time to complete.
WFLYCM0005 ERROR Error cleaning up for the process state listener %s
WFLYCM0006 org.jboss.as.controller.OperationFailedException Error to load module %s
WFLYCM0007 org.jboss.as.controller.OperationFailedException Error to load class %s from module %s
WFLYCM0008 org.jboss.as.controller.OperationFailedException Error to instantiate instance of class %s from module %s

WFLYCNT

Code Level Return Type Message
WFLYCNT0001 org.jboss.as.controller.OperationFailedException Invalid hash '%s' for content at address %s; current hash is '%s' -- perhaps the content has been updated by another caller?
WFLYCNT0002 java.lang.IllegalStateException Cannot obtain Message Digest algorithm SHA-1
WFLYCNT0003 java.lang.IllegalArgumentException Illegal child type %s -- must be %s
WFLYCNT0004 java.lang.IllegalArgumentException Illegal child resource class %s
WFLYCNT0005 java.lang.IllegalStateException No content found with hash %s
WFLYCNT0006 java.lang.IllegalStateException null parent

WFLYCONF

Code Level Return Type Message
WFLYCONF0001 INFO Activating MicroProfile Config Subsystem
WFLYCONF0002 org.jboss.as.controller.OperationFailedException Unable to load class %s from module %s
WFLYCONF0003 DEBUG Use directory for MicroProfile Config Source: %s
WFLYCONF0004 DEBUG Use class for MicroProfile Config Source: %s
WFLYCONF0009 DEBUG Use directory for MicroProfile Config Source Root: %s
WFLYCONF0010 INFO The MicroProfile Config Source root directory '%s' contains the following directories which will be used as MicroProfile Config Sources: %s

WFLYCTL

Code Level Return Type Message
WFLYCTL-001 ERROR Operation (%s) failed - address: (%s) - failure description: %s
WFLYCTL-001 javax.xml.stream.XMLStreamException Failed to load module %s
WFLYCTL0000 java.lang.String Operation %s
WFLYCTL0000 java.lang.String %nService %s was depended upon by
WFLYCTL0000 java.lang.String is missing [%s]
WFLYCTL0000 java.lang.String %s (missing) dependents: %s %n
WFLYCTL0000 java.lang.String %s (no longer required)%n
WFLYCTL0000 java.lang.String %s (new available)%n
WFLYCTL0000 java.lang.String Services that were unable to start:
WFLYCTL0000 java.lang.String Services that may be the cause:
WFLYCTL0000 java.lang.String attributes %s
WFLYCTL0000 java.lang.String capability '%s' requires it for address '%s'
WFLYCTL0000 java.lang.String capability '%s' requires it for attribute '%s' at address '%s'
WFLYCTL0000 java.lang.String %s
WFLYCTL0000 java.lang.String %s in context '%s'
WFLYCTL0000 java.lang.String ; Possible registration points for this capability: %s
WFLYCTL0000 java.lang.String ; There are no known registration points which can provide this capability.
WFLYCTL0000 java.lang.String ; This unresolvable capability likely is due to the use of an expression string in a configuration attribute that does not support expressions.
WFLYCTL0000 java.lang.String Couldn't convert %s to %s
WFLYCTL0000 java.lang.String While constructing a mapping; %s; expected a mapping for merging, but found %s
WFLYCTL0000 java.lang.String The yaml configuration files for customizing the configuration. Paths can be absolute, relative to the current execution directory or relative to the standalone configuration directory.
WFLYCTL0001 WARN Cannot resolve address %s, so cannot match it to any InetAddress
WFLYCTL0002 ERROR Error booting the container
WFLYCTL0003 ERROR Error booting the container due to insufficient stack space for the thread used to execute boot operations. The thread was configured with a stack size of [%1$d]. Setting system property %2$s to a value higher than [%1$d] may resolve this problem.
WFLYCTL0004 ERROR %s caught exception attempting to revert operation %s at address %s
WFLYCTL0005 ERROR Failed executing operation %s at address %s
WFLYCTL0006 ERROR Failed executing subsystem %s boot operations
WFLYCTL0007 ERROR Failed to close resource %s
WFLYCTL0008 ERROR Failed to persist configuration change
WFLYCTL0009 ERROR Failed to store configuration to %s
WFLYCTL0010 ERROR Invalid value %s for system property %s -- using default value [%d]
WFLYCTL0011 WARN Address %1$s is a wildcard address, which will not match against any specific address. Do not use the '%2$s' configuration element to specify that an interface should use a wildcard address; use '%3$s'
WFLYCTL0013 ERROR Operation (%s) failed - address: (%s)
WFLYCTL0015 WARN Wildcard address detected - will ignore other interface criteria.
WFLYCTL0016 ERROR Received no final outcome response for operation %s with address %s from remote process at address %s. The result of this operation will only include the remote process' preliminary response to the request.
WFLYCTL0017 DEBUG Operation (%s) failed - address: (%s) - failure description: %s
WFLYCTL0019 WARN Graceful shutdown of the handler used for native management requests did not complete within [%d] ms but shutdown of the underlying communication channel is proceeding
WFLYCTL0020 WARN Graceful shutdown of the handler used for native management requests failed but shutdown of the underlying communication channel is proceeding
WFLYCTL0021 WARN Invalid value '%s' for system property '%s' -- value must be convertible into an int
WFLYCTL0022 WARN Multiple addresses or network interfaces matched the selection criteria for interface '%s'. Matching addresses: %s. Matching network interfaces: %s. The interface will use address %s and network interface %s.
WFLYCTL0023 WARN Value '%s' for interface selection criteria 'inet-address' is ambiguous, as more than one address or network interface available on the machine matches it. Because of this ambiguity, no address will be selected as a match. Matching addresses: %s. Matching network interfaces: %s.
WFLYCTL0024 ERROR Could not read target definition!
WFLYCTL0027 ERROR Operation was interrupted before service container stability could be reached. Process should be restarted. Step that first updated the service container was '%s' at address '%s'
WFLYCTL0028 INFO Attribute '%s' in the resource at address '%s' is deprecated, and may be removed in a future version. See the attribute description in the output of the read-resource-description operation to learn more about the deprecation.
WFLYCTL0029 WARN Cannot delete temp file %s, will be deleted on exit
WFLYCTL0030 java.lang.String No resource definition is registered for address %s
WFLYCTL0031 java.lang.String No operation named '%s' exists at address %s
WFLYCTL0032 WARN There were problems during the transformation process for target host: '%s' %nProblems found: %n%s
WFLYCTL0033 INFO Extension '%s' is deprecated and may not be supported in future versions
WFLYCTL0034 INFO Subsystems %s provided by legacy extension '%s' are not supported on servers running this version. The extension is only supported for use by hosts running a previous release in a mixed-version managed domain. On this server the extension will not register any subsystems, and future attempts to create or address subsystem resources on this server will result in failure.
WFLYCTL0035 ERROR Update of the management operation audit log failed
WFLYCTL0036 ERROR [%d] consecutive management operation audit logging failures have occurred; disabling audit logging
WFLYCTL0037 ERROR Update of the management operation audit log failed in handler '%s'
WFLYCTL0038 ERROR [%d] consecutive management operation audit logging failures have occurred in handler '%s'; disabling this handler for audit logging
WFLYCTL0039 javax.xml.stream.XMLStreamException %s already defined
WFLYCTL0041 javax.xml.stream.XMLStreamException A %s %s already declared has already been declared in %s %s
WFLYCTL0042 javax.xml.stream.XMLStreamException A %s or a %s %s already declared has already been declared in %s %s
WFLYCTL0043 java.lang.IllegalArgumentException An %s named '%s' is already registered at location '%s'
WFLYCTL0044 java.lang.IllegalStateException Ambiguous configuration file name '%s' as there are multiple files in %s that end in %s
WFLYCTL0045 java.lang.IllegalArgumentException Ambiguous name '%s' in %s: %s
WFLYCTL0048 java.lang.String Attribute %s is not writable
WFLYCTL0050 java.lang.RuntimeException Unable to determine a default name based on the local host name
WFLYCTL0051 java.lang.IllegalStateException Could not create %s
WFLYCTL0052 java.lang.IllegalStateException Could not delete %s
WFLYCTL0053 java.lang.IllegalArgumentException Cannot register submodels with a null PathElement
WFLYCTL0055 org.jboss.as.controller._private.OperationFailedRuntimeException Cannot remove %s
WFLYCTL0056 ERROR Could not rename %s to %s
WFLYCTL0057 java.lang.IllegalArgumentException Cannot write to %s
WFLYCTL0058 javax.xml.stream.XMLStreamException Child %s of element %s already declared
WFLYCTL0059 java.lang.RuntimeException Could not get canonical file for boot file: %s
WFLYCTL0060 java.lang.IllegalStateException Could not get canonical file for main file: %s
WFLYCTL0062 java.lang.String Composite operation failed and was rolled back. Steps that failed:
WFLYCTL0063 java.lang.String Composite operation was rolled back
WFLYCTL0064 java.lang.IllegalArgumentException Configuration files whose complete name is %s are not allowed
WFLYCTL0065 java.lang.IllegalStateException No configuration file ending in %s found in %s
WFLYCTL0066 java.lang.IllegalArgumentException No directory %s was found
WFLYCTL0067 javax.xml.stream.XMLStreamException Either a %s or %s domain controller configuration must be declared.
WFLYCTL0068 javax.xml.stream.XMLStreamException An attribute named '%s' has already been declared
WFLYCTL0069 javax.xml.stream.XMLStreamException Duplicate %s declaration
WFLYCTL0070 javax.xml.stream.XMLStreamException Duplicate %s declaration %s
WFLYCTL0071 org.jboss.as.controller._private.OperationFailedRuntimeException Duplicate path element '%s' found
WFLYCTL0072 javax.xml.stream.XMLStreamException Duplicate interface declaration
WFLYCTL0073 javax.xml.stream.XMLStreamException An element of this type named '%s' has already been declared
WFLYCTL0075 java.lang.IllegalStateException Duplicate resource %s
WFLYCTL0076 java.lang.IllegalStateException Duplicate resource type %s
WFLYCTL0079 java.lang.RuntimeException Failed initializing module %s
WFLYCTL0080 java.lang.String Failed services
WFLYCTL0081 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to back up %s
WFLYCTL0082 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to create backup copies of configuration file %s
WFLYCTL0083 javax.xml.stream.XMLStreamException Failed to load module
WFLYCTL0084 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to marshal configuration
WFLYCTL0085 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to parse configuration
WFLYCTL0086 java.lang.String Failed to persist configuration change: %s
WFLYCTL0088 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to take a snapshot of %s to %s
WFLYCTL0089 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to write configuration
WFLYCTL0090 java.lang.IllegalArgumentException %s does not exist
WFLYCTL0091 java.lang.IllegalArgumentException No files beginning with '%s' found in %s
WFLYCTL0092 java.lang.IllegalStateException %s cannot be used except in a full server boot
WFLYCTL0094 java.lang.String Illegal interface criteria type %s; must be %s
WFLYCTL0095 java.lang.String Illegal value %s for interface criteria %s; must be %s
WFLYCTL0096 java.lang.UnsupportedOperationException Resource is immutable
WFLYCTL0097 org.jboss.as.controller.OperationFailedException Wrong type for '%s'. Expected %s but was %s
WFLYCTL0099 java.lang.String %s is invalid
WFLYCTL0100 javax.xml.stream.XMLStreamException %d is not a valid %s
WFLYCTL0101 java.lang.String Invalid address %s (%s)
WFLYCTL0102 java.lang.String Invalid 'value' %s -- must be of the form address/mask
WFLYCTL0103 java.lang.String Invalid mask %s (%s)
WFLYCTL0104 java.lang.String Invalid address %s (%s)
WFLYCTL0105 java.lang.String %s is invalid in combination with %s
WFLYCTL0106 javax.xml.stream.XMLStreamException Invalid value '%s' for attribute '%s'
WFLYCTL0109 java.lang.String Invalid pattern %s for interface criteria %s
WFLYCTL0110 java.lang.String Invalid resource address element '%s'. The key '%s' is not valid for an element in a resource address.
WFLYCTL0111 java.lang.IllegalArgumentException Load factor must be greater than 0 and less than or equal to 1
WFLYCTL0112 java.lang.String '%s' is an invalid value for parameter %s. Values must have a maximum length of %d characters
WFLYCTL0113 java.lang.String '%s' is an invalid value for parameter %s. Values must have a minimum length of %d characters
WFLYCTL0114 java.lang.String [%d] is an invalid size for parameter %s. A maximum length of [%d] is required
WFLYCTL0115 java.lang.String [%d] is an invalid size for parameter %s. A minimum length of [%d] is required
WFLYCTL0116 java.lang.String %d is an invalid value for parameter %s. A maximum value of %d is required
WFLYCTL0117 java.lang.String %d is an invalid value for parameter %s. A minimum value of %d is required
WFLYCTL0118 java.lang.IllegalStateException Invalid modification after completed step
WFLYCTL0119 org.jboss.as.controller.OperationFailedException Value %s for attribute %s is not a valid multicast address
WFLYCTL0120 javax.xml.stream.XMLStreamException An outbound socket binding: %s cannot have both %s as well as a %s at the same time
WFLYCTL0121 java.lang.IllegalArgumentException %s is not a valid value for parameter %s -- must be one of %s
WFLYCTL0122 javax.xml.stream.XMLStreamException Value %s for attribute %s does not represent a properly hex-encoded SHA1 hash
WFLYCTL0123 java.lang.IllegalStateException Stage %s is not valid for context process type %s
WFLYCTL0124 java.lang.IllegalArgumentException Invalid step stage specified
WFLYCTL0126 java.lang.IllegalArgumentException Can not have a negative size table!
WFLYCTL0127 java.lang.String Invalid type %s
WFLYCTL0128 java.lang.String Invalid resource address element '%s'. The value '%s' is not valid for an element in a resource address. Character '%s' is not allowed.
WFLYCTL0129 java.lang.String Invalid value %s for %s; legal values are %s
WFLYCTL0132 javax.xml.stream.XMLStreamException Must include one of the following elements: %s
WFLYCTL0133 javax.xml.stream.XMLStreamException Missing required attribute(s): %s
WFLYCTL0134 javax.xml.stream.XMLStreamException Missing required element(s): %s
WFLYCTL0135 javax.xml.stream.XMLStreamException Interrupted awaiting loading of module %s
WFLYCTL0136 java.lang.RuntimeException Interrupted awaiting initialization of module %s
WFLYCTL0137 java.lang.IllegalStateException Model contains multiple %s nodes
WFLYCTL0138 java.lang.String Namespace with prefix %s already registered with schema URI %s
WFLYCTL0139 java.lang.String No namespace with URI %s found
WFLYCTL0140 java.lang.String Nested %s not allowed
WFLYCTL0144 java.lang.IllegalStateException No active step
WFLYCTL0147 org.jboss.as.controller._private.OperationFailedRuntimeException No child type %s
WFLYCTL0149 java.lang.String No interface criteria was provided
WFLYCTL0150 java.lang.String No operation handler
WFLYCTL0152 java.lang.IllegalStateException %s is not a directory
WFLYCTL0153 java.lang.IllegalStateException No %s%s found for %s
WFLYCTL0154 java.lang.IllegalStateException Cannot execute asynchronous operation without an executor
WFLYCTL0155 org.jboss.as.controller.OperationFailedException '%s' may not be null
WFLYCTL0157 java.lang.IllegalStateException Operation already complete
WFLYCTL0158 java.lang.String Operation handler failed: %s
WFLYCTL0160 java.lang.String Operation rolling back
WFLYCTL0161 java.lang.String Operation succeeded, committing
WFLYCTL0162 java.lang.String There is no operation %s registered at address %s
WFLYCTL0165 org.jboss.msc.service.StartException No configuration persister was injected
WFLYCTL0169 java.lang.IllegalArgumentException A proxy handler is already registered at location '%s'
WFLYCTL0171 java.lang.String Removing services has lead to unsatisfied dependencies:
WFLYCTL0172 org.jboss.as.controller.OperationFailedException %s is required
WFLYCTL0173 javax.xml.stream.XMLStreamException %s is reserved
WFLYCTL0175 org.jboss.as.controller._private.OperationFailedRuntimeException Resource %s does not exist; a resource at address %s cannot be created until all ancestor resources have been added
WFLYCTL0176 java.lang.IllegalStateException rollback() has already been invoked
WFLYCTL0177 java.lang.String Schema with URI %s already registered with location %s
WFLYCTL0178 java.lang.String No schema location with URI %s found
WFLYCTL0179 java.util.concurrent.CancellationException Service install was cancelled
WFLYCTL0180 java.lang.String Services with missing/unavailable dependencies
WFLYCTL0181 java.lang.IllegalStateException Get service registry only supported in runtime operations
WFLYCTL0182 java.lang.IllegalStateException Service removal only supported in runtime operations
WFLYCTL0183 java.lang.String Service status report%n
WFLYCTL0184 java.lang.String New missing/unsatisfied dependencies:%n
WFLYCTL0185 java.lang.String Newly corrected services:%n
WFLYCTL0186 java.lang.String Services which failed to start:
WFLYCTL0187 java.lang.IllegalStateException Get service target only supported in runtime operations
WFLYCTL0188 java.lang.IllegalStateException Stage %s is already complete
WFLYCTL0190 java.lang.String Step handler %s for operation %s at address %s failed -- %s
WFLYCTL0191 java.lang.String Interrupted awaiting subsystem boot operation execution
WFLYCTL0192 java.lang.String Boot operations for subsystem %s failed without explanation
WFLYCTL0193 java.lang.String Failed executing subsystem %s boot operations
WFLYCTL0194 java.lang.IllegalStateException Table is full!
WFLYCTL0195 java.lang.RuntimeException Interrupted awaiting transaction commit or rollback
WFLYCTL0197 javax.xml.stream.XMLStreamException Unexpected attribute '%s' encountered
WFLYCTL0198 javax.xml.stream.XMLStreamException Unexpected element '%s' encountered
WFLYCTL0199 javax.xml.stream.XMLStreamException Unexpected end of element '%s' encountered
WFLYCTL0201 java.lang.String Unknown attribute '%s'
WFLYCTL0202 java.lang.String No known child type named %s
WFLYCTL0203 java.lang.RuntimeException Unknown property in interface criteria list: %s
WFLYCTL0204 java.lang.String Unknown interface criteria type %s
WFLYCTL0205 javax.xml.stream.XMLStreamException Unknown interface %s %s must be declared in element %s
WFLYCTL0206 javax.xml.stream.XMLStreamException Unknown %s %s %s must be declared in element %s
WFLYCTL0207 java.lang.String Validation failed for %s
WFLYCTL0208 java.lang.String ... and %s more
WFLYCTL0209 javax.xml.stream.XMLStreamException Invalid value '%s' for attribute '%s' -- valid values are %s
WFLYCTL0210 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Caught SecurityException attempting to resolve expression '%s' -- %s
WFLYCTL0211 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Cannot resolve expression '%s'
WFLYCTL0212 org.jboss.as.controller._private.OperationFailedRuntimeException Duplicate resource %s
WFLYCTL0214 java.lang.IllegalStateException Could not load configuration file: %s. The configuration file argument must specify the path to a file located in the configuration directory. The path must be a relative path, and must be relative to the configuration directory %s.
WFLYCTL0215 java.lang.IllegalStateException Could not load configuration file: %s. The configuration file argument must specify one of the following: 1) an absolute path to an existing file; 2) a relative path to an existing file, relative to the current working directory; or 3) a relative path to a file located in the configuration directory. In the latter case, it must be a path relative to the configuration directory %s.
WFLYCTL0216 org.jboss.as.controller.registry.Resource$NoSuchResourceException Management resource '%s' not found
WFLYCTL0217 java.lang.String Child resource '%s' not found
WFLYCTL0218 java.lang.IllegalArgumentException A node is already registered at '%s'
WFLYCTL0219 java.lang.IllegalStateException An attempt was made to unregister extension %s which still has subsystem %s registered
WFLYCTL0220 java.lang.IllegalStateException An override model registration is not allowed for the root model registration
WFLYCTL0221 java.lang.IllegalStateException An override model registration is not allowed for non-wildcard model registrations. This registration is for the non-wildcard name '%s'.
WFLYCTL0222 java.lang.IllegalArgumentException A registration named '*' is not an override model and cannot be unregistered via the unregisterOverrideModel API.
WFLYCTL0223 java.lang.IllegalStateException The root resource registration does not support overrides, so no override can be removed.
WFLYCTL0224 java.lang.IllegalArgumentException There is no operation %s registered at address %s
WFLYCTL0225 java.lang.RuntimeException Failed to recover services during operation rollback
WFLYCTL0226 java.lang.IllegalStateException A subsystem named '%s' cannot be registered by extension '%s' -- a subsystem with that name has already been registered by extension '%s'.
WFLYCTL0227 java.lang.IllegalArgumentException Operation has no '%s' field. %s
WFLYCTL0228 java.lang.IllegalArgumentException Operation has a null or empty name. %s
WFLYCTL0229 java.lang.IllegalArgumentException No operation called '%s' at '%s'. %s
WFLYCTL0230 java.lang.IllegalArgumentException Operation contains a parameter '%s' which is not one of the expected parameters %s. %s
WFLYCTL0231 java.lang.IllegalArgumentException Required parameter %s is not present. %s
WFLYCTL0232 java.lang.IllegalArgumentException Alternative parameter '%s' for required parameter '%s' was used. Please use one or the other. %s
WFLYCTL0233 java.lang.IllegalArgumentException Could not convert the parameter '%s' to a %s. %s
WFLYCTL0234 java.lang.IllegalArgumentException The value '%s' passed in for '%s' is smaller than the minimum value '%s'. %s
WFLYCTL0235 java.lang.IllegalArgumentException The value '%s' passed in for '%s' is bigger than the maximum value '%s'. %s
WFLYCTL0236 java.lang.IllegalArgumentException The value '%s' passed in for '%s' is shorter than the minimum length '%s'. %s
WFLYCTL0237 java.lang.IllegalArgumentException The value '%s' passed in for '%s' is longer than the maximum length '%s'. %s
WFLYCTL0238 java.lang.IllegalArgumentException %s is expected to be a list of %s. %s
WFLYCTL0239 java.lang.String 'required' parameter: '%s' must be a boolean in the description of the operation at %s: %s
WFLYCTL0240 java.lang.String Undefined request property '%s' in description of the operation at %s: %s
WFLYCTL0241 java.lang.String There is no type for parameter '%s' in the description of the operation at %s: %s
WFLYCTL0242 java.lang.String Could not determine the type of parameter '%s' in the description of the operation at %s: %s
WFLYCTL0243 java.lang.String The '%s' attribute of the '%s' parameter can not be converted to its type: %s in the description of the operation at %s: %s
WFLYCTL0244 java.lang.String The '%s' attribute of the '%s' parameter can not be converted to an integer in the description of the operation at %s: %s
WFLYCTL0245 javax.xml.stream.XMLStreamException Illegal '%s' value %s -- must be a valid port number
WFLYCTL0246 java.lang.RuntimeException Cannot resolve the localhost address to create a UUID-based name for this process
WFLYCTL0247 java.lang.IllegalStateException Do not call ServiceController.setMode(REMOVE), use OperationContext.removeService() instead.
WFLYCTL0248 org.jboss.as.controller.OperationFailedException Invalid value %s for %s; legal values are %s
WFLYCTL0249 org.jboss.as.controller._private.OperationFailedRuntimeException Operation '%s' targeted at resource '%s' was directly invoked by a user. User operations are not permitted to directly update the persistent configuration of a server in a managed domain.
WFLYCTL0250 java.lang.IllegalStateException An operation handler attempted to access the operation response server results object on a process type other than '%s'. The current process type is '%s'
WFLYCTL0251 java.lang.String Can't have both loopback and inet-address criteria
WFLYCTL0253 java.lang.String Can't have same criteria for both not and inclusion %s
WFLYCTL0254 org.jboss.as.controller.OperationFailedException Invalid value '%s' for attribute '%s' -- no interface configuration with that name exists
WFLYCTL0256 java.lang.IllegalArgumentException Could not find a path called '%s'
WFLYCTL0257 java.lang.IllegalArgumentException Path entry is read-only: '%s'
WFLYCTL0258 java.lang.IllegalArgumentException There is already a path entry called: '%s'
WFLYCTL0260 java.lang.IllegalArgumentException Invalid relativePath value '%s'
WFLYCTL0261 java.lang.IllegalArgumentException '%s' is a Windows absolute path
WFLYCTL0262 org.jboss.as.controller.OperationFailedException Path '%s' is read-only; it cannot be removed
WFLYCTL0263 org.jboss.as.controller.OperationFailedException Path '%s' is read-only; it cannot be modified
WFLYCTL0264 org.jboss.as.controller.OperationFailedException %s may not be ModelType.EXPRESSION
WFLYCTL0265 java.lang.IllegalStateException PathManager not available on processes of type '%s'
WFLYCTL0266 org.jboss.as.controller.OperationFailedException Value %s for attribute %s is not a valid multicast address
WFLYCTL0267 org.jboss.as.controller.OperationFailedException Path '%s' cannot be removed, since the following paths depend on it: %s
WFLYCTL0268 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to rename temp file %s to %s
WFLYCTL0269 java.lang.String Invalid locale format: %s
WFLYCTL0271 java.lang.String Operation cancelled
WFLYCTL0272 org.jboss.as.controller._private.OperationCancellationException Operation cancelled asynchronously
WFLYCTL0273 java.io.IOException Stream was killed
WFLYCTL0274 java.io.IOException Stream was closed
WFLYCTL0275 org.jboss.as.controller.OperationFailedException Cannot define both '%s' and '%s'
WFLYCTL0276 java.lang.IllegalStateException Failed to delete file %s
WFLYCTL0277 java.lang.IllegalArgumentException An alias is already registered at location '%s'
WFLYCTL0279 java.lang.IllegalArgumentException Alias target address not found: %s
WFLYCTL0280 java.lang.IllegalArgumentException No operation called '%s' found for alias address '%s' which maps to '%s'
WFLYCTL0281 java.lang.IllegalStateException Resource registration is not an alias
WFLYCTL0282 java.lang.RuntimeException Model contains fields that are not known in definition, fields: %s, path: %s
WFLYCTL0283 java.lang.UnsupportedOperationException Could not marshal attribute as element: %s
WFLYCTL0284 java.lang.UnsupportedOperationException Could not marshal attribute as attribute: %s
WFLYCTL0285 java.lang.String Operation %s invoked against multiple target addresses failed at address %s with failure description %s
WFLYCTL0286 java.lang.String Operation %s invoked against multiple target addresses failed at address %s. See the operation result for details.
WFLYCTL0287 java.lang.String Operation %s invoked against multiple target addresses failed at addresses %s. See the operation result for details.
WFLYCTL0288 java.lang.String One or more services were unable to start due to one or more indirect dependencies not being available.
WFLYCTL0289 java.lang.String No operation entry called '%s' registered at '%s'
WFLYCTL0290 java.lang.String No operation handler called '%s' registered at '%s'
WFLYCTL0291 java.lang.IllegalStateException There is no registered path to resolve with path attribute '%s' and/or relative-to attribute '%s on: %s
WFLYCTL0292 java.lang.String Attributes do not support expressions in the target model version and this resource will need to be ignored on the target host.
WFLYCTL0293 java.lang.String Attributes are not understood in the target model version and this resource will need to be ignored on the target host.
WFLYCTL0294 java.lang.String Transforming resource %s to core model version '%s' -- %s %s
WFLYCTL0295 java.lang.String Transforming operation %s at resource %s to core model version '%s' -- %s %s
WFLYCTL0296 java.lang.String Transforming resource %s to subsystem '%s' model version '%s' -- %s %s
WFLYCTL0297 java.lang.String Transforming operation %s at resource %s to subsystem '%s' model version '%s' -- %s %s
WFLYCTL0298 org.jboss.as.controller.OperationFailedException Node contains an unresolved expression %s -- a resolved model is required
WFLYCTL0299 org.jboss.as.controller.OperationFailedException Transforming resource %s for host controller '%s' to core model version '%s' -- there were problems with some of the attributes and this resource will need to be ignored on that host. Details of the problems: %s
WFLYCTL0300 org.jboss.as.controller.OperationFailedException Transforming resource %s for host controller '%s' to subsystem '%s' model version '%s' --there were problems with some of the attributes and this resource will need to be ignored on that host. Details of problems: %s
WFLYCTL0301 java.lang.String The following attributes do not support expressions: %s
WFLYCTL0302 java.lang.String The following attributes are not understood in the target model version and this resource will need to be ignored on the target host: %s
WFLYCTL0303 java.lang.String Resource %s is rejected on the target host, and will need to be ignored on the host
WFLYCTL0304 java.lang.String Operation %2$s at %1s is rejected on the target host and will need to be ignored on the host
WFLYCTL0305 javax.xml.stream.XMLStreamException Unless the Host Controller is started with command line option %s and the %s attribute is not set to %s, %s must be declared or the %s and the %s need to be provided.
WFLYCTL0306 java.lang.IllegalStateException read only context
WFLYCTL0307 java.lang.String We are trying to read data from the domain controller, which is currently busy executing another set of operations. This is a temporary situation, please retry
WFLYCTL0309 java.lang.String Legacy extension '%s' is not supported on servers running this version. The extension is only supported for use by hosts running a previous release in a mixed-version managed domain
WFLYCTL0310 org.jboss.as.controller._private.OperationFailedRuntimeException Extension module %s not found
WFLYCTL0311 java.lang.RuntimeException Failed to load Extension module %s
WFLYCTL0312 java.lang.IllegalStateException no context to delegate with id: %s
WFLYCTL0313 org.jboss.as.controller.UnauthorizedException Unauthorized to execute operation '%s' for resource '%s' -- %s
WFLYCTL0314 java.lang.SecurityException Users with multiple roles are not allowed
WFLYCTL0317 java.lang.IllegalStateException There is no handler called '%s'
WFLYCTL0318 org.jboss.as.controller.OperationFailedException The operation context is not an AbstractOperationContext
WFLYCTL0319 java.lang.IllegalStateException The handler is referenced by %s and so cannot be removed
WFLYCTL0320 java.lang.IllegalStateException The resolved file %s either does not exist or is a directory
WFLYCTL0321 java.lang.IllegalStateException Could not back up '%s' to '%s'
WFLYCTL0322 java.lang.IllegalStateException Attempt was made to both remove and add a handler from a composite operation - update the handler instead
WFLYCTL0323 java.lang.IllegalStateException Attempt was made to both add and remove a handler from a composite operation
WFLYCTL0324 java.lang.IllegalStateException Attempt was made to both update and remove a handler from a composite operation
WFLYCTL0325 java.lang.IllegalStateException Attempt was made to both remove and add a handler reference from a composite operation
WFLYCTL0327 org.jboss.as.controller.access.rbac.UnknowRoleException Unknown role '%s'
WFLYCTL0328 java.lang.IllegalStateException Cannot remove standard role '%s'
WFLYCTL0329 java.lang.IllegalArgumentException Unknown base role '%s'
WFLYCTL0330 java.lang.IllegalStateException Role '%s' is already registered
WFLYCTL0331 java.lang.IllegalStateException Can only create child audit logger for main audit logger
WFLYCTL0332 java.lang.String Permission denied
WFLYCTL0333 java.lang.SecurityException Cannot add a Permission to a readonly PermissionCollection
WFLYCTL0334 java.lang.IllegalArgumentException Incompatible permission type %s
WFLYCTL0335 java.lang.String Management resource '%s' not found
WFLYCTL0336 java.lang.String The following attributes are nillable in the current model but must be defined in the target model version: %s
WFLYCTL0337 java.io.IOException Unsupported Identity type '%X' received.
WFLYCTL0338 java.io.IOException Unsupported Identity parameter '%X' received parsing identity type '%X'.
WFLYCTL0339 java.lang.String The following attributes must be defined as %s in the current model: %s
WFLYCTL0340 java.lang.String The following attributes must NOT be defined as %s in the current model: %s
WFLYCTL0341 org.jboss.as.controller.OperationFailedException A uri with bad syntax '%s' was passed for validation.
WFLYCTL0342 org.jboss.as.controller.OperationFailedException Illegal value %d for operation header %s; value must be greater than zero
WFLYCTL0343 java.lang.String The service container has been destabilized by a previous operation and further runtime updates cannot be processed. Restart is required.
WFLYCTL0344 java.lang.String Operation timed out awaiting service container stability
WFLYCTL0345 java.lang.IllegalStateException Timeout after %d seconds waiting for existing service %s to be removed so a new instance can be installed.
WFLYCTL0346 ERROR Invalid value %s for property %s; must be a numeric value greater than zero. Default value of %d will be used.
WFLYCTL0347 DEBUG Timeout after [%d] seconds waiting for initial service container stability before allowing runtime changes for operation '%s' at address '%s'. Operation will roll back; process restart is required.
WFLYCTL0348 ERROR Timeout after [%d] seconds waiting for service container stability. Operation will roll back. Step that first updated the service container was '%s' at address '%s'
WFLYCTL0349 ERROR Timeout after [%d] seconds waiting for service container stability while finalizing an operation. Process must be restarted. Step that first updated the service container was '%s' at address '%s'
WFLYCTL0350 INFO Execution of operation '%s' on remote process at address '%s' interrupted while awaiting initial response; remote process has been notified to cancel operation
WFLYCTL0351 INFO Execution of operation '%s' on remote process at address '%s' interrupted while awaiting final response; remote process has been notified to terminate operation
WFLYCTL0352 INFO Cancelling operation '%s' with id '%d' running on thread '%s'
WFLYCTL0353 java.io.IOException No response handler for request %s
WFLYCTL0354 INFO Attempting reconnect to syslog handler '%s; after timeout of %d seconds
WFLYCTL0355 INFO Reconnecting to syslog handler '%s failed
WFLYCTL0356 WARN Failed to emit notification %s
WFLYCTL0357 java.lang.String Notification of type %s is not described for the resource at the address %s
WFLYCTL0358 java.lang.String The resource was added at the address %s.
WFLYCTL0359 java.lang.String The resource was removed at the address %s.
WFLYCTL0360 java.lang.String The attribute %s value has been changed from %s to %s.
WFLYCTL0361 java.lang.IllegalStateException Capabilities cannot be queried in stage '%s'; they are not available until stage '%s'.
WFLYCTL0362 java.lang.String Capabilities required by resource '%s' are not available:
WFLYCTL0363 java.lang.IllegalStateException Capability '%s' is already registered in context '%s'.
WFLYCTL0364 java.lang.IllegalStateException Capability '%s' is unknown.
WFLYCTL0365 java.lang.IllegalStateException Capability '%s' is unknown in context '%s'.
WFLYCTL0366 java.lang.IllegalArgumentException Capability '%s' does not expose a runtime API.
WFLYCTL0367 java.lang.String Cannot remove capability '%s' as it is required by other capabilities:
WFLYCTL0368 java.lang.String Cannot remove capability '%s' from context '%s' as it is required by other capabilities:
WFLYCTL0369 java.lang.String Required capabilities are not available:
WFLYCTL0370 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Incomplete expression: %s
WFLYCTL0371 javax.xml.stream.XMLStreamException The element '%s' is no longer supported, please use '%s' instead
WFLYCTL0372 java.lang.String List attribute '%s' contains duplicates, which are not allowed
WFLYCTL0373 java.lang.IllegalArgumentException Deployment resource must be runtime only
WFLYCTL0374 org.jboss.as.controller.OperationFailedException Unable to resolve expressions at this location.
WFLYCTL0375 WARN Update of the management operation audit log failed on the handler '%s' due to '%s'. Please make sure that the syslog server is running and reachable
WFLYCTL0376 javax.xml.stream.XMLStreamException Unexpected attribute '%s' encountered. Valid attributes are: '%s'
WFLYCTL0377 javax.xml.stream.XMLStreamException Unexpected element '%s' encountered. Valid elements are: '%s'
WFLYCTL0378 org.jboss.as.controller.OperationFailedException Attribute '%s' is not of type '%s', it is type '%s'
WFLYCTL0379 java.lang.String System boot is in process; execution of remote management operations is not currently available
WFLYCTL0380 org.jboss.as.controller.OperationFailedException Attribute '%s' needs to be set or passed before attribute '%s' can be correctly set
WFLYCTL0381 java.lang.IllegalArgumentException Illegal permission name '%s'
WFLYCTL0382 java.lang.IllegalArgumentException Illegal permission actions '%s'
WFLYCTL0383 java.lang.String No operation is defined %s
WFLYCTL0385 java.lang.IllegalStateException An attempt was made to register the non-host capable subsystem '%s' from extension module '%s' in the host model.
WFLYCTL0386 org.jboss.as.controller.OperationFailedException The host controller info can only be accessed after the model stage on boot
WFLYCTL0387 java.lang.IllegalArgumentException Illegal path address '%s' , it is not in a correct CLI format
WFLYCTL0388 java.lang.IllegalStateException Could not create empty configuration file %s
WFLYCTL0389 java.lang.IllegalStateException Could not create an empty configuration at file %s as there is an existing non-empty configuration there
WFLYCTL0391 org.jboss.as.controller.OperationFailedException Could not resolve attribute expression: '%s', invalid index '%d'
WFLYCTL0392 org.jboss.as.controller.OperationFailedException Could not resolve attribute expression: '%s', type is not a list
WFLYCTL0393 org.jboss.as.controller.OperationFailedException Could not resolve attribute expression: '%s'
WFLYCTL0394 java.lang.IllegalArgumentException Capability '%s' does not provide services of type '%s'
WFLYCTL0395 INFO Operation %s against the resource at address %s is deprecated, and it might be removed in future version. See the the output of the read-operation-description operation to learn more about the deprecation.
WFLYCTL0396 java.lang.String Resource %s is discarded on the target host %s
WFLYCTL0397 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYCTL0398 org.jboss.as.controller._private.OperationFailedRuntimeException An attempt was made to rename the resource found at %s to %s. However, '%s' is one of the resource types defined to be ordered on the parent resource %s
WFLYCTL0399 java.lang.String The capability '%s' required by capability '%s' in context '%s' is available in one or more socket binding groups, but not all socket binding capabilities required by '%s' can be resolved from a single socket binding group, so this configuration is invalid
WFLYCTL0400 ERROR Capability '%s' in context '%s' associated with resource '%s' requires capability '%s'. It is available in one or more socket binding groups, but not all socket binding capabilities required by '%s' can be resolved from a single socket binding group, so this configuration is invalid
WFLYCTL0401 java.lang.RuntimeException Couldn't build the report
WFLYCTL0402 ERROR Subsystems %s provided by legacy extension '%s' are not supported on servers running this version. Both the subsystem and the extension must be removed or migrated before the server will function.
WFLYCTL0403 ERROR Unexpected failure during execution of the following operation(s): %s
WFLYCTL0404 java.lang.String Unexpected exception during execution: %s
WFLYCTL0405 WARN Couldn't find a transformer to %s, falling back to %s
WFLYCTL0406 org.jboss.as.controller.OperationFailedException Could not convert the attribute '%s' to a %s
WFLYCTL0407 ERROR Failed sending completed response %s for %d
WFLYCTL0408 ERROR Failed sending failure response %s for %d
WFLYCTL0409 java.lang.String Execution of operation '%s' on remote process at address '%s' timed out after %d ms while awaiting initial response; remote process has been notified to terminate operation
WFLYCTL0410 INFO Execution of operation '%s' on remote process at address '%s' timed out after %d ms while awaiting final response; remote process has been notified to terminate operation
WFLYCTL0411 WARN Failed to parse element '%s', ignoring ...
WFLYCTL0412 java.lang.String Required services that are not installed:
WFLYCTL0413 org.jboss.as.controller.OperationFailedException The deprecated parameter %s has been set in addition to the current parameter %s but with different values
WFLYCTL0414 WARN Could not create a timestamped backup of current history dir %s, so it may still include versions from the previous boot.
WFLYCTL0415 java.lang.String Modification of the runtime service container by a management operation has begun
WFLYCTL0416 java.lang.String Modification of the runtime service container by a management operation has completed
WFLYCTL0417 org.jboss.as.controller.OperationFailedException Cannot add more than one jvm. Add of '%s' attempted, but '%s' already exists
WFLYCTL0418 org.jboss.as.controller._private.OperationFailedRuntimeException A %s or a %s %s already declared has already been declared in %s %s
WFLYCTL0419 java.lang.String '%s' is an invalid value for parameter %s. Values must have a maximum length of %d bytes
WFLYCTL0420 java.lang.String '%s' is an invalid value for parameter %s. Values must have a minimum length of %d bytes
WFLYCTL0421 java.lang.String Exploded deployment is not supported by some servers
WFLYCTL0422 java.lang.RuntimeException Could not load module '%s' for transformers
WFLYCTL0423 java.io.IOException Masked password command has the wrong format.%nUsage: MASK-;; where =UTF-8 characters, =reasonable sized positive integer
WFLYCTL0433 org.jboss.as.controller.OperationFailedException '%s' is not a valid representation of a resource address
WFLYCTL0434 java.lang.String Boot complete
WFLYCTL0435 java.lang.RuntimeException Attribute %s of resource %s was not marked as reload required, either set the RESTART_ALL_SERVICES flag, or register a custom write handler.
WFLYCTL0436 org.jboss.as.controller._private.OperationFailedRuntimeException Cannot register capability '%s' at location '%s' as it is already registered in context '%s' at location(s) '%s'
WFLYCTL0437 javax.xml.stream.XMLStreamException Duplicate extension: an %s element with %s attribute value '%s' has already been parsed
WFLYCTL0438 java.lang.String Couldn't convert '%s' into proper warning level, threshold falling back to 'ALL'. Possible values: SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST,ALL,OFF
WFLYCTL0439 org.jboss.as.controller.OperationFailedException Value %s for attribute %s is not a valid subnet format
WFLYCTL0440 WARN Cannot delete file or directory %s
WFLYCTL0441 java.lang.String Operation has resulted in failed or missing services %n
WFLYCTL0442 WARN Error stopping server
WFLYCTL0443 WARN Error getting the password from the supplier %s
WFLYCTL0444 INFO The handler for operation '%s' at address '%s' attempted to add a stage %s step. This is not valid for a 'profile' resource on process type %s so this step will not be executed.
WFLYCTL0445 org.jboss.as.controller.OperationFailedException %s with value '%s' in attribute %s is already defined
WFLYCTL0446 org.jboss.as.controller.OperationFailedException %s or alternative(s) %s is required
WFLYCTL0447 WARN Attribute '%s' in the resource at address '%s' has been configured with an expression, but support for use of expressions in this attribute's value may be removed in a future version. This attribute configures whether a capability that can be required by other parts of the configuration is present or itself configures a requirement for a capability provided by another part of the configuration. Full support for this kind of configuration cannot be provided when an expression is used.
WFLYCTL0448 java.lang.String %s additional services are down due to their dependencies being missing or failed
WFLYCTL0449 java.lang.String Operation %s against the resource at address %s is deprecated, and it might be removed in future version. See the the output of the read-operation-description operation to learn more about the deprecation.
WFLYCTL0450 java.lang.RuntimeException Failed to clone the repository %s
WFLYCTL0451 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to publish configuration to %s because of %s
WFLYCTL0452 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to persist configuration to %s because of %s
WFLYCTL0453 ERROR Failed to delete configuration snapshot %s
WFLYCTL0454 ERROR Failed to list configuration snapshots %s
WFLYCTL0455 org.jboss.as.controller.persistence.ConfigurationPersistenceException Can't take snapshot %s because it already exists
WFLYCTL0456 WARN System property "%s" is already set in the section of the configuration file. The value set in the command line will be overridden by that value.
WFLYCTL0457 org.jboss.as.controller.OperationFailedException Invalid HTTP Header name '%s'
WFLYCTL0458 org.jboss.as.controller.OperationFailedException Disallowed HTTP Header name '%s'
WFLYCTL0459 ERROR Triggering roll back due to missing management services.
WFLYCTL0460 java.lang.IllegalStateException The system property '%s' can only be used with a standalone or embedded server
WFLYCTL0461 java.lang.IllegalStateException The system property '%s' can only be used with an admin-only server
WFLYCTL0462 java.lang.IllegalStateException Could not find the directory '%s' specified by the system property '%s'. Please make sure it exists
WFLYCTL0463 java.lang.IllegalStateException More than one instance of AdditionalBootCliScriptInvoker found. Have: '%s'; found: '%s
WFLYCTL0464 java.lang.IllegalStateException If using %s=true, when you use -D%s you need to set -D%s
WFLYCTL0465 INFO Initialised the additional boot CLI script functionality. The CLI commands will be read from %s. The server will remain running in admin-only mode after these have been executed, and the result of the cli operations will be written to %s
WFLYCTL0466 INFO Initialised the additional boot CLI script functionality. The CLI commands will be read from %s. The server will be rebooted to normal mode after these have been executed
WFLYCTL0467 INFO Running the additional commands from the CLI script %s against the server which is running in admin-only mode
WFLYCTL0468 INFO Completed running the commands from the CLI script
WFLYCTL0469 INFO Restarting the server since the additional commands from the CLI script requires a restart. This will record that the restart has been initiated in the marker file %s since the restart mechanism will preserve all properties pertaining to the additional boot CLI script functionality (%s, %s, %s). The restart maintains the admin-only running mode, so a subsequent reload will happen
WFLYCTL0470 INFO Reloading the server to normal mode after execution of the additional commands from the CLI script. This will clear the properties triggering the additional boot cli script functionality if they were set (%s, %s, %s), and delete the marker file indicating the server was restarted
WFLYCTL0471 INFO Reloading the server to normal mode after restart follwoing execution of the additional commands from the CLI script. This will clear the properties triggering the additional boot cli script functionality if they were set (%s, %s, %s)
WFLYCTL0472 INFO Checking for presence of marker file indicating that the server has been restarted following execution of the additional commands from the CLI script
WFLYCTL0473 INFO Marker file indicating that the server has been restarted following execution of the additional commands from the CLI script found at %s
WFLYCTL0474 INFO No marker file found indicating that the server has been restarted following execution of the additional commands from the CLI script
WFLYCTL0475 org.jboss.as.controller.OperationFailedException Value for attribute '%s' is invalid.
WFLYCTL0476 org.jboss.as.controller.OperationFailedException Value for attribute '%s' is invalid: either '%s' must be specified on its own or '%s' needs to be specified with at least one of '%s' or '%s'
WFLYCTL0477 java.lang.IllegalArgumentException Parameter name '%s' is invalid.
WFLYCTL0478 org.jboss.as.controller.OperationFailedException Unable to create command based CredentialSource for credential reference.
WFLYCTL0479 java.lang.String Attribute '%s' at resource '%s' with unresolved value '%s' cannot be resolved using the non-security-sensitive sources resolution supported by the 'resolve' parameter. Response will report the unresolved value.
WFLYCTL0480 java.lang.String Expression '%s' cannot be resolved using the non-security-sensitive sources resolution supported by the '%s' operation. Response will report the unresolved value.
WFLYCTL0481 WARN The runtime dependency package '%s' is already registered at location '%s'
WFLYCTL0482 org.jboss.as.controller.OperationFailedException Value '%s' is not a legal charset name
WFLYCTL0483 org.jboss.as.controller.OperationFailedException Charset '%s' is not supported in this instance of the Java Virtual Machine
WFLYCTL0484 java.lang.IllegalArgumentException Attribute definition of attribute '%s' is null
WFLYCTL0485 java.lang.IllegalArgumentException Error parsing yaml file %s
WFLYCTL0486 java.lang.IllegalArgumentException Missing yaml file %s
WFLYCTL0487 DEBUG It took %s ms to load and parse the yaml files
WFLYCTL0488 WARN No registration found for address %s - Ignoring the subtree
WFLYCTL0489 java.lang.IllegalArgumentException Can't undefine attribute %s since there is no resource at %s
WFLYCTL0490 WARN You have defined a resource for address %s without any attributes, doing nothing
WFLYCTL0491 WARN We have an unexpected value %s for address %s and name %s
WFLYCTL0492 WARN Couldn't find a resource registration for address %s with current registration %s
WFLYCTL0493 java.lang.UnsupportedOperationException The attribute %s hasn't a valueType properly defined.
WFLYCTL0494 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionServerException Resolution of extension expression '%s' is not allowed at this point.
WFLYCTL0495 INFO "fetch-from-master" is a deprecated value for "domain-controller.remote.admin-only-policy", "fetch-from-domain-controller" will be used instead.
WFLYCTL0496 WARN Thread dump: ******************************************************************************* {0} =============================================================================== End Thread dump *******************************************************************************
WFLYCTL0497 WARN Deadlock detected! ******************************************************************************* {0} =============================================================================== End Deadlock *******************************************************************************
WFLYCTL0498 WARN Exception thrown during generation of thread dump
WFLYCTL0499 java.lang.IllegalStateException There is no satisfactory capability '%s' available to resources with capability scope '%s'. This capability is registered at address(es) '%s', and are not accessible to resources with scope '%s'.
WFLYCTL0500 WARN There is no UUID string at '%s'. A new value will be generated.
WFLYCTL0501 WARN An invalid UUID string '%s' was found at '%s'. A new value will be generated.
WFLYCTL0502 java.lang.IllegalArgumentException No child resource called %s could be found at address %s'.
WFLYCTL0503 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to publish configuration, because the remote name %s is not valid.

WFLYDC

Code Level Return Type Message
WFLYDC0001 WARN Ignoring 'include' child of 'socket-binding-group' %s
WFLYDC0002 WARN Ignoring 'include' child of 'profile' %s
WFLYDC0003 INFO Interrupted awaiting final response from server %s on host %s; remote process has been notified to cancel operation
WFLYDC0004 WARN Caught exception awaiting final response from server %s on host %s
WFLYDC0005 INFO Interrupted awaiting final response from host %s; remote process has been notified to cancel operation
WFLYDC0006 WARN Caught exception awaiting final response from host %s
WFLYDC0007 WARN Caught exception closing input stream
WFLYDC0008 INFO Domain model has changed on re-connect. The following servers will need to be restarted for changes to take affect: %s
WFLYDC0009 ERROR %s caught %s waiting for task %s. Cancelling task
WFLYDC0011 ERROR No deployment content with hash %s is available in the deployment content repository for deployment %s. Because this Host Controller is booting in ADMIN-ONLY mode, boot will be allowed to proceed to provide administrators an opportunity to correct this problem. If this Host Controller were not in ADMIN-ONLY mode this would be a fatal boot failure.
WFLYDC0012 WARN failed to set server (%s) into a restart required state
WFLYDC0013 java.lang.String Registration of remote hosts is not supported on secondary host controllers
WFLYDC0014 java.lang.String The primary host controller cannot register secondary host controllers as its current running mode is '%s'
WFLYDC0015 java.lang.String There is already a registered host named '%s'
WFLYDC0016 java.lang.String %s is missing %s: %s
WFLYDC0017 java.lang.String %s recognizes only %s as children: %s
WFLYDC0018 java.lang.String in-series is missing groups: %s
WFLYDC0019 java.lang.String server-group expects one and only one child: %s
WFLYDC0020 java.lang.String One of the groups does not define neither server-group nor concurrent-groups: %s
WFLYDC0021 java.lang.String Unexplained failure
WFLYDC0022 java.lang.String Operation failed or was rolled back on all servers.
WFLYDC0023 java.lang.String Interrupted waiting for result from server %s
WFLYDC0024 java.lang.String Exception getting result from server %s: %s
WFLYDC0025 java.lang.String Invalid rollout plan. %s is not a valid child of node %s
WFLYDC0026 java.lang.String Invalid rollout plan. Plan operations affect server groups %s that are not reflected in the rollout plan
WFLYDC0027 java.lang.String Invalid rollout plan. Server group %s appears more than once in the plan.
WFLYDC0028 java.lang.String Invalid rollout plan. Server group %s has a %s value of %s; must be between 0 and 100.
WFLYDC0029 java.lang.String Invalid rollout plan. Server group %s has a %s value of %s; cannot be less than 0.
WFLYDC0030 java.lang.String Interrupted waiting for result from host %s
WFLYDC0032 java.lang.String Operation %s for address %s can only be handled by the Domain Controller; this host is not the Domain Controller
WFLYDC0033 org.jboss.as.controller.OperationFailedException Operation targets host %s but that host is not registered
WFLYDC0034 org.jboss.as.controller.OperationFailedException Caught %s storing deployment content -- %s
WFLYDC0035 java.lang.IllegalStateException Unexpected initial path key %s
WFLYDC0036 java.lang.String Null stream at index %d
WFLYDC0037 java.lang.String Invalid byte stream.
WFLYDC0038 java.lang.String Invalid url stream.
WFLYDC0039 java.lang.String Only 1 piece of content is currently supported (AS7-431)
WFLYDC0040 java.lang.String No deployment content with hash %s is available in the deployment content repository.
WFLYDC0041 java.lang.String A secondary Host Controller cannot accept deployment content uploads
WFLYDC0042 java.lang.String No deployment with name %s found
WFLYDC0043 java.lang.String Cannot remove deployment %s from the domain as it is still used by server groups %s
WFLYDC0044 java.lang.String Invalid '%s' value: %d, the maximum index is %d
WFLYDC0045 java.lang.String %s is not a valid URL -- %s
WFLYDC0046 java.lang.String Error obtaining input stream from URL %s -- %s
WFLYDC0047 java.lang.String Invalid content declaration
WFLYDC0049 java.lang.String Cannot use %s with the same value for parameters %s and %s. Use %s to redeploy the same content or %s to replace content with a new version with the same name.
WFLYDC0050 java.lang.String Deployment %s is already started
WFLYDC0051 java.lang.String Unknown %s %s
WFLYDC0052 java.lang.IllegalStateException Unknown server group %s
WFLYDC0053 java.lang.IllegalStateException Unknown server %s
WFLYDC0054 java.lang.IllegalArgumentException Invalid code %d
WFLYDC0055 java.lang.IllegalStateException Repository does not contain any deployment with hash %s
WFLYDC0056 java.lang.IllegalStateException Expected only one deployment, found %d
WFLYDC0057 org.jboss.as.controller.OperationFailedException No profile called: %s
WFLYDC0058 java.lang.String No deployment content with hash %s is available in the deployment content repository for deployment '%s'. This is a fatal boot error. To correct the problem, either restart with the --admin-only switch set and use the CLI to install the missing content or remove it from the configuration, or remove the deployment from the xml configuraiton file and restart.
WFLYDC0059 org.jboss.as.controller.OperationFailedException Failed to load module '%s'.
WFLYDC0060 java.lang.String Invalid Jakarta Server Faces slot value: '%s'. The host controller is not able to use a Jakarta Server Faces slot value different from its default. This resource will be ignored on that host
WFLYDC0061 java.lang.String Operation '%s' fails because the attributes are not known from the subsytem '%s' model version '%s': %s
WFLYDC0062 org.jboss.as.controller.OperationFailedException No socket-binding-group named: %s
WFLYDC0063 org.jboss.as.controller.OperationFailedException There is already a deployment called %s with the same runtime name %s on server group %s
WFLYDC0064 org.jboss.as.controller.OperationFailedException Cannot remove server-group '%s' since it's still in use by servers %s
WFLYDC0065 org.jboss.as.controller.OperationFailedException Wildcard operations are not supported as part of composite operations
WFLYDC0066 java.lang.String Failed to send message: %s
WFLYDC0067 java.lang.String Failed to send response header: %s
WFLYDC0068 java.lang.String Host registration task got interrupted
WFLYDC0069 java.lang.String Host registration task failed: %s
WFLYDC0070 INFO %s interrupted awaiting server prepared response(s) -- cancelling updates for servers %s
WFLYDC0071 INFO Interrupted awaiting host prepared response(s) -- cancelling updates for hosts %s
WFLYDC0072 org.jboss.as.controller.OperationFailedException Caught IOException reading uploaded deployment content
WFLYDC0073 WARN %s deployment has been re-deployed, its content will not be removed. You will need to restart it.
WFLYDC0074 java.lang.String Operation failed or was rolled back on all servers. Server failures:
WFLYDC0075 org.jboss.as.controller.OperationFailedException Cannot synchronize the model due to missing extensions: %s
WFLYDC0076 javax.xml.stream.XMLStreamException Duplicate included profile '%s'
WFLYDC0077 javax.xml.stream.XMLStreamException Duplicate included socket binding group '%s'
WFLYDC0078 java.lang.String The profile clone operation is not available on the host '%s'. To be able to use it in a domain containing older secondary hosts which do not support the profile clone operation, you need to either: a) Make sure that all older secondary hosts with a model version smaller than 4.0.0 ignore the cloned profile and the profile specified in the 'to-profile' parameter. b) Reload the domain controller into admin-only mode, perform the clone, then reload the domain controller into normal mode again, and check whether the secondary hosts need reloading.
WFLYDC0079 INFO Timed out after %d ms awaiting host prepared response(s) from hosts %s -- cancelling updates for hosts %s
WFLYDC0080 java.lang.String Timed out after %d ms awaiting host prepared response(s) -- remote host %s has been notified to cancel operation
WFLYDC0081 INFO Timed out after %d ms awaiting final response from host %s; remote process has been notified to cancel operation
WFLYDC0082 INFO %s timed out after %d ms awaiting server prepared response(s) -- cancelling updates for servers %s
WFLYDC0083 INFO Timed out after %d ms awaiting final response from server %s on host %s; remote process has been notified to cancel operation
WFLYDC0084 org.jboss.as.controller.OperationFailedException Cannot explode a deployment in a self-contained server
WFLYDC0085 org.jboss.as.controller.OperationFailedException Cannot explode an unmanaged deployment
WFLYDC0086 org.jboss.as.controller.OperationFailedException Cannot explode an already exploded deployment
WFLYDC0087 org.jboss.as.controller.OperationFailedException Cannot explode an already deployed deployment
WFLYDC0088 org.jboss.as.controller.OperationFailedException Cannot add content to a deployment in a self-contained server
WFLYDC0089 org.jboss.as.controller.OperationFailedException Cannot add content to an unmanaged deployment
WFLYDC0090 org.jboss.as.controller.OperationFailedException Cannot add content to an unexploded deployment
WFLYDC0091 org.jboss.as.controller.OperationFailedException Cannot remove content from a deployment in a self-contained server
WFLYDC0092 org.jboss.as.controller.OperationFailedException Cannot remove content from an unmanaged deployment
WFLYDC0093 org.jboss.as.controller.OperationFailedException Cannot remove content from an unexploded deployment
WFLYDC0094 org.jboss.as.controller.OperationFailedException Cannot read content from a deployment in a self-contained server
WFLYDC0095 org.jboss.as.controller.OperationFailedException Cannot read content from an unmanaged deployment
WFLYDC0096 org.jboss.as.controller.OperationFailedException Cannot read content from an unexploded deployment
WFLYDC0097 org.jboss.as.controller.OperationFailedException Cannot explode a subdeployment of an unexploded deployment
WFLYDC0098 org.jboss.as.controller.OperationFailedException The following servers %s are starting; execution of remote management operations is not currently available

WFLYDM

Code Level Return Type Message
WFLYDM0000 java.lang.String Enter the details of the new user to add.
WFLYDM0000 java.lang.String Realm (%s)
WFLYDM0000 java.lang.String Username
WFLYDM0000 java.lang.String Username (%s)
WFLYDM0000 java.lang.String Password
WFLYDM0000 java.lang.String Re-enter Password
WFLYDM0000 java.lang.String About to add user '%s' for realm '%s'
WFLYDM0000 java.lang.String Is this correct
WFLYDM0000 java.lang.String The username '%s' is easy to guess
WFLYDM0000 java.lang.String Are you sure you want to add user '%s' yes/no?
WFLYDM0000 java.lang.String Added user '%s' to file '%s'
WFLYDM0000 java.lang.String Error
WFLYDM0000 java.lang.String yes/no?
WFLYDM0000 java.lang.String What type of user do you wish to add? %n a) Management User (mgmt-users.properties) %n b) Application User (application-users.properties)
WFLYDM0000 java.lang.String What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)
WFLYDM0000 java.lang.String Added user '%s' with groups %s to file '%s'
WFLYDM0000 java.lang.String User '%s' already exists and is enabled, would you like to... %n a) Update the existing user password and roles %n b) Disable the existing user %n c) Type a new username
WFLYDM0000 java.lang.String User '%s' already exists and is disabled, would you like to... %n a) Update the existing user password and roles %n b) Enable the existing user %n c) Type a new username
WFLYDM0000 java.lang.String Updated user '%s' to file '%s'
WFLYDM0000 java.lang.String Updated user '%s' with groups %s to file '%s'
WFLYDM0000 java.lang.String The password must be different from the username
WFLYDM0000 java.lang.String The password should be different from the username
WFLYDM0000 java.lang.String The password must not be one of the following restricted values {%s}
WFLYDM0000 java.lang.String The password should not be one of the following restricted values {%s}
WFLYDM0000 java.lang.String %s characters
WFLYDM0000 java.lang.String %d alphabetic character(s)
WFLYDM0000 java.lang.String %d digit(s)
WFLYDM0000 java.lang.String %s non-alphanumeric symbol(s)
WFLYDM0000 java.lang.String The password must contain at least %s
WFLYDM0000 java.lang.String The password should contain at least %s
WFLYDM0000 java.lang.String Are you sure you want to use the password entered yes/no?
WFLYDM0000 java.lang.String The add-user script is a utility for adding new users to the properties files for out-of-the-box authentication. It can be used to manage users in ManagementRealm and ApplicationRealm.
WFLYDM0000 java.lang.String Usage: ./add-user.sh [args...]%nwhere args include:
WFLYDM0000 java.lang.String If set add an application user instead of a management user
WFLYDM0000 java.lang.String Define the location of the domain config directory.
WFLYDM0000 java.lang.String Define the location of the server config directory.
WFLYDM0000 java.lang.String The file name of the user properties file which can be an absolute path.
WFLYDM0000 java.lang.String The file name of the group properties file which can be an absolute path. (If group properties is specified then user properties MUST also be specified).
WFLYDM0000 java.lang.String Password of the user, this will be checked against the password requirements defined within the add-user.properties configuration
WFLYDM0000 java.lang.String Name of the user
WFLYDM0000 java.lang.String Name of the realm used to secure the management interfaces (default is "ManagementRealm")
WFLYDM0000 java.lang.String Activate the silent mode (no output to the console)
WFLYDM0000 java.lang.String Comma-separated list of roles for the user.
WFLYDM0000 java.lang.String Comma-separated list of groups for the user.
WFLYDM0000 java.lang.String Enable the user
WFLYDM0000 java.lang.String Disable the user
WFLYDM0000 java.lang.String Automatically confirm warning in interactive mode
WFLYDM0000 java.lang.String Display this message and exit
WFLYDM0000 java.lang.String yes
WFLYDM0000 java.lang.String y
WFLYDM0000 java.lang.String no
WFLYDM0000 java.lang.String n
WFLYDM0000 java.lang.String The realm name supplied must match the name used by the server configuration which by default would be '%s'
WFLYDM0000 java.lang.String Are you sure you want to set the realm to '%s'
WFLYDM0000 java.lang.String Password requirements are listed below. To modify these restrictions edit the add-user.properties configuration file.
WFLYDM0000 java.lang.String Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
WFLYDM0000 java.lang.String Using realm '%s' as specified on the command line.
WFLYDM0000 java.lang.String Using realm '%s' as discovered from the existing property files.
WFLYDM0000 java.io.IOException Users properties file '%s' contains multiple realm name declarations
WFLYDM0000 java.lang.IllegalStateException The callback handler is not initialized for domain server %s.
WFLYDM0000 java.lang.IllegalStateException Unable to obtain credential for server %s
WFLYDM0001 WARN Properties file defined with default user and password, this will be easy to guess.
WFLYDM0017 org.jboss.msc.service.StartException Unable to load properties
WFLYDM0020 javax.naming.NamingException User '%s' not found in directory.
WFLYDM0021 java.lang.IllegalStateException No java.io.Console available to interact with user.
WFLYDM0023 java.lang.String No %s files found.
WFLYDM0024 java.lang.String No Username entered, exiting.
WFLYDM0025 java.lang.String No Password entered, exiting.
WFLYDM0026 java.lang.String The passwords do not match.
WFLYDM0028 java.lang.String Username must be alphanumeric with the exception of the following accepted symbols (%s)
WFLYDM0029 java.lang.String Invalid response. (Valid responses are %s and %s)
WFLYDM0030 java.lang.String Unable to add user to %s due to error %s
WFLYDM0031 java.lang.String Unable to add load users from %s due to error %s
WFLYDM0033 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple username/password based authentication mechanisms (%s). Only one is allowed
WFLYDM0034 org.jboss.as.controller.OperationFailedException One of '%s' or '%s' required.
WFLYDM0035 org.jboss.as.controller.OperationFailedException Only one of '%s' or '%s' is required.
WFLYDM0037 java.lang.String No security context has been established.
WFLYDM0039 java.lang.String Invalid response. (Valid responses are A, a, B, or b)
WFLYDM0040 java.lang.String Unable to update user to %s due to error %s
WFLYDM0041 java.io.IOException The user '%s' is not allowed in a local authentication.
WFLYDM0042 org.jboss.msc.service.StartException Multiple CallbackHandlerServices for the same mechanism (%s)
WFLYDM0043 java.lang.IllegalStateException No CallbackHandler available for mechanism %s in realm %s
WFLYDM0044 java.lang.IllegalArgumentException No plug in providers found for module name %s
WFLYDM0045 java.lang.IllegalArgumentException Unable to load plug-in for module %s due to error (%s)
WFLYDM0046 java.lang.IllegalArgumentException No authentication plug-in found for name %s
WFLYDM0047 java.lang.IllegalStateException Unable to initialise plug-in %s due to error %s
WFLYDM0048 java.lang.String Password is not strong enough, it is '%s'. It should be at least '%s'.
WFLYDM0049 org.jboss.as.domain.management.security.password.PasswordValidationException Password must not be equal to '%s', this value is restricted.
WFLYDM0050 java.lang.String Password must have at least %d digit.
WFLYDM0051 java.lang.String Password must have at least %s non-alphanumeric symbol.
WFLYDM0052 java.lang.String Password must have at least %d alphanumeric character.
WFLYDM0053 org.jboss.as.domain.management.security.password.PasswordValidationException Password must have at least %s characters!
WFLYDM0054 java.lang.IllegalStateException Unable to load key trust file.
WFLYDM0055 java.lang.IllegalStateException Unable to operate on trust store.
WFLYDM0056 java.lang.IllegalStateException Unable to create delegate trust manager.
WFLYDM0057 javax.xml.stream.XMLStreamException The syslog-handler can only contain one protocol %s
WFLYDM0058 java.lang.IllegalStateException There is no handler called '%s'
WFLYDM0059 org.jboss.as.controller.OperationFailedException There is already a protocol configured for the syslog handler at %s
WFLYDM0060 org.jboss.as.controller.OperationFailedException No syslog protocol was given
WFLYDM0061 org.jboss.as.controller.OperationFailedException There is no formatter called '%s'
WFLYDM0062 org.jboss.as.controller.OperationFailedException Can not remove formatter, it is still referenced by the handler '%s'
WFLYDM0063 org.jboss.as.controller.OperationFailedException Handler names must be unique. There is already a handler called '%s' at %s
WFLYDM0064 java.lang.String Different realm names detected '%s', '%s' reading user property files, all realms must be equal.
WFLYDM0065 java.lang.String The user supplied realm name '%s' does not match the realm name discovered from the property file(s) '%s'.
WFLYDM0066 java.lang.String A group properties file '%s' has been specified, however no user properties has been specified.
WFLYDM0067 java.lang.String A realm name must be specified.
WFLYDM0068 org.jboss.as.controller.OperationFailedException The current operation(s) would result in role based access control being enabled but leave it impossible for authenticated users to be assigned roles.
WFLYDM0069 org.jboss.as.controller.OperationFailedException The runtime role mapping configuration is inconsistent, the server must be restarted.
WFLYDM0070 java.lang.String Invalid response. (Valid responses are A, a, B, b, C or c)
WFLYDM0071 org.jboss.as.controller.OperationFailedException Role '%s' already contains an %s for type=%s, name=%s, realm=%s.
WFLYDM0072 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple authorization configurations (%s). Only one is allowed
WFLYDM0073 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple username-to-dn resources within the authorization=ldap resource (%s). Only one is allowed
WFLYDM0074 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' does not contain any group-search resource within the authorization=ldap resource.
WFLYDM0075 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple group-search resources within the authorization=ldap resource (%s). Only one is allowed
WFLYDM0076 org.jboss.as.controller.OperationFailedException The role name '%s' is not a valid standard role.
WFLYDM0077 org.jboss.as.controller.OperationFailedException The role name '%s' is not a valid standard role and is not a host scoped role or a server group scoped role.
WFLYDM0078 org.jboss.as.controller.OperationFailedException The scoped role '%s' can not be removed as a role mapping still exists.
WFLYDM0079 org.jboss.as.controller.OperationFailedException A %s already exists with name '%s'
WFLYDM0080 org.jboss.as.controller.OperationFailedException The name '%s' conflicts with the standard role name of '%s' - comparison is case insensitive.
WFLYDM0081 org.jboss.as.controller.OperationFailedException The base-role '%s' is not one of the standard roles for the current authorization provider.
WFLYDM0082 org.jboss.as.domain.management.security.password.PasswordValidationException The password must be different from the username
WFLYDM0083 org.jboss.msc.service.StartException The KeyStore %s does not contain any keys.
WFLYDM0084 org.jboss.msc.service.StartException The alias specified '%s' is not a Key, valid aliases are %s
WFLYDM0085 org.jboss.msc.service.StartException The alias specified '%s' does not exist in the KeyStore, valid aliases are %s
WFLYDM0086 org.jboss.msc.service.StartException The KeyStore can not be found at %s
WFLYDM0087 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple cache definitions at the same position in the hierarchy. Only one is allowed
WFLYDM0088 javax.naming.NamingException Unable to load username for supplied username '%s'
WFLYDM0089 org.jboss.as.controller.OperationFailedException No operation was found that has been holding the operation execution write lock for long than [%d] seconds
WFLYDM0090 org.jboss.msc.service.StartException Invalid Keytab path
WFLYDM0091 java.lang.IllegalStateException logout has already been called on this SubjectIdentity.
WFLYDM0092 org.jboss.as.controller.OperationFailedException Unable to obtain Kerberos TGT
WFLYDM0093 ERROR Login failed using Keytab for principal '%s' to handle request for host '%s'
WFLYDM0094 org.jboss.as.controller.OperationFailedException Kerberos is enabled for authentication on security realm '%s' but no Keytab has been added to the server-identity.
WFLYDM0095 org.jboss.msc.service.StartException No cipher suites in common, supported=(%s), requested=(%s)
WFLYDM0096 org.jboss.msc.service.StartException No protocols in common, supported=(%s), requested=(%s)
WFLYDM0097 org.jboss.as.domain.management.security.password.PasswordValidationException Password should not be equal to '%s', this value is restricted.
WFLYDM0098 org.jboss.as.domain.management.security.password.PasswordValidationException The password should be different from the username
WFLYDM0099 org.jboss.as.domain.management.security.password.PasswordValidationException Password should have at least %s characters!
WFLYDM0100 java.lang.String Password should have at least %d alphanumeric character.
WFLYDM0101 java.lang.String Password should have at least %d digit.
WFLYDM0102 java.lang.String Password should have at least %s non-alphanumeric symbol.
WFLYDM0103 org.jboss.as.controller.OperationFailedException Invalid size %s
WFLYDM0104 org.jboss.as.controller.OperationFailedException The suffix (%s) can not contain seconds or milliseconds.
WFLYDM0105 org.jboss.as.controller.OperationFailedException The suffix (%s) is invalid. A suffix must be a valid date format.
WFLYDM0106 java.lang.String File permissions problems found while attempting to update %s file.
WFLYDM0107 org.jboss.as.controller.OperationFailedException Operation '%s' has been holding the operation execution write lock for longer than [%d] seconds, but it is part of the rollout of a domain-wide operation with domain-uuid '%s' that has other operations that are alsonot progressing. Their ids are: %s. Cancellation of the operation on the domain controller is recommended.
WFLYDM0108 java.lang.IllegalStateException Unsupported resource '%s'
WFLYDM0109 org.jboss.msc.service.StartException The Keytab file '%s' does not exist.
WFLYDM0110 javax.naming.NamingException Unable to load a simple name for group '%s'
WFLYDM0111 WARN Keystore %s not found, it will be auto-generated on first use with a self-signed certificate for host %s
WFLYDM0112 java.lang.RuntimeException Failed to generate self-signed certificate
WFLYDM0113 WARN Generated self-signed certificate at %s. Please note that self-signed certificates are not secure, and should only be used for testing purposes. Do not use this self-signed certificate in production.%nSHA-1 fingerprint of the generated key is %s%nSHA-256 fingerprint of the generated key is %s
WFLYDM0114 java.lang.RuntimeException Failed to lazily initialize SSL context
WFLYDM0135 java.lang.String The resource %s wasn't working properly and has been removed.
WFLYDM0139 java.security.GeneralSecurityException No SubjectIdentity found for %s/%s.
WFLYDM0140 org.jboss.msc.service.StartException You shouldn't use the system property "%s" as it is deprecated. Use the management model configuration instead.
WFLYDM0142 org.jboss.msc.service.StartException Following mechanisms configured on the server (%s) are not supported by the realm '%s'.
WFLYDM0143 java.lang.IllegalStateException Invalid sensitive classification attribute '%s'
WFLYDM0144 org.jboss.as.controller.OperationFailedException Sensitivity constraint %s contains imcompatible attribute value to other sensitive classification constraints.
WFLYDM0145 javax.xml.stream.XMLStreamException Security realms are no longer supported, please remove them from the configuration.
WFLYDM0146 javax.xml.stream.XMLStreamException Outbound connections are no longer supported, please remove them from the configuration.

WFLYDMHTTP

Code Level Return Type Message
WFLYDMHTTP0001 ERROR Unexpected error executing model request
WFLYDMHTTP0002 ERROR Unexpected error executing deployment upload request
WFLYDMHTTP0003 WARN Unable to load console module for slot %s, disabling console
WFLYDMHTTP0004 ERROR Unable to load error context for slot %s, disabling error context.
WFLYDMHTTP0005 java.lang.IllegalArgumentException Invalid operation '%s'
WFLYDMHTTP0006 java.lang.String The security realm is not ready to process requests, see %s
WFLYDMHTTP0007 org.jboss.modules.ModuleNotFoundException No console module available with module name %s
WFLYDMHTTP0010 java.lang.IllegalArgumentException Invalid Credential Type '%s'
WFLYDMHTTP0011 INFO Management interface is using different addresses for HTTP (%s) and HTTPS (%s). Redirection of HTTPS requests from HTTP socket to HTTPS socket will not be supported.
WFLYDMHTTP0012 java.lang.IllegalArgumentException A secure socket has been defined for the HTTP interface, however the referenced security realm is not supplying a SSLContext.
WFLYDMHTTP0013 java.lang.String Invalid useStreamIndex value '%d'. The operation response had %d streams attached.
WFLYDMHTTP0014 java.lang.IllegalStateException The ManagementHttpServer has already been built using this Builder.
WFLYDMHTTP0015 java.lang.IllegalStateException No SecurityRealm or SSLContext has been provided.
WFLYDMHTTP0016 java.lang.String Your Application Server is running. However you have not yet added any users to be able to access the HTTP management interface. To add a new user execute the %s script within the bin folder of your WildFly installation and enter the requested information. By default the realm name used by WildFly is 'ManagementRealm' and this is already selected by default by the add-user tool.

WFLYDR

Code Level Return Type Message
WFLYDR0001 INFO Content added at location %s
WFLYDR0002 INFO Content removed from location %s
WFLYDR0003 WARN Cannot delete temp file %s, will be deleted on exit
WFLYDR0004 java.lang.IllegalStateException Cannot create directory %s
WFLYDR0005 java.lang.IllegalStateException Cannot obtain SHA-1 %s
WFLYDR0006 java.lang.IllegalStateException Directory %s is not writable
WFLYDR0007 java.lang.IllegalStateException %s is not a directory
WFLYDR0009 INFO Content %s is obsolete and will be removed
WFLYDR0010 ERROR Couldn't delete content %s
WFLYDR0011 INFO Couldn't list directory files for %s
WFLYDR0012 java.lang.RuntimeException Cannot hash current deployment content %s
WFLYDR0013 java.lang.IllegalArgumentException Access denied to the content at %s in the deployment
WFLYDR0014 ERROR Error deleting deployment %s
WFLYDR0015 java.lang.IllegalStateException %s is not an archive file
WFLYDR0016 org.jboss.as.repository.ExplodedContentException Achive file %s not found
WFLYDR0017 INFO Content exploded at location %s
WFLYDR0018 org.jboss.as.repository.ExplodedContentException Error exploding content for %s
WFLYDR0019 org.jboss.as.repository.ExplodedContentException Deployment is locked by another operation
WFLYDR0020 org.jboss.as.repository.ExplodedContentException Error accessing deployment files
WFLYDR0021 org.jboss.as.repository.ExplodedContentException Error updating content of exploded deployment
WFLYDR0022 org.jboss.as.repository.ExplodedContentException Error copying files of exploded deployment to %s
WFLYDR0023 ERROR Error deleting file %s
WFLYDR0024 ERROR Error copying file %s

WFLYDS

Code Level Return Type Message
WFLYDS0000 java.lang.String A previous version of this content was deployed and remains deployed.
WFLYDS0001 WARN Cannot delete deployment progress marker file %s
WFLYDS0002 WARN Cannot remove extraneous deployment marker file %s
WFLYDS0003 WARN Deployment of '%s' requested, but the deployment is not present
WFLYDS0004 INFO Found %1$s in deployment directory. To trigger deployment create a file called %1$s%2$s
WFLYDS0005 ERROR Caught exception writing deployment marker file %s
WFLYDS0006 WARN Reliable deployment behaviour is not possible when auto-deployment of exploded content is enabled (i.e. deployment without use of "%s"' marker files). Configuration of auto-deployment of exploded content is not recommended in any situation where reliability is desired. Configuring the deployment scanner's %s setting to "false" is recommended.
WFLYDS0007 WARN The deployment scanner found that the content for exploded deployment %1$s has been deleted, but auto-deploy/undeploy for exploded deployments is not enabled and the %1$s%2$s marker file for this deployment has not been removed. As a result, the deployment is not being undeployed, but resources needed by the deployment may have been deleted and application errors may occur. Deleting the %1$s%2$s marker file to trigger undeploy is recommended.
WFLYDS0008 ERROR Failed checking whether %s was a complete zip
WFLYDS0009 ERROR File system deployment service failed
WFLYDS0010 INFO Scan found incompletely copied file content for deployment %s. Deployment changes will not be processed until all content is complete.
WFLYDS0011 ERROR The deployment scanner found a directory named %1$s that was not inside a directory whose name ends with .ear, .jar, .rar, .sar or .war. This is likely the result of unzipping an archive directly inside the %2$s directory, which is a user error. The %1$s directory will not be scanned for deployments, but it is possible that the scanner may find other files from the unzipped archive and attempt to deploy them, leading to errors.
WFLYDS0012 ERROR Scan of %s threw Exception
WFLYDS0013 INFO Started %s for directory %s
WFLYDS0014 WARN Scan found content configured for auto-deploy that could not be safely auto-deployed. See details above. Deployment changes will not be processed until all problematic content is either removed or whether to deploy the content or not is indicated via a %s or %s marker file. Problematic deployments are %s
WFLYDS0015 INFO Re-attempting failed deployment %s
WFLYDS0016 ERROR Failed checking whether %s was a complete XML
WFLYDS0017 ERROR Initial deployment scan failed
WFLYDS0018 INFO Deployment %s was previously deployed by this scanner but has been undeployed by another management tool. Marker file %s is being added to record this fact.
WFLYDS0019 INFO Deployment %s was previously deployed by this scanner but has been removed from the server deployment list by another management tool. Marker file %s is being added to record this fact.
WFLYDS0021 java.lang.String Deployment content %s appears to be incomplete and is not progressing toward completion. This content cannot be auto-deployed.%s
WFLYDS0022 java.lang.String Did not receive a response to the deployment operation within the allowed timeout period [%d seconds]. Check the server configuration file and the server logs to find more about the status of the deployment.
WFLYDS0025 java.lang.String File %s cannot be scanned because it does not begin with a ZIP file format local file header signature
WFLYDS0026 java.lang.String File %s cannot be scanned because it uses the currently unsupported ZIP64 format
WFLYDS0030 java.lang.String File %2$s was configured for auto-deploy but could not be safely auto-deployed. The reason the file could not be auto-deployed was: %1$s. To enable deployment of this file create a file called %2$s%3$s
WFLYDS0031 java.lang.IllegalStateException Extension with module 'org.jboss.as.deployment-scanner' cannot be installed in a managed domain. Please remove it and any subsystem referencing it
WFLYDS0032 java.lang.RuntimeException Failed to list files in directory %s. Check that the contents of the directory are readable.
WFLYDS0033 INFO Deployment %s was previously undeployed by this scanner but has been redeployed by another management tool. Marker file %s is being removed to record this fact.
WFLYDS0034 ERROR Failed synchronizing status of deployment %s.
WFLYDS0035 java.lang.String Scan found %s which is not well-formed at lineNumber: %s, columnNumber: %s. Either the file was incompletely copied at the time of the scanning or it is just wrong.
WFLYDS0036 java.lang.RuntimeException Deployment model operation failed. %s
WFLYDS0037 WARN %s does not exist
WFLYDS0038 WARN %s is not a directory
WFLYDS0039 WARN %s is not writable
WFLYDS0040 org.jboss.as.controller.OperationFailedException Could not find relative-to path entry for %s
WFLYDS0041 WARN %s is not readable
WFLYDS0042 ERROR Boot-time scan failed due to inaccessible deployment directory: %s
WFLYDS0043 WARN Deployment directory scan failed due to inaccessible deployment directory: %s

WFLYEE

Code Level Return Type Message
WFLYEE0002 WARN Could not resolve %s %s
WFLYEE0006 WARN Failed to destroy component instance %s
WFLYEE0007 WARN Not installing optional component %s due to an exception (enable DEBUG log level to see the cause)
WFLYEE0009 WARN [Managed Bean spec, section %s] Managed bean implementation class MUST NOT be an interface - %s is an interface, hence won't be considered as a managed bean.
WFLYEE0010 WARN [Managed Bean spec, section %s] Managed bean implementation class MUST NOT be abstract or final - %s won't be considered as a managed bean, since it doesn't meet that requirement.
WFLYEE0011 WARN Exception while invoking pre-destroy interceptor for component class: %s
WFLYEE0014 WARN %s in subdeployment ignored. jboss-ejb-client.xml is only parsed for top level deployments.
WFLYEE0015 WARN Transaction started in EE Concurrent invocation left open, starting rollback to prevent leak.
WFLYEE0016 WARN Failed to rollback transaction.
WFLYEE0017 WARN Failed to suspend transaction.
WFLYEE0018 WARN System error while checking for transaction leak in EE Concurrent invocation.
WFLYEE0019 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find alternate deployment descriptor %s specified for %s
WFLYEE0020 java.lang.IllegalArgumentException %s annotations must provide a %s.
WFLYEE0021 java.lang.IllegalStateException Cannot add any more items once getSortedItems() has been called
WFLYEE0022 java.lang.RuntimeException %s may not be empty
WFLYEE0023 java.lang.IllegalArgumentException %s cannot be null or empty: %s
WFLYEE0024 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not configure component %s
WFLYEE0025 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type for resource-env-ref %s
WFLYEE0026 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type for %s %s please specify the %s.
WFLYEE0027 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load %s referenced in env-entry
WFLYEE0028 java.lang.RuntimeException Could not load interceptor class %s
WFLYEE0029 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load interceptor class %s on component %s
WFLYEE0030 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load view class %s for component %s
WFLYEE0031 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unable to process modules in application.xml for EAR [%s], module file %s not found
WFLYEE0032 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unable to parse resource-ref URI: %s
WFLYEE0033 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not resolve injection point %s on class %s specified in web.xml
WFLYEE0034 java.lang.RuntimeException Could not resolve method %s on class %s with annotations %s
WFLYEE0036 org.jboss.as.server.deployment.DeploymentUnitProcessingException Cannot specify both a %s and a %s in an environment entry.
WFLYEE0037 java.lang.IllegalArgumentException Circular dependency installing %s
WFLYEE0038 org.jboss.as.server.deployment.DeploymentUnitProcessingException %s annotation is only allowed on a class. %s is not a class.
WFLYEE0040 java.lang.IllegalArgumentException Component '%s' in class '%s' is already defined in class '%s'
WFLYEE0041 org.jboss.as.server.deployment.DeploymentUnitProcessingException Component class %s for component %s has errors: %n%s
WFLYEE0042 java.lang.IllegalStateException Failed to construct component instance
WFLYEE0043 org.jboss.as.ee.component.ComponentIsStoppedException Component is stopped
WFLYEE0044 java.lang.IllegalStateException Component not available (interrupted)
WFLYEE0045 org.jboss.as.server.deployment.DeploymentUnitProcessingException No component found for type '%s'
WFLYEE0046 java.lang.IllegalStateException Failed to instantiate component view
WFLYEE0047 java.lang.IllegalArgumentException Incompatible conflicting binding at %s source: %s
WFLYEE0048 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find default constructor for %s
WFLYEE0050 org.jboss.as.server.deployment.DeploymentUnitProcessingException No default constructor for interceptor class %s on component %s
WFLYEE0051 java.lang.IllegalArgumentException %s elements must provide a %s.
WFLYEE0052 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to install component %s
WFLYEE0053 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse %s
WFLYEE0054 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process children for EAR [%s]
WFLYEE0055 java.lang.String Failed to read %s entries for application [%s]
WFLYEE0056 java.lang.String Failed to read %s entries for module [%s, %s]
WFLYEE0057 java.lang.String Failed to read %s entries for component [%s, %s, %s]
WFLYEE0058 org.jboss.as.server.deployment.DeploymentUnitProcessingException No matching field found for '%s'
WFLYEE0059 java.lang.IllegalStateException No injection target found
WFLYEE0060 org.jboss.as.server.deployment.DeploymentUnitProcessingException %s of type java.lang.Character is not exactly one character long %s
WFLYEE0061 java.lang.RuntimeException %s is not a valid descriptor
WFLYEE0062 org.jboss.as.server.deployment.DeploymentUnitProcessingException Injection target %s on class %s is not compatible with the type of injection: %s
WFLYEE0063 java.lang.String Invalid number of arguments for method %s annotated with %s on class %s
WFLYEE0064 java.lang.IllegalArgumentException A return type of %s is required for method %s annotated with %s on class %s
WFLYEE0065 java.lang.String Invalid signature for method %s annotated with %s on class %s, signature must be '%s'
WFLYEE0066 javax.xml.stream.XMLStreamException Invalid value: %s for '%s' element
WFLYEE0067 java.lang.IllegalStateException Method does not exist %s
WFLYEE0068 org.jboss.as.server.deployment.DeploymentUnitProcessingException No matching method found for method %s (%s) on %s
WFLYEE0069 org.jboss.as.server.deployment.DeploymentUnitProcessingException @%s is only valid on method targets.
WFLYEE0070 org.jboss.as.server.deployment.DeploymentUnitProcessingException Multiple components found for type '%s'
WFLYEE0071 org.jboss.as.server.deployment.DeploymentUnitProcessingException More than one matching method found for method '%s (%s) on %s
WFLYEE0072 org.jboss.as.server.deployment.DeploymentUnitProcessingException Multiple setter methods for %s on class %s found when applying for env-entry
WFLYEE0073 java.lang.IllegalStateException No component instance associated
WFLYEE0074 org.jboss.as.server.deployment.DeploymentUnitProcessingException Binding name must not be null: %s
WFLYEE0075 java.lang.IllegalArgumentException Managed bean class name cannot be null or empty
WFLYEE0076 java.lang.IllegalArgumentException Resource reference type cannot be null or empty
WFLYEE0077 java.lang.IllegalArgumentException Cannot register a null resource reference processor
WFLYEE0078 java.lang.IllegalArgumentException %s is null
WFLYEE0079 java.lang.IllegalArgumentException Can't add %s, priority 0x%s is already taken by %s
WFLYEE0082 java.lang.IllegalStateException Service not started
WFLYEE0083 java.lang.IllegalArgumentException %s injection target is invalid. Only setter methods are allowed: %s
WFLYEE0084 java.lang.RuntimeException Unknown AnnotationTarget type: %s
WFLYEE0085 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unknown %s type %s
WFLYEE0086 java.lang.IllegalArgumentException Could not find method %s %s on view %s of %s
WFLYEE0088 javax.xml.stream.XMLStreamException Unexpected element '%s' encountered
WFLYEE0089 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process jboss-ejb-client.xml
WFLYEE0090 org.jboss.as.server.deployment.DeploymentUnitProcessingException Exception while parsing jboss-ejb-client.xml file found at %s
WFLYEE0091 javax.xml.stream.XMLStreamException %s
WFLYEE0092 java.lang.String No message destination with name %s for binding %s
WFLYEE0093 java.lang.String More than one message destination with name %s for binding %s destinations: %s
WFLYEE0094 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to load jboss.properties
WFLYEE0095 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unsupported ear module type: %s
WFLYEE0096 org.jboss.as.server.deployment.DeploymentUnitProcessingException library-directory of value / is not supported
WFLYEE0097 org.jboss.as.server.deployment.DeploymentUnitProcessingException Module may not be a child of the EAR's library directory. Library directory: %s, module file name: %s
WFLYEE0098 java.lang.RuntimeException ManagedReference was null and injection is not optional for injection into field %s
WFLYEE0100 java.lang.String Global modules may not specify 'annotations', 'meta-inf' or 'services'.
WFLYEE0102 java.lang.IllegalStateException EE Concurrent Service's value uninitialized.
WFLYEE0103 java.io.IOException EE Concurrent ContextHandle serialization must be handled by the factory.
WFLYEE0104 java.lang.IllegalArgumentException The EE Concurrent Context %s already has a factory named %s
WFLYEE0105 java.io.IOException EE Concurrent Context %s does not has a factory named %s
WFLYEE0106 java.io.IOException EE Concurrent Context %s service not installed.
WFLYEE0107 java.lang.IllegalStateException EE Concurrent Transaction Setup Provider service not installed.
WFLYEE0108 java.lang.IllegalStateException Instance data can only be set during construction
WFLYEE0109 org.jboss.as.server.deployment.DeploymentUnitProcessingException A class must not declare more than one AroundInvoke method. %s has %s methods annotated.
WFLYEE0110 ERROR Failed to run scheduled task: %s
WFLYEE0111 java.lang.IllegalStateException Cannot run scheduled task %s as container is suspended
WFLYEE0112 org.jboss.as.controller.OperationFailedException The core-threads value must be greater than 0 when the queue-length is %s
WFLYEE0113 org.jboss.as.controller.OperationFailedException The max-threads value %d cannot be less than the core-threads value %d.
WFLYEE0114 java.lang.IllegalArgumentException Class does not implement all of the provided interfaces
WFLYEE0115 java.lang.IllegalArgumentException The name of the %s is null
WFLYEE0116 java.lang.IllegalArgumentException %s is null in the %s %s
WFLYEE0117 java.lang.IllegalArgumentException Field %s cannot be set - object of %s loaded by %s is not assignable to %s loaded by %s
WFLYEE0120 org.jboss.as.controller.OperationFailedException Failed to locate executor service '%s'
WFLYEE0121 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYEE0122 org.jboss.msc.service.StartException Directory path %s in %s global-directory resource does not point to a valid directory.
WFLYEE0123 org.jboss.as.controller.OperationFailedException Global directory %s cannot be added, because global directory %s is already defined.
WFLYEE0124 WARN Error deleting Jakarta Authorization Policy
WFLYEE0125 org.jboss.msc.service.StartException Unable to start the %s service
WFLYEE0126 java.util.concurrent.RejectedExecutionException Rejected due to maximum number of requests
WFLYEE0127 WARN Invalid '%s' name segment for env, name can't start with '/' prefix, prefix has been removed
WFLYEE0128 WARN Failure when terminating %s hung task %s
WFLYEE0129 INFO %s hung task %s cancelled
WFLYEE0130 INFO %s hung task %s not cancelled
WFLYEE0131 javax.xml.stream.XMLStreamException The attribute %s is no longer supported.
WFLYEE0132 java.lang.RuntimeException ManagedReference was null and injection is not optional for injection into method %s
WFLYEE0133 ERROR A JNDI binding for component '%s' has already been installed under JNDI name '%s' in accordance with Jakarta EE specifications. The conflicting class is %s. Solutions include providing an alternate name for the component or renaming the class.
WFLYEE0134 java.lang.IllegalStateException Multiple uses of ContextServiceDefinition.ALL_REMAINING
WFLYEE0135 WARN Failed to resume transaction.
WFLYEE0136 java.lang.RuntimeException Failed to run scheduled task: %s

WFLYEJB

Code Level Return Type Message
WFLYEJB0004 ERROR failed to get tx manager status; ignoring
WFLYEJB0005 ERROR failed to set rollback only; ignoring
WFLYEJB0006 WARN ActivationConfigProperty %s will be ignored since it is not allowed by resource adapter: %s
WFLYEJB0007 ERROR Discarding stateful component instance: %s due to exception
WFLYEJB0010 WARN Default interceptor class %s is not listed in the section of ejb-jar.xml and will not be applied
WFLYEJB0015 WARN Unknown timezone id: %s found in schedule expression. Ignoring it and using server's timezone: %s
WFLYEJB0016 WARN Timer persistence is not enabled, persistent timers will not survive JVM restarts
WFLYEJB0017 INFO Next expiration is null. No tasks will be scheduled for timer %S
WFLYEJB0018 ERROR Ignoring exception during setRollbackOnly
WFLYEJB0020 ERROR Error invoking timeout for timer: %s
WFLYEJB0021 INFO Timer: %s will be retried
WFLYEJB0022 ERROR Error during retrying timeout for timer: %s
WFLYEJB0023 INFO Retrying timeout for timer: %s
WFLYEJB0024 INFO Timer is not active, skipping retry of timer: %s
WFLYEJB0026 WARN Could not read timer information for Jakarta Enterprise Beans component %s
WFLYEJB0028 ERROR %s is not a directory, could not restore timers
WFLYEJB0029 ERROR Could not restore timer from %s
WFLYEJB0030 ERROR error closing file
WFLYEJB0031 ERROR Could not restore timers for %s
WFLYEJB0032 ERROR Could not create directory %s to persist Jakarta Enterprise Beans timers.
WFLYEJB0034 ERROR Jakarta Enterprise Beans Invocation failed on component %s for method %s
WFLYEJB0035 WARN Could not find Jakarta Enterprise Beans for locator %s, Jakarta Enterprise Beans client proxy will not be replaced
WFLYEJB0036 WARN Jakarta Enterprise Beans %s is not being replaced with a Stub as it is not exposed over IIOP
WFLYEJB0037 ERROR Dynamic stub creation failed for class %s
WFLYEJB0042 INFO Started message driven bean '%s' with '%s' resource adapter
WFLYEJB0043 WARN A previous execution of timer %s is still in progress, skipping this overlapping scheduled execution at: %s.
WFLYEJB0044 java.lang.IllegalStateException Resource adapter repository is not available
WFLYEJB0045 java.lang.IllegalArgumentException Could not find an Endpoint for resource adapter %s
WFLYEJB0046 java.lang.IllegalStateException Endpoint is not available for message driven component %s
WFLYEJB0047 java.lang.RuntimeException Could not deactivate endpoint for message driven component %s
WFLYEJB0049 java.lang.RuntimeException Could not create an instance of cluster node selector %s for cluster %s
WFLYEJB0050 WARN Failed to parse property %s due to %s
WFLYEJB0051 java.lang.IllegalStateException Could not find view %s for Jakarta Enterprise Beans %s
WFLYEJB0052 java.lang.RuntimeException Cannot perform asynchronous local invocation for component that is not a session bean
WFLYEJB0053 java.lang.IllegalArgumentException %s is not a Stateful Session bean in app: %s module: %s distinct-name: %s
WFLYEJB0054 java.lang.RuntimeException Failed to marshal Jakarta Enterprise Beans parameters
WFLYEJB0055 jakarta.ejb.NoSuchEJBException No matching deployment for Jakarta Enterprise Beans: %s
WFLYEJB0056 jakarta.ejb.NoSuchEJBException Could not find Jakarta Enterprise Beans in matching deployment: %s
WFLYEJB0057 java.lang.IllegalArgumentException %s annotation is only valid on method targets
WFLYEJB0058 java.lang.IllegalArgumentException Method %s, on class %s, annotated with @jakarta.interceptor.AroundTimeout is expected to accept a single param of type jakarta.interceptor.InvocationContext
WFLYEJB0059 java.lang.IllegalArgumentException Method %s, on class %s, annotated with @jakarta.interceptor.AroundTimeout must return Object type
WFLYEJB0060 java.lang.IllegalStateException Wrong tx on thread: expected %s, actual %s
WFLYEJB0061 java.lang.IllegalStateException Unknown transaction attribute %s on invocation %s
WFLYEJB0062 jakarta.ejb.EJBTransactionRequiredException Transaction is required for invocation %s
WFLYEJB0063 jakarta.ejb.EJBException Transaction present on server in Never call (Enterprise Beans 3 13.6.2.6)
WFLYEJB0064 ERROR Failed to set transaction for rollback only
WFLYEJB0065 java.lang.IllegalArgumentException View interface cannot be null
WFLYEJB0068 java.lang.RuntimeException Could not load view class for component %s
WFLYEJB0073 jakarta.ejb.RemoveException Illegal call to EJBHome.remove(Object) on a session bean
WFLYEJB0074 java.lang.IllegalStateException Enterprise Beans 3.1 FR 13.6.2.8 setRollbackOnly is not allowed with SUPPORTS transaction attribute
WFLYEJB0075 jakarta.ejb.EJBException Cannot call getPrimaryKey on a session bean
WFLYEJB0076 java.lang.RuntimeException Singleton beans cannot have Enterprise Beans 2.x views
WFLYEJB0078 java.lang.IllegalStateException Bean %s does not have an EJBLocalObject
WFLYEJB0079 java.lang.IllegalArgumentException [Enterprise Beans 3.1 spec, section 14.1.1] Class: %s cannot be marked as an application exception because it is not of type java.lang.Exception
WFLYEJB0080 java.lang.IllegalArgumentException [Enterprise Beans 3.1 spec, section 14.1.1] Exception class: %s cannot be marked as an application exception because it is of type java.rmi.RemoteException
WFLYEJB0081 java.lang.RuntimeException %s annotation is allowed only on classes. %s is not a class
WFLYEJB0082 org.jboss.as.server.deployment.DeploymentUnitProcessingException Bean %s specifies @Remote annotation, but does not implement 1 interface
WFLYEJB0083 org.jboss.as.server.deployment.DeploymentUnitProcessingException Bean %s specifies @Local annotation, but does not implement 1 interface
WFLYEJB0084 java.lang.RuntimeException Could not analyze remote interface for %s
WFLYEJB0085 org.jboss.as.server.deployment.DeploymentUnitProcessingException Exception while parsing %s
WFLYEJB0086 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to install management resources for %s
WFLYEJB0087 java.lang.RuntimeException Could not load view %s
WFLYEJB0088 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type of ejb-ref %s for injection target %s
WFLYEJB0089 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type of ejb-local-ref %s for injection target %s
WFLYEJB0090 java.lang.IllegalArgumentException @EJB injection target %s is invalid. Only setter methods are allowed
WFLYEJB0091 org.jboss.as.server.deployment.DeploymentUnitProcessingException @EJB attribute 'name' is required for class level annotations. Class: %s
WFLYEJB0092 org.jboss.as.server.deployment.DeploymentUnitProcessingException @EJB attribute 'beanInterface' is required for class level annotations. Class: %s
WFLYEJB0093 java.lang.IllegalStateException Module hasn't been attached to deployment unit %s
WFLYEJB0094 org.jboss.as.server.deployment.DeploymentUnitProcessingException Enterprise Beans 3.1 FR 5.4.2 MessageDrivenBean %s does not implement 1 interface nor specifies message listener interface
WFLYEJB0095 java.lang.IllegalArgumentException Unknown session bean type %s
WFLYEJB0096 org.jboss.as.server.deployment.DeploymentUnitProcessingException More than one method found with name %s on %s
WFLYEJB0097 java.lang.RuntimeException Unknown Jakarta Enterprise Beans locator type %s
WFLYEJB0098 java.lang.RuntimeException Could not create CORBA object for %s
WFLYEJB0099 java.lang.IllegalArgumentException Provided locator %s was not for Jakarta Enterprise Beans %s
WFLYEJB0100 java.io.IOException Failed to lookup java:comp/ORB
WFLYEJB0101 java.io.IOException %s is not an ObjectImpl
WFLYEJB0102 jakarta.resource.spi.UnavailableException Message endpoint %s has already been released
WFLYEJB0107 java.lang.IllegalStateException Timer invocation failed, invoker is not started
WFLYEJB0109 java.lang.IllegalArgumentException Invalid value for second: %s
WFLYEJB0110 org.jboss.as.ejb3.tx.TimerTransactionRolledBackException Timer invocation failed, transaction rolled back
WFLYEJB0111 INFO No jndi bindings will be created for Jakarta Enterprise Beans %s since no views are exposed
WFLYEJB0118 WARN [Enterprise Beans 3.1 spec, section 4.9.2] Session bean implementation class MUST NOT be a interface - %s is an interface, hence won't be considered as a session bean
WFLYEJB0119 WARN [Enterprise Beans 3.1 spec, section 4.9.2] Session bean implementation class MUST be public, not abstract and not final - %s won't be considered as a session bean, since it doesn't meet that requirement
WFLYEJB0120 WARN [Enterprise Beans 3.1 spec, section 5.6.2] Message driven bean implementation class MUST NOT be a interface - %s is an interface, hence won't be considered as a message driven bean
WFLYEJB0121 WARN [Enterprise Beans 3.1 spec, section 5.6.2] Message driven bean implementation class MUST be public, not abstract and not final - %s won't be considered as a message driven bean, since it doesn't meet that requirement
WFLYEJB0125 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not create an instance of deployment node selector %s
WFLYEJB0127 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s of type %s must have public default constructor
WFLYEJB0128 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s of type %s must not be inner class
WFLYEJB0129 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s of type %s must be declared public
WFLYEJB0130 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s of type %s must not be declared final
WFLYEJB0131 WARN Jakarta Enterprise Beans %s should not have a final or static method (%s)
WFLYEJB0132 java.lang.IllegalStateException @PostConstruct method of Jakarta Enterprise Beans singleton %s of type %s has been recursively invoked
WFLYEJB0137 java.lang.IllegalStateException Only session and message-driven beans with bean-managed transaction demarcation are allowed to access UserTransaction
WFLYEJB0139 java.lang.String The timer service has been disabled. Please add a entry into the Jakarta Enterprise Beans section of the server configuration to enable it.
WFLYEJB0140 java.lang.String This Jakarta Enterprise Beans does not have any timeout methods
WFLYEJB0141 ERROR Exception calling deployment added listener
WFLYEJB0142 ERROR Exception calling deployment removal listener
WFLYEJB0143 ERROR Failed to remove management resources for %s -- %s
WFLYEJB0144 INFO CORBA interface repository for %s: %s
WFLYEJB0145 ERROR Cannot unregister EJBHome from CORBA naming service
WFLYEJB0146 ERROR Cannot deactivate home servant
WFLYEJB0147 ERROR Cannot deactivate bean servant
WFLYEJB0150 ERROR Could not write method invocation failure for method %s on bean named %s for appname %s modulename %s distinctname %s due to
WFLYEJB0151 ERROR Exception while generating session id for component %s with invocation %s
WFLYEJB0157 ERROR Failed to get status
WFLYEJB0158 ERROR Failed to rollback
WFLYEJB0159 ERROR BMT stateful bean '%s' did not complete user transaction properly status=%s
WFLYEJB0161 WARN Failed to reinstate timer '%s' (id=%s) from its persistent state
WFLYEJB0162 WARN A previous execution of timer %s is being retried, skipping this scheduled execution at: %s
WFLYEJB0163 ERROR Cannot create table for timer persistence
WFLYEJB0164 ERROR Exception running timer task for timer %s on Jakarta Enterprise Beans %s
WFLYEJB0166 WARN The @%s annotation is deprecated and will be ignored.
WFLYEJB0167 WARN The <%2$s xmlns="%1$s"/> element will be ignored.
WFLYEJB0168 jakarta.ejb.NoSuchEJBException Could not find Jakarta Enterprise Beans with id %s
WFLYEJB0169 java.lang.IllegalStateException Component not set in InterceptorContext: %s
WFLYEJB0170 java.lang.IllegalArgumentException Method name cannot be null
WFLYEJB0171 java.lang.IllegalStateException Bean %s does not have a Home interface
WFLYEJB0172 java.lang.IllegalStateException Bean %s does not have a Local Home interface
WFLYEJB0173 java.lang.IllegalStateException Enterprise Beans 3.1 FR 13.6.1 Only beans with container-managed transaction demarcation can use getRollbackOnly.
WFLYEJB0174 java.lang.IllegalStateException getRollbackOnly() not allowed without a transaction.
WFLYEJB0175 java.lang.IllegalStateException getRollbackOnly() not allowed after transaction is completed (EJBTHREE-1445)
WFLYEJB0177 java.lang.IllegalArgumentException jndi name cannot be null during lookup
WFLYEJB0178 java.lang.IllegalArgumentException No NamespaceContextSelector available, cannot lookup %s
WFLYEJB0179 java.lang.RuntimeException Could not lookup jndi name: %s
WFLYEJB0180 java.lang.IllegalArgumentException Cannot lookup jndi name: %s since it doesn't belong to java:app, java:module, java:comp or java:global namespace
WFLYEJB0181 java.lang.IllegalArgumentException Could not lookup jndi name: %s in context: %s
WFLYEJB0182 java.lang.IllegalStateException Enterprise Beans 3.1 FR 13.6.1 Only beans with container-managed transaction demarcation can use setRollbackOnly.
WFLYEJB0183 java.lang.IllegalStateException setRollbackOnly() not allowed without a transaction.
WFLYEJB0184 java.lang.IllegalArgumentException EjbJarConfiguration cannot be null
WFLYEJB0185 java.lang.IllegalArgumentException Cannot set security roles to null
WFLYEJB0193 java.lang.IllegalArgumentException Cannot link from a null or empty security role: %s
WFLYEJB0194 java.lang.IllegalArgumentException Cannot link to a null or empty security role: %s
WFLYEJB0195 org.jboss.as.server.deployment.DeploymentUnitProcessingException EjbJarConfiguration not found as an attachment in deployment unit: %s
WFLYEJB0196 java.lang.IllegalStateException ComponentViewInstance not available in interceptor context: %s
WFLYEJB0199 java.lang.IllegalStateException No resource adapter registered with resource adapter name %s
WFLYEJB0202 java.util.concurrent.TimeoutException Task did not complete in %s %S
WFLYEJB0203 java.util.concurrent.CancellationException Task was cancelled
WFLYEJB0206 java.lang.IllegalStateException Not implemented yet
WFLYEJB0213 java.lang.IllegalStateException Unexpected component: %s component Expected %s
WFLYEJB0214 java.lang.IllegalStateException EjbJarConfiguration hasn't been set in %s Cannot create component create service for Jakarta Enterprise Beans %S
WFLYEJB0218 java.lang.IllegalStateException PoolConfig cannot be null or empty
WFLYEJB0220 java.lang.IllegalStateException [Enterprise Beans 3.1 spec, section 4.9.7] - Can't add view class: %s as local view since it's already marked as remote view for bean: %s
WFLYEJB0221 java.lang.IllegalStateException Business interface type cannot be null
WFLYEJB0222 java.lang.IllegalStateException Bean %s does not have an %s
WFLYEJB0223 java.lang.IllegalStateException Jakarta Enterprise Beans 3.1 FR 13.6.2.9 getRollbackOnly is not allowed with SUPPORTS attribute
WFLYEJB0224 jakarta.ejb.EJBException Not a business method %s. Do not call non-public methods on Jakarta Enterprise Beans's
WFLYEJB0225 java.lang.Exception Component instance isn't available for invocation: %s
WFLYEJB0228 jakarta.ejb.ConcurrentAccessTimeoutException Enterprise Beans 3.1 FR 4.3.14.1 concurrent access timeout on %s - could not obtain lock within %s %s
WFLYEJB0234 java.lang.IllegalStateException Session id hasn't been set for stateful component: %s
WFLYEJB0235 java.lang.IllegalArgumentException @Remove method identifier cannot be null
WFLYEJB0236 java.lang.IllegalArgumentException Component %s with component class: %s%n isn't a %s component
WFLYEJB0237 java.lang.IllegalArgumentException both methodIntf and className are set on %s
WFLYEJB0238 jakarta.ejb.IllegalLoopbackException Enterprise Beans 3.1 PFD2 4.8.5.1.1 upgrading from read to write lock is not allowed
WFLYEJB0239 java.lang.IllegalArgumentException %s cannot be null
WFLYEJB0240 java.lang.IllegalArgumentException Invocation context: %s cannot be processed because it's not applicable for a method invocation
WFLYEJB0241 jakarta.ejb.ConcurrentAccessTimeoutException Enterprise Beans 3.1 PFD2 4.8.5.5.1 concurrent access timeout on %s - could not obtain lock within %s
WFLYEJB0242 java.lang.IllegalStateException Illegal lock type %s on %s for component %s
WFLYEJB0243 java.lang.IllegalStateException Cannot call %s, no %s is present for this invocation
WFLYEJB0244 java.lang.IllegalStateException No asynchronous invocation in progress
WFLYEJB0255 org.jboss.as.server.deployment.DeploymentUnitProcessingException cannot be null or empty in %nfor bean: %s
WFLYEJB0256 org.jboss.as.server.deployment.DeploymentUnitProcessingException Default interceptors cannot specify a method to bind to in ejb-jar.xml
WFLYEJB0258 org.jboss.as.server.deployment.DeploymentUnitProcessingException Two ejb-jar.xml bindings for %s specify an absolute order
WFLYEJB0259 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find method %s.%s referenced in ejb-jar.xml
WFLYEJB0260 org.jboss.as.server.deployment.DeploymentUnitProcessingException More than one method %s found on class %s referenced in ejb-jar.xml. Specify the parameter types to resolve the ambiguity
WFLYEJB0261 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find method %s.%s with parameter types %s referenced in ejb-jar.xml
WFLYEJB0262 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load component class for component %s
WFLYEJB0264 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not merge data for %s
WFLYEJB0265 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load Jakarta Enterprise Beans class %s
WFLYEJB0266 java.lang.RuntimeException Only one %s method is allowed on bean %s
WFLYEJB0267 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type of corresponding implied Enterprise Beans 2.x local interface (see Enterprise Beans 3.1 21.4.5)%n due to multiple create* methods with different return types on home %s
WFLYEJB0268 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find Jakarta Enterprise Beans %s referenced by @DependsOn annotation in %s
WFLYEJB0269 org.jboss.as.server.deployment.DeploymentUnitProcessingException More than one Jakarta Enterprise Beans called %s referenced by @DependsOn annotation in %s Components:%s
WFLYEJB0270 org.jboss.as.server.deployment.DeploymentUnitProcessingException Async method %s does not return void or Future
WFLYEJB0271 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load application exception class %s in ejb-jar.xml
WFLYEJB0272 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s entity bean %s implemented TimedObject, but has a different timeout method specified either via annotations or via the deployment descriptor
WFLYEJB0273 java.lang.RuntimeException %s does not have an Enterprise Beans 2.x local interface
WFLYEJB0274 org.jboss.as.server.deployment.DeploymentUnitProcessingException Local Home not allowed for %s
WFLYEJB0275 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not resolve corresponding ejbCreate or @Init method for home interface method %s on Jakarta Enterprise Beans %s
WFLYEJB0276 java.lang.IllegalStateException EJBComponent has not been set in the current invocation context %s
WFLYEJB0286 java.lang.IllegalArgumentException Invalid schedule %s value: %s
WFLYEJB0291 java.lang.IllegalArgumentException Invalid value: %s since %s doesn't support values of types %s
WFLYEJB0292 java.lang.IllegalArgumentException A list value can only contain either a range or an individual value. Invalid value: %s
WFLYEJB0294 java.lang.IllegalArgumentException Invalid value: %s Valid values are between %s and %s
WFLYEJB0303 java.lang.IllegalArgumentException Invoker cannot be null
WFLYEJB0305 java.lang.IllegalArgumentException Executor cannot be null
WFLYEJB0306 java.lang.IllegalArgumentException Invalid timer parameter: %s = %s
WFLYEJB0325 java.lang.IllegalStateException Cannot invoke timer service methods in lifecycle callback of non-singleton beans
WFLYEJB0326 java.lang.IllegalStateException Timer cannot be null
WFLYEJB0327 java.lang.IllegalStateException %s Timer handles are only available for persistent timers.
WFLYEJB0328 jakarta.ejb.NoMoreTimeoutsException No more timeouts for timer %s
WFLYEJB0329 java.lang.IllegalStateException Timer %s is not a calendar based timer
WFLYEJB0330 jakarta.ejb.NoSuchObjectLocalException Timer %s has expired
WFLYEJB0331 jakarta.ejb.NoSuchObjectLocalException Timer %s was canceled
WFLYEJB0338 jakarta.ejb.EJBException Timerservice with timedObjectId: %s is not registered
WFLYEJB0339 jakarta.ejb.NoSuchObjectLocalException Timer for handle with timer id: %s, timedObjectId: %s is not active
WFLYEJB0341 java.lang.IllegalStateException Cannot invoke getTimeoutMethod on a timer which is not an auto-timer
WFLYEJB0342 java.lang.RuntimeException Could not load declaring class: %s of timeout method
WFLYEJB0343 java.lang.RuntimeException Cannot invoke timeout method because method %s is not a timeout method
WFLYEJB0344 java.lang.RuntimeException Could not create timer file store directory %s
WFLYEJB0345 java.lang.RuntimeException Timer file store directory %s does not exist
WFLYEJB0346 java.lang.RuntimeException Timer file store directory %s is not a directory
WFLYEJB0347 java.lang.IllegalStateException Jakarta Enterprise Beans %s are enabled for security but doesn't have a security domain set
WFLYEJB0348 java.lang.IllegalArgumentException %s is not an Jakarta Enterprise Beans component
WFLYEJB0349 java.lang.RuntimeException Could not load view class for ejb %s
WFLYEJB0350 java.lang.IllegalArgumentException Component named %s with component class %s is not an Jakarta Enterprise Beans component
WFLYEJB0353 java.lang.UnsupportedOperationException ResourceBundle based descriptions of %s are not supported
WFLYEJB0354 java.lang.UnsupportedOperationException Runtime attribute %s is not marshallable
WFLYEJB0356 java.lang.IllegalStateException Jakarta Enterprise Beans component type %s does not support pools
WFLYEJB0357 java.lang.IllegalStateException Unknown Jakarta Enterprise Beans Component type %s
WFLYEJB0360 java.lang.IllegalArgumentException Jakarta Enterprise Beans method security metadata cannot be null
WFLYEJB0361 java.lang.IllegalArgumentException View classname cannot be null or empty
WFLYEJB0362 java.lang.IllegalArgumentException View method cannot be null
WFLYEJB0363 java.lang.IllegalStateException %s cannot handle method %s of view class %s.Expected view method to be %s on view class %s
WFLYEJB0364 jakarta.ejb.EJBAccessException Invocation on method: %s of bean: %s is not allowed
WFLYEJB0365 java.lang.IllegalArgumentException Unknown Jakarta Enterprise Beans Component description type %s
WFLYEJB0366 java.lang.IllegalStateException Unknown attribute %s
WFLYEJB0367 java.lang.IllegalStateException Unknown operation %s
WFLYEJB0368 java.lang.String No Jakarta Enterprise Beans component registered for address %s
WFLYEJB0369 java.lang.String No Jakarta Enterprise Beans component is available for address %s
WFLYEJB0370 java.lang.String Jakarta Enterprise Beans component for address %s is in %n state %s, must be in state %s
WFLYEJB0372 org.jboss.as.server.deployment.DeploymentUnitProcessingException Component class %s has multiple @Timeout annotations
WFLYEJB0373 java.lang.IllegalStateException Current component is not an Jakarta Enterprise Beans %s
WFLYEJB0374 java.lang.IllegalStateException %s not allowed in lifecycle methods
WFLYEJB0376 java.lang.IllegalStateException Cannot call %s when invoking through %s or %s
WFLYEJB0377 java.lang.IllegalStateException %s is not allowed from stateful beans
WFLYEJB0378 jakarta.ejb.EJBException Failed to acquire a permit within %s %s
WFLYEJB0379 jakarta.ejb.EJBException Acquire semaphore was interrupted
WFLYEJB0382 java.lang.RuntimeException Could not determine ClassLoader for stub %s
WFLYEJB0383 java.lang.IllegalStateException No message listener of type %s found in resource adapter %s
WFLYEJB0384 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find method %s from view %s on Jakarta Enterprise Beans class %s
WFLYEJB0385 java.lang.IllegalArgumentException %s cannot be null or empty
WFLYEJB0386 jakarta.ejb.RemoveException Jakarta Enterprise Beans 4.6.4 Cannot remove Jakarta Enterprise Beans via Enterprise Beans 2.x remove() method while participating in a transaction
WFLYEJB0387 java.rmi.RemoteException Transaction propagation over IIOP is not supported
WFLYEJB0388 java.lang.IllegalStateException Cannot call method %s in afterCompletion callback
WFLYEJB0389 java.lang.IllegalStateException Cannot call %s when state is %s
WFLYEJB0390 java.lang.IllegalStateException %s is already associated with serialization group %s
WFLYEJB0391 java.lang.IllegalStateException %s is not compatible with serialization group %s
WFLYEJB0392 java.lang.IllegalStateException Cache entry %s is in use
WFLYEJB0393 java.lang.IllegalStateException Cache entry %s is not in use
WFLYEJB0394 java.lang.RuntimeException Failed to acquire lock on %s
WFLYEJB0395 java.lang.IllegalStateException %s is already a member of serialization group %s
WFLYEJB0396 java.lang.IllegalStateException %s is not a member of serialization group %s
WFLYEJB0397 java.lang.IllegalStateException %s already exists in cache
WFLYEJB0398 java.lang.IllegalStateException %s is missing from cache
WFLYEJB0399 java.lang.IllegalStateException Incompatible cache implementations in nested hierarchy
WFLYEJB0400 java.lang.RuntimeException Failed to passivate %s
WFLYEJB0401 java.lang.RuntimeException Failed to activate %s
WFLYEJB0402 java.lang.RuntimeException Failed to create passivation directory: %s
WFLYEJB0403 java.lang.RuntimeException Failed to create passivation directory: %s
WFLYEJB0404 java.lang.IllegalStateException Group creation context already exists
WFLYEJB0405 java.lang.String No Jakarta Enterprise Beans found with interface of type '%s' and name '%s' for binding %s
WFLYEJB0406 java.lang.String No Jakarta Enterprise Beans found with interface of type '%s' for binding %s
WFLYEJB0407 java.lang.String More than one Jakarta Enterprise Beans found with interface of type '%s' and name '%s' for binding %s. Found: %s
WFLYEJB0408 java.lang.String More than one Jakarta Enterprise Beans found with interface of type '%s' for binding %s. Found: %s
WFLYEJB0409 org.jboss.as.server.deployment.DeploymentUnitProcessingException @Clustered annotation cannot be used with message driven beans. %s failed since %s bean is marked with @Clustered on class %s
WFLYEJB0410 org.jboss.as.server.deployment.DeploymentUnitProcessingException @Clustered annotation cannot be used with entity beans. %s failed since %s bean is marked with @Clustered on class %s
WFLYEJB0411 org.jboss.as.server.deployment.DeploymentUnitProcessingException @Clustered annotation is currently not supported for singleton Jakarta Enterprise Beans. %s failed since %s bean is marked with @Clustered on class %s
WFLYEJB0412 org.jboss.as.server.deployment.DeploymentUnitProcessingException %s failed since @Clustered annotation cannot be used for %s bean on class %s
WFLYEJB0413 org.jboss.as.server.deployment.DeploymentUnitProcessingException not specified for Jakarta Enterprise Beans %s. This must be present in ejb-jar.xml
WFLYEJB0414 org.jboss.as.server.deployment.DeploymentUnitProcessingException Default interceptors cannot specify an element in ejb-jar.xml
WFLYEJB0416 java.lang.IllegalArgumentException %s cannot be null
WFLYEJB0419 java.lang.IllegalArgumentException Pool name cannot be empty string for bean %s
WFLYEJB0420 java.lang.IllegalStateException No EjbContext available as no Jakarta Enterprise Beans invocation is active
WFLYEJB0421 org.jboss.as.ejb3.component.EJBComponentUnavailableException Invocation cannot proceed as component is shutting down
WFLYEJB0423 java.lang.RuntimeException Could not create session for stateful bean %s
WFLYEJB0436 java.lang.IllegalArgumentException Unknown channel creation option type %s
WFLYEJB0437 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine remote interface from home interface %s for bean %s
WFLYEJB0438 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine local interface from local home interface %s for bean %s
WFLYEJB0442 jakarta.ejb.EJBException Unexpected Error
WFLYEJB0443 java.lang.String Enterprise Beans 3.1 FR 13.3.3: BMT bean %s should complete transaction before returning.
WFLYEJB0445 java.lang.IllegalStateException Detected asymmetric usage of cache
WFLYEJB0446 java.lang.IllegalStateException The timer %s is already active.
WFLYEJB0447 jakarta.transaction.RollbackException Transaction '%s' was already rolled back
WFLYEJB0448 jakarta.ejb.EJBException Transaction '%s' is in unexpected state (%s)
WFLYEJB0449 java.lang.String Timerservice API is not allowed on stateful session bean %s
WFLYEJB0450 org.jboss.as.server.deployment.DeploymentUnitProcessingException Entity Beans are no longer supported, beans %s cannot be deployed
WFLYEJB0451 org.jboss.as.controller.OperationFailedException Attribute '%s' is not supported on current version servers; it is only allowed if its value matches '%s'
WFLYEJB0453 ERROR Failed to persist timer %s
WFLYEJB0454 org.jboss.as.server.deployment.DeploymentUnitProcessingException Only one instance on with an ejb-name of * can be present.
WFLYEJB0455 org.jboss.as.server.deployment.DeploymentUnitProcessingException elements that use the wildcard Jakarta Enterprise Beans name * can only use a method name of *
WFLYEJB0456 ERROR Failed to refresh timers for %s
WFLYEJB0457 jakarta.ejb.EJBTransactionRolledbackException Unexpected Error
WFLYEJB0459 org.jboss.as.server.deployment.DeploymentUnitProcessingException Module %s containing bean %s is not deployed in ear but it specifies resource adapter name '%s' in a relative format.
WFLYEJB0460 WARN The transaction isolation need to be equal or stricter than READ_COMMITTED to ensure that the timer run once-and-only-once
WFLYEJB0461 ERROR Update timer failed and it was not possible to rollback the transaction!
WFLYEJB0462 WARN Timer service database-data-store database attribute is not configured, and is not detected from connection metadata or JDBC driver name.
WFLYEJB0463 WARN Invalid transaction attribute type %s on SFSB lifecycle method %s of class %s, valid types are REQUIRES_NEW and NOT_SUPPORTED. Method will be treated as NOT_SUPPORTED.
WFLYEJB0464 org.jboss.as.controller.OperationFailedException The "disable-default-ejb-permissions" attribute may not be set to true
WFLYEJB0465 org.jboss.as.server.deployment.DeploymentUnitProcessingException Invalid client descriptor configuration: 'profile' and 'remoting-ejb-receivers' cannot be used together
WFLYEJB0466 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process business interfaces for Jakarta Enterprise Beans class %s
WFLYEJB0467 org.jboss.as.ejb3.component.EJBComponentUnavailableException The request was rejected as the container is suspended
WFLYEJB0468 org.jboss.as.controller.OperationFailedException Timer invocation failed
WFLYEJB0469 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYEJB0471 java.lang.RuntimeException RMI/IIOP Violation: %s%n
WFLYEJB0472 java.lang.RuntimeException Cannot obtain exception repository id for %s:%n%s
WFLYEJB0473 INFO JNDI bindings for session bean named '%s' in deployment unit '%s' are as follows:%s
WFLYEJB0474 ERROR Attribute '%s' is not supported on current version servers; it is only allowed if its value matches '%s'. This attribute should be removed.
WFLYEJB0475 INFO MDB delivery started: %s,%s
WFLYEJB0476 INFO MDB delivery stopped: %s,%s
WFLYEJB0477 org.jboss.as.server.deployment.DeploymentUnitProcessingException MDB delivery group is missing: %s
WFLYEJB0480 ERROR Loaded timer (%s) for Jakarta Enterprise Beans (%s) and this node that is marked as being in a timeout. The original timeout may not have been processed. Please use graceful shutdown to ensure timeout tasks are finished before shutting down.
WFLYEJB0481 INFO Strict pool %s is using a max instance size of %d (per class), which is derived from thread worker pool sizing.
WFLYEJB0482 INFO Strict pool %s is using a max instance size of %d (per class), which is derived from the number of CPUs on this host.
WFLYEJB0483 javax.xml.stream.XMLStreamException Attributes are mutually exclusive: %s, %s
WFLYEJB0485 WARN Transaction type %s is unspecified for the %s method of the %s message-driven bean. It will be handled as NOT_SUPPORTED.
WFLYEJB0486 INFO Parameter 'default-clustered-sfsb-cache' was defined for the 'add' operation for resource '%s'. This parameter is deprecated and its previous behavior has been remapped to attribute 'default-sfsb-cache'. As a result the 'default-sfsb-cache' attribute has been set to '%s' and the 'default-sfsb-passivation-disabled-cache' attribute has been set to '%s'.
WFLYEJB0487 ERROR Unexpected invocation state %s
WFLYEJB0489 ERROR Timer %s not running as transaction could not be started
WFLYEJB0490 org.jboss.as.server.deployment.DeploymentUnitProcessingException Multiple security domains not supported
WFLYEJB0491 jakarta.ejb.EJBException The transaction begin request was rejected as the container is suspended
WFLYEJB0492 INFO Jakarta Enterprise Beans subsystem suspension waiting for active transactions, %d transaction(s) remaining
WFLYEJB0493 INFO Jakarta Enterprise Beans subsystem suspension complete
WFLYEJB0494 java.lang.RuntimeException Failed to obtain SSLContext
WFLYEJB0495 WARN Ignoring the persisted start or end date for scheduled expression of timer ID:%s as it is not valid : %s.
WFLYEJB0496 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not create an instance of Jakarta Enterprise Beans client interceptor %s
WFLYEJB0497 WARN Failed to persist timer %s on startup. This is likely due to another cluster member making the same change, and should not affect operation.
WFLYEJB0499 org.jboss.as.controller.OperationFailedException Cannot read derived size - service %s unreachable
WFLYEJB0500 ERROR Legacy org.jboss.security.annotation.SecurityDomain annotation is used in class: %s, please use org.jboss.ejb3.annotation.SecurityDomain instead.
WFLYEJB0501 java.lang.RuntimeException Failed to activate MDB %s
WFLYEJB0502 ERROR Exception checking if timer %s should run
WFLYEJB0503 WARN [Jakarta Enterprise Beans 3.2 spec, section 5.6.4] Message Driven Bean 'onMessage' method can not be final (MDB: %s).
WFLYEJB0504 WARN [Jakarta Enterprise Beans 3.2 spec, section 5.6.4] Message Driven Bean 'onMessage' method can not be private (MDB: %s).
WFLYEJB0505 WARN [Jakarta Enterprise Beans 3.2 spec, section 5.6.4] Message Driven Bean 'onMessage' method can not be static (MDB: %s).
WFLYEJB0506 WARN [Jakarta Enterprise Beans 3.2 spec, section 5.6.2] Message Driven Bean can not have a 'finalize' method. (MDB: %s)
WFLYEJB0507 ERROR Failed to persist timer's state %s. Timer has to be restored manually
WFLYEJB0508 WARN Failed to persist timer's state %s due to %s
WFLYEJB0509 WARN Clustered Jakarta Enterprise Beans in Node: %s are bound to INADDR_ANY(%s). Either use a non-wildcard server bind address or add client-mapping entries to the relevant socket-binding for the Remoting connector
WFLYEJB0510 WARN @RunAs annotation is required when using @RunAsPrincipal on class %s
WFLYEJB0511 java.lang.RuntimeException Cannot build reflection index for server interceptor class %s
WFLYEJB0512 java.lang.RuntimeException Server interceptor class %s does not have a no parameter constructor
WFLYEJB0513 java.lang.RuntimeException Method %s in server interceptor %s annotated with %s has invalid signature
WFLYEJB0514 java.lang.RuntimeException Cannot load server interceptor module %s
WFLYEJB0515 WARN [Jakarta Enterprise Beans 3.2 spec, section 4.9.2] Singleton session beans are not allowed to implement 'jakarta.ejb.SessionBean' interface. This interface on bean '%s' is going to be ignored and should be removed.
WFLYEJB0516 INFO IIOP bindings for session bean named '%s' in deployment unit '%s' are as follows: %s
WFLYEJB0517 ERROR [Jakarta Enterprise Beans 3.2 spec, section 4.1] Spec violation for class %s. Session Jakarta Enterprise Beans should have only one of the following types : Stateful, Stateless, Singleton.
WFLYEJB0518 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted
WFLYEJB0519 java.lang.IllegalArgumentException Invalid unmarshalling filter specfication %s; specifications must describe class or package name matching patterns
WFLYEJB0521 org.jboss.as.server.deployment.DeploymentUnitProcessingException Some classes referenced by annotation: %s in class: %s are missing.
WFLYEJB0522 WARN The default pool name %s could not be resolved from its value: %s
WFLYEJB0523 WARN Timer %s has not been deployed
WFLYEJB0524 java.lang.RuntimeException Timer %s cannot be added
WFLYEJB0525 WARN The 'mappedName' in Jakarta Enterprise Beans annotations is not supported. Value of '%s' for Jakarta Enterprise Beans '%s' will be ignored.
WFLYEJB0526 org.jboss.as.controller.OperationFailedException Timer %s does not exist
WFLYEJB0527 ERROR Remoting connector (address %s, port %s) is not correctly configured for EJB client invocations, the connector must be listed in 'connectors' attribute to receive EJB client invocations
WFLYEJB0528 DEBUG Jakarta Enterprise Beans business method %s must be public
WFLYEJB0529 WARN Failed to retrieve info from database for timer: %s
WFLYEJB0530 java.lang.IllegalStateException The deployment is configured to use a legacy security domain '%s' which is no longer supported.
WFLYEJB0531 WARN No client mappings registry provider found for %s; using legacy provider based on static configuration
WFLYEJB0532 WARN Database detected from configuration is: '%s'. If this is incorrect, please specify the correct database.

WFLYELY

Code Level Return Type Message
WFLYELY00000 java.lang.String Reload dependent services which might already have cached the secret value
WFLYELY00000 java.lang.String Update dependent resources as alias '%s' does not exist anymore
WFLYELY00002 org.jboss.as.controller.OperationFailedException Can not inject the same realm '%s' in a single security domain.
WFLYELY00003 java.lang.IllegalArgumentException The operation did not contain an address with a value for '%s'.
WFLYELY00004 org.jboss.msc.service.StartException Unable to start the service.
WFLYELY00005 org.jboss.as.controller.OperationFailedException Unable to access KeyStore to complete the requested operation.
WFLYELY00007 org.jboss.as.controller.OperationFailedException The required service '%s' is not UP, it is currently '%s'.
WFLYELY00008 org.jboss.as.controller.OperationFailedException Invalid operation name '%s', expected one of '%s'
WFLYELY00009 java.lang.RuntimeException Unable to complete operation. '%s'
WFLYELY00010 org.jboss.as.controller.OperationFailedException Unable to save KeyStore - KeyStore file '%s' does not exist.
WFLYELY00012 org.jboss.msc.service.StartException No suitable provider found for type '%s'
WFLYELY00013 org.jboss.as.controller.OperationFailedException The default-realm '%s' is not in the list of realms [%s] referenced by this domain.
WFLYELY00014 org.jboss.msc.service.StartException Unable to load the properties files required to start the properties file backed realm: Users file: '%s' Groups file: '%s'
WFLYELY00015 org.jboss.msc.service.StartException The custom component implementation '%s' does not implement method initialize(Map), however configuration has been supplied.
WFLYELY00016 org.jboss.as.controller.OperationFailedException The supplied regular expression '%s' is invalid.
WFLYELY00017 org.jboss.msc.service.StartException Property file referenced in properties-realm does not exist: %s
WFLYELY00018 org.jboss.msc.service.StartException Unable to create %s for algorithm '%s'.
WFLYELY00019 org.jboss.msc.service.StartException No '%s' found in injected value.
WFLYELY00020 org.jboss.as.controller.OperationFailedException Unable to reload the properties files required to by the properties file backed realm.
WFLYELY00021 org.jboss.msc.service.StartException Exception while creating the permission object for the permission mapping. Please check [class-name], [target-name] (name of permission) and [action] of [%s].
WFLYELY00022 org.jboss.msc.service.StartException KeyStore file '%s' does not exist and required.
WFLYELY00023 WARN KeyStore file '%s' does not exist. Used blank.
WFLYELY00024 WARN Certificate [%s] in KeyStore is not valid
WFLYELY00025 org.jboss.msc.service.StartException Referenced property file is invalid: %s
WFLYELY00027 org.jboss.as.controller.OperationFailedException Unable to obtain OID for X.500 attribute '%s'
WFLYELY00028 org.jboss.as.controller.OperationFailedException The X.500 attribute must be defined by name or by OID
WFLYELY00029 org.jboss.as.controller.OperationFailedException Failed to parse URL '%s'
WFLYELY00030 org.jboss.msc.service.StartException Realm '%s' does not support cache
WFLYELY00031 org.jboss.msc.service.StartException Unable to access CRL file.
WFLYELY00032 java.lang.RuntimeException Unable to reload CRL file.
WFLYELY00033 java.lang.RuntimeException Unable to access entry [%s] from key store [%s].
WFLYELY00034 org.jboss.as.controller.OperationFailedException A principal query can only have a single key mapper
WFLYELY00035 org.jboss.as.controller.OperationFailedException Unable to load module '%s'.
WFLYELY00036 org.jboss.as.controller.OperationFailedException Security realm '%s' has been referenced twice in the same security domain.
WFLYELY00037 org.jboss.msc.service.StartException Injected value is not of '%s' type.
WFLYELY00038 org.jboss.msc.service.StartException Could not load permission class '%s'
WFLYELY00039 org.jboss.as.controller.OperationFailedException Unable to reload CRL file - TrustManager is not reloadable
WFLYELY00040 org.jboss.msc.service.StartException Unable to load the permission module '%s' for the permission mapping
WFLYELY00041 java.lang.String Unable to transform configuration to the target version - attribute '%s' is different from '%s'
WFLYELY00042 java.lang.String Unable to transform multiple 'authorization-realms' to the single value
WFLYELY00043 org.jboss.as.controller.OperationFailedException A cycle has been detected initialising the resources - %s
WFLYELY00044 java.lang.IllegalStateException Unexpected name of servicename's parent - %s
WFLYELY00045 java.lang.IllegalStateException Failed to load CallbackHandler from the provided module.
WFLYELY00046 org.jboss.msc.service.StartException Provided path '%s' to JAAS configuration file does not exist.
WFLYELY00047 WARN LDAP Realm is configured to use direct-verification and user-password-mapper which is invalid configuration.
WFLYELY00048 java.lang.IllegalArgumentException A string representation of an X.500 distinguished name is required: %s
WFLYELY00909 org.jboss.as.controller.OperationFailedException Credential store '%s' does not support given credential store entry type '%s'
WFLYELY00910 java.io.IOException Password cannot be resolved for key-store '%s'
WFLYELY00911 java.io.IOException Credential store '%s' protection parameter cannot be resolved
WFLYELY00913 org.jboss.as.controller.OperationFailedException Credential alias '%s' of credential type '%s' already exists in the store
WFLYELY00914 java.security.NoSuchProviderException Provider loader '%s' cannot supply Credential Store provider of type '%s'
WFLYELY00916 java.lang.IllegalStateException Credential cannot be resolved
WFLYELY00917 org.jboss.msc.service.StartException Password cannot be resolved for dir-context
WFLYELY00920 org.jboss.as.controller.OperationFailedException Credential alias '%s' of credential type '%s' does not exist in the store
WFLYELY00921 org.jboss.as.controller.OperationFailedException Location parameter is not specified for filebased keystore type '%s'
WFLYELY00922 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Unable to load credential from credential store.
WFLYELY00923 org.jboss.as.controller.OperationFailedException Unable to encrypt the supplied clear text.
WFLYELY00924 org.jboss.as.controller.OperationFailedException Unable to create immediately available credential store.
WFLYELY00925 org.jboss.as.controller.OperationFailedException Unable to reload the credential store.
WFLYELY00926 org.jboss.as.controller.OperationFailedException Unable to initialize the credential store.
WFLYELY00927 org.jboss.as.controller.OperationFailedException The secret key operation '%s' failed to complete due to '%s'.
WFLYELY01000 org.jboss.as.controller.OperationFailedException Identity with name [%s] already exists.
WFLYELY01001 java.lang.RuntimeException Could not create identity with name [%s].
WFLYELY01002 java.lang.String Identity with name [%s] not found.
WFLYELY01003 java.lang.RuntimeException Could not delete identity with name [%s].
WFLYELY01004 java.lang.String Identity with name [%s] not authorized.
WFLYELY01005 java.lang.RuntimeException Could not read identity [%s] from security domain [%s].
WFLYELY01007 java.lang.RuntimeException Could not read identity with name [%s].
WFLYELY01008 java.lang.RuntimeException Failed to obtain the authorization identity.
WFLYELY01009 java.lang.RuntimeException Failed to add attribute.
WFLYELY01010 java.lang.RuntimeException Failed to remove attribute.
WFLYELY01011 java.lang.RuntimeException Could not create password.
WFLYELY01012 org.jboss.as.controller.OperationFailedException Unexpected password type [%s].
WFLYELY01013 org.jboss.as.controller.OperationFailedException Pattern [%s] requires a capture group
WFLYELY01014 org.jboss.as.controller.OperationFailedException Invalid [%s] definition. Only one of '%s' or '%s' can be set in one Object in the list of filters.
WFLYELY01015 java.lang.IllegalStateException Unable to perform automatic outflow for '%s'
WFLYELY01016 org.jboss.as.controller.OperationFailedException Server '%s' not known
WFLYELY01017 org.jboss.as.controller.OperationFailedException Invalid value for cipher-suite-filter. %s
WFLYELY01018 org.jboss.as.controller.OperationFailedException Invalid size %s
WFLYELY01019 org.jboss.as.controller.OperationFailedException The suffix (%s) can not contain seconds or milliseconds.
WFLYELY01020 org.jboss.as.controller.OperationFailedException The suffix (%s) is invalid. A suffix must be a valid date format.
WFLYELY01022 java.lang.RuntimeException Failed to set policy [%s]
WFLYELY01023 javax.xml.stream.XMLStreamException Could not find policy provider with name [%s]
WFLYELY01024 java.lang.RuntimeException Failed to register policy context handlers
WFLYELY01025 java.lang.RuntimeException Failed to create policy [%s]
WFLYELY01026 WARN Element '%s' with attribute '%s' set to '%s' is unused. Since unused policy configurations can no longer be stored in the configuration model this item is being discarded.
WFLYELY01027 java.io.IOException Key password cannot be resolved for key-store '%s'
WFLYELY01028 org.jboss.as.controller.OperationFailedException Invalid value for not-before. %s
WFLYELY01029 org.jboss.as.controller.OperationFailedException Alias '%s' does not exist in KeyStore
WFLYELY01030 org.jboss.as.controller.OperationFailedException Alias '%s' does not identify a PrivateKeyEntry in KeyStore
WFLYELY01031 org.jboss.as.controller.OperationFailedException Unable to obtain PrivateKey for alias '%s'
WFLYELY01032 org.jboss.as.controller.OperationFailedException Unable to obtain Certificate for alias '%s'
WFLYELY01033 org.jboss.as.controller.OperationFailedException No certificates found in certificate reply
WFLYELY01034 org.jboss.as.controller.OperationFailedException Public key from certificate reply does not match public key from certificate in KeyStore
WFLYELY01035 org.jboss.as.controller.OperationFailedException Certificate reply is the same as the certificate from PrivateKeyEntry in KeyStore
WFLYELY01036 org.jboss.as.controller.OperationFailedException Alias '%s' already exists in KeyStore
WFLYELY01037 org.jboss.as.controller.OperationFailedException Top-most certificate from certificate reply is not trusted. Inspect the certificate carefully and if it is valid, execute import-certificate again with validate set to false.
WFLYELY01038 org.jboss.as.controller.OperationFailedException Trusted certificate is already in KeyStore under alias '%s'
WFLYELY01039 org.jboss.as.controller.OperationFailedException Trusted certificate is already in cacerts KeyStore under alias '%s'
WFLYELY01040 org.jboss.as.controller.OperationFailedException Unable to determine if the certificate is trusted. Inspect the certificate carefully and if it is valid, execute import-certificate again with validate set to false.
WFLYELY01041 org.jboss.as.controller.OperationFailedException Certificate file does not exist
WFLYELY01042 org.jboss.as.controller.OperationFailedException Unable to obtain Entry for alias '%s'
WFLYELY01043 org.jboss.as.controller.OperationFailedException Unable to create an account with the certificate authority: %s
WFLYELY01044 org.jboss.as.controller.OperationFailedException Unable to change the account key associated with the certificate authority: %s
WFLYELY01045 org.jboss.as.controller.OperationFailedException Unable to deactivate the account associated with the certificate authority: %s
WFLYELY01046 org.jboss.msc.service.StartException Unable to obtain certificate authority account Certificate for alias '%s'
WFLYELY01047 org.jboss.msc.service.StartException Unable to obtain certificate authority account PrivateKey for alias '%s'
WFLYELY01048 org.jboss.as.controller.OperationFailedException Unable to update certificate authority account key store: %s
WFLYELY01049 org.wildfly.security.x500.cert.acme.AcmeException Unable to respond to challenge from certificate authority: %s
WFLYELY01050 org.wildfly.security.x500.cert.acme.AcmeException Invalid certificate authority challenge
WFLYELY01051 org.jboss.as.controller.OperationFailedException Invalid certificate revocation reason '%s'
WFLYELY01052 java.lang.IllegalStateException Unable to instantiate AcmeClientSpi implementation
WFLYELY01053 org.jboss.as.controller.OperationFailedException Unable to update the account with the certificate authority: %s
WFLYELY01054 org.jboss.as.controller.OperationFailedException Unable to get the metadata associated with the certificate authority: %s
WFLYELY01055 org.jboss.as.controller.OperationFailedException Invalid key size: %d
WFLYELY01056 org.jboss.as.controller.OperationFailedException A certificate authority account with this account key already exists. To update the contact information associated with this existing account, use %s. To change the key associated with this existing account, use %s.
WFLYELY01057 java.lang.RuntimeException Failed to create ServerAuthModule [%s] using module '%s'
WFLYELY01058 org.jboss.as.controller.OperationFailedException Failed to parse PEM public key with kid: %s
WFLYELY01059 org.jboss.msc.service.StartException Unable to detect KeyStore '%s'
WFLYELY01060 org.jboss.as.controller.OperationFailedException Fileless KeyStore needs to have a defined type.
WFLYELY01061 org.jboss.as.controller.OperationFailedException Invalid value of host context map: '%s' is not valid hostname pattern.
WFLYELY01062 org.jboss.as.controller.OperationFailedException Value for attribute '%s' is invalid.
WFLYELY01063 org.jboss.as.controller.OperationFailedException LetsEncrypt certificate authority is configured by default.
WFLYELY01064 org.jboss.msc.service.StartException Failed to load OCSP responder certificate '%s'.
WFLYELY01065 org.jboss.as.controller.OperationFailedException Multiple maximum-cert-path definitions found.
WFLYELY01066 org.jboss.as.controller.OperationFailedException Invalid value for cipher-suite-names. %s
WFLYELY01067 org.jboss.as.controller.OperationFailedException Value '%s' is not valid regex.
WFLYELY01068 java.lang.IllegalStateException Duplicate PolicyContextHandler found for key '%s'.
WFLYELY01069 java.lang.IllegalStateException Invalid %s loaded, expected %s but received %s.
WFLYELY01079 java.lang.RuntimeException Unable to load module '%s'.
WFLYELY01080 org.jboss.as.controller.OperationFailedException Non existing key store needs to have defined type.
WFLYELY01081 java.lang.RuntimeException Failed to lazily initialize key manager
WFLYELY01082 java.lang.RuntimeException Failed to store generated self-signed certificate
WFLYELY01083 java.lang.RuntimeException No '%s' found in injected value.
WFLYELY01084 WARN KeyStore %s not found, it will be auto-generated on first use with a self-signed certificate for host %s
WFLYELY01085 WARN Generated self-signed certificate at %s. Please note that self-signed certificates are not secure and should only be used for testing purposes. Do not use this self-signed certificate in production. SHA-1 fingerprint of the generated key is %s SHA-256 fingerprint of the generated key is %s
WFLYELY01086 java.lang.IllegalStateException Unable to initialize Elytron JACC support while legacy JACC support is enabled.
WFLYELY01087 org.jboss.as.controller.OperationFailedException Hostname in SNI mapping cannot contain ^ character.
WFLYELY01088 org.wildfly.security.x500.cert.acme.AcmeException Missing certificate authority challenge
WFLYELY01089 org.jboss.as.controller.OperationFailedException Invalid file encoding '%s'.
WFLYELY01200 org.jboss.as.controller.OperationFailedException The name of the resolver to use was not specified and no default-resolver has been defined.
WFLYELY01201 org.jboss.as.controller.OperationFailedException No expression resolver has been defined with the name '%s'.
WFLYELY01202 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException A cycle has been detected initialising the expression resolver for '%s' and '%s'.
WFLYELY01203 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Expression resolver initialisation has already failed.
WFLYELY01204 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException The expression '%s' does not specify a resolver and no default is defined.
WFLYELY01205 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException The expression '%s' specifies a resolver configuration which does not exist.
WFLYELY01206 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Unable to decrypt expression '%s'.
WFLYELY01207 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionServerException Resolution of credential store expressions is not supported in the MODEL stage of operation execution.
WFLYELY01208 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionServerException Unable to resolve CredentialStore %s -- %s
WFLYELY01209 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Unable to initialize CredentialStore %s -- %s
WFLYELY01210 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionServerException Initialisation of an %s without an active management OperationContext is not allowed.
WFLYELY01211 org.jboss.as.controller.OperationFailedException Unable to load the credential store.
WFLYELY01212 org.jboss.msc.service.StartException KeyStore does not contain a PrivateKey for KeyStore: [%s] and alias: [%s].
WFLYELY01213 org.jboss.msc.service.StartException KeyStore does not contain a PublicKey for KeyStore: [%s] and alias: [%s].
WFLYELY01214 org.jboss.as.controller.OperationFailedException Unable to verify the integrity of the filesystem realm: %s
WFLYELY01215 org.jboss.as.controller.OperationFailedException Filesystem realm is missing key pair configuration, integrity checking is not enabled
WFLYELY01216 java.lang.RuntimeException Filesystem realm is unable to obtain key store password
WFLYELY01217 org.jboss.as.controller.OperationFailedException Realm verification failed, invalid signatures for the identities: %s
WFLYELY01218 java.security.KeyStoreException Keystore used by filesystem realm does not contain the alias: %s
WFLYELY01219 org.jboss.as.controller.OperationFailedException Integrity keypair cannot be added to non-empty filesystem realm after initialization. To upgrade a filesystem realm, use Elytron Tool command `filesystem-realm-integrity`
WFLYELY01220 org.jboss.as.controller.OperationFailedException Encryption secret key cannot be added to non-empty filesystem realm after initialization. To upgrade a filesystem realm, use Elytron Tool command `filesystem-realm-encrypt`

WFLYEMB

Code Level Return Type Message
WFLYEMB0011 java.lang.IllegalStateException Invalid JBoss home directory: %s
WFLYEMB0014 java.lang.RuntimeException Cannot load module %s from: %s
WFLYEMB0015 java.lang.IllegalArgumentException %s is null
WFLYEMB0017 java.lang.IllegalStateException Cannot load embedded server factory: %s
WFLYEMB0018 java.lang.IllegalStateException Cannot get reflective method '%s' for: %s
WFLYEMB0019 java.lang.IllegalStateException Cannot create standalone server using factory: %s
WFLYEMB0020 java.lang.IllegalStateException Cannot setup embedded process
WFLYEMB0021 org.wildfly.core.embedded.EmbeddedProcessStartException Cannot start embedded process
WFLYEMB0022 java.lang.IllegalStateException Cannot invoke '%s' on embedded process
WFLYEMB0023 java.lang.IllegalStateException The embedded server is stopping and invocations on the ModelControllerClient are not available
WFLYEMB0024 java.lang.IllegalStateException The embedded server is reloading and invocations on the ModelControllerClient are not yet available
WFLYEMB0026 java.lang.IllegalStateException Cannot create host controller using factory: %s
WFLYEMB0027 java.lang.IllegalStateException The embedded server is stopped and invocations on the ModelControllerClient are not available
WFLYEMB0028 java.lang.RuntimeException Error copying '%s' to '%s' (%s)
WFLYEMB0029 java.lang.IllegalArgumentException -D%s=%s is not a directory
WFLYEMB0143 java.lang.IllegalArgumentException No directory called '%s' exists under '%s'
WFLYEMB0144 java.lang.IllegalArgumentException -D%s=%s does not exist
WFLYEMB0145 WARN The module loader has already been configured. Changing the %s property will have no effect.
WFLYEMB0146 ERROR Failed to restore context %s

WFLYHC

Code Level Return Type Message
WFLYHC-001 WARN Server '%s' (managed by host '%s') is unstable and should be stopped or restarted. An unstable server may not stop normally, so the 'kill' operation may be required to terminate the server process.
WFLYHC0000 java.lang.String Use %s --help for information on valid command line arguments and their syntax.
WFLYHC0000 java.lang.String - Host Controller configuration files in use: %s, %s
WFLYHC0000 java.lang.String - Host Controller configuration file in use: %s
WFLYHC0001 WARN Could not connect to remote domain controller %s
WFLYHC0002 ERROR Could not connect to the domain controller. Error was: %s
WFLYHC0003 INFO Creating http management service using network interface (%s) port (%d) securePort (%d)
WFLYHC0005 WARN Existing server [%s] with status: %s
WFLYHC0008 ERROR Failed to start server (%s)
WFLYHC0009 ERROR Failed to stop server (%s)
WFLYHC0011 WARN Ignoring for jvm '%s' type jvm: %s
WFLYHC0012 ERROR No configuration was provided and the current running mode ('%s') requires access to the Domain Controller host. Startup will be aborted. Use the %s command line argument to start in %s mode if you need to start without a domain controller connection and then use the management tools to configure one.
WFLYHC0013 WARN No security realm defined for http management service, all access will be unrestricted.
WFLYHC0014 ERROR No server called %s available
WFLYHC0015 WARN Connection to remote host-controller closed. Trying to reconnect.
WFLYHC0016 WARN Ignoring
WFLYHC0018 INFO Reconnecting server %s
WFLYHC0019 INFO Registered remote secondary host "%s", %s
WFLYHC0020 INFO Registering server %s
WFLYHC0021 INFO Server [%s] connected using connection [%s]
WFLYHC0023 INFO Starting server %s
WFLYHC0024 INFO Stopping server %s
WFLYHC0026 INFO Unregistered remote secondary host "%s"
WFLYHC0027 INFO Unregistering server %s
WFLYHC0029 INFO Unregistered at domain controller
WFLYHC0030 WARN Connection to remote host "%s" closed unexpectedly
WFLYHC0031 WARN Cannot load the domain model using --backup
WFLYHC0033 ERROR Caught exception during boot
WFLYHC0034 java.lang.String Host Controller boot has failed in an unrecoverable manner; exiting. See previous messages for details. %s
WFLYHC0035 ERROR Installation of the domain-wide configuration has failed. Because the running mode of this Host Controller is ADMIN_ONLY boot has been allowed to proceed. If ADMIN_ONLY mode were not in effect the process would be terminated due to a critical boot failure.
WFLYHC0037 INFO The primary Host Controller has been restarted. Re-registering this secondary Host Controller with the new primary.
WFLYHC0038 WARN The domain controller could not be reached in the last [%d] milliseconds. Re-connecting.
WFLYHC0039 INFO The secondary Host Controller "%s" has been restarted or is attempting to reconnect. Unregistering the current connection to this secondary.
WFLYHC0040 WARN The secondary Host Controller "%s" could not be reached in the last [%d] milliseconds. Unregistering.
WFLYHC0041 java.lang.String Argument expected for option %s. %s
WFLYHC0042 java.lang.IllegalArgumentException Attempting to set '%s' when '%s' was already set
WFLYHC0043 java.lang.IllegalStateException Unable to connect due to authentication failure.
WFLYHC0044 java.lang.IllegalStateException Cannot access a remote file repository from the domain controller
WFLYHC0045 java.io.IOException Unable to create local directory: %s
WFLYHC0046 java.lang.RuntimeException Cannot obtain a valid default address for communicating with the ProcessController using either %s or InetAddress.getLocalHost(). Please check your system's network configuration or use the %s command line switch to configure a valid address
WFLYHC0047 java.lang.String Cannot restart server %s as it is not currently started; it is %s
WFLYHC0048 java.lang.String Cannot start servers when the Host Controller running mode is %s
WFLYHC0049 java.lang.UnsupportedOperationException Close should be managed by the service
WFLYHC0050 java.lang.IllegalStateException Configuration persister for domain model is already initialized
WFLYHC0051 java.lang.IllegalStateException Interrupted while trying to connect to the domain controller
WFLYHC0052 java.lang.IllegalStateException Could not connect to the domain controller in %d attempts within %s ms
WFLYHC0053 java.lang.RuntimeException Could not get the server inventory in %d %s
WFLYHC0054 java.io.IOException Did not read the entire file. Missing: %d
WFLYHC0055 java.lang.RuntimeException Error closing down host
WFLYHC0056 java.lang.String Failed to retrieve profile operations from domain controller
WFLYHC0057 java.lang.RuntimeException Failed to get file from remote repository
WFLYHC0058 java.lang.String Failed to get server status
WFLYHC0059 java.lang.String Failed to read authentication key: %s
WFLYHC0061 javax.security.sasl.SaslException Insufficient information to generate hash.
WFLYHC0062 java.lang.String Invalid option '%s'. %s
WFLYHC0063 org.jboss.as.protocol.mgmt.RequestProcessingException Invalid root id [%d]
WFLYHC0064 java.lang.String Value for %s is not an %s -- %s. %s
WFLYHC0065 java.lang.IllegalStateException Invocations of %s after HostController boot are not allowed
WFLYHC0066 java.lang.String Malformed URL provided for option %s. %s
WFLYHC0067 java.lang.IllegalStateException Must call %s before checking for secondary Host Controller status
WFLYHC0068 java.lang.IllegalStateException Must call %s before persisting the domain model
WFLYHC0071 java.lang.IllegalStateException No server inventory
WFLYHC0077 java.lang.IllegalArgumentException There is already a registered server named '%s'
WFLYHC0078 java.lang.String Server (%s) still running
WFLYHC0079 javax.security.sasl.SaslException Unable to generate hash
WFLYHC0080 java.lang.String Unable to load properties from URL %s. %s
WFLYHC0081 java.lang.IllegalArgumentException Undefined socket binding group for server %s
WFLYHC0082 java.lang.IllegalStateException Included socket binding group %s is not defined
WFLYHC0084 java.lang.IllegalArgumentException Unknown %s %s
WFLYHC0085 java.lang.String Value for %s is not a known host -- %s. %s
WFLYHC0087 java.lang.IllegalStateException Host-Controller is already shutdown.
WFLYHC0090 java.lang.UnsupportedOperationException HostControllerEnvironment does not support system property updates
WFLYHC0091 org.jboss.as.controller.OperationFailedException Resources of type %s cannot be ignored
WFLYHC0092 javax.xml.stream.XMLStreamException An '%s' element whose 'type' attribute is '%s' has already been found
WFLYHC0093 java.lang.String The JVM input arguments cannot be accessed so system properties passed directly to this Host Controller JVM will not be passed through to server processes. Cause of the problem: %s
WFLYHC0094 java.lang.IllegalStateException Missing configuration value for: %s
WFLYHC0095 java.lang.IllegalStateException Home directory does not exist: %s
WFLYHC0097 java.lang.IllegalStateException Domain base directory does not exist: %s
WFLYHC0098 java.lang.IllegalStateException Domain base directory is not a directory: %s
WFLYHC0099 java.lang.IllegalStateException Configuration directory does not exist: %s
WFLYHC0100 java.lang.IllegalStateException Domain data directory is not a directory: %s
WFLYHC0101 java.lang.IllegalStateException Could not create domain data directory: %s
WFLYHC0102 java.lang.IllegalStateException Domain content directory is not a directory: %s
WFLYHC0103 java.lang.IllegalStateException Could not create domain content directory: %s
WFLYHC0104 java.lang.IllegalStateException Log directory is not a directory: %s
WFLYHC0105 java.lang.IllegalStateException Could not create log directory: %s
WFLYHC0106 java.lang.IllegalStateException Servers directory is not a directory: %s
WFLYHC0107 java.lang.IllegalStateException Could not create servers directory: %s
WFLYHC0108 java.lang.IllegalStateException Domain temp directory does not exist: %s
WFLYHC0109 java.lang.IllegalStateException Could not create domain temp directory: %s
WFLYHC0110 java.lang.IllegalStateException Unable to connect due to SSL failure.
WFLYHC0111 java.lang.IllegalStateException Option '%s' already exists
WFLYHC0113 org.jboss.as.controller.OperationFailedException Host controller management version %s.%s is too old, Only %s.%s or higher are supported
WFLYHC0114 java.lang.IllegalStateException Failed to add extensions used by the domain. Failure description: %s
WFLYHC0115 java.lang.String Argument %s has no value. %s
WFLYHC0116 java.lang.IllegalStateException Cannot access S3 file: %s
WFLYHC0117 java.lang.IllegalStateException Failed to obtain domain controller data from S3 file
WFLYHC0118 java.io.IOException Cannot write domain controller data to S3 file: %s
WFLYHC0119 java.lang.IllegalStateException Cannot access S3 bucket '%s': %s
WFLYHC0120 java.lang.IllegalStateException Tried all domain controller discovery option(s) but unable to connect
WFLYHC0121 java.lang.IllegalStateException pre_signed_put_url and pre_signed_delete_url must have the same path
WFLYHC0122 java.lang.IllegalStateException pre_signed_put_url and pre_signed_delete_url must both be set or both unset
WFLYHC0123 java.lang.IllegalStateException pre-signed url %s must point to a file within a bucket
WFLYHC0124 java.lang.IllegalStateException pre-signed url %s is not a valid url
WFLYHC0125 java.lang.IllegalStateException pre-signed url %s may only have a subdirectory under a bucket
WFLYHC0126 java.lang.IllegalArgumentException Creating location-constrained bucket with unsupported calling-format
WFLYHC0127 java.lang.IllegalArgumentException Invalid location: %s
WFLYHC0128 java.lang.IllegalArgumentException Invalid bucket name: %s
WFLYHC0129 java.io.IOException bucket '%s' could not be accessed (rsp=%d (%s)). Maybe the bucket is owned by somebody else or the authentication failed
WFLYHC0130 java.io.IOException Unexpected response: %s
WFLYHC0131 java.lang.RuntimeException HTTP redirect support required
WFLYHC0132 java.lang.RuntimeException Unexpected error parsing bucket listing(s)
WFLYHC0133 java.lang.RuntimeException Couldn't initialize a SAX driver for the XMLReader
WFLYHC0134 java.lang.IllegalStateException Cannot instantiate discovery option class '%s': %s
WFLYHC0137 ERROR Could not write domain controller data to S3 file. Error was: %s
WFLYHC0138 ERROR Could not remove S3 file. Error was: %s
WFLYHC0140 java.lang.IllegalStateException Can't execute transactional operation '%s' from the secondary Host Controller
WFLYHC0142 ERROR Failed to apply domain-wide configuration from the domain controller
WFLYHC0143 ERROR Failed to apply domain-wide configuration from the Domain Controller. Operation outcome: %s. Failure description %s
WFLYHC0144 ERROR The host cannot start because it was started in running mode '%s' with no access to a local copy of the domain wide configuration policy, the '%s' attribute was set to '%s' and the domain wide configuration policy could not be obtained from the Domain Controller host. Startup will be aborted. Use the '%s' command line argument to start if you need to start without connecting to a domain controller connection.
WFLYHC0145 ERROR The host cannot start because it was started in running mode '%s' with no access to a local copy of the domain wide configuration policy, and the '%s' attribute was set to '%s'. Startup will be aborted. Use the '%s' command line argument to start in running mode '%s'.
WFLYHC0146 WARN Could not discover the domain controller using discovery option %s. Error was: %s
WFLYHC0147 WARN No domain controller discovery options remain.
WFLYHC0148 INFO Connected to the domain controller at %s
WFLYHC0149 INFO Option %s was set; obtaining domain-wide configuration from %s
WFLYHC0150 INFO Trying to reconnect to the domain controller.
WFLYHC0151 ERROR No domain controller discovery configuration was provided and the '%s' attribute was set to '%s'. Startup will be aborted. Use the %s command line argument to start in %s mode if you need to start without a domain controller connection and then use the management tools to configure one.
WFLYHC0152 INFO Server %s will be started with JVM launch command prefix '%s'
WFLYHC0153 java.io.IOException Channel closed
WFLYHC0157 java.lang.IllegalStateException Could not create domain auto-start directory: %s
WFLYHC0158 INFO Error persisting server autostart status
WFLYHC0159 java.lang.String Invalid discovery type %s
WFLYHC0160 java.lang.IllegalStateException Could not read or create the domain UUID in file: %s
WFLYHC0162 org.jboss.as.controller.OperationFailedException The binding name '%s' in socket binding group '%s' is not unique. Names must be unique across socket-binding, local-destination-outbound-socket-binding and remote-destination-outbound-socket-binding
WFLYHC0163 org.jboss.as.controller.OperationFailedException Profile '%s' is involved in a cycle
WFLYHC0164 org.jboss.as.controller.OperationFailedException Profile '%s' defines subsystem '%s' which is also defined in its ancestor profile '%s'. Overriding subsystems is not supported
WFLYHC0165 org.jboss.as.controller.OperationFailedException Socket binding group '%s' is involved in a cycle
WFLYHC0166 org.jboss.as.controller.OperationFailedException Socket binding group '%s' defines socket binding '%s' which is also defined in its ancestor socket binding group '%s'. Overriding socket bindings is not supported
WFLYHC0167 org.jboss.as.controller.OperationFailedException Profile '%s' includes profile '%s' and profile '%s'. Both these profiles define subsystem '%s', which is not supported
WFLYHC0168 org.jboss.as.controller.OperationFailedException Socket binding group '%s' includes socket binding group '%s' and socket binding group '%s'. Both these socket binding groups define socket binding '%s', which is not supported
WFLYHC0169 org.jboss.as.controller.OperationFailedException Reload into running mode is not supported with embedded host controller, admin-only=true must be specified.
WFLYHC0170 java.lang.String Error releasing shared lock after host registration for operationID: %s
WFLYHC0171 ERROR Failed getting the response from the suspend listener for server: %s
WFLYHC0172 ERROR Failed executing the suspend operation for server: %s
WFLYHC0173 org.jboss.as.controller.OperationFailedException It is not possible to use use-current-host-config=false while specifying a host-config
WFLYHC0174 org.jboss.as.controller.OperationFailedException It is not possible to use use-current-domain-config=false while specifying a domain-config
WFLYHC0175 org.jboss.as.controller.OperationFailedException domain-config '%s' specified for reload could not be found
WFLYHC0177 WARN No security realm defined for native management service; all access will be unrestricted.
WFLYHC0178 FATAL Aborting with exit code %d
WFLYHC0179 INFO ProcessController has signalled to shut down; shutting down
WFLYHC0180 INFO Shutting down in response to management operation '%s'
WFLYHC0181 INFO Host Controller shutdown has been requested via an OS signal
WFLYHC0182 INFO Timed out after %d ms awaiting server suspend response(s) for server: %s
WFLYHC0183 java.lang.String Timed out after %d ms awaiting server suspend response(s) for server: %s
WFLYHC0184 INFO %s interrupted awaiting server suspend response(s)
WFLYHC0185 java.lang.String %s interrupted awaiting server suspend response(s)
WFLYHC0186 java.lang.String Failed executing the suspend operation for server: %s
WFLYHC0187 java.lang.String Failed getting the response from the suspend listener for server: %s
WFLYHC0188 INFO Timed out after %d ms awaiting server resume response(s) for server: %s
WFLYHC0189 java.lang.String Timed out after %d ms awaiting server resume response(s) for server: %s
WFLYHC0190 INFO %s interrupted awaiting server resume response(s)
WFLYHC0191 java.lang.String %s interrupted awaiting server resume response(s)
WFLYHC0192 java.lang.String Failed executing the resume operation for server: %s
WFLYHC0193 java.lang.String Failed getting the response from the resume listener for server: %s
WFLYHC0194 ERROR Failed executing the resume operation for server: %s
WFLYHC0195 ERROR Failed getting the response from the resume listener for server: %s
WFLYHC0196 ERROR Cannot move the file %s to %s, unable to persist domain configuration changes: %s
WFLYHC0197 org.jboss.as.controller.OperationFailedException If attribute %s is defined an ssl-context must also be defined
WFLYHC0198 WARN Server '%s' is unstable and should be stopped or restarted. An unstable server may not stop normally, so the 'kill' operation may be required to terminate the server process.
WFLYHC0199 WARN Server '%s' (managed by host '%s') has not responded to an operation request within the configured timeout. This may mean the server has become unstable.
WFLYHC0200 ERROR Reporting instability of server '%s' to Domain Controller failed.
WFLYHC0201 java.lang.String Error synchronizing the host model with the domain controller model with failure : %s.
WFLYHC0202 WARN The domain configuration was successfully applied, but reload is required before changes become active.
WFLYHC0203 WARN The domain configuration was successfully applied, but restart is required before changes become active.
WFLYHC0204 WARN No logging configuration file could be found for the servers initial boot. Logging will not be configured until the logging subsystem is activated for the server %s
WFLYHC0205 ERROR An error occurred setting the -Dlogging.configuration property for server %s. Configuration path %s
WFLYHC0206 java.lang.IllegalStateException File %s already exists, you must use --remove-existing-domain-config to overwrite existing files.
WFLYHC0207 java.lang.IllegalStateException File %s already exists, you must use --remove-existing-host-config to overwrite existing files.
WFLYHC0208 org.jboss.as.controller.OperationFailedException A host (%s) has already been registered. You must shutdown this host before adding a new one.
WFLYHC0209 org.jboss.as.controller.OperationFailedException Host name may not be null.
WFLYHC0210 org.jboss.as.controller.OperationFailedException A secondary Host Controller may not be added using add(). Please add a host, omitting this parameter, and configure the remote domain controller using write-attribute.
WFLYHC0211 org.jboss.as.controller.OperationFailedException Boot configuration validation failed
WFLYHC0212 org.jboss.as.controller.OperationFailedException Fetch of missing configuration from the Domain Controller failed without explanation. Fetch operation outcome was %s
WFLYHC0213 java.lang.IllegalStateException Java home '%s' does not exist.
WFLYHC0214 java.lang.IllegalStateException Java home's bin '%s' does not exist. The home directory was determined to be %s.
WFLYHC0215 java.lang.IllegalStateException Could not find java executable under %s.
WFLYHC0216 org.jboss.as.controller.OperationFailedException The module option %s is not allowed.
WFLYHC0217 javax.xml.stream.XMLStreamException Security realms are no longer supported, please migrate references to them from the configuration.
WFLYHC0218 org.jboss.as.controller.OperationFailedException No %s installation has been prepared.
WFLYHC0219 java.security.GeneralSecurityException Authorization failed for '%s' attempting to connect as a domain server.

WFLYHEALTH

Code Level Return Type Message
WFLYHEALTH0001 INFO Activating Base Health Subsystem

WFLYIIOP

Code Level Return Type Message
WFLYIIOP0001 INFO Activating IIOP Subsystem
WFLYIIOP0002 ERROR Error fetching CSIv2Policy
WFLYIIOP0003 WARN Caught exception while encoding GSSUPMechOID
WFLYIIOP0004 ERROR Internal error
WFLYIIOP0005 ERROR Failed to create CORBA naming context
WFLYIIOP0006 WARN Unbind failed for %s
WFLYIIOP0007 ERROR Failed to obtain JSSE security domain with name %s
WFLYIIOP0008 INFO CORBA Naming Service started
WFLYIIOP0009 INFO CORBA ORB Service started
WFLYIIOP0010 WARN Compatibility problem: Class javax.rmi.CORBA.ClassDesc does not conform to the Java(TM) Language to IDL Mapping Specification (01-06-07), section 1.3.5.11
WFLYIIOP0011 WARN Could not deactivate IR object
WFLYIIOP0012 WARN Could not deactivate anonymous IR object
WFLYIIOP0013 org.jboss.as.controller.OperationFailedException SSL support has been enabled but no security domain or client/server SSL contexts have been specified
WFLYIIOP0014 java.lang.RuntimeException Unexpected exception
WFLYIIOP0015 org.omg.CORBA.NO_PERMISSION Unexpected ContextError in SAS reply
WFLYIIOP0016 org.omg.CORBA.MARSHAL Could not parse SAS reply: %s
WFLYIIOP0017 java.lang.RuntimeException Could not register initial reference for SASCurrent
WFLYIIOP0018 org.omg.CORBA.NO_PERMISSION SAS context does not exist
WFLYIIOP0019 org.omg.CORBA.NO_PERMISSION Could not decode initial context token
WFLYIIOP0020 org.omg.CORBA.NO_PERMISSION Could not decode target name in initial context token
WFLYIIOP0021 org.omg.CORBA.NO_PERMISSION Could not decode incoming principal name
WFLYIIOP0022 java.lang.RuntimeException Exception decoding context data in %s
WFLYIIOP0023 java.lang.IllegalArgumentException Batch size not numeric: %s
WFLYIIOP0024 javax.naming.NamingException Error getting binding list
WFLYIIOP0025 javax.naming.NamingException Error generating object via object factory
WFLYIIOP0026 javax.naming.ConfigurationException Error constructing context: either ORB or NamingContext must be supplied
WFLYIIOP0027 javax.naming.ConfigurationException %s does not name a NamingContext
WFLYIIOP0028 javax.naming.ConfigurationException Cannot convert IOR to NamingContext: %s
WFLYIIOP0029 javax.naming.ConfigurationException ORB.resolve_initial_references("NameService") does not return a NamingContext
WFLYIIOP0030 javax.naming.NamingException COS Name Service not registered with ORB under the name 'NameService'
WFLYIIOP0031 javax.naming.NamingException Cannot connect to ORB
WFLYIIOP0032 javax.naming.NamingException Invalid IOR or URL: %s
WFLYIIOP0033 javax.naming.NamingException Invalid object reference: %s
WFLYIIOP0034 javax.naming.ConfigurationException %s does not contain an IOR
WFLYIIOP0035 java.lang.IllegalArgumentException Only instances of org.omg.CORBA.Object can be bound
WFLYIIOP0036 javax.naming.NamingException No object reference bound for specified name
WFLYIIOP0037 javax.naming.InvalidNameException Invalid empty name
WFLYIIOP0038 javax.naming.InvalidNameException %s: unescaped \ at end of component
WFLYIIOP0039 javax.naming.InvalidNameException %s: Invalid character being escaped
WFLYIIOP0040 java.net.MalformedURLException Invalid %s URL: %s
WFLYIIOP0041 javax.naming.ConfigurationException Problem with PortableRemoteObject.toStub(); object not exported or stub not found
WFLYIIOP0042 javax.naming.ConfigurationException Cannot invoke javax.rmi.PortableRemoteObject.toStub(java.rmi.Remote)
WFLYIIOP0043 java.lang.IllegalStateException No method definition for javax.rmi.PortableRemoteObject.toStub(java.rmi.Remote)
WFLYIIOP0044 javax.naming.ConfigurationException Problem invoking javax.rmi.CORBA.Stub.connect()
WFLYIIOP0045 javax.naming.ConfigurationException Cannot invoke javax.rmi.CORBA.Stub.connect()
WFLYIIOP0046 java.lang.IllegalStateException No method definition for javax.rmi.CORBA.Stub.connect(org.omg.CORBA.ORB)
WFLYIIOP0047 java.net.MalformedURLException Invalid IIOP URL version: %s
WFLYIIOP0048 javax.naming.ConfigurationException javax.rmi packages not available
WFLYIIOP0049 java.net.MalformedURLException ISO-Latin-1 decoder unavailable
WFLYIIOP0050 java.net.MalformedURLException Invalid URI encoding: %s
WFLYIIOP0051 javax.naming.ConfigurationException Error configuring domain socket factory: failed to lookup JSSE security domain
WFLYIIOP0052 java.io.IOException keyManager[] is null for security domain %s
WFLYIIOP0053 java.io.IOException Failed to get SSL context
WFLYIIOP0054 org.jboss.msc.service.StartException Failed to start the JBoss Corba Naming Service
WFLYIIOP0055 java.lang.UnsupportedOperationException Foreign Transaction
WFLYIIOP0056 java.lang.RuntimeException Exception raised during encoding
WFLYIIOP0057 java.lang.RuntimeException Exception getting slot in TxServerInterceptor
WFLYIIOP0058 java.lang.RuntimeException Exception setting slot in TxServerInterceptor
WFLYIIOP0059 java.lang.IllegalArgumentException Cannot analyze a null class
WFLYIIOP0060 java.lang.IllegalArgumentException Bad type for a constant: %s
WFLYIIOP0061 java.lang.IllegalArgumentException Cannot analyze special class: %s
WFLYIIOP0062 java.lang.IllegalArgumentException Not an accessor: %s
WFLYIIOP0063 java.lang.IllegalArgumentException Not a class or interface: %s
WFLYIIOP0064 java.lang.IllegalArgumentException Class %s is not an interface
WFLYIIOP0065 java.lang.IllegalArgumentException Not a primitive type: %s
WFLYIIOP0066 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException Field %s of interface %s is a constant, but it is not primitive or String
WFLYIIOP0067 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException Exception type %s must be a checked exception class
WFLYIIOP0068 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException All interface methods must throw javax.rmi.RemoteException but method %s of interface %s does not
WFLYIIOP0069 java.lang.IllegalArgumentException Name cannot be null, empty or qualified
WFLYIIOP0070 java.lang.IllegalArgumentException Primitive types have no IR IDs
WFLYIIOP0071 java.lang.RuntimeException No SHA message digest available
WFLYIIOP0072 java.lang.RuntimeException Unknown primitive type: %s
WFLYIIOP0073 java.lang.IllegalArgumentException Cannot analyze java.lang.String: it is a special case
WFLYIIOP0074 java.lang.IllegalArgumentException Cannot analyze java.lang.Class: it is a special case
WFLYIIOP0075 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException Value type %s cannot implement java.rmi.Remote
WFLYIIOP0076 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException Value type %s cannot be a proxy or inner class
WFLYIIOP0077 java.lang.RuntimeException Error loading class %s
WFLYIIOP0078 java.lang.RuntimeException No read method in helper class %s
WFLYIIOP0079 java.lang.RuntimeException No write method in helper class %s
WFLYIIOP0080 java.lang.RuntimeException Error unmarshaling %s
WFLYIIOP0081 java.lang.RuntimeException Error marshaling %s
WFLYIIOP0082 java.lang.RuntimeException Cannot obtain exception repository id for %s
WFLYIIOP0083 java.lang.RuntimeException Cannot marshal parameter: unexpected number of parameters
WFLYIIOP0084 org.omg.CORBA.BAD_INV_ORDER Cannot change RMI/IIOP mapping
WFLYIIOP0085 java.lang.RuntimeException Bad kind %d for TypeCode
WFLYIIOP0086 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Wrong interface repository
WFLYIIOP0087 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Duplicate repository name
WFLYIIOP0088 java.lang.IllegalArgumentException Invalid null class
WFLYIIOP0089 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Bad class %s for a constant
WFLYIIOP0090 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException TypeCode for class %s is unknown
WFLYIIOP0091 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException TypeCode for class %s already established
WFLYIIOP0092 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Name collision while creating package
WFLYIIOP0093 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Class %s is not an array class
WFLYIIOP0094 org.omg.CORBA.BAD_INV_ORDER Cannot destroy RMI/IIOP mapping
WFLYIIOP0095 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Bad kind for super valuetype of %s
WFLYIIOP0096 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException ValueDef %s unable to resolve reference to implemented interface %s
WFLYIIOP0097 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException ValueDef %s unable to resolve reference to abstract base valuetype %s
WFLYIIOP0098 org.jboss.msc.service.StartException Failed to resolve initial reference %s
WFLYIIOP0099 org.jboss.msc.service.StartException Failed to create POA from parent
WFLYIIOP0100 org.jboss.msc.service.StartException Unable to instantiate POA: either the running ORB or the parent POA must be specified
WFLYIIOP0101 org.jboss.msc.service.StartException Failed to activate POA
WFLYIIOP0102 org.omg.CORBA.INTERNAL Caught exception destroying Iterator %s
WFLYIIOP0103 org.jboss.as.controller.OperationFailedException IOR settings imply ssl connections usage, but secure connections have not been configured
WFLYIIOP0104 java.lang.String Inconsistent transport-config configuration: %s is supported, please configure it to %s value
WFLYIIOP0105 java.lang.String Inconsistent transport-config configuration: %s is not supported, please remove it or configure it to none value
WFLYIIOP0106 java.lang.String Inconsistent transport-config configuration: %s is set to true, please configure %s as required
WFLYIIOP0109 WARN SSL socket is required by server but secure connections have not been configured
WFLYIIOP0110 java.lang.IllegalStateException Client requires SSL but server does not support it
WFLYIIOP0111 java.lang.String SSL has not been configured but ssl-port property has been specified - the connection will use clear-text protocol
WFLYIIOP0113 org.jboss.as.controller.OperationFailedException Authentication context has been defined but it is ineffective because the security initializer is not set to 'elytron'
WFLYIIOP0114 java.lang.String Elytron security initializer not supported in previous iiop-openjdk versions and can't be converted
WFLYIIOP0115 java.lang.IllegalStateException No IIOP socket bindings have been configured
WFLYIIOP0117 WARN CLEARTEXT in IIOP subsystem won't be used because server-requires-ssl parameter have been set to true
WFLYIIOP0118 java.lang.IllegalStateException Legacy security is no longer supported.
WFLYIIOP0119 org.jboss.as.controller.OperationFailedException The use of security realms at runtime is unsupported.
WFLYIIOP0120 org.jboss.as.controller.OperationFailedException The use of security domains at runtime is unsupported.

WFLYIM

Code Level Return Type Message
WFLYIM0000 java.util.zip.ZipException Zip entry %s is outside of the target dir %s.
WFLYIM0000 java.util.zip.ZipException The structure of directories and files in the .zip file is invalid. The '%s' directory cannot be found as a second-level entry in the extracted .zip file.
WFLYIM0001 org.jboss.as.controller.OperationFailedException There is an installation prepared and ready to be applied. The current prepared installation can be discarded by using the 'clean' operation.
WFLYIM0002 java.lang.RuntimeException Invalid status change found for the artifact: '%s'
WFLYIM0003 java.lang.RuntimeException Invalid status change found for the configuration change: '%s'
WFLYIM0004 org.jboss.as.controller.OperationFailedException Channel name is mandatory.
WFLYIM0005 org.jboss.as.controller.OperationFailedException No repositories have been defined in the '%s' channel.
WFLYIM0006 org.jboss.as.controller.OperationFailedException The '%s' repository in the channel does not have its URL defined.
WFLYIM0007 org.jboss.as.controller.OperationFailedException The repository URL '%s' for '%s' channel is invalid.
WFLYIM0008 org.jboss.as.controller.OperationFailedException The '%s' repository in the channel does not have its ID defined.
WFLYIM0009 org.jboss.as.controller.OperationFailedException The manifest GAV coordinate '%s' for '%s' channel is invalid.
WFLYIM0010 org.jboss.as.controller.OperationFailedException The manifest URL '%s' for '%s' channel is invalid.
WFLYIM0011 org.jboss.as.controller.OperationFailedException You cannot use the 'local-cache' option when the 'no-resolve-local-cache' option is enabled.
WFLYIM0012 org.jboss.as.controller.OperationFailedException You cannot use the 'maven-repo-file' option with the 'repositories' option because they are mutually exclusive.
WFLYIM0013 org.jboss.as.controller.OperationFailedException Invalid format for the repository URL: '%s'
WFLYIM0014 org.jboss.as.controller.OperationFailedException You cannot use the 'work-dir' option with the 'repositories' or 'maven-repo-file' options because they are mutually exclusive.
WFLYIM0015 org.jboss.as.controller.OperationFailedException Channel with name '%s' cannot be found.
WFLYIM0016 org.jboss.as.controller.OperationFailedException The manifest maven coordinates for '%s' are invalid. The expected maven coordinates for this manifest are GA (GroupId:ArtifactId).
WFLYIM0017 org.jboss.as.controller.OperationFailedException The manifest maven coordinates for '%s' are invalid. The expected maven coordinates for this manifest are GAV (GroupId:ArtifactId:Version) where Version is optional.
WFLYIM0018 java.lang.IllegalStateException Installation Manager Service is down.
WFLYIM0019 org.jboss.as.controller.OperationFailedException Operation has been cancelled.
WFLYIM0020 org.jboss.as.controller.OperationFailedException No custom patches installed found for the specified manifest maven coordinates: '%s'

WFLYIO

Code Level Return Type Message
WFLYIO001 INFO Worker '%s' has auto-configured to %d IO threads with %d max task threads based on your %d available processors
WFLYIO002 INFO Worker '%s' has auto-configured to %d IO threads based on your %d available processors
WFLYIO003 INFO Worker '%s' has auto-configured to %d max task threads based on your %d available processors
WFLYIO004 WARN Worker '%s' would auto-configure to %d max task threads based on %d available processors, however your system does not have enough file descriptors configured to support this configuration. It is likely you will experience application degradation unless you increase your file descriptor limit.
WFLYIO005 WARN Your system is configured with %d file descriptors, but your current application server configuration will require a minimum of %d (and probably more than that); attempting to adjust, however you should expect stability problems unless you increase this number
WFLYIO006 java.lang.String no metrics available
WFLYIO007 org.jboss.as.controller.OperationFailedException Unexpected bind address conflict in resource "%s" when attempting to establish binding for destination %s to %s: a binding of %s already existed
WFLYIO008 WARN The stack-size value of %d bytes for IO worker %s is low and may result in problems. A value of at least 150,000 is recommended.

WFLYJAR

Code Level Return Type Message
WFLYJAR0000 java.lang.String Set system property jboss.bind.address to the given value
WFLYJAR0000 java.lang.String Set system property jboss.bind.address. to the given value
WFLYJAR0000 java.lang.String Set a system property
WFLYJAR0000 java.lang.String Display this message and exit
WFLYJAR0000 java.lang.String Load system properties from the given url
WFLYJAR0000 java.lang.String Set system property jboss.default.multicast.address to the given value
WFLYJAR0000 java.lang.String Print version and exit
WFLYJAR0000 java.lang.String Activate the SecurityManager
WFLYJAR0000 java.lang.String Set a security property
WFLYJAR0000 java.lang.String Path to deployment artifact (war,jar,ear or exploded deployment dir) to deploy in hollow jar
WFLYJAR0000 java.lang.String Path to directory in which the server is installed. By default the server is installed in TEMP directory.
WFLYJAR0000 java.lang.String Display the content of the Galleon configuration used to build this bootable JAR
WFLYJAR0000 java.lang.String Path to a CLI script to execute when starting the Bootable JAR
WFLYJAR0001 DEBUG Shutting down
WFLYJAR0002 DEBUG Server stopped, exiting
WFLYJAR0003 DEBUG Server not yet stopped, waiting
WFLYJAR0004 DEBUG Null controller client, exiting
WFLYJAR0005 java.lang.RuntimeException Unexpected exception while shutting down server
WFLYJAR0006 INFO Deployed %s in server
WFLYJAR0007 INFO Installed server and application in %s, took %sms
WFLYJAR0008 INFO Server options: %s
WFLYJAR0009 DEBUG Deleting %s dir
WFLYJAR0010 java.lang.Exception Not an hollow jar, deployment already exists
WFLYJAR0011 java.lang.RuntimeException Unknown argument %s
WFLYJAR0012 java.lang.RuntimeException File %s doesn't exist
WFLYJAR0013 java.lang.RuntimeException Invalid argument %s, no value provided
WFLYJAR0014 java.lang.IllegalStateException The server is stopping and invocations on the ModelControllerClient are not available
WFLYJAR0015 java.lang.IllegalStateException The server is reloading and invocations on the ModelControllerClient are not yet available
WFLYJAR0016 java.lang.IllegalStateException The server is stopped and invocations on the ModelControllerClient are not available
WFLYJAR0017 java.lang.RuntimeException Cannot start server
WFLYJAR0018 java.lang.RuntimeException Cannot load module %s from: %s
WFLYJAR0019 WARN Cannot restart server, exiting
WFLYJAR0020 WARN Can't delete %s. Exception %s
WFLYJAR0021 WARN Cannot register JBoss Modules MBeans, %s
WFLYJAR0022 java.lang.IllegalStateException The PID file %s already exists. This may result in the install directory "%s" not being properly deleted.
WFLYJAR0023 WARN Failed to start the cleanup processor. This may result in the install directory "%s" not being properly deleted.
WFLYJAR0024 WARN The container has not properly shutdown within %ds. This may result in the install directory "%s" not being properly deleted.
WFLYJAR0025 DEBUG Failed to initialize a security provider. Reason: %s

WFLYJCA

Code Level Return Type Message
WFLYJCA0001 INFO Bound data source [%s]
WFLYJCA0002 INFO Bound Jakarta Connectors %s [%s]
WFLYJCA0003 WARN Unable to instantiate driver class "%s": %s
WFLYJCA0004 INFO Deploying JDBC-compliant driver %s (version %d.%d)
WFLYJCA0005 INFO Deploying non-JDBC-compliant driver %s (version %d.%d)
WFLYJCA0006 INFO Registered admin object at %s
WFLYJCA0007 INFO Registered connection factory %s
WFLYJCA0009 INFO Starting %s Subsystem (%s)
WFLYJCA0010 INFO Unbound data source [%s]
WFLYJCA0011 INFO Unbound Jakarta Connectors %s [%s]
WFLYJCA0012 WARN in standalone -ds.xml deployments aren't supported: Ignoring %s
WFLYJCA0015 org.jboss.as.controller.OperationFailedException the attribute driver-name (%s) cannot be different from driver resource name (%s)
WFLYJCA0016 WARN Method %s on DataSource class %s not found. Ignoring
WFLYJCA0017 DEBUG Forcing ironjacamar.xml descriptor to null
WFLYJCA0018 INFO Started Driver service with driver-name = %s
WFLYJCA0019 INFO Stopped Driver service with driver-name = %s
WFLYJCA0020 WARN Unsupported selector's option: %s
WFLYJCA0021 WARN Unsupported policy's option: %s
WFLYJCA0022 org.jboss.msc.service.StartException Failed to start JGroups channel %s for distributed workmanager %s
WFLYJCA0023 org.jboss.as.controller.OperationFailedException Cannot find WorkManager %s or it isn't a distributed workmanager. Only DWM can override configurations
WFLYJCA0024 org.jboss.msc.service.StartException Failed to start JGroups transport for distributed workmanager %s
WFLYJCA0025 org.jboss.as.controller.OperationFailedException Unsupported selector's option: %s
WFLYJCA0026 org.jboss.as.controller.OperationFailedException Unsupported policy's option: %s
WFLYJCA0027 WARN No ironjacamar.security defined for %s
WFLYJCA0028 WARN @ConnectionFactoryDefinition will have limited management: %s
WFLYJCA0029 WARN @AdministeredObjectDefinition will have limited management: %s
WFLYJCA0030 org.jboss.jca.deployers.common.DeployException unable to deploy
WFLYJCA0031 org.jboss.jca.deployers.common.DeployException unable to validate and deploy ds or xads
WFLYJCA0033 org.jboss.msc.service.StartException Error during the deployment of %s
WFLYJCA0034 java.lang.String Unable to instantiate driver class "%s". See log (WARN) for more details
WFLYJCA0035 java.lang.IllegalStateException Specified driver version doesn't match with actual driver version
WFLYJCA0036 java.lang.String Failed to create %s instance for [%s]%n reason: %s
WFLYJCA0037 java.lang.String failed to get metrics: %s
WFLYJCA0039 org.jboss.jca.deployers.common.DeployException failed to get url delimiter
WFLYJCA0040 java.lang.String failed to invoke operation: %s
WFLYJCA0041 java.lang.String Failed to load module for driver [%s]
WFLYJCA0042 java.lang.IllegalArgumentException failed to match pool. Check JndiName: %s
WFLYJCA0043 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse service xml [%s]
WFLYJCA0044 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process RA child archives for [%s]
WFLYJCA0045 java.lang.String failed to set attribute: %s
WFLYJCA0046 org.jboss.msc.service.StartException Failed to start RA deployment [%s]
WFLYJCA0047 java.lang.IllegalStateException Connection is not valid
WFLYJCA0049 java.lang.IllegalStateException Non-explicit JNDI bindings not supported
WFLYJCA0050 java.lang.String no metrics available
WFLYJCA0051 java.lang.IllegalArgumentException %s should be an annotation
WFLYJCA0052 java.lang.String %s is null
WFLYJCA0053 java.lang.String %s service [%s] is already started
WFLYJCA0054 java.lang.String %s service [%s] is not available
WFLYJCA0056 java.lang.IllegalStateException Service not started
WFLYJCA0058 java.lang.IllegalArgumentException %s is undefined
WFLYJCA0061 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to load native libraries
WFLYJCA0064 org.jboss.as.server.deployment.DeploymentUnitProcessingException Exception deploying datasource %s
WFLYJCA0065 java.lang.String No DataSource exists at address %s
WFLYJCA0066 java.lang.IllegalStateException Unknown attribute %s
WFLYJCA0067 java.lang.IllegalStateException Unknown operation %s
WFLYJCA0069 org.jboss.as.controller.OperationFailedException At least one xa-datasource-property is required for an xa-datasource
WFLYJCA0072 org.jboss.jca.deployers.common.DeployException Deployment %s failed
WFLYJCA0073 java.lang.String Failed to load module for RA [%s] Cause: %s
WFLYJCA0074 java.lang.NoSuchMethodException Method %s not found
WFLYJCA0075 java.lang.NoSuchMethodException Field %s not found
WFLYJCA0076 java.lang.IllegalArgumentException Unknown property resolution for property %s
WFLYJCA0077 org.jboss.as.controller.OperationFailedException At least one of ARCHIVE or MODULE is required
WFLYJCA0078 java.lang.String Rar are supported only in uncompressed form. Failed to load module for RA [%s]
WFLYJCA0079 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to deploy datasource %s because driver is not specified
WFLYJCA0080 org.jboss.as.controller.OperationFailedException RAR '%s' not yet deployed.
WFLYJCA0083 org.jboss.as.server.deployment.DeploymentUnitProcessingException Connection factory interface (%s) is incorrect for resource adapter '%s' while deploying %s
WFLYJCA0084 org.jboss.as.server.deployment.DeploymentUnitProcessingException Admin object declared for JCA 1.0 resource adapter '%s' while deploying %s
WFLYJCA0085 org.jboss.as.server.deployment.DeploymentUnitProcessingException Admin object class (%s) is incorrect for resource adapter '%s' while deploying %s
WFLYJCA0086 WARN Unable to find driver class name in "%s" jar
WFLYJCA0087 ERROR Unable to register recovery: %s (%s)
WFLYJCA0088 java.lang.String Attributes %s rejected. Must be true
WFLYJCA0089 WARN Exception during unregistering deployment
WFLYJCA0090 org.jboss.as.controller.OperationFailedException Jndi name shouldn't include '//' or end with '/'
WFLYJCA0091 WARN -ds.xml file deployments are deprecated. Support may be removed in a future version.
WFLYJCA0092 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYJCA0093 INFO The '%s' operation is deprecated. Use of the 'add' or 'remove' operations is preferred, or if required the 'write-attribute' operation can used to set the deprecated 'enabled' attribute
WFLYJCA0096 ERROR Error during recovery shutdown
WFLYJCA0097 WARN Exception while stopping resource adapter
WFLYJCA0098 INFO Bound non-transactional data source: %s
WFLYJCA0099 INFO Unbound non-transactional data source: %s
WFLYJCA0100 java.lang.UnsupportedOperationException Operation %s is not supported
WFLYJCA0101 org.jboss.as.controller.OperationFailedException Thread pool: %s(type: %s) can not be added for workmanager: %s, only one thread pool is allowed for each type.
WFLYJCA0102 org.jboss.as.controller.OperationFailedException Attribute %s can only be defined if %s is true
WFLYJCA0103 org.jboss.as.controller.OperationFailedException Attribute %s can only be defined if %s is undefined or false
WFLYJCA0104 java.lang.String Subject=%s Subject identity=%s
WFLYJCA0106 INFO Elytron handler handle: %s
WFLYJCA0107 java.lang.SecurityException Execution subject was not provided to the callback handler
WFLYJCA0108 java.lang.IllegalArgumentException Supplied callback doesn't contain a security domain reference
WFLYJCA0109 java.lang.UnsupportedOperationException Callback with security domain is required - use createCallbackHandler(Callback callback) instead
WFLYJCA0110 java.lang.IllegalStateException CredentialSourceSupplier is invalid for DSSecurity
WFLYJCA0111 java.lang.IllegalStateException WorkManager hasn't elytron-enabled flag set accordingly with RA one
WFLYJCA0112 java.lang.IllegalArgumentException Datasource %s is disabled
WFLYJCA0113 ERROR Unexcepted error during worker execution : %s
WFLYJCA0114 org.jboss.as.controller.OperationFailedException Failed to load datasource class: %s
WFLYJCA0115 java.lang.String Module for driver [%s] or one of it dependencies is missing: [%s]
WFLYJCA0116 java.lang.String Failed to load module for RA [%s] - the module or one of its dependencies is missing [%s]
WFLYJCA0117 org.jboss.as.controller.OperationFailedException %s is not a valid %s implementation
WFLYJCA0118 INFO Binding connection factory named %s to alias %s
WFLYJCA0119 INFO Unbinding connection factory named %s to alias %s
WFLYJCA0120 org.jboss.msc.service.StartException Unable to start the data source '%s' because there are no connection factories, either not defined or failed, please check log.
WFLYJCA0121 org.jboss.msc.service.StartException Unable to start the data source '%s' because there is more than one(%s) connection factory defined.
WFLYJCA0122 org.jboss.as.controller.OperationFailedException Thread pool name %s(type: %s) must match the workmanager name %s.
WFLYJCA0123 org.jboss.as.controller.OperationFailedException Connection definition %s from resource adapter %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0124 org.jboss.as.controller.OperationFailedException Datasource %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0125 org.jboss.as.server.deployment.DeploymentUnitProcessingException Datasource %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0126 org.jboss.as.server.deployment.DeploymentUnitProcessingException Connection definition for %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0127 java.lang.IllegalStateException Connection factory %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0128 java.lang.IllegalStateException Legacy security is not available
WFLYJCA0129 org.jboss.as.controller.OperationFailedException Wrong module name %s
WFLYJCA0130 org.jboss.as.controller.OperationFailedException Report directory %s does not exist
WFLYJCA0131 org.jboss.as.controller.OperationFailedException Legacy security attribute %s is no longer supported. Please use Elytron configuration instead
WFLYJCA0132 java.lang.String Legacy security is no longer supported. Please use Elytron configuration instead

WFLYJDR

Code Level Return Type Message
WFLYJDR0000 java.lang.String Display this message and exit
WFLYJDR0000 java.lang.String hostname that the management api is bound to. (default: localhost)
WFLYJDR0000 java.lang.String port that the management api is bound to. (default: 9990)
WFLYJDR0000 java.lang.String Protocol that is used to connect. Can be remote, http or https (default: http)
WFLYJDR0000 java.lang.String Configuration file of the server if it is not running.
WFLYJDR0000 java.lang.String JBoss Diagnostic Reporter (JDR) is a subsystem built to collect information to aid in troubleshooting. The jdr script is a utility for generating JDR reports.
WFLYJDR0007 java.lang.String Could not create zipfile.
WFLYJDR0008 java.lang.String Could not configure JDR. At least one configuration step failed.
WFLYJDR0009 java.lang.String No JDR commands were loaded. Be sure that a valid Plugin class is specified in plugins.properties.
WFLYJDR0011 ERROR Could not find JDR properties file.
WFLYJDR0012 ERROR Could not create JDR properties file at %s

WFLYJMX

Code Level Return Type Message
WFLYJMX-001 java.lang.Error Invalid ObjectName: %s,%s; %s
WFLYJMX-001 java.lang.Error Invalid ObjectName: %s,%s,%s; %s
WFLYJMX0000 java.lang.String entry
WFLYJMX0000 java.lang.String An entry
WFLYJMX0000 java.lang.String The key
WFLYJMX0000 java.lang.String The value
WFLYJMX0000 java.lang.String A map
WFLYJMX0000 java.lang.String The map is indexed by 'key'
WFLYJMX0000 java.lang.String Complex type
WFLYJMX0000 java.lang.String A complex type
WFLYJMX0000 java.lang.String This mbean does not support expressions for attributes or operation parameters, even when supported by the underlying model. Instead the resolved attribute is returned, and the real typed value must be used when writing attributes/invoking operations.
WFLYJMX0000 java.lang.String This mbean supports raw expressions for attributes and operation parameters where supported by the underlying model. If no expression is used, the string representation is converted into the real attribute value.
WFLYJMX0000 java.lang.String To be able to set and read expressions go to %s
WFLYJMX0000 java.lang.String To read resolved values and to write typed attributes and use typed operation parameters go to %s
WFLYJMX0000 java.lang.String This attribute supports expressions
WFLYJMX0000 java.lang.String This attribute does not support expressions
WFLYJMX0000 java.lang.String A composite type representing a property
WFLYJMX0000 java.lang.String The property name
WFLYJMX0000 java.lang.String The property value
WFLYJMX0004 WARN No ObjectName available to unregister
WFLYJMX0005 ERROR Failed to unregister [%s]
WFLYJMX0006 WARN is no longer supporting. should be used instead to allow remote connections via JBoss Remoting.
WFLYJMX0007 javax.management.AttributeNotFoundException Could not find any attribute matching: %s
WFLYJMX0008 javax.management.AttributeNotFoundException Attribute %s is not writable
WFLYJMX0009 java.lang.RuntimeException Could not create ObjectName for address %s from string %s
WFLYJMX0010 javax.management.ReflectionException Could not set %s
WFLYJMX0012 java.lang.IllegalArgumentException %s and %s have different lengths
WFLYJMX0013 javax.management.InvalidAttributeValueException Bad type for '%s'
WFLYJMX0014 java.lang.IllegalArgumentException Invalid key %s for %s
WFLYJMX0015 java.lang.Error Invalid ObjectName: %s; %s
WFLYJMX0017 javax.management.InstanceNotFoundException No MBean found with name %s
WFLYJMX0018 org.jboss.msc.service.StartException Failed to register mbean [%s]
WFLYJMX0019 javax.management.InstanceNotFoundException No operation called '%s'
WFLYJMX0020 javax.management.MBeanException No operation called '%s' at %s
WFLYJMX0022 javax.management.InstanceNotFoundException No registration found for path address %s
WFLYJMX0024 java.lang.RuntimeException Unknown type %s
WFLYJMX0025 java.lang.IllegalArgumentException Unknown value %s
WFLYJMX0026 java.lang.IllegalStateException Need the name parameter for wildcard add
WFLYJMX0029 java.lang.IllegalArgumentException Unknown domain: %s
WFLYJMX0030 java.lang.IllegalArgumentException Expression can not be converted into target type %s
WFLYJMX0031 java.lang.IllegalArgumentException Unknown child %s
WFLYJMX0032 java.lang.IllegalArgumentException ObjectName cannot be null
WFLYJMX0036 java.lang.IllegalStateException There is no handler called '%s'
WFLYJMX0037 javax.management.JMRuntimeException Unauthorized access
WFLYJMX0038 javax.management.JMRuntimeException Not authorized to write attribute: '%s'
WFLYJMX0039 javax.management.JMRuntimeException Not authorized to read attribute: '%s'
WFLYJMX0040 javax.management.JMRuntimeException Not authorized to invoke operation: '%s'
WFLYJMX0041 javax.management.NotCompliantMBeanException You can't create mbeans under the reserved domain '%s'
WFLYJMX0042 javax.management.OperationsException Don't know how to deserialize
WFLYJMX0043 java.lang.UnsupportedOperationException %s is not supported
WFLYJMX0044 java.lang.String You can't register mbeans under the reserved domain '%s'
WFLYJMX0045 java.lang.String You can't unregister mbeans under the reserved domain '%s'
WFLYJMX0046 javax.management.RuntimeOperationsException The ObjectName coming from MBeanRegistration.preRegister() '%s' is in a reserved JMX domain
WFLYJMX0047 ERROR An error happened unregistering the '%s' MBean registered in a reserved JMX domain
WFLYJMX0048 java.lang.UnsupportedOperationException Add notification listener using ObjectName %s is not supported
WFLYJMX0049 java.lang.UnsupportedOperationException Remove notification listener using ObjectName %s is not supported
WFLYJMX0050 java.lang.UnsupportedOperationException Add notification listener using ObjectName %s is not supported
WFLYJMX0051 java.lang.UnsupportedOperationException Remove notification listener using ObjectName %s is not supported

WFLYJPA

Code Level Return Type Message
WFLYJPA0001 WARN Duplicate Persistence Unit definition for %s in application. One of the duplicate persistence.xml should be removed from the application. Application deployment will continue with the persistence.xml definitions from %s used. The persistence.xml definitions from %s will be ignored.
WFLYJPA0002 INFO Read persistence.xml for %s
WFLYJPA0003 INFO Starting %s Service '%s'
WFLYJPA0004 INFO Stopping %s Service '%s'
WFLYJPA0006 ERROR Could not load default persistence provider module.
WFLYJPA0007 ERROR Failed to stop persistence unit service %s
WFLYJPA0010 INFO Starting Persistence Unit (phase %d of 2) Service '%s'
WFLYJPA0011 INFO Stopping Persistence Unit (phase %d of 2) Service '%s'
WFLYJPA0012 WARN Unexpected problem gathering statistics
WFLYJPA0015 java.lang.IllegalStateException Container managed entity manager can only be closed by the container (will happen when @remove method is invoked on containing SFSB)
WFLYJPA0017 java.lang.IllegalStateException Container managed entity manager can only be closed by the container (auto-cleared at tx/invocation end and closed when owning component is closed.)
WFLYJPA0018 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not create instance of adapter class '%s'
WFLYJPA0019 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not deploy application packaged persistence provider '%s'
WFLYJPA0020 java.lang.RuntimeException Couldn't get Hibernate session factory from entity manager
WFLYJPA0021 java.lang.String Cannot inject RESOURCE_LOCAL container managed EntityManagers using @PersistenceContext
WFLYJPA0025 java.lang.RuntimeException Couldn't load %s from Jakarta Persistence modules classloader
WFLYJPA0027 org.jboss.as.server.deployment.DeploymentUnitProcessingException Persistence provider module load error %s (class %s)
WFLYJPA0029 org.jboss.as.server.deployment.DeploymentUnitProcessingException Cannot specify both %s (%s) and %s (%s) in %s for %s
WFLYJPA0030 jakarta.ejb.EJBException Found extended persistence context in SFSB invocation call stack but that cannot be used because the transaction already has a transactional context associated with it. This can be avoided by changing application code, either eliminate the extended persistence context or the transactional context. See JPA spec 2.0 section 7.6.3.1. Scoped persistence unit name=%s, persistence context already in transaction =%s, extended persistence context =%s.
WFLYJPA0031 java.lang.RuntimeException Could not find child '%s' on '%s'
WFLYJPA0032 java.lang.String Class level %s annotation on class %s must provide a %s
WFLYJPA0033 java.lang.String Can't find a persistence unit named %s in %s
WFLYJPA0034 java.lang.IllegalArgumentException Can't find a persistence unit named %s#%s at %s
WFLYJPA0036 java.lang.IllegalStateException An error occurred while getting the transaction associated with the current thread: %s
WFLYJPA0037 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get adapter for persistence provider '%s'
WFLYJPA0038 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to add persistence unit service for %s
WFLYJPA0040 java.lang.String Failed to parse %s
WFLYJPA0041 java.lang.RuntimeException Can only inject from a Hibernate EntityManagerFactoryImpl
WFLYJPA0043 java.lang.IllegalArgumentException Persistence unit name (%s) contains illegal '%s' character
WFLYJPA0044 java.lang.IllegalArgumentException jboss.as.jpa.scopedname hint (%s) contains illegal '%s' character
WFLYJPA0048 java.lang.RuntimeException Persistence provider adapter module (%s) has more than one adapter
WFLYJPA0053 java.lang.RuntimeException Internal %s error, null %s passed in
WFLYJPA0057 jakarta.persistence.PersistenceException PersistenceProvider '%s' not found
WFLYJPA0058 java.lang.RuntimeException Could not find relative path: %s
WFLYJPA0059 java.lang.String %s injection target is invalid. Only setter methods are allowed: %s
WFLYJPA0060 jakarta.persistence.TransactionRequiredException Transaction is required to perform this operation (either use a transaction or extended persistence context)
WFLYJPA0061 java.lang.IllegalArgumentException Persistence unitName was not specified and there are %d persistence unit definitions in application deployment %s. Either change the application deployment to have only one persistence unit definition or specify the unitName for each reference to a persistence unit.
WFLYJPA0062 java.lang.RuntimeException Could not create instance of persistence provider class %s
WFLYJPA0063 java.lang.RuntimeException internal error, the number of stateful session beans (%d) associated with an extended persistence context (%s) cannot be a negative number.
WFLYJPA0064 java.lang.IllegalStateException Jakarta Transactions transaction already has a 'SynchronizationType.UNSYNCHRONIZED' persistence context (EntityManager) joined to it but a component with a 'SynchronizationType.SYNCHRONIZED' is now being used. Change the calling component code to join the persistence context (EntityManager) to the transaction or change the called component code to also use 'SynchronizationType.UNSYNCHRONIZED'. See JPA spec 2.1 section 7.6.4.1. Scoped persistence unit name=%s.
WFLYJPA0065 java.lang.UnsupportedOperationException Resources of type %s cannot be registered
WFLYJPA0066 java.lang.UnsupportedOperationException Resources of type %s cannot be removed
WFLYJPA0067 java.lang.RuntimeException Classloader '%s' has more than one Persistence provider adapter
WFLYJPA0069 org.jboss.as.server.deployment.DeploymentUnitProcessingException Persistence provider adapter module load error %s
WFLYJPA0070 java.lang.IllegalStateException A container-managed extended persistence context can only be initiated within the scope of a stateful session bean (persistence unit '%s').
WFLYJPA0071 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment '%s' specified more than one Hibernate Search module name ('%s','%s')
WFLYJPA0073 java.lang.IllegalStateException Transformation of class %s failed
WFLYJPA0074 org.jboss.as.server.deployment.DeploymentUnitProcessingException Persistence provider integrator module load error for %s

WFLYJSF

Code Level Return Type Message
WFLYJSF0001 WARN WildFlyConversationAwareViewHandler was improperly initialized. Expected ViewHandler parent.
WFLYJSF0002 ERROR Could not load Jakarta Server Faces managed bean class: %s
WFLYJSF0003 ERROR Jakarta Server Faces managed bean class %s has no default constructor
WFLYJSF0004 ERROR Failed to parse %s, Jakarta Server Faces artifacts defined in this file will not be available
WFLYJSF0005 WARN Unknown Jakarta Server Faces version '%s'. Default version '%s' will be used instead.
WFLYJSF0006 WARN Jakarta Server Faces version slot '%s' is missing from module %s
WFLYJSF0007 INFO Activated the following Jakarta Server Faces Implementations: %s
WFLYJSF0008 java.lang.String Failed to load annotated class: %s
WFLYJSF0009 java.lang.String Annotation %s in class %s is only allowed on classes
WFLYJSF0013 java.lang.String @ManagedBean is only allowed at class level %s
WFLYJSF0014 org.jboss.as.server.deployment.DeploymentUnitProcessingException Default Jakarta Server Faces implementation slot '%s' is invalid
WFLYJSF0016 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to inject Jakarta Server Faces from slot %s
WFLYJSF0017 DEBUG Faces 1.2 classes detected. Using org.jboss.as.jsf.injection.weld.legacy.WeldApplicationFactoryLegacy.
WFLYJSF0018 DEBUG Faces 1.2 classes not detected. Using org.jboss.as.jsf.injection.weld.WeldApplicationFactory.
WFLYJSF0019 INFO Jakarta Server Faces artifact %s with class %s has no default constructor so it will not be considered for injection
WFLYJSF0020 WARN Lazy bean validation was enabled. This can result in missing @PreDestroy events when distributed web sessions expire.

WFLYJWT

Code Level Return Type Message
WFLYJWT0001 INFO Activating MicroProfile JWT Subsystem
WFLYJWT0002 WARN @LoginConfig annotation detected on invalid target "%s".
WFLYJWT0003 org.jboss.as.server.deployment.DeploymentUnitProcessingException No `authMethod` specified on the @LoginConfig annotation.

WFLYLOG

Code Level Return Type Message
WFLYLOG-001 java.lang.IllegalArgumentException Expected '%s' or '%s' next in filter expression
WFLYLOG0006 ERROR Failed to close resource %s
WFLYLOG0007 WARN The attribute %s could not be set as it is not a configurable property value.
WFLYLOG0008 java.lang.String The path manager service does not appear to be started. Any changes may be lost as a result of this.
WFLYLOG0010 WARN Logging profile '%s' was specified for deployment '%s' but was not found. Using system logging configuration.
WFLYLOG0011 WARN The configuration file in '%s' appears to be a J.U.L. configuration file. The log manager does not allow this type of configuration file.
WFLYLOG0012 WARN Replacing handler '%s' during add operation. Either the handler type or the module name differs from the initial configuration.
WFLYLOG0013 WARN A configurator class, '%s', is not a known configurator and will be replaced.
WFLYLOG0014 ERROR The log context (%s) could not be removed for deployment %s
WFLYLOG0015 WARN The per-logging deployment property (%s) has been deprecated. Please use the %s attribute to enable/disable per-deployment logging.
WFLYLOG0016 WARN The per-logging deployment property (%s) is being ignored because the attribute %s has been set to ignore configuration files in the deployment %s.
WFLYLOG0019 java.lang.IllegalArgumentException Failed to load module '%s' for %s '%s'
WFLYLOG0021 java.lang.String Class '%s' could not be found.
WFLYLOG0023 java.lang.String Handler %s is already assigned.
WFLYLOG0025 java.lang.String Filter %s is invalid
WFLYLOG0026 java.lang.String Log level %s is invalid.
WFLYLOG0027 java.lang.String Overflow action %s is invalid.
WFLYLOG0028 java.lang.String Invalid size %s
WFLYLOG0035 java.lang.String Logger '%s' was not found.
WFLYLOG0039 java.lang.String An absolute path (%s) cannot be specified for relative-to.
WFLYLOG0041 java.lang.String The suffix (%s) is invalid. A suffix must be a valid date format.
WFLYLOG0042 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to configure logging using '%s' configuration file.
WFLYLOG0043 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error occurred while searching for logging configuration files.
WFLYLOG0044 org.jboss.as.controller.OperationFailedException Handler %s is attached to the following handlers and cannot be removed; %s
WFLYLOG0045 org.jboss.as.controller.OperationFailedException Handler %s is attached to the following loggers and cannot be removed; %s
WFLYLOG0046 java.lang.String Cannot add handler (%s) to itself
WFLYLOG0047 java.lang.IllegalStateException The handler is closed, cannot publish to a closed handler
WFLYLOG0048 java.lang.String Configuration for handler '%s' could not be found.
WFLYLOG0049 java.lang.String Configuration for logger '%s' could not be found.
WFLYLOG0050 java.lang.UnsupportedOperationException Method %s on class %s is not supported
WFLYLOG0051 java.lang.RuntimeException Failed to write configuration file %s
WFLYLOG0061 java.lang.String Formatter '%s' is not found
WFLYLOG0070 java.lang.IllegalArgumentException Truncated filter expression string
WFLYLOG0071 java.lang.IllegalArgumentException Invalid escape found in filter expression string
WFLYLOG0072 org.jboss.as.controller.OperationFailedException Filter '%s' is not found
WFLYLOG0073 java.lang.IllegalArgumentException Expected identifier next in filter expression
WFLYLOG0074 java.lang.IllegalArgumentException Expected string next in filter expression
WFLYLOG0075 java.lang.IllegalArgumentException Expected '%s' next in filter expression
WFLYLOG0076 java.lang.IllegalArgumentException Unexpected end of filter expression
WFLYLOG0078 java.lang.IllegalStateException The logging subsystem requires the log manager to be org.jboss.logmanager.LogManager. The subsystem has not be initialized and cannot be used. To use JBoss Log Manager you must add the system property "java.util.logging.manager" and set it to "org.jboss.logmanager.LogManager"
WFLYLOG0079 java.lang.RuntimeException Failed to read the log file '%s'
WFLYLOG0080 org.jboss.as.controller.registry.Resource$NoSuchResourceException File '%s' was not found and cannot be found in the %s directory.
WFLYLOG0081 org.jboss.as.controller.OperationFailedException File '%s' is not allowed to be read.
WFLYLOG0082 java.lang.String The suffix (%s) can not contain seconds or milliseconds.
WFLYLOG0083 org.jboss.as.controller.OperationFailedException Path '%s' is a directory and cannot be used as a log file.
WFLYLOG0084 java.lang.UnsupportedOperationException Resources of type %s cannot be registered
WFLYLOG0085 java.lang.UnsupportedOperationException Resources of type %s cannot be removed
WFLYLOG0086 java.lang.IllegalArgumentException Could not determine deployment name from the address %s.
WFLYLOG0087 ERROR Failed to process logging directory %s. Log files cannot be listed.
WFLYLOG0088 ERROR Could not determine %s had any children resources.
WFLYLOG0089 WARN The log manager check was skipped and the log manager system property, "java.util.logging.manager", does not appear to be set to "org.jboss.logmanager.LogManager". The current value is "%s". Some behavior of the logged output such as MDC and NDC may not work as expected.
WFLYLOG0090 WARN The following path expressions could not be resolved while attempting to determine which log files are available to be read: %s
WFLYLOG0091 org.jboss.as.controller.OperationFailedException Exception output type %s is invalid.
WFLYLOG0092 org.jboss.as.controller.OperationFailedException Invalid type found. Expected %s but found %s.
WFLYLOG0093 org.jboss.as.controller.OperationFailedException Failed to configure SSL context for %s %s.
WFLYLOG0094 org.jboss.as.controller.OperationFailedException Formatter name cannot end with '-wfcore-pattern-formatter'
WFLYLOG0095 org.jboss.as.controller.OperationFailedException The name %s cannot be used as a filter name as it is a reserved filter name. Reserved names are: %s
WFLYLOG0096 org.jboss.as.controller.OperationFailedException The name %s cannot be used as a filter name as it starts with an invalid character %s
WFLYLOG0097 org.jboss.as.controller.OperationFailedException The name %s cannot be used as a filter name as it contains an invalid character %s
WFLYLOG0099 WARN Usage of a log4j appender (%s) found in a custom-handler. Support for using appenders as custom handlers has been deprecated and will be removed in a future release.
WFLYLOG0100 WARN Usage of a log4j configuration file (%s) was found in deployment %s. Support for log4j configuration files in deployments has been deprecated and will be removed in a future release.

WFLYMAIL

Code Level Return Type Message
WFLYMAIL0001 INFO Bound mail session [%s]
WFLYMAIL0002 INFO Unbound mail session [%s]
WFLYMAIL0003 DEBUG Removed mail session [%s]
WFLYMAIL0004 org.jboss.msc.service.StartException No outbound socket binding configuration '%s' is available.
WFLYMAIL0009 WARN Host name [%s] could not be resolved!

WFLYMETRICS

Code Level Return Type Message
WFLYMETRICS0001 INFO Activating Base Metrics Subsystem
WFLYMETRICS0002 java.lang.IllegalArgumentException Failed to initialize metrics from JMX MBeans
WFLYMETRICS0003 WARN Unable to read attribute %s on %s: %s.
WFLYMETRICS0004 WARN Unable to convert attribute %s on %s to Double value.
WFLYMETRICS0005 ERROR Malformed name.

WFLYMMTREXT

Code Level Return Type Message
WFLYMMTREXT0001 INFO Activating Micrometer Subsystem
WFLYMMTREXT0002 INFO Micrometer Subsystem is processing deployment
WFLYMMTREXT0003 DEBUG The deployment does not have Jakarta Contexts and Dependency Injection enabled. Skipping Micrometer integration.
WFLYMMTREXT0004 DEBUG Deployment %s requires use of the '%s' capability but it is not currently registered
WFLYMMTREXT0005 WARN Unable to read attribute %s on %s: %s.
WFLYMMTREXT0006 WARN Unable to convert attribute %s on %s to Double value.
WFLYMMTREXT0007 ERROR Malformed name.
WFLYMMTREXT0008 java.lang.IllegalArgumentException Failed to initialize metrics from JMX MBeans
WFLYMMTREXT0009 java.lang.IllegalArgumentException An unsupported metric type was found: %s
WFLYMMTREXT0010 INFO Not activating Micrometer Subsystem
WFLYMMTREXT0011 WARN Micrometer has been enabled, but no endpoint has been configured. A No-op metrics registry has been configured.

WFLYMODCLS

Code Level Return Type Message
WFLYMODCLS0001 ERROR Error adding metrics.
WFLYMODCLS0004 ERROR Mod_cluster requires Advertise but Multicast interface is not available.
WFLYMODCLS0005 WARN No mod_cluster load balance factor provider specified for proxy '%s'! Using load balance factor provider with constant factor of '1'.
WFLYMODCLS0006 ERROR Error applying properties to load metric class '%s'. Metric will not be loaded.
WFLYMODCLS0011 java.lang.String Virtual host '%s' or context '%s' not found.
WFLYMODCLS0019 java.lang.IllegalArgumentException '%s' is not a valid value for excluded-contexts.
WFLYMODCLS0021 WARN Value 'ROOT' for excluded-contexts is deprecated, to exclude the root context use '/' instead.
WFLYMODCLS0023 ERROR Error loading module '%s' to load custom metric from.
WFLYMODCLS0025 WARN The '%s' element is no longer supported and will be ignored.
WFLYMODCLS0026 WARN Attribute '%s' of element '%s' is no longer supported and will be ignored.

WFLYMPFTEXT

Code Level Return Type Message
WFLYMPFTEXT0001 INFO Activating MicroProfile Fault Tolerance subsystem.
WFLYMPFTEXT0002 INFO MicroProfile Fault Tolerance subsystem with use '%s' metrics provider.

WFLYMPHEALTH

Code Level Return Type Message
WFLYMPHEALTH0001 INFO Activating MicroProfile Health Subsystem
WFLYMPHEALTH0002 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered
WFLYMPHEALTH0003 WARN Reporting health down status: %s

WFLYMPMETRICS

Code Level Return Type Message
WFLYMPMETRICS0010 org.jboss.as.controller.OperationFailedException The migrate operation cannot be performed. The server must be in admin-only mode.
WFLYMPMETRICS0011 java.lang.String Migration failed. See results for more details.

WFLYMPOAI

Code Level Return Type Message
WFLYMPOAI0001 INFO Activating MicroProfile OpenAPI Subsystem
WFLYMPOAI0002 java.lang.IllegalArgumentException Failed to load OpenAPI '%s' from deployment '%s'
WFLYMPOAI0003 WARN MicroProfile OpenAPI endpoint already registered for host '%s'. Skipping OpenAPI documentation of '%s'.
WFLYMPOAI0004 INFO Registered MicroProfile OpenAPI endpoint '%s' for host '%s'
WFLYMPOAI0005 INFO Unregistered MicroProfile OpenAPI endpoint '%s' for host '%s'
WFLYMPOAI0006 WARN §5.1 of MicroProfile OpenAPI specification requires that the endpoint be accessible via %2$s, but no such listeners exists for server '%1$s'.
WFLYMPOAI0007 WARN §5.1 of MicroProfile OpenAPI specification requires documentation to be available at '%3$s', but '%1$s' is configured to use '%2$s'
WFLYMPOAI0008 INFO MicroProfile OpenAPI documentation disabled for '%s'

WFLYMPTEL

Code Level Return Type Message
WFLYMPTEL0001 INFO Activating MicroProfile Telemetry Subsystem
WFLYMPTEL0002 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered

WFLYMSGAMQ

Code Level Return Type Message
WFLYMSGAMQ0001 INFO AIO wasn't located on this platform, it will fall back to using pure Java NIO.
WFLYMSGAMQ0002 INFO Bound messaging object to jndi name %s
WFLYMSGAMQ0003 ERROR Exception while stopping Jakarta Messaging server
WFLYMSGAMQ0004 WARN Failed to destroy %s: %s
WFLYMSGAMQ0005 ERROR %s caught exception attempting to revert operation %s at address %s
WFLYMSGAMQ0006 INFO Unbound messaging object to jndi name %s
WFLYMSGAMQ0007 ERROR Could not close file %s
WFLYMSGAMQ0008 WARN Failed to unbind messaging object bound to jndi name %s in %d %s
WFLYMSGAMQ0011 INFO Started %s %s
WFLYMSGAMQ0012 INFO Stopped %s %s
WFLYMSGAMQ0015 WARN Ignoring %s property that is not a known property for pooled connection factory.
WFLYMSGAMQ0016 INFO Registered HTTP upgrade for %s protocol handled by %s acceptor
WFLYMSGAMQ0018 WARN No connectors were explicitly defined for the pooled connection factory %s. Using %s as the connector.
WFLYMSGAMQ0022 java.lang.IllegalArgumentException Cannot bind a null or empty string as jndi name
WFLYMSGAMQ0025 java.lang.IllegalArgumentException Cannot unbind a null or empty string as jndi name
WFLYMSGAMQ0026 java.lang.String A child resource of type %1$s already exists; the messaging subsystem only allows a single resource of type %1$s
WFLYMSGAMQ0027 java.lang.IllegalStateException Connector %s not defined
WFLYMSGAMQ0028 org.jboss.msc.service.StartException Failed to create %s
WFLYMSGAMQ0029 org.jboss.msc.service.StartException Failed to find SocketBinding for broadcast binding: %s
WFLYMSGAMQ0030 org.jboss.msc.service.StartException Failed to find SocketBinding for connector: %s
WFLYMSGAMQ0031 org.jboss.msc.service.StartException Failed to find SocketBinding for discovery binding: %s
WFLYMSGAMQ0032 java.lang.RuntimeException Failed to shutdown %s server
WFLYMSGAMQ0033 org.jboss.msc.service.StartException Failed to start service
WFLYMSGAMQ0036 java.lang.String Illegal value %s for element %s
WFLYMSGAMQ0037 java.lang.UnsupportedOperationException Resource is immutable
WFLYMSGAMQ0038 java.lang.String %s is invalid
WFLYMSGAMQ0039 java.lang.IllegalStateException Attribute %s has unexpected type %s
WFLYMSGAMQ0042 java.lang.IllegalStateException Service %s is not in state %s, it is in state %s
WFLYMSGAMQ0043 java.lang.String JNDI name %s is already registered
WFLYMSGAMQ0045 java.lang.String %s is required
WFLYMSGAMQ0046 java.lang.String Either %s or %s is required
WFLYMSGAMQ0047 java.lang.IllegalArgumentException %s is null
WFLYMSGAMQ0050 java.lang.IllegalStateException Read support for attribute %s was not properly implemented
WFLYMSGAMQ0052 java.lang.IllegalStateException Support for operation %s was not properly implemented
WFLYMSGAMQ0053 java.lang.UnsupportedOperationException Runtime handling for %s is not implemented
WFLYMSGAMQ0054 org.jboss.as.controller.OperationFailedException No ActiveMQ Server is available under name %s
WFLYMSGAMQ0055 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not parse file %s
WFLYMSGAMQ0056 java.lang.IllegalStateException Handler cannot handle operation %s
WFLYMSGAMQ0057 java.lang.String No message destination registered at address %s
WFLYMSGAMQ0058 java.lang.IllegalStateException SecurityDomainContext has not been set
WFLYMSGAMQ0060 org.jboss.as.controller.OperationFailedException Failed to recover %s
WFLYMSGAMQ0063 java.lang.UnsupportedOperationException Resources of type %s cannot be registered
WFLYMSGAMQ0064 java.lang.UnsupportedOperationException Resources of type %s cannot be removed
WFLYMSGAMQ0066 java.lang.String Resource at the address %s can not be managed, the server is in backup mode
WFLYMSGAMQ0067 org.jboss.as.controller.OperationFailedException The broadcast group '%s' defines reference to nonexistent connector '%s'. Available connectors '%s'.
WFLYMSGAMQ0068 jakarta.jms.IllegalStateRuntimeException It is not permitted to call this method on injected JMSContext (see Jakarta Messaging 2.0 spec, §12.4.5).
WFLYMSGAMQ0071 WARN There is no resource matching the expiry-address %s for the address-settings %s, expired messages from destinations matching this address-setting will be lost!
WFLYMSGAMQ0072 WARN There is no resource matching the dead-letter-address %s for the address-settings %s, undelivered messages from destinations matching this address-setting will be lost!
WFLYMSGAMQ0073 java.lang.String Can not remove JNDI name %s. The resource must have at least one JNDI name
WFLYMSGAMQ0075 INFO AIO wasn't located on this platform, it will fall back to using pure Java NIO. Your platform is Linux, install LibAIO to enable the AIO journal and achieve optimal performance.
WFLYMSGAMQ0076 org.jboss.as.controller.OperationFailedException Parameter %s contains duplicate elements [%s]
WFLYMSGAMQ0077 org.jboss.as.controller.OperationFailedException Can not remove unknown entry %s
WFLYMSGAMQ0078 org.jboss.as.controller.OperationFailedException Only one %s child resource is allowed, found children: %s
WFLYMSGAMQ0079 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYMSGAMQ0080 org.jboss.msc.service.StartException Discovery group %s is not defined
WFLYMSGAMQ0081 org.jboss.msc.service.StartException Unsupported type of broadcast group configuration for legacy resource: %s
WFLYMSGAMQ0082 org.jboss.msc.service.StartException Unsupported type of connector factory for legacy resource: %s
WFLYMSGAMQ0083 org.jboss.as.controller.OperationFailedException The %s operation can not be performed: the server must be in %s mode
WFLYMSGAMQ0084 org.jboss.as.controller.OperationFailedException The server does not define any in-vm connector. One is required to be able to import a journal
WFLYMSGAMQ0085 org.jboss.as.controller.OperationFailedException Unable to load class %s from module %s
WFLYMSGAMQ0086 org.jboss.as.controller.OperationFailedException Unable to load module %s
WFLYMSGAMQ0087 org.jboss.as.controller.OperationFailedException Unable to load connector service factory class: %s
WFLYMSGAMQ0088 org.jboss.as.controller.OperationFailedException %s is an invalid value for parameter %s, it should be multiple of %s
WFLYMSGAMQ0089 WARN Resource at %s is not correctly configured: when its attribute %s is defined, the other attributes %s will not be taken into account
WFLYMSGAMQ0090 java.lang.IllegalArgumentException The Elytron security domain cannot be null
WFLYMSGAMQ0091 DEBUG Failed to authenticate username %s. Exception message: %s
WFLYMSGAMQ0092 DEBUG Failed to authenticate username %s: cannot verify username/password pair
WFLYMSGAMQ0093 DEBUG Failed to authorize username %s: missing permissions
WFLYMSGAMQ0094 WARN Unable to detect database dialect from connection metadata or JDBC driver name. Please configure this manually using the 'journal-database' property in your configuration. Known database dialect strings are %s
WFLYMSGAMQ0095 WARN Multiple client-mapping found in [%s] socket binding used by ActiveMQ [%s] transport configuration. Using address: [host: %s, port %s]
WFLYMSGAMQ0096 org.jboss.as.controller.OperationFailedException The %s operation can not be performed on a JDBC store journal
WFLYMSGAMQ0097 org.jboss.as.controller.OperationFailedException There is no socket-binding or outbound-socket-binding configured with the name %s
WFLYMSGAMQ0098 org.jboss.as.controller.OperationFailedException Unable to load module %s - the module or one of its dependencies is missing [%s]
WFLYMSGAMQ0099 org.jboss.msc.service.StartException Creating the remote destination %s failed with error %s
WFLYMSGAMQ0100 java.lang.RuntimeException Deleting the remote destination %s failed with error %s
WFLYMSGAMQ0101 WARN Invalid value %s for %s, legal values are %s, default value is applied.
WFLYMSGAMQ0102 java.io.IOException HTTP Upgrade request missing Sec-JbossRemoting-Key header
WFLYMSGAMQ0103 java.lang.IllegalStateException Broker is not started. It cannot be managed yet.
WFLYMSGAMQ0104 java.lang.IllegalStateException Legacy security is no longer supported.
WFLYMSGAMQ0105 org.jboss.as.controller.OperationFailedException The %s %s is configured to use socket-binding %s, but this socket binding doesn't have the multicast-address or a multicast-port attributes configured.
WFLYMSGAMQ0106 org.jboss.as.controller.OperationFailedException The bridge %s didn't deploy.
WFLYMSGAMQ0107 java.lang.IllegalStateException You must define a elytron security doman when security is enabled.
WFLYMSGAMQ0108 org.jboss.as.controller.OperationFailedException Either socket-binding or jgroups-cluster attribute is required.

WFLYNAM

Code Level Return Type Message
WFLYNAM0001 INFO Activating Naming Subsystem
WFLYNAM0002 WARN Failed to set %s
WFLYNAM0003 INFO Starting Naming Service
WFLYNAM0012 ERROR Failed to release binder service, used for a runtime made JNDI binding
WFLYNAM0013 ERROR Failed to obtain jndi view value for entry %s.
WFLYNAM0014 java.lang.SecurityException Attempt to add a Permission to a readonly PermissionCollection
WFLYNAM0015 java.lang.String %s cannot be null.
WFLYNAM0016 javax.naming.NamingException Could not dereference object
WFLYNAM0017 javax.naming.NamingException Unable to list a non Context binding.
WFLYNAM0018 java.lang.String Could not lookup link
WFLYNAM0020 javax.naming.NamingException Could not resolve service %s
WFLYNAM0021 javax.naming.NamingException Could not resolve service reference to %s in factory %s. Service was in state %s.
WFLYNAM0022 javax.naming.NamingException Could not resolve service reference to %s in factory %s. This is a bug in ServiceReferenceObjectFactory. State was %s.
WFLYNAM0023 java.lang.String Duplicate JNDI bindings for '%s' are not compatible. [%s] != [%s]
WFLYNAM0024 javax.naming.InvalidNameException An empty name is not allowed
WFLYNAM0025 java.lang.IllegalStateException Jndi entry '%s' is not yet registered in context '%s'
WFLYNAM0026 java.lang.IllegalStateException Failed to destroy root context
WFLYNAM0027 javax.naming.NamingException Failed instantiate %s %s from classloader %s
WFLYNAM0028 java.lang.String Failed to read %s context entries.
WFLYNAM0029 java.lang.String Failed to start %s
WFLYNAM0030 java.lang.RuntimeException Illegal context in name: %s
WFLYNAM0032 javax.naming.NamingException Invalid context reference. Not a '%s' reference.
WFLYNAM0033 java.lang.IllegalArgumentException A valid JNDI name must be provided: %s
WFLYNAM0034 java.lang.IllegalArgumentException Load factor must be greater than 0 and less than or equal to 1
WFLYNAM0035 java.lang.IllegalArgumentException invalid permission, unknown action: %s
WFLYNAM0036 java.lang.IllegalArgumentException invalid permission, unknown action: %s
WFLYNAM0037 java.lang.IllegalArgumentException Can not have a negative size table!
WFLYNAM0038 java.lang.String Jndi view is only available in runtime mode.
WFLYNAM0039 javax.naming.NameNotFoundException Name '%s' not found in context '%s'
WFLYNAM0041 java.lang.IllegalArgumentException %s is null
WFLYNAM0042 javax.naming.NamingException Failed to create object factory from classloader.
WFLYNAM0043 javax.naming.OperationNotSupportedException Naming context is read-only
WFLYNAM0044 java.lang.IllegalArgumentException Service with name [%s] already bound.
WFLYNAM0045 java.lang.IllegalStateException Table is full!
WFLYNAM0046 javax.naming.NamingException Thread interrupted while retrieving service reference for service %s
WFLYNAM0047 org.jboss.as.server.deployment.DeploymentUnitProcessingException Invalid name for context binding %s
WFLYNAM0048 org.jboss.as.controller.OperationFailedException Invalid binding name %s, name must start with one of %s
WFLYNAM0049 org.jboss.as.controller.OperationFailedException Unknown binding type %s
WFLYNAM0050 org.jboss.as.controller.OperationFailedException Unsupported simple binding type %s
WFLYNAM0051 org.jboss.as.controller.OperationFailedException Unable to transform URL binding value %s
WFLYNAM0052 org.jboss.as.controller.OperationFailedException Could not load module %s
WFLYNAM0053 org.jboss.as.controller.OperationFailedException Could not load class %s from module %s
WFLYNAM0054 org.jboss.as.controller.OperationFailedException Could not instantiate instance of class %s from module %s
WFLYNAM0055 org.jboss.as.controller.OperationFailedException Class %s from module %s is not an instance of ObjectFactory
WFLYNAM0059 java.lang.RuntimeException Resource lookup for injection failed: %s
WFLYNAM0060 org.jboss.as.controller.OperationFailedException Binding type %s requires attribute named %s defined
WFLYNAM0061 org.jboss.as.controller.OperationFailedException Binding type %s can not take a 'cache' attribute
WFLYNAM0062 javax.naming.NamingException Failed to lookup %s
WFLYNAM0063 java.lang.IllegalStateException %s service not started
WFLYNAM0064 org.jboss.as.controller.OperationFailedException Cannot rebind external context lookup
WFLYNAM0065 org.jboss.as.controller.OperationFailedException Could not load module %s - the module or one of its dependencies is missing [%s]

WFLYOIDC

Code Level Return Type Message
WFLYOIDC0001 INFO Activating WildFly Elytron OIDC Subsystem
WFLYOIDC0002 INFO Elytron OIDC Client subsystem override for deployment '%s'
WFLYOIDC0003 java.lang.RuntimeException Cannot remove credential. No credential defined for deployment '%s'
WFLYOIDC0004 java.lang.RuntimeException Cannot update credential. No credential defined for deployment '%s'
WFLYOIDC0005 java.lang.RuntimeException Cannot remove redirect rewrite rule. No redirect rewrite defined for deployment '%s'
WFLYOIDC0006 java.lang.RuntimeException Cannot update redirect rewrite. No redirect rewrite defined for deployment '%s'
WFLYOIDC0007 org.jboss.as.controller.OperationFailedException Must set 'resource' or 'client-id'
WFLYOIDC0008 WARN The 'disable-trust-manager' attribute has been set to 'true' so no trust manager will be used when communicating with the OpenID provider over HTTPS. This value should always be set to 'false' in a production environment.

WFLYOTELEXT

Code Level Return Type Message
WFLYOTELEXT0001 INFO Activating OpenTelemetry Subsystem
WFLYOTELEXT0004 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered
WFLYOTELEXT0005 ERROR Error resolving the OpenTelemetry instance.
WFLYOTELEXT0008 java.lang.IllegalArgumentException An unsupported exporter was specified: '%s'.
WFLYOTELEXT0009 ERROR Error resolving the tracer.
WFLYOTELEXT0010 java.lang.IllegalArgumentException An unsupported span processor was specified: '%s'.
WFLYOTELEXT0011 java.lang.IllegalArgumentException Unrecognized value for sampler: '%s'.
WFLYOTELEXT0012 java.lang.IllegalArgumentException Invalid ratio. Must be between 0.0 and 1.0 inclusive

WFLYPAT

Code Level Return Type Message
WFLYPAT0000 java.lang.String Conflicts detected
WFLYPAT0000 java.lang.IllegalStateException failed to resolve a jboss.home.dir use the --distribution attribute to point to a valid installation
WFLYPAT0000 java.lang.IllegalStateException No layers directory found at %s
WFLYPAT0000 java.lang.IllegalStateException Cannot find layer '%s' under directory %s
WFLYPAT0000 java.lang.IllegalStateException no associated module or bundle repository with layer '%s'
WFLYPAT0000 java.lang.IllegalStateException Duplicate %s '%s'
WFLYPAT0000 java.lang.IllegalStateException Not a directory %s
WFLYPAT0000 java.lang.IllegalStateException patch types don't match
WFLYPAT0000 org.jboss.as.patching.PatchingException invalid rollback information
WFLYPAT0001 WARN Cannot delete file %s
WFLYPAT0002 WARN Cannot invalidate %s
WFLYPAT0003 org.jboss.as.patching.PatchingException Patch does not apply - expected (%s), but was (%s)
WFLYPAT0004 java.io.IOException Failed to delete (%s)
WFLYPAT0005 java.io.IOException Failed to create directory (%s)
WFLYPAT0008 java.lang.String File at path specified by argument %s does not exist
WFLYPAT0011 org.jboss.as.patching.PatchingException Cannot rollback patch (%s)
WFLYPAT0012 org.jboss.as.patching.PatchingException Patch '%s' already applied
WFLYPAT0013 org.jboss.as.patching.PatchingException There is no layer called %s installed
WFLYPAT0014 org.jboss.as.patching.PatchingException Failed to resolve a valid patch descriptor for %s %s
WFLYPAT0015 org.jboss.as.patching.PatchingException Requires patch '%s'
WFLYPAT0016 org.jboss.as.patching.PatchingException Patch is incompatible with patch '%s'
WFLYPAT0017 org.jboss.as.patching.ContentConflictsException Conflicts detected
WFLYPAT0018 java.io.SyncFailedException copied content does not match expected hash for item: %s
WFLYPAT0019 java.lang.IllegalArgumentException invalid patch name '%s'
WFLYPAT0020 java.lang.IllegalArgumentException Cannot rollback. No patches applied.
WFLYPAT0021 org.jboss.as.patching.PatchingException Patch '%s' not found in history.
WFLYPAT0023 org.jboss.as.controller.OperationFailedException Failed to show history of patches
WFLYPAT0024 org.jboss.as.controller.OperationFailedException Unable to apply or rollback a patch when the server is in a restart-required state.
WFLYPAT0025 java.lang.String failed to load identity info
WFLYPAT0026 java.lang.String No more patches
WFLYPAT0027 java.lang.String No patch history %s
WFLYPAT0028 java.lang.String Patch is missing file %s
WFLYPAT0029 java.lang.String File is not readable %s
WFLYPAT0030 java.lang.String Layer not found %s
WFLYPAT0031 ERROR failed to undo change for: '%s'
WFLYPAT0032 java.lang.String missing: '%s'
WFLYPAT0033 java.lang.String inconsistent state: '%s'
WFLYPAT0034 java.lang.String in error: '%s'
WFLYPAT0035 WARN Cannot rename file %s
WFLYPAT0036 java.lang.IllegalStateException Cannot process backup by renaming file %s
WFLYPAT0037 java.lang.IllegalStateException Cannot process restore by renaming file %s
WFLYPAT0038 java.lang.IllegalStateException Duplicate element patch-id (%s)
WFLYPAT0039 java.lang.String Requested %s version %s did not match the installed version %s
WFLYPAT0040 java.lang.String failed to load %s info
WFLYPAT0041 java.lang.String Patch %s found in more than one stream: %s and %s
WFLYPAT0042 java.lang.String Patch bundle is empty
WFLYPAT0043 org.jboss.as.patching.PatchingException Content item type is missing in '%s'
WFLYPAT0044 java.lang.String Unsupported content type '%s'
WFLYPAT0045 org.jboss.as.patching.PatchingException Unrecognized condition format '%s'
WFLYPAT0046 org.jboss.as.patching.PatchingException Cannot copy files to temporary directory %s: %s. Note that '-Djava.io.tmpdir' switch can be used to set different temporary directory.
WFLYPAT0047 java.io.IOException Cannot copy files from %s to %s: %s
WFLYPAT0048 ERROR Error when restoring file[%s] - %s
WFLYPAT0049 java.io.IOException Some backup files were not removed.
WFLYPAT0050 INFO %s cumulative patch ID is: %s, one-off patches include: %s
WFLYPAT0051 java.io.IOException Invalid zip file. Found an entry that resolves to a path outside of the patch directory: %s

WFLYPC

Code Level Return Type Message
WFLYPC0000 java.lang.String Usage: %s [args...]%nwhere args include:
WFLYPC0000 java.lang.String Keep a copy of the persistent domain configuration even if this host is not the Domain Controller. If ignore-unused-configuration is unset in host.xml, then the complete domain configuration will be stored, otherwise the configured value of ignore-unused-configuration will be used.
WFLYPC0000 java.lang.String If this host is not the Domain Controller and cannot contact the Domain Controller at boot, a locally cached copy of the domain configuration is used for boot (if available, see --backup.) The Domain Controller is background polled until it becomes available. Note that starting a host with --cached-dc when the Domain Controller is available will cache a copy of the domain configuration even if --backup is not used.
WFLYPC0000 java.lang.String Name of the domain configuration file to use (default is "domain.xml") (Same as -c)
WFLYPC0000 java.lang.String Name of the domain configuration file to use (default is "domain.xml") (Same as --domain-config)
WFLYPC0000 java.lang.String Name of the domain configuration file to use. This differs from '--domain-config', '-c' and '-domain-config' in that the initial file is never overwritten.
WFLYPC0000 java.lang.String Display this message and exit
WFLYPC0000 java.lang.String Address on which the host controller should listen for communication from the process controller
WFLYPC0000 java.lang.String Port on which the host controller should listen for communication from the process controller
WFLYPC0000 java.lang.String Name of the host configuration file to use (default is "host.xml")
WFLYPC0000 java.lang.String Name of the host configuration file to use. This differs from '--host-config' in that the initial file is never overwritten.
WFLYPC0000 java.lang.String Address on which the process controller listens for communication from processes it controls
WFLYPC0000 java.lang.String Port on which the process controller listens for communication from processes it controls
WFLYPC0000 java.lang.String Load system properties from the given url
WFLYPC0000 java.lang.String Set a system property
WFLYPC0000 java.lang.String Print version and exit
WFLYPC0000 java.lang.String Set system property jboss.bind.address to the given value
WFLYPC0000 java.lang.String Set system property jboss.bind.address. to the given value
WFLYPC0000 java.lang.String Set system property jboss.default.multicast.address to the given value
WFLYPC0000 java.lang.String Set the host controller's running type to ADMIN_ONLY causing it to open administrative interfaces and accept management requests but not start servers or, if this host controller is the primary for the domain, accept incoming connections from secondary host controllers.
WFLYPC0000 java.lang.String Set system property jboss.domain.primary.address to the given value. In a default secondary Host Controller config, this is used to configure the address of the primary Host Controller.
WFLYPC0000 java.lang.String Set system property jboss.domain.primary.port to the given value. In a default secondary Host Controller config, this is used to configure the port used for native management communication by the primary Host Controller.
WFLYPC0000 java.lang.String Runs the server with a security manager installed.
WFLYPC0001 WARN Attempted to reconnect non-existent process '%s'
WFLYPC0002 WARN Attempted to remove non-existent process '%s'
WFLYPC0003 WARN Attempted to start non-existent process '%s'
WFLYPC0004 WARN Attempted to stop non-existent process '%s'
WFLYPC0005 WARN Attempted to register duplicate named process '%s'
WFLYPC0006 WARN Failed to send authentication key to process '%s': %s
WFLYPC0007 ERROR Failed to send data bytes to process '%s' input stream
WFLYPC0008 ERROR Failed to send reconnect message to process '%s' input stream
WFLYPC0009 ERROR Failed to start process '%s'
WFLYPC0010 ERROR Failed to write %s message to connection: %s
WFLYPC0011 INFO Process '%s' finished with an exit status of %d
WFLYPC0012 WARN Received connection with invalid version from %s
WFLYPC0013 WARN Received unrecognized greeting code 0x%02x from %s
WFLYPC0014 WARN Received connection with unknown credentials from %s
WFLYPC0015 WARN Received unknown message with code 0x%02x
WFLYPC0016 INFO All processes finished; exiting
WFLYPC0017 INFO Shutting down process controller
WFLYPC0018 INFO Starting process '%s'
WFLYPC0019 INFO Stopping process '%s'
WFLYPC0020 ERROR Stream processing failed for process '%s': %s
WFLYPC0021 INFO Waiting %d seconds until trying to restart process %s.
WFLYPC0022 WARN Failed to kill process '%s', trying to destroy the process instead.
WFLYPC0023 java.lang.String No value was provided for argument %s
WFLYPC0025 java.lang.IllegalArgumentException Authentication key must be 24 bytes long
WFLYPC0029 java.lang.IllegalArgumentException %s length is invalid
WFLYPC0030 java.lang.IllegalArgumentException Invalid option: %s
WFLYPC0031 java.lang.IllegalArgumentException Command contains a null component
WFLYPC0033 ERROR Failed to accept a connection
WFLYPC0034 ERROR Failed to close resource %s
WFLYPC0035 ERROR Failed to close the server socket %s
WFLYPC0036 ERROR Failed to close a socket
WFLYPC0039 ERROR Failed to handle incoming connection
WFLYPC0040 ERROR Failed to handle socket failure condition
WFLYPC0041 ERROR Failed to handle socket finished condition
WFLYPC0042 ERROR Failed to handle socket shut down condition
WFLYPC0043 ERROR Failed to read a message
WFLYPC0044 WARN Leaked a message output stream; cleaning
WFLYPC0045 java.io.IOException Failed to create server thread
WFLYPC0046 java.io.IOException Failed to read object
WFLYPC0047 java.io.UTFDataFormatException Invalid byte
WFLYPC0048 java.io.UTFDataFormatException Invalid byte:%s(%d)
WFLYPC0049 java.io.IOException Invalid byte token. Expecting '%s' received '%s'
WFLYPC0050 java.io.IOException Invalid command byte read: %s
WFLYPC0051 java.io.IOException Invalid start chunk start [%s]
WFLYPC0056 java.io.EOFException Read %d bytes.
WFLYPC0058 java.io.IOException Stream closed
WFLYPC0059 java.lang.IllegalStateException Thread creation was refused
WFLYPC0060 java.io.EOFException Unexpected end of stream
WFLYPC0061 java.io.IOException Write channel closed
WFLYPC0062 java.io.IOException Writes are already shut down
WFLYPC0063 INFO Process '%s' did not complete normal stop within %d ms; attempting to kill process using OS calls
WFLYPC0064 INFO Cannot locate process '%s' -- could not find the 'jps' command
WFLYPC0065 INFO No process identifiable as '%s' could be found
WFLYPC0066 INFO Multiple processes identifiable as '%s' found; OS level kill cannot be safely performed
WFLYPC0067 INFO Process '%s' did not complete normal stop within %d ms; attempting to destroy process using java.lang.Process.destroyForcibly()

WFLYPL

Code Level Return Type Message
WFLYPL0001 INFO Activating PicketLink %s Subsystem
WFLYPL0003 INFO Bound [%s] to [%s]
WFLYPL0007 java.lang.RuntimeException Could not load module [%s].
WFLYPL0009 java.lang.RuntimeException Could not load class [%s].
WFLYPL0010 org.jboss.as.controller.OperationFailedException No type provided for %s. You must specify a class-name or code.
WFLYPL0012 org.jboss.as.controller.OperationFailedException Attribute [%s] is not longer supported.
WFLYPL0013 org.jboss.as.controller.OperationFailedException [%s] can only have [%d] child of type [%s].
WFLYPL0014 org.jboss.as.controller.OperationFailedException Invalid attribute [%s] definition for [%s]. Only one of the following attributes are allowed: [%s].
WFLYPL0015 org.jboss.as.controller.OperationFailedException Required attribute [%s] for [%s].
WFLYPL0016 org.jboss.as.controller.OperationFailedException [%s] requires one of the given attributes [%s].
WFLYPL0017 java.lang.IllegalStateException Type [%s] already defined.
WFLYPL0018 org.jboss.as.controller.OperationFailedException [%s] can not be empty.
WFLYPL0019 org.jboss.as.controller.OperationFailedException [%s] requires child [%s].
WFLYPL0054 org.jboss.as.controller.OperationFailedException You must provide at least one identity configuration.
WFLYPL0055 org.jboss.as.controller.OperationFailedException You must provide at least one identity store for identity configuration [%s].
WFLYPL0056 org.jboss.as.controller.OperationFailedException No supported type provided.
WFLYPL0057 org.jboss.as.controller.OperationFailedException No mapping was defined.
WFLYPL0101 org.jboss.as.controller.OperationFailedException No type provided for the handler. You must specify a class-name or code.
WFLYPL0105 org.jboss.as.controller.OperationFailedException The migrate operation can not be performed: the server must be in admin-only mode
WFLYPL0106 java.lang.String Migration failed, see results for more details.
WFLYPL0107 org.jboss.as.controller.OperationFailedException Cannot migrate non-empty picketlink-federation subsystem configuration.

WFLYPMB

Code Level Return Type Message
WFLYPMB0001 org.jboss.as.controller.OperationFailedException No known attribute %s
WFLYPMB0002 java.lang.UnsupportedOperationException A platform mbean resource does not have a writable model
WFLYPMB0003 java.lang.UnsupportedOperationException Adding child resources is not supported
WFLYPMB0004 java.lang.UnsupportedOperationException Removing child resources is not supported
WFLYPMB0005 org.jboss.as.controller.OperationFailedException No BufferPoolMXBean with name '%s' currently exists
WFLYPMB0006 java.lang.IllegalStateException Read support for attribute %s was not properly implemented
WFLYPMB0007 java.lang.IllegalStateException Write support for attribute %s was not properly implemented
WFLYPMB0008 org.jboss.as.controller.OperationFailedException No GarbageCollectorMXBean with name %s currently exists
WFLYPMB0009 org.jboss.as.controller.OperationFailedException No MemoryManagerMXBean with name %s currently exists
WFLYPMB0010 org.jboss.as.controller.OperationFailedException No MemoryPoolMXBean with name %s currently exists

WFLYPOJO

Code Level Return Type Message
WFLYPOJO0001 INFO Found legacy bean/pojo namespace: %s - might be missing some xml features (potential exceptions).
WFLYPOJO0002 WARN Ignoring uninstall action on target: %s
WFLYPOJO0003 WARN Error invoking callback: %s
WFLYPOJO0004 WARN Error invoking incallback: %s
WFLYPOJO0005 WARN Error invoking uncallback: %s
WFLYPOJO0006 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get module attachment for %s
WFLYPOJO0007 org.jboss.as.server.deployment.DeploymentUnitProcessingException Missing deployment reflection index for %s
WFLYPOJO0008 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse POJO xml [ %s ]
WFLYPOJO0010 java.lang.IllegalArgumentException Cannot instantiate new collection instance.
WFLYPOJO0011 java.lang.IllegalArgumentException Cannot instantiate new map instance.
WFLYPOJO0012 java.lang.IllegalArgumentException Too dynamic to determine injected type from factory!
WFLYPOJO0013 java.lang.IllegalArgumentException Too dynamic to determine injected type from dependency!
WFLYPOJO0014 java.lang.IllegalArgumentException Previous node is not a value config: %s
WFLYPOJO0015 java.lang.IllegalArgumentException Null factory method!
WFLYPOJO0016 java.lang.IllegalArgumentException Null bean info!
WFLYPOJO0017 java.lang.IllegalArgumentException Invalid number of type instances match: %s, type: %s
WFLYPOJO0018 java.lang.IllegalArgumentException Cannot determine injected type: %s, try setting class attribute (if available).
WFLYPOJO0019 java.lang.IllegalArgumentException Null or empty alias.
WFLYPOJO0020 java.lang.IllegalArgumentException Null or empty dependency.
WFLYPOJO0021 java.lang.String Missing value
WFLYPOJO0022 java.lang.IllegalArgumentException Null value
WFLYPOJO0023 java.lang.IllegalArgumentException Null name
WFLYPOJO0024 java.lang.IllegalArgumentException Null method name!
WFLYPOJO0025 java.lang.IllegalArgumentException Unknown type: %s
WFLYPOJO0026 java.lang.IllegalArgumentException Illegal parameter length: %s
WFLYPOJO0027 org.jboss.msc.service.StartException Missing factory method in ctor configuration: %s
WFLYPOJO0028 java.lang.String Missing bean info, set bean's class attribute: %s
WFLYPOJO0029 java.lang.IllegalArgumentException Wrong types size, doesn't match parameters!
WFLYPOJO0030 java.lang.IllegalArgumentException Null ClassInfo!
WFLYPOJO0031 java.lang.IllegalArgumentException No such constructor: %s for class %s.
WFLYPOJO0032 java.lang.IllegalArgumentException Method not found %s%s for class %s.
WFLYPOJO0033 java.lang.IllegalArgumentException No such getter: %s on class %s.
WFLYPOJO0034 java.lang.IllegalArgumentException No such setter: %s on class %s.
WFLYPOJO0035 java.lang.IllegalArgumentException Ambiguous match %s.
WFLYPOJO0036 java.lang.IllegalArgumentException Ambiguous match of %s for name %s on class %s.
WFLYPOJO0037 java.lang.IllegalArgumentException Field not found %s for class %s.
WFLYPOJO0038 org.jboss.as.server.deployment.DeploymentUnitProcessingException Exception while parsing POJO descriptor file: %s

WFLYPRT

Code Level Return Type Message
WFLYPRT0001 WARN Got error closing channel %s
WFLYPRT0003 ERROR Failed to close resource %s
WFLYPRT0004 ERROR Failed to close the server socket %s
WFLYPRT0018 WARN No such request (%d) associated with channel %s
WFLYPRT0023 java.net.ConnectException Could not connect to %s. The connection timed out
WFLYPRT0030 java.io.IOException Invalid byte token. Expecting '%d' received '%d'
WFLYPRT0032 java.io.IOException Invalid signature [%s]
WFLYPRT0034 java.io.IOException Invalid type: %s
WFLYPRT0035 java.lang.IllegalArgumentException Type is neither %s or %s: %s
WFLYPRT0051 java.lang.IllegalStateException Operation with id %d already registered
WFLYPRT0052 java.lang.IllegalArgumentException Null executor
WFLYPRT0053 java.net.ConnectException Could not connect to %s. The connection failed
WFLYPRT0054 java.io.IOException Channel closed
WFLYPRT0055 java.io.IOException no handler registered for request type '%s'.
WFLYPRT0056 java.io.IOException No response handler for request %s
WFLYPRT0057 INFO %s cancelled task by interrupting thread %s
WFLYPRT0058 INFO %s cancelled task before execution began
WFLYPRT0059 INFO You are using a deprecated way to set the client bind address. Please use the "--bind" parameter on the CLI instead of the %s system property.
WFLYPRT0060 java.io.IOException Channel open request timed out

WFLYREQCON

Code Level Return Type Message
WFLYREQCON001 WARN Failed to cancel queued task %s

WFLYRMT

Code Level Return Type Message
WFLYRMT0001 INFO Listening on %s
WFLYRMT0002 org.jboss.msc.service.StartException Could not start channel listener
WFLYRMT0004 org.jboss.msc.service.StartException %s
WFLYRMT0005 org.jboss.msc.service.StartException Failed to start service
WFLYRMT0006 java.lang.IllegalStateException Endpoint is null
WFLYRMT0016 java.lang.IllegalStateException Invalid QOP value: %s
WFLYRMT0017 java.lang.IllegalStateException Invalid Strength value: %s
WFLYRMT0018 org.jboss.as.controller.OperationFailedException Cannot create a valid URI from %s -- %s
WFLYRMT0020 java.lang.IllegalArgumentException Invalid Strength '%s' string given
WFLYRMT0021 java.io.IOException HTTP Upgrade request missing Sec-JbossRemoting-Key header
WFLYRMT0022 org.jboss.as.controller.OperationFailedException Worker configuration is no longer used, please use endpoint worker configuration
WFLYRMT0023 java.lang.String Only one of '%s' configuration or '%s' configuration is allowed
WFLYRMT0024 INFO The remoting subsystem is present but no io subsystem was found. An io subsystem was not required when remoting schema '%s' was current but now is, so a default subsystem is being added.
WFLYRMT0025 org.jboss.as.controller.OperationFailedException Can't remove %s as JMX uses it as a remoting endpoint
WFLYRMT0026 java.lang.String Change of worker to '%s' in remoting might require the same change in linked resources depending on remoting and in definition of http(s) listeners.
WFLYRMT0027 org.jboss.msc.service.StartException Failed to obtain SSLContext
WFLYRMT0028 org.jboss.as.controller.OperationFailedException Invalid option '%s'.
WFLYRMT0029 org.jboss.as.controller.OperationFailedException The use of security realms at runtime is unsupported.

WFLYRS

Code Level Return Type Message
WFLYRS0001 WARN %s annotation not on Class: %s
WFLYRS0002 WARN %s annotation not on Class or Method: %s
WFLYRS0003 ERROR More than one mapping found for Jakarta RESTful Web Services servlet: %s the second mapping %s will not work
WFLYRS0006 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load Jakarta RESTful Web Services Application class
WFLYRS0010 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta RESTful Web Services resource %s does not correspond to a view on the Jakarta Enterprise Beans %s. @Path annotations can only be placed on classes or interfaces that represent a local, remote or no-interface view of an Jakarta Enterprise Beans.
WFLYRS0011 org.jboss.as.server.deployment.DeploymentUnitProcessingException Invalid value for parameter %s: %s
WFLYRS0012 org.jboss.as.server.deployment.DeploymentUnitProcessingException No spring integration jar found
WFLYRS0013 WARN The context param org.jboss.as.jaxrs.disableSpringIntegration is deprecated, and will be removed in a future release. Please use org.jboss.as.jaxrs.enableSpringIntegration instead
WFLYRS0014 ERROR Failed to register management view for REST resource class: %s
WFLYRS0015 WARN No Servlet declaration found for Jakarta RESTful Web Services application. In %s either provide a class that extends jakarta.ws.rs.core.Application or declare a servlet class in web.xml.
WFLYRS0016 INFO RESTEasy version %s
WFLYRS0017 WARN Failed to read attribute from Jakarta RESTful Web Services deployment at %s with name %s
WFLYRS0018 WARN Explicit usage of Jackson annotation in a Jakarta RESTful Web Services deployment; the system will disable Jakarta JSON Binding processing for the current deployment. Consider setting the '%s' property to 'false' to restore Jakarta JSON Binding.
WFLYRS0019 WARN Error converting default value %s for parameter %s in method %s using param converter %s. Exception: %s : %s
WFLYRS0020 WARN "Error converting default value %s for parameter %s in method %s using method %s. Exception: %s : %s"
WFLYRS0021 ERROR %s %s
WFLYRS0022 org.jboss.as.controller.OperationFailedException "Parameter %s is not a list"
WFLYRS0023 java.lang.String Illegal value for parameter %s: %s
WFLYRS0029 WARN The RESTEasy tracing API has been enabled for deployment "%s" and is not meant for production.
WFLYRS0030 java.lang.IllegalStateException Invalid ConfigurationFactory found %s
WFLYRS0031 WARN Failed to load RESTEasy MicroProfile Configuration: %s

WFLYRTS

Code Level Return Type Message
WFLYRTS0001 java.lang.IllegalStateException Can't import global transaction to wildfly transaction client.
WFLYRTS0002 ERROR Cannot get transaction status on handling response context %s

WFLYRXMESS

Code Level Return Type Message
WFLYRXMESS0001 INFO Activating MicroProfile Reactive Messaging Subsystem
WFLYRXMESS0002 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered
WFLYRXMESS0003 INFO Intermediate module %s is not present. Skipping recursively adding modules from it
WFLYRXMESS0004 org.jboss.as.server.deployment.DeploymentUnitProcessingException Use of -D%s=true is not allowed in this setup
WFLYRXMESS0005 org.jboss.as.server.deployment.DeploymentUnitProcessingException Use of @%s is not allowed in this setup

WFLYRXMKAF

Code Level Return Type Message
WFLYRXMKAF0001 INFO Found property %s, will use the Elytron client-ssl-context: %s
WFLYRXMKAF0002 java.lang.IllegalStateException Could not find an Elytron client-ssl-context called: %s

WFLYRXSTOPS

Code Level Return Type Message
WFLYRXSTOPS0001 INFO Activating MicroProfile Reactive Streams Operators Subsystem
WFLYRXSTOPS0002 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered

WFLYRXSTOPSCDI

Code Level Return Type Message
WFLYRXSTOPSCDI0001 java.lang.IllegalStateException No implementation of the %s found in the classpath

WFLYSAR

Code Level Return Type Message
WFLYSAR0001 java.lang.String Failed to execute legacy service %s method
WFLYSAR0002 WARN Unable to find PropertyEditor for type %s
WFLYSAR0003 java.lang.IllegalArgumentException Class not found
WFLYSAR0004 java.lang.IllegalArgumentException Class not instantiated
WFLYSAR0005 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get %s attachment for %s
WFLYSAR0006 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse service xml [%s]
WFLYSAR0007 java.lang.IllegalStateException Method '%s(%s)' not found for: %s
WFLYSAR0008 java.lang.String Missing one or more required attributes:
WFLYSAR0009 java.lang.IllegalArgumentException %s is null
WFLYSAR0010 java.lang.IllegalStateException %s method for property '%s' not found for: %s
WFLYSAR0011 java.lang.String Unexpected content of type '%s' named '%s', text is: %s
WFLYSAR0012 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process SAR child archives for [%s]
WFLYSAR0013 org.jboss.as.server.deployment.DeploymentUnitProcessingException Malformed dependency name %s
WFLYSAR0014 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find default constructor for %s
WFLYSAR0015 org.jboss.msc.service.StartException Failed to register mbean [%s]
WFLYSAR0016 WARN No ObjectName available to unregister
WFLYSAR0017 ERROR Failed to unregister [%s]

WFLYSEC

Code Level Return Type Message
WFLYSEC0007 java.lang.RuntimeException Runtime Exception:
WFLYSEC0015 java.lang.SecurityException Security Exception
WFLYSEC0018 java.lang.UnsupportedOperationException Use the ResourceDescriptionResolver variant
WFLYSEC0019 java.lang.UnsupportedOperationException Unsupported Operation
WFLYSEC0022 javax.xml.stream.XMLStreamException A security domain can have either an or element, not both
WFLYSEC0023 javax.xml.stream.XMLStreamException Missing required attribute: either %s or %s must be present
WFLYSEC0061 java.lang.String again:
WFLYSEC0105 java.lang.IllegalStateException Unable to initialize legacy JACC support while elytron JACC support is enabled.
WFLYSEC0107 java.lang.String Validation failed for %s

WFLYSM

Code Level Return Type Message
WFLYSM0002 javax.xml.stream.XMLStreamException Invalid version found in the permissions element. Found %s, expected %s
WFLYSM0003 org.jboss.as.controller.OperationFailedException Subsystem configuration error: the following permissions are not implied by the maximum permissions set %s
WFLYSM0004 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment configuration error: the following permissions are not implied by the maximum permissions set %s
WFLYSM0005 java.lang.String Empty maximum sets are not understood in the target model version and must be rejected
WFLYSM0006 javax.xml.stream.XMLStreamException Unexpected element '%s' encountered
WFLYSM0007 javax.xml.stream.XMLStreamException Unexpected attribute '%s' encountered
WFLYSM0008 javax.xml.stream.XMLStreamException Unexpected end of document
WFLYSM0009 javax.xml.stream.XMLStreamException Missing required attribute(s): %s
WFLYSM0010 javax.xml.stream.XMLStreamException Missing required element(s): %s
WFLYSM0011 javax.xml.stream.XMLStreamException Unexpected content of type %s
WFLYSM0012 WARN The following permission could not be constructed and will be ignored in the %s: (class="%s" name="%s" actions="%s")

WFLYSRV

Code Level Return Type Message
WFLYSRV0000 java.lang.String Name of the server configuration file to use (default is "standalone.xml") (Same as -c)
WFLYSRV0000 java.lang.String Name of the server configuration file to use (default is "standalone.xml") (Same as --server-config)
WFLYSRV0000 java.lang.String Name of the server configuration file to use. This differs from '--server-config' and '-c' in that the original file is never overwritten.
WFLYSRV0000 java.lang.String Display this message and exit
WFLYSRV0000 java.lang.String Load system properties from the given url
WFLYSRV0000 java.lang.String Set a security property
WFLYSRV0000 java.lang.String Set a system property
WFLYSRV0000 java.lang.String Print version and exit
WFLYSRV0000 java.lang.String Set system property jboss.bind.address to the given value
WFLYSRV0000 java.lang.String Set system property jboss.bind.address. to the given value
WFLYSRV0000 java.lang.String Set system property jboss.default.multicast.address to the given value
WFLYSRV0000 java.lang.String Set the server's running type to ADMIN_ONLY causing it to open administrative interfaces and accept management requests but not start other runtime services or accept end user requests. Cannot be used in conjunction with --start-mode. Deprecated; use --start-mode=admin-only instead.
WFLYSRV0000 java.lang.String Activate debug mode with an optional argument to specify the port. Only works if the launch script supports it.
WFLYSRV0000 java.lang.String Runs the server with a security manager installed.
WFLYSRV0000 java.lang.String Sets the start mode of the server, it can be either 'normal','admin-only' or 'suspend'. If this is 'suspend' the server will start in suspended mode, and will not service requests until it has been resumed. If this is started in admin-only mode the server will only open administrative interfaces and accept management requests but not start other runtime services or accept end user requests. Cannot be used in conjunction with --admin-only.
WFLYSRV0000 java.lang.String Start the server gracefully, queuing or cleanly rejecting requests until the server is fully started
WFLYSRV0000 java.lang.String The git repository to clone to get the server configuration.
WFLYSRV0000 java.lang.String The git branch to use to get the server configuration. Default is 'master'
WFLYSRV0000 java.lang.String The elytron configuration file for managing git credentials. Default is 'null'
WFLYSRV0000 java.lang.String Configured system properties:
WFLYSRV0000 java.lang.String VM Arguments: %s
WFLYSRV0000 java.lang.String Configured system environment:
WFLYSRV0000 java.lang.String Notification emitted when the process state changes
WFLYSRV0000 java.lang.String The attribute '%s' has changed from '%s' to '%s'
WFLYSRV0000 java.lang.String Repository initialized
WFLYSRV0000 java.lang.String Adding .gitignore
WFLYSRV0000 java.lang.String - Server configuration file in use: %s
WFLYSRV0000 java.lang.String %s started in %dms - Started %d of %d services (%d services are lazy, passive or on-demand) %s
WFLYSRV0000 java.lang.String %s started (with errors) in %dms - Started %d of %d services (%d services failed or missing dependencies, %d services are lazy, passive or on-demand) %s
WFLYSRV0001 WARN %s in subdeployment ignored. jboss-deployment-structure.xml is only parsed for top level deployments.
WFLYSRV0002 WARN Loading failed for the annotation index "%s" with the following exception: %s
WFLYSRV0003 WARN Could not index class %s at %s
WFLYSRV0007 ERROR Undeploy of deployment "%s" was rolled back with the following failure message: %s
WFLYSRV0008 ERROR Undeploy of deployment "%s" was rolled back with no failure message
WFLYSRV0009 INFO Undeployed "%s" (runtime-name: "%s")
WFLYSRV0010 INFO Deployed "%s" (runtime-name : "%s")
WFLYSRV0011 ERROR Redeploy of deployment "%s" was rolled back with the following failure message: %s
WFLYSRV0012 ERROR Redeploy of deployment "%s" was rolled back with no failure message
WFLYSRV0013 INFO Redeployed "%s"
WFLYSRV0014 ERROR Replacement of deployment "%s" by deployment "%s" was rolled back with the following failure message: %s
WFLYSRV0015 ERROR Replacement of deployment "%s" by deployment "%s" was rolled back with no failure message
WFLYSRV0016 INFO Replaced deployment "%s" with deployment "%s"
WFLYSRV0017 WARN Annotations import option %s specified in jboss-deployment-structure.xml for additional module %s has been ignored. Additional modules cannot import annotations.
WFLYSRV0018 WARN Deployment "%s" is using a private module ("%s") which may be changed or removed in future versions without notice.
WFLYSRV0019 WARN Deployment "%s" is using an unsupported module ("%s") which may be changed or removed in future versions without notice.
WFLYSRV0020 WARN Exception occurred removing deployment content %s
WFLYSRV0021 ERROR Deploy of deployment "%s" was rolled back with the following failure message: %s
WFLYSRV0022 ERROR Deploy of deployment "%s" was rolled back with no failure message
WFLYSRV0023 WARN Failed to parse property (%s), value (%s) as an integer
WFLYSRV0024 ERROR Cannot add module '%s' as URLStreamHandlerFactory provider
WFLYSRV0025 INFO %s
WFLYSRV0026 ERROR %s
WFLYSRV0027 INFO Starting deployment of "%s" (runtime-name: "%s")
WFLYSRV0028 INFO Stopped deployment %s (runtime-name: %s) in %dms
WFLYSRV0034 WARN No security realm or sasl server authentication defined for native management service; all access will be unrestricted.
WFLYSRV0035 WARN No security realm or http server authentication defined for http management service; all access will be unrestricted.
WFLYSRV0039 INFO Creating http management service using socket-binding (%s)
WFLYSRV0040 INFO Creating http management service using secure-socket-binding (%s)
WFLYSRV0041 INFO Creating http management service using socket-binding (%s) and secure-socket-binding (%s)
WFLYSRV0042 WARN Caught exception closing input stream for uploaded deployment content
WFLYSRV0043 ERROR Deployment unit processor %s unexpectedly threw an exception during undeploy phase %s of %s
WFLYSRV0045 WARN Extension %s is missing the required manifest attribute %s-%s (skipping extension)
WFLYSRV0046 WARN Extension %s URI syntax is invalid: %s
WFLYSRV0047 WARN Could not find Extension-List entry %s referenced from %s
WFLYSRV0048 WARN A server name configuration was provided both via system property %s ('%s') and via the xml configuration ('%s'). The xml configuration value will be used.
WFLYSRV0049 INFO %s starting
WFLYSRV0050 INFO %s stopped in %dms
WFLYSRV0051 INFO Admin console listening on http://%s:%d
WFLYSRV0052 INFO Admin console listening on https://%s:%d
WFLYSRV0053 INFO Admin console listening on http://%s:%d and https://%s:%d
WFLYSRV0054 INFO Admin console is not enabled
WFLYSRV0055 ERROR Caught exception during boot
WFLYSRV0056 java.lang.String Server boot has failed in an unrecoverable manner; exiting. See previous messages for details. %s
WFLYSRV0057 ERROR No deployment content with hash %s is available in the deployment content repository for deployment %s. Because this Host Controller is booting in ADMIN-ONLY mode, boot will be allowed to proceed to provide administrators an opportunity to correct this problem. If this Host Controller were not in ADMIN-ONLY mode this would be a fatal boot failure.
WFLYSRV0058 WARN Additional resource root %s added via jboss-deployment-structure.xml does not exist
WFLYSRV0059 WARN Class Path entry %s in %s does not point to a valid jar for a Class-Path reference.
WFLYSRV0060 INFO Http management interface listening on http://%s:%d/management
WFLYSRV0061 INFO Http management interface listening on https://%s:%d/management
WFLYSRV0062 INFO Http management interface listening on http://%s:%d/management and https://%s:%d/management
WFLYSRV0063 INFO Http management interface is not enabled
WFLYSRV0064 WARN urn:jboss:deployment-structure namespace found in jboss.xml for a sub deployment %s. This is only valid in a top level deployment.
WFLYSRV0065 WARN Failed to unmount deployment overlay
WFLYSRV0067 WARN jboss-deployment-dependencies cannot be used in a sub deployment, it must be specified at ear level: %s
WFLYSRV0068 ERROR No deployment overlay content with hash %s is available in the deployment content repository for deployment %s at location %s. Because this Host Controller is booting in ADMIN-ONLY mode, boot will be allowed to proceed to provide administrators an opportunity to correct this problem. If this Host Controller were not in ADMIN-ONLY mode this would be a fatal boot failure.
WFLYSRV0070 INFO Deployment restart detected for deployment %s, performing full redeploy instead.
WFLYSRV0071 WARN The operating system has limited the number of open files to %d for this process; a value of at least 4096 is recommended
WFLYSRV0072 java.lang.String Value expected for option %s
WFLYSRV0073 java.lang.String Invalid option '%s'
WFLYSRV0074 java.lang.String Malformed URL '%s' provided for option '%s'
WFLYSRV0075 java.lang.String Unable to load properties from URL '%s'
WFLYSRV0079 java.lang.IllegalArgumentException hostControllerName must be null if the server is not in a managed domain
WFLYSRV0080 java.lang.IllegalArgumentException hostControllerName may not be null if the server is in a managed domain
WFLYSRV0081 org.jboss.as.controller.OperationFailedException An IP address cannot be resolved using the given interface selection criteria. Failure was -- %s
WFLYSRV0082 org.jboss.msc.service.StartException failed to resolve interface %s
WFLYSRV0083 org.jboss.msc.service.StartException Failed to start the http-interface service
WFLYSRV0084 org.jboss.as.controller.OperationFailedException No deployment content with hash %s is available in the deployment content repository.
WFLYSRV0085 org.jboss.as.controller.OperationFailedException No deployment with name %s found
WFLYSRV0086 org.jboss.as.controller.OperationFailedException Cannot use %s with the same value for parameters %s and %s. Use %s to redeploy the same content or %s to replace content with a new version with the same name.
WFLYSRV0087 org.jboss.as.controller.OperationFailedException Deployment %s is already started
WFLYSRV0088 java.lang.IllegalStateException Missing configuration value for: %s
WFLYSRV0093 org.jboss.as.controller.OperationFailedException Caught IOException reading uploaded deployment content
WFLYSRV0094 org.jboss.as.controller.OperationFailedException Null stream at index [%d]
WFLYSRV0095 org.jboss.as.controller.OperationFailedException '%s' is not a valid URL
WFLYSRV0096 org.jboss.as.controller.OperationFailedException Error obtaining input stream from URL '%s'
WFLYSRV0097 java.lang.IllegalStateException ServiceModuleLoader already started
WFLYSRV0098 java.lang.IllegalStateException ServiceModuleLoader already stopped
WFLYSRV0099 java.lang.IllegalArgumentException '%s' cannot be loaded from a ServiceModuleLoader as its name does not start with '%s'
WFLYSRV0100 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to read '%s'
WFLYSRV0101 java.lang.IllegalArgumentException Deployment root is required
WFLYSRV0102 java.lang.IllegalArgumentException Sub-deployments require a parent deployment unit
WFLYSRV0103 org.jboss.as.server.deployment.DeploymentUnitProcessingException No Module Identifier attached to deployment '%s'
WFLYSRV0104 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to create VFSResourceLoader for root [%s]
WFLYSRV0105 java.lang.RuntimeException Failed to get file from remote repository
WFLYSRV0106 java.io.IOException Unable to create local directory: %s
WFLYSRV0107 java.io.IOException Did not read the entire file. Missing: %d
WFLYSRV0108 java.lang.String No value was provided for argument %s%n
WFLYSRV0109 java.lang.IllegalStateException Could not find the file repository connection to the host controller.
WFLYSRV0112 java.lang.IllegalArgumentException Unknown mount type %s
WFLYSRV0113 org.jboss.msc.service.StartException Failed to create temp file provider
WFLYSRV0115 org.jboss.as.controller.OperationFailedException System property %s cannot be set via the xml configuration file or from a management client; it's value must be known at initial process start so it can only set from the command line
WFLYSRV0116 org.jboss.as.controller.OperationFailedException System property %s cannot be set after the server name has been set via the xml configuration file or from a management client
WFLYSRV0117 java.lang.IllegalStateException Unable to initialise a basic SSLContext '%s'
WFLYSRV0119 java.lang.IllegalStateException Home directory does not exist: %s
WFLYSRV0121 java.lang.IllegalStateException Configuration directory does not exist: %s
WFLYSRV0122 java.lang.IllegalStateException Server base directory does not exist: %s
WFLYSRV0123 java.lang.IllegalStateException Server data directory is not a directory: %s
WFLYSRV0124 java.lang.IllegalStateException Could not create server data directory: %s
WFLYSRV0125 java.lang.IllegalStateException Server content directory is not a directory: %s
WFLYSRV0126 java.lang.IllegalStateException Could not create server content directory: %s
WFLYSRV0127 java.lang.IllegalStateException Log directory is not a directory: %s
WFLYSRV0128 java.lang.IllegalStateException Could not create log directory: %s
WFLYSRV0129 java.lang.IllegalStateException Server temp directory does not exist: %s
WFLYSRV0130 java.lang.IllegalStateException Could not create server temp directory: %s
WFLYSRV0131 java.lang.IllegalStateException Controller temp directory does not exist: %s
WFLYSRV0132 java.lang.IllegalStateException Could not create server temp directory: %s
WFLYSRV0133 java.lang.IllegalStateException Domain base dir does not exist: %s
WFLYSRV0134 java.lang.IllegalStateException Domain config dir does not exist: %s
WFLYSRV0135 java.lang.IllegalStateException Server base directory is not a directory: %s
WFLYSRV0136 java.lang.IllegalStateException Could not create server base directory: %s
WFLYSRV0137 org.jboss.as.controller.OperationFailedException No deployment content with hash %s is available in the deployment content repository for deployment '%s'. This is a fatal boot error. To correct the problem, either restart with the --admin-only switch set and use the CLI to install the missing content or remove it from the configuration, or remove the deployment from the xml configuration file and restart.
WFLYSRV0138 java.lang.IllegalStateException VFS is not available from the configured module loader
WFLYSRV0139 org.jboss.msc.service.ServiceNotFoundException Server controller service was removed
WFLYSRV0140 java.lang.IllegalStateException Root service was removed
WFLYSRV0141 java.lang.IllegalStateException Cannot start server
WFLYSRV0143 java.lang.IllegalArgumentException No directory called '%s' exists under '%s'
WFLYSRV0144 java.lang.IllegalArgumentException -D%s=%s does not exist
WFLYSRV0145 java.lang.IllegalArgumentException -D%s=%s is not a directory
WFLYSRV0146 java.lang.RuntimeException Error copying '%s' to '%s'
WFLYSRV0147 java.io.InvalidObjectException %s is null
WFLYSRV0148 java.io.InvalidObjectException portOffset is out of range
WFLYSRV0149 org.jboss.as.controller.OperationFailedException Invalid '%s' value: %d, the maximum index is %d
WFLYSRV0150 org.jboss.as.controller.OperationFailedException Cannot create input stream from URL '%s'
WFLYSRV0151 org.jboss.as.controller.OperationFailedException No bytes available at param %s
WFLYSRV0152 org.jboss.as.controller.OperationFailedException Only 1 piece of content is current supported (AS7-431)
WFLYSRV0153 org.jboss.msc.service.StartException Failed to process phase %s of %s
WFLYSRV0156 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to index deployment root for annotations
WFLYSRV0158 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to instantiate a %s
WFLYSRV0159 org.jboss.as.server.deployment.DeploymentUnitProcessingException No deployment repository available.
WFLYSRV0160 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to mount deployment content
WFLYSRV0161 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get manifest for deployment %s
WFLYSRV0163 java.lang.IllegalArgumentException Cannot merge resource root for a different file. This: %s mergee: %s
WFLYSRV0164 java.lang.RuntimeException Failed to create temp file provider
WFLYSRV0165 java.io.IOException Resource is too large to be a valid class file
WFLYSRV0166 org.jboss.as.server.deployment.DeploymentUnitProcessingException Sub deployment %s in jboss-deployment-structure.xml was not found. Available sub deployments: %s
WFLYSRV0167 org.jboss.as.server.deployment.DeploymentUnitProcessingException No jboss-deployment-structure.xml file found at %s
WFLYSRV0168 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error loading jboss-deployment-structure.xml from %s
WFLYSRV0169 javax.xml.stream.XMLStreamException Sub deployment '%s' is listed twice in jboss-deployment-structure.xml
WFLYSRV0170 javax.xml.stream.XMLStreamException Additional module name '%s' is not valid. Names must start with 'deployment.'
WFLYSRV0171 javax.xml.stream.XMLStreamException External resource roots not supported, resource roots may not start with a '/' : %s
WFLYSRV0172 javax.xml.stream.XMLStreamException Unexpected end of document
WFLYSRV0173 javax.xml.stream.XMLStreamException Missing one or more required attributes:%s
WFLYSRV0174 javax.xml.stream.XMLStreamException Unexpected content of type '%s', name is '%s', text is: '%s'
WFLYSRV0175 org.jboss.as.server.deployment.DeploymentUnitProcessingException No method found with id: %s on class (or its super class) %s
WFLYSRV0177 java.lang.RuntimeException Error getting reflective information for %s with ClassLoader %s
WFLYSRV0178 java.lang.IllegalStateException External Module Service already started
WFLYSRV0179 org.jboss.msc.service.StartException Failed to load module: %s
WFLYSRV0187 org.jboss.as.controller.OperationFailedException Failed to get multicast address for %s
WFLYSRV0188 java.lang.RuntimeException Failed to get multicast address for %s
WFLYSRV0190 org.jboss.as.controller.OperationFailedException Cannot add more than one socket binding group. Add of '%s' attempted, but '%s' already exists
WFLYSRV0191 java.lang.IllegalArgumentException Can't use both --server-config and --initial-server-config
WFLYSRV0192 javax.xml.stream.XMLStreamException Duplicate namespace %s in jboss-all.xml
WFLYSRV0193 org.jboss.as.server.deployment.DeploymentUnitProcessingException Two different versions of the same namespaces are present in jboss-all.xml, %s and %s are both present
WFLYSRV0194 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error loading jboss-all.xml from %s
WFLYSRV0195 java.lang.IllegalStateException Cannot obtain required module for: %s
WFLYSRV0196 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get content for deployment overlay %s at %s
WFLYSRV0198 org.jboss.as.controller.OperationFailedException No deployment overlay content with hash %s is available in the deployment content repository for deployment overlay '%s' at location %s. This is a fatal boot error. To correct the problem, either restart with the --admin-only switch set and use the CLI to install the missing content or remove it from the configuration, or remove the deployment overlay from the xml configuration file and restart.
WFLYSRV0199 org.jboss.as.controller.OperationFailedException No deployment overlay content with hash %s is available in the deployment content repository.
WFLYSRV0200 org.jboss.as.controller.OperationFailedException Failed to read file %s
WFLYSRV0201 org.jboss.as.controller.OperationFailedException Cannot have more than one of %s
WFLYSRV0202 org.jboss.as.controller.OperationFailedException Unknown content item key: %s
WFLYSRV0203 org.jboss.as.controller.OperationFailedException Cannot use %s when %s are used
WFLYSRV0204 org.jboss.as.controller.OperationFailedException Null '%s'
WFLYSRV0205 org.jboss.as.controller.OperationFailedException There is already a deployment called %s with the same runtime name %s
WFLYSRV0206 java.lang.IllegalStateException Multiple deployment unit processors registered with priority %s and class %s
WFLYSRV0207 INFO Starting subdeployment (runtime-name: "%s")
WFLYSRV0208 INFO Stopped subdeployment (runtime-name: %s) in %dms
WFLYSRV0209 org.jboss.as.controller.OperationFailedException When specifying a 'module' you also need to specify the 'code'
WFLYSRV0210 java.lang.IllegalStateException Server is already paused
WFLYSRV0211 INFO Suspending server with %d ms timeout.
WFLYSRV0212 INFO Resuming server
WFLYSRV0213 WARN Failed to connect to host-controller, retrying.
WFLYSRV0215 ERROR Failed to resume activity %s. To resume normal operation it is recommended that you restart the server.
WFLYSRV0216 ERROR Error cleaning obsolete content %s
WFLYSRV0219 WARN %s deployment has been re-deployed, its content will not be removed. You will need to restart it.
WFLYSRV0220 INFO Server shutdown has been requested via an OS signal
WFLYSRV0221 WARN Deployment "%s" is using a deprecated module ("%s") which may be removed in future versions without notice.
WFLYSRV0222 java.lang.IllegalArgumentException Illegal permission name '%s'
WFLYSRV0223 java.lang.IllegalArgumentException Illegal permission actions '%s'
WFLYSRV0224 ERROR Could not mount overlay %s as parent %s is not a directory
WFLYSRV0230 DEBUG Vault is not initialized; resolution of vault expressions is not possible
WFLYSRV0231 java.lang.IllegalStateException Could not read or create the server UUID in file: %s
WFLYSRV0232 org.jboss.as.controller.OperationFailedException Could not get module info for module name: %s
WFLYSRV0233 java.lang.String Undeployed "%s" (runtime-name: "%s")
WFLYSRV0234 java.lang.String Deployed "%s" (runtime-name : "%s")
WFLYSRV0235 INFO Security Manager is enabled
WFLYSRV0236 INFO Suspending server with no timeout.
WFLYSRV0237 org.jboss.as.controller.OperationFailedException It is not possible to use use-current-server-config=false while specifying a server-config
WFLYSRV0238 org.jboss.as.controller.OperationFailedException server-config '%s' specified for reload could not be found
WFLYSRV0239 FATAL Aborting with exit code %d
WFLYSRV0240 INFO ProcessController has signalled to shut down; shutting down
WFLYSRV0241 INFO Shutting down in response to management operation '%s'
WFLYSRV0242 org.jboss.as.controller.OperationFailedException Cannot explode a deployment in a self-contained server
WFLYSRV0243 org.jboss.as.controller.OperationFailedException Cannot explode an unmanaged deployment
WFLYSRV0244 org.jboss.as.controller.OperationFailedException Cannot explode an already exploded deployment
WFLYSRV0245 org.jboss.as.controller.OperationFailedException Cannot explode an already deployed deployment
WFLYSRV0246 org.jboss.as.controller.OperationFailedException Cannot add content to a deployment in a self-contained server
WFLYSRV0247 org.jboss.as.controller.OperationFailedException Cannot add content to an unmanaged deployment
WFLYSRV0248 org.jboss.as.controller.OperationFailedException Cannot add content to an unexploded deployment
WFLYSRV0249 ERROR Could not copy files from the managed content repository to the running deployment for %s
WFLYSRV0250 org.jboss.as.controller.OperationFailedException Cannot remove content from a deployment in a self-contained server
WFLYSRV0251 org.jboss.as.controller.OperationFailedException Cannot remove content from an unmanaged deployment
WFLYSRV0252 org.jboss.as.controller.OperationFailedException Cannot remove content from an unexploded deployment
WFLYSRV0253 ERROR Could not delete file %s from the running deployment %s
WFLYSRV0254 org.jboss.as.controller.OperationFailedException Cannot read content from a deployment in a self-contained server
WFLYSRV0255 org.jboss.as.controller.OperationFailedException Cannot read content from an unmanaged deployment
WFLYSRV0257 java.lang.IllegalArgumentException Required system property '%s' not set
WFLYSRV0258 org.jboss.as.controller.OperationFailedException Cannot explode a subdeployment of an unexploded deployment
WFLYSRV0259 org.jboss.as.controller.OperationFailedException If attribute secure-socket-binding is defined ssl-context must also be defined
WFLYSRV0260 INFO Starting server in suspended mode
WFLYSRV0261 java.lang.String Boot complete
WFLYSRV0262 java.lang.String You cannot set both --start-mode and --admin-only
WFLYSRV0263 java.lang.String Unknown start mode %s
WFLYSRV0264 org.jboss.as.controller.OperationFailedException Cannot specify both admin-only and start-mode
WFLYSRV0265 WARN Invalid value '%s' for system property '%s' -- value must be a non-negative integer
WFLYSRV0267 javax.xml.stream.XMLStreamException Cannot mount resource root '%s', is it really an archive?
WFLYSRV0268 java.lang.RuntimeException Failed to pull the repository %s
WFLYSRV0269 java.lang.RuntimeException Failed to initialize the repository %s
WFLYSRV0270 ERROR Failed to publish configuration to %s
WFLYSRV0271 ERROR Git error: %s
WFLYSRV0272 INFO Suspending server
WFLYSRV0273 WARN Excluded subsystem %s via jboss-deployment-structure.xml does not exist.
WFLYSRV0274 WARN Excluded dependency %s via jboss-deployment-structure.xml does not exist.
WFLYSRV0275 java.lang.RuntimeException Maximum number of allowed jar resources reached for global-directory module name '%s'. The maximum allowed is %d files
WFLYSRV0276 org.jboss.msc.service.StartException There is an error in opening zip file %s
WFLYSRV0277 java.lang.RuntimeException Failed to load SSH Credentials %s
WFLYSRV0278 INFO The configuration history is managed through Git
WFLYSRV0279 INFO Git initialized in %s
WFLYSRV0280 java.lang.IllegalArgumentException Unable to initialise the git repository.
WFLYSRV0281 WARN System property %s is set. This should only be used for standalone clients. Setting this on the server will override your profile configuration.
WFLYSRV0282 INFO Server is starting with graceful startup disabled; external requests may receive failure responses until startup completes.
WFLYSRV0283 INFO A non-graceful startup was requested in conjunction with a suspended startup. The server will start suspended.
WFLYSRV0284 java.lang.RuntimeException Failed to restore the configuration after failing to initialize the repository %s
WFLYSRV0285 WARN Vault support has been removed, no vault resources will be initialised.
WFLYSRV0286 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to index static module %s for annotations
WFLYSRV0287 javax.xml.stream.XMLStreamException Security realms are no longer supported, please migrate references to them from the configuration.
WFLYSRV0288 java.lang.IllegalStateException Unable to create tmp dir for auth tokens as file already exists.
WFLYSRV0289 java.lang.IllegalStateException Unable to create auth dir %s.
WFLYSRV0290 java.lang.IllegalArgumentException Couldn't find the specified YAML file %s
WFLYSRV0291 java.lang.IllegalStateException The error cause is unknown at this thread. Check other log messages and caller to know the possible cause.
WFLYSRV0292 org.jboss.as.server.deployment.DeploymentUnitProcessingException The required service '%s' is not UP, it is currently '%s'.
WFLYSRV0293 WARN The '%s' module alias has been added as a dependency to '%s' deployment via %s. While this is allowed, it is recommended to use its target module instead. Consider replacing this alias with its target module '%s'.
WFLYSRV0294 WARN The '%s' module alias has been excluded from '%s' deployment via %s. While this is allowed, it is recommended to use its target module instead. Consider replacing this alias with its target module '%s'.
WFLYSRV0295 org.jboss.as.controller.OperationFailedException No %s installation has been prepared.
WFLYSRV0296 java.lang.IllegalStateException Authentication mechanism authentication is not yet complete
WFLYSRV0297 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism exchange received a message after authentication was already complete
WFLYSRV0298 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism message is too long
WFLYSRV0299 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism server-side authentication failed
WFLYSRV0300 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism token not verified
WFLYSRV0301 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authorization failed: "%s" running as "%s"
WFLYSRV0302 java.lang.IllegalStateException Authentication mechanism does not support security layer (wrapping/unwrapping)
WFLYSRV0303 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid authentication mechanism negotiation message received
WFLYSRV0304 org.wildfly.security.mechanism.AuthenticationMechanismException No authentication mechanism token was given
WFLYSRV0305 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authentication failed due to one or more malformed fields
WFLYSRV0306 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler failed for unknown reason
WFLYSRV0307 org.wildfly.security.mechanism.AuthenticationMechanismException No authentication mechanism login name was given

WFLYSYSJMX

Code Level Return Type Message
WFLYSYSJMX0001 java.lang.IllegalArgumentException Null method name
WFLYSYSJMX0002 java.lang.IllegalArgumentException Unknown lifecyle method %s
WFLYSYSJMX0003 java.lang.String Error in destroy %s
WFLYSYSJMX0004 java.lang.String Error in stop %s
WFLYSYSJMX0005 java.lang.String Initialization failed %s
WFLYSYSJMX0006 java.lang.String Starting failed %s
WFLYSYSJMX0007 java.lang.String Stopping failed %s
WFLYSYSJMX0008 java.lang.String Destroying failed %s
WFLYSYSJMX0009 java.lang.String Initialization failed during postRegister

WFLYTHR

Code Level Return Type Message
WFLYTHR0001 WARN The '%s' attribute is no longer supported. The value [%f] of the '%s' attribute is being combined with the value [%f] of the '%s' attribute and the current processor count [%d] to derive a new value of [%d] for '%s'.
WFLYTHR0002 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0003 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0004 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0005 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0006 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0007 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0008 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0009 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0010 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0011 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0012 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0013 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0014 java.lang.IllegalStateException The thread factory service hasn't been initialized.
WFLYTHR0015 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0016 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0017 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0018 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0019 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0020 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0021 org.jboss.as.controller.OperationFailedException Failed to locate executor service '%s'
WFLYTHR0024 org.jboss.as.controller.OperationFailedException Missing '%s' for parameter '%s'
WFLYTHR0025 org.jboss.as.controller.OperationFailedException Missing '%s' for parameter '%s'
WFLYTHR0027 javax.xml.stream.XMLStreamException %s must be greater than or equal to zero
WFLYTHR0028 javax.xml.stream.XMLStreamException %s must be greater than or equal to zero
WFLYTHR0029 org.jboss.as.controller.OperationFailedException Missing '%s' for '%s'
WFLYTHR0030 org.jboss.as.controller.OperationFailedException Failed to parse '%s', allowed values are: %s
WFLYTHR0031 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0032 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0033 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0034 java.lang.IllegalStateException Unsupported metric '%s'

WFLYTRACEXT

Code Level Return Type Message
WFLYTRACEXT0001 INFO Activating MicroProfile OpenTracing Subsystem
WFLYTRACEXT0013 org.jboss.as.controller.OperationFailedException The migrate operation cannot be performed: the server must be in admin-only mode
WFLYTRACEXT0014 java.lang.String Migration failed. See results for more details.

WFLYTX

Code Level Return Type Message
WFLYTX0001 ERROR Unable to roll back active transaction
WFLYTX0002 ERROR Unable to get transaction state
WFLYTX0003 ERROR APPLICATION ERROR: transaction still active in request with status %s
WFLYTX0004 org.jboss.msc.service.StartException Create failed
WFLYTX0005 org.jboss.msc.service.StartException %s manager create failed
WFLYTX0006 org.jboss.msc.service.StartException Failed to configure object store browser bean
WFLYTX0007 java.lang.IllegalStateException Service not started
WFLYTX0008 org.jboss.msc.service.StartException Start failed
WFLYTX0009 java.lang.String Unknown metric %s
WFLYTX0010 java.lang.RuntimeException MBean Server service not installed, this functionality is not available if the JMX subsystem has not been installed.
WFLYTX0012 org.jboss.as.controller.OperationFailedException Attributes %s and %s are alternatives; both cannot be set with conflicting values.
WFLYTX0013 WARN The %s attribute on the %s is set to the default value. This is a danger for environments running multiple servers. Please make sure the attribute value is unique.
WFLYTX0015 org.jboss.as.controller.OperationFailedException Jndi names have to start with java:/ or java:jboss/
WFLYTX0023 org.jboss.as.controller.OperationFailedException %s must be undefined if %s is 'true'.
WFLYTX0024 org.jboss.as.controller.OperationFailedException %s must be defined if %s is defined.
WFLYTX0025 org.jboss.as.controller.OperationFailedException Either %s must be 'true' or %s must be defined.
WFLYTX0026 WARN The transaction %s could not be removed from the cache during cleanup.
WFLYTX0027 WARN The pre-Jakarta Connectors synchronization %s associated with tx %s failed during after completion
WFLYTX0028 WARN The Jakarta Connectors synchronization %s associated with tx %s failed during after completion
WFLYTX0029 java.lang.IllegalStateException Syncs are not allowed to be registered when the tx is in state %s
WFLYTX0030 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYTX0031 javax.xml.stream.XMLStreamException The attribute '%s' is no longer supported
WFLYTX0032 org.jboss.as.controller.OperationFailedException %s must be defined if %s is 'true'.
WFLYTX0033 org.jboss.as.controller.OperationFailedException Only one of %s and %s can be 'true'.
WFLYTX0034 DEBUG relative_to property of the object-store is set to the default value with jboss.server.data.dir
WFLYTX0035 jakarta.resource.spi.work.WorkCompletedException Cannot find or import inflow transaction for xid %s and work %s
WFLYTX0036 jakarta.resource.spi.work.WorkCompletedException Imported Jakarta Connectors inflow transaction with xid %s of work %s is inactive
WFLYTX0037 jakarta.resource.spi.work.WorkCompletedException Unexpected error on resuming transaction %s for work %s
WFLYTX0038 java.lang.RuntimeException Unexpected error on suspending transaction for work %s
WFLYTX0039 WARN A value of zero is not permitted for the maximum timeout, as such the timeout has been set to %s
WFLYTX0040 java.lang.IllegalStateException There is no active transaction at the current context to register synchronization '%s'

WFLYTXLRACOORD

Code Level Return Type Message
WFLYTXLRACOORD0001 INFO Activating MicroProfile LRA Coordinator Subsystem
WFLYTXLRACOORD0002 org.jboss.msc.service.StartException LRA recovery service start failed
WFLYTXLRACOORD0003 INFO Starting Narayana MicroProfile LRA Coordinator available at path %s/lra-coordinator
WFLYTXLRACOORD0004 ERROR Failed to stop Narayana MicroProfile LRA Coordinator at path %s/lra-coordinator

WFLYTXLRAPARTICIPANT

Code Level Return Type Message
WFLYTXLRAPARTICIPANT0001 INFO Activating MicroProfile LRA Participant Subsystem with system property (lra.coordinator.url) value as %s
WFLYTXLRAPARTICIPANT0002 INFO Starting Narayana MicroProfile LRA Participant Proxy available at path %s/lra-participant-narayana-proxy
WFLYTXLRAPARTICIPANT0003 WARN The CDI marker file cannot be created
WFLYTXLRAPARTICIPANT0004 ERROR Failed to stop Narayana MicroProfile LRA Participant Proxy at path %s//lra-participant-narayana-proxy

WFLYUT

Code Level Return Type Message
WFLYUT0001 ERROR Could not initialize Jakarta Server Pages
WFLYUT0003 INFO Undertow %s starting
WFLYUT0004 INFO Undertow %s stopping
WFLYUT0005 WARN Secure listener for protocol: '%s' not found! Using non secure port!
WFLYUT0006 INFO Undertow %s listener %s listening on %s:%d
WFLYUT0007 INFO Undertow %s listener %s stopped, was bound to %s:%d
WFLYUT0008 INFO Undertow %s listener %s suspending
WFLYUT0009 INFO Could not load class designated by HandlesTypes [%s].
WFLYUT0010 WARN Could not load web socket endpoint %s.
WFLYUT0011 WARN Could not load web socket application config %s.
WFLYUT0012 INFO Started server %s.
WFLYUT0013 WARN Could not create redirect URI.
WFLYUT0014 INFO Creating file handler for path '%s' with options [directory-listing: '%s', follow-symlink: '%s', case-sensitive: '%s', safe-symlink-paths: '%s']
WFLYUT0016 WARN Could not resolve name in absolute ordering: %s
WFLYUT0017 WARN Could not delete servlet temp file %s
WFLYUT0018 INFO Host %s starting
WFLYUT0019 INFO Host %s stopping
WFLYUT0020 WARN Clustering not supported, falling back to non-clustered session manager
WFLYUT0021 INFO Registered web context: '%s' for server '%s'
WFLYUT0022 INFO Unregistered web context: '%s' from server '%s'
WFLYUT0023 INFO Skipped SCI for jar: %s.
WFLYUT0024 WARN Failed to persist session attribute %s with value %s for session %s
WFLYUT0027 java.lang.String Failed to parse XML descriptor %s at [%s,%s]
WFLYUT0028 java.lang.String Failed to parse XML descriptor %s
WFLYUT0029 java.lang.String @WebServlet is only allowed at class level %s
WFLYUT0030 java.lang.String @WebInitParam requires name and value on %s
WFLYUT0031 java.lang.String @WebFilter is only allowed at class level %s
WFLYUT0032 java.lang.String @WebListener is only allowed at class level %s
WFLYUT0033 java.lang.String @RunAs needs to specify a role name on %s
WFLYUT0034 java.lang.String @DeclareRoles needs to specify role names on %s
WFLYUT0035 java.lang.String @MultipartConfig is only allowed at class level %s
WFLYUT0036 java.lang.String @ServletSecurity is only allowed at class level %s
WFLYUT0037 java.lang.RuntimeException %s has the wrong component type, it cannot be used as a web component
WFLYUT0038 java.lang.String TLD file %s not contained in root %s
WFLYUT0039 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to resolve module for deployment %s
WFLYUT0040 java.lang.String Duplicate others in absolute ordering
WFLYUT0041 java.lang.String Invalid relative ordering
WFLYUT0042 java.lang.String Conflict occurred processing web fragment in JAR: %s
WFLYUT0043 java.lang.String Relative ordering processing error with JAR: %s
WFLYUT0044 java.lang.String Ordering includes both before and after others in JAR: %s
WFLYUT0045 java.lang.String Duplicate name declared in JAR: %s
WFLYUT0046 WARN Unknown web fragment name declared in JAR: %s
WFLYUT0047 java.lang.String Relative ordering conflict with JAR: %s
WFLYUT0048 java.lang.String Failed to process WEB-INF/lib: %s
WFLYUT0049 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error loading SCI from module: %s
WFLYUT0050 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unable to resolve annotation index for deployment unit: %s
WFLYUT0051 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment error processing SCI for jar: %s
WFLYUT0052 java.lang.RuntimeException Security context creation failed
WFLYUT0053 java.lang.IllegalStateException No security context found
WFLYUT0054 java.lang.String Unknown metric %s
WFLYUT0055 java.lang.IllegalArgumentException Null default host
WFLYUT0056 java.lang.IllegalStateException Null host name
WFLYUT0057 java.lang.IllegalArgumentException Null parameter %s
WFLYUT0058 java.lang.IllegalStateException Cannot activate context: %s
WFLYUT0059 java.lang.RuntimeException Could not construct handler for class: %s. with parameters %s
WFLYUT0060 org.jboss.msc.service.StartException Invalid persistent sessions directory %s
WFLYUT0061 org.jboss.msc.service.StartException Failed to create persistent sessions dir %s
WFLYUT0062 org.jboss.msc.service.StartException Could not create log directory: %s
WFLYUT0063 java.lang.IllegalStateException Could not find the port number listening for protocol %s
WFLYUT0064 java.lang.RuntimeException Failed to configure handler %s
WFLYUT0065 java.lang.IllegalArgumentException Handler class %s was not a handler or a wrapper
WFLYUT0066 java.lang.RuntimeException Failed to configure handler %s
WFLYUT0067 java.lang.IllegalArgumentException Servlet class not defined for servlet %s
WFLYUT0068 ERROR Error obtaining authorization helper
WFLYUT0069 ERROR Ignoring shared-session-config in jboss-all.xml in deployment %s. This entry is only valid in top level deployments.
WFLYUT0070 java.lang.RuntimeException Could not load handler %s from %s module
WFLYUT0071 WARN No ALPN provider found, HTTP/2 will not be enabled. To remove this message set enable-http2 to false on the listener %s in the Undertow subsystem.
WFLYUT0072 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find configured external path %s
WFLYUT0073 java.lang.IllegalArgumentException mod_cluster advertise socket binding requires multicast address to be set
WFLYUT0074 ERROR Could not find TLD %s
WFLYUT0075 java.lang.IllegalArgumentException Cannot register resource of type %s
WFLYUT0076 java.lang.IllegalArgumentException Cannot remove resource of type %s
WFLYUT0077 ERROR Error invoking secure response
WFLYUT0078 ERROR Failed to register management view for websocket %s at %s
WFLYUT0079 java.lang.IllegalStateException No SSL Context available from security realm '%s'. Either the realm is not configured for SSL, or the server has not been reloaded since the SSL config was added.
WFLYUT0080 WARN Valves are no longer supported, %s is not activated.
WFLYUT0081 WARN The deployment %s will not be distributable because this feature is disabled in web-fragment.xml of the module %s.
WFLYUT0082 org.jboss.msc.service.StartException Could not start '%s' listener.
WFLYUT0083 java.lang.String %s is not allowed to be null
WFLYUT0087 java.lang.IllegalArgumentException Duplicate default web module '%s' configured on server '%s', host '%s'
WFLYUT0089 java.lang.String Predicate %s was not valid, message was: %s
WFLYUT0090 java.lang.IllegalArgumentException Key alias %s does not exist in the configured key store
WFLYUT0091 java.lang.IllegalArgumentException Key store entry %s is not a private key entry
WFLYUT0092 java.lang.IllegalArgumentException Credential alias %s does not exist in the configured credential store
WFLYUT0093 java.lang.IllegalArgumentException Credential %s is not a clear text password
WFLYUT0094 WARN Configuration option [%s] ignored when using Elytron subsystem
WFLYUT0095 java.lang.String the path ['%s'] doesn't exist on file system
WFLYUT0097 java.lang.String If http-upgrade is enabled, remoting worker and http(s) worker must be the same. Please adjust values if need be.
WFLYUT0098 ERROR Unexpected Authentication Error: %s
WFLYUT0099 org.jboss.as.controller.OperationFailedException Session manager not available
WFLYUT0100 org.jboss.as.controller.OperationFailedException Session %s not found
WFLYUT0101 WARN Duplicate servlet mapping %s found
WFLYUT0102 org.jboss.as.controller.OperationFailedException The pattern %s is not a valid date pattern.
WFLYUT0103 org.jboss.as.controller.OperationFailedException The time zone id %s is invalid.
WFLYUT0104 org.jboss.as.server.deployment.DeploymentUnitProcessingException Some classes referenced by annotation: %s in class: %s are missing.
WFLYUT0105 org.jboss.msc.service.DuplicateServiceException Host and context path are occupied, %s can't be registered. Message was: %s
WFLYUT0106 ERROR Unable to generate obfuscated session route from '%s'
WFLYUT0107 INFO Generated obfuscated session route '%s' from '%s'
WFLYUT0108 org.jboss.as.server.deployment.DeploymentUnitProcessingException The deployment is configured to use legacy security which is no longer available.
WFLYUT0109 org.jboss.msc.service.StartException The deployment is configured to use legacy security which is no longer supported.
WFLYUT0110 org.jboss.as.controller.OperationFailedException The use of security realms at runtime is unsupported.
WFLYUT0111 WARN The annotation: '%s' will have no effect on Servlet: '%s'

WFLYWELD

Code Level Return Type Message
WFLYWELD-001 DEBUG Discovered %s
WFLYWELD0000 DEBUG Unable to load annotation %s
WFLYWELD0001 ERROR Failed to setup Weld contexts
WFLYWELD0002 ERROR Failed to tear down Weld contexts
WFLYWELD0003 INFO Processing weld deployment %s
WFLYWELD0005 ERROR Could not find BeanManager for deployment %s
WFLYWELD0006 DEBUG Starting Services for Jakarta Contexts and Dependency Injection deployment: %s
WFLYWELD0007 WARN Could not load portable extension class %s
WFLYWELD0008 WARN @Resource injection of type %s is not supported for non-Jakarta Enterprise Beans components. Injection point: %s
WFLYWELD0009 DEBUG Starting weld service for deployment %s
WFLYWELD0010 DEBUG Stopping weld service for deployment %s
WFLYWELD0011 WARN Warning while parsing %s:%s %s
WFLYWELD0012 WARN Warning while parsing %s:%s %s
WFLYWELD0013 WARN Deployment %s contains Jakarta Contexts and Dependency Injection annotations but no bean archive was found (no beans.xml or class with bean defining annotations was present).
WFLYWELD0014 ERROR Exception tearing down thread state
WFLYWELD0016 ERROR Could not read entries
WFLYWELD0017 WARN URL scanner does not understand the URL protocol %s, Jakarta Contexts and Dependency Injection beans will not be scanned.
WFLYWELD0018 WARN Found both WEB-INF/beans.xml and WEB-INF/classes/META-INF/beans.xml. It is not portable to use both locations at the same time. Weld is going to use the former location for this deployment.
WFLYWELD0019 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could get beans.xml file as URL when processing file: %s
WFLYWELD0020 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load interceptor class : %s
WFLYWELD0021 org.jboss.as.server.deployment.DeploymentUnitProcessingException Service %s didn't implement the jakarta.enterprise.inject.spi.Extension interface
WFLYWELD0022 java.lang.IllegalArgumentException View of type %s not found on Jakarta Enterprise Beans %s
WFLYWELD0030 java.lang.IllegalArgumentException Unknown interceptor class for Jakarta Contexts and Dependency Injection %s
WFLYWELD0031 java.lang.IllegalArgumentException %s cannot be null
WFLYWELD0032 java.lang.IllegalArgumentException Injection point represents a method which doesn't follow JavaBean conventions (must have exactly one parameter) %s
WFLYWELD0033 java.lang.IllegalArgumentException %s annotation not found on %s
WFLYWELD0034 java.lang.IllegalStateException Could not resolve @EJB injection for %s on %s
WFLYWELD0035 java.lang.IllegalStateException Resolved more than one Jakarta Enterprise Beans for @EJB injection of %s on %s. Found %s
WFLYWELD0036 java.lang.IllegalArgumentException Could not determine bean class from injection point type of %s
WFLYWELD0037 java.lang.IllegalArgumentException Error injecting persistence unit into Jakarta Contexts and Dependency Injection managed bean. Can't find a persistence unit named '%s' in deployment %s for injection point %s
WFLYWELD0038 java.lang.IllegalStateException Could not inject SecurityManager, security is not enabled
WFLYWELD0039 java.lang.IllegalStateException Singleton not set for %s. This means that you are trying to access a weld deployment with a Thread Context ClassLoader that is not associated with the deployment.
WFLYWELD0040 java.lang.IllegalStateException %s is already running
WFLYWELD0041 java.lang.IllegalStateException %s is not started
WFLYWELD0043 java.lang.IllegalArgumentException BeanDeploymentArchive with id %s not found in deployment
WFLYWELD0044 java.lang.IllegalArgumentException Error injecting resource into Jakarta Contexts and Dependency Injection managed bean. Can't find a resource named %s
WFLYWELD0045 java.lang.IllegalArgumentException Cannot determine resource name. Both jndiName and mappedName are null
WFLYWELD0046 java.lang.IllegalArgumentException Cannot inject injection point %s
WFLYWELD0047 java.lang.IllegalStateException %s cannot be used at runtime
WFLYWELD0048 java.lang.String These attributes must be 'true' for use with CDI 1.0 '%s'
WFLYWELD0049 java.lang.IllegalArgumentException Error injecting resource into Jakarta Contexts and Dependency Injection managed bean. Can't find a resource named %s defined on %s
WFLYWELD0050 org.jboss.weld.resources.spi.ClassFileInfoException %s was not found in composite index
WFLYWELD0051 org.jboss.weld.resources.spi.ClassFileInfoException Cannot load %s
WFLYWELD0052 WARN Using deployment classloader to load proxy classes for module %s. Package-private access will not work. To fix this the module should declare dependencies on %s
WFLYWELD0053 java.lang.IllegalStateException Component interceptor support not available for: %s
WFLYWELD0054 WARN Could not read provided index of an external bean archive: %s
WFLYWELD0055 WARN Could not index class [%s] from an external bean archive: %s
WFLYWELD0056 java.lang.IllegalStateException Weld is not initialized yet
WFLYWELD0057 java.lang.IllegalStateException Persistence unit '%s' failed.
WFLYWELD0058 java.lang.IllegalStateException Persistence unit '%s' removed.

WFLYWELDEJB

Code Level Return Type Message
WFLYWELDEJB0001 jakarta.ejb.NoSuchEJBException EJB has been removed: %s

WFLYWS

Code Level Return Type Message
WFLYWS0001 WARN Cannot load WS deployment aspects from %s
WFLYWS0002 INFO Activating WebServices Extension
WFLYWS0003 INFO Starting %s
WFLYWS0004 INFO Stopping %s
WFLYWS0005 FATAL Error while creating configuration service
WFLYWS0006 ERROR Error while destroying configuration service
WFLYWS0007 WARN Could not read WSDL from: %s
WFLYWS0008 WARN [JAXWS 2.2 spec, section 7.7] The @WebService and @WebServiceProvider annotations are mutually exclusive - %s won't be considered as a webservice endpoint, since it doesn't meet that requirement
WFLYWS0009 WARN WebService endpoint class cannot be final - %s won't be considered as a webservice endpoint
WFLYWS0010 WARN Ignoring without and : %s
WFLYWS0011 ERROR Cannot register record processor in JMX server
WFLYWS0012 ERROR Cannot unregister record processor from JMX server
WFLYWS0013 INFO MBeanServer not available, skipping registration/unregistration of %s
WFLYWS0014 WARN Multiple Enterprise Beans 3 endpoints in the same deployment with different declared security roles; be aware this might be a security risk if you're not controlling allowed roles (@RolesAllowed) on each ws endpoint method.
WFLYWS0015 ERROR Cannot register endpoint: %s in JMX server
WFLYWS0016 ERROR Cannot unregister endpoint: %s from JMX server
WFLYWS0017 WARN Invalid handler chain file: %s
WFLYWS0018 ERROR Web service method %s must not be static or final. See section 5.3.2.4.2 of "Jakarta Enterprise Web Services 2.0".
WFLYWS0019 ERROR Web service method %s must be public. See section 5.3.2.4.2 of "Jakarta Enterprise Web Services 2.0".
WFLYWS0020 ERROR Web service implementation class %s does not contain method %s
WFLYWS0021 ERROR Web service implementation class %s does not contain an accessible method %s
WFLYWS0022 ERROR Web service implementation class %s may not declare a finalize() method. See section 5.3.2.4.2 of "Jakarta Enterprise Web Services 2.0".
WFLYWS0023 java.lang.NullPointerException Null endpoint name
WFLYWS0024 java.lang.NullPointerException Null endpoint class
WFLYWS0025 java.lang.IllegalStateException Cannot resolve module or classloader for deployment %s
WFLYWS0026 jakarta.xml.ws.WebServiceException Handler chain config file %s not found in %s
WFLYWS0027 java.lang.IllegalStateException Unexpected element: %s
WFLYWS0028 java.lang.IllegalStateException Unexpected end tag: %s
WFLYWS0029 java.lang.IllegalStateException Reached end of xml document unexpectedly
WFLYWS0030 java.lang.IllegalStateException Could not find class attribute for deployment aspect
WFLYWS0031 java.lang.IllegalStateException Could not create a deployment aspect of class: %s
WFLYWS0032 java.lang.IllegalStateException Could not find property name attribute for deployment aspect: %s
WFLYWS0033 java.lang.IllegalStateException Could not find property class attribute for deployment aspect: %s
WFLYWS0034 java.lang.IllegalArgumentException Unsupported property class: %s
WFLYWS0035 java.lang.IllegalStateException Could not create list of type: %s
WFLYWS0036 java.lang.IllegalStateException Could not create map of type: %s
WFLYWS0037 java.lang.String No metrics available
WFLYWS0038 java.lang.IllegalStateException Cannot find component view: %s
WFLYWS0039 java.io.IOException Child '%s' not found for VirtualFile: %s
WFLYWS0040 java.lang.Exception Failed to create context
WFLYWS0041 java.lang.Exception Failed to start context
WFLYWS0042 java.lang.Exception Failed to stop context
WFLYWS0043 java.lang.Exception Failed to destroy context
WFLYWS0044 java.lang.IllegalStateException Cannot create servlet delegate: %s
WFLYWS0045 java.lang.IllegalStateException Cannot obtain deployment property: %s
WFLYWS0046 java.lang.IllegalStateException Multiple security domains not supported. First domain: '%s' second domain: '%s'
WFLYWS0047 java.lang.IllegalArgumentException Web Service endpoint %s with URL pattern %s is already registered. Web service endpoint %s is requesting the same URL pattern.
WFLYWS0048 org.jboss.as.server.deployment.DeploymentUnitProcessingException @WebServiceRef injection target is invalid. Only setter methods are allowed: %s
WFLYWS0049 org.jboss.as.server.deployment.DeploymentUnitProcessingException @WebServiceRef attribute 'name' is required for class level annotations.
WFLYWS0050 org.jboss.as.server.deployment.DeploymentUnitProcessingException @WebServiceRef attribute 'type' is required for class level annotations.
WFLYWS0051 org.jboss.as.controller.OperationFailedException Config %s doesn't exist
WFLYWS0052 org.jboss.msc.service.StartException Unsupported handler chain type: %s. Supported types are either %s or %s
WFLYWS0054 org.jboss.as.controller.OperationFailedException Config %s: %s handler chain with id %s doesn't exist
WFLYWS0057 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unable to get URL for: %s
WFLYWS0058 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta XML RPC not supported
WFLYWS0059 org.jboss.as.server.deployment.DeploymentUnitProcessingException %s library (%s) detected in ws endpoint deployment; either provide a proper deployment replacing embedded libraries with container module dependencies or disable the webservices subsystem for the current deployment adding a proper jboss-deployment-structure.xml descriptor to it. The former approach is recommended, as the latter approach causes most of the webservices Jakarta EE and any JBossWS specific functionality to be disabled.
WFLYWS0060 org.jboss.as.server.deployment.DeploymentUnitProcessingException Web service endpoint class %s not found
WFLYWS0061 org.jboss.as.server.deployment.DeploymentUnitProcessingException The endpointInterface %s declared in the @WebService annotation on web service implementation bean %s was not found.
WFLYWS0062 org.jboss.as.server.deployment.DeploymentUnitProcessingException Class verification of Java Web Service implementation class %s failed.
WFLYWS0063 org.jboss.as.webservices.config.DisabledOperationException Could not update WS server configuration because of pending former model update(s) requiring reload.
WFLYWS0064 org.jboss.as.webservices.config.DisabledOperationException Could not update WS server configuration because of existing WS deployment on the server.
WFLYWS0065 WARN Annotation '@%s' found on class '%s'. Perhaps you forgot to add a '%s' module dependency to your deployment?
WFLYWS0066 org.jboss.wsf.spi.WSFException Servlet class %s declared in web.xml; either provide a proper deployment relying on JBossWS or disable the webservices subsystem for the current deployment adding a proper jboss-deployment-structure.xml descriptor to it. The former approach is recommended, as the latter approach causes most of the webservices Jakarta EE and any JBossWS specific functionality to be disabled.
WFLYWS0067 ERROR Could not activate the webservices subsystem.
WFLYWS0068 WARN A potentially problematic %s library (%s) detected in ws endpoint deployment; Check if this library can be replaced with container module
WFLYWS0070 DEBUG Authorization failed for user: %s
WFLYWS0071 DEBUG Failed to authenticate username %s:, incorrect username/password
WFLYWS0072 DEBUG Error occured when authenticate username %s. Exception message: %s
WFLYWS0073 java.lang.IllegalStateException The target endpoint %s is undeploying or stopped
WFLYWS0074 java.lang.IllegalStateException The deployment is configured to use legacy security which is no longer supported.

WFLYXTS

Code Level Return Type Message
WFLYXTS0001 org.jboss.msc.service.StartException TxBridge inbound recovery service start failed
WFLYXTS0002 org.jboss.msc.service.StartException TxBridge outbound recovery service start failed
WFLYXTS0003 org.jboss.msc.service.StartException XTS service start failed
WFLYXTS0004 java.lang.IllegalStateException Service not started
WFLYXTS0009 WARN Rejecting call because it is not part of any XTS transaction
WFLYXTS0010 ERROR Cannot get transaction status on handling context %s

WFNAM

Code Level Return Type Message
WFNAM-0001 TRACE Service configuration failure loading naming providers
WFNAM00000 INFO WildFly Naming version %s
WFNAM00003 javax.naming.ConfigurationException Invalid naming provider URI: %s
WFNAM00004 javax.naming.NameNotFoundException Name "%s" is not found
WFNAM00005 javax.naming.InvalidNameException Invalid empty name
WFNAM00006 javax.naming.NoPermissionException Cannot modify read-only naming context
WFNAM00007 javax.naming.InvalidNameException Invalid URL scheme name "%s"
WFNAM00009 java.lang.IndexOutOfBoundsException Name index %d is out of bounds
WFNAM00010 java.lang.IllegalArgumentException Invalid null name segment at index %d
WFNAM00011 javax.naming.InvalidNameException Missing close quote '%s' in name "%s"
WFNAM00012 javax.naming.InvalidNameException Unterminated escape sequence in name "%s"
WFNAM00014 org.wildfly.naming.client.RenameAcrossNamingProvidersException Renaming from "%s" to "%s" across providers is not supported
WFNAM00015 javax.naming.NotContextException Composite name segment "%s" does not refer to a context
WFNAM00016 DEBUG Closing context "%s" failed
WFNAM00017 javax.naming.CommunicationException No JBoss Remoting endpoint has been configured
WFNAM00018 javax.naming.CommunicationException Failed to connect to remote host
WFNAM00019 javax.naming.InterruptedNamingException Naming operation interrupted
WFNAM00020 javax.naming.CommunicationException Remote naming operation failed
WFNAM00022 javax.naming.CommunicationException The server provided no compatible protocol versions
WFNAM00023 javax.naming.CommunicationException Received an invalid response from the server
WFNAM00024 javax.naming.OperationNotSupportedException Naming operation not supported
WFNAM00025 INFO org.jboss.naming.remote.client.InitialContextFactory is deprecated; new applications should use org.wildfly.naming.client.WildFlyInitialContextFactory instead
WFNAM00026 javax.naming.OperationNotSupportedException No provider for found for URI: %s
WFNAM00029 javax.naming.CommunicationException Invalid leading bytes in header
WFNAM00031 java.io.IOException Outcome not understood
WFNAM00032 javax.naming.AuthenticationException Peer authentication failed
WFNAM00033 javax.naming.AuthenticationException Connection sharing not supported
WFNAM00034 ERROR Unexpected parameter type - expected: %d received: %d
WFNAM00035 ERROR Failed to send exception response to client
WFNAM00036 WARN Unexpected internal error
WFNAM00037 ERROR null correlationId so error not sent to client
WFNAM00038 java.io.IOException Unrecognized messageId
WFNAM00039 ERROR Unable to send header, closing channel
WFNAM00040 java.lang.IllegalArgumentException Unsupported protocol version [ %d ]
WFNAM00041 ERROR Error determining version selected by client
WFNAM00043 java.lang.RuntimeException Unable to load callback handler class "%s"
WFNAM00044 javax.naming.NamingException Unable to instantiate callback handler instance of type "%s"
WFNAM00049 INFO Usage of the legacy "remote.connections" property is deprecated; please use javax.naming.Context#PROVIDER_URL instead
WFNAM00051 WARN Provider URLs already given via standard mechanism; ignoring legacy property-based connection configuration
WFNAM00052 javax.naming.ConfigurationException Invalid value given for property "%s": "%s" is not numeric
WFNAM00053 javax.naming.ConfigurationException Failed to synthesize a valid provider URL
WFNAM00054 WARN Ignoring duplicate destination URI "%s"
WFNAM00055 org.wildfly.naming.client.ExhaustedDestinationsException No more destinations are available to attempt the operation (%d blocklisted, %d transiently failed). See suppressed exceptions for details
WFNAM00056 org.wildfly.naming.client.ExhaustedDestinationsException No more destinations are available to attempt the operation.
WFNAM00057 INFO jboss-naming-client.properties is deprecated; new applications should use org.wildfly.naming.client.WildFlyInitialContextFactory instead
WFNAM00058 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted
WFNAM00059 DEBUG JavaEE to JakartaEE backward compatibility layer have been installed

WFSM

Code Level Return Type Message
WFSM-00001 DEBUG Permission check failed (permission "%s" in code source "%s" of "%s", principals "%s")
WFSM-00001 DEBUG Permission check failed (permission "%s" in code source "%s" of "%s")
WFSM000001 java.security.AccessControlException Permission check failed (permission "%s" in code source "%s" of "%s")
WFSM000002 java.lang.SecurityException Security manager may not be changed
WFSM000003 java.lang.SecurityException Unknown security context type
WFSM000004 java.lang.IllegalArgumentException Unexpected character '%s' at offset %d of '%s'
WFSM000005 java.lang.IllegalArgumentException Invalid action '%s' at offset %d of '%s'
WFSM000006 java.lang.IllegalArgumentException Invalid permission name '%s'
WFSM000007 java.lang.SecurityException Permission collection is read-only
WFSM000008 java.lang.IllegalArgumentException Invalid permission (expected an instance of %s, but got %s)

WFTXN

Code Level Return Type Message
WFTXN-001 java.lang.String Subordinate XAResource at %s
WFTXN-001 java.lang.String Failed to add XAResource %s with Xid %s pointing to location %s to XAResourceRegistry
WFTXN-001 DEBUG Failed to configure a remote transaction service provider
WFTXN-001 DEBUG Closing the recovery stream after recovery failed threw an exception
WFTXN-001 TRACE Got exception on inbound message
WFTXN-001 TRACE Got exception on outbound message
WFTXN-001 TRACE Failure on running doRecover during initialization
WFTXN-001 TRACE Created xa resource recovery file: %s
WFTXN-001 TRACE Deleted xa resource recovery file: %s
WFTXN-001 TRACE Reloaded xa resource recovery registry file: %s
WFTXN-001 TRACE Added resource (%s) to xa resource recovery registry %s
WFTXN-001 TRACE Recovered in doubt xa resource (%s) from xa resource recovery registry %s
WFTXN-001 TRACE Unknown xid %s to be removed from the instances known to the wfly txn client
WFTXN0000 java.lang.IllegalStateException No transaction associated with the current thread
WFTXN0001 jakarta.transaction.NotSupportedException A transaction is already in progress
WFTXN0002 jakarta.transaction.InvalidTransactionException Transaction is not a supported instance: %s
WFTXN0003 java.lang.IllegalArgumentException Invalid transaction location URI (must be absolute): %s
WFTXN0004 java.lang.IllegalArgumentException No transaction provider installed for URI: %s
WFTXN0005 jakarta.transaction.InvalidTransactionException Transaction not associated with this provider
WFTXN0006 jakarta.transaction.SystemException Negative transaction timeout provided
WFTXN0007 java.lang.IllegalStateException A transaction is already associated with the current thread
WFTXN0008 java.lang.UnsupportedOperationException Cannot register a synchronization on a remote transaction
WFTXN0009 java.lang.UnsupportedOperationException Cannot enlist or delist resources on a remote transaction
WFTXN0010 jakarta.transaction.SystemException Failed to receive protocol message from remote peer
WFTXN0011 jakarta.transaction.SystemException Failed to send protocol message to remote peer
WFTXN0012 jakarta.transaction.SystemException The peer threw a SystemException; see peer logs for more information
WFTXN0013 java.lang.SecurityException The peer threw a SecurityException; see peer logs for more information
WFTXN0014 jakarta.transaction.SystemException An unexpected protocol error occurred
WFTXN0015 jakarta.transaction.SystemException The protocol operation was interrupted locally
WFTXN0016 jakarta.transaction.RollbackException The remote peer rolled back the transaction
WFTXN0017 jakarta.transaction.RollbackException Rollback-only transaction rolled back
WFTXN0018 java.lang.IllegalStateException Invalid transaction state
WFTXN0019 jakarta.transaction.HeuristicMixedException The peer threw a HeuristicMixedException; see peer logs for more information
WFTXN0020 jakarta.transaction.HeuristicRollbackException The peer threw a HeuristicRollbackException; see peer logs for more information
WFTXN0021 jakarta.transaction.SystemException Failed to acquire a connection for this operation
WFTXN0022 javax.transaction.xa.XAException The resource manager for remote connection to %s was already enlisted in a transaction
WFTXN0023 java.lang.IllegalArgumentException Invalid flag value
WFTXN0024 javax.transaction.xa.XAException Duplicate transaction encountered for destination %s, transaction ID %s
WFTXN0025 javax.transaction.xa.XAException Failed to receive protocol message from remote peer
WFTXN0026 javax.transaction.xa.XAException Failed to send protocol message to remote peer
WFTXN0027 javax.transaction.xa.XAException The protocol operation was interrupted locally
WFTXN0028 javax.transaction.xa.XAException An unexpected protocol error occurred
WFTXN0029 javax.transaction.xa.XAException The peer threw an XA exception
WFTXN0030 java.lang.IllegalArgumentException Invalid handle type; expected %s, actually received %s
WFTXN0031 jakarta.transaction.SystemException Commit not allowed on imported transaction
WFTXN0032 jakarta.transaction.SystemException Rollback not allowed on imported transaction
WFTXN0033 java.lang.IllegalStateException Multiple remote transaction providers registered on endpoint: %s
WFTXN0034 javax.transaction.xa.XAException Failed to acquire a connection for this operation
WFTXN0035 java.lang.IllegalArgumentException Invalid handle type requested; expected a subtype of Transaction (non-inclusive), got %s
WFTXN0036 javax.transaction.xa.XAException Transaction operation failed due to thread interruption
WFTXN0037 java.lang.IllegalStateException No transaction provider associated with the current thread
WFTXN0038 java.lang.IllegalStateException No local transaction provider associated with the current thread
WFTXN0039 java.lang.NullPointerException Invalid null transaction
WFTXN0040 DEBUG Rollback failed unexpectedly
WFTXN0041 java.lang.IllegalStateException No provider interface matching %s is available from the transaction provider
WFTXN0042 jakarta.transaction.SystemException Connection to remote transaction service failed
WFTXN0043 jakarta.transaction.SystemException Connection to remote transaction service interrupted
WFTXN0044 jakarta.transaction.SystemException Unknown response received from peer
WFTXN0045 jakarta.transaction.SystemException Failed to receive a response from peer
WFTXN0046 java.lang.IllegalStateException The peer threw an IllegalStateException; see peer logs for more information
WFTXN0047 javax.transaction.xa.XAException Unknown XA response received from peer
WFTXN0048 javax.transaction.xa.XAException Failed to receive an XA response from peer
WFTXN0049 javax.transaction.xa.XAException Negative transaction timeout provided
WFTXN0050 javax.transaction.xa.XAException Unrecognized parameter with ID 0x%02x received
WFTXN0051 jakarta.transaction.SystemException Expected parameter with ID 0x%02x, got parameter with ID 0x%02x instead
WFTXN0052 javax.transaction.xa.XAException Expected parameter with ID 0x%02x, got parameter with ID 0x%02x instead
WFTXN0053 org.wildfly.transaction.client.DelayedEnlistmentException Delayed enlistment has failed
WFTXN0054 org.wildfly.transaction.client.SynchronizationException Before-completion failed for resource %s
WFTXN0055 javax.transaction.xa.XAException Two-phase operation on single-phase transaction
WFTXN0056 java.lang.IllegalArgumentException Unknown provider for remote transactions with URI scheme "%s"
WFTXN0057 jakarta.transaction.SystemException Attempted to outflow the same transaction from two different transaction managers
WFTXN0058 java.lang.IllegalStateException This delayed enlistment handle was already enlisted
WFTXN0059 java.lang.IllegalStateException This delayed enlistment handle was already forgotten
WFTXN0060 javax.transaction.xa.XAException Transaction timed out
WFTXN0061 jakarta.transaction.RollbackException Transaction is marked rollback-only
WFTXN0062 java.lang.IllegalStateException Transaction is not active
WFTXN0063 java.lang.IllegalStateException Provider created a null transaction
WFTXN0064 java.lang.IllegalArgumentException Invalid connection endpoint provided
WFTXN0065 jakarta.transaction.SystemException No transaction for ID %d
WFTXN0066 javax.transaction.xa.XAException Failed to set transaction as rollback-only
WFTXN0067 javax.transaction.xa.XAException Transaction is not active
WFTXN0068 jakarta.transaction.SystemException Subordinate enlistment failed for unknown reason
WFTXN0069 jakarta.transaction.InvalidTransactionException Connection does not match the transaction; the connection may have closed
WFTXN0070 javax.transaction.xa.XAException No such transaction
WFTXN0071 java.lang.IllegalStateException An unexpected failure condition occurred
WFTXN0072 java.lang.IllegalStateException No local transaction provider node name specified in the transaction manager environment
WFTXN0073 java.lang.IllegalStateException Unexpected provider transaction mismatch; expected %s, got %s
WFTXN0074 javax.transaction.xa.XAException Heuristic-mixed outcome
WFTXN0075 javax.transaction.xa.XAException Heuristic-commit outcome
WFTXN0076 javax.transaction.xa.XAException Transaction rolled back
WFTXN0077 javax.transaction.xa.XAException Heuristic-rollback outcome
WFTXN0078 javax.transaction.xa.XAException Invalid transaction state
WFTXN0079 javax.transaction.xa.XAException An unexpected resource manager error occurred
WFTXN0080 javax.transaction.xa.XAException Operation not allowed on non-imported transaction
WFTXN0081 javax.transaction.xa.XAException Invalid transaction state for operation
WFTXN0082 jakarta.transaction.SystemException Cannot import a new transaction on a suspended server
WFTXN0083 javax.transaction.xa.XAException Cannot import a new transaction on a suspended server
WFTXN0084 java.lang.IllegalStateException UserTransaction access is forbidden in the current context
WFTXN0085 jakarta.transaction.SystemException Operation failed with an unexpected exception type
WFTXN0086 java.lang.IllegalStateException Unexpected transaction type encountered; expected %s but encountered %s
WFTXN0087 java.lang.IllegalArgumentException Unknown transaction manager type %s
WFTXN0088 java.lang.SecurityException User %s does not have permission %s
WFTXN0089 jakarta.transaction.SystemException Failed to configure transaction timeout of %d
WFTXN0090 java.lang.IllegalStateException Cannot assign location "%s" to transaction because it is already located at "%s"
WFTXN0091 jakarta.transaction.SystemException Failed to create xa resource recovery file: %s
WFTXN0092 jakarta.transaction.SystemException Failed to append xa resource (%s) to xa recovery file: %s
WFTXN0093 javax.transaction.xa.XAException Failed to delete xa recovery registry file %s on removal of %s
WFTXN0094 java.io.IOException Failed to read xa resource recovery file %s
WFTXN0095 java.io.IOException Failed to read URI '%s' from xa resource recovery file %s
WFTXN0096 java.lang.IllegalStateException Unexpected exception on XA recovery
WFTXN0097 jakarta.transaction.SystemException Cannot enlist XA resource '%s' to transaction '%s' as timeout already elapsed
WFTXN0098 WARN Unknown I/O error when listing xa resource recovery files in %s (File.list() returned null)
WFTXN0099 WARN Error while removing imported transaction of xid %s from the underlying transaction manager
WFTXN0100 java.lang.IllegalStateException String '%s' has a wrong format to be decoded to SimpleXid. Expected the hexadecimal format separated by '%s' to exactly three parts.
WFTXN0101 java.io.IOException Failed to read Xid '%s' from xa resource recovery file %s

XNIO

Code Level Return Type Message
XNIO-00001 INFO XNIO NIO Implementation Version %s
XNIO-00001 TRACE Starting up with selector provider %s
XNIO-00001 TRACE Using %s for main selectors and %s for temp selectors
XNIO-00001 INFO XNIO version %s
XNIO-00001 TRACE Closing resource %s
XNIO-00001 TRACE Closing resource %s failed
XNIO-00001 TRACE Shutting down reads on %s failed
XNIO-00001 TRACE Expanded buffer enabled due to overflow with empty buffer, expanded buffer size is %s
XNIO-00001 TRACE Notify read closed for connection %s failed
XNIO-00001 TRACE Notify write closed for connection %s failed
XNIO000000 java.lang.IllegalArgumentException Method parameter '%s' cannot be null
XNIO000001 java.lang.IllegalArgumentException Method parameter '%s' must be greater than %d
XNIO000002 java.lang.IllegalArgumentException Unsupported socket address %s
XNIO000003 java.lang.IllegalArgumentException Method parameter '%s' contains disallowed null value at index %d
XNIO000004 java.lang.IllegalArgumentException Bind address %s is not the same type as destination address %s
XNIO000005 java.lang.IllegalArgumentException No such field named "%s" in %s
XNIO000006 java.lang.IllegalArgumentException Class "%s" not found in %s
XNIO000007 java.lang.IllegalArgumentException Field named "%s" is not accessible (public) in %s
XNIO000008 java.lang.IllegalArgumentException Field named "%s" is not static in %s
XNIO000009 java.lang.UnsupportedOperationException Copy with negative count is not supported
XNIO000010 WARN Invalid option '%s' in property '%s': %s
XNIO000011 ERROR Task %s failed with an exception
XNIO000012 java.nio.ReadOnlyBufferException Attempt to write to a read-only buffer
XNIO000013 java.nio.BufferUnderflowException Buffer underflow
XNIO000014 java.nio.BufferOverflowException Buffer overflow
XNIO000015 java.lang.IllegalArgumentException Parameter '%s' is out of range
XNIO000015 java.lang.IllegalArgumentException Parameter '%s' is out of range
XNIO000016 java.lang.IllegalArgumentException Mixed direct and heap buffers not allowed
XNIO000017 java.lang.IllegalStateException Buffer was already freed
XNIO000018 java.lang.IllegalStateException Access a thread-local random from the wrong thread
XNIO000019 java.lang.IllegalStateException Channel not available from connection
XNIO000020 java.lang.IllegalArgumentException No parser for this option value type
XNIO000021 java.lang.IllegalArgumentException Invalid format for property value '%s'
XNIO000022 java.lang.IllegalArgumentException Class %s not found
XNIO000023 java.lang.IllegalArgumentException Class %s is not an instance of %s
XNIO000024 java.lang.IllegalArgumentException Invalid option name '%s'
XNIO000025 java.lang.IllegalArgumentException Invalid null option '%s'
XNIO000026 java.io.IOException Read with append is not supported
XNIO000027 java.io.IOException Requested file open mode requires Java 7 or higher
XNIO000028 java.lang.IllegalStateException Current thread is not an XNIO I/O thread
XNIO000029 java.lang.IllegalArgumentException Compression format not supported
XNIO000030 java.lang.IllegalArgumentException Both channels must come from the same worker
XNIO000031 java.lang.IllegalArgumentException At least one channel must have a connection
XNIO000032 java.lang.IllegalArgumentException At least one channel must be an SSL channel
XNIO000033 java.lang.IllegalArgumentException '%s' is not a valid QOP value
XNIO000034 java.lang.IllegalArgumentException Failed to instantiate %s
XNIO000035 org.xnio.channels.ConcurrentStreamChannelAccessException Stream channel was accessed concurrently
XNIO000036 java.io.CharConversionException Malformed input
XNIO000037 java.io.CharConversionException Unmappable character
XNIO000038 java.io.CharConversionException Character decoding problem
XNIO000039 java.lang.IllegalArgumentException Value for option '%s' is out of range
XNIO000040 java.lang.IllegalArgumentException Mismatched IP address type; expected %s but got %s
XNIO000041 java.lang.IllegalArgumentException '%s' is not a valid Strength value
XNIO000042 java.lang.IllegalArgumentException Cannot add unresolved address '%s'
XNIO000100 java.lang.IllegalArgumentException 'https' URL scheme chosen but no SSL provider given
XNIO000101 java.lang.IllegalArgumentException Unknown URL scheme '%s' given; must be one of 'http' or 'https'
XNIO000200 javax.security.sasl.SaslException Unexpected extra SASL challenge data received
XNIO000201 javax.security.sasl.SaslException Unexpected extra SASL response data received
XNIO000300 java.lang.IllegalArgumentException Socket buffer is too small
XNIO000301 java.lang.IllegalArgumentException Application buffer is too small
XNIO000302 java.io.IOException SSLEngine required a bigger send buffer but our buffer was already big enough
XNIO000303 java.io.IOException Unexpected wrap result status: %s
XNIO000304 java.io.IOException Unexpected handshake status: %s
XNIO000305 java.io.IOException Unexpected unwrap result status: %s
XNIO000306 java.lang.IllegalArgumentException SSL connection is not from this provider
XNIO000307 WARN Failed to close ssl engine when handling exception %s
XNIO000800 org.xnio.channels.ReadTimeoutException Read timed out
XNIO000800 org.xnio.channels.ReadTimeoutException Read timed out
XNIO000801 org.xnio.channels.WriteTimeoutException Write timed out
XNIO000801 org.xnio.channels.WriteTimeoutException Write timed out
XNIO000802 org.xnio.channels.FixedLengthOverflowException Write past the end of a fixed-length channel
XNIO000803 org.xnio.channels.FixedLengthUnderflowException Close before all bytes were written to a fixed-length channel (%d bytes remaining)
XNIO000804 java.io.IOException Received an invalid message length of %d
XNIO000805 java.io.EOFException Writes have been shut down
XNIO000806 java.io.IOException Transmitted message is too large
XNIO000807 java.io.IOException Unflushed data truncated
XNIO000808 java.io.InterruptedIOException I/O operation was interrupted
XNIO000808 java.io.InterruptedIOException I/O operation was interrupted
XNIO000809 java.io.IOException Cannot flush due to insufficient buffer space
XNIO000810 java.io.IOException Deflater doesn't need input, but won't produce output
XNIO000811 java.io.IOException Inflater needs dictionary
XNIO000812 java.io.EOFException Connection closed unexpectedly
XNIO000813 java.io.IOException The stream is closed
XNIO000814 java.io.IOException Mark not set
XNIO000815 org.xnio.ClosedWorkerException Worker is shut down: %s
XNIO000816 java.lang.String Redirect encountered establishing connection
XNIO000900 java.lang.UnsupportedOperationException Method '%s' is not supported on this implementation
XNIO000900 java.lang.UnsupportedOperationException Method '%s' is not supported on this implementation
XNIO001000 java.lang.IllegalStateException Blocking I/O is not allowed on the current thread
XNIO001001 java.lang.IllegalArgumentException No XNIO provider found
XNIO001002 java.util.concurrent.CancellationException Operation was cancelled
XNIO001003 WARN Running IoFuture notifier %s (with attachment %s) failed
XNIO001004 java.util.concurrent.TimeoutException Operation timed out
XNIO001005 java.lang.SecurityException Not allowed to read non-XNIO properties
XNIO001006 ERROR Failed to invoke file watch callback
XNIO001006 ERROR Failed to invoke file watch callback
XNIO001007 ERROR A channel event listener threw an exception
XNIO001008 ERROR A channel exception handler threw an exception
XNIO001009 ERROR Failed to accept a connection on %s
XNIO001010 ERROR Failed to submit task to executor: (closing %s)
XNIO007000 java.lang.IllegalArgumentException No threads configured
XNIO007001 java.lang.IllegalArgumentException Balancing token count must be greater than zero and less than thread count
XNIO007002 java.lang.IllegalArgumentException Balancing connection count must be greater than zero when tokens are used
XNIO007003 java.lang.IllegalArgumentException Buffer is too large
XNIO007004 java.lang.IllegalStateException No functional selector provider is available
XNIO007005 java.lang.IllegalStateException Unexpected exception opening a selector
XNIO007006 java.lang.IllegalArgumentException XNIO IO factory is from the wrong provider
XNIO007007 java.util.concurrent.RejectedExecutionException Thread is terminating
XNIO008000 WARN Received an I/O error on selection: %s
XNIO008001 WARN Socket accept failed, backing off for %2$d milliseconds: %1$s

jlibaio

Code Level Return Type Message
jlibaio163001 WARN You have a native library with a different version than expected

\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/log-message-reference.html

+ + \ No newline at end of file diff --git a/29/wildscribe/path/index.html b/29/wildscribe/path/index.html index f338306bb..a3c2d4221 100644 --- a/29/wildscribe/path/index.html +++ b/29/wildscribe/path/index.html @@ -1,45 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A named filesystem path.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/path/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/socket-binding-group/index.html b/29/wildscribe/socket-binding-group/index.html index d5f6790c9..7ea3b2370 100644 --- a/29/wildscribe/socket-binding-group/index.html +++ b/29/wildscribe/socket-binding-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Contains a list of socket configurations.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/socket-binding-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/socket-binding-group/local-destination-outbound-socket-binding/index.html b/29/wildscribe/socket-binding-group/local-destination-outbound-socket-binding/index.html index b9f89623f..240dea099 100644 --- a/29/wildscribe/socket-binding-group/local-destination-outbound-socket-binding/index.html +++ b/29/wildscribe/socket-binding-group/local-destination-outbound-socket-binding/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration information for a local destination outbound socket binding.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/socket-binding-group/local-destination-outbound-socket-binding/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/socket-binding-group/remote-destination-outbound-socket-binding/index.html b/29/wildscribe/socket-binding-group/remote-destination-outbound-socket-binding/index.html index 3e84fed1f..13e459948 100644 --- a/29/wildscribe/socket-binding-group/remote-destination-outbound-socket-binding/index.html +++ b/29/wildscribe/socket-binding-group/remote-destination-outbound-socket-binding/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration information for a remote destination outbound socket binding.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/socket-binding-group/remote-destination-outbound-socket-binding/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/socket-binding-group/socket-binding/index.html b/29/wildscribe/socket-binding-group/socket-binding/index.html index cc2f2ddf4..d6c79b9c7 100644 --- a/29/wildscribe/socket-binding-group/socket-binding/index.html +++ b/29/wildscribe/socket-binding-group/socket-binding/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration information for a socket.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/socket-binding-group/socket-binding/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/batch-jberet/in-memory-job-repository/index.html b/29/wildscribe/subsystem/batch-jberet/in-memory-job-repository/index.html index 1727671e0..1b3b51c24 100644 --- a/29/wildscribe/subsystem/batch-jberet/in-memory-job-repository/index.html +++ b/29/wildscribe/subsystem/batch-jberet/in-memory-job-repository/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A job repository that stores job information in memory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/batch-jberet/in-memory-job-repository/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/batch-jberet/index.html b/29/wildscribe/subsystem/batch-jberet/index.html index 93178e08c..cdebd96f8 100644 --- a/29/wildscribe/subsystem/batch-jberet/index.html +++ b/29/wildscribe/subsystem/batch-jberet/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Batch Subsystem (JSR-352)


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/batch-jberet/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/batch-jberet/jdbc-job-repository/index.html b/29/wildscribe/subsystem/batch-jberet/jdbc-job-repository/index.html index 808aa3b05..5927edb24 100644 --- a/29/wildscribe/subsystem/batch-jberet/jdbc-job-repository/index.html +++ b/29/wildscribe/subsystem/batch-jberet/jdbc-job-repository/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A job repository that stores job information in a database.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/batch-jberet/jdbc-job-repository/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/batch-jberet/thread-factory/index.html b/29/wildscribe/subsystem/batch-jberet/thread-factory/index.html index 40bf7cb09..6b4ca15a5 100644 --- a/29/wildscribe/subsystem/batch-jberet/thread-factory/index.html +++ b/29/wildscribe/subsystem/batch-jberet/thread-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread factory (implementing java.util.concurrent.ThreadFactory).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/batch-jberet/thread-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/batch-jberet/thread-pool/index.html b/29/wildscribe/subsystem/batch-jberet/thread-pool/index.html index 4c24a9cb6..59e563eb0 100644 --- a/29/wildscribe/subsystem/batch-jberet/thread-pool/index.html +++ b/29/wildscribe/subsystem/batch-jberet/thread-pool/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The thread pool used for batch jobs. Note that the max-thread attribute should always be greater than 3. Two threads are reserved to ensure partition jobs can execute.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/batch-jberet/thread-pool/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/bean-validation/index.html b/29/wildscribe/subsystem/bean-validation/index.html index c00f53ba7..54e83ac6b 100644 --- a/29/wildscribe/subsystem/bean-validation/index.html +++ b/29/wildscribe/subsystem/bean-validation/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta Bean Validation subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/bean-validation/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/core-management/index.html b/29/wildscribe/subsystem/core-management/index.html index d955a75ad..860e94724 100644 --- a/29/wildscribe/subsystem/core-management/index.html +++ b/29/wildscribe/subsystem/core-management/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the core-management subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/core-management/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/core-management/process-state-listener/index.html b/29/wildscribe/subsystem/core-management/process-state-listener/index.html index 6a03158cc..21adc655d 100644 --- a/29/wildscribe/subsystem/core-management/process-state-listener/index.html +++ b/29/wildscribe/subsystem/core-management/process-state-listener/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Process state listener.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/core-management/process-state-listener/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/core-management/service/configuration-changes/index.html b/29/wildscribe/subsystem/core-management/service/configuration-changes/index.html index c74ebe272..aecc56cd1 100644 --- a/29/wildscribe/subsystem/core-management/service/configuration-changes/index.html +++ b/29/wildscribe/subsystem/core-management/service/configuration-changes/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Service to store and list configuration changes.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/core-management/service/configuration-changes/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources-agroal/datasource/index.html b/29/wildscribe/subsystem/datasources-agroal/datasource/index.html index 813fec261..fa4e2c72b 100644 --- a/29/wildscribe/subsystem/datasources-agroal/datasource/index.html +++ b/29/wildscribe/subsystem/datasources-agroal/datasource/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A datasource


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources-agroal/datasource/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources-agroal/driver/index.html b/29/wildscribe/subsystem/datasources-agroal/driver/index.html index df245d904..159ffb806 100644 --- a/29/wildscribe/subsystem/datasources-agroal/driver/index.html +++ b/29/wildscribe/subsystem/datasources-agroal/driver/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

List of available JDBC drivers


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources-agroal/driver/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources-agroal/index.html b/29/wildscribe/subsystem/datasources-agroal/index.html index fbcddb8fb..838fe10c0 100644 --- a/29/wildscribe/subsystem/datasources-agroal/index.html +++ b/29/wildscribe/subsystem/datasources-agroal/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Agroal subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources-agroal/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources-agroal/xa-datasource/index.html b/29/wildscribe/subsystem/datasources-agroal/xa-datasource/index.html index 22811edeb..2b90abb72 100644 --- a/29/wildscribe/subsystem/datasources-agroal/xa-datasource/index.html +++ b/29/wildscribe/subsystem/datasources-agroal/xa-datasource/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A XA datasource


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources-agroal/xa-datasource/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources/data-source/ExampleDS/connection-properties/index.html b/29/wildscribe/subsystem/datasources/data-source/ExampleDS/connection-properties/index.html index b923847c8..37b5b8129 100644 --- a/29/wildscribe/subsystem/datasources/data-source/ExampleDS/connection-properties/index.html +++ b/29/wildscribe/subsystem/datasources/data-source/ExampleDS/connection-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The connection-properties element allows you to pass in arbitrary connection properties to the Driver.connect(url, props) method


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources/data-source/ExampleDS/connection-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources/data-source/ExampleDS/index.html b/29/wildscribe/subsystem/datasources/data-source/ExampleDS/index.html index d5f48fe26..85f422487 100644 --- a/29/wildscribe/subsystem/datasources/data-source/ExampleDS/index.html +++ b/29/wildscribe/subsystem/datasources/data-source/ExampleDS/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC data-source configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources/data-source/ExampleDS/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/jdbc/index.html b/29/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/jdbc/index.html index 4cc04b042..ae32d0124 100644 --- a/29/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/jdbc/index.html +++ b/29/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/jdbc/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime statistics provided by the resource adapter.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/pool/index.html b/29/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/pool/index.html index 185f27f2e..0b5c85aff 100644 --- a/29/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/pool/index.html +++ b/29/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/pool/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime statistics provided by the resource adapter.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/pool/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources/index.html b/29/wildscribe/subsystem/datasources/index.html index 3bc5e74a9..8bc2237aa 100644 --- a/29/wildscribe/subsystem/datasources/index.html +++ b/29/wildscribe/subsystem/datasources/index.html @@ -1,233 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The data-sources subsystem, used to declare JDBC data-sources


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources/jdbc-driver/index.html b/29/wildscribe/subsystem/datasources/jdbc-driver/index.html index 5cfca3428..074466013 100644 --- a/29/wildscribe/subsystem/datasources/jdbc-driver/index.html +++ b/29/wildscribe/subsystem/datasources/jdbc-driver/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Service that make a JDBC driver available for use in the runtime


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources/jdbc-driver/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources/xa-data-source/index.html b/29/wildscribe/subsystem/datasources/xa-data-source/index.html index e98f9f458..fffaeb097 100644 --- a/29/wildscribe/subsystem/datasources/xa-data-source/index.html +++ b/29/wildscribe/subsystem/datasources/xa-data-source/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC XA data-source configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources/xa-data-source/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html b/29/wildscribe/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html index daff19d3c..f50a7ef7f 100644 --- a/29/wildscribe/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html +++ b/29/wildscribe/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

List of xa-datasource-property


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/deployment-scanner/index.html b/29/wildscribe/subsystem/deployment-scanner/index.html index b057ec043..7e5e74b2a 100644 --- a/29/wildscribe/subsystem/deployment-scanner/index.html +++ b/29/wildscribe/subsystem/deployment-scanner/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual deployment scanner that scans a particular location.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/deployment-scanner/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/deployment-scanner/scanner/index.html b/29/wildscribe/subsystem/deployment-scanner/scanner/index.html index a5177ed5b..699158cb5 100644 --- a/29/wildscribe/subsystem/deployment-scanner/scanner/index.html +++ b/29/wildscribe/subsystem/deployment-scanner/scanner/index.html @@ -1,45 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the deployment scanner subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/deployment-scanner/scanner/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/discovery/aggregate-provider/index.html b/29/wildscribe/subsystem/discovery/aggregate-provider/index.html index c7aebf6ae..94cfb5060 100644 --- a/29/wildscribe/subsystem/discovery/aggregate-provider/index.html +++ b/29/wildscribe/subsystem/discovery/aggregate-provider/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An aggregate discovery provider definition


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/discovery/aggregate-provider/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/discovery/index.html b/29/wildscribe/subsystem/discovery/index.html index 95f4f244d..35cd0f7a3 100644 --- a/29/wildscribe/subsystem/discovery/index.html +++ b/29/wildscribe/subsystem/discovery/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The discovery subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/discovery/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/discovery/static-provider/index.html b/29/wildscribe/subsystem/discovery/static-provider/index.html index 4ed36b259..861dcb70c 100644 --- a/29/wildscribe/subsystem/discovery/static-provider/index.html +++ b/29/wildscribe/subsystem/discovery/static-provider/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A static discovery provider definition


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/discovery/static-provider/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-ejb/client-mappings-registry/infinispan/index.html b/29/wildscribe/subsystem/distributable-ejb/client-mappings-registry/infinispan/index.html index ab0b0d424..f3b122fe6 100644 --- a/29/wildscribe/subsystem/distributable-ejb/client-mappings-registry/infinispan/index.html +++ b/29/wildscribe/subsystem/distributable-ejb/client-mappings-registry/infinispan/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Infinispan client mappings registry provider, used to generate non-local client mappings registries.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-ejb/client-mappings-registry/infinispan/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-ejb/client-mappings-registry/local/index.html b/29/wildscribe/subsystem/distributable-ejb/client-mappings-registry/local/index.html index 363d064bd..300d28b05 100644 --- a/29/wildscribe/subsystem/distributable-ejb/client-mappings-registry/local/index.html +++ b/29/wildscribe/subsystem/distributable-ejb/client-mappings-registry/local/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The local client mappings registry provider, used to generate local client mappings registries.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-ejb/client-mappings-registry/local/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-ejb/index.html b/29/wildscribe/subsystem/distributable-ejb/index.html index fd2ae3cd2..f836e2990 100644 --- a/29/wildscribe/subsystem/distributable-ejb/index.html +++ b/29/wildscribe/subsystem/distributable-ejb/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The distributable-ejb subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-ejb/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-ejb/infinispan-bean-management/index.html b/29/wildscribe/subsystem/distributable-ejb/infinispan-bean-management/index.html index 3b7bae7ed..b081b78a9 100644 --- a/29/wildscribe/subsystem/distributable-ejb/infinispan-bean-management/index.html +++ b/29/wildscribe/subsystem/distributable-ejb/infinispan-bean-management/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An Infinispan-based bean management provider


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-ejb/infinispan-bean-management/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-ejb/infinispan-timer-management/index.html b/29/wildscribe/subsystem/distributable-ejb/infinispan-timer-management/index.html index f896d9bd3..53817671d 100644 --- a/29/wildscribe/subsystem/distributable-ejb/infinispan-timer-management/index.html +++ b/29/wildscribe/subsystem/distributable-ejb/infinispan-timer-management/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An Infinispan-based timer management provider


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-ejb/infinispan-timer-management/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/local/index.html b/29/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/local/index.html index 001312111..015c9dd5f 100644 --- a/29/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/local/index.html +++ b/29/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/local/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the member that last handled a given session


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/local/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/none/index.html b/29/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/none/index.html index 523d19bda..757e90087 100644 --- a/29/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/none/index.html +++ b/29/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/none/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will not have an affinity for any cluster member


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/hotrod-session-management/index.html b/29/wildscribe/subsystem/distributable-web/hotrod-session-management/index.html index 8cbd88660..095a9e763 100644 --- a/29/wildscribe/subsystem/distributable-web/hotrod-session-management/index.html +++ b/29/wildscribe/subsystem/distributable-web/hotrod-session-management/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based session management provider


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/hotrod-session-management/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/hotrod-single-sign-on-management/index.html b/29/wildscribe/subsystem/distributable-web/hotrod-single-sign-on-management/index.html index 0e7048877..af6872e94 100644 --- a/29/wildscribe/subsystem/distributable-web/hotrod-single-sign-on-management/index.html +++ b/29/wildscribe/subsystem/distributable-web/hotrod-single-sign-on-management/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based single sign-on management provider


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/hotrod-single-sign-on-management/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/index.html b/29/wildscribe/subsystem/distributable-web/index.html index a342c2b88..c09b73403 100644 --- a/29/wildscribe/subsystem/distributable-web/index.html +++ b/29/wildscribe/subsystem/distributable-web/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The distributable-web subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/local/index.html b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/local/index.html index a1104bce4..d8accdd9a 100644 --- a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/local/index.html +++ b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/local/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the member that last handled a given session


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/local/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/none/index.html b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/none/index.html index d9b54a4c5..e50dd41c1 100644 --- a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/none/index.html +++ b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/none/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will not have an affinity for any cluster member


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/primary-owner/index.html b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/primary-owner/index.html index b8d49816c..f391a43dc 100644 --- a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/primary-owner/index.html +++ b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/primary-owner/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the primary owner of a given session


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/primary-owner/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/ranked/index.html b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/ranked/index.html index 57c721cb5..2c797fbc0 100644 --- a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/ranked/index.html +++ b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/ranked/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the first available member in a list containing primary and backup owners, and the member that last handled a given session


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/ranked/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/index.html b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/index.html index 9d26b2ca8..6718cfbbd 100644 --- a/29/wildscribe/subsystem/distributable-web/infinispan-session-management/index.html +++ b/29/wildscribe/subsystem/distributable-web/infinispan-session-management/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Infinispan-based session management provider


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/infinispan-session-management/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/infinispan-single-sign-on-management/index.html b/29/wildscribe/subsystem/distributable-web/infinispan-single-sign-on-management/index.html index 1d09073af..af9f59411 100644 --- a/29/wildscribe/subsystem/distributable-web/infinispan-single-sign-on-management/index.html +++ b/29/wildscribe/subsystem/distributable-web/infinispan-single-sign-on-management/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Infinispan-based single sign-on management provider


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/infinispan-single-sign-on-management/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/routing/infinispan/index.html b/29/wildscribe/subsystem/distributable-web/routing/infinispan/index.html index d6014c4f9..a12136169 100644 --- a/29/wildscribe/subsystem/distributable-web/routing/infinispan/index.html +++ b/29/wildscribe/subsystem/distributable-web/routing/infinispan/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A routing provider


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/routing/infinispan/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/distributable-web/routing/local/index.html b/29/wildscribe/subsystem/distributable-web/routing/local/index.html index 0ffed8e6d..0eb7dde5f 100644 --- a/29/wildscribe/subsystem/distributable-web/routing/local/index.html +++ b/29/wildscribe/subsystem/distributable-web/routing/local/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A routing provider


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/distributable-web/routing/local/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ee-security/index.html b/29/wildscribe/subsystem/ee-security/index.html index da4a3df87..4d96358eb 100644 --- a/29/wildscribe/subsystem/ee-security/index.html +++ b/29/wildscribe/subsystem/ee-security/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the EE Security subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ee-security/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ee/context-service/index.html b/29/wildscribe/subsystem/ee/context-service/index.html index 15e04ae28..15e3aad28 100644 --- a/29/wildscribe/subsystem/ee/context-service/index.html +++ b/29/wildscribe/subsystem/ee/context-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A context service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ee/context-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ee/global-directory/index.html b/29/wildscribe/subsystem/ee/global-directory/index.html index 2677b3723..f18d6b010 100644 --- a/29/wildscribe/subsystem/ee/global-directory/index.html +++ b/29/wildscribe/subsystem/ee/global-directory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Global directory that can be used to supply libraries across all deployed applications.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ee/global-directory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ee/index.html b/29/wildscribe/subsystem/ee/index.html index 2a4a3de78..95177ccaf 100644 --- a/29/wildscribe/subsystem/ee/index.html +++ b/29/wildscribe/subsystem/ee/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the EE subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ee/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ee/managed-executor-service/index.html b/29/wildscribe/subsystem/ee/managed-executor-service/index.html index 04ac4c6de..42446015e 100644 --- a/29/wildscribe/subsystem/ee/managed-executor-service/index.html +++ b/29/wildscribe/subsystem/ee/managed-executor-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A managed executor service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ee/managed-executor-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ee/managed-scheduled-executor-service/index.html b/29/wildscribe/subsystem/ee/managed-scheduled-executor-service/index.html index 4c8d79c8f..3a9d19d7b 100644 --- a/29/wildscribe/subsystem/ee/managed-scheduled-executor-service/index.html +++ b/29/wildscribe/subsystem/ee/managed-scheduled-executor-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A managed scheduled executor service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ee/managed-scheduled-executor-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ee/managed-thread-factory/index.html b/29/wildscribe/subsystem/ee/managed-thread-factory/index.html index ed9470be3..b77da2a6b 100644 --- a/29/wildscribe/subsystem/ee/managed-thread-factory/index.html +++ b/29/wildscribe/subsystem/ee/managed-thread-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A managed thread factory


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ee/managed-thread-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ee/service/default-bindings/index.html b/29/wildscribe/subsystem/ee/service/default-bindings/index.html index 5007e8dce..f9fb7b3c1 100644 --- a/29/wildscribe/subsystem/ee/service/default-bindings/index.html +++ b/29/wildscribe/subsystem/ee/service/default-bindings/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The JNDI names for the default EE bindings


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ee/service/default-bindings/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/application-security-domain/index.html b/29/wildscribe/subsystem/ejb3/application-security-domain/index.html index dee9e8f66..1eea038fe 100644 --- a/29/wildscribe/subsystem/ejb3/application-security-domain/index.html +++ b/29/wildscribe/subsystem/ejb3/application-security-domain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A mapping from a security domain referenced in a deployed application


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/application-security-domain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/cache/index.html b/29/wildscribe/subsystem/ejb3/cache/index.html index fcf4b6b32..66b215513 100644 --- a/29/wildscribe/subsystem/ejb3/cache/index.html +++ b/29/wildscribe/subsystem/ejb3/cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 10.0.0
Deprecated. Use simple-cache or distributable-cache instead.

A SFSB cache


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/cluster-passivation-store/index.html b/29/wildscribe/subsystem/ejb3/cluster-passivation-store/index.html index 54a3e4d89..43e7c90bd 100644 --- a/29/wildscribe/subsystem/ejb3/cluster-passivation-store/index.html +++ b/29/wildscribe/subsystem/ejb3/cluster-passivation-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 2.0.0
cluster-passivation-store has been superseded by passivation-store and will be removed in a future release

A clustered passivation store


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/cluster-passivation-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/distributable-cache/index.html b/29/wildscribe/subsystem/ejb3/distributable-cache/index.html index 60652a47d..b98f5e6c2 100644 --- a/29/wildscribe/subsystem/ejb3/distributable-cache/index.html +++ b/29/wildscribe/subsystem/ejb3/distributable-cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A SFSB cache which is distributable


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/distributable-cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/file-passivation-store/index.html b/29/wildscribe/subsystem/ejb3/file-passivation-store/index.html index 9f64b9ca4..f4b6ba2c3 100644 --- a/29/wildscribe/subsystem/ejb3/file-passivation-store/index.html +++ b/29/wildscribe/subsystem/ejb3/file-passivation-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 2.0.0
file-passivation-store has been superseded by passivation-store and will be removed in a future release

A file system based passivation store


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/file-passivation-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/index.html b/29/wildscribe/subsystem/ejb3/index.html index d984707c9..0b3677f73 100644 --- a/29/wildscribe/subsystem/ejb3/index.html +++ b/29/wildscribe/subsystem/ejb3/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the ejb3 subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/mdb-delivery-group/index.html b/29/wildscribe/subsystem/ejb3/mdb-delivery-group/index.html index a5fd1579e..69bb91531 100644 --- a/29/wildscribe/subsystem/ejb3/mdb-delivery-group/index.html +++ b/29/wildscribe/subsystem/ejb3/mdb-delivery-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Delivery group to manage delivery for mdbs


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/mdb-delivery-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/passivation-store/index.html b/29/wildscribe/subsystem/ejb3/passivation-store/index.html index 0ed3001c0..a9924c031 100644 --- a/29/wildscribe/subsystem/ejb3/passivation-store/index.html +++ b/29/wildscribe/subsystem/ejb3/passivation-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 10.0.0
Deprecated. Use distributable-cache instead

A passivation store


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/passivation-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/remoting-profile/index.html b/29/wildscribe/subsystem/ejb3/remoting-profile/index.html index 80a4c5b93..c1ad905ba 100644 --- a/29/wildscribe/subsystem/ejb3/remoting-profile/index.html +++ b/29/wildscribe/subsystem/ejb3/remoting-profile/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A remoting profile


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/remoting-profile/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/remoting-profile/remote-http-connection/index.html b/29/wildscribe/subsystem/ejb3/remoting-profile/remote-http-connection/index.html index 1c0548df2..058ea1583 100644 --- a/29/wildscribe/subsystem/ejb3/remoting-profile/remote-http-connection/index.html +++ b/29/wildscribe/subsystem/ejb3/remoting-profile/remote-http-connection/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Remote connection using HTTP protocol


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/remoting-profile/remote-http-connection/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/channel-creation-options/index.html b/29/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/channel-creation-options/index.html index 59ac5129b..bdfe366ec 100644 --- a/29/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/channel-creation-options/index.html +++ b/29/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/channel-creation-options/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The options that will be used during the Jakarta Enterprise Beans remote channel creation


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/channel-creation-options/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/index.html b/29/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/index.html index 16200c8fc..f9fa08ece 100644 --- a/29/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/index.html +++ b/29/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A remoting ejb receiver reference included in the profile


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/service/async/index.html b/29/wildscribe/subsystem/ejb3/service/async/index.html index 67b79c447..f0906a15f 100644 --- a/29/wildscribe/subsystem/ejb3/service/async/index.html +++ b/29/wildscribe/subsystem/ejb3/service/async/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Enterprise Beans 3 Asynchronous Invocation Service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/service/async/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/service/identity/index.html b/29/wildscribe/subsystem/ejb3/service/identity/index.html index 64de2b0be..07443c1e7 100644 --- a/29/wildscribe/subsystem/ejb3/service/identity/index.html +++ b/29/wildscribe/subsystem/ejb3/service/identity/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Identity definition for security identity propagation


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/service/identity/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/service/iiop/index.html b/29/wildscribe/subsystem/ejb3/service/iiop/index.html index 4070a6fd0..cb236442f 100644 --- a/29/wildscribe/subsystem/ejb3/service/iiop/index.html +++ b/29/wildscribe/subsystem/ejb3/service/iiop/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The IIOP service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/service/iiop/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/service/remote/channel-creation-options/index.html b/29/wildscribe/subsystem/ejb3/service/remote/channel-creation-options/index.html index f346e3906..e4017e59c 100644 --- a/29/wildscribe/subsystem/ejb3/service/remote/channel-creation-options/index.html +++ b/29/wildscribe/subsystem/ejb3/service/remote/channel-creation-options/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The options that will be used during the Jakarta Enterprise Beans remote channel creation


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/service/remote/channel-creation-options/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/service/remote/index.html b/29/wildscribe/subsystem/ejb3/service/remote/index.html index 1bdc3518f..334c5d04b 100644 --- a/29/wildscribe/subsystem/ejb3/service/remote/index.html +++ b/29/wildscribe/subsystem/ejb3/service/remote/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Enterprise Beans 3 Remote Service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/service/remote/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/service/timer-service/database-data-store/index.html b/29/wildscribe/subsystem/ejb3/service/timer-service/database-data-store/index.html index a89019dda..e6158029e 100644 --- a/29/wildscribe/subsystem/ejb3/service/timer-service/database-data-store/index.html +++ b/29/wildscribe/subsystem/ejb3/service/timer-service/database-data-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An database based store for persistent Jakarta Enterprise Beans timers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/service/timer-service/database-data-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/service/timer-service/file-data-store/index.html b/29/wildscribe/subsystem/ejb3/service/timer-service/file-data-store/index.html index 12551ff21..27f660786 100644 --- a/29/wildscribe/subsystem/ejb3/service/timer-service/file-data-store/index.html +++ b/29/wildscribe/subsystem/ejb3/service/timer-service/file-data-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JVM local file store that stores persistent Jakarta Enterprise Beans timers


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/service/timer-service/file-data-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/service/timer-service/index.html b/29/wildscribe/subsystem/ejb3/service/timer-service/index.html index 20ea45ac2..05d9e20c4 100644 --- a/29/wildscribe/subsystem/ejb3/service/timer-service/index.html +++ b/29/wildscribe/subsystem/ejb3/service/timer-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/simple-cache/index.html b/29/wildscribe/subsystem/ejb3/simple-cache/index.html index 02d149fae..ef59ef632 100644 --- a/29/wildscribe/subsystem/ejb3/simple-cache/index.html +++ b/29/wildscribe/subsystem/ejb3/simple-cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A SFSB cache which is non-distributable


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/simple-cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/strict-max-bean-instance-pool/index.html b/29/wildscribe/subsystem/ejb3/strict-max-bean-instance-pool/index.html index 49de5a365..158692320 100644 --- a/29/wildscribe/subsystem/ejb3/strict-max-bean-instance-pool/index.html +++ b/29/wildscribe/subsystem/ejb3/strict-max-bean-instance-pool/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A bean instance pool with a strict upper limit


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/strict-max-bean-instance-pool/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/ejb3/thread-pool/index.html b/29/wildscribe/subsystem/ejb3/thread-pool/index.html index e1cbf7371..823caae1d 100644 --- a/29/wildscribe/subsystem/ejb3/thread-pool/index.html +++ b/29/wildscribe/subsystem/ejb3/thread-pool/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with an enhanced queue. In such a thread pool, its core and max size are configured independently, idle threads are always reused when available, and threads count is kept to a minimum.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/ejb3/thread-pool/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron-oidc-client/index.html b/29/wildscribe/subsystem/elytron-oidc-client/index.html index e9aa258b4..9bb514c84 100644 --- a/29/wildscribe/subsystem/elytron-oidc-client/index.html +++ b/29/wildscribe/subsystem/elytron-oidc-client/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for Elytron OIDC.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron-oidc-client/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron-oidc-client/provider/index.html b/29/wildscribe/subsystem/elytron-oidc-client/provider/index.html index 106ece00a..4a038227b 100644 --- a/29/wildscribe/subsystem/elytron-oidc-client/provider/index.html +++ b/29/wildscribe/subsystem/elytron-oidc-client/provider/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration for an OpenID Connect provider. If you have multiple deployments secured by the same OpenID provider you can share the provider configuration here.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron-oidc-client/provider/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron-oidc-client/realm/index.html b/29/wildscribe/subsystem/elytron-oidc-client/realm/index.html index 14a9b36eb..7c83c8179 100644 --- a/29/wildscribe/subsystem/elytron-oidc-client/realm/index.html +++ b/29/wildscribe/subsystem/elytron-oidc-client/realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration for a Keycloak realm. If you have multiple deployments secured by the same realm you can share the realm configuration here.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron-oidc-client/realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/credential/index.html b/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/credential/index.html index f1ce4ee7f..8d7619463 100644 --- a/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/credential/index.html +++ b/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/credential/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The credential used to communicate with the OpenID Connect provider.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/credential/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/index.html b/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/index.html index c599789d0..23f63886b 100644 --- a/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/index.html +++ b/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A deployment secured by an OpenID Connect provider.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/redirect-rewrite-rule/index.html b/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/redirect-rewrite-rule/index.html index 811ee6925..ea0d604b1 100644 --- a/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/redirect-rewrite-rule/index.html +++ b/29/wildscribe/subsystem/elytron-oidc-client/secure-deployment/redirect-rewrite-rule/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The rewrite rule for the redirect URI. The rewrite rule is an object notation, where the key is a regular expression with which the redirect URI is matched and the value is the replacement String.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/redirect-rewrite-rule/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron-oidc-client/secure-server/credential/index.html b/29/wildscribe/subsystem/elytron-oidc-client/secure-server/credential/index.html index f86156491..e2956cded 100644 --- a/29/wildscribe/subsystem/elytron-oidc-client/secure-server/credential/index.html +++ b/29/wildscribe/subsystem/elytron-oidc-client/secure-server/credential/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The credential used to communicate with the OpenID Connect provider.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron-oidc-client/secure-server/credential/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron-oidc-client/secure-server/index.html b/29/wildscribe/subsystem/elytron-oidc-client/secure-server/index.html index 5d1fb3dc7..7a8a62693 100644 --- a/29/wildscribe/subsystem/elytron-oidc-client/secure-server/index.html +++ b/29/wildscribe/subsystem/elytron-oidc-client/secure-server/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration used to secure the management console using Keycloak.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron-oidc-client/secure-server/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron-oidc-client/secure-server/redirect-rewrite-rule/index.html b/29/wildscribe/subsystem/elytron-oidc-client/secure-server/redirect-rewrite-rule/index.html index be0247e0e..ed5129e69 100644 --- a/29/wildscribe/subsystem/elytron-oidc-client/secure-server/redirect-rewrite-rule/index.html +++ b/29/wildscribe/subsystem/elytron-oidc-client/secure-server/redirect-rewrite-rule/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The rewrite rule for the redirect URI. The rewrite rule is an object notation, where the key is a regular expression with which the redirect URI is matched and the value is the replacement String.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron-oidc-client/secure-server/redirect-rewrite-rule/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/add-prefix-role-mapper/index.html b/29/wildscribe/subsystem/elytron/add-prefix-role-mapper/index.html index c73342cdb..4b2fcd23b 100644 --- a/29/wildscribe/subsystem/elytron/add-prefix-role-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/add-prefix-role-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A role mapper definition for a role mapper that adds a prefix to each provided.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/add-prefix-role-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/add-suffix-role-mapper/index.html b/29/wildscribe/subsystem/elytron/add-suffix-role-mapper/index.html index 35b96b8ee..02bf2e1a2 100644 --- a/29/wildscribe/subsystem/elytron/add-suffix-role-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/add-suffix-role-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A role mapper definition for a role mapper that adds a suffix to each provided.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/add-suffix-role-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-evidence-decoder/index.html b/29/wildscribe/subsystem/elytron/aggregate-evidence-decoder/index.html index d00baf976..f02c6d5e9 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-evidence-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-evidence-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An evidence decoder that is an aggregation of other evidence decoders. Given evidence, these evidence decoders will be attempted in order until one returns a non-null principal or until there are no more evidence decoders left to try.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-evidence-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-http-server-mechanism-factory/index.html b/29/wildscribe/subsystem/elytron/aggregate-http-server-mechanism-factory/index.html index 075f9fad0..620e2c0c4 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-http-server-mechanism-factory/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-http-server-mechanism-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A http server factory definition where the http server factory is an aggregation of other http server factories.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-http-server-mechanism-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-principal-decoder/index.html b/29/wildscribe/subsystem/elytron/aggregate-principal-decoder/index.html index 3cb1449d1..b13c87b50 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-principal-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-principal-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal decoder definition where the principal decoder is an aggregation of other principal decoders.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-principal-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-principal-transformer/index.html b/29/wildscribe/subsystem/elytron/aggregate-principal-transformer/index.html index 00a9df3ce..a9590b884 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-principal-transformer/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-principal-transformer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal transformer aggregating more principal transformers. Original principal is tried to be transformed by individual transformers until one return non-null principal - that is returned.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-principal-transformer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-providers/index.html b/29/wildscribe/subsystem/elytron/aggregate-providers/index.html index c60b1abfc..77b4392b7 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-providers/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-providers/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An aggregation of two or more Provider[] resources.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-providers/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-realm/index.html b/29/wildscribe/subsystem/elytron/aggregate-realm/index.html index 7fe5523ae..5fd323234 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-realm/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A realm definition that is an aggregation of two realms, one for the authentication steps and one for loading the identity for the authorization steps.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-role-decoder/index.html b/29/wildscribe/subsystem/elytron/aggregate-role-decoder/index.html index f20576367..cf3b00536 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-role-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-role-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a RoleDecoder that is an aggregation of other role decoders.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-role-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-role-mapper/index.html b/29/wildscribe/subsystem/elytron/aggregate-role-mapper/index.html index aa7929359..0eea13474 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-role-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-role-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A role mapper definition where the role mapper is an aggregation of other role mappers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-role-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-sasl-server-factory/index.html b/29/wildscribe/subsystem/elytron/aggregate-sasl-server-factory/index.html index 0c6459ec6..4aacd938f 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-sasl-server-factory/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-sasl-server-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A sasl server factory definition where the sasl server factory is an aggregation of other sasl server factories.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-sasl-server-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/aggregate-security-event-listener/index.html b/29/wildscribe/subsystem/elytron/aggregate-security-event-listener/index.html index 8005f5f77..4d186c393 100644 --- a/29/wildscribe/subsystem/elytron/aggregate-security-event-listener/index.html +++ b/29/wildscribe/subsystem/elytron/aggregate-security-event-listener/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An aggregation of two or more security event listener resources.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/aggregate-security-event-listener/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/authentication-configuration/index.html b/29/wildscribe/subsystem/elytron/authentication-configuration/index.html index bbd1b164b..7167ea295 100644 --- a/29/wildscribe/subsystem/elytron/authentication-configuration/index.html +++ b/29/wildscribe/subsystem/elytron/authentication-configuration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual authentication configuration definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/authentication-configuration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/authentication-context/index.html b/29/wildscribe/subsystem/elytron/authentication-context/index.html index 623147448..64fef537d 100644 --- a/29/wildscribe/subsystem/elytron/authentication-context/index.html +++ b/29/wildscribe/subsystem/elytron/authentication-context/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual authentication context definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/authentication-context/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/caching-realm/index.html b/29/wildscribe/subsystem/elytron/caching-realm/index.html index dcb85768a..afe9cf32e 100644 --- a/29/wildscribe/subsystem/elytron/caching-realm/index.html +++ b/29/wildscribe/subsystem/elytron/caching-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A realm definition that enables caching to another security realm. Caching strategy is LRU (Least Recently Used) where least accessed entries are discarded when maximum number of entries is reached.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/caching-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/case-principal-transformer/index.html b/29/wildscribe/subsystem/elytron/case-principal-transformer/index.html index 169d8c880..43c1866a8 100644 --- a/29/wildscribe/subsystem/elytron/case-principal-transformer/index.html +++ b/29/wildscribe/subsystem/elytron/case-principal-transformer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal transformer where the principal is adjusted to upper or lower case.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/case-principal-transformer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/certificate-authority-account/index.html b/29/wildscribe/subsystem/elytron/certificate-authority-account/index.html index 75c5b2597..4eb47a1b6 100644 --- a/29/wildscribe/subsystem/elytron/certificate-authority-account/index.html +++ b/29/wildscribe/subsystem/elytron/certificate-authority-account/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A certificate authority account definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/certificate-authority-account/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/certificate-authority/index.html b/29/wildscribe/subsystem/elytron/certificate-authority/index.html index 9df98bbfb..228cd2b31 100644 --- a/29/wildscribe/subsystem/elytron/certificate-authority/index.html +++ b/29/wildscribe/subsystem/elytron/certificate-authority/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A certificate authority definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/certificate-authority/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/chained-principal-transformer/index.html b/29/wildscribe/subsystem/elytron/chained-principal-transformer/index.html index 871297a6d..662a5ca1c 100644 --- a/29/wildscribe/subsystem/elytron/chained-principal-transformer/index.html +++ b/29/wildscribe/subsystem/elytron/chained-principal-transformer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal transformer definition where the principal transformer is a chaining of other principal transformers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/chained-principal-transformer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/client-ssl-context/index.html b/29/wildscribe/subsystem/elytron/client-ssl-context/index.html index 31cc4e2f6..81aa23ba1 100644 --- a/29/wildscribe/subsystem/elytron/client-ssl-context/index.html +++ b/29/wildscribe/subsystem/elytron/client-ssl-context/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An SSLContext for use on the client side of a connection.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/client-ssl-context/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/client-ssl-context/ssl-session/index.html b/29/wildscribe/subsystem/elytron/client-ssl-context/ssl-session/index.html index 71dd4d5eb..03eb1a7a3 100644 --- a/29/wildscribe/subsystem/elytron/client-ssl-context/ssl-session/index.html +++ b/29/wildscribe/subsystem/elytron/client-ssl-context/ssl-session/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A currently established SSL session.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/client-ssl-context/ssl-session/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/concatenating-principal-decoder/index.html b/29/wildscribe/subsystem/elytron/concatenating-principal-decoder/index.html index 1b2031319..0049dc154 100644 --- a/29/wildscribe/subsystem/elytron/concatenating-principal-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/concatenating-principal-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal decoder definition where the principal decoder is a concatenation of other principal decoders.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/concatenating-principal-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/configurable-http-server-mechanism-factory/index.html b/29/wildscribe/subsystem/elytron/configurable-http-server-mechanism-factory/index.html index c8f0e1973..36f39df93 100644 --- a/29/wildscribe/subsystem/elytron/configurable-http-server-mechanism-factory/index.html +++ b/29/wildscribe/subsystem/elytron/configurable-http-server-mechanism-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A HTTP server factory definition that wraps another HTTP server factory and applies the specified configuration and filtering.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/configurable-http-server-mechanism-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/configurable-sasl-server-factory/index.html b/29/wildscribe/subsystem/elytron/configurable-sasl-server-factory/index.html index db5a55de6..e7e89d956 100644 --- a/29/wildscribe/subsystem/elytron/configurable-sasl-server-factory/index.html +++ b/29/wildscribe/subsystem/elytron/configurable-sasl-server-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A SaslServerFactory definition that wraps another SaslServerFactory and applies the specified configuration and filtering.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/configurable-sasl-server-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/constant-permission-mapper/index.html b/29/wildscribe/subsystem/elytron/constant-permission-mapper/index.html index f853d8a3b..952e93321 100644 --- a/29/wildscribe/subsystem/elytron/constant-permission-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/constant-permission-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a permission mapper that always returns the same constant.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/constant-permission-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/constant-principal-decoder/index.html b/29/wildscribe/subsystem/elytron/constant-principal-decoder/index.html index 6f8a30b29..417d0f668 100644 --- a/29/wildscribe/subsystem/elytron/constant-principal-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/constant-principal-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a principal decoder that always returns the same constant.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/constant-principal-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/constant-principal-transformer/index.html b/29/wildscribe/subsystem/elytron/constant-principal-transformer/index.html index 9d154fb2a..99bec8b56 100644 --- a/29/wildscribe/subsystem/elytron/constant-principal-transformer/index.html +++ b/29/wildscribe/subsystem/elytron/constant-principal-transformer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal transformer definition for a PrincipalTransformer that always returns the same constant.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/constant-principal-transformer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/constant-realm-mapper/index.html b/29/wildscribe/subsystem/elytron/constant-realm-mapper/index.html index eac4a96ed..7812dfe08 100644 --- a/29/wildscribe/subsystem/elytron/constant-realm-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/constant-realm-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a constant RealmMapper that always returns the same value.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/constant-realm-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/constant-role-mapper/index.html b/29/wildscribe/subsystem/elytron/constant-role-mapper/index.html index d570ab1c9..60af4aabf 100644 --- a/29/wildscribe/subsystem/elytron/constant-role-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/constant-role-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A role mapper definition where a constant set of roles is always returned.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/constant-role-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/credential-store/index.html b/29/wildscribe/subsystem/elytron/credential-store/index.html index 2232daa5b..0c7f9b8d5 100644 --- a/29/wildscribe/subsystem/elytron/credential-store/index.html +++ b/29/wildscribe/subsystem/elytron/credential-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Credential store to keep alias for sensitive information such as passwords for external services.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/credential-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-credential-security-factory/index.html b/29/wildscribe/subsystem/elytron/custom-credential-security-factory/index.html index 4f19f13e5..b4ff955b8 100644 --- a/29/wildscribe/subsystem/elytron/custom-credential-security-factory/index.html +++ b/29/wildscribe/subsystem/elytron/custom-credential-security-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom credential SecurityFactory definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-credential-security-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-evidence-decoder/index.html b/29/wildscribe/subsystem/elytron/custom-evidence-decoder/index.html index ce6fb4050..a6fd9f208 100644 --- a/29/wildscribe/subsystem/elytron/custom-evidence-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/custom-evidence-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom evidence decoder.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-evidence-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-modifiable-realm/index.html b/29/wildscribe/subsystem/elytron/custom-modifiable-realm/index.html index dfbaa3ceb..d2b4d87af 100644 --- a/29/wildscribe/subsystem/elytron/custom-modifiable-realm/index.html +++ b/29/wildscribe/subsystem/elytron/custom-modifiable-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Custom realm configured as being modifiable will be expected to implement the ModifiableSecurityRealm interface. By configuring a realm as being modifiable management operations will be made available to manipulate the realm.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-modifiable-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-permission-mapper/index.html b/29/wildscribe/subsystem/elytron/custom-permission-mapper/index.html index 007630fd8..4085866de 100644 --- a/29/wildscribe/subsystem/elytron/custom-permission-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/custom-permission-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom permission mapper.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-permission-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-principal-decoder/index.html b/29/wildscribe/subsystem/elytron/custom-principal-decoder/index.html index d729735be..d611b89ea 100644 --- a/29/wildscribe/subsystem/elytron/custom-principal-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/custom-principal-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom principal decoder


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-principal-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-principal-transformer/index.html b/29/wildscribe/subsystem/elytron/custom-principal-transformer/index.html index 8148a0b1d..266a43581 100644 --- a/29/wildscribe/subsystem/elytron/custom-principal-transformer/index.html +++ b/29/wildscribe/subsystem/elytron/custom-principal-transformer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom principal transformer definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-principal-transformer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-realm-mapper/index.html b/29/wildscribe/subsystem/elytron/custom-realm-mapper/index.html index 616cd2a1c..3a94ecdc9 100644 --- a/29/wildscribe/subsystem/elytron/custom-realm-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/custom-realm-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom RealmMapper


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-realm-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-realm/index.html b/29/wildscribe/subsystem/elytron/custom-realm/index.html index e432fc05c..0eae6fdda 100644 --- a/29/wildscribe/subsystem/elytron/custom-realm/index.html +++ b/29/wildscribe/subsystem/elytron/custom-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom realm definitions can implement either the SecurityRealm interface or the ModifiableSecurityRealm interface. Regardless of which interface is implemented management operations will not be exposed to manage the realm. However other services that depend on the realm will still be able to perform a type check and cast to gain access to the modification API.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-role-decoder/index.html b/29/wildscribe/subsystem/elytron/custom-role-decoder/index.html index c3c3a65a5..90898b98f 100644 --- a/29/wildscribe/subsystem/elytron/custom-role-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/custom-role-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom RoleDecoder


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-role-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-role-mapper/index.html b/29/wildscribe/subsystem/elytron/custom-role-mapper/index.html index 42de797c0..be4739e47 100644 --- a/29/wildscribe/subsystem/elytron/custom-role-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/custom-role-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom RoleMapper


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-role-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/custom-security-event-listener/index.html b/29/wildscribe/subsystem/elytron/custom-security-event-listener/index.html index 0f39a5614..7fc07c98d 100644 --- a/29/wildscribe/subsystem/elytron/custom-security-event-listener/index.html +++ b/29/wildscribe/subsystem/elytron/custom-security-event-listener/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom security event listener. (Audit logger for example.)


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/custom-security-event-listener/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/dir-context/index.html b/29/wildscribe/subsystem/elytron/dir-context/index.html index f55357617..78598d1f5 100644 --- a/29/wildscribe/subsystem/elytron/dir-context/index.html +++ b/29/wildscribe/subsystem/elytron/dir-context/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration to connect to a directory (LDAP) server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/dir-context/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/distributed-realm/index.html b/29/wildscribe/subsystem/elytron/distributed-realm/index.html index 4135a8614..6aaed81bb 100644 --- a/29/wildscribe/subsystem/elytron/distributed-realm/index.html +++ b/29/wildscribe/subsystem/elytron/distributed-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A realm definition for authentication and authorization of identities distributed between multiple realms.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/distributed-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/expression/encryption/index.html b/29/wildscribe/subsystem/elytron/expression/encryption/index.html index dc2f299be..c1380eb19 100644 --- a/29/wildscribe/subsystem/elytron/expression/encryption/index.html +++ b/29/wildscribe/subsystem/elytron/expression/encryption/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of an expression resolver to decrypt encrypted expressions.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/expression/encryption/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/failover-realm/index.html b/29/wildscribe/subsystem/elytron/failover-realm/index.html index 3b152fcdb..c35d876e5 100644 --- a/29/wildscribe/subsystem/elytron/failover-realm/index.html +++ b/29/wildscribe/subsystem/elytron/failover-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A realm definition that wraps two realms. One for default operation and the second to fail over to in case the first one is unavailable.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/failover-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/file-audit-log/index.html b/29/wildscribe/subsystem/elytron/file-audit-log/index.html index 03daf970d..ecd4174ca 100644 --- a/29/wildscribe/subsystem/elytron/file-audit-log/index.html +++ b/29/wildscribe/subsystem/elytron/file-audit-log/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An audit logger that logs to a local file.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/file-audit-log/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/filesystem-realm/index.html b/29/wildscribe/subsystem/elytron/filesystem-realm/index.html index f8d921644..c9e882db3 100644 --- a/29/wildscribe/subsystem/elytron/filesystem-realm/index.html +++ b/29/wildscribe/subsystem/elytron/filesystem-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A simple security realm definition backed by the filesystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/filesystem-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/filtering-key-store/index.html b/29/wildscribe/subsystem/elytron/filtering-key-store/index.html index 21255422a..8b641a113 100644 --- a/29/wildscribe/subsystem/elytron/filtering-key-store/index.html +++ b/29/wildscribe/subsystem/elytron/filtering-key-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filtering KeyStore definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/filtering-key-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/http-authentication-factory/index.html b/29/wildscribe/subsystem/elytron/http-authentication-factory/index.html index bb047d4cf..07cab2468 100644 --- a/29/wildscribe/subsystem/elytron/http-authentication-factory/index.html +++ b/29/wildscribe/subsystem/elytron/http-authentication-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Resource containing the association of a SecurityDomain with a HttpServerAuthenticationMechanismFactory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/http-authentication-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/identity-realm/index.html b/29/wildscribe/subsystem/elytron/identity-realm/index.html index 9f582d05a..b5c5454a5 100644 --- a/29/wildscribe/subsystem/elytron/identity-realm/index.html +++ b/29/wildscribe/subsystem/elytron/identity-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Realm definition for a realm which contains a single pre-defined identity.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/identity-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/index.html b/29/wildscribe/subsystem/elytron/index.html index af63671ed..5ce78d6d7 100644 --- a/29/wildscribe/subsystem/elytron/index.html +++ b/29/wildscribe/subsystem/elytron/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Elytron Subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/jaas-realm/index.html b/29/wildscribe/subsystem/elytron/jaas-realm/index.html index 7925cc085..aefdbe7e8 100644 --- a/29/wildscribe/subsystem/elytron/jaas-realm/index.html +++ b/29/wildscribe/subsystem/elytron/jaas-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JAAS security realm definition. It uses a Login Context to verify user's credentials.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/jaas-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/jaspi-configuration/index.html b/29/wildscribe/subsystem/elytron/jaspi-configuration/index.html index b61afc4b3..12d261f34 100644 --- a/29/wildscribe/subsystem/elytron/jaspi-configuration/index.html +++ b/29/wildscribe/subsystem/elytron/jaspi-configuration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Resource containing the JASPI ServerAuthModule configuration for the servlet profile.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/jaspi-configuration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/jdbc-realm/index.html b/29/wildscribe/subsystem/elytron/jdbc-realm/index.html index 77f5d9c3f..56be6473a 100644 --- a/29/wildscribe/subsystem/elytron/jdbc-realm/index.html +++ b/29/wildscribe/subsystem/elytron/jdbc-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition backed by database using JDBC.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/jdbc-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/kerberos-security-factory/index.html b/29/wildscribe/subsystem/elytron/kerberos-security-factory/index.html index 760cf73c5..668fa35cb 100644 --- a/29/wildscribe/subsystem/elytron/kerberos-security-factory/index.html +++ b/29/wildscribe/subsystem/elytron/kerberos-security-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security factory for obtaining a GSSCredential for use during authentication.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/kerberos-security-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/key-manager/index.html b/29/wildscribe/subsystem/elytron/key-manager/index.html index f88bab487..621425caa 100644 --- a/29/wildscribe/subsystem/elytron/key-manager/index.html +++ b/29/wildscribe/subsystem/elytron/key-manager/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A key manager definition for creating the KeyManager as used to create an SSLContext.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/key-manager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/key-store-realm/index.html b/29/wildscribe/subsystem/elytron/key-store-realm/index.html index e151d9ae1..e25d20e39 100644 --- a/29/wildscribe/subsystem/elytron/key-store-realm/index.html +++ b/29/wildscribe/subsystem/elytron/key-store-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition backed by a key store.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/key-store-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/key-store/index.html b/29/wildscribe/subsystem/elytron/key-store/index.html index 73b8ea374..aef5f5f60 100644 --- a/29/wildscribe/subsystem/elytron/key-store/index.html +++ b/29/wildscribe/subsystem/elytron/key-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A KeyStore definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/key-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/ldap-key-store/index.html b/29/wildscribe/subsystem/elytron/ldap-key-store/index.html index 179946e8a..80d55d39c 100644 --- a/29/wildscribe/subsystem/elytron/ldap-key-store/index.html +++ b/29/wildscribe/subsystem/elytron/ldap-key-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A LdapKeyStore definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/ldap-key-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/ldap-realm/index.html b/29/wildscribe/subsystem/elytron/ldap-realm/index.html index 7fc0fddc8..08eee7339 100644 --- a/29/wildscribe/subsystem/elytron/ldap-realm/index.html +++ b/29/wildscribe/subsystem/elytron/ldap-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition backed by LDAP.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/ldap-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/logical-permission-mapper/index.html b/29/wildscribe/subsystem/elytron/logical-permission-mapper/index.html index 7cf5109ab..416731d5a 100644 --- a/29/wildscribe/subsystem/elytron/logical-permission-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/logical-permission-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a logical permission mapper.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/logical-permission-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/logical-role-mapper/index.html b/29/wildscribe/subsystem/elytron/logical-role-mapper/index.html index 9807d349c..862bffdbf 100644 --- a/29/wildscribe/subsystem/elytron/logical-role-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/logical-role-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A RoleMapper definition for a RoleMapper that performs a logical operation using two referenced RoleMappers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/logical-role-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/mapped-regex-realm-mapper/index.html b/29/wildscribe/subsystem/elytron/mapped-regex-realm-mapper/index.html index 972058793..4845bde2f 100644 --- a/29/wildscribe/subsystem/elytron/mapped-regex-realm-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/mapped-regex-realm-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a RealmMapper implementation that first uses a regular expression to extract the realm name, this is then converted using the configured mapping of realm names.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/mapped-regex-realm-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/mapped-role-mapper/index.html b/29/wildscribe/subsystem/elytron/mapped-role-mapper/index.html index 59e6d6d29..f1b2b184d 100644 --- a/29/wildscribe/subsystem/elytron/mapped-role-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/mapped-role-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A RoleMapper definition for a RoleMapper that performs a mapping based on configured map.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/mapped-role-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/mechanism-provider-filtering-sasl-server-factory/index.html b/29/wildscribe/subsystem/elytron/mechanism-provider-filtering-sasl-server-factory/index.html index c990645a3..76b20a889 100644 --- a/29/wildscribe/subsystem/elytron/mechanism-provider-filtering-sasl-server-factory/index.html +++ b/29/wildscribe/subsystem/elytron/mechanism-provider-filtering-sasl-server-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A SaslServerFactory definition that wraps another SaslServerFactory and enables filtering of mechanisms based on the mechanism name and Provider name and version. Any mechanisms loaded by factories not located using a Provider will not be filtered by this definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/mechanism-provider-filtering-sasl-server-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/periodic-rotating-file-audit-log/index.html b/29/wildscribe/subsystem/elytron/periodic-rotating-file-audit-log/index.html index fb1981480..6b29ae0e5 100644 --- a/29/wildscribe/subsystem/elytron/periodic-rotating-file-audit-log/index.html +++ b/29/wildscribe/subsystem/elytron/periodic-rotating-file-audit-log/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An audit log definition for persisting an audit log to a local files rotating the log after a time period derived from the given suffix string, which should be in a format understood by java.time.format.DateTimeFormatter.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/periodic-rotating-file-audit-log/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/permission-set/index.html b/29/wildscribe/subsystem/elytron/permission-set/index.html index cf7bd56cf..4fec12924 100644 --- a/29/wildscribe/subsystem/elytron/permission-set/index.html +++ b/29/wildscribe/subsystem/elytron/permission-set/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a permission set.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/permission-set/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/policy/index.html b/29/wildscribe/subsystem/elytron/policy/index.html index 4d4d47e84..a5a39647e 100644 --- a/29/wildscribe/subsystem/elytron/policy/index.html +++ b/29/wildscribe/subsystem/elytron/policy/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A definition that sets up a policy provider.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/policy/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/properties-realm/index.html b/29/wildscribe/subsystem/elytron/properties-realm/index.html index d9bf81a47..0352bf79b 100644 --- a/29/wildscribe/subsystem/elytron/properties-realm/index.html +++ b/29/wildscribe/subsystem/elytron/properties-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition backed by properties files.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/properties-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/provider-http-server-mechanism-factory/index.html b/29/wildscribe/subsystem/elytron/provider-http-server-mechanism-factory/index.html index 6894c42f9..0460ec408 100644 --- a/29/wildscribe/subsystem/elytron/provider-http-server-mechanism-factory/index.html +++ b/29/wildscribe/subsystem/elytron/provider-http-server-mechanism-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A http server factory definition where the http server factory is an aggregation of factories from the Provider[]


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/provider-http-server-mechanism-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/provider-loader/index.html b/29/wildscribe/subsystem/elytron/provider-loader/index.html index 8481ed964..3c21b68bc 100644 --- a/29/wildscribe/subsystem/elytron/provider-loader/index.html +++ b/29/wildscribe/subsystem/elytron/provider-loader/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A definition for a Provider loader.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/provider-loader/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/provider-sasl-server-factory/index.html b/29/wildscribe/subsystem/elytron/provider-sasl-server-factory/index.html index a67855b82..bd14e978d 100644 --- a/29/wildscribe/subsystem/elytron/provider-sasl-server-factory/index.html +++ b/29/wildscribe/subsystem/elytron/provider-sasl-server-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A sasl server factory definition where the sasl server factory is an aggregation of factories from the Provider[]


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/provider-sasl-server-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/regex-principal-transformer/index.html b/29/wildscribe/subsystem/elytron/regex-principal-transformer/index.html index 116d14fab..0eb1ec72a 100644 --- a/29/wildscribe/subsystem/elytron/regex-principal-transformer/index.html +++ b/29/wildscribe/subsystem/elytron/regex-principal-transformer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A regular expression based principal transformer


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/regex-principal-transformer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/regex-role-mapper/index.html b/29/wildscribe/subsystem/elytron/regex-role-mapper/index.html index a79e1d5a0..084cfbc9d 100644 --- a/29/wildscribe/subsystem/elytron/regex-role-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/regex-role-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A RoleMapper definition for a RoleMapper that performs a mapping based on regex and replaces matching roles with replacement pattern.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/regex-role-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/regex-validating-principal-transformer/index.html b/29/wildscribe/subsystem/elytron/regex-validating-principal-transformer/index.html index f5ac894d1..761350977 100644 --- a/29/wildscribe/subsystem/elytron/regex-validating-principal-transformer/index.html +++ b/29/wildscribe/subsystem/elytron/regex-validating-principal-transformer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A regular expression based principal transformer which uses the regular expression to validate the name.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/regex-validating-principal-transformer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/sasl-authentication-factory/index.html b/29/wildscribe/subsystem/elytron/sasl-authentication-factory/index.html index 8b497390c..229394e67 100644 --- a/29/wildscribe/subsystem/elytron/sasl-authentication-factory/index.html +++ b/29/wildscribe/subsystem/elytron/sasl-authentication-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Resource containing the association of a SecurityDomain with a SaslServerFactory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/sasl-authentication-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/secret-key-credential-store/index.html b/29/wildscribe/subsystem/elytron/secret-key-credential-store/index.html index 45436239d..fd6cec1a0 100644 --- a/29/wildscribe/subsystem/elytron/secret-key-credential-store/index.html +++ b/29/wildscribe/subsystem/elytron/secret-key-credential-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A simple credential store to manage secret keys store clearly.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/secret-key-credential-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/security-domain/index.html b/29/wildscribe/subsystem/elytron/security-domain/index.html index d128d3cbd..878931b9f 100644 --- a/29/wildscribe/subsystem/elytron/security-domain/index.html +++ b/29/wildscribe/subsystem/elytron/security-domain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security domain definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/security-domain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/server-ssl-context/index.html b/29/wildscribe/subsystem/elytron/server-ssl-context/index.html index e5292e738..9718bfbd3 100644 --- a/29/wildscribe/subsystem/elytron/server-ssl-context/index.html +++ b/29/wildscribe/subsystem/elytron/server-ssl-context/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An SSLContext for use on the server side of a connection.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/server-ssl-context/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/server-ssl-context/ssl-session/index.html b/29/wildscribe/subsystem/elytron/server-ssl-context/ssl-session/index.html index e293cf01b..66d46663f 100644 --- a/29/wildscribe/subsystem/elytron/server-ssl-context/ssl-session/index.html +++ b/29/wildscribe/subsystem/elytron/server-ssl-context/ssl-session/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A currently established SSL session.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/server-ssl-context/ssl-session/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/server-ssl-sni-context/index.html b/29/wildscribe/subsystem/elytron/server-ssl-sni-context/index.html index c6154e795..18179d97d 100644 --- a/29/wildscribe/subsystem/elytron/server-ssl-sni-context/index.html +++ b/29/wildscribe/subsystem/elytron/server-ssl-sni-context/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A server side SNI Aware SSLContext that selects between an underlying context based on the provided SNI name


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/server-ssl-sni-context/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/service-loader-http-server-mechanism-factory/index.html b/29/wildscribe/subsystem/elytron/service-loader-http-server-mechanism-factory/index.html index 19949f18b..53db85f2d 100644 --- a/29/wildscribe/subsystem/elytron/service-loader-http-server-mechanism-factory/index.html +++ b/29/wildscribe/subsystem/elytron/service-loader-http-server-mechanism-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A http server factory definition where the http server factory is an aggregation of factories identified using a ServiceLoader


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/service-loader-http-server-mechanism-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/service-loader-sasl-server-factory/index.html b/29/wildscribe/subsystem/elytron/service-loader-sasl-server-factory/index.html index 11d6302b9..54cf397dc 100644 --- a/29/wildscribe/subsystem/elytron/service-loader-sasl-server-factory/index.html +++ b/29/wildscribe/subsystem/elytron/service-loader-sasl-server-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A sasl server factory definition where the sasl server factory is an aggregation of factories identified using a ServiceLoader


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/service-loader-sasl-server-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/simple-permission-mapper/index.html b/29/wildscribe/subsystem/elytron/simple-permission-mapper/index.html index b77f495f2..55f1b0d0d 100644 --- a/29/wildscribe/subsystem/elytron/simple-permission-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/simple-permission-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a simple configured permission mapper.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/simple-permission-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/simple-regex-realm-mapper/index.html b/29/wildscribe/subsystem/elytron/simple-regex-realm-mapper/index.html index 5ce4bce20..80650c50c 100644 --- a/29/wildscribe/subsystem/elytron/simple-regex-realm-mapper/index.html +++ b/29/wildscribe/subsystem/elytron/simple-regex-realm-mapper/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a simple RealmMapper that attempts to extract the realm name using the capture group from the regular expression, if that does not provide a match then the delegate RealmMapper is used instead.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/simple-regex-realm-mapper/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/simple-role-decoder/index.html b/29/wildscribe/subsystem/elytron/simple-role-decoder/index.html index 7c2e927cf..dfb3bcfe8 100644 --- a/29/wildscribe/subsystem/elytron/simple-role-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/simple-role-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a simple RoleDecoder that takes a single attribute and maps it directly to roles.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/simple-role-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/size-rotating-file-audit-log/index.html b/29/wildscribe/subsystem/elytron/size-rotating-file-audit-log/index.html index c13aae5b9..797ffbeba 100644 --- a/29/wildscribe/subsystem/elytron/size-rotating-file-audit-log/index.html +++ b/29/wildscribe/subsystem/elytron/size-rotating-file-audit-log/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An audit log definition for persisting an audit log to a local files rotating the log after the size of the file grows beyond a certain point and keeping a fixed number of backups.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/size-rotating-file-audit-log/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/source-address-role-decoder/index.html b/29/wildscribe/subsystem/elytron/source-address-role-decoder/index.html index 4ef99080d..d15d124b1 100644 --- a/29/wildscribe/subsystem/elytron/source-address-role-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/source-address-role-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a RoleDecoder that maps roles based on the IP address of a remote client.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/source-address-role-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/syslog-audit-log/index.html b/29/wildscribe/subsystem/elytron/syslog-audit-log/index.html index dca4cb59c..e0a7ab7a4 100644 --- a/29/wildscribe/subsystem/elytron/syslog-audit-log/index.html +++ b/29/wildscribe/subsystem/elytron/syslog-audit-log/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An audit logger that sends audit events to a remote syslog server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/syslog-audit-log/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/token-realm/index.html b/29/wildscribe/subsystem/elytron/token-realm/index.html index 30ce6a89e..2d92e1862 100644 --- a/29/wildscribe/subsystem/elytron/token-realm/index.html +++ b/29/wildscribe/subsystem/elytron/token-realm/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition capable of validating and extracting identities from security tokens.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/token-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/trust-manager/index.html b/29/wildscribe/subsystem/elytron/trust-manager/index.html index 414b24a96..3ace8df54 100644 --- a/29/wildscribe/subsystem/elytron/trust-manager/index.html +++ b/29/wildscribe/subsystem/elytron/trust-manager/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A trust manager definition for creating the TrustManager[] as used to create an SSLContext.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/trust-manager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/virtual-security-domain/index.html b/29/wildscribe/subsystem/elytron/virtual-security-domain/index.html index 0c35f0481..1343f9011 100644 --- a/29/wildscribe/subsystem/elytron/virtual-security-domain/index.html +++ b/29/wildscribe/subsystem/elytron/virtual-security-domain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A virtual security domain definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/virtual-security-domain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/x500-attribute-principal-decoder/index.html b/29/wildscribe/subsystem/elytron/x500-attribute-principal-decoder/index.html index 27f83ba9a..c45383a93 100644 --- a/29/wildscribe/subsystem/elytron/x500-attribute-principal-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/x500-attribute-principal-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a X.500 attribute based principal decoder


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/x500-attribute-principal-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/x500-subject-evidence-decoder/index.html b/29/wildscribe/subsystem/elytron/x500-subject-evidence-decoder/index.html index 2091f6b3d..31d766009 100644 --- a/29/wildscribe/subsystem/elytron/x500-subject-evidence-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/x500-subject-evidence-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An evidence decoder that derives the principal associated with the given evidence from the subject from the first certificate in the given evidence.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/x500-subject-evidence-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/elytron/x509-subject-alt-name-evidence-decoder/index.html b/29/wildscribe/subsystem/elytron/x509-subject-alt-name-evidence-decoder/index.html index cc2799eb0..6f300cd8f 100644 --- a/29/wildscribe/subsystem/elytron/x509-subject-alt-name-evidence-decoder/index.html +++ b/29/wildscribe/subsystem/elytron/x509-subject-alt-name-evidence-decoder/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An evidence decoder that derives the principal associated with the given evidence from an X.509 subject alternative name from the first certificate in the given evidence.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/elytron/x509-subject-alt-name-evidence-decoder/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/health/index.html b/29/wildscribe/subsystem/health/index.html index d31523eed..149461dd2 100644 --- a/29/wildscribe/subsystem/health/index.html +++ b/29/wildscribe/subsystem/health/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for Health


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/health/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/iiop-openjdk/index.html b/29/wildscribe/subsystem/iiop-openjdk/index.html index 36ba75d57..a61bcb54c 100644 --- a/29/wildscribe/subsystem/iiop-openjdk/index.html +++ b/29/wildscribe/subsystem/iiop-openjdk/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The iiop-openjdk subsystem configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/iiop-openjdk/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/cache/component/locking/index.html b/29/wildscribe/subsystem/infinispan/cache-container/cache/component/locking/index.html index 4ce4f38a7..ce4ad200e 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/cache/component/locking/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/cache/component/locking/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/cache/component/locking/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/cache/component/partition-handling/index.html b/29/wildscribe/subsystem/infinispan/cache-container/cache/component/partition-handling/index.html index 2d74ae897..fe0f36c9b 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/cache/component/partition-handling/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/cache/component/partition-handling/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The partition handling configuration for distributed and replicated caches.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/cache/component/partition-handling/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/cache/component/persistence/index.html b/29/wildscribe/subsystem/infinispan/cache-container/cache/component/persistence/index.html index 286e9c1a9..dacf7f61d 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/cache/component/persistence/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/cache/component/persistence/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the infinispan subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/cache/component/persistence/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/cache/component/transaction/index.html b/29/wildscribe/subsystem/infinispan/cache-container/cache/component/transaction/index.html index fa11885c8..3677a6f2a 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/cache/component/transaction/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/cache/component/transaction/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/cache/component/transaction/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/cache/index.html b/29/wildscribe/subsystem/infinispan/cache-container/cache/index.html index 1bfb49756..78e45a599 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/cache/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the infinispan subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html new file mode 100644 index 000000000..5b41db1bb --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/backup/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/backup/index.html index 40ac6e5b6..480bffffd 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/backup/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/backup/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A backup site to which to replicate this cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/backup/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/index.html index 5376ef795..4eaa750e8 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The remote backups for this cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/expiration/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/expiration/index.html index 9d02dcb2e..ead6e9a01 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/expiration/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/expiration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/expiration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/locking/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/locking/index.html index 679cbc098..22618fbd7 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/locking/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/locking/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/locking/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/partition-handling/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/partition-handling/index.html index f2d3f41e0..510bc00e4 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/partition-handling/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/partition-handling/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The partition handling configuration for distributed and replicated caches.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/partition-handling/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/state-transfer/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/state-transfer/index.html index a123fd2b1..d4a560952 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/state-transfer/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/state-transfer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The state transfer configuration for distributed and replicated caches.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/state-transfer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/transaction/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/transaction/index.html index b8ca778df..84e6957f2 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/transaction/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/transaction/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/transaction/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/index.html index 05da392b1..3c45f37e9 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A distributed cache configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..174664f01 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/heap/index.html index 4b41f81b4..fb152d5a6 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..2ab53504e --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/off-heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/off-heap/index.html index 3effb3cc3..a025264e1 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/off-heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/off-heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/off-heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..10e086e53 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..382b6864a --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..77941cbca --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..ba489b8f2 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..6cc6f6800 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/index.html index 287bb6923..168474789 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html new file mode 100644 index 000000000..497ef66c8 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/behind/index.html index 2cdf4a522..2c3b26737 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/through/index.html index d28d5eb4f..e0c6259fc 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/index.html index 4fa542198..ebe5ecd62 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html new file mode 100644 index 000000000..03f76559b --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/behind/index.html index 5500ea3d8..2c766bec7 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/through/index.html index f93efa9c1..83dfd1fcf 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/index.html index 1bf99f87b..0e65f0e6d 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..aed86f9ae --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/behind/index.html index b4f39594c..eaba63f52 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/through/index.html index 1f179bf1f..3056c5eae 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/index.html index 855b32dc0..aa51509c4 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..5c01b59e2 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/table/string/index.html index c24e94c46..f5e6a4d89 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/table/string/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/table/string/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/behind/index.html index 1cfb0b0df..32bec6fd9 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/through/index.html index 3ebb068f2..d1e2c7274 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..a5e52634b --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..0eb9749af --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..a767a9763 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..2aafbe573 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..98e61e2ac --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..3559362e3 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/none/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/none/index.html index 4399ea8c8..65385db83 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/none/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/none/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/index.html index e73e3d18a..fd7b85637 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html new file mode 100644 index 000000000..7eda66c0c --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/behind/index.html index 6c01de537..e646b3cd3 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/through/index.html index 6f45697a2..cd43c3fc7 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/index.html b/29/wildscribe/subsystem/infinispan/cache-container/index.html index ec9866c3f..8c966a79d 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of an infinispan cache container


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/expiration/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/expiration/index.html index d4bb25e30..65d5eaa86 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/expiration/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/expiration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/expiration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/locking/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/locking/index.html index 8d1f8fdb4..2b4369c08 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/locking/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/locking/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/locking/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/transaction/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/transaction/index.html index 66ac34ffd..e66f753b5 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/transaction/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/transaction/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/transaction/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/index.html index 7f14ba8f0..29b0a0ab6 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An invalidation cache


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..ebb9469b1 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/heap/index.html index e45c5f287..ea1cd33cc 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..b733bc076 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/off-heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/off-heap/index.html index f07274893..963ae8b5c 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/off-heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/off-heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/off-heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..0ea9fad1a --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..e6078f7ed --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..a07234ba0 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..f7a822f5c --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..cdcbe339d --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/index.html index 11f03a46b..80c0767db 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html new file mode 100644 index 000000000..33144f5bf --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/behind/index.html index 9893511d8..cd5679f76 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/through/index.html index 811309b4b..69de7c0ec 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/index.html index 2cd2a3fb3..405b6c6cf 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html new file mode 100644 index 000000000..fadcf8dc5 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/behind/index.html index d3553b387..9976c068b 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/through/index.html index 124b4500f..c17f0c6d1 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/index.html index 493c6d6a6..9a60686b3 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..4f39259ef --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/behind/index.html index 570ec923d..f77b1b81d 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/through/index.html index 9f079d277..f15c40f42 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/index.html index 7b2315fc0..b0304d76d 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..038d0cc57 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/table/string/index.html index d1675cda5..20a188d2e 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/table/string/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/table/string/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/behind/index.html index cb7a6388a..c66f5053f 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/through/index.html index 6d7d084b1..aefabb6a6 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..c676ca0ac --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..f0e1d9eab --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..44977c382 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..44b59de2f --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..c2421afb0 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..c870a5491 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/none/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/none/index.html index 3a8d6d474..6828cee52 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/none/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/none/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/index.html index 573e2e886..59bd65c9e 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html new file mode 100644 index 000000000..dc9641362 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/behind/index.html index 9955819ab..319aaa8ae 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/through/index.html index c93ecb224..36fa6d1fd 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/expiration/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/expiration/index.html index 8d9253ce4..ad47eae25 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/expiration/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/expiration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/expiration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/locking/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/locking/index.html index c8d76e75d..5a921836a 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/locking/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/locking/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/locking/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/transaction/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/transaction/index.html index 06c4f20e2..40bbf54ee 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/transaction/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/component/transaction/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/transaction/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/index.html index 49ba518ba..c6f2c7f42 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A local cache configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..d64120b9f --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/heap/index.html index 4dd58fc14..bb0c2dece 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..883cfbe0a --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/off-heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/off-heap/index.html index 6ea0ff7b7..37db1443d 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/off-heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/off-heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/off-heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..e58b4ddf8 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..5081e28c5 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..dfc3bfe3d --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..0e6158068 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..a5301bf59 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/index.html index a7f0da186..a3b131129 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html new file mode 100644 index 000000000..cd1a8b528 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/behind/index.html index 086b18058..f27f358be 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/through/index.html index 508520214..bfdd830fc 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/index.html index e5ee36dc6..77d030c44 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html new file mode 100644 index 000000000..b564a39aa --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/behind/index.html index 1155d6469..146e79aa8 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/through/index.html index 665c1e723..cba808470 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/index.html index f4d619de6..ba1982d28 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..797159ec2 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/behind/index.html index 8e071d3a1..45ab26ebb 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/through/index.html index a89152145..abbe47c1a 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/index.html index 61a446ecc..b71bdfab8 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..78dca6952 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/table/string/index.html index 40287d55c..67b5ed979 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/table/string/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/table/string/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/behind/index.html index 314d42074..6bcf2359d 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/through/index.html index aa6b24834..b6c14255e 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..f533b95e3 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..a6031e0f5 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..e00269387 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..f308b5438 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..2dbd39aaa --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..5a1a41eab --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/none/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/none/index.html index 6149cbc34..bc28e38ab 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/none/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/none/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/index.html index 14b58a5e7..82db68ddc 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html new file mode 100644 index 000000000..9a187d43c --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/behind/index.html index 4be9fa066..8f67acd86 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/through/index.html index bdb79e9ba..836cfa994 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html new file mode 100644 index 000000000..f3e9d8733 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/backup/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/backup/index.html index 9a7b56acc..3bae1e535 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/backup/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/backup/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A backup site to which to replicate this cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/backup/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/index.html index ba7e8c0b1..6c52b5cf5 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The remote backups for this cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/expiration/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/expiration/index.html index 3da6c0e06..bfcecbe67 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/expiration/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/expiration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/expiration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/locking/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/locking/index.html index d5bc9448d..cce0f7276 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/locking/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/locking/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/locking/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/partition-handling/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/partition-handling/index.html index 6edf442bc..e3a669b9c 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/partition-handling/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/partition-handling/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The partition handling configuration for distributed and replicated caches.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/partition-handling/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/state-transfer/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/state-transfer/index.html index 41b31c3d8..02e29f344 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/state-transfer/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/state-transfer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The state transfer configuration for distributed and replicated caches.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/state-transfer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/transaction/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/transaction/index.html index 3628f6086..bd10001cb 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/transaction/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/transaction/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/transaction/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/index.html index 92898160e..27ed30737 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A replicated cache configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..9b6c0490e --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/heap/index.html index 9d38f62f6..0b33e9e38 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..676f5bdd4 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/off-heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/off-heap/index.html index 612bc3afb..8ecf082a6 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/off-heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/off-heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/off-heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..adcd72e0a --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..29615fe3f --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..a44834c51 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..587c22903 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..a2e72e570 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/index.html index d05fc0cf3..f86cabe06 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html new file mode 100644 index 000000000..2447b2eff --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/behind/index.html index 6158ca247..75c5dfd15 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/through/index.html index dda900083..01007df22 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/index.html index 47bcad4f1..f8a1def29 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html new file mode 100644 index 000000000..7badd30d3 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/behind/index.html index 15a7e8c89..1dad9fc6b 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/through/index.html index 3d39c6586..9dfb71526 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/index.html index 029b40f51..9166012a1 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..db0f8d59f --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/behind/index.html index 556492f07..439078eb8 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/through/index.html index 838fd3ba3..6cfa8776c 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/index.html index fd65ae3ac..87ef18c9d 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..aabf871dd --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/table/string/index.html index 94da4fd9c..daad881bd 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/table/string/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/table/string/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/behind/index.html index a64ae0bf1..df2bcb276 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/through/index.html index 499a49bd7..233e340a1 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..f2b56d5a1 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..b95ed82f3 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..6d2ec75bd --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..5228355ff --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..ffe34a886 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..26c1b6cc4 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/none/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/none/index.html index 9f7abe7d2..aa559cf48 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/none/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/none/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/index.html index db43ba543..f6d1f425c 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html new file mode 100644 index 000000000..8b11ba6aa --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/behind/index.html index 061262e58..df2225f7a 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/through/index.html index c812e0afa..44912377a 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html new file mode 100644 index 000000000..0a333d63b --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/backup/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/backup/index.html index 478fa653b..c8db97598 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/backup/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/backup/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A backup site to which to replicate this cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/backup/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/index.html index 9bc69d9d6..cec6b8877 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The remote backups for this cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/expiration/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/expiration/index.html index 5115210f5..46f1f3570 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/expiration/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/expiration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/expiration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/locking/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/locking/index.html index 62901373f..02c7e479d 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/locking/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/locking/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/locking/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/partition-handling/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/partition-handling/index.html index 4e2a2d813..a4502033a 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/partition-handling/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/partition-handling/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The partition handling configuration for distributed and replicated caches.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/partition-handling/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/state-transfer/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/state-transfer/index.html index 6749b4e45..49297f853 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/state-transfer/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/state-transfer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The state transfer configuration for distributed and replicated caches.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/state-transfer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/transaction/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/transaction/index.html index d9c7b8abb..f26d4e477 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/transaction/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/transaction/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/transaction/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/index.html index 1d4b87ac3..a7e1ce081 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 16.0.0
Deprecated. Use distributed-cache with owners=2 instead.

A scattered cache configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..7d3042887 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/heap/index.html index 2a14228e9..cbe7751ab 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..d8b6700fd --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/off-heap/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/off-heap/index.html index d7d88a766..19986bd45 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/off-heap/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/off-heap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/off-heap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..158a51dea --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..dc2150772 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..25f05df23 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..b71d90c2c --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..d87c2953b --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/index.html index 99b4acba9..cbe704e7c 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html new file mode 100644 index 000000000..0a05224f9 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/behind/index.html index dfa4d2527..042414c8a 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/through/index.html index 4caaf0ca8..9ce55f399 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/index.html index ae1769e46..0884255df 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html new file mode 100644 index 000000000..92a487e36 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/behind/index.html index 5c11b24f3..cc7518274 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/through/index.html index 73015f6db..f95b75ba9 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/index.html index 6c7cef9aa..6500797b0 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..25354bc3a --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/behind/index.html index b535becea..687c43335 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/through/index.html index 34d08c8fe..6b0e43821 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/index.html index 6b11ed125..d3af9ba3a 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..4eee4e558 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/table/string/index.html index 3489ce8e0..fd62c6f88 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/table/string/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/table/string/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/behind/index.html index f1f3ffef8..2669a1443 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/through/index.html index 8d1e4af98..397c67cfe 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..aa85cf6e0 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..0786ac811 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..1ea6641f8 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..f54439196 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..aef4b3cce --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..d325abb9e --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/none/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/none/index.html index 8b5b5451d..7a20a8ae8 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/none/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/none/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/index.html index 9a4594c22..cb7352c3c 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html new file mode 100644 index 000000000..1e098df38 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/behind/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/behind/index.html index aa017e03c..e7d8679a2 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/behind/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/behind/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/behind/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/through/index.html b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/through/index.html index 26879f70a..4cabd381a 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/through/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/through/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/through/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html new file mode 100644 index 000000000..78bdc213b --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/blocking/index.html b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/blocking/index.html index 210168839..2302e383b 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/blocking/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/blocking/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for for blocking operations.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/blocking/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/expiration/index.html b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/expiration/index.html index b6afe38ae..7b953a828 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/expiration/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/expiration/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for for evictions.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/expiration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/listener/index.html b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/listener/index.html index da64ccff4..5261a2cd4 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/listener/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/listener/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for asynchronous cache listener notifications.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/listener/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/non-blocking/index.html b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/non-blocking/index.html index 7601a6d9c..3dd7af274 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/non-blocking/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/non-blocking/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for for non-blocking operations.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/non-blocking/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html new file mode 100644 index 000000000..af7718a23 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html new file mode 100644 index 000000000..b6605043c --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html new file mode 100644 index 000000000..f687e015b --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html new file mode 100644 index 000000000..8447c79fa --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/transport/jgroups/index.html b/29/wildscribe/subsystem/infinispan/cache-container/transport/jgroups/index.html index 5da4a140c..870acaa09 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/transport/jgroups/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/transport/jgroups/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The description of the transport used by this cache container


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/transport/jgroups/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/cache-container/transport/none/index.html b/29/wildscribe/subsystem/infinispan/cache-container/transport/none/index.html index a912b1334..370ea07a7 100644 --- a/29/wildscribe/subsystem/infinispan/cache-container/transport/none/index.html +++ b/29/wildscribe/subsystem/infinispan/cache-container/transport/none/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A local-only transport used by this cache-container


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/cache-container/transport/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/index.html b/29/wildscribe/subsystem/infinispan/index.html index 6eb0b34f5..7debd1819 100644 --- a/29/wildscribe/subsystem/infinispan/index.html +++ b/29/wildscribe/subsystem/infinispan/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the infinispan subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/remote-cache-container/component/connection-pool/index.html b/29/wildscribe/subsystem/infinispan/remote-cache-container/component/connection-pool/index.html index 9721659e8..5ba82f50d 100644 --- a/29/wildscribe/subsystem/infinispan/remote-cache-container/component/connection-pool/index.html +++ b/29/wildscribe/subsystem/infinispan/remote-cache-container/component/connection-pool/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of the connection pool.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/remote-cache-container/component/connection-pool/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/remote-cache-container/component/security/index.html b/29/wildscribe/subsystem/infinispan/remote-cache-container/component/security/index.html index 08f6f8cae..3f294b772 100644 --- a/29/wildscribe/subsystem/infinispan/remote-cache-container/component/security/index.html +++ b/29/wildscribe/subsystem/infinispan/remote-cache-container/component/security/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Security configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/remote-cache-container/component/security/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html b/29/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html new file mode 100644 index 000000000..a9de98fd2 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/remote-cache-container/index.html b/29/wildscribe/subsystem/infinispan/remote-cache-container/index.html index 7ee368716..61148fd3c 100644 --- a/29/wildscribe/subsystem/infinispan/remote-cache-container/index.html +++ b/29/wildscribe/subsystem/infinispan/remote-cache-container/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a remote Infinispan cache container.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/remote-cache-container/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html b/29/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html new file mode 100644 index 000000000..b69bb54dd --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html b/29/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html new file mode 100644 index 000000000..2e67582b4 --- /dev/null +++ b/29/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/remote-cache-container/remote-cache/index.html b/29/wildscribe/subsystem/infinispan/remote-cache-container/remote-cache/index.html index a720324cc..65845c7ab 100644 --- a/29/wildscribe/subsystem/infinispan/remote-cache-container/remote-cache/index.html +++ b/29/wildscribe/subsystem/infinispan/remote-cache-container/remote-cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the infinispan subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/remote-cache-container/remote-cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/remote-cache-container/remote-cluster/index.html b/29/wildscribe/subsystem/infinispan/remote-cache-container/remote-cluster/index.html index 8fe657fbd..bc507f268 100644 --- a/29/wildscribe/subsystem/infinispan/remote-cache-container/remote-cluster/index.html +++ b/29/wildscribe/subsystem/infinispan/remote-cache-container/remote-cluster/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of a remote cluster.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/remote-cache-container/remote-cluster/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/infinispan/remote-cache-container/thread-pool/async/index.html b/29/wildscribe/subsystem/infinispan/remote-cache-container/thread-pool/async/index.html index bbc62c254..8f4fe6997 100644 --- a/29/wildscribe/subsystem/infinispan/remote-cache-container/thread-pool/async/index.html +++ b/29/wildscribe/subsystem/infinispan/remote-cache-container/thread-pool/async/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for asynchronous operations.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/infinispan/remote-cache-container/thread-pool/async/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/io/buffer-pool/index.html b/29/wildscribe/subsystem/io/buffer-pool/index.html index 46bd02cb9..6939184ce 100644 --- a/29/wildscribe/subsystem/io/buffer-pool/index.html +++ b/29/wildscribe/subsystem/io/buffer-pool/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 4.0.0
This has been replaced by the buffer pool in the Undertow subsystem

Defines buffer pool


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/io/buffer-pool/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/io/index.html b/29/wildscribe/subsystem/io/index.html index ba1d3447c..d0ba1ea5d 100644 --- a/29/wildscribe/subsystem/io/index.html +++ b/29/wildscribe/subsystem/io/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

IO subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/io/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/io/worker/index.html b/29/wildscribe/subsystem/io/worker/index.html index f53c4f70c..0bfe35136 100644 --- a/29/wildscribe/subsystem/io/worker/index.html +++ b/29/wildscribe/subsystem/io/worker/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines workers


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/io/worker/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/io/worker/outbound-bind-address/index.html b/29/wildscribe/subsystem/io/worker/outbound-bind-address/index.html index 457c3b17f..5d0a4ec5a 100644 --- a/29/wildscribe/subsystem/io/worker/outbound-bind-address/index.html +++ b/29/wildscribe/subsystem/io/worker/outbound-bind-address/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a bind address to use when connecting to the specified destination


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/io/worker/outbound-bind-address/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/io/worker/server/index.html b/29/wildscribe/subsystem/io/worker/server/index.html index 0cb9b76bb..a144334e2 100644 --- a/29/wildscribe/subsystem/io/worker/server/index.html +++ b/29/wildscribe/subsystem/io/worker/server/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resource that describes listening servers utilizing this worker


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/io/worker/server/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jaxrs/index.html b/29/wildscribe/subsystem/jaxrs/index.html index fc087a6b1..1e7465003 100644 --- a/29/wildscribe/subsystem/jaxrs/index.html +++ b/29/wildscribe/subsystem/jaxrs/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta RESTful Web Services subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jaxrs/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/archive-validation/archive-validation/index.html b/29/wildscribe/subsystem/jca/archive-validation/archive-validation/index.html index 17a7d7013..0301cc271 100644 --- a/29/wildscribe/subsystem/jca/archive-validation/archive-validation/index.html +++ b/29/wildscribe/subsystem/jca/archive-validation/archive-validation/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Archive validation for resource adapters


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/archive-validation/archive-validation/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/bean-validation/bean-validation/index.html b/29/wildscribe/subsystem/jca/bean-validation/bean-validation/index.html index ab85c82bb..32cb78b14 100644 --- a/29/wildscribe/subsystem/jca/bean-validation/bean-validation/index.html +++ b/29/wildscribe/subsystem/jca/bean-validation/bean-validation/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta Bean Validation for resource adapters


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/bean-validation/bean-validation/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/bootstrap-context/index.html b/29/wildscribe/subsystem/jca/bootstrap-context/index.html index 59b29549a..fb64afa0b 100644 --- a/29/wildscribe/subsystem/jca/bootstrap-context/index.html +++ b/29/wildscribe/subsystem/jca/bootstrap-context/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Bootstrap context for resource adapters


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/bootstrap-context/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/cached-connection-manager/cached-connection-manager/index.html b/29/wildscribe/subsystem/jca/cached-connection-manager/cached-connection-manager/index.html index 52c81f1a3..2769b5ab4 100644 --- a/29/wildscribe/subsystem/jca/cached-connection-manager/cached-connection-manager/index.html +++ b/29/wildscribe/subsystem/jca/cached-connection-manager/cached-connection-manager/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Cached connection manager for resource adapters


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/cached-connection-manager/cached-connection-manager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/distributed-workmanager/index.html b/29/wildscribe/subsystem/jca/distributed-workmanager/index.html index 4104da0cb..f7c6648f0 100644 --- a/29/wildscribe/subsystem/jca/distributed-workmanager/index.html +++ b/29/wildscribe/subsystem/jca/distributed-workmanager/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

DistributedWorkManager for resource adapters


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/distributed-workmanager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/distributed-workmanager/long-running-threads/index.html b/29/wildscribe/subsystem/jca/distributed-workmanager/long-running-threads/index.html index 5268070ac..9102f2f9f 100644 --- a/29/wildscribe/subsystem/jca/distributed-workmanager/long-running-threads/index.html +++ b/29/wildscribe/subsystem/jca/distributed-workmanager/long-running-threads/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with a bounded queue where threads submittings tasks may block. Such a thread pool has a core and maximum size and a specified queue length. When a task is submitted, if the number of running threads is less than the core size, a new thread is created. Otherwise, if there is room in the queue, the task is enqueued. Otherwise, if the number of running threads is less than the maximum size, a new thread is created. Otherwise, the caller blocks until room becomes available in the queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/distributed-workmanager/long-running-threads/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/distributed-workmanager/short-running-threads/index.html b/29/wildscribe/subsystem/jca/distributed-workmanager/short-running-threads/index.html index f735bf9ed..d73bebe0c 100644 --- a/29/wildscribe/subsystem/jca/distributed-workmanager/short-running-threads/index.html +++ b/29/wildscribe/subsystem/jca/distributed-workmanager/short-running-threads/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with a bounded queue where threads submittings tasks may block. Such a thread pool has a core and maximum size and a specified queue length. When a task is submitted, if the number of running threads is less than the core size, a new thread is created. Otherwise, if there is room in the queue, the task is enqueued. Otherwise, if the number of running threads is less than the maximum size, a new thread is created. Otherwise, the caller blocks until room becomes available in the queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/distributed-workmanager/short-running-threads/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/index.html b/29/wildscribe/subsystem/jca/index.html index 47fe82145..53b30618c 100644 --- a/29/wildscribe/subsystem/jca/index.html +++ b/29/wildscribe/subsystem/jca/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Connectors Architecture subsystem providing general configuration for resource adapters


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/tracer/tracer/index.html b/29/wildscribe/subsystem/jca/tracer/tracer/index.html index 2c61c2894..3e1d85b5e 100644 --- a/29/wildscribe/subsystem/jca/tracer/tracer/index.html +++ b/29/wildscribe/subsystem/jca/tracer/tracer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Tracer for resource adapters


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/tracer/tracer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/workmanager/default/index.html b/29/wildscribe/subsystem/jca/workmanager/default/index.html index 26db13677..9206f81e2 100644 --- a/29/wildscribe/subsystem/jca/workmanager/default/index.html +++ b/29/wildscribe/subsystem/jca/workmanager/default/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WorkManager for resource adapters


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/workmanager/default/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/workmanager/default/long-running-threads/index.html b/29/wildscribe/subsystem/jca/workmanager/default/long-running-threads/index.html index 82c23d04a..a83c0b42b 100644 --- a/29/wildscribe/subsystem/jca/workmanager/default/long-running-threads/index.html +++ b/29/wildscribe/subsystem/jca/workmanager/default/long-running-threads/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with a bounded queue where threads submittings tasks may block. Such a thread pool has a core and maximum size and a specified queue length. When a task is submitted, if the number of running threads is less than the core size, a new thread is created. Otherwise, if there is room in the queue, the task is enqueued. Otherwise, if the number of running threads is less than the maximum size, a new thread is created. Otherwise, the caller blocks until room becomes available in the queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/workmanager/default/long-running-threads/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/workmanager/default/short-running-threads/index.html b/29/wildscribe/subsystem/jca/workmanager/default/short-running-threads/index.html index d54f394d6..69cdc8fb0 100644 --- a/29/wildscribe/subsystem/jca/workmanager/default/short-running-threads/index.html +++ b/29/wildscribe/subsystem/jca/workmanager/default/short-running-threads/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with a bounded queue where threads submittings tasks may block. Such a thread pool has a core and maximum size and a specified queue length. When a task is submitted, if the number of running threads is less than the core size, a new thread is created. Otherwise, if there is room in the queue, the task is enqueued. Otherwise, if the number of running threads is less than the maximum size, a new thread is created. Otherwise, the caller blocks until room becomes available in the queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/workmanager/default/short-running-threads/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jca/workmanager/default/statistics/local/index.html b/29/wildscribe/subsystem/jca/workmanager/default/statistics/local/index.html index 1bf8165a9..23605afe0 100644 --- a/29/wildscribe/subsystem/jca/workmanager/default/statistics/local/index.html +++ b/29/wildscribe/subsystem/jca/workmanager/default/statistics/local/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies a Workmanager.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jca/workmanager/default/statistics/local/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jdr/index.html b/29/wildscribe/subsystem/jdr/index.html index 8c9981e58..9f54a3ea6 100644 --- a/29/wildscribe/subsystem/jdr/index.html +++ b/29/wildscribe/subsystem/jdr/index.html @@ -1,25 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

JBoss Diagnostic Reporter (JDR) Subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jdr/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/index.html index 234be2e46..7306f4bf1 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JGroups channel fork


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/index.html index 88419f505..cd6249337 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..9d44d76c2 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/index.html index 5e7af6152..fbeafb65e 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html new file mode 100644 index 000000000..d72b28d7d --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/cipher/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/cipher/index.html index 8134e0622..64533311c 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/cipher/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/cipher/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/cipher/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/digest/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/digest/index.html index 2336e8e85..87d7c2052 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/digest/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/digest/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/digest/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/plain/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/plain/index.html index 287e487f7..efecd337d 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/plain/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/plain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/plain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/index.html index b752987e8..792406b8c 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html new file mode 100644 index 000000000..430cd762b --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK2/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK2/index.html index f1cc7d453..fb245aeff 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK2/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK2/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/index.html index 4a6f1abb5..efaf56edf 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html new file mode 100644 index 000000000..f627cde9a --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html new file mode 100644 index 000000000..9ee22becf --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html new file mode 100644 index 000000000..5c2486e38 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/index.html index 263b0b89b..e63503512 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html new file mode 100644 index 000000000..ff97ca1df --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/index.html index 455134770..43260f78b 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..90ee0c466 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/index.html index ebb9e4261..340dfa090 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html new file mode 100644 index 000000000..2cdf0503f --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/index.html index 7f8185c9e..85be4d97a 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html new file mode 100644 index 000000000..fb62a6976 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html new file mode 100644 index 000000000..b4f1f6d25 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html new file mode 100644 index 000000000..5699b2b39 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html index 3bf73c232..1e2d5c475 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=ASYM_ENCRYPT instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..3122962d8 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/index.html index 7f5952b46..85e8cdd54 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=AUTH instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html new file mode 100644 index 000000000..617a81f55 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/index.html index adc91d7fc..ac2ce08ea 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=JDBC_PING instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html new file mode 100644 index 000000000..9c7c43bfb --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html index a4bc0c8e1..d1a4d1b9c 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=SYM_ENCRYPT instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..e44eb618f --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/index.html index 6e4073a88..deb2a4002 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=TCPGOSSIP instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html new file mode 100644 index 000000000..3c668698f --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/index.html index 6284e8046..c0ebd4033 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=TCPPING instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html new file mode 100644 index 000000000..190bdab45 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html new file mode 100644 index 000000000..fa7f3f7a4 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html new file mode 100644 index 000000000..0e35a2943 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/index.html index 5a5b03ef1..d020db16f 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JGroups channel.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html new file mode 100644 index 000000000..9270bf98c --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL3/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL3/index.html index 11e16fe05..2715e2c96 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL3/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL3/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

FD_ALL3


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL3/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html new file mode 100644 index 000000000..1953a25ae --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK2/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK2/index.html index a8d7ad6ab..5cde47f53 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK2/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK2/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

FD_SOCK2


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html new file mode 100644 index 000000000..5b4e9c811 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG4/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG4/index.html index 2967029af..cb0f559fd 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG4/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG4/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

FRAG4


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG4/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/MERGE3/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/MERGE3/index.html index c2131d861..62ce4646d 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/MERGE3/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/MERGE3/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MERGE3


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/MERGE3/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/MFC/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/MFC/index.html index 816f37085..beeb5c961 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/MFC/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/MFC/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MFC


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/MFC/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/PING/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/PING/index.html index 6b377810a..a9dfe8db7 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/PING/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/PING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

PING


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/PING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/RED/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/RED/index.html index 1da7734f3..615829c64 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/RED/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/RED/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

RED


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/RED/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UDP/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UDP/index.html index 47136e34d..80f6f77da 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UDP/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UDP/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

UDP


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UDP/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UFC/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UFC/index.html index 56853c4f3..452ca1ce1 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UFC/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UFC/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

UFC


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UFC/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UNICAST3/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UNICAST3/index.html index 57c850f5e..c443fc9c1 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UNICAST3/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/UNICAST3/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

UNICAST3


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UNICAST3/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html new file mode 100644 index 000000000..a7994a1f9 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT2/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT2/index.html index 9e030efd8..fccf84771 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT2/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT2/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

VERIFY_SUSPECT2


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.GMS/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.GMS/index.html index 167693b15..51b658349 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.GMS/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.GMS/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

GMS


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.GMS/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.NAKACK2/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.NAKACK2/index.html index 3f542ca95..e1b197d01 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.NAKACK2/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.NAKACK2/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

NAKACK2


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.NAKACK2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.STABLE/index.html b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.STABLE/index.html index 14a084107..4dd638513 100644 --- a/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.STABLE/index.html +++ b/29/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.STABLE/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

STABLE


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.STABLE/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/index.html b/29/wildscribe/subsystem/jgroups/index.html index 6bd86205e..6aec2d483 100644 --- a/29/wildscribe/subsystem/jgroups/index.html +++ b/29/wildscribe/subsystem/jgroups/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the JGroups subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/index.html b/29/wildscribe/subsystem/jgroups/stack/index.html index b57f701dc..29b5ddfe0 100644 --- a/29/wildscribe/subsystem/jgroups/stack/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a JGroups protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/index.html index 398467393..e919a2ac5 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..5028f40fe --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/index.html index 846338a28..3d1f00824 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html new file mode 100644 index 000000000..d4f1b43c4 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/cipher/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/cipher/index.html index c72146678..f02a47093 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/cipher/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/cipher/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/cipher/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/digest/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/digest/index.html index d7e894f6d..59381ef36 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/digest/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/digest/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/digest/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/plain/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/plain/index.html index e57c83821..ecaaf58c9 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/plain/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/plain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/plain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/index.html index fabfe1b43..b4bfab457 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html new file mode 100644 index 000000000..06a019a73 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK2/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK2/index.html index 2d09c9473..cd5a2a3cd 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK2/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK2/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/index.html index 8f73777db..f2d1b74a4 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html new file mode 100644 index 000000000..98197c486 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html new file mode 100644 index 000000000..0a245a68c --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html new file mode 100644 index 000000000..84e7d4feb --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/MPING/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/MPING/index.html index 22e0c51a6..fb6ba63aa 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/MPING/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/MPING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/MPING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html new file mode 100644 index 000000000..efadaf753 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/index.html index dfbcd624b..f8f5972ed 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..af6081eca --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/index.html index e1187354c..92a6edb47 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html new file mode 100644 index 000000000..992dca37a --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/index.html index 5724579db..1249f1d49 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html new file mode 100644 index 000000000..d0fb41c7e --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html new file mode 100644 index 000000000..c1e724f60 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html new file mode 100644 index 000000000..034a27451 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html index 5ca7b82b4..62c61798e 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=ASYM_ENCRYPT instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..201f6dbef --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/index.html index 9e41c009d..a1c6558a3 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=AUTH instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html new file mode 100644 index 000000000..c41b0b517 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/index.html index 1678f668d..8e22d1d90 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=JDBC_PING instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html new file mode 100644 index 000000000..6821c0d7b --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html index ac8d0d307..bb45e18f6 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=SYM_ENCRYPT instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..acb528e3e --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/index.html index c78c07af0..93184b8b5 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=TCPGOSSIP instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html new file mode 100644 index 000000000..feaa25916 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/index.html index ce0e6745a..3606ffffe 100644 --- a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=TCPPING instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html new file mode 100644 index 000000000..8efd69a4e --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html new file mode 100644 index 000000000..a351bb048 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html b/29/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html new file mode 100644 index 000000000..08f088d0a --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/index.html b/29/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/index.html index b721e1674..91b015d8e 100644 --- a/29/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a RELAY protocol


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/remote-site/index.html b/29/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/remote-site/index.html index 76a32dfac..1795aa45e 100644 --- a/29/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/remote-site/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/remote-site/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A remote site to which to bridge.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/remote-site/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/index.html index a366e5a90..7c7d1f956 100644 --- a/29/wildscribe/subsystem/jgroups/stack/transport/TCP/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a transport for a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/transport/TCP/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html new file mode 100644 index 000000000..ca6855d26 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/default/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/default/index.html index 9a15c3259..57b0a2b12 100644 --- a/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/default/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/default/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/default/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html new file mode 100644 index 000000000..4470387d9 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html new file mode 100644 index 000000000..74a50b918 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html new file mode 100644 index 000000000..9ee530723 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/index.html index 52b2f4b4d..9e3ed708f 100644 --- a/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a transport for a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html new file mode 100644 index 000000000..af32dcdf4 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/default/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/default/index.html index 6d23c025b..9db583b2e 100644 --- a/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/default/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/default/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/default/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html new file mode 100644 index 000000000..887b4b3d3 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html new file mode 100644 index 000000000..430bde0bf --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html new file mode 100644 index 000000000..f4886359e --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/UDP/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/index.html index 97f8b68f2..20f97e1cb 100644 --- a/29/wildscribe/subsystem/jgroups/stack/transport/UDP/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a transport for a protocol stack.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/transport/UDP/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html new file mode 100644 index 000000000..6bcb7dd94 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/default/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/default/index.html index e838c82c7..398f7e07e 100644 --- a/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/default/index.html +++ b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/default/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/default/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html new file mode 100644 index 000000000..33a32fc3b --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html new file mode 100644 index 000000000..cc1e401d4 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html new file mode 100644 index 000000000..41f353c61 --- /dev/null +++ b/29/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jmx/configuration/audit-log/handler/index.html b/29/wildscribe/subsystem/jmx/configuration/audit-log/handler/index.html index aac44d51e..79b38e09d 100644 --- a/29/wildscribe/subsystem/jmx/configuration/audit-log/handler/index.html +++ b/29/wildscribe/subsystem/jmx/configuration/audit-log/handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A reference to a file or syslog audit log handler. The name of the handler is denoted by the value of the address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jmx/configuration/audit-log/handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jmx/configuration/audit-log/index.html b/29/wildscribe/subsystem/jmx/configuration/audit-log/index.html index 38ccfde4a..b9ccc4d86 100644 --- a/29/wildscribe/subsystem/jmx/configuration/audit-log/index.html +++ b/29/wildscribe/subsystem/jmx/configuration/audit-log/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management audit logging top-level resource.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jmx/configuration/audit-log/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jmx/expose-model/expression/index.html b/29/wildscribe/subsystem/jmx/expose-model/expression/index.html index 28f66daae..129b0c215 100644 --- a/29/wildscribe/subsystem/jmx/expose-model/expression/index.html +++ b/29/wildscribe/subsystem/jmx/expose-model/expression/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration for exposing the 'expression' model controller in the MBeanServer. This facade will expose all simple attributes and operation parameters as String. Reads return the unresolved expression. You may use expressions when writing attributes and setting operation parameters.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jmx/expose-model/expression/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jmx/expose-model/resolved/index.html b/29/wildscribe/subsystem/jmx/expose-model/resolved/index.html index e0bae6b32..25c3ab206 100644 --- a/29/wildscribe/subsystem/jmx/expose-model/resolved/index.html +++ b/29/wildscribe/subsystem/jmx/expose-model/resolved/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration for exposing the 'resolved' model controller in the MBeanServer. This facade will expose all simple attributes and operation parameters as their type in the underlying model. Reads return the resolved expression if used, or the raw value. You may not use expressions when writing attributes and setting operation parameters.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jmx/expose-model/resolved/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jmx/index.html b/29/wildscribe/subsystem/jmx/index.html index 0a31af0f7..fbf7c3d97 100644 --- a/29/wildscribe/subsystem/jmx/index.html +++ b/29/wildscribe/subsystem/jmx/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the JMX subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jmx/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jmx/remoting-connector/jmx/index.html b/29/wildscribe/subsystem/jmx/remoting-connector/jmx/index.html index 1de1823d9..2d7ca1430 100644 --- a/29/wildscribe/subsystem/jmx/remoting-connector/jmx/index.html +++ b/29/wildscribe/subsystem/jmx/remoting-connector/jmx/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JBoss remoting connector for the JMX subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jmx/remoting-connector/jmx/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jpa/index.html b/29/wildscribe/subsystem/jpa/index.html index fab5dc15a..1dbfb627d 100644 --- a/29/wildscribe/subsystem/jpa/index.html +++ b/29/wildscribe/subsystem/jpa/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta Persistence subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jpa/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jsf/index.html b/29/wildscribe/subsystem/jsf/index.html index 533f1e620..38b0a185e 100644 --- a/29/wildscribe/subsystem/jsf/index.html +++ b/29/wildscribe/subsystem/jsf/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Server Faces subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/jsf/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/jsr77/index.html b/29/wildscribe/subsystem/jsr77/index.html new file mode 100644 index 000000000..a8d9d55a2 --- /dev/null +++ b/29/wildscribe/subsystem/jsr77/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jsr77/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/async-handler/index.html b/29/wildscribe/subsystem/logging/async-handler/index.html index 790e0f9eb..aecbedc3a 100644 --- a/29/wildscribe/subsystem/logging/async-handler/index.html +++ b/29/wildscribe/subsystem/logging/async-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to the sub-handlers in an asynchronous thread, used for handlers which introduce a substantial amount of lag.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/async-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/console-handler/index.html b/29/wildscribe/subsystem/logging/console-handler/index.html index df2d25472..36faca8bc 100644 --- a/29/wildscribe/subsystem/logging/console-handler/index.html +++ b/29/wildscribe/subsystem/logging/console-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to the console.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/console-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/custom-formatter/index.html b/29/wildscribe/subsystem/logging/custom-formatter/index.html index 9b595390b..c111d9472 100644 --- a/29/wildscribe/subsystem/logging/custom-formatter/index.html +++ b/29/wildscribe/subsystem/logging/custom-formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom formatter to be used with handlers. Note that most log records are formatted in the printf format. Formatters may require invocation of the org.jboss.logmanager.ExtLogRecord#getFormattedMessage() for the message to be properly formatted.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/custom-formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/custom-handler/index.html b/29/wildscribe/subsystem/logging/custom-handler/index.html index 2070d2508..8763bdc44 100644 --- a/29/wildscribe/subsystem/logging/custom-handler/index.html +++ b/29/wildscribe/subsystem/logging/custom-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a custom logging handler. The custom handler must extend java.util.logging.Handler.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/custom-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/file-handler/index.html b/29/wildscribe/subsystem/logging/file-handler/index.html index 98ff82aa8..6e26adfca 100644 --- a/29/wildscribe/subsystem/logging/file-handler/index.html +++ b/29/wildscribe/subsystem/logging/file-handler/index.html @@ -1,45 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to a file.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/filter/index.html b/29/wildscribe/subsystem/logging/filter/index.html index ffb457772..e65a8aac6 100644 --- a/29/wildscribe/subsystem/logging/filter/index.html +++ b/29/wildscribe/subsystem/logging/filter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filter to be used with handlers and loggers. Please note the name of the filter should start with an alpha character and not contain any special characters. The following names are considered reserved names; accept, deny, not, all, any, levelChange, levels, levelRange, match, substitute, substituteAll.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/filter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/index.html b/29/wildscribe/subsystem/logging/index.html index 7cc5a12be..487751e27 100644 --- a/29/wildscribe/subsystem/logging/index.html +++ b/29/wildscribe/subsystem/logging/index.html @@ -1,27 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the logging subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/json-formatter/index.html b/29/wildscribe/subsystem/logging/json-formatter/index.html index 8f3994444..c5832c520 100644 --- a/29/wildscribe/subsystem/logging/json-formatter/index.html +++ b/29/wildscribe/subsystem/logging/json-formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A formatter that formats log messages in JSON.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/json-formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/log-file/index.html b/29/wildscribe/subsystem/logging/log-file/index.html index d8b47b8aa..b7a322faa 100644 --- a/29/wildscribe/subsystem/logging/log-file/index.html +++ b/29/wildscribe/subsystem/logging/log-file/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Log files that are available to be read.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/log-file/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logger/index.html b/29/wildscribe/subsystem/logging/logger/index.html index 89e2946a7..539388055 100644 --- a/29/wildscribe/subsystem/logging/logger/index.html +++ b/29/wildscribe/subsystem/logging/logger/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a logger category.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logger/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/async-handler/index.html b/29/wildscribe/subsystem/logging/logging-profile/async-handler/index.html index e41448a70..3236bc865 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/async-handler/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/async-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to the sub-handlers in an asynchronous thread, used for handlers which introduce a substantial amount of lag.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/async-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/console-handler/index.html b/29/wildscribe/subsystem/logging/logging-profile/console-handler/index.html index 431688385..7051290e4 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/console-handler/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/console-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to the console.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/console-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/custom-formatter/index.html b/29/wildscribe/subsystem/logging/logging-profile/custom-formatter/index.html index 21b306172..ed132a67a 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/custom-formatter/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/custom-formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom formatter to be used with handlers. Note that most log records are formatted in the printf format. Formatters may require invocation of the org.jboss.logmanager.ExtLogRecord#getFormattedMessage() for the message to be properly formatted.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/custom-formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/custom-handler/index.html b/29/wildscribe/subsystem/logging/logging-profile/custom-handler/index.html index f397c8357..35e98db86 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/custom-handler/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/custom-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a custom logging handler. The custom handler must extend java.util.logging.Handler.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/custom-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/file-handler/index.html b/29/wildscribe/subsystem/logging/logging-profile/file-handler/index.html index 377f81b70..83595a7f2 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/file-handler/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/file-handler/index.html @@ -1,45 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to a file.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/filter/index.html b/29/wildscribe/subsystem/logging/logging-profile/filter/index.html index be406cc97..02698cbb3 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/filter/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/filter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filter to be used with handlers and loggers. Please note the name of the filter should start with an alpha character and not contain any special characters. The following names are considered reserved names; accept, deny, not, all, any, levelChange, levels, levelRange, match, substitute, substituteAll.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/filter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/index.html b/29/wildscribe/subsystem/logging/logging-profile/index.html index 4621d707b..f6d8c7d24 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the logging subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/json-formatter/index.html b/29/wildscribe/subsystem/logging/logging-profile/json-formatter/index.html index c80b8e4b2..2931792af 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/json-formatter/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/json-formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A formatter that formats log messages in JSON.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/json-formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/log-file/index.html b/29/wildscribe/subsystem/logging/logging-profile/log-file/index.html index 001e64380..a9e7b2152 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/log-file/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/log-file/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Log files that are available to be read.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/log-file/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/logger/index.html b/29/wildscribe/subsystem/logging/logging-profile/logger/index.html index 3c0f6bd93..a41826edc 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/logger/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/logger/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a logger category.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/logger/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/pattern-formatter/index.html b/29/wildscribe/subsystem/logging/logging-profile/pattern-formatter/index.html index c358a5c20..478c7553d 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/pattern-formatter/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/pattern-formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A pattern formatter to be used with handlers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/pattern-formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/periodic-rotating-file-handler/index.html b/29/wildscribe/subsystem/logging/logging-profile/periodic-rotating-file-handler/index.html index b43b8de0b..9df5630dd 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/periodic-rotating-file-handler/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/periodic-rotating-file-handler/index.html @@ -1,45 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a file, rotating the log after a time period derived from the given suffix string, which should be in a format understood by java.text.SimpleDateFormat.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/periodic-rotating-file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/periodic-size-rotating-file-handler/index.html b/29/wildscribe/subsystem/logging/logging-profile/periodic-size-rotating-file-handler/index.html index a9ed2e2f6..ff0912a4d 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/periodic-size-rotating-file-handler/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/periodic-size-rotating-file-handler/index.html @@ -1,45 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a file, rotating the log after a time period derived from the given suffix string or after the size of the file grows beyond a certain point and keeping a fixed number of backups. The suffix should be in a format understood by the java.text.SimpleDateFormat. Any backups rotated by the suffix will not be purged during a size rotation.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/periodic-size-rotating-file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/root-logger/ROOT/index.html b/29/wildscribe/subsystem/logging/logging-profile/root-logger/ROOT/index.html index 2a390c156..5321ef3f9 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/root-logger/ROOT/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/root-logger/ROOT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines the root logger for this log context.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/root-logger/ROOT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/size-rotating-file-handler/index.html b/29/wildscribe/subsystem/logging/logging-profile/size-rotating-file-handler/index.html index 267f3999d..7bfa9c08c 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/size-rotating-file-handler/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/size-rotating-file-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to a file, rotating the log after the size of the file grows beyond a certain point and keeping a fixed number of backups.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/size-rotating-file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/socket-handler/index.html b/29/wildscribe/subsystem/logging/logging-profile/socket-handler/index.html index 209940c79..3129d5388 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/socket-handler/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/socket-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a socket. Note that a socket-handler will queue messages during the boot process. These messages will be drained to the socket once the resource is fully configured. If the server is in an admin-only state, messages will be discarded.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/socket-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/syslog-handler/index.html b/29/wildscribe/subsystem/logging/logging-profile/syslog-handler/index.html index ae1494807..413f27c1a 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/syslog-handler/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/syslog-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a syslog handler.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/syslog-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/logging-profile/xml-formatter/index.html b/29/wildscribe/subsystem/logging/logging-profile/xml-formatter/index.html index d29a5744c..c5202a1b8 100644 --- a/29/wildscribe/subsystem/logging/logging-profile/xml-formatter/index.html +++ b/29/wildscribe/subsystem/logging/logging-profile/xml-formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A formatter that formats log messages in XML.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/logging-profile/xml-formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/pattern-formatter/index.html b/29/wildscribe/subsystem/logging/pattern-formatter/index.html index 97c82b3cb..3d151b6e0 100644 --- a/29/wildscribe/subsystem/logging/pattern-formatter/index.html +++ b/29/wildscribe/subsystem/logging/pattern-formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A pattern formatter to be used with handlers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/pattern-formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/periodic-rotating-file-handler/index.html b/29/wildscribe/subsystem/logging/periodic-rotating-file-handler/index.html index bf2c2027c..0057c54ee 100644 --- a/29/wildscribe/subsystem/logging/periodic-rotating-file-handler/index.html +++ b/29/wildscribe/subsystem/logging/periodic-rotating-file-handler/index.html @@ -1,45 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a file, rotating the log after a time period derived from the given suffix string, which should be in a format understood by java.text.SimpleDateFormat.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/periodic-rotating-file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/periodic-size-rotating-file-handler/index.html b/29/wildscribe/subsystem/logging/periodic-size-rotating-file-handler/index.html index febb15ce3..9bb5f65a7 100644 --- a/29/wildscribe/subsystem/logging/periodic-size-rotating-file-handler/index.html +++ b/29/wildscribe/subsystem/logging/periodic-size-rotating-file-handler/index.html @@ -1,45 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a file, rotating the log after a time period derived from the given suffix string or after the size of the file grows beyond a certain point and keeping a fixed number of backups. The suffix should be in a format understood by the java.text.SimpleDateFormat. Any backups rotated by the suffix will not be purged during a size rotation.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/periodic-size-rotating-file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/root-logger/ROOT/index.html b/29/wildscribe/subsystem/logging/root-logger/ROOT/index.html index 22a9b6a49..78aa4591d 100644 --- a/29/wildscribe/subsystem/logging/root-logger/ROOT/index.html +++ b/29/wildscribe/subsystem/logging/root-logger/ROOT/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines the root logger for this log context.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/root-logger/ROOT/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/size-rotating-file-handler/index.html b/29/wildscribe/subsystem/logging/size-rotating-file-handler/index.html index eb7d0b78e..99990ec0d 100644 --- a/29/wildscribe/subsystem/logging/size-rotating-file-handler/index.html +++ b/29/wildscribe/subsystem/logging/size-rotating-file-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to a file, rotating the log after the size of the file grows beyond a certain point and keeping a fixed number of backups.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/size-rotating-file-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/socket-handler/index.html b/29/wildscribe/subsystem/logging/socket-handler/index.html index 307aeccfa..05a2f619c 100644 --- a/29/wildscribe/subsystem/logging/socket-handler/index.html +++ b/29/wildscribe/subsystem/logging/socket-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a socket. Note that a socket-handler will queue messages during the boot process. These messages will be drained to the socket once the resource is fully configured. If the server is in an admin-only state, messages will be discarded.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/socket-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/syslog-handler/index.html b/29/wildscribe/subsystem/logging/syslog-handler/index.html index c42bf429d..e35fdbe76 100644 --- a/29/wildscribe/subsystem/logging/syslog-handler/index.html +++ b/29/wildscribe/subsystem/logging/syslog-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a syslog handler.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/syslog-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/logging/xml-formatter/index.html b/29/wildscribe/subsystem/logging/xml-formatter/index.html index 64328ecde..2a8d4e258 100644 --- a/29/wildscribe/subsystem/logging/xml-formatter/index.html +++ b/29/wildscribe/subsystem/logging/xml-formatter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A formatter that formats log messages in XML.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/logging/xml-formatter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/mail/index.html b/29/wildscribe/subsystem/mail/index.html index e1db985a4..f02b0d0b5 100644 --- a/29/wildscribe/subsystem/mail/index.html +++ b/29/wildscribe/subsystem/mail/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The mail subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/mail/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/mail/mail-session/custom/index.html b/29/wildscribe/subsystem/mail/mail-session/custom/index.html index dee9ef2c7..9536ae54a 100644 --- a/29/wildscribe/subsystem/mail/mail-session/custom/index.html +++ b/29/wildscribe/subsystem/mail/mail-session/custom/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session server


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/mail/mail-session/custom/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/mail/mail-session/index.html b/29/wildscribe/subsystem/mail/mail-session/index.html index 2e337bb5d..8ffbf1bc0 100644 --- a/29/wildscribe/subsystem/mail/mail-session/index.html +++ b/29/wildscribe/subsystem/mail/mail-session/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session definition


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/mail/mail-session/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/mail/mail-session/server/imap/index.html b/29/wildscribe/subsystem/mail/mail-session/server/imap/index.html index db471e51e..2e8d52d7e 100644 --- a/29/wildscribe/subsystem/mail/mail-session/server/imap/index.html +++ b/29/wildscribe/subsystem/mail/mail-session/server/imap/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session server


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/mail/mail-session/server/imap/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/mail/mail-session/server/pop3/index.html b/29/wildscribe/subsystem/mail/mail-session/server/pop3/index.html index a661c8ae0..ffd3a001a 100644 --- a/29/wildscribe/subsystem/mail/mail-session/server/pop3/index.html +++ b/29/wildscribe/subsystem/mail/mail-session/server/pop3/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session server


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/mail/mail-session/server/pop3/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/mail/mail-session/server/smtp/index.html b/29/wildscribe/subsystem/mail/mail-session/server/smtp/index.html index f97deec81..e3d29e468 100644 --- a/29/wildscribe/subsystem/mail/mail-session/server/smtp/index.html +++ b/29/wildscribe/subsystem/mail/mail-session/server/smtp/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session server


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/mail/mail-session/server/smtp/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/connection-factory/index.html b/29/wildscribe/subsystem/messaging-activemq/connection-factory/index.html index cd13d6691..b92bef125 100644 --- a/29/wildscribe/subsystem/messaging-activemq/connection-factory/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/connector/index.html b/29/wildscribe/subsystem/messaging-activemq/connector/index.html index 4f8dd8f6d..cd5a2f57e 100644 --- a/29/wildscribe/subsystem/messaging-activemq/connector/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A connector can be used by a client to define how it connects to a server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/discovery-group/index.html b/29/wildscribe/subsystem/messaging-activemq/discovery-group/index.html index 470e8e25b..123fd9dcd 100644 --- a/29/wildscribe/subsystem/messaging-activemq/discovery-group/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/discovery-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 9.0.0
Use instead a socket-discovery-group or a jgroups-discovery-group to create a discovery-group.

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/discovery-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/external-jms-queue/index.html b/29/wildscribe/subsystem/messaging-activemq/external-jms-queue/index.html index 83669ee51..ef9b047e6 100644 --- a/29/wildscribe/subsystem/messaging-activemq/external-jms-queue/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/external-jms-queue/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue to a remote broker.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/external-jms-queue/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/external-jms-topic/index.html b/29/wildscribe/subsystem/messaging-activemq/external-jms-topic/index.html index abaa1ceca..8cf272ae9 100644 --- a/29/wildscribe/subsystem/messaging-activemq/external-jms-topic/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/external-jms-topic/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic to a remote broker.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/external-jms-topic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/http-connector/index.html b/29/wildscribe/subsystem/messaging-activemq/http-connector/index.html index 6fc291c84..69d0434d1 100644 --- a/29/wildscribe/subsystem/messaging-activemq/http-connector/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/http-connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by a remote client to define how it connects to a server over HTTP.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/http-connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/in-vm-connector/index.html b/29/wildscribe/subsystem/messaging-activemq/in-vm-connector/index.html index 09331c623..7fb4cee0d 100644 --- a/29/wildscribe/subsystem/messaging-activemq/in-vm-connector/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/in-vm-connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by an in-VM client to define how it connects to a server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/in-vm-connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/index.html b/29/wildscribe/subsystem/messaging-activemq/index.html index 5fc8873e1..df7287829 100644 --- a/29/wildscribe/subsystem/messaging-activemq/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The messaging-activemq subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/jgroups-discovery-group/index.html b/29/wildscribe/subsystem/messaging-activemq/jgroups-discovery-group/index.html index f57f4f889..2335c3dc8 100644 --- a/29/wildscribe/subsystem/messaging-activemq/jgroups-discovery-group/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/jgroups-discovery-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/jgroups-discovery-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/jms-bridge/index.html b/29/wildscribe/subsystem/messaging-activemq/jms-bridge/index.html index 3eee7291e..c499f4e46 100644 --- a/29/wildscribe/subsystem/messaging-activemq/jms-bridge/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/jms-bridge/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A Jakarta Messaging bridge instance.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/jms-bridge/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/pooled-connection-factory/index.html b/29/wildscribe/subsystem/messaging-activemq/pooled-connection-factory/index.html index f8a51f5e7..2c210d370 100644 --- a/29/wildscribe/subsystem/messaging-activemq/pooled-connection-factory/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/pooled-connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/pooled-connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/remote-connector/index.html b/29/wildscribe/subsystem/messaging-activemq/remote-connector/index.html index f96fa557d..6d9d64360 100644 --- a/29/wildscribe/subsystem/messaging-activemq/remote-connector/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/remote-connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by a remote client to define how it connects to a server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/remote-connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/acceptor/index.html b/29/wildscribe/subsystem/messaging-activemq/server/acceptor/index.html index 4739ff021..f34d4f6a0 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/acceptor/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/acceptor/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An acceptor defines a way in which connections can be made to the ActiveMQ server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/acceptor/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/address-setting/index.html b/29/wildscribe/subsystem/messaging-activemq/server/address-setting/index.html index ba174c962..561dec220 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/address-setting/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/address-setting/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An address setting defines some attributes that are defined against an address wildcard rather than a specific queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/address-setting/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/bridge/index.html b/29/wildscribe/subsystem/messaging-activemq/server/bridge/index.html index ba48d8b40..d53ba6b88 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/bridge/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/bridge/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The function of a bridge is to consume messages from a source queue, and forward them to a target address, typically on a different ActiveMQ server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/bridge/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/broadcast-group/index.html b/29/wildscribe/subsystem/messaging-activemq/server/broadcast-group/index.html index 66f8bfa14..7e5c39122 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/broadcast-group/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/broadcast-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 9.0.0
Use instead a socket-broadcast-group or a jgroups-broadcast-group to create a broadcast-group.

A broadcast group is the means by which a server broadcasts connectors over the network.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/broadcast-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/cluster-connection/index.html b/29/wildscribe/subsystem/messaging-activemq/server/cluster-connection/index.html index 4e699917a..25738a3f4 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/cluster-connection/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/cluster-connection/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Cluster connections group servers into clusters so that messages can be load balanced between the nodes of the cluster.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/cluster-connection/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/connection-factory/index.html b/29/wildscribe/subsystem/messaging-activemq/server/connection-factory/index.html index fc75810ce..196a7e313 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/connection-factory/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/connector-service/index.html b/29/wildscribe/subsystem/messaging-activemq/server/connector-service/index.html index 5fa4763f3..850e627ea 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/connector-service/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/connector-service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A connector service allows to integrate external components with Apache ActiveMQ Artemis to send and receive messages.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/connector-service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/connector/index.html b/29/wildscribe/subsystem/messaging-activemq/server/connector/index.html index 88c0b961d..7857a112d 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/connector/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A connector can be used by a client to define how it connects to a server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/core-address/index.html b/29/wildscribe/subsystem/messaging-activemq/server/core-address/index.html index 002f45440..f2d233001 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/core-address/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/core-address/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A runtime-only resource representing a ActiveMQ "address". Zero or more queues can be bound to a single address. When a message is routed, it is routed to the set of queues bound to the message's address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/core-address/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/core-address/role/index.html b/29/wildscribe/subsystem/messaging-activemq/server/core-address/role/index.html index 922563620..a5bf57e13 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/core-address/role/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/core-address/role/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security role.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/core-address/role/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/discovery-group/index.html b/29/wildscribe/subsystem/messaging-activemq/server/discovery-group/index.html index c2384bb8f..7bcfba29e 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/discovery-group/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/discovery-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 9.0.0
Use instead a socket-discovery-group or a jgroups-discovery-group to create a discovery-group.

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/discovery-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/divert/index.html b/29/wildscribe/subsystem/messaging-activemq/server/divert/index.html index 68566ae03..c4f399290 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/divert/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/divert/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to transparently divert messages routed to one address to some other address, without making any changes to any client application logic.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/divert/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/grouping-handler/index.html b/29/wildscribe/subsystem/messaging-activemq/server/grouping-handler/index.html index e80d7250f..3e95bb139 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/grouping-handler/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/grouping-handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Makes decisions about which node in a cluster should handle a message with a group id assigned.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/grouping-handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/live-only/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/live-only/index.html index d17f331a5..50627c028 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/live-only/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/live-only/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/live-only/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html new file mode 100644 index 000000000..e0331ed5a --- /dev/null +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/primary/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/primary/index.html index 8cbaa6f11..a8a1086ff 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/primary/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/primary/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/primary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/secondary/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/secondary/index.html index edbfaef9b..807c83065 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/secondary/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/secondary/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/secondary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html new file mode 100644 index 000000000..f896f9c3c --- /dev/null +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/index.html index 023382ca5..fc8478ee6 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html new file mode 100644 index 000000000..91a8accc5 --- /dev/null +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-primary/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-primary/index.html index 191403ff6..dd9a63ad3 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-primary/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-primary/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-primary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-secondary/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-secondary/index.html index 4fc77f480..af89ad6be 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-secondary/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-secondary/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-secondary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html new file mode 100644 index 000000000..01c1db3cc --- /dev/null +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html new file mode 100644 index 000000000..59c11dbdb --- /dev/null +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/primary/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/primary/index.html index 0cc006a57..81eb620d6 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/primary/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/primary/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/primary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/secondary/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/secondary/index.html index aed45da41..bc9bff16a 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/secondary/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/secondary/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/secondary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html new file mode 100644 index 000000000..a64ad6de3 --- /dev/null +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/index.html index 802c4a954..a7ac17246 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html new file mode 100644 index 000000000..53213fea6 --- /dev/null +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-primary/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-primary/index.html index 020b9944e..71aca66e8 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-primary/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-primary/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-primary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-secondary/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-secondary/index.html index b2e31b0c1..ca11f7375 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-secondary/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-secondary/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-secondary/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html new file mode 100644 index 000000000..e71ec5c9f --- /dev/null +++ b/29/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/http-acceptor/index.html b/29/wildscribe/subsystem/messaging-activemq/server/http-acceptor/index.html index d111f256a..d3aaba583 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/http-acceptor/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/http-acceptor/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a way in which remote connections can be made to the ActiveMQ server over HTTP.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/http-acceptor/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/http-connector/index.html b/29/wildscribe/subsystem/messaging-activemq/server/http-connector/index.html index c8bbd1f76..63ec2de43 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/http-connector/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/http-connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by a remote client to define how it connects to a server over HTTP.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/http-connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/in-vm-acceptor/index.html b/29/wildscribe/subsystem/messaging-activemq/server/in-vm-acceptor/index.html index 68047fa0c..9f0cc80a1 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/in-vm-acceptor/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/in-vm-acceptor/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a way in which in-VM connections can be made to the ActiveMQ server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/in-vm-acceptor/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/in-vm-connector/index.html b/29/wildscribe/subsystem/messaging-activemq/server/in-vm-connector/index.html index 40e443bf7..818cf371b 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/in-vm-connector/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/in-vm-connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by an in-VM client to define how it connects to a server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/in-vm-connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/index.html b/29/wildscribe/subsystem/messaging-activemq/server/index.html index 50a49c3ae..0b28a380c 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/index.html @@ -1,320 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An ActiveMQ server instance.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/jgroups-broadcast-group/index.html b/29/wildscribe/subsystem/messaging-activemq/server/jgroups-broadcast-group/index.html index 8a2fc184c..3ca4f762e 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/jgroups-broadcast-group/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/jgroups-broadcast-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A broadcast group is the means by which a server broadcasts connectors over the network.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/jgroups-broadcast-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/jgroups-discovery-group/index.html b/29/wildscribe/subsystem/messaging-activemq/server/jgroups-discovery-group/index.html index 7583505c1..cac06c57a 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/jgroups-discovery-group/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/jgroups-discovery-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/jgroups-discovery-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/jms-queue/index.html b/29/wildscribe/subsystem/messaging-activemq/server/jms-queue/index.html index c374eadba..14ec55274 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/jms-queue/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/jms-queue/index.html @@ -1,159 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/jms-queue/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/jms-topic/index.html b/29/wildscribe/subsystem/messaging-activemq/server/jms-topic/index.html index 52d613f4b..4e80f670f 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/jms-topic/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/jms-topic/index.html @@ -1,377 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/jms-topic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/legacy-connection-factory/index.html b/29/wildscribe/subsystem/messaging-activemq/server/legacy-connection-factory/index.html index fff956361..e5fed1a67 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/legacy-connection-factory/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/legacy-connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/legacy-connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/path/bindings-directory/index.html b/29/wildscribe/subsystem/messaging-activemq/server/path/bindings-directory/index.html index c35a44d9c..7993b8424 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/path/bindings-directory/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/path/bindings-directory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filesystem path pointing to one of the locations where ActiveMQ stores persistent data.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/path/bindings-directory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/path/journal-directory/index.html b/29/wildscribe/subsystem/messaging-activemq/server/path/journal-directory/index.html index 222bbd68f..680550df9 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/path/journal-directory/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/path/journal-directory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filesystem path pointing to one of the locations where ActiveMQ stores persistent data.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/path/journal-directory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/path/large-messages-directory/index.html b/29/wildscribe/subsystem/messaging-activemq/server/path/large-messages-directory/index.html index 2abc867e2..ce3e95786 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/path/large-messages-directory/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/path/large-messages-directory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filesystem path pointing to one of the locations where ActiveMQ stores persistent data.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/path/large-messages-directory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/path/paging-directory/index.html b/29/wildscribe/subsystem/messaging-activemq/server/path/paging-directory/index.html index 8b7c5a64b..5867f4c41 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/path/paging-directory/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/path/paging-directory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filesystem path pointing to one of the locations where ActiveMQ stores persistent data.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/path/paging-directory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/pooled-connection-factory/index.html b/29/wildscribe/subsystem/messaging-activemq/server/pooled-connection-factory/index.html index 1f87e7019..95a5c4f3a 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/pooled-connection-factory/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/pooled-connection-factory/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/pooled-connection-factory/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/queue/index.html b/29/wildscribe/subsystem/messaging-activemq/server/queue/index.html index 3091ab605..78d3c4551 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/queue/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/queue/index.html @@ -1,219 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A Queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/queue/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/remote-acceptor/index.html b/29/wildscribe/subsystem/messaging-activemq/server/remote-acceptor/index.html index 5b47fb528..eb53c626f 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/remote-acceptor/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/remote-acceptor/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a way in which remote connections can be made to the ActiveMQ server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/remote-acceptor/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/remote-connector/index.html b/29/wildscribe/subsystem/messaging-activemq/server/remote-connector/index.html index e6f3b5581..cd50a6784 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/remote-connector/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/remote-connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by a remote client to define how it connects to a server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/remote-connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/runtime-queue/index.html b/29/wildscribe/subsystem/messaging-activemq/server/runtime-queue/index.html index 1d70b1365..72d701e9f 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/runtime-queue/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/runtime-queue/index.html @@ -1,219 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A Queue.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/runtime-queue/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/security-setting/index.html b/29/wildscribe/subsystem/messaging-activemq/server/security-setting/index.html index dfc878f3b..e0d005127 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/security-setting/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/security-setting/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security setting allows sets of permissions to be defined against queues based on their address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/security-setting/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/security-setting/role/index.html b/29/wildscribe/subsystem/messaging-activemq/server/security-setting/role/index.html index 666192efb..76eb2c9c0 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/security-setting/role/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/security-setting/role/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security role.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/security-setting/role/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/socket-broadcast-group/index.html b/29/wildscribe/subsystem/messaging-activemq/server/socket-broadcast-group/index.html index beb00690e..819dcaced 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/socket-broadcast-group/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/socket-broadcast-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A broadcast group is the means by which a server broadcasts connectors over the network.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/socket-broadcast-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/server/socket-discovery-group/index.html b/29/wildscribe/subsystem/messaging-activemq/server/socket-discovery-group/index.html index cddad6e00..c3e7f1ef8 100644 --- a/29/wildscribe/subsystem/messaging-activemq/server/socket-discovery-group/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/server/socket-discovery-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/server/socket-discovery-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/messaging-activemq/socket-discovery-group/index.html b/29/wildscribe/subsystem/messaging-activemq/socket-discovery-group/index.html index 0b874d351..f721aaad1 100644 --- a/29/wildscribe/subsystem/messaging-activemq/socket-discovery-group/index.html +++ b/29/wildscribe/subsystem/messaging-activemq/socket-discovery-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/messaging-activemq/socket-discovery-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/metrics/index.html b/29/wildscribe/subsystem/metrics/index.html index f485bfe94..a86e065d3 100644 --- a/29/wildscribe/subsystem/metrics/index.html +++ b/29/wildscribe/subsystem/metrics/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for Base Metrics


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/metrics/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/micrometer/index.html b/29/wildscribe/subsystem/micrometer/index.html index c396608cc..2f74c7e92 100644 --- a/29/wildscribe/subsystem/micrometer/index.html +++ b/29/wildscribe/subsystem/micrometer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Micrometer subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/micrometer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-config-smallrye/config-source-provider/index.html b/29/wildscribe/subsystem/microprofile-config-smallrye/config-source-provider/index.html index 178235851..7d841265d 100644 --- a/29/wildscribe/subsystem/microprofile-config-smallrye/config-source-provider/index.html +++ b/29/wildscribe/subsystem/microprofile-config-smallrye/config-source-provider/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Config Source Provider can be used to register new implementation for multiple Config Sources.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/microprofile-config-smallrye/config-source-provider/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-config-smallrye/config-source/index.html b/29/wildscribe/subsystem/microprofile-config-smallrye/config-source/index.html index f5be18ea1..b760a7405 100644 --- a/29/wildscribe/subsystem/microprofile-config-smallrye/config-source/index.html +++ b/29/wildscribe/subsystem/microprofile-config-smallrye/config-source/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

ConfigSource provides a source for configuration values.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/microprofile-config-smallrye/config-source/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-config-smallrye/index.html b/29/wildscribe/subsystem/microprofile-config-smallrye/index.html index 0f832e855..ecde9f9a3 100644 --- a/29/wildscribe/subsystem/microprofile-config-smallrye/index.html +++ b/29/wildscribe/subsystem/microprofile-config-smallrye/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for MicroProfile Config With SmallRye


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/microprofile-config-smallrye/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-fault-tolerance-smallrye/index.html b/29/wildscribe/subsystem/microprofile-fault-tolerance-smallrye/index.html index e4dc3f60f..650433691 100644 --- a/29/wildscribe/subsystem/microprofile-fault-tolerance-smallrye/index.html +++ b/29/wildscribe/subsystem/microprofile-fault-tolerance-smallrye/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MicroProfile Fault Tolerance subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/microprofile-fault-tolerance-smallrye/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-health-smallrye/index.html b/29/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..4ea61ac69 --- /dev/null +++ b/29/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-jwt-smallrye/index.html b/29/wildscribe/subsystem/microprofile-jwt-smallrye/index.html index de951e512..5256409b0 100644 --- a/29/wildscribe/subsystem/microprofile-jwt-smallrye/index.html +++ b/29/wildscribe/subsystem/microprofile-jwt-smallrye/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for MicroProfile JWT With SmallRye


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/microprofile-jwt-smallrye/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/29/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..640603512 --- /dev/null +++ b/29/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-openapi-smallrye/index.html b/29/wildscribe/subsystem/microprofile-openapi-smallrye/index.html index 315ae033b..e2733d0be 100644 --- a/29/wildscribe/subsystem/microprofile-openapi-smallrye/index.html +++ b/29/wildscribe/subsystem/microprofile-openapi-smallrye/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MicroProfile OpenAPI subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/microprofile-openapi-smallrye/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html b/29/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html new file mode 100644 index 000000000..58014be09 --- /dev/null +++ b/29/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html b/29/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html new file mode 100644 index 000000000..78819385e --- /dev/null +++ b/29/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/microprofile-telemetry/index.html b/29/wildscribe/subsystem/microprofile-telemetry/index.html index e63fffbb2..3a3e840ae 100644 --- a/29/wildscribe/subsystem/microprofile-telemetry/index.html +++ b/29/wildscribe/subsystem/microprofile-telemetry/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MicroProfile Telemetry subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/microprofile-telemetry/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/modcluster/index.html b/29/wildscribe/subsystem/modcluster/index.html index 531086bb9..974271c9e 100644 --- a/29/wildscribe/subsystem/modcluster/index.html +++ b/29/wildscribe/subsystem/modcluster/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration and runtime operations for mod_cluster subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/modcluster/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/modcluster/proxy/index.html b/29/wildscribe/subsystem/modcluster/proxy/index.html index ad7f6eb86..930c5272a 100644 --- a/29/wildscribe/subsystem/modcluster/proxy/index.html +++ b/29/wildscribe/subsystem/modcluster/proxy/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Proxy resource coupled with single Undertow listener (and server) specifying load balancer discovery, its configuration and load balance factor provider. Multiple proxy configuration can be specified.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/modcluster/proxy/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/custom-load-metric/index.html b/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/custom-load-metric/index.html index a30d8f965..bbf47f77c 100644 --- a/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/custom-load-metric/index.html +++ b/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/custom-load-metric/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Built-in load metric contributing a value to the overall load factor of a node. The load factors from each metric are aggregated according to their weights.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/custom-load-metric/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/index.html b/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/index.html index b180a0bca..fcd3efeea 100644 --- a/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/index.html +++ b/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration and runtime operations for mod_cluster subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/load-metric/index.html b/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/load-metric/index.html index 97d94e50a..aebae1067 100644 --- a/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/load-metric/index.html +++ b/29/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/load-metric/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Built-in load metric contributing a value to the overall load factor of a node. The load factors from each metric are aggregated according to their weights.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/load-metric/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/modcluster/proxy/load-provider/simple/index.html b/29/wildscribe/subsystem/modcluster/proxy/load-provider/simple/index.html index 4b1ba5c0e..6c4b4091c 100644 --- a/29/wildscribe/subsystem/modcluster/proxy/load-provider/simple/index.html +++ b/29/wildscribe/subsystem/modcluster/proxy/load-provider/simple/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Simple load provider returns constant pre-configured load balancing factor.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/modcluster/proxy/load-provider/simple/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html b/29/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html new file mode 100644 index 000000000..b6b698164 --- /dev/null +++ b/29/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/naming/binding/index.html b/29/wildscribe/subsystem/naming/binding/index.html index 0280c0680..767e8cea3 100644 --- a/29/wildscribe/subsystem/naming/binding/index.html +++ b/29/wildscribe/subsystem/naming/binding/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

JNDI bindings for primitive types


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/naming/binding/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/naming/index.html b/29/wildscribe/subsystem/naming/index.html index 2925fd337..f386cfba3 100644 --- a/29/wildscribe/subsystem/naming/index.html +++ b/29/wildscribe/subsystem/naming/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the naming subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/naming/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/naming/service/remote-naming/index.html b/29/wildscribe/subsystem/naming/service/remote-naming/index.html index 08d54b0f3..d3536adb1 100644 --- a/29/wildscribe/subsystem/naming/service/remote-naming/index.html +++ b/29/wildscribe/subsystem/naming/service/remote-naming/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The remote naming server


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/naming/service/remote-naming/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/opentelemetry/index.html b/29/wildscribe/subsystem/opentelemetry/index.html index a89356ec1..24276f9c2 100644 --- a/29/wildscribe/subsystem/opentelemetry/index.html +++ b/29/wildscribe/subsystem/opentelemetry/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

OpenTelemetry subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/opentelemetry/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/pojo/index.html b/29/wildscribe/subsystem/pojo/index.html index 119d8142c..5d8dbbbfc 100644 --- a/29/wildscribe/subsystem/pojo/index.html +++ b/29/wildscribe/subsystem/pojo/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Support JBoss5 and JBoss6 pojo configuration model.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/pojo/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/configuration/endpoint/index.html b/29/wildscribe/subsystem/remoting/configuration/endpoint/index.html index d11be387e..b9a6afeff 100644 --- a/29/wildscribe/subsystem/remoting/configuration/endpoint/index.html +++ b/29/wildscribe/subsystem/remoting/configuration/endpoint/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
The child resource for configuring the remoting endpoint is deprecated. Use the attributes on the parent resource to configure the remoting endpoint.

Endpoint configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/configuration/endpoint/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/connector/index.html b/29/wildscribe/subsystem/remoting/connector/index.html index 2455d149a..de78e7288 100644 --- a/29/wildscribe/subsystem/remoting/connector/index.html +++ b/29/wildscribe/subsystem/remoting/connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a Remoting connector.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/connector/property/index.html b/29/wildscribe/subsystem/remoting/connector/property/index.html index c9492d2cc..677a94de8 100644 --- a/29/wildscribe/subsystem/remoting/connector/property/index.html +++ b/29/wildscribe/subsystem/remoting/connector/property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/connector/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/connector/security/sasl/index.html b/29/wildscribe/subsystem/remoting/connector/security/sasl/index.html index 6339fba54..b5c2c0d45 100644 --- a/29/wildscribe/subsystem/remoting/connector/security/sasl/index.html +++ b/29/wildscribe/subsystem/remoting/connector/security/sasl/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The "sasl" element contains the SASL authentication configuration for this connector.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/connector/security/sasl/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/connector/security/sasl/property/index.html b/29/wildscribe/subsystem/remoting/connector/security/sasl/property/index.html index a46d12ea3..0f218e905 100644 --- a/29/wildscribe/subsystem/remoting/connector/security/sasl/property/index.html +++ b/29/wildscribe/subsystem/remoting/connector/security/sasl/property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/connector/security/sasl/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/connector/security/sasl/sasl-policy/policy/index.html b/29/wildscribe/subsystem/remoting/connector/security/sasl/sasl-policy/policy/index.html index 75d3c75d9..6955a15ff 100644 --- a/29/wildscribe/subsystem/remoting/connector/security/sasl/sasl-policy/policy/index.html +++ b/29/wildscribe/subsystem/remoting/connector/security/sasl/sasl-policy/policy/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The policy configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/connector/security/sasl/sasl-policy/policy/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/http-connector/index.html b/29/wildscribe/subsystem/remoting/http-connector/index.html index ee76ad671..545a571b3 100644 --- a/29/wildscribe/subsystem/remoting/http-connector/index.html +++ b/29/wildscribe/subsystem/remoting/http-connector/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a HTTP Upgrade based Remoting connector.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/http-connector/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/http-connector/property/index.html b/29/wildscribe/subsystem/remoting/http-connector/property/index.html index 44a6cfb65..d5e4bac39 100644 --- a/29/wildscribe/subsystem/remoting/http-connector/property/index.html +++ b/29/wildscribe/subsystem/remoting/http-connector/property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/http-connector/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/http-connector/security/sasl/index.html b/29/wildscribe/subsystem/remoting/http-connector/security/sasl/index.html index 79fc3c929..1df8e8f1a 100644 --- a/29/wildscribe/subsystem/remoting/http-connector/security/sasl/index.html +++ b/29/wildscribe/subsystem/remoting/http-connector/security/sasl/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The "sasl" element contains the SASL authentication configuration for this connector.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/http-connector/security/sasl/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/http-connector/security/sasl/property/index.html b/29/wildscribe/subsystem/remoting/http-connector/security/sasl/property/index.html index 3794d3da5..69fa299ce 100644 --- a/29/wildscribe/subsystem/remoting/http-connector/security/sasl/property/index.html +++ b/29/wildscribe/subsystem/remoting/http-connector/security/sasl/property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/http-connector/security/sasl/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/http-connector/security/sasl/sasl-policy/policy/index.html b/29/wildscribe/subsystem/remoting/http-connector/security/sasl/sasl-policy/policy/index.html index 8d08cb41d..b69012c85 100644 --- a/29/wildscribe/subsystem/remoting/http-connector/security/sasl/sasl-policy/policy/index.html +++ b/29/wildscribe/subsystem/remoting/http-connector/security/sasl/sasl-policy/policy/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The policy configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/http-connector/security/sasl/sasl-policy/policy/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/index.html b/29/wildscribe/subsystem/remoting/index.html index 7ba26df8c..4cf2412fc 100644 --- a/29/wildscribe/subsystem/remoting/index.html +++ b/29/wildscribe/subsystem/remoting/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Remoting subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/local-outbound-connection/index.html b/29/wildscribe/subsystem/remoting/local-outbound-connection/index.html index a3f3f3977..edb6634f8 100644 --- a/29/wildscribe/subsystem/remoting/local-outbound-connection/index.html +++ b/29/wildscribe/subsystem/remoting/local-outbound-connection/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 4.0.0
Use the remote-outbound-connection resource instead, with an appropriate protocol.

Remoting outbound connection with an implicit local:// URI scheme.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/local-outbound-connection/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/local-outbound-connection/property/index.html b/29/wildscribe/subsystem/remoting/local-outbound-connection/property/index.html index 847068b09..f92cf7c34 100644 --- a/29/wildscribe/subsystem/remoting/local-outbound-connection/property/index.html +++ b/29/wildscribe/subsystem/remoting/local-outbound-connection/property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/local-outbound-connection/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/outbound-connection/index.html b/29/wildscribe/subsystem/remoting/outbound-connection/index.html index e6734a8de..80f28d029 100644 --- a/29/wildscribe/subsystem/remoting/outbound-connection/index.html +++ b/29/wildscribe/subsystem/remoting/outbound-connection/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 4.0.0
Use the remote-outbound-connection resource instead, with an appropriate protocol.

Remoting outbound connection.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/outbound-connection/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/outbound-connection/property/index.html b/29/wildscribe/subsystem/remoting/outbound-connection/property/index.html index 04f4d21ac..1019a72af 100644 --- a/29/wildscribe/subsystem/remoting/outbound-connection/property/index.html +++ b/29/wildscribe/subsystem/remoting/outbound-connection/property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/outbound-connection/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/remote-outbound-connection/index.html b/29/wildscribe/subsystem/remoting/remote-outbound-connection/index.html index ea95b9245..63c79cbd3 100644 --- a/29/wildscribe/subsystem/remoting/remote-outbound-connection/index.html +++ b/29/wildscribe/subsystem/remoting/remote-outbound-connection/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Remoting outbound connection.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/remote-outbound-connection/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/remoting/remote-outbound-connection/property/index.html b/29/wildscribe/subsystem/remoting/remote-outbound-connection/property/index.html index e4ebe8874..9f5a5800d 100644 --- a/29/wildscribe/subsystem/remoting/remote-outbound-connection/property/index.html +++ b/29/wildscribe/subsystem/remoting/remote-outbound-connection/property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/remoting/remote-outbound-connection/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/request-controller/index.html b/29/wildscribe/subsystem/request-controller/index.html index 3768e9811..87f60dcab 100644 --- a/29/wildscribe/subsystem/request-controller/index.html +++ b/29/wildscribe/subsystem/request-controller/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The request controller subsystem. Used for request limiting and graceful shutdown.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/request-controller/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/resource-adapters/index.html b/29/wildscribe/subsystem/resource-adapters/index.html index c23a6b539..9a6f83932 100644 --- a/29/wildscribe/subsystem/resource-adapters/index.html +++ b/29/wildscribe/subsystem/resource-adapters/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of the resource adapters subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/resource-adapters/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/config-properties/index.html b/29/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/config-properties/index.html index be9713ce6..e36f8211f 100644 --- a/29/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/config-properties/index.html +++ b/29/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/config-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/config-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/index.html b/29/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/index.html index 44d2bd3a4..ea9f15e80 100644 --- a/29/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/index.html +++ b/29/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies an administration object.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/resource-adapters/resource-adapter/config-properties/index.html b/29/wildscribe/subsystem/resource-adapters/resource-adapter/config-properties/index.html index d6dfaf033..b6b95fc80 100644 --- a/29/wildscribe/subsystem/resource-adapters/resource-adapter/config-properties/index.html +++ b/29/wildscribe/subsystem/resource-adapters/resource-adapter/config-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/resource-adapters/resource-adapter/config-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/config-properties/index.html b/29/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/config-properties/index.html index be15b7d77..307b5bbde 100644 --- a/29/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/config-properties/index.html +++ b/29/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/config-properties/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/config-properties/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/index.html b/29/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/index.html index 28083ffca..aa53846e3 100644 --- a/29/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/index.html +++ b/29/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies a connection definition.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/resource-adapters/resource-adapter/index.html b/29/wildscribe/subsystem/resource-adapters/resource-adapter/index.html index 9263c37dd..6bfff97f4 100644 --- a/29/wildscribe/subsystem/resource-adapters/resource-adapter/index.html +++ b/29/wildscribe/subsystem/resource-adapters/resource-adapter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a resource adapter.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/resource-adapters/resource-adapter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/rts/index.html b/29/wildscribe/subsystem/rts/index.html index e9207643d..b64ae4c60 100644 --- a/29/wildscribe/subsystem/rts/index.html +++ b/29/wildscribe/subsystem/rts/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

RTS subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/rts/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/sar/index.html b/29/wildscribe/subsystem/sar/index.html index b5fd8cb4a..d3ae6a9bf 100644 --- a/29/wildscribe/subsystem/sar/index.html +++ b/29/wildscribe/subsystem/sar/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The SAR subsystem allowing you to deploy sar archives containing MBeans configured by META-INF/jboss-service.xml


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/sar/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security-manager/deployment-permissions/default/index.html b/29/wildscribe/subsystem/security-manager/deployment-permissions/default/index.html index 97877bd08..283a23e47 100644 --- a/29/wildscribe/subsystem/security-manager/deployment-permissions/default/index.html +++ b/29/wildscribe/subsystem/security-manager/deployment-permissions/default/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The permissions that are to be granted to deployments


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/security-manager/deployment-permissions/default/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security-manager/index.html b/29/wildscribe/subsystem/security-manager/index.html index c4858a689..1c97867b7 100644 --- a/29/wildscribe/subsystem/security-manager/index.html +++ b/29/wildscribe/subsystem/security-manager/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Security Manager subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/security-manager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/elytron-key-manager/index.html b/29/wildscribe/subsystem/security/elytron-key-manager/index.html new file mode 100644 index 000000000..eb6f41290 --- /dev/null +++ b/29/wildscribe/subsystem/security/elytron-key-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-manager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/elytron-key-store/index.html b/29/wildscribe/subsystem/security/elytron-key-store/index.html new file mode 100644 index 000000000..2c37c9958 --- /dev/null +++ b/29/wildscribe/subsystem/security/elytron-key-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/elytron-realm/index.html b/29/wildscribe/subsystem/security/elytron-realm/index.html new file mode 100644 index 000000000..47fc0fed0 --- /dev/null +++ b/29/wildscribe/subsystem/security/elytron-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-realm/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/elytron-trust-manager/index.html b/29/wildscribe/subsystem/security/elytron-trust-manager/index.html new file mode 100644 index 000000000..24481e21a --- /dev/null +++ b/29/wildscribe/subsystem/security/elytron-trust-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-manager/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/elytron-trust-store/index.html b/29/wildscribe/subsystem/security/elytron-trust-store/index.html new file mode 100644 index 000000000..5f9c106c9 --- /dev/null +++ b/29/wildscribe/subsystem/security/elytron-trust-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/index.html b/29/wildscribe/subsystem/security/index.html new file mode 100644 index 000000000..f2f750c57 --- /dev/null +++ b/29/wildscribe/subsystem/security/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html b/29/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html new file mode 100644 index 000000000..c9bf6a896 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/acl/classic/index.html b/29/wildscribe/subsystem/security/security-domain/acl/classic/index.html new file mode 100644 index 000000000..ce63e188f --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/acl/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/audit/classic/index.html b/29/wildscribe/subsystem/security/security-domain/audit/classic/index.html new file mode 100644 index 000000000..5db2f6e43 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/audit/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html b/29/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html new file mode 100644 index 000000000..41e54a6f2 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/authentication/classic/index.html b/29/wildscribe/subsystem/security/security-domain/authentication/classic/index.html new file mode 100644 index 000000000..1b8f97ec3 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/authentication/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html b/29/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html new file mode 100644 index 000000000..9d36bdd6a --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html b/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html new file mode 100644 index 000000000..f19d3eb6e --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html b/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html new file mode 100644 index 000000000..894484670 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html b/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html new file mode 100644 index 000000000..fb3398a67 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html b/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html new file mode 100644 index 000000000..ee492160f --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/authorization/classic/index.html b/29/wildscribe/subsystem/security/security-domain/authorization/classic/index.html new file mode 100644 index 000000000..09dcdcfb9 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/authorization/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html b/29/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html new file mode 100644 index 000000000..ce03a4230 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html b/29/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html new file mode 100644 index 000000000..f63530622 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html b/29/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html new file mode 100644 index 000000000..72f66c0aa --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/index.html b/29/wildscribe/subsystem/security/security-domain/index.html new file mode 100644 index 000000000..8e076f95a --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/jsse/classic/index.html b/29/wildscribe/subsystem/security/security-domain/jsse/classic/index.html new file mode 100644 index 000000000..f1f969d29 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/jsse/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/jsse/classic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/mapping/classic/index.html b/29/wildscribe/subsystem/security/security-domain/mapping/classic/index.html new file mode 100644 index 000000000..067452566 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/mapping/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html b/29/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html new file mode 100644 index 000000000..b797a7c58 --- /dev/null +++ b/29/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/security/vault/classic/index.html b/29/wildscribe/subsystem/security/vault/classic/index.html new file mode 100644 index 000000000..ff91edb9e --- /dev/null +++ b/29/wildscribe/subsystem/security/vault/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/vault/classic/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/singleton/index.html b/29/wildscribe/subsystem/singleton/index.html index 3f379bdb3..e0bc70ee3 100644 --- a/29/wildscribe/subsystem/singleton/index.html +++ b/29/wildscribe/subsystem/singleton/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the singleton subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/singleton/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/singleton/singleton-policy/deployment/index.html b/29/wildscribe/subsystem/singleton/singleton-policy/deployment/index.html index 1f7688d0e..24d897f0b 100644 --- a/29/wildscribe/subsystem/singleton/singleton-policy/deployment/index.html +++ b/29/wildscribe/subsystem/singleton/singleton-policy/deployment/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A singleton deployment


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/singleton/singleton-policy/deployment/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/singleton/singleton-policy/election-policy/random/index.html b/29/wildscribe/subsystem/singleton/singleton-policy/election-policy/random/index.html index 1ef139396..4e4f03928 100644 --- a/29/wildscribe/subsystem/singleton/singleton-policy/election-policy/random/index.html +++ b/29/wildscribe/subsystem/singleton/singleton-policy/election-policy/random/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A random election policy


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/singleton/singleton-policy/election-policy/random/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/singleton/singleton-policy/election-policy/simple/index.html b/29/wildscribe/subsystem/singleton/singleton-policy/election-policy/simple/index.html index 51fe12185..498937263 100644 --- a/29/wildscribe/subsystem/singleton/singleton-policy/election-policy/simple/index.html +++ b/29/wildscribe/subsystem/singleton/singleton-policy/election-policy/simple/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A simple election policy


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/singleton/singleton-policy/election-policy/simple/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/singleton/singleton-policy/index.html b/29/wildscribe/subsystem/singleton/singleton-policy/index.html index 392d20261..f76a8d0cc 100644 --- a/29/wildscribe/subsystem/singleton/singleton-policy/index.html +++ b/29/wildscribe/subsystem/singleton/singleton-policy/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A singleton policy


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/singleton/singleton-policy/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/singleton/singleton-policy/service/index.html b/29/wildscribe/subsystem/singleton/singleton-policy/service/index.html index 52b7ebf74..295e0a8dd 100644 --- a/29/wildscribe/subsystem/singleton/singleton-policy/service/index.html +++ b/29/wildscribe/subsystem/singleton/singleton-policy/service/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A singleton service


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/singleton/singleton-policy/service/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/transactions/commit-markable-resource/index.html b/29/wildscribe/subsystem/transactions/commit-markable-resource/index.html index d757011b7..3d58368c6 100644 --- a/29/wildscribe/subsystem/transactions/commit-markable-resource/index.html +++ b/29/wildscribe/subsystem/transactions/commit-markable-resource/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a datasource to be considered by the transaction manager as a CMR resource. CMR is a non-XA database resource that can reliably participate in an XA transaction.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/transactions/commit-markable-resource/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/transactions/index.html b/29/wildscribe/subsystem/transactions/index.html index 6cb9c9769..dd11fef09 100644 --- a/29/wildscribe/subsystem/transactions/index.html +++ b/29/wildscribe/subsystem/transactions/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the transaction subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/transactions/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/transactions/log-store/log-store/index.html b/29/wildscribe/subsystem/transactions/log-store/log-store/index.html index 6772a486d..7227bcf5a 100644 --- a/29/wildscribe/subsystem/transactions/log-store/log-store/index.html +++ b/29/wildscribe/subsystem/transactions/log-store/log-store/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Representation of the transaction logging storage mechanism.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/transactions/log-store/log-store/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/transactions/log-store/log-store/transactions/index.html b/29/wildscribe/subsystem/transactions/log-store/log-store/transactions/index.html index 4ca11a2b2..a5a01f666 100644 --- a/29/wildscribe/subsystem/transactions/log-store/log-store/transactions/index.html +++ b/29/wildscribe/subsystem/transactions/log-store/log-store/transactions/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The persistent information that the transaction manager stores for the purpose of recovering a transaction in the event of failure. The probe operation will add and remove transactions from the model as the corresponding real transactions start and finish the prepare and commit phases. A stuck transaction will remain in the model until either it is completed or explicitly removed by the delete operation.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/transactions/log-store/log-store/transactions/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/transactions/log-store/log-store/transactions/participants/index.html b/29/wildscribe/subsystem/transactions/log-store/log-store/transactions/participants/index.html index 3e47b2d8d..9615cef93 100644 --- a/29/wildscribe/subsystem/transactions/log-store/log-store/transactions/participants/index.html +++ b/29/wildscribe/subsystem/transactions/log-store/log-store/transactions/participants/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The resource that did work in a transaction.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/transactions/log-store/log-store/transactions/participants/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/application-security-domain/index.html b/29/wildscribe/subsystem/undertow/application-security-domain/index.html index 0cf6ce691..b0d875d5c 100644 --- a/29/wildscribe/subsystem/undertow/application-security-domain/index.html +++ b/29/wildscribe/subsystem/undertow/application-security-domain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A Mapping from a security domain references in a deployed application.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/application-security-domain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/application-security-domain/setting/single-sign-on/index.html b/29/wildscribe/subsystem/undertow/application-security-domain/setting/single-sign-on/index.html index c852a207d..8894d449d 100644 --- a/29/wildscribe/subsystem/undertow/application-security-domain/setting/single-sign-on/index.html +++ b/29/wildscribe/subsystem/undertow/application-security-domain/setting/single-sign-on/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An SSO authentication mechanism configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/application-security-domain/setting/single-sign-on/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/buffer-cache/index.html b/29/wildscribe/subsystem/undertow/buffer-cache/index.html index b88910ee3..1d45a3995 100644 --- a/29/wildscribe/subsystem/undertow/buffer-cache/index.html +++ b/29/wildscribe/subsystem/undertow/buffer-cache/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The buffer cache used to cache static content


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/buffer-cache/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/byte-buffer-pool/index.html b/29/wildscribe/subsystem/undertow/byte-buffer-pool/index.html index a2ad97ab0..10fdf7fe1 100644 --- a/29/wildscribe/subsystem/undertow/byte-buffer-pool/index.html +++ b/29/wildscribe/subsystem/undertow/byte-buffer-pool/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A byte buffer pool used for IO operations, this provides the same capabilities as the buffer pool from the IO subsystem, so they can be used interchangeably and must have a unique name. This buffer pool allows for more precise configuration of the total amount of retained memory than the IO subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/byte-buffer-pool/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/custom-filter/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/custom-filter/index.html index 49f26c508..504926685 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/custom-filter/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/custom-filter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Custom filter


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/custom-filter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/error-page/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/error-page/index.html index 07d013a37..ff70b2084 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/error-page/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/error-page/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The error pages


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/error-page/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/expression-filter/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/expression-filter/index.html index 68de01348..9703137a0 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/expression-filter/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/expression-filter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filter parsed from the undertow expression language


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/expression-filter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/gzip/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/gzip/index.html index 2cf657786..e417bbf8c 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/gzip/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/gzip/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines gzip filter


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/gzip/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/index.html index 3e633b146..3143766d8 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Undertow filters


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/none/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/none/index.html index 19b51b225..fb9323800 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/none/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/none/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will not have an affinity for any particular server, routing information will be ignored. Intended for use cases where web session state is not maintained within the application server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/none/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/ranked/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/ranked/index.html index ea4dc4671..5521cb627 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/ranked/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/ranked/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the first available node in a list typically comprised of: primary owner, backup nodes, local node (if not a primary nor backup owner).


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/ranked/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/single/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/single/index.html index 67ccd4c83..d1ab2cf08 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/single/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/single/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests have an affinity for the member that last handled a given session. This option corresponds to traditional sticky session behavior.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/single/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/index.html index 335706034..919e3b997 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime representation of a mod_cluster balancer


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/load-balancing-group/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/load-balancing-group/index.html index a1726873f..660d3b0cc 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/load-balancing-group/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/load-balancing-group/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A load balancing group


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/load-balancing-group/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/context/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/context/index.html index c78ae7865..20d22085d 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/context/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/context/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime representation of a mod_cluster context


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/context/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/index.html index f91525f2c..2d406b420 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime representation of a mod_cluster node


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/index.html index e07b6ec57..216f01ae2 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A mod-cluster front end load balancer


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/request-limit/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/request-limit/index.html index 67d4edc7e..fcc3fad79 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/request-limit/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/request-limit/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Concurrent request limiter handler


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/request-limit/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/response-header/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/response-header/index.html index 354d81dba..7728e7373 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/response-header/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/response-header/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Response header filter allows you to add custom headers.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/response-header/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/filter/rewrite/index.html b/29/wildscribe/subsystem/undertow/configuration/filter/rewrite/index.html index cd347bea5..9fa206647 100644 --- a/29/wildscribe/subsystem/undertow/configuration/filter/rewrite/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/filter/rewrite/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A rewrite (or redirect) filter


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/filter/rewrite/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/handler/file/index.html b/29/wildscribe/subsystem/undertow/configuration/handler/file/index.html index 549f0a47f..906052b50 100644 --- a/29/wildscribe/subsystem/undertow/configuration/handler/file/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/handler/file/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

File handler


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/handler/file/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/handler/index.html b/29/wildscribe/subsystem/undertow/configuration/handler/index.html index 7ac48cb73..13fdb99e5 100644 --- a/29/wildscribe/subsystem/undertow/configuration/handler/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Undertow handlers


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/host/index.html b/29/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/host/index.html index bd5c88985..f0c3d2075 100644 --- a/29/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/host/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/host/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A host that the reverse proxy will forward requests to


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/host/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/index.html b/29/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/index.html index 3bdbecd48..880ec5ce0 100644 --- a/29/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/index.html +++ b/29/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A reverse proxy handler


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/index.html b/29/wildscribe/subsystem/undertow/index.html index 08e7c4a26..2e9d1454b 100644 --- a/29/wildscribe/subsystem/undertow/index.html +++ b/29/wildscribe/subsystem/undertow/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Undertow subsystem


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/ajp-listener/index.html b/29/wildscribe/subsystem/undertow/server/ajp-listener/index.html index 44c75df57..6e43e5838 100644 --- a/29/wildscribe/subsystem/undertow/server/ajp-listener/index.html +++ b/29/wildscribe/subsystem/undertow/server/ajp-listener/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

http listener


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/ajp-listener/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/host/filter-ref/index.html b/29/wildscribe/subsystem/undertow/server/host/filter-ref/index.html index 80da67c78..59f019553 100644 --- a/29/wildscribe/subsystem/undertow/server/host/filter-ref/index.html +++ b/29/wildscribe/subsystem/undertow/server/host/filter-ref/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Reference to filter


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/host/filter-ref/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/host/index.html b/29/wildscribe/subsystem/undertow/server/host/index.html index a12a5ab70..72fba619a 100644 --- a/29/wildscribe/subsystem/undertow/server/host/index.html +++ b/29/wildscribe/subsystem/undertow/server/host/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An Undertow host


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/host/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/host/location/filter-ref/index.html b/29/wildscribe/subsystem/undertow/server/host/location/filter-ref/index.html index 34ba2d32b..54c177caa 100644 --- a/29/wildscribe/subsystem/undertow/server/host/location/filter-ref/index.html +++ b/29/wildscribe/subsystem/undertow/server/host/location/filter-ref/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Reference to filter


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/host/location/filter-ref/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/host/location/index.html b/29/wildscribe/subsystem/undertow/server/host/location/index.html index d1b9f6ca8..fa354c672 100644 --- a/29/wildscribe/subsystem/undertow/server/host/location/index.html +++ b/29/wildscribe/subsystem/undertow/server/host/location/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Holds configuration of location resource


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/host/location/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/host/setting/access-log/index.html b/29/wildscribe/subsystem/undertow/server/host/setting/access-log/index.html index cd409d823..1c8fb15c8 100644 --- a/29/wildscribe/subsystem/undertow/server/host/setting/access-log/index.html +++ b/29/wildscribe/subsystem/undertow/server/host/setting/access-log/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The access log configuration for this virtual server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/host/setting/access-log/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/host/setting/console-access-log/index.html b/29/wildscribe/subsystem/undertow/server/host/setting/console-access-log/index.html index 9485cd47d..0cf4ed278 100644 --- a/29/wildscribe/subsystem/undertow/server/host/setting/console-access-log/index.html +++ b/29/wildscribe/subsystem/undertow/server/host/setting/console-access-log/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Allows the access log to be written to the console.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/host/setting/console-access-log/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/host/setting/http-invoker/index.html b/29/wildscribe/subsystem/undertow/server/host/setting/http-invoker/index.html index fc68e3eb1..31bbe871d 100644 --- a/29/wildscribe/subsystem/undertow/server/host/setting/http-invoker/index.html +++ b/29/wildscribe/subsystem/undertow/server/host/setting/http-invoker/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The HTTP invoker services that allows remote HTTP based invocation of services such as Jakarta Enterprise Beans and naming


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/host/setting/http-invoker/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/host/setting/single-sign-on/index.html b/29/wildscribe/subsystem/undertow/server/host/setting/single-sign-on/index.html index 598a4f2ea..be4ee3a25 100644 --- a/29/wildscribe/subsystem/undertow/server/host/setting/single-sign-on/index.html +++ b/29/wildscribe/subsystem/undertow/server/host/setting/single-sign-on/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 12.0.0
Legacy PicketBox based security is no longer supported.

An SSO authentication mechanism configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/host/setting/single-sign-on/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/http-listener/index.html b/29/wildscribe/subsystem/undertow/server/http-listener/index.html index f2e357f4c..f75ef391e 100644 --- a/29/wildscribe/subsystem/undertow/server/http-listener/index.html +++ b/29/wildscribe/subsystem/undertow/server/http-listener/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

http listener


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/http-listener/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/https-listener/index.html b/29/wildscribe/subsystem/undertow/server/https-listener/index.html index 7f08c21c5..3b3323e5a 100644 --- a/29/wildscribe/subsystem/undertow/server/https-listener/index.html +++ b/29/wildscribe/subsystem/undertow/server/https-listener/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

http listener


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/https-listener/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/server/index.html b/29/wildscribe/subsystem/undertow/server/index.html index 1cd7be4cd..ec1e6d61d 100644 --- a/29/wildscribe/subsystem/undertow/server/index.html +++ b/29/wildscribe/subsystem/undertow/server/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A server


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/server/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/servlet-container/index.html b/29/wildscribe/subsystem/undertow/servlet-container/index.html index 0f269cc2e..3f5b44b14 100644 --- a/29/wildscribe/subsystem/undertow/servlet-container/index.html +++ b/29/wildscribe/subsystem/undertow/servlet-container/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A servlet container


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/servlet-container/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/servlet-container/mime-mapping/index.html b/29/wildscribe/subsystem/undertow/servlet-container/mime-mapping/index.html index 1468cb72c..878167df8 100644 --- a/29/wildscribe/subsystem/undertow/servlet-container/mime-mapping/index.html +++ b/29/wildscribe/subsystem/undertow/servlet-container/mime-mapping/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The servlet container mime mapping config


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/servlet-container/mime-mapping/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/servlet-container/setting/affinity-cookie/index.html b/29/wildscribe/subsystem/undertow/servlet-container/setting/affinity-cookie/index.html index 80db682af..c79f86a38 100644 --- a/29/wildscribe/subsystem/undertow/servlet-container/setting/affinity-cookie/index.html +++ b/29/wildscribe/subsystem/undertow/servlet-container/setting/affinity-cookie/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Affinity cookie configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/servlet-container/setting/affinity-cookie/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/servlet-container/setting/crawler-session-management/index.html b/29/wildscribe/subsystem/undertow/servlet-container/setting/crawler-session-management/index.html index be6211385..5e688aec4 100644 --- a/29/wildscribe/subsystem/undertow/servlet-container/setting/crawler-session-management/index.html +++ b/29/wildscribe/subsystem/undertow/servlet-container/setting/crawler-session-management/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures special session handling for crawler bots


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/servlet-container/setting/crawler-session-management/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/servlet-container/setting/jsp/index.html b/29/wildscribe/subsystem/undertow/servlet-container/setting/jsp/index.html index 3b7d5242f..561ebd836 100644 --- a/29/wildscribe/subsystem/undertow/servlet-container/setting/jsp/index.html +++ b/29/wildscribe/subsystem/undertow/servlet-container/setting/jsp/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta Server Pages container configuration.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/servlet-container/setting/jsp/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/servlet-container/setting/persistent-sessions/index.html b/29/wildscribe/subsystem/undertow/servlet-container/setting/persistent-sessions/index.html index db5838a1c..ccd96153b 100644 --- a/29/wildscribe/subsystem/undertow/servlet-container/setting/persistent-sessions/index.html +++ b/29/wildscribe/subsystem/undertow/servlet-container/setting/persistent-sessions/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Session persistence sessions


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/servlet-container/setting/persistent-sessions/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/servlet-container/setting/session-cookie/index.html b/29/wildscribe/subsystem/undertow/servlet-container/setting/session-cookie/index.html index cda508401..7ab5a54e7 100644 --- a/29/wildscribe/subsystem/undertow/servlet-container/setting/session-cookie/index.html +++ b/29/wildscribe/subsystem/undertow/servlet-container/setting/session-cookie/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Session cookie configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/servlet-container/setting/session-cookie/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/servlet-container/setting/websockets/index.html b/29/wildscribe/subsystem/undertow/servlet-container/setting/websockets/index.html index c0d348028..ec9d3668e 100644 --- a/29/wildscribe/subsystem/undertow/servlet-container/setting/websockets/index.html +++ b/29/wildscribe/subsystem/undertow/servlet-container/setting/websockets/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

If websockets are enabled for this container


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/servlet-container/setting/websockets/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/undertow/servlet-container/welcome-file/index.html b/29/wildscribe/subsystem/undertow/servlet-container/welcome-file/index.html index a57936fca..d33761f82 100644 --- a/29/wildscribe/subsystem/undertow/servlet-container/welcome-file/index.html +++ b/29/wildscribe/subsystem/undertow/servlet-container/welcome-file/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The welcome file


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/undertow/servlet-container/welcome-file/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/client-config/index.html b/29/wildscribe/subsystem/webservices/client-config/index.html index 1915e6754..a34abd4d5 100644 --- a/29/wildscribe/subsystem/webservices/client-config/index.html +++ b/29/wildscribe/subsystem/webservices/client-config/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Webservice client configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/client-config/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/client-config/post-handler-chain/handler/index.html b/29/wildscribe/subsystem/webservices/client-config/post-handler-chain/handler/index.html index bbcd45181..5757bd769 100644 --- a/29/wildscribe/subsystem/webservices/client-config/post-handler-chain/handler/index.html +++ b/29/wildscribe/subsystem/webservices/client-config/post-handler-chain/handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint handler


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/client-config/post-handler-chain/handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/client-config/post-handler-chain/index.html b/29/wildscribe/subsystem/webservices/client-config/post-handler-chain/index.html index 26cf4ba71..bec5f3ba2 100644 --- a/29/wildscribe/subsystem/webservices/client-config/post-handler-chain/index.html +++ b/29/wildscribe/subsystem/webservices/client-config/post-handler-chain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration POST handler chain


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/client-config/post-handler-chain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/client-config/pre-handler-chain/handler/index.html b/29/wildscribe/subsystem/webservices/client-config/pre-handler-chain/handler/index.html index c2a8f9e6f..c50d241fc 100644 --- a/29/wildscribe/subsystem/webservices/client-config/pre-handler-chain/handler/index.html +++ b/29/wildscribe/subsystem/webservices/client-config/pre-handler-chain/handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint handler


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/client-config/pre-handler-chain/handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/client-config/pre-handler-chain/index.html b/29/wildscribe/subsystem/webservices/client-config/pre-handler-chain/index.html index e6dee6054..907ce8d14 100644 --- a/29/wildscribe/subsystem/webservices/client-config/pre-handler-chain/index.html +++ b/29/wildscribe/subsystem/webservices/client-config/pre-handler-chain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration PRE handler chain


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/client-config/pre-handler-chain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/client-config/property/index.html b/29/wildscribe/subsystem/webservices/client-config/property/index.html index 250245b68..1526cf329 100644 --- a/29/wildscribe/subsystem/webservices/client-config/property/index.html +++ b/29/wildscribe/subsystem/webservices/client-config/property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration property


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/client-config/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/endpoint-config/index.html b/29/wildscribe/subsystem/webservices/endpoint-config/index.html index e1ede9668..76ee6fa6e 100644 --- a/29/wildscribe/subsystem/webservices/endpoint-config/index.html +++ b/29/wildscribe/subsystem/webservices/endpoint-config/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Webservice endpoint configuration


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/endpoint-config/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/handler/index.html b/29/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/handler/index.html index a61436020..b7bc87bbf 100644 --- a/29/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/handler/index.html +++ b/29/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint handler


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/index.html b/29/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/index.html index fa931d8f7..c834d241d 100644 --- a/29/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/index.html +++ b/29/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration POST handler chain


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/handler/index.html b/29/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/handler/index.html index fe77cad6b..23a5ca748 100644 --- a/29/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/handler/index.html +++ b/29/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/handler/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint handler


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/handler/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/index.html b/29/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/index.html index 58f682c98..2af72276e 100644 --- a/29/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/index.html +++ b/29/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration PRE handler chain


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/endpoint-config/property/index.html b/29/wildscribe/subsystem/webservices/endpoint-config/property/index.html index ace609da5..659911eab 100644 --- a/29/wildscribe/subsystem/webservices/endpoint-config/property/index.html +++ b/29/wildscribe/subsystem/webservices/endpoint-config/property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration property


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/endpoint-config/property/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/webservices/index.html b/29/wildscribe/subsystem/webservices/index.html index be5c6494a..b42c4ca23 100644 --- a/29/wildscribe/subsystem/webservices/index.html +++ b/29/wildscribe/subsystem/webservices/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the web services subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/webservices/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/weld/index.html b/29/wildscribe/subsystem/weld/index.html index 147f1c31e..fff32a6ba 100644 --- a/29/wildscribe/subsystem/weld/index.html +++ b/29/wildscribe/subsystem/weld/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the weld subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/weld/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/subsystem/xts/index.html b/29/wildscribe/subsystem/xts/index.html index 57b21c42c..2d38508d3 100644 --- a/29/wildscribe/subsystem/xts/index.html +++ b/29/wildscribe/subsystem/xts/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 3.0.0
Deprecated since the XTS feature set is rarely used and is considered legacy within development approaches nowadays.

The configuration of the XST subsystem.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/subsystem/xts/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/system-property/index.html b/29/wildscribe/system-property/index.html index 227902b61..789f73c6f 100644 --- a/29/wildscribe/system-property/index.html +++ b/29/wildscribe/system-property/index.html @@ -1 +1,11 @@ - WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A system property to set on the server.


\ No newline at end of file + + + + + + + + +

Redirecting to the latest version. If the page doesn't open, click the following link: /latest/wildscribe/system-property/index.html

+ + \ No newline at end of file diff --git a/latest/Admin_Guide.html b/latest/Admin_Guide.html new file mode 100644 index 000000000..c5c779809 --- /dev/null +++ b/latest/Admin_Guide.html @@ -0,0 +1,26840 @@ + + + + + + + + +WildFly Admin Guide + + + + + + + +
+
+
+
+

© 2017 The original authors.

+
+ +
+
+
+

1. Target Audience

+
+
+

This document is a guide to the setup, administration, and configuration +of WildFly.

+
+
+

1.1. Prerequisites

+
+

Before continuing, you should know how to download, install and run +WildFly. For more information on these steps, refer here: +Getting Started Guide.

+
+
+
+

1.2. Examples in this guide

+
+

The examples in this guide are largely expressed as XML configuration +file excerpts, or by using a representation of the de-typed management +model.

+
+
+
+
+
+

2. Core management concepts

+
+ +
+

2.1. Operating mode

+
+

WildFly can be booted in two different modes. A managed domain allows +you to run and manage a multi-server topology. Alternatively, you can +run a standalone server instance.

+
+
+

2.1.1. Standalone Server

+
+

For many use cases, the centralized management capability available via +a managed domain is not necessary. For these use cases, a WildFly +instance can be run as a "standalone server". A standalone server +instance is an independent process, much like an JBoss Application +Server 3, 4, 5, or 6 instance is. Standalone instances can be launched +via the standalone.sh or standalone.bat launch scripts.

+
+
+

If more than one standalone instance is launched and multi-server +management is desired, it is the user’s responsibility to coordinate +management across the servers. For example, to deploy an application +across all of the standalone servers, the user would need to +individually deploy the application on each server.

+
+
+

It is perfectly possible to launch multiple standalone server instances +and have them form an HA cluster, just like it was possible with JBoss +Application Server 3, 4, 5 and 6.

+
+
+
+

2.1.2. Managed Domain

+
+

One of the primary new features of WildFly is the ability to manage +multiple WildFly instances from a single control point. A collection of +such servers is referred to as the members of a "domain" with a single +Domain Controller process acting as the central management control +point. All of the WildFly instances in the domain share a common +management policy, with the Domain Controller acting to ensure that each +server is configured according to that policy. Domains can span multiple +physical (or virtual) machines, with all WildFly instances on a given +host under the control of a special Host Controller process. One Host +Controller instance is configured to act as the central Domain +Controller. The Host Controller on each host interacts with the Domain +Controller to control the lifecycle of the application server instances +running on its host and to assist the Domain Controller in managing +them.

+
+
+

When you launch a WildFly managed domain on a host (via the domain.sh +or domain.bat launch scripts) your intent is to launch a Host +Controller and usually at least one WildFly instance. On one of the +hosts the Host Controller should be configured to act as the Domain +Controller. See Domain Setup for details.

+
+
+

The following is an example managed domain topology:

+
+
+
+DC-HC-Server.png +
+
+
+
Host
+
+

Each "Host" box in the above diagram represents a physical or virtual +host. A physical host can contain zero, one or more server instances.

+
+
+
+
Host Controller
+
+

When the domain.sh or domain.bat script is run on a host, a process +known as a Host Controller is launched. The Host Controller is solely +concerned with server management; it does not itself handle application +server workloads. The Host Controller is responsible for starting and +stopping the individual application server processes that run on its +host, and interacts with the Domain Controller to help manage them.

+
+
+

Each Host Controller by default reads its configuration from the +domain/configuration/host.xml file located in the unzipped WildFly +installation on its host’s filesystem. The host.xml file contains +configuration information that is specific to the particular host. +Primarily:

+
+
+
    +
  • +

    the listing of the names of the actual WildFly instances that are +meant to run off of this installation.

    +
  • +
  • +

    configuration of how the Host Controller is to contact the Domain +Controller to register itself and access the domain configuration. This +may either be configuration of how to find and contact a remote Domain +Controller, or a configuration telling the Host Controller to itself act +as the Domain Controller.

    +
  • +
  • +

    configuration of items that are specific to the local physical +installation. For example, named interface definitions declared in +domain.xml (see below) can be mapped to an actual machine-specific IP +address in host.xml. Abstract path names in domain.xml can be mapped +to actual filesystem paths in host.xml.

    +
  • +
+
+
+
+
Domain Controller
+
+

One Host Controller instance is configured to act as the central +management point for the entire domain, i.e. to be the Domain +Controller. The primary responsibility of the Domain Controller is to +maintain the domain’s central management policy, to ensure all Host +Controllers are aware of its current contents, and to assist the Host +Controllers in ensuring any running application server instances are +configured in accordance with this policy. This central management +policy is stored by default in the domain/configuration/domain.xml +file in the unzipped WildFly installation on Domain Controller’s host’s +filesystem.

+
+
+

A domain.xml file must be located in the domain/configuration +directory of an installation that’s meant to run the Domain Controller. +It does not need to be present in installations that are not meant to +run a Domain Controller; i.e. those whose Host Controller is configured +to contact a remote Domain Controller. The presence of a domain.xml +file on such a server does no harm.

+
+
+

The domain.xml file includes, among other things, the configuration of +the various "profiles" that WildFly instances in the domain can be +configured to run. A profile configuration includes the detailed +configuration of the various subsystems that comprise that profile (e.g. +an embedded JBoss Web instance is a subsystem; a JBoss TS transaction +manager is a subsystem, etc). The domain configuration also includes the +definition of groups of sockets that those subsystems may open. The +domain configuration also includes the definition of "server groups":

+
+
+
+
Server Group
+
+

A server group is set of server instances that will be managed and +configured as one. In a managed domain each application server instance +is a member of a server group. (Even if the group only has a single +server, the server is still a member of a group.) It is the +responsibility of the Domain Controller and the Host Controllers to +ensure that all servers in a server group have a consistent +configuration. They should all be configured with the same profile and +they should have the same deployment content deployed.

+
+
+

The domain can have multiple server groups. The above diagram shows two +server groups, "ServerGroupA" and "ServerGroupB". Different server +groups can be configured with different profiles and deployments; for +example in a domain with different tiers of servers providing different +services. Different server groups can also run the same profile and have +the same deployments; for example to support rolling application upgrade +scenarios where a complete service outage is avoided by first upgrading +the application on one server group and then upgrading a second server +group.

+
+
+

An example server group definition is as follows:

+
+
+
+
<server-group name="main-server-group" profile="default">
+    <socket-binding-group ref="standard-sockets"/>
+    <deployments>
+        <deployment name="foo.war_v1" runtime-name="foo.war" />
+        <deployment name="bar.ear" runtime-name="bar.ear" />
+    </deployments>
+</server-group>
+
+
+
+

A server-group configuration includes the following required attributes:

+
+
+
    +
  • +

    name — the name of the server group

    +
  • +
  • +

    profile — the name of the profile the servers in the group should run

    +
  • +
+
+
+

In addition, the following optional elements are available:

+
+
+
    +
  • +

    socket-binding-group — specifies the name of the default socket +binding group to use on servers in the group. Can be overridden on a +per-server basis in host.xml. If not provided in the server-group +element, it must be provided for each server in host.xml.

    +
  • +
  • +

    deployments — the deployment content that should be deployed on the +servers in the group.

    +
  • +
  • +

    deployment-overlays — the overlays and their associated deployments.

    +
  • +
  • +

    system-properties — system properties that should be set on all +servers in the group

    +
  • +
  • +

    jvm — default jvm settings for all servers in the group. The Host +Controller will merge these settings with any provided in host.xml to +derive the settings to use to launch the server’s JVM. See +JVM settings for further details.

    +
  • +
+
+
+
+
Server
+
+

Each "Server" in the above diagram represents an actual application +server instance. The server runs in a separate JVM process from the Host +Controller. The Host Controller is responsible for launching that +process. (In a managed domain the end user cannot directly launch a +server process from the command line.)

+
+
+

The Host Controller synthesizes the server’s configuration by combining +elements from the domain wide configuration (from domain.xml ) and the +host-specific configuration (from host.xml ).

+
+
+
+
+

2.1.3. Deciding between running standalone servers or a managed domain

+
+

Which use cases are appropriate for managed domain and which are +appropriate for standalone servers? A managed domain is all about +coordinated multi-server management — with it WildFly provides a +central point through which users can manage multiple servers, with rich +capabilities to keep those servers' configurations consistent and the +ability to roll out configuration changes (including deployments) to the +servers in a coordinated fashion.

+
+
+

It’s important to understand that the choice between a managed domain +and standalone servers is all about how your servers are managed, not +what capabilities they have to service end user requests. This +distinction is particularly important when it comes to high availability +clusters. It’s important to understand that HA functionality is +orthogonal to running standalone servers or a managed domain. That is, a +group of standalone servers can be configured to form an HA cluster. The +domain and standalone modes determine how the servers are managed, not +what capabilities they provide.

+
+
+

So, given all that:

+
+
+
    +
  • +

    A single server installation gains nothing from running in a managed +domain, so running a standalone server is a better choice.

    +
  • +
  • +

    For multi-server production environments, the choice of running a +managed domain versus standalone servers comes down to whether the user +wants to use the centralized management capabilities a managed domain +provides. Some enterprises have developed their own sophisticated +multi-server management capabilities and are comfortable coordinating +changes across a number of independent WildFly instances. For these +enterprises, a multi-server architecture comprised of individual +standalone servers is a good option.

    +
  • +
  • +

    Running a standalone server is better suited for most development +scenarios. Any individual server configuration that can be achieved in a +managed domain can also be achieved in a standalone server, so even if +the application being developed will eventually run in production on a +managed domain installation, much (probably most) development can be +done using a standalone server.

    +
  • +
  • +

    Running a managed domain mode can be helpful in some advanced +development scenarios; i.e. those involving interaction between multiple +WildFly instances. Developers may find that setting up various servers +as members of a domain is an efficient way to launch a multi-server +cluster.

    +
  • +
+
+
+
+
+

2.2. General configuration concepts

+
+

For both a managed domain or a standalone server, a number of common +configuration concepts apply:

+
+
+

2.2.1. Extensions

+
+

An extension is a module that extends the core capabilities of the +server. The WildFly core is very simple and lightweight; most of the +capabilities people associate with an application server are provided +via extensions. An extension is packaged as a module in the modules +folder. The user indicates that they want a particular extension to be +available by including an <extension/> element naming its module in +the domain.xml or standalone.xml file.

+
+
+
+
<extensions>
+    [...]
+    <extension module="org.jboss.as.transactions"/>
+    <extension module="org.jboss.as.webservices" />
+    <extension module="org.jboss.as.weld" />
+    [...]
+    <extension module="org.wildfly.extension.undertow"/>
+</extensions>
+
+
+
+
+

2.2.2. Profiles and Subsystems

+
+

The most significant part of the configuration in domain.xml and +standalone.xml is the configuration of one (in standalone.xml) or +more (in domain.xml) "profiles". A profile is a named set of subsystem +configurations. A subsystem is an added set of capabilities added to the +core server by an extension (see "Extensions" above). A subsystem +provides servlet handling capabilities; a subsystem provides an Jakarta Enterprise Beans +container; a subsystem provides Jakarta Transactions, etc. A profile is a named list of +subsystems, along with the details of each subsystem’s configuration. A +profile with a large number of subsystems results in a server with a +large set of capabilities. A profile with a small, focused set of +subsystems will have fewer capabilities but a smaller footprint.

+
+
+

The content of an individual profile configuration looks largely the +same in domain.xml and standalone.xml. The only difference is +standalone.xml is only allowed to have a single profile element (the +profile the server will run), while domain.xml can have many profiles, +each of which can be mapped to one or more groups of servers.

+
+
+

The contents of individual subsystem configurations look exactly the +same between domain.xml and standalone.xml.

+
+
+
+

2.2.3. Paths

+
+

A logical name for a filesystem path. The domain.xml, host.xml and +standalone.xml configurations all include a section where paths can be +declared. Other sections of the configuration can then reference those +paths by their logical name, rather than having to include the full +details of the path (which may vary on different machines). For example, +the logging subsystem configuration includes a reference to the " +`jboss.server.log.dir`" path that points to the server’s " `log`" +directory.

+
+
+
+
<file relative-to="jboss.server.log.dir" path="server.log"/>
+
+
+
+

WildFly automatically provides a number of standard paths without any +need for the user to configure them in a configuration file:

+
+
+
    +
  • +

    jboss.home.dir - the root directory of the WildFly distribution

    +
  • +
  • +

    user.home - user’s home directory

    +
  • +
  • +

    user.dir - user’s current working directory

    +
  • +
  • +

    java.home - java installation directory

    +
  • +
  • +

    jboss.server.base.dir - root directory for an individual server +instance

    +
  • +
  • +

    jboss.server.config.dir - directory the server will use for +configuration file storage

    +
  • +
  • +

    jboss.server.data.dir - directory the server will use for persistent +data file storage

    +
  • +
  • +

    jboss.server.log.dir - directory the server will use for log file +storage

    +
  • +
  • +

    jboss.server.temp.dir - directory the server will use for temporary +file storage

    +
  • +
  • +

    jboss.controller.temp.dir - directory the server will use for +temporary file storage

    +
  • +
  • +

    jboss.domain.servers.dir - directory under which a host controller +will create the working area for individual server instances (managed +domain mode only)

    +
  • +
+
+
+

Users can add their own paths or override all except the first 5 of the +above by adding a <path/> element to their configuration file.

+
+
+
+
<path name="example" path="example" relative-to="jboss.server.data.dir"/>
+
+
+
+

The attributes are:

+
+
+
    +
  • +

    name — the name of the path.

    +
  • +
  • +

    path — the actual filesystem path. Treated as an absolute path, +unless the 'relative-to' attribute is specified, in which case the value +is treated as relative to that path.

    +
  • +
  • +

    relative-to — (optional) the name of another previously named path, +or of one of the standard paths provided by the system.

    +
  • +
+
+
+

A <path/> element in a domain.xml need not include anything more +than the name attribute; i.e. it need not include any information +indicating what the actual filesystem path is:

+
+
+
+
<path name="x"/>
+
+
+
+

Such a configuration simply says, "There is a path named 'x' that other +parts of the domain.xml configuration can reference. The actual +filesystem location pointed to by 'x' is host-specific and will be +specified in each machine’s host.xml file." If this approach is used, +there must be a path element in each machine’s host.xml that specifies +what the actual filesystem path is:

+
+
+
+
<path name="x" path="/var/x" />
+
+
+
+

A <path/> element in a standalone.xml must include the specification +of the actual filesystem path.

+
+
+
+

2.2.4. Interfaces

+
+

A logical name for a network interface/IP address/host name to which +sockets can be bound. The domain.xml, host.xml and standalone.xml +configurations all include a section where interfaces can be declared. +Other sections of the configuration can then reference those interfaces +by their logical name, rather than having to include the full details of +the interface (which may vary on different machines). An interface +configuration includes the logical name of the interface as well as +information specifying the criteria to use for resolving the actual +physical address to use. See Interfaces +and ports for further details.

+
+
+

An <interface/> element in a domain.xml need not include anything +more than the name attribute; i.e. it need not include any information +indicating what the actual IP address associated with the name is:

+
+
+
+
<interface name="internal"/>
+
+
+
+

Such a configuration simply says, "There is an interface named +'internal' that other parts of the domain.xml configuration can +reference. The actual IP address pointed to by 'internal' is +host-specific and will be specified in each machine’s host.xml file." If +this approach is used, there must be an interface element in each +machine’s host.xml that specifies the criteria for determining the IP +address:

+
+
+
+
<interface name="internal">
+   <nic name="eth1"/>
+</interface>
+
+
+
+

An <interface/> element in a standalone.xml must include the +criteria for determining the IP address.

+
+
+

See Interface declarations +for full details.

+
+
+
+

2.2.5. Socket Bindings and Socket Binding Groups

+
+

A socket binding is a named configuration for a socket.

+
+
+

The domain.xml and standalone.xml configurations both include a +section where named socket configurations can be declared. Other +sections of the configuration can then reference those sockets by their +logical name, rather than having to include the full details of the +socket configuration (which may vary on different machines). +See Socket Binding Groups +for full details.

+
+
+
+

2.2.6. System Properties

+
+

System property values can be set in a number of places in domain.xml, +host.xml and standalone.xml. The values in standalone.xml are set +as part of the server boot process. Values in domain.xml and +host.xml are applied to servers when they are launched.

+
+
+

When a system property is configured in domain.xml or host.xml, the +servers it ends up being applied to depends on where it is set. Setting +a system property in a child element directly under the domain.xml +root results in the property being set on all servers. Setting it in a +<system-property/> element inside a <server-group/> element in +domain.xml results in the property being set on all servers in the +group. Setting it in a child element directly under the host.xml root +results in the property being set on all servers controlled by that +host’s Host Controller. Finally, setting it in a <system-property/> +element inside a <server/> element in host.xml result in the +property being set on that server. The same property can be configured +in multiple locations, with a value in a <server/> element taking +precedence over a value specified directly under the host.xml root +element, the value in a host.xml taking precedence over anything from +domain.xml, and a value in a <server-group/> element taking +precedence over a value specified directly under the domain.xml root +element.

+
+
+
+

2.2.7. Script Configuration Files

+
+

Scripts are located in the $JBOSS_HOME/bin directory. Within this directory you will find script configuration files +for standalone and domain startup scripts for each platform. These files can be used to configure your environment +without having to edit the scripts themselves. For example, you can configure the JAVA_OPTS environment variable to +configure the JVM before the container is launched.

+
+
+
Standalone Script Configuration Files:
+
+
    +
  • +

    standalone.conf invoked from standalone.sh

    +
  • +
  • +

    standalone.conf.bat invoked from standalone.bat

    +
  • +
  • +

    standalone.conf.ps1 invoked from standalone.ps1

    +
  • +
+
+
+
+
Domain Script Configuration Files:
+
+
    +
  • +

    domain.conf invoked from domain.sh

    +
  • +
  • +

    domain.conf.bat invoked from domain.bat

    +
  • +
  • +

    domain.conf.ps1 invoked from domain.ps1

    +
  • +
+
+
+

By default, these are in the $JBOSS_HOME/bin directory. However, you can set the STANDALONE_CONF environment +variable for standalone servers or DOMAIN_CONF environment variable for domain servers with a value of the +absolute path to the file.

+
+
+
+
Common Script Configuration Files
+
+

Starting with WildFly 23, common configuration files were introduced. These files are invoked from every script in the +$JBOSS_HOME/bin directory. While these configuration files are not present in the directory by default, they +can be added. You can simply just add the common.conf configuration file for the script type you want to +execute and all scripts in the directory will invoke the configuration script.

+
+
+
    +
  • +

    common.conf for bash scripts

    +
  • +
  • +

    common.conf.bat for Windows batch scripts

    +
  • +
  • +

    common.conf.ps1 for PowerShell scripts

    +
  • +
+
+
+

You can also set the COMMON_CONF environment variable to have this configuration script live outside the +$JBOSS_HOME/bin directory.

+
+
+ + + + + +
+ + +If you provide a common configuration file it will be invoked before the standalone and domain script +configuration files. For example invoking standalone.sh first invokes the common.conf then later invokes +the standalone.conf. +
+
+
+
+
+
+

2.3. Management resources

+
+

When WildFly parses your configuration files at boot, or when you use +one of the AS’s Management Clients you are +adding, removing or modifying management resources in the AS’s +internal management model. A WildFly management resource has the +following characteristics:

+
+
+

2.3.1. Address

+
+

All WildFly management resources are organized in a tree. The path to +the node in the tree for a particular resource is its address. Each +segment in a resource’s address is a key/value pair:

+
+
+
    +
  • +

    The key is the resource’s type, in the context of its parent. So, +for example, the root resource for a standalone server has children of +type subsystem, interface, socket-binding, etc. The resource for +the subsystem that provides the AS’s webserver capability has children +of type connector and virtual-server. The resource for the subsystem +that provides the AS’s messaging server capability has, among others, +children of type jms-queue and jms-topic.

    +
  • +
  • +

    The value is the name of a particular resource of the given type, e.g +web or messaging for subsystems or http or https for web +subsystem connectors.

    +
  • +
+
+
+

The full address for a resource is the ordered list of key/value pairs +that lead from the root of the tree to the resource. Typical notation is +to separate the elements in the address with a '/' and to separate the +key and the value with an '=':

+
+
+
    +
  • +

    /subsystem=undertow/server=default-server/http-listener=default

    +
  • +
  • +

    /subsystem=messaging/jms-queue=testQueue

    +
  • +
  • +

    /interface=public

    +
  • +
+
+
+

When using the HTTP API, a '/' is used to separate the key and the value +instead of an '=':

+
+ +
+
+

2.3.2. Operations

+
+

Querying or modifying the state of a resource is done via an operation. +An operation has the following characteristics:

+
+
+
    +
  • +

    A string name

    +
  • +
  • +

    Zero or more named parameters. Each parameter has a string name, and a +value of type org.jboss.dmr.ModelNode (or, when invoked via the CLI, +the text representation of a ModelNode; when invoked via the HTTP API, +the JSON representation of a ModelNode.) Parameters may be optional.

    +
  • +
  • +

    A return value, which will be of type org.jboss.dmr.ModelNode (or, +when invoked via the CLI, the text representation of a ModelNode; when +invoked via the HTTP API, the JSON representation of a ModelNode.)

    +
  • +
+
+
+

Every resource except the root resource will have an add operation and +should have a remove operation ("should" because in WildFly 29 many do +not). The parameters for the add operation vary depending on the +resource. The remove operation has no parameters.

+
+
+

There are also a number of "global" operations that apply to all +resources. See Global operations for full +details.

+
+
+

The operations a resource supports can themselves be determined by +invoking an operation: the read-operation-names operation. Once the +name of an operation is known, details about its parameters and return +value can be determined by invoking the read-operation-description +operation. For example, to learn the names of the operations exposed by +the root resource for a standalone server, and then learn the full +details of one of them, via the CLI one would:

+
+
+
+
[standalone@localhost:9990 /] :read-operation-names
+{
+    "outcome" => "success",
+    "result" => [
+        "add-namespace",
+        "add-schema-location",
+        "delete-snapshot",
+        "full-replace-deployment",
+        "list-snapshots",
+        "read-attribute",
+        "read-children-names",
+        "read-children-resources",
+        "read-children-types",
+        "read-config-as-xml",
+        "read-operation-description",
+        "read-operation-names",
+        "read-resource",
+        "read-resource-description",
+        "reload",
+        "remove-namespace",
+        "remove-schema-location",
+        "replace-deployment",
+        "shutdown",
+        "take-snapshot",
+        "upload-deployment-bytes",
+        "upload-deployment-stream",
+        "upload-deployment-url",
+        "validate-address",
+        "write-attribute"
+    ]
+}
+[standalone@localhost:9990 /] :read-operation-description(name=upload-deployment-url)
+{
+    "outcome" => "success",
+    "result" => {
+        "operation-name" => "upload-deployment-url",
+        "description" => "Indicates that the deployment content available at the included URL should be added to the deployment content repository. Note that this operation does not indicate the content should be deployed into the runtime.",
+        "request-properties" => {"url" => {
+            "type" => STRING,
+            "description" => "The URL at which the deployment content is available for upload to the domain's or standalone server's deployment content repository.. Note that the URL must be accessible from the target of the operation (i.e. the Domain Controller or standalone server).",
+            "required" => true,
+            "min-length" => 1,
+            "nillable" => false
+        }},
+        "reply-properties" => {
+            "type" => BYTES,
+            "description" => "The hash of managed deployment content that has been uploaded to the domain's or standalone server's deployment content repository.",
+            "min-length" => 20,
+            "max-length" => 20,
+            "nillable" => false
+        }
+    }
+}
+
+
+
+

See Descriptions +below for more on how to learn about the operations a resource exposes.

+
+
+
+

2.3.3. Attributes

+
+

Management resources expose information about their state as attributes. +Attributes have string name, and a value of type +org.jboss.dmr.ModelNode (or: for the CLI, the text representation of a +ModelNode; for HTTP API, the JSON representation of a ModelNode.)

+
+
+

Attributes can either be read-only or read-write. Reading and writing +attribute values is done via the global read-attribute and +write-attribute operations.

+
+
+

The read-attribute operation takes a single parameter "name" whose +value is a the name of the attribute. For example, to read the "port" +attribute of a socket-binding resource via the CLI:

+
+
+
+
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets/socket-binding=https:read-attribute(name=port)
+{
+    "outcome" => "success",
+    "result" => 8443
+}
+
+
+
+

If an attribute is writable, the write-attribute operation is used to +mutate its state. The operation takes two parameters:

+
+
+
    +
  • +

    name – the name of the attribute

    +
  • +
  • +

    value – the value of the attribute

    +
  • +
+
+
+

For example, to read the "port" attribute of a socket-binding resource +via the CLI:

+
+
+
+
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets/socket-binding=https:write-attribute(name=port,value=8444)
+{"outcome" => "success"}
+
+
+
+

Attributes can have one of two possible storage types:

+
+
+
    +
  • +

    CONFIGURATION – means the value of the attribute is stored in the +persistent configuration; i.e. in the domain.xml, host.xml or +standalone.xml file from which the resource’s configuration was read.

    +
  • +
  • +

    RUNTIME – the attribute value is only available from a running +server; the value is not stored in the persistent configuration. A +metric (e.g. number of requests serviced) is a typical example of a +RUNTIME attribute.

    +
  • +
+
+
+

The values of all of the attributes a resource exposes can be obtained +via the read-resource operation, with the "include-runtime" parameter +set to "true". For example, from the CLI:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=undertow/server=default-server/http-listener=default:read-resource(include-runtime=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "allow-encoded-slash" => false,
+        "allow-equals-in-cookie-value" => false,
+        "always-set-keep-alive" => true,
+        "buffer-pipelined-data" => true,
+        "buffer-pool" => "default",
+        "bytes-received" => 0L,
+        "bytes-sent" => 0L,
+        "certificate-forwarding" => false,
+        "decode-url" => true,
+        "disallowed-methods" => ["TRACE"],
+        "enable-http2" => false,
+        "enabled" => true,
+        "error-count" => 0L,
+        "max-buffered-request-size" => 16384,
+        "max-connections" => undefined,
+        "max-cookies" => 200,
+        "max-header-size" => 1048576,
+        "max-headers" => 200,
+        "max-parameters" => 1000,
+        "max-post-size" => 10485760L,
+        "max-processing-time" => 0L,
+        "no-request-timeout" => undefined,
+        "processing-time" => 0L,
+        "proxy-address-forwarding" => false,
+        "read-timeout" => undefined,
+        "receive-buffer" => undefined,
+        "record-request-start-time" => false,
+        "redirect-socket" => "https",
+        "request-count" => 0L,
+        "request-parse-timeout" => undefined,
+        "resolve-peer-address" => false,
+        "send-buffer" => undefined,
+        "socket-binding" => "http",
+        "tcp-backlog" => undefined,
+        "tcp-keep-alive" => undefined,
+        "url-charset" => "UTF-8",
+        "worker" => "default",
+        "write-timeout" => undefined
+    }
+}
+
+
+
+

Omit the "include-runtime" parameter (or set it to "false") to limit +output to those attributes whose values are stored in the persistent +configuration:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=undertow/server=default-server/http-listener=default:read-resource(include-runtime=false)
+{
+    "outcome" => "success",
+    "result" => {
+        "allow-encoded-slash" => false,
+        "allow-equals-in-cookie-value" => false,
+        "always-set-keep-alive" => true,
+        "buffer-pipelined-data" => true,
+        "buffer-pool" => "default",
+        "certificate-forwarding" => false,
+        "decode-url" => true,
+        "disallowed-methods" => ["TRACE"],
+        "enable-http2" => false,
+        "enabled" => true,
+        "max-buffered-request-size" => 16384,
+        "max-connections" => undefined,
+        "max-cookies" => 200,
+        "max-header-size" => 1048576,
+        "max-headers" => 200,
+        "max-parameters" => 1000,
+        "max-post-size" => 10485760L,
+        "no-request-timeout" => undefined,
+        "proxy-address-forwarding" => false,
+        "read-timeout" => undefined,
+        "receive-buffer" => undefined,
+        "record-request-start-time" => false,
+        "redirect-socket" => "https",
+        "request-parse-timeout" => undefined,
+        "resolve-peer-address" => false,
+        "send-buffer" => undefined,
+        "socket-binding" => "http",
+        "tcp-backlog" => undefined,
+        "tcp-keep-alive" => undefined,
+        "url-charset" => "UTF-8",
+        "worker" => "default",
+        "write-timeout" => undefined
+    }
+}
+
+
+
+

See Descriptions +below for how to learn more about the attributes a particular resource +exposes.

+
+
+
Override an Attribute Value with an Environment Variable
+
+

It is possible to override the value of any simple attribute by providing an environment variable with a name +that maps to the attribute (and its resource).

+
+
+ + + + + +
+ + +
+

Complex attributes (which have their type set to LIST, OBJECT, or PROPERTY) can not be overridden using an environment variable.

+
+
+
+
+

If there is an environment variable with such a name, the management resource will use the value of this environment variable +when the management resource validates and sets the attribute value. +This takes place before the attribute value is resolved (if it contains an expression) or corrected.

+
+
+ + + + + +
+ + +
+

This feature is disabled by default. To enable it, the environment variable WILDFLY_OVERRIDING_ENV_VARS must be set (its value is not relevant):

+
+
+

export WILDFLY_OVERRIDING_ENV_VARS=1

+
+
+
+
+
Mapping between the resource address and attribute and the environment variable
+
+

The name of the environment variable is based on the address of the resource and the name of the attribute:

+
+
+
    +
  1. +

    take the address of the resource (e.g. /subsystem=undertow/server=default-server/http-listener=default)

    +
    +
      +
    • +

      /subsystem=undertow/server=default-server/http-listener=default

      +
    • +
    +
    +
  2. +
  3. +

    remove the leading slash (/)

    +
    +
      +
    • +

      subsystem=undertow/server=default-server/http-listener=default

      +
    • +
    +
    +
  4. +
  5. +

    append two underscores (__) and the name of the attribute (e.g. proxy-address-forwarding)

    +
    +
      +
    • +

      subsystem=undertow/server=default-server/http-listener=default__proxy-address-forwarding

      +
    • +
    +
    +
  6. +
  7. +

    Replace all non-alphanumeric characters with an underscore (_) and put it in upper case

    +
    +
      +
    • +

      SUBSYSTEM_UNDERTOW_SERVER_DEFAULT_SERVER_HTTP_LISTENER_DEFAULT__PROXY_ADDRESS_FORWARDING

      +
    • +
    +
    +
  8. +
+
+
+

If WildFly is started with that environment variable, the value of the proxy-address-forwarding attribute on the +/subsystem=undertow/server=default-server/http-listener=default will be set to the value of the environment variable:

+
+
+
+
$ WILDFLY_OVERRIDING_ENV_VARS=1 \
+  SUBSYSTEM_UNDERTOW_SERVER_DEFAULT_SERVER_HTTP_LISTENER_DEFAULT__PROXY_ADDRESS_FORWARDING=false \
+  ./bin/standalone.sh
+$ ./bin/jboss-cli.sh -c --command="/subsystem=undertow/server=default-server/http-listener=default:read-attribute(name=proxy-address-forwarding)"
+{
+    "outcome" => "success",
+    "result" => "false"
+
+
+
+ + + + + +
+ + +
+

If an attribute value is determined from an environment variable, the next time the configuration is persisted, that value from the environment variable will be persisted. +Until an operation triggers such persistence of the configuration file, the configuration file will not reflect the current running configuration.

+
+
+
+
+
+
+
+

2.3.4. Children

+
+

Management resources may support child resources. The +types of children a +resource supports (e.g. connector for the web subsystem resource) can +be obtained by querying the resource’s description (see +Descriptions below) +or by invoking the read-children-types operation. Once you know the +legal child types, you can query the names of all children of a given +type by using the global read-children-types operation. The operation +takes a single parameter "child-type" whose value is the type. For +example, a resource representing a socket binding group has children. To +find the type of those children and the names of resources of that type +via the CLI one could:

+
+
+
+
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets:read-children-types
+{
+    "outcome" => "success",
+    "result" => ["socket-binding"]
+}
+[standalone@localhost:9990 /] /socket-binding-group=standard-sockets:read-children-names(child-type=socket-binding)
+{
+    "outcome" => "success",
+    "result" => [
+        "http",
+        "https",
+        "jmx-connector-registry",
+        "jmx-connector-server",
+        "jndi",
+        "remoting",
+        "txn-recovery-environment",
+        "txn-status-manager"
+    ]
+}
+
+
+
+
+

2.3.5. Descriptions

+
+

All resources expose metadata that describes their attributes, +operations and child types. This metadata is itself obtained by invoking +one or more of the global operations each +resource supports. We showed examples of the read-operation-names, +read-operation-description, read-children-types and +read-children-names operations above.

+
+
+

The read-resource-description operation can be used to find the +details of the attributes and child types associated with a resource. +For example, using the CLI:

+
+
+
+
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets:read-resource-description
+{
+    "outcome" => "success",
+    "result" => {
+        "description" => "Contains a list of socket configurations.",
+        "head-comment-allowed" => true,
+        "tail-comment-allowed" => false,
+        "attributes" => {
+            "name" => {
+                "type" => STRING,
+                "description" => "The name of the socket binding group.",
+                "required" => true,
+                "head-comment-allowed" => false,
+                "tail-comment-allowed" => false,
+                "access-type" => "read-only",
+                "storage" => "configuration"
+            },
+            "default-interface" => {
+                "type" => STRING,
+                "description" => "Name of an interface that should be used as the interface for any sockets that do not explicitly declare one.",
+                "required" => true,
+                "head-comment-allowed" => false,
+                "tail-comment-allowed" => false,
+                "access-type" => "read-write",
+                "storage" => "configuration"
+            },
+            "port-offset" => {
+                "type" => INT,
+                "description" => "Increment to apply to the base port values defined in the socket bindings to derive the runtime values to use on this server.",
+                "required" => false,
+                "head-comment-allowed" => true,
+                "tail-comment-allowed" => false,
+                "access-type" => "read-write",
+                "storage" => "configuration"
+            }
+        },
+        "operations" => {},
+        "children" => {"socket-binding" => {
+            "description" => "The individual socket configurtions.",
+            "min-occurs" => 0,
+            "model-description" => undefined
+        }}
+    }
+}
+
+
+
+

Note the +"operations" ⇒ }} in the output above. If the command had included the {{operations +parameter (i.e. +/socket-binding-group=standard-sockets:read-resource-description(operations=true)) +the output would have included the description of each operation +supported by the resource.

+
+
+

See the Global operations section for +details on other parameters supported by the read-resource-description +operation and all the other globally available operations.

+
+
+
+

2.3.6. Comparison to JMX MBeans

+
+

WildFly management resources are conceptually quite similar to Open +MBeans. They have the following primary differences:

+
+
+
    +
  • +

    WildFly management resources are organized in a tree structure. The +order of the key value pairs in a resource’s address is significant, as +it defines the resource’s position in the tree. The order of the key +properties in a JMX ObjectName is not significant.

    +
  • +
  • +

    In an Open MBean attribute values, operation parameter values and +operation return values must either be one of the simple JDK types +(String, Boolean, Integer, etc) or implement either the +javax.management.openmbean.CompositeData interface or the +javax.management.openmbean.TabularData interface. WildFly management +resource attribute values, operation parameter values and operation +return values are all of type org.jboss.dmr.ModelNode.

    +
  • +
+
+
+
+

2.3.7. Basic structure of the management resource trees

+
+

As noted above, management resources are organized in a tree structure. +The structure of the tree depends on whether you are running a +standalone server or a managed domain.

+
+
+
Standalone server
+
+

The structure of the managed resource tree is quite close to the +structure of the standalone.xml configuration file.

+
+
+
    +
  • +

    The root resource

    +
    +
      +
    • +

      extension – extensions installed in the server

      +
    • +
    • +

      path – paths available on the server

      +
    • +
    • +

      system-property – system properties set as part of the +configuration (i.e. not on the command line)

      +
    • +
    • +

      core-service=management – the server’s core management services

      +
    • +
    • +

      core-service=service-container – resource for the JBoss MSC +ServiceContainer that’s at the heart of the AS

      +
    • +
    • +

      subsystem – the subsystems installed on the server. The bulk of the +management model will be children of type subsystem

      +
    • +
    • +

      interface – interface configurations

      +
    • +
    • +

      socket-binding-group – the central resource for the server’s socket +bindings

      +
      +
        +
      • +

        socket-binding – individual socket binding configurations

        +
      • +
      +
      +
    • +
    • +

      deployment – available deployments on the server

      +
    • +
    +
    +
  • +
+
+
+
+
Managed domain
+
+

In a managed domain, the structure of the managed resource tree spans +the entire domain, covering both the domain wide configuration (e.g. +what’s in domain.xml, the host specific configuration for each host +(e.g. what’s in host.xml, and the resources exposed by each running +application server. The Host Controller processes in a managed domain +provide access to all or part of the overall resource tree. How much is +available depends on whether the management client is interacting with +the Host Controller that is acting as the Domain Controller. If +the Host Controller is the Domain Controller, then the section of +the tree for each host is available. If the Host Controller is a secondary Host Controller +to a remote Domain Controller, then only the portion of the tree +associated with that host is available.

+
+
+
    +
  • +

    The root resource for the entire domain. The persistent configuration +associated with this resource and its children, except for those of type +host, is persisted in the domain.xml file on the Domain Controller.

    +
    +
      +
    • +

      extension – extensions available in the domain

      +
    • +
    • +

      path – paths available on across the domain

      +
    • +
    • +

      system-property – system properties set as part of the +configuration (i.e. not on the command line) and available across the +domain

      +
    • +
    • +

      profile – sets of subsystem configurations that can be assigned to +server groups

      +
      +
        +
      • +

        subsystem – configuration of subsystems that are part of the +profile

        +
      • +
      +
      +
    • +
    • +

      interface – interface configurations

      +
    • +
    • +

      socket-binding-group – sets of socket bindings configurations that +can be applied to server groups

      +
      +
        +
      • +

        socket-binding – individual socket binding configurations

        +
      • +
      +
      +
    • +
    • +

      deployment – deployments available for assignment to server groups

      +
    • +
    • +

      deployment-overlay — deployment-overlays content available to +overlay deployments in server groups

      +
    • +
    • +

      server-group – server group configurations

      +
    • +
    • +

      host – the individual Host Controllers. Each child of this type +represents the root resource for a particular host. The persistent +configuration associated with one of these resources or its children is +persisted in the host’s host.xml file.

      +
      +
        +
      • +

        path – paths available on each server on the host

        +
      • +
      • +

        system-property – system properties to set on each server on the +host

        +
      • +
      • +

        core-service=management – the Host Controller’s core management +services

        +
      • +
      • +

        interface – interface configurations that apply to the Host +Controller or servers on the host

        +
      • +
      • +

        jvm – JVM configurations that can be applied when launching +servers

        +
      • +
      • +

        server-config – configuration describing how the Host Controller +should launch a server; what server group configuration to use, and any +server-specific overrides of items specified in other resources

        +
      • +
      • +

        server – the root resource for a running server. Resources from +here and below are not directly persisted; the domain-wide and host +level resources contain the persistent configuration that drives a +server

        +
        +
          +
        • +

          extension – extensions installed in the server

          +
        • +
        • +

          path – paths available on the server

          +
        • +
        • +

          system-property – system properties set as part of the +configuration (i.e. not on the command line)

          +
        • +
        • +

          core-service=management – the server’s core management services

          +
        • +
        • +

          core-service=service-container – resource for the JBoss MSC +ServiceContainer that’s at the heart of the AS

          +
        • +
        • +

          subsystem – the subsystems installed on the server. The bulk of +the management model will be children of type subsystem

          +
        • +
        • +

          interface – interface configurations

          +
        • +
        • +

          socket-binding-group – the central resource for the server’s +socket bindings

          +
          +
            +
          • +

            socket-binding – individual socket binding configurations

            +
          • +
          +
          +
        • +
        • +

          deployment – available deployments on the server

          +
        • +
        • +

          deployment-overlay — available overlays on the server

          +
        • +
        +
        +
      • +
      +
      +
    • +
    +
    +
  • +
+
+
+
+
+
+
+
+

3. Management Clients

+
+
+

WildFly offers three different approaches to configure and manage +servers: a web interface, a command line client and a set of XML +configuration files. Regardless of the approach you choose, the +configuration is always synchronized across the different views and +finally persisted to the XML files.

+
+
+

3.1. Web Management Interface

+
+

The web interface is a GWT application that uses the HTTP management API +to configure a management domain or standalone server.

+
+
+

3.1.1. HTTP Management Endpoint

+
+

The HTTP API endpoint is the entry point for management clients that +rely on the HTTP protocol to integrate with the management layer. It +uses a JSON encoded protocol and a de-typed, RPC style API to describe +and execute management operations against a managed domain or standalone +server. It’s used by the web console, but offers integration +capabilities for a wide range of other clients too.

+
+
+

The HTTP API endpoint is co-located with either the domain controller or +a standalone server. By default, it runs on port 9990:

+
+
+
+
<management-interfaces>
+ [...]
+  <http-interface http-authentication-factory="management-http-authentication">
+    <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
+    <socket-binding http="management-http"/>
+  </http-interface>
+<management-interfaces>
+
+
+
+

~(See standalone/configuration/standalone.xml or +domain/configuration/host.xml)~

+
+
+

The HTTP API Endpoint serves two different contexts. One for executing +management operations and another one that allows you to access the web +interface:

+
+
+ +
+
+
+

3.1.2. Accessing the web console

+
+

The web console is served through the same port as the HTTP management +API. It can be accessed by pointing your browser to:

+
+ +
+

Default URL

+
+
+ + + + + +
+ + +By default the web interface can be accessed here: +http://localhost:9990/console. +
+
+
+
+

3.1.3. Custom HTTP Headers

+
+

For the responses returned from the HTTP management interface it is also possible to define custom constant HTTP headers that will be added to any response based on matching a configured prefix against the request path.

+
+
+

As an example it could be desirable to add a HTTP header X-Help which points users to the correct location to obtain assistance. The following management operation can be executed within the CLI to activate returning this header on all requests.

+
+
+
+
[standalone@localhost:9990 /]  /core-service=management/management-interface=http-interface: \
+    write-attribute(name=constant-headers, value=[{path="/", \
+    headers=[{name="X-Help", value="wildfly.org"}]}])
+
+
+
+

The responses to all requests to the HTTP management interface will now include the header X-Help with the value wildfly.org.

+
+
+

The resulting configuration will look like: -

+
+
+
+
<management-interfaces>
+  <http-interface http-authentication-factory="management-http-authentication">
+    <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
+        <socket-binding http="management-http"/>
+        <constant-headers>
+            <header-mapping path="/">
+                <header name="X-Help" value="wildfly.org"/>
+            </header-mapping>
+        </constant-headers>
+    </http-interface>
+</management-interfaces>
+
+
+
+

The example here has illustrated adding a single header for all requests matching the path prefix / i.e. every request. More advanced mappings can be defined by specifying a mapping for a more specific path prefix such as /management.

+
+
+

If a request matches multiple mappings such as a request to /management where mappings for / and /management have been specified the headers from all of the mappings will be applied to the corresponding request.

+
+
+

Within a single mapping it is also possible to define multiple headers which should be set on the corresponding response.

+
+
+

As the constant-headers attribute is set verification will be performed to verify that the HTTP headers specified are only making use of allowed characters as specified in the HTTP specification RFCs.

+
+
+

Additionally as they have special handling within the management interface overriding the following headers is disallowed and attempts to set these will result in an error being reported.

+
+
+
    +
  • +

    Connection

    +
  • +
  • +

    Content-Length

    +
  • +
  • +

    Content-Type

    +
  • +
  • +

    Date

    +
  • +
  • +

    Transfer-Encoding

    +
  • +
+
+
+

The configured headers are set at the very end of processing the request immediately before the response is returned to the client, this will mean any of the configured headers will override the same headers set by the corresponding endpoint.

+
+
+
+
+

3.2. Command Line Interface

+
+

The Command Line Interface (CLI) is a management tool for a managed +domain or standalone server. It allows a user to connect to the domain +controller or a standalone server and execute management operations +available through the de-typed management model.

+
+
+

3.2.1. Running the CLI

+
+

Depending on the operating system, the CLI is launched using +jboss-cli.sh or jboss-cli.bat located in the WildFly bin +directory. For further information on the default directory structure, +please consult the " Getting Started +Guide".

+
+
+

The first thing to do after the CLI has started is to connect to a +managed WildFly instance. This is done using the command connect, e.g.

+
+
+
+
./bin/jboss-cli.sh
+You are disconnected at the moment. Type 'connect' to connect to the server
+or 'help' for the list of supported commands.
+[disconnected /]
+ 
+[disconnected /] connect
+[domain@localhost:9990 /]
+ 
+[domain@localhost:9990 /] quit
+Closed connection to localhost:9990
+
+
+
+

localhost:9990 is the default host and port combination for the +WildFly CLI client.

+
+
+

The host and the port of the server can be provided as an optional +parameter, if the server is not listening on localhost:9990.

+
+
+
+
./bin/jboss-cli.sh
+You are disconnected at the moment. Type 'connect' to connect to the server
+[disconnected /] connect 192.168.0.10:9990
+Connected to standalone controller at 192.168.0.1:9990
+
+
+
+

The :9990 is not required as the CLI will use port 9990 by default. The +port needs to be provided if the server is listening on some other port.

+
+
+

To terminate the session type quit.

+
+
+ + + + + +
+ + +The jboss-cli script accepts a --connect parameter: ./jboss-cli.sh +--connect +
+
+
+

The --controller parameter can be used to specify the host and port of +the server: ./jboss-cli.sh --connect --controller=192.168.0.1:9990

+
+
+

Help is also available:

+
+
+

In order to list the set of commands that are currently available in the current context +use the option --commands (NB: the following examples are not displaying an +exhaustive set of CLI commands, more and/or different commands could be available +in your running CLI instance):

+
+
+
+
[domain@localhost:9990 /] help --commands
+Commands available in the current context:
+batch               connection-factory  deployment-overlay  if                  patch               reload              try
+cd                  connection-info     echo                jdbc-driver-info    pwd                 rollout-plan        undeploy
+clear               data-source         echo-dmr            jms-queue           quit                run-batch           unset
+command             deploy              help                jms-topic           read-attribute      set                 version
+connect             deployment-info     history             ls                  read-operation      shutdown            xa-data-source
+To read a description of a specific command execute 'help <command name>'.
+
+
+
+

The help command can print help for any command or operation. For operations, +the operation description is formatted as a command help (synopsis, description and +options). Some commands (eg: patch) expose two levels of documentation. A high +level description for the command itself and a dedicated help content for each action (eg: apply). +The help documentation of each command makes it clear if this two levels are available or not.

+
+
+

Use Tab-completion to discover the set of commands and operations:

+
+
+
+
help <TAB>
+
+
+
+

The list of all commands (enabled or not) is displayed.

+
+
+

Examples

+
+
+
    +
  • +

    Display the help of the patch command:

    +
  • +
+
+
+
+
help patch
+
+
+
+
    +
  • +

    Display the help of the apply action of the patch command:

    +
  • +
+
+
+
+
help patch apply
+
+
+
+
    +
  • +

    Display the description of the elytron key-store resource add operation +formatted as a command help content:

    +
  • +
+
+
+
+
help /subsystem=elytron/key-store=?:add
+
+
+
+
+

3.2.2. Keyboard navigation

+
+

In order to efficiently edit commands, the CLI allows you to navigate the words + and characters of a command using the keyboard.

+
+
+

NB: Part of this navigation is platform dependent.

+
+
+
Go left (back) one word
+
+
    +
  • +

    Alt+B : Linux, Solaris, HP-UX, Windows.

    +
  • +
  • +

    Ctrl+LeftArrow: Linux, Solaris, HP-UX.

    +
  • +
  • +

    Alt+LeftArrow: Mac OSX.

    +
  • +
+
+
+
+
Go right (forward) one word
+
+
    +
  • +

    Alt+F : Linux, Solaris, HP-UX, Windows.

    +
  • +
  • +

    Ctrl+RightArrow: Linux, Solaris, HP-UX.

    +
  • +
  • +

    Alt+RightArrow: Mac OSX.

    +
  • +
+
+
+
+
Go to the beginning of the line
+
+
    +
  • +

    Ctrl+A: All supported platforms.

    +
  • +
  • +

    HOME: Linux, Solaris, HP-UX, Windows

    +
  • +
+
+
+
+
Go to the end of the line
+
+
    +
  • +

    Ctrl+E: All supported platforms.

    +
  • +
  • +

    END: Linux, Solaris, HP-UX, Windows

    +
  • +
+
+
+
+
Go left (back) one character
+
+
    +
  • +

    Ctrl+B or LeftArrow: All supported platforms.

    +
  • +
+
+
+
+
Go right (forward) one character
+
+
    +
  • +

    Ctrl+F or RightArrow: All supported platforms.

    +
  • +
+
+
+
+
+

3.2.3. Non-interactive Mode

+
+

The CLI can also be run in non-interactive mode to support scripts and +other types of command line or batch processing. The --command and +--commands arguments can be used to pass a command or a list of commands +to execute. Additionally a --file argument is supported which enables +CLI commands to be provided from a text file.

+
+
+

For example the following command can be used to list all the current +deployments

+
+
+
+
$ ./bin/jboss-cli.sh --connect --commands=ls\ deployment
+sample.war
+business.jar
+
+
+
+

The output can be combined with other shell commands for further +processing, for example to find out what .war files are deployed:

+
+
+
+
$ ./bin/jboss-cli.sh --connect --commands=ls\ deployment | grep war
+sample.war
+
+
+
+

In order to match a command with its output, you can provide the option +--echo-command (or add the XML element <echo-command> to the CLI +configuration file) in order to make the CLI to include the prompt
+command + options in the output. With this option enabled, any executed +command will be added to the output.

+
+
+
+

3.2.4. Command timeout

+
+

By default CLI command and operation executions are not timely bounded. +It means that a command never ending its execution will make the CLI +process to be stuck and unresponsive. To protect the CLI from this +behavior, one can set a command execution timeout.

+
+
+
Command Timeout behavior
+
+

In interactive mode, when a timeout occurs, an error message is +displayed then the console prompt is made available to type new +commands. In non interactive mode (executing a script or a list of +commands), when a timeout occurs, an exception is thrown and the CLI +execution is stopped. In both modes (interactive and non interactive), +when a timeout occurs, the CLI will make a best effort to cancel the +associated server side activities.

+
+
+
+
Configuring the Command timeout
+
+
    +
  • +

    Add the XML element <command-timeout>\{num +seconds}</command-timeout> to the CLI XML configuration file.

    +
  • +
  • +

    Add the option - -command-timeout=\{num seconds} to the CLI command +line. This will override any value set in the XML configuration file.

    +
  • +
+
+
+
+
Managing the Command Timeout
+
+

Once the CLI is running, the timeout can be adjusted to cope with the +commands to execute. For example a batch command will need a longer +timeout than a non batch one. The command command-timeout allows to +get, set and reset the command timeout.

+
+
+
+
Retrieving the command timeout
+
+

The command command-timeout get displays the current timeout in +seconds. A timeout of 0 means no timeout.

+
+
+
+
[standalone@localhost:9990 /] command-timeout get
+0
+
+
+
+
+
Setting the command timeout
+
+

The command command-timeout set update the timeout value to a number +of seconds. If a timeout has been set via configuration (XML file or +option), it is overridden by the set action.

+
+
+
+
[standalone@localhost:9990 /] command-timeout set 10
+
+
+
+
+
Resetting the command timeout
+
+

The command command-timeout reset \{config|default} allows to set the +timeout to its configuration value (XML file or option) or default value +(0 second). If no configuration value is set, resetting to the +configuration value sets the timeout to its default value (0 seconds).

+
+
+
+
[standalone@localhost:9990 /] command-timeout reset config
+[standalone@localhost:9990 /] command-timeout reset default
+
+
+
+
+
+

3.2.5. Default Native Management Interface Security

+
+

The native interface shares the same security configuration as the http +interface, however we also support a local authentication mechanism +which means that the CLI can authenticate against the local WildFly +instance without prompting the user for a username and password. This +mechanism only works if the user running the CLI has read access to the +standalone/tmp/auth folder or domain/tmp/auth folder under the +respective WildFly installation - if the local mechanism fails then the +CLI will fallback to prompting for a username and password for a user +configured as in Default HTTP Interface Security.

+
+
+

Establishing a CLI connection to a remote server will require a username +and password by default.

+
+
+
+

3.2.6. Operation Requests

+
+

Operation requests allow for low level interaction with the management +model. They are different from the high level commands (i.e. +create-jms-queue) in that they allow you to read and modify the server +configuration as if you were editing the XML configuration files +directly. The configuration is represented as a tree of addressable +resources, where each node in the tree (aka resource) offers a set of +operations to execute.

+
+
+

An operation request basically consists of three parts: The address, +an operation name and an optional set of parameters.

+
+
+

The formal specification for an operation request is:

+
+
+
+
[/node-type=node-name (/node-type=node-name)*] : operation-name [( [parameter-name=parameter-value (,parameter-name=parameter-value)*] )]
+
+
+
+

For example:

+
+
+
+
/subsystem=logging/root-logger=ROOT:change-root-log-level(level=WARN)
+
+
+
+

Tab Completion

+
+
+

Tab-completion is supported for all commands and options, i.e. +node-types and node-names, operation names and parameter names.

+
+
+

In operation Tab-completion, required parameters have a name terminated by the +'*' character. This helps identify which are the parameters that must be set in order to +construct a valid operation. Furthermore, Tab-completion does not propose +parameters that are alternatives of parameters already present in the operation.

+
+
+

For example:

+
+
+
+
/deployment=myapp:add(<TAB>
+!  content*  enabled  runtime-name
+
+
+
+

The parameter content is required and completion advertises it with a '*' character.

+
+
+
+
/deployment=myapp:add-content(content=[{<TAB>
+bytes*  hash*  input-stream-index*  target-path*  url*
+
+
+
+

bytes, hash, input-stream-index and url are required but also alternatives +(only one of them can be set). As soon as one of these parameter has been set, the +others are no longer proposed by completion.

+
+
+
+
/deployment=myapp:add-content(content=[{url=myurl,<TAB>
+/deployment=myapp:add-content(content=[{url=myurl,target-path
+
+
+
+

target-path argument is automatically inlined in the command.

+
+
+ + + + + +
+ + +We are also considering adding aliases that are less verbose for the user, and +will translate into the corresponding operation requests in the +background. +
+
+
+

Whitespaces between the separators in the operation request strings are +not significant.

+
+
+
Addressing resources
+
+

Operation requests might not always have the address part or the +parameters. E.g.

+
+
+
+
:read-resource
+
+
+
+

which will list all the node types for the current node.

+
+
+

To syntactically disambiguate between the commands and operations, +operations require one of the following prefixes:

+
+
+

To execute an operation against the current node, e.g.

+
+
+
+
cd subsystem=logging
+:read-resource(recursive="true")
+
+
+
+

To execute an operation against a child node of the current node, e.g.

+
+
+
+
cd subsystem=logging
+./root-logger=ROOT:change-root-log-level(level=WARN)
+
+
+
+

To execute an operation against the root node, e.g.

+
+
+
+
/:read-resource
+
+
+
+
+
Available Operation Types and Descriptions
+
+

The operation types can be distinguished between common operations that +exist on any node and specific operations that belong to a particular +configuration resource (i.e. subsystem). The common operations are:

+
+
+
    +
  • +

    add

    +
  • +
  • +

    read-attribute

    +
  • +
  • +

    read-children-names

    +
  • +
  • +

    read-children-resources

    +
  • +
  • +

    read-children-types

    +
  • +
  • +

    read-operation-description

    +
  • +
  • +

    read-operation-names

    +
  • +
  • +

    read-resource

    +
  • +
  • +

    read-resource-description

    +
  • +
  • +

    remove

    +
  • +
  • +

    validate-address

    +
  • +
  • +

    write-attribute

    +
  • +
+
+
+

For a list of specific operations (e.g. operations that relate to the +logging subsystem) you can always query the model itself. For example, +to read the operations supported by the logging subsystem resource on a +standalone server:

+
+
+
+
[[standalone@localhost:9990 /] /subsystem=logging:read-operation-names
+{
+   "outcome" => "success",
+   "result" => [
+       "add",
+       "change-root-log-level",
+       "read-attribute",
+       "read-children-names",
+       "read-children-resources",
+       "read-children-types",
+       "read-operation-description",
+       "read-operation-names",
+       "read-resource",
+       "read-resource-description",
+       "remove-root-logger",
+       "root-logger-assign-handler",
+       "root-logger-unassign-handler",
+       "set-root-logger",
+       "validate-address",
+       "write-attribute"
+   ]
+}
+
+
+
+

As you can see, the logging resource offers four additional operations, +namely root-logger-assign-handler, root-logger-unassign-handler, +set-root-logger and remove-root-logger.

+
+
+

Further documentation about a resource or operation can be retrieved +through the description:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=logging:read-operation-description(name=change-root-log-level)
+{
+   "outcome" => "success",
+   "result" => {
+       "operation-name" => "change-root-log-level",
+       "description" => "Change the root logger level.",
+       "request-properties" => {"level" => {
+           "type" => STRING,
+           "description" => "The log level specifying which message levels will be logged by this logger.
+                            Message levels lower than this value will be discarded.",
+           "required" => true
+       }}
+   }
+}
+
+
+
+

Full model

+
+
+ + + + + +
+ + +To see the full model enter :read-resource(recursive=true). +
+
+
+
+
+

3.2.7. Command History

+
+

Command (and operation request) history is enabled by default. The +history is kept both in-memory and in a file on the disk, i.e. it is +preserved between command line sessions. The history file name is +.jboss-cli-history and is automatically created in the user’s home +directory. When the command line interface is launched this file is read +and the in-memory history is initialized with its content.

+
+
+ + + + + +
+ + +While in the command line session, you can use the arrow keys to go back +and forth in the history of commands and operations. +
+
+
+

To manipulate the history you can use the history command. If executed +without any arguments, it will print all the recorded commands and +operations (up to the configured maximum, which defaults to 500) from +the in-memory history.

+
+
+

history supports three optional arguments:

+
+
+
    +
  • +

    disable - will disable history expansion (but will not clear the +previously recorded history);

    +
  • +
  • +

    enabled - will re-enable history expansion (starting from the last +recorded command before the history expansion was disabled);

    +
  • +
  • +

    clear - will clear the in-memory history (but not the file one).

    +
  • +
+
+
+
+

3.2.8. JSON and DMR output

+
+

By default the CLI prints operation results using the DMR textual syntax. There are +two ways to make the CLI to display JSON:

+
+
+
    +
  • +

    --output-json option when launching the CLI.

    +
  • +
  • +

    <output-json> XML element added to jboss-cli.xml configuration file.

    +
  • +
+
+
+
+

3.2.9. Color output

+
+

The CLI outputs results of commands and the prompt in color. To disable this, there are two possible ways to disable it:

+
+
+
    +
  • +

    --no-color-output will disable color output;

    +
  • +
  • +

    Change <enabled> to false in jboss-cli.xml.

    +
  • +
+
+
+

The <color-output> block is used to configure the colors of the six basic elements that do support it

+
+
+
    +
  • +

    Output messages: error, warning and success;

    +
  • +
  • +

    Required configuration options when using the auto-complete functionality;

    +
  • +
  • +

    The color of the default prompt;

    +
  • +
  • +

    The color of the prompt when using batch and any of the workflow commands, if, for and try.

    +
  • +
+
+
+
+
<color-output>
+    <enabled>true</enabled>
+    <error-color>red</error-color>
+    <warn-color>yellow</warn-color>
+    <success-color>default</success-color>
+    <required-color>magenta</required-color>
+    <workflow-color>green</workflow-color>
+    <prompt-color>blue</prompt-color>
+</color-output>
+
+
+
+

There are eight available colors:

+
+ ++++ + + + + + + + + + + + + + + + + + + +

Black

Magenta

Blue

Red

Cyan

White

Green

Yellow

+
+

There is also the possibility of using the default color, which is the terminal’s configured foreground color.

+
+
+
+

3.2.10. Paging and searching output

+
+

In interactive mode, when the content to display is longer than the terminal + height, the content is paged. You can navigate the content by using the following + keys and mouse events:

+
+
+
    +
  • +

    space or PAGE_DOWN: scroll the content one page down.

    +
  • +
  • +

    '\' or PAGE_UP: scroll the content one page up.

    +
  • +
  • +

    ';' or up arrow or mouse wheel up: scroll the content one line up.

    +
  • +
  • +

    ENTER or down arrow or mouse wheel down: scroll the content one line down.

    +
  • +
  • +

    HOME or 'g': scroll to the top of the content. NB: HOME is only supported +for keyboards containing this key.

    +
  • +
  • +

    END or 'G': scroll to the bottom of the content. NB: END is only supported +for keyboards containing this key.

    +
  • +
  • +

    'q' or 'Q' or ESC: exit the paging.

    +
  • +
+
+
+

NB: When the end of the content is reached (using ENTER, space, …​) the paging + is automatically exited.

+
+
+

It is possible to search for text when the content is paged. Search is operated + with the following keys:

+
+
+
    +
  • +

    '/' to display prompt allowing to type some text. Type return to launch the search.
    +You can use up/down arrows to retrieve previously typed text. NB: search history + is not persisted when CLI process exits.

    +
  • +
  • +

    'n' to jump to the next match if any. If no search text has been typed, then the +last entry from the search history is used.

    +
  • +
  • +

    'N' to jump to the previous match if any. If no search text has been typed, +then the last entry from the search history is used.

    +
  • +
+
+
+

There are two possible ways to disable the output paging and write the whole output of the commands at once:

+
+
+
    +
  • +

    --no-output-paging command line parameter will disable the output paging;

    +
  • +
  • +

    Add <output-paging>false<output-paging> in jboss-cli.xml.

    +
  • +
+
+
+ + + + + +
+ + +On Windows, searching and navigating backward is only supported starting with Windows 10 and Windows Server 2016. +
+
+
+ + + + + +
+ + +If the CLI process is sent the signal KILL(9) while it is paging, the terminal will stay + in alternate mode. This makes the terminal to behave in an unexpected manner (display and mouse events). + In order to restore the terminal state call: tput rmcup. +
+
+
+
+

3.2.11. Batch Processing

+
+

The batch mode allows one to group commands and operations and execute +them together as an atomic unit. If at least one of the commands or +operations fails, all the other successfully executed commands and +operations in the batch are rolled back.

+
+
+

Not all of the commands are allowed in the batch. For example, commands +like cd, ls, help, etc. are not allowed in the batch since they +don’t translate into operation requests. Only the commands that +translate into operation requests are allowed in the batch. The batch, +actually, is executed as a composite operation request.

+
+
+

The batch mode is entered by executing command batch.

+
+
+
+
[standalone@localhost:9990 /] batch
+[standalone@localhost:9990 / #] /subsystem=datasources/data-source="java\:\/H2DS":enable
+[standalone@localhost:9990 / #] /subsystem=messaging-activemq/server=default/jms-queue=newQueue:add
+
+
+
+

You can execute a batch using the run-batch command:

+
+
+
+
[standalone@localhost:9990 / #] run-batch
+The batch executed successfully.
+
+
+
+

Exit the batch edit mode without losing your changes:

+
+
+
+
[standalone@localhost:9990 / #] holdback-batch
+[standalone@localhost:9990 /]
+
+
+
+

Then activate it later on again:

+
+
+
+
[standalone@localhost:9990 /] batch
+Re-activated batch
+#1 /subsystem=datasources/data-source=java:/H2DS:\/H2DS:enable
+
+
+
+

There are several other notable batch commands available as well (tab +complete to see the list):

+
+
+
    +
  • +

    clear-batch

    +
  • +
  • +

    edit-batch-line (e.g. edit-batch line 3 create-jms-topic +name=mytopic)

    +
  • +
  • +

    remove-batch-line (e.g. remove-batch-line 3)

    +
  • +
  • +

    move-batch-line (e.g. move-batch-line 3 1)

    +
  • +
  • +

    discard-batch

    +
  • +
+
+
+
+

3.2.12. Operators

+
+

CLI has some operators that are similar to shell operators:

+
+
+
    +
  • +

    > To redirect the output of a command/operation to a file:

    +
  • +
+
+
+
+
:read-resource > my-file.txt
+
+
+
+
    +
  • +

    >> To redirect the output of a command/operation and append it at the end of a file:

    +
  • +
+
+
+
+
:read-resource >> my-file.txt
+
+
+
+
    +
  • +

    | To redirect the output of a command/operation to the grep command:

    +
  • +
+
+
+
+
:read-resource | grep undefined
+
+
+
+
+
+

3.3. Default HTTP Interface Security

+
+

WildFly is distributed secured by default. The default security +mechanism is username / password based making use of HTTP Digest for the +authentication process.

+
+
+

The reason for securing the server by default is so that if the +management interfaces are accidentally exposed on a public IP address +authentication is required to connect - for this reason there is no +default user in the distribution.

+
+
+

The user are stored in a properties file called mgmt-users.properties +under standalone/configuration and domain/configuration depending on the +running mode of the server, these files contain the users username along +with a pre-prepared hash of the username along with the name of the +realm and the users password.

+
+
+ + + + + +
+ + +Although the properties files do not contain the plain text passwords +they should still be guarded as the pre-prepared hashes could be used to +gain access to any server with the same realm if the same user has used +the same password. +
+
+
+

To manipulate the files and add users we provide a utility add-user.sh +and add-user.bat to add the users and generate the hashes, to add a user +you should execute the script and follow the guided process. +add-user.png
+The full details of the add-user utility are described later but for the +purpose of accessing the management interface you need to enter the +following values: -

+
+
+
    +
  • +

    Type of user - This will be a 'Management User' to selection option a.

    +
  • +
  • +

    Realm - This MUST match the realm name used in the configuration so +unless you have changed the configuration to use a different realm name +leave this set as 'ManagementRealm'.

    +
  • +
  • +

    Username - The username of the user you are adding.

    +
  • +
  • +

    Password - The users password.

    +
  • +
+
+
+

Provided the validation passes you will then be asked to confirm you +want to add the user and the properties files will be updated.

+
+
+

For the final question, as this is a user that is going to be accessing +the admin console just answer 'n' - this option will be described later +for adding secondary host controllers that authenticate against a +Domain Controller but that is a later topic.

+
+
+

After a new user has been added the server should be restarted or the +load operation should be executed on the ManagementRealm or +ApplicationRealm resource in the elytron subsystem as appropriate.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=elytron/properties-realm=ManagementRealm:load
+{"outcome" => "success"}
+
+
+
+
+

3.4. Default Native Interface Security

+
+

The native interface shares the same security configuration as the http +interface, however we also support a local authentication mechanism +which means that the CLI can authenticate against the local WildFly +instance without prompting the user for a username and password. This +mechanism only works if the user running the CLI has read access to the +standalone/tmp/auth folder or domain/tmp/auth folder under the +respective WildFly installation - if the local mechanism fails then the +CLI will fallback to prompting for a username and password for a user +configured as in Default HTTP Interface Security.

+
+
+

Establishing a CLI connection to a remote server will require a username +and password by default.

+
+
+
+

3.5. Command Line Interface

+
+

The Command Line Interface (CLI) is a management tool for a managed +domain or standalone server. It allows a user to connect to the domain +controller or a standalone server and execute management operations +available through the de-typed management model.

+
+
+

Details on how to use the CLI can be found in the +Command Line Interface page.

+
+
+
+

3.6. Configuration Files

+
+

WildFly stores its configuration in centralized XML configuration files, +one per server for standalone servers and, for managed domains, one per +host with an additional domain wide policy controlled by the Domain Controller. +These files are meant to be human-readable and human editable.

+
+
+ + + + + +
+ + +The XML configuration files act as a central, authoritative source of +configuration. Any configuration changes made via the web interface or +the CLI are persisted back to the XML configuration files. If a domain +or standalone server is offline, the XML configuration files can be hand +edited as well, and any changes will be picked up when the domain or +standalone server is next started. However, users are encouraged to use +the web interface or the CLI in preference to making offline edits to +the configuration files. External changes made to the configuration +files while processes are running will not be detected, and may be +overwritten. +
+
+
+

3.6.1. Standalone Server Configuration File

+
+

The XML configuration for a standalone server can be found in the +standalone/configuration directory. The default configuration file is +standalone/configuration/standalone.xml.

+
+
+

The standalone/configuration directory includes a number of other +standard configuration files, e.g. standalone-full.xml, +standalone-ha.xml and standalone-full-ha.xml each of which is +similar to the default standalone.xml file but includes additional +subsystems not present in the default configuration. If you prefer to +use one of these files as your server configuration, you can specify it +with the [line-through]*c* or -server-config command line argument:

+
+
+
    +
  • +

    bin/standalone.sh -c=standalone-full.xml

    +
  • +
  • +

    bin/standalone.sh --server-config=standalone-ha.xml

    +
  • +
+
+
+
+

3.6.2. Managed Domain Configuration Files

+
+

In a managed domain, the XML files are found in the +domain/configuration directory. There are two types of configuration +files – one per host, and then a single domain-wide file managed by the +primary Host Controller, aka the Domain Controller. (For more on the types of +processes in a managed domain, see Operating +Modes.)

+
+
+
Host Specific Configuration – host.xml
+
+

When you start a managed domain process, a Host Controller instance is +launched, and it parses its own configuration file to determine its own +configuration, how it should integrate with the rest of the domain, any +host-specific values for settings in the domain wide configuration (e.g. +IP addresses) and what servers it should launch. This information is +contained in the host-specific configuration file, the default version +of which is domain/configuration/host.xml.

+
+
+

Each host will have its own variant host.xml, with settings +appropriate for its role in the domain. WildFly ships with three +standard variants:

+
+ ++++ + + + + + + + + + + + + + + + + +
host-primary.xmlA configuration that specifies the Host Controller +should become the primary Host Controller, aka the Domain Controller. +No servers will be started by this Host Controller, which is a recommended +setup for a production Domain Controller.

host-secondary.xml

A configuration that specifies the Host Controller +should not become the primary Host Controller and instead should register with a remote +primary Host Controller and be controlled by it. This configuration launches servers, +although a user will likely wish to modify how many servers are launched +and what server groups they belong to.

host.xml

The default host configuration, tailored for an easy out of +the box experience experimenting with a managed domain. This +configuration specifies the Host Controller should become the primary Host Controller, +aka the Domain Controller, but it also launches a couple of servers.

+
+

Which host-specific configuration should be used can be controlled via +the _ --host-config_ command line argument:

+
+
+
+
$ bin/domain.sh --host-config=host-primary.xml
+
+
+
+
+
Domain Wide Configuration – domain.xml
+
+

Once a Host Controller has processed its host-specific configuration, it +knows whether it is configured to act as the Domain Controller. +If it is, it must parse the domain wide configuration file, by default +located at domain/configuration/domain.xml. This file contains the +bulk of the settings that should be applied to the servers in the domain +when they are launched – among other things, what subsystems they should +run with what settings, what sockets should be used, and what +deployments should be deployed.

+
+
+

Which domain-wide configuration should be used can be controlled via the +_ --domain-config_ command line argument:

+
+
+
+
$ bin/domain.sh --domain-config=domain-production.xml
+
+
+
+

That argument is only relevant for hosts configured to act as the +Domain Controller.

+
+
+

A secondary Host Controller does not usually parse the domain wide +configuration file. A secondary Host Controller gets the domain wide configuration from the +remote Domain Controller when it registers with it. A secondary Host Controller also +will not persist changes to a domain.xml file if one is present on the +filesystem. For that reason it is recommended that no domain.xml be +kept on the filesystem of hosts that will only run as secondary Host Controllers.

+
+
+

A secondary Host Controller can be configured to keep a locally persisted copy of the domain +wide configuration and then use it on boot (in case the Domain Controller is not +available.) See --backup and --cached-dc under +Command line parameters.

+
+
+
+
+
+
+
+

4. Interfaces and ports

+
+
+

4.1. Interface declarations

+
+

WildFly uses named interface references throughout the configuration. A +network interface is declared by specifying a logical name and a +selection criteria for the physical interface:

+
+
+
+
[standalone@localhost:9990 /] :read-children-names(child-type=interface)
+{
+   "outcome" => "success",
+   "result" => [
+       "management",
+       "public"
+   ]
+}
+
+
+
+

This means the server in question declares two interfaces: One is +referred to as " management"; the other one " public". The " +management" interface is used for all components and services that are +required by the management layer (i.e. the HTTP Management Endpoint). +The " public" interface binding is used for any application related +network communication (i.e. Web, Messaging, etc). There is nothing +special about these names; interfaces can be declared with any name. +Other sections of the configuration can then reference those interfaces +by their logical name, rather than having to include the full details of +the interface (which, on servers in a management domain, may vary on +different machines).

+
+
+

The domain.xml, host.xml and standalone.xml configuration files +all include a section where interfaces can be declared. If we take a +look at the XML declaration it reveals the selection criteria. The +criteria is one of two types: either a single element indicating that +the interface should be bound to a wildcard address, or a set of one or +more characteristics that an interface or address must have in order to +be a valid match. The selection criteria in this example are specific IP +addresses for each interface:

+
+
+
+
<interfaces>
+  <interface name="management">
+   <inet-address value="127.0.0.1"/>
+  </interface>
+  <interface name="public">
+   <inet-address value="127.0.0.1"/>
+  </interface>
+</interfaces>
+
+
+
+

Some other examples:

+
+
+
+
<interface name="global">
+   <!-- Use the wildcard address -->
+   <any-address/>
+</interface>
+ 
+<interface name="external">
+   <nic name="eth0"/>
+</interface>
+ 
+<interface name="default">
+   <!-- Match any interface/address on the right subnet if it's
+        up, supports multicast and isn't point-to-point -->
+   <subnet-match value="192.168.0.0/16"/>
+   <up/>
+   <multicast/>
+   <not>
+      <point-to-point/>
+   </not>
+</interface>
+
+
+
+ + + + + +
+ + +An interface configuration element is used to provide a single InetAddress to parts +of the server that reference that interface. If the selection criteria specified for +the interface element results in more than one address meeting the criteria, then a +warning will be logged and one just one address will be selected and used. Preference +will be given to network interfaces that are up, are non-loopback and are not +point-to-point. +
+
+
+

4.1.1. The -b command line argument

+
+

WildFly supports using the -b command line argument to specify the +address to assign to interfaces. See +Controlling the Bind Address with -b for further details.

+
+
+
+
+

4.2. Socket Binding Groups

+
+

The socket configuration in WildFly works similarly to the interfaces +declarations. Sockets are declared using a logical name, by which they +will be referenced throughout the configuration. Socket declarations are +grouped under a certain name. This allows you to easily reference a +particular socket binding group when configuring server groups in a +managed domain. Socket binding groups reference an interface by its +logical name:

+
+
+
+
<socket-binding-group name="standard-sockets" default-interface="public">
+  <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/><socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/><socket-binding name="ajp" port="${jboss.ajp.port:8009}"/><socket-binding name="http" port="${jboss.http.port:8080}"/><socket-binding name="https" port="${jboss.https.port:8443}"/><socket-binding name="txn-recovery-environment" port="4712"/><socket-binding name="txn-status-manager" port="4713"/>
+</socket-binding-group>
+
+
+
+

A socket binding includes the following information:

+
+
+
    +
  • +

    name — logical name of the socket configuration that should be used +elsewhere in the configuration

    +
  • +
  • +

    port — base port to which a socket based on this configuration should +be bound. (Note that servers can be configured to override this base +value by applying an increment or decrement to all port values.)

    +
  • +
  • +

    interface (optional) — logical name (see "Interfaces declarations" +above) of the interface to which a socket based on this configuration +should be bound. If not defined, the value of the "default-interface" +attribute from the enclosing socket binding group will be used.

    +
  • +
  • +

    multicast-address (optional) — if the socket will be used for +multicast, the multicast address to use

    +
  • +
  • +

    multicast-port (optional) — if the socket will be used for multicast, +the multicast port to use

    +
  • +
  • +

    fixed-port (optional, defaults to false) — if true, declares that the +value of port should always be used for the socket and should not be +overridden by applying an increment or decrement

    +
  • +
+
+
+
+

4.3. IPv4 versus IPv6

+
+

WildFly supports the use of both IPv4 and IPv6 addresses. By default, +WildFly is configured for use in an IPv4 network and so if you are +running in an IPv4 network, no changes are required. If you need to run +in an IPv6 network, the changes required are minimal and involve +changing the JVM stack and address preferences, and adjusting any +interface IP address values specified in the configuration +(standalone.xml or domain.xml).

+
+
+

4.3.1. Stack and address preference

+
+

The system properties java.net.preferIPv4Stack and +java.net.preferIPv6Addresses are used to configure the JVM for use with +IPv4 or IPv6 addresses. With WildFly, in order to run using IPv4 +addresses, you need to specify java.net.preferIPv4Stack=true; in order +to run with IPv6 addresses, you need to specify +java.net.preferIPv4Stack=false (the JVM default) and +java.net.preferIPv6Addresses=true. The latter ensures that any hostname +to IP address conversions always return IPv6 address variants.

+
+
+

These system properties are conveniently set by the JAVA_OPTS +environment variable, defined in the standalone.conf (or domain.conf) +file. For example, to change the IP stack preference from its default of +IPv4 to IPv6, edit the standalone.conf (or domain.conf) file and change +its default IPv4 setting:

+
+
+
+
if [ "x$JAVA_OPTS" = "x" ]; then
+   JAVA_OPTS=" ... -Djava.net.preferIPv4Stack=true ..."
+...
+
+
+
+

to an IPv6 suitable setting:

+
+
+
+
if [ "x$JAVA_OPTS" = "x" ]; then
+   JAVA_OPTS=" ... -Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true ..."
+...
+
+
+
+
+

4.3.2. IP address literals

+
+

To change the IP address literals referenced in standalone.xml (or +domain.xml), first visit the interface declarations and ensure that +valid IPv6 addresses are being used as interface values. For example, to +change the default configuration in which the loopback interface is used +as the primary interface, change from the IPv4 loopback address:

+
+
+
+
<interfaces>
+  <interface name="management">
+    <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
+  </interface>
+  <interface name="public">
+    <inet-address value="${jboss.bind.address:127.0.0.1}"/>
+  </interface>
+</interfaces>
+
+
+
+

to the IPv6 loopback address:

+
+
+
+
<interfaces>
+  <interface name="management">
+    <inet-address value="${jboss.bind.address.management:[::1]}"/>
+  </interface>
+  <interface name="public">
+    <inet-address value="${jboss.bind.address:[::1]}"/>
+  </interface>
+</interfaces>
+
+
+
+

Note that when embedding IPv6 address literals in the substitution +expression, square brackets surrounding the IP address literal are used +to avoid ambiguity. This follows the convention for the use of IPv6 +literals in URLs.

+
+
+

Over and above making such changes for the interface definitions, you +should also check the rest of your configuration file and adjust IP +address literals from IPv4 to IPv6 as required.

+
+
+
+
+
+
+

5. Administrative security

+
+
+

5.1. add-user utility

+
+

For use with the default configuration we supply a utility add-user +which can be used to manage the properties files for the default realms +used to store the users and their roles.

+
+
+

The add-user utility can be used to manage both the users in the +ManagementRealm and the users in the ApplicationRealm, changes made +apply to the properties file used both for domain mode and standalone +mode.

+
+
+ + + + + +
+ + +After you have installed your application server and decided if you are +going to run in standalone mode or domain mode you can delete the parent +folder for the mode you are not using, the add-user utility will then +only be managing the properties file for the mode in use. +
+
+
+

The add-user utility is a command line utility however it can be run in +both interactive and non-interactive mode. Depending on your platform +the script to run the add-user utility is either add-user.sh or +add-user.bat which can be found in \{ jboss.home}/bin.

+
+
+

This guide now contains a couple of examples of this utility in use to +accomplish the most common tasks.

+
+
+

5.1.1. Adding a User

+
+

Adding users to the properties files is the primary purpose of this +utility. Usernames can only contain the following characters in any +number and in any order:

+
+
+
    +
  • +

    Alphanumeric characters (a-z, A-Z, 0-9)

    +
  • +
  • +

    Dashes (-), periods (.), commas (,), at (@)

    +
  • +
  • +

    Escaped backslash ( \\ )

    +
  • +
  • +

    Escaped equals (\=)

    +
  • +
+
+
+
A Management User
+
+ + + + + +
+ + +The default name of the realm for management users is ManagementRealm, +when the utility prompts for the realm name just accept the default +unless you have switched to a different realm. +
+
+
+
Interactive Mode
+
+

add-mgmt-user-interactive.png

+
+
+

Here we have added a new Management User called adminUser, as you can +see some of the questions offer default responses so you can just press +enter without repeating the default value.

+
+
+

For now just answer n or no to the final question, adding users to +be used by processes is described in more detail in the domain +management chapter.

+
+
+
+
Non-Interactive Mode
+
+

To add a user in non-interactive mode the command +./add-user.sh {username} {password} can be used.

+
+
+

add-mgmt-user-non-interactive.png

+
+
+ + + + + +
+ + +If you add users using this approach there is a risk that any other user +that can view the list of running process may see the arguments +including the password of the user being added, there is also the risk +that the username / password combination will be cached in the history +file of the shell you are currently using. +
+
+
+
+
+
An Application User
+
+

When adding application users in addition to adding the user with their +pre-hashed password it is also now possible to define the roles of the +user.

+
+
+
Interactive Mode
+
+

add-app-user-interactive.png

+
+
+

Here a new user called appUser has been added, in this case a comma +separated list of roles has also been specified.

+
+
+

As with adding a management user just answer n or no to the final +question until you know you are adding a user that will be establishing +a connection from one server to another.

+
+
+
+
Non-Interactive Mode
+
+

To add an application user non-interactively use the command +./add-user.sh -a {username} {password}.

+
+
+

add-app-user-non-interactive.png

+
+
+ + + + + +
+ + +Non-interactive mode does not support defining a list of users, to +associate a user with a set of roles you will need to manually edit the +application-roles.properties file by hand. +
+
+
+
+
+
+

5.1.2. Updating a User

+
+

Within the add-user utility it is also possible to update existing +users, in interactive mode you will be prompted to confirm if this is +your intention.

+
+
+
A Management User
+ +
+
Non-Interactive Mode
+
+

In non-interactive mode if a user already exists the update is automatic +with no confirmation prompt.

+
+
+
+
+
An Application User
+
+
Interactive Mode
+
+

update-app-user-interactive.png

+
+
+ + + + + +
+ + +On updating a user with roles you will need to re-enter the list of +roles assigned to the user. +
+
+
+
+
Non-Interactive Mode
+
+

In non-interactive mode if a user already exists the update is automatic +with no confirmation prompt.

+
+
+
+
+
+

5.1.3. Community Contributions

+
+

There are still a few features to add to the add-user utility such as +removing users or adding application users with roles in non-interactive +mode, if you are interested in contributing to WildFly development the +add-user utility is a good place to start as it is a stand alone +utility, however it is a part of the AS build so you can become familiar +with the AS development processes without needing to delve straight into +the internals of the application server.

+
+
+
+
+

5.2. Authorizing management actions with Role Based Access Control

+
+

WildFly introduces a Role Based Access Control scheme that allows +different administrative users to have different sets of permissions to +read and update parts of the management tree. This replaces the simple +permission scheme used in JBoss AS 7, where anyone who could +successfully authenticate to the management security realm would have +all permissions.

+
+
+

5.2.1. Access Control Providers

+
+

WildFly ships with two access control "providers", the "simple" +provider, and the "rbac" provider. The "simple" provider is the default, +and provides a permission scheme equivalent to the JBoss AS 7 behavior +where any authenticated administrator has all permissions. The "rbac" +provider gives the finer grained permission scheme that is the focus of +this section.

+
+
+

The access control configuration is included in the management section +of a standalone server’s standalone.xml, or in a new "management" +section in a managed domain’s domain.xml. The access control policy is +centrally configured in a managed domain.

+
+
+
+
<management>
+    . . .
+    <access-control provider="simple">
+        <role-mapping>
+            <role name="SuperUser">
+                <include>
+                    <user name="$local"/>
+                </include>
+            </role>
+        </role-mapping>
+    </access-control>
+</management>
+
+
+
+

As you can see, the provider is set to "simple" by default. With the +"simple" provider, the nested "role-mapping" section is not actually +relevant. It’s there to help ensure that if the provider attribute is +switched to "rbac" there will be at least one user mapped to a role that +can continue to administer the system. This default mapping assigns the +"$local" user name to the RBAC role that provides all permissions, the +"SuperUser" role. The "$local" user name is the name an administrator +will be assigned if he or she uses the CLI on the same system as the +WildFly instance and the "local" authentication scheme is enabled.

+
+
+
+

5.2.2. RBAC provider overview

+
+

The access control scheme implemented by the "rbac" provider is based on +seven standard roles. A role is a named set of permissions to perform +one of the actions: addressing (i.e. looking up) a management resource, +reading it, or modifying it. The different roles have constraints +applied to their permissions that are used to determine whether the +permission is granted.

+
+
+
RBAC roles
+
+

The seven standard roles are divided into two broad categories, based on +whether the role can deal with items that are considered to be "security +sensitive". Resources, attributes and operations that may affect +administrative security (e.g. security realm resources and attributes +that contain passwords) are "security sensitive".

+
+
+

Four roles are not given permissions for "security sensitive" items:

+
+
+
    +
  • +

    Monitor – a read-only role. Cannot modify any resource.

    +
  • +
  • +

    Operator – Monitor permissions, plus can modify runtime state, but +cannot modify anything that ends up in the persistent configuration. +Could, for example, restart a server.

    +
  • +
  • +

    Maintainer – Operator permissions, plus can modify the persistent +configuration.

    +
  • +
  • +

    Deployer – like a Maintainer, but with permission to modify persistent +configuration constrained to resources that are considered to be +"application resources". A deployment is an application resource. The +messaging server is not. Items like datasources and Jakarta Messaging destinations are +not considered to be application resources by default, but this is +configurable.

    +
  • +
+
+
+

Three roles are granted permissions for security sensitive items:

+
+
+
    +
  • +

    SuperUser – has all permissions. Equivalent to a JBoss AS 7 +administrator.

    +
  • +
  • +

    Administrator – has all permissions except cannot read or write +resources related to the administrative audit logging system.

    +
  • +
  • +

    Auditor – can read anything. Can only modify the resources related to +the administrative audit logging system.

    +
  • +
+
+
+

The Auditor and Administrator roles are meant for organizations that +want a separation of responsibilities between those who audit normal +administrative actions and those who perform them, with those who +perform most actions (Administrator role) not being able to read or +alter the auditing configuration.

+
+
+
+
Access control constraints
+
+

The following factors are used to determine whether a given role is +granted a permission:

+
+
+
    +
  • +

    What the requested action is (address, read, write)

    +
  • +
  • +

    Whether the resource, attribute or operation affects the persistent +configuration

    +
  • +
  • +

    Whether the resource, attribute or operation is related to the +administrative audit logging function

    +
  • +
  • +

    Whether the resource, attribute or operation is configured as security +sensitive

    +
  • +
  • +

    Whether an attribute or operation parameter value has a security vault +expression

    +
  • +
  • +

    Whether a resource is considered to be associated with applications, +as opposed to being part of a general container configuration

    +
  • +
+
+
+

The first three of these factors are non-configurable; the latter three +allow some customization. See " +Configuring constraints" +for details.

+
+
+
+
Addressing a resource
+
+

As mentioned above, permissions are granted to perform one of three +actions, addressing a resource, reading it, and modifying. The latter +two actions are fairly self-explanatory. But what is meant by +"addressing" a resource?

+
+
+

"Addressing" a resource refers to taking an action that allows the user +to determine whether a resource at a given address actually exists. For +example, the "read-children-names" operation lets a user determine valid +addresses. Trying to read a resource and getting a "Permission denied" +error also gives the user a clue that there actually is a resource at +the requested address.

+
+
+

Some resources may include sensitive information as part of their +address. For example, security realm resources include the realm name as +the last element in the address. That realm name is potentially security +sensitive; for example it is part of the data used when creating a hash +of a user password. Because some addresses may contain security +sensitive data, a user needs permission to even "address" a resource. If +a user attempts to address a resource and does not have permission, they +will not receive a "permission denied" type error. Rather, the system +will respond as if the resource does not even exist, e.g. excluding the +resource from the result of the "read-children-names" operation or +responding with a "No such resource" error instead of "Permission +denied" if the user is attempting to read or write the resource.

+
+
+

Another term for "addressing" a resource is "looking up" the resource.

+
+
+
+
+

5.2.3. Switching to the "rbac" provider

+
+

Use the CLI to switch the access-control provider.

+
+
+ + + + + +
+ + +Before changing the provider to "rbac", be sure your configuration has a +user who will be mapped to one of the RBAC roles, preferably with at +least one in the Administrator or SuperUser role. Otherwise your +installation will not be manageable except by shutting it down and +editing the xml configuration. If you have started with one of the +standard xml configurations shipped with WildFly, the "$local" user will +be mapped to the "SuperUser" role and the "local" authentication scheme will be +enabled. This will allow a user running the CLI on the same system as the +WildFly process to have full administrative permissions. Remote CLI users and +web-based admin console users will have no permissions. +
+
+
+

We recommend mapping at least one +user besides "$local" before switching the provider to "rbac". You can +do all of the configuration associated with the "rbac" provider even +when the provider is set to "simple"

+
+
+

The management resources related to access control are located in the +core-service=management/access=authorization portion of the management +resource tree. Update the provider attribute to change between the +"simple" and "rbac" providers. Any update requires a reload or restart +to take effect.

+
+
+
+
[standalone@localhost:9990 /] cd core-service=management/access=authorization
+[standalone@localhost:9990 access=authorization] :write-attribute(name=provider,value=rbac)
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+[standalone@localhost:9990 access=authorization] reload
+
+
+
+

In a managed domain, the access control configuration is part of the +domain wide configuration, so the resource address is the same as above, +but the CLI is connected to the Domain Controller:

+
+
+
+
[domain@localhost:9990 /] cd core-service=management/access=authorization
+[domain@localhost:9990 access=authorization] :write-attribute(name=provider,value=rbac)
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    },
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {
+            "outcome" => "success",
+            "response-headers" => {
+                "operation-requires-reload" => true,
+                "process-state" => "reload-required"
+            }
+        }},
+        "server-two" => {"response" => {
+            "outcome" => "success",
+            "response-headers" => {
+                "operation-requires-reload" => true,
+                "process-state" => "reload-required"
+            }
+        }}
+    }}}}
+}
+[domain@localhost:9990 access=authorization] reload --host=primary
+
+
+
+

As with a standalone server, a reload or restart is required for the +change to take effect. In this case, all hosts and servers in the domain +will need to be reloaded or restarted, starting with the Domain +Controller, so be sure to plan well before making this change.

+
+
+
+

5.2.4. Mapping users and groups to roles

+
+

Once the "rbac" access control provider is enabled, only users who are +mapped to one of the available roles will have any administrative +permissions at all. So, to make RBAC useful, a mapping between +individual users or groups of users and the available roles must be +performed.

+
+
+
Mapping individual users
+
+

The easiest way to map individual users to roles is to use the web-based +admin console.

+
+
+

Navigate to the "Administration" tab and the "Users" subtab. From there +individual user mappings can be added, removed, or edited.

+
+
+

usermapping.png

+
+
+

The CLI can also be used to map individuals users to roles.

+
+
+

First, if one does not exist, create the parent resource for all +mappings for a role. Here we create the resource for the Administrator +role.

+
+
+
+
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Administrator:add
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+

Once this is done, map a user to the role:

+
+
+
+
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Administrator/include=user-jsmith:add(name=jsmith,type=USER)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+

Now if user jsmith authenticates to any security domain associated with +the management interface they are using, he will be mapped to the +Administrator role.

+
+
+
+
User groups
+
+

A "group" is an arbitrary collection of users that may exist in the end +user environment. They can be named whatever the end user organization +wants and can contain whatever users the end user organization wants. +Some of the authentication store types supported by WildFly security +realms include the ability to access information about what groups a +user is a member of and associate this information with the Subject +produced when the user is authenticated. This is currently supported for +the following authentication store types:

+
+
+
    +
  • +

    properties file (via the <realm_name>-groups.properties file)

    +
  • +
  • +

    LDAP (via directory-server-specific configuration)

    +
  • +
+
+
+

Groups are convenient when it comes to associating a user with a role, +since entire groups can be associated with a role in a single mapping.

+
+
+
+
Mapping groups to roles
+
+

The easiest way to map groups to roles is to use the web-based admin +console.

+
+
+

Navigate to the "Administration" tab and the "Groups" subtab. From there +group mappings can be added, removed, or edited.

+
+
+

groupmapping.png

+
+
+

The CLI can also be used to map groups to roles. The only difference to +individual user mapping is the value of the type attribute should be +GROUP instead of USER.

+
+
+
+
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Administrator/include=group-SeniorAdmins:add(name=SeniorAdmins,type=GROUP)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+
+
Including all authenticated users in a role
+
+

It’s possible to specify that all authenticated users should be mapped +to a particular role. This could be used, for example, to ensure that +anyone who can authenticate can at least have Monitor privileges.

+
+
+ + + + + +
+ + +A user who can authenticate to the management security realm but who +does not map to a role will not be able to perform any administrative +functions, not even reads. +
+
+
+

In the web based admin console, navigate to the "Administration" tab, +"Roles" subtab, highlight the relevant role, click the "Edit" button and +click on the "Include All" checkbox:

+
+
+

includeall.png

+
+
+

The same change can be made using the CLI:

+
+
+
+
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Monitor:write-attribute(name=include-all,value=true)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+
+
Excluding users and groups
+
+

It is also possible to explicitly exclude certain users and groups from +a role. Exclusions take precedence over inclusions, including cases +where the include-all attribute is set to true for a role.

+
+
+

In the admin console, excludes are done in the same screens as includes. +In the add dialog, simply change the "Type" pulldown to "Exclude".

+
+
+

excludemapping.png

+
+
+

In the CLI, excludes are identical to includes, except the resource +address has exclude instead of include as the key for the last +address element:

+
+
+
+
[domain@localhost:9990 /] /core-service=management/access=authorization/role-mapping=Monitor/exclude=group-Temps:add(name=Temps,type=GROUP)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+
+
Users who map to multiple roles
+
+

It is possible that a given user will be mapped to more than one role. +When this occurs, by default the user will be granted the union of the +permissions of the two roles. This behavior can be changed on a global +basis to instead respond to the user request with an error if this +situation is detected:

+
+
+
+
[standalone@localhost:9990 /] cd core-service=management/access=authorization
+[standalone@localhost:9990 access=authorization] :write-attribute(name=permission-combination-policy,value=rejecting)
+{"outcome" => "success"}
+
+
+
+

Note that no reload is required; the change takes immediate effect.

+
+
+

To restore the default behavior, set the value to "permissive":

+
+
+
+
[standalone@localhost:9990 /] cd core-service=management/access=authorization
+[standalone@localhost:9990 access=authorization] :write-attribute(name=permission-combination-policy,value=permissive)
+{"outcome" => "success"}
+
+
+
+
+
+

5.2.5. Adding custom roles in a managed domain

+
+

A managed domain may involve a variety of servers running different +configurations and hosting different applications. In such an +environment, it is likely that there will be different teams of +administrators responsible for different parts of the domain. To allow +organizations to grant permissions to only parts of a domain, WildFly’s +RBAC scheme allows for the creation of custom "scoped roles". Scoped +roles are based on the seven standard roles, but with permissions +limited to a portion of the domain – either to a set of server groups or +to a set of hosts.

+
+
+
Server group scoped roles
+
+

The privileges for a server-group scoped role are constrained to +resources associated with one or more server groups. Server groups are +often associated with a particular application or set of applications; +organizations that have separate teams responsible for different +applications may find server-group scoped roles useful.

+
+
+

A server-group scoped role is equivalent to the default role upon which +it is based, but with privileges constrained to target resources in the +resource trees rooted in the server group resources. The server-group +scoped role can be configured to include privileges for the following +resources trees logically related to the server group:

+
+
+
    +
  • +

    Profile

    +
  • +
  • +

    Socket Binding Group

    +
  • +
  • +

    Deployment

    +
  • +
  • +

    Deployment override

    +
  • +
  • +

    Server group

    +
  • +
  • +

    Server config

    +
  • +
  • +

    Server

    +
  • +
+
+
+

Resources in the profile, socket binding group, server config and server +portions of the tree that are not logically related to a server group +associated with the server-group scoped role will not be addressable by +a user in that role. So, in a domain with server groups "a" and "b", a +user in a server-group scoped role that grants access to "a" will not be +able to address /server-group=b. The system will treat that resource as +non-existent for that user.

+
+
+

In addition to these privileges, users in a server-group scoped role +will have non-sensitive read privileges (equivalent to the Monitor role) +for resources other than those listed above.

+
+
+

The easiest way to create a server-group scoped role is to +use the admin console. +But you can also use the CLI to create a server-group scoped role.

+
+
+
+
[domain@localhost:9990 /] /core-service=management/access=authorization/server-group-scoped-role=MainGroupAdmins:add(base-role=Administrator,server-groups=[main-server-group])
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+

Once the role is created, users or groups can be mapped to it the same +as with the seven standard roles.

+
+
+
+
Host scoped roles
+
+

The privileges for a host-scoped role are constrained to resources +associated with one or more hosts. A user with a host-scoped role cannot +modify the domain wide configuration. Organizations may use host-scoped +roles to give administrators relatively broad administrative rights for +a host without granting such rights across the managed domain.

+
+
+

A host-scoped role is equivalent to the default role upon which it is +based, but with privileges constrained to target resources in the +resource trees rooted in the host resources for one or more specified +hosts.

+
+
+

In addition to these privileges, users in a host-scoped role will have +non-sensitive read privileges (equivalent to the Monitor role) for +domain wide resources (i.e. those not in the /host=* section of the +tree.)

+
+
+

Resources in the /host=* portion of the tree that are unrelated to the +hosts specified for the Host Scoped Role will not be visible to users in +that host-scoped role. So, in a domain with hosts "a" and "b", a user in +a host-scoped role that grants access to "a" will not be able to address +/host=b. The system will treat that resource as non-existent for that +user.

+
+
+

The easiest way to create a host-scoped role is to +use the admin console. +But you can also use the CLI to create a host scoped role.

+
+
+
+
[domain@localhost:9990 /] /core-service=management/access=authorization/host-scoped-role=DCOperators:add(base-role=Operator,hosts=[primary]}
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+

Once the role is created, users or groups can be mapped to it the same +as with the seven standard roles.

+
+
+
+
Using the admin console to create scoped roles
+
+

Both server-group and host scoped roles can be added, removed or edited +via the admin console. Select "Scoped Roles" from the "Administration" +tab, "Roles" subtab:

+
+
+

scopedroles.png

+
+
+

When adding a new scoped role, use the dialogue’s "Type" pull down to +choose between a host scoped role and a server-group scoped role. Then +place the names of the relevant hosts or server groups in the "Scope" +text are.

+
+
+

addscopedrole.png

+
+
+
+
+

5.2.6. Configuring constraints

+
+

The following factors are used to determine whether a given role is +granted a permission:

+
+
+
    +
  • +

    What the requested action is (address, read, write)

    +
  • +
  • +

    Whether the resource, attribute or operation affects the persistent +configuration

    +
  • +
  • +

    Whether the resource, attribute or operation is related to the +administrative audit logging function

    +
  • +
  • +

    Whether the resource, attribute or operation is configured as security +sensitive

    +
  • +
  • +

    Whether an attribute or operation parameter value has a security vault +expression or an encrypted expression.

    +
  • +
  • +

    Whether a resource is considered to be associated with applications, +as opposed to being part of a general container configuration

    +
  • +
+
+
+

The first three of these factors are non-configurable; the latter three +allow some customization.

+
+
+
Configuring sensitivity
+
+

"Sensitivity" constraints are about restricting access to +security-sensitive data. Different organizations may have different +opinions about what is security sensitive, so WildFly provides +configuration options to allow users to tailor these constraints.

+
+
+
Sensitive resources, attributes and operations
+
+

The developers of the WildFly core and of any subsystem may annotate +resources, attributes or operations with a "sensitivity classification". +Classifications are either provided by the core and may be applicable +anywhere in the management model, or they are scoped to a particular +subsystem. For each classification, there will be a setting declaring +whether by default the addressing, read and write actions are considered +to be sensitive. If an action is sensitive, only users in the roles able +to deal with sensitive data (Administrator, Auditor, SuperUser) will +have permissions.

+
+
+

Using the CLI, administrators can see the settings for a classification. +For example, there is a core classification called "socket-config" that +is applied to elements throughout the model that relate to configuring +sockets:

+
+
+
+
[domain@localhost:9990 /] cd core-service=management/access=authorization/constraint=sensitivity-classification/type=core/classification=socket-config
+[domain@localhost:9990 classification=socket-config] ls -l
+ATTRIBUTE                       VALUE     TYPE
+configured-requires-addressable undefined BOOLEAN
+configured-requires-read        undefined BOOLEAN
+configured-requires-write       undefined BOOLEAN
+default-requires-addressable    false     BOOLEAN
+default-requires-read           false     BOOLEAN
+default-requires-write          true      BOOLEAN
+ 
+CHILD      MIN-OCCURS MAX-OCCURS
+applies-to n/a        n/a
+
+
+
+

The various default-requires-…​ attributes indicate whether a user +must be in a role that allows security sensitive actions in order to +perform the action. In the socket-config example above, +default-requires-write is true, while the others are false. So, by +default modifying a setting involving socket configuration is considered +sensitive, while addressing those resources or doing reads is not +sensitive.

+
+
+

The default-requires-…​ attributes are read-only. The +configured-requires-…​ attributes however can be modified to override +the default settings with ones appropriate for your organization. For +example, if your organization doesn’t regard modifying socket +configuration settings to be security sensitive, you can change that +setting:

+
+
+
+
[domain@localhost:9990 classification=socket-config] :write-attribute(name=configured-requires-write,value=false)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+

Administrators can also read the management model to see to which +resources, attributes and operations a particular sensitivity +classification applies:

+
+
+
+
[domain@localhost:9990 classification=socket-config] :read-children-resources(child-type=applies-to)
+{
+    "outcome" => "success",
+    "result" => {
+        "/host=primary" => {
+            "address" => "/host=primary",
+            "attributes" => [],
+            "entire-resource" => false,
+            "operations" => ["resolve-internet-address"]
+        },
+        "/host=primary/core-service=host-environment" => {
+            "address" => "/host=primary/core-service=host-environment",
+            "attributes" => [
+                "host-controller-port",
+                "host-controller-address",
+                "process-controller-port",
+                "process-controller-address"
+            ],
+            "entire-resource" => false,
+            "operations" => []
+        },
+        "/host=primary/core-service=management/management-interface=http-interface" => {
+            "address" => "/host=primary/core-service=management/management-interface=http-interface",
+            "attributes" => [
+                "port",
+                "secure-interface",
+                "secure-port",
+                "interface"
+            ],
+            "entire-resource" => false,
+            "operations" => []
+        },
+        "/host=primary/core-service=management/management-interface=native-interface" => {
+            "address" => "/host=primary/core-service=management/management-interface=native-interface",
+            "attributes" => [
+                "port",
+                "interface"
+            ],
+            "entire-resource" => false,
+            "operations" => []
+        },
+        "/host=primary/interface=*" => {
+            "address" => "/host=primary/interface=*",
+            "attributes" => [],
+            "entire-resource" => true,
+            "operations" => ["resolve-internet-address"]
+        },
+        "/host=primary/server-config=*/interface=*" => {
+            "address" => "/host=primary/server-config=*/interface=*",
+            "attributes" => [],
+            "entire-resource" => true,
+            "operations" => []
+        },
+        "/interface=*" => {
+            "address" => "/interface=*",
+            "attributes" => [],
+            "entire-resource" => true,
+            "operations" => []
+        },
+        "/profile=*/subsystem=messaging/hornetq-server=*/broadcast-group=*" => {
+            "address" => "/profile=*/subsystem=messaging/hornetq-server=*/broadcast-group=*",
+            "attributes" => [
+                "group-address",
+                "group-port",
+                "local-bind-address",
+                "local-bind-port"
+            ],
+            "entire-resource" => false,
+            "operations" => []
+        },
+        "/profile=*/subsystem=messaging/hornetq-server=*/discovery-group=*" => {
+            "address" => "/profile=*/subsystem=messaging/hornetq-server=*/discovery-group=*",
+            "attributes" => [
+                "group-address",
+                "group-port",
+                "local-bind-address"
+            ],
+            "entire-resource" => false,
+            "operations" => []
+        },
+        "/profile=*/subsystem=transactions" => {
+            "address" => "/profile=*/subsystem=transactions",
+            "attributes" => ["process-id-socket-max-ports"],
+            "entire-resource" => false,
+            "operations" => []
+        },
+        "/server-group=*" => {
+            "address" => "/server-group=*",
+            "attributes" => ["socket-binding-port-offset"],
+            "entire-resource" => false,
+            "operations" => []
+        },
+        "/socket-binding-group=*" => {
+            "address" => "/socket-binding-group=*",
+            "attributes" => [],
+            "entire-resource" => true,
+            "operations" => []
+        }
+    }
+}
+
+
+
+

There will be a separate child for each address to which the +classification applies. The entire-resource attribute will be true if +the classification applies to the entire resource. Otherwise, the +attributes and operations attributes will include the names of +attributes or operations to which the classification applies.

+
+
+Classifications with broad use +
+

Several of the core sensitivity classifications are commonly used across +the management model and deserve special mention.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription

credential

An attribute whose value is some sort of credential, e.g. a +password or a username. By default sensitive for both reads and writes

security-domain-ref

An attribute whose value is the name of a security +domain. By default sensitive for both reads and writes

security-realm-ref

An attribute whose value is the name of a security +realm. By default sensitive for both reads and writes

socket-binding-ref

An attribute whose value is the name of a socket +binding. By default not sensitive for any action

socket-config

A resource, attribute or operation that somehow relates +to configuring a socket. By default sensitive for writes

+
+
+
+
Values with security vault expressions
+
+

By default any attribute or operation parameter whose value includes a +security vault expression will be treated as sensitive, even if no +sensitivity classification applies or the classification does not treat +the action as sensitive.

+
+
+

This setting can be globally changed via the CLI. There is a resource +for this configuration:

+
+
+
+
[domain@localhost:9990 /] cd core-service=management/access=authorization/constraint=vault-expression
+[domain@localhost:9990 constraint=vault-expression] ls -l
+ATTRIBUTE                 VALUE     TYPE
+configured-requires-read  undefined BOOLEAN
+configured-requires-write undefined BOOLEAN
+default-requires-read     true      BOOLEAN
+default-requires-write    true      BOOLEAN
+
+
+
+

The various default-requires-…​ attributes indicate whether a user +must be in a role that allows security sensitive actions in order to +perform the action. So, by default both reading and writing attributes +whose values include vault expressions requires a user to be in one of +the roles with sensitive data permissions.

+
+
+

The default-requires-…​ attributes are read-only. The +configured-requires-…​ attributes however can be modified to override +the default settings with settings appropriate for your organization. +For example, if your organization doesn’t regard reading vault +expressions to be security sensitive, you can change that setting:

+
+
+
+
[domain@localhost:9990 constraint=vault-expression] :write-attribute(name=configured-requires-read,value=false)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+ + + + + +
+ + +This vault-expression constraint overlaps somewhat with the +core +"credential" sensitivity classification in that the most typical uses +of a vault expression are in attributes that contain a user name or +password, and those will typically be annotated with the "credential" +sensitivity classification. So, if you change the settings for the +"credential" sensitivity classification you may also need to make a +corresponding change to the vault-expression constraint settings, or +your change will not have full effect. +
+
+
+

Be aware though, that vault expressions can be used in any attribute +that supports expressions, not just in credential-type attributes. So it +is important to be familiar with where and how your organization uses +vault expressions before changing these settings.

+
+
+
+
+
Configuring "Deployer" role access
+
+

The standard Deployer role +has its write permissions limited to resources that are considered to be +"application resources"; i.e. conceptually part of an application and +not part of the general server configuration. By default, only +deployment resources are considered to be application resources. +However, different organizations may have different opinions on what +qualifies as an application resource, so for resource types that +subsystems authors consider potentially to be application resources, +WildFly provides a configuration option to declare them as such. Such +resources will be annotated with an "application classification".

+
+
+

For example, the mail subsystem provides such a classification:

+
+
+
+
[domain@localhost:9990 /] cd /core-service=management/access=authorization/constraint=application-classification/type=mail/classification=mail-session
+[domain@localhost:9990 classification=mail-session] ls -l
+ATTRIBUTE              VALUE     TYPE
+configured-application undefined BOOLEAN
+default-application    false     BOOLEAN
+ 
+CHILD      MIN-OCCURS MAX-OCCURS
+applies-to n/a        n/a
+
+
+
+

Use read-resource or read-children-resources to see what resources +have this classification applied:

+
+
+
+
[domain@localhost:9990 classification=mail-session] :read-children-resources(child-type=applies-to)
+{
+    "outcome" => "success",
+    "result" => {"/profile=*/subsystem=mail/mail-session=*" => {
+        "address" => "/profile=*/subsystem=mail/mail-session=*",
+        "attributes" => [],
+        "entire-resource" => true,
+        "operations" => []
+    }}
+}
+
+
+
+

This indicates that this classification, intuitively enough, only +applies to mail subsystem mail-session resources.

+
+
+

To make resources with this classification writeable by users in the +Deployer role, set the configured-application attribute to true.

+
+
+
+
[domain@localhost:9990 classification=mail-session] :write-attribute(name=configured-application,value=true)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {
+        "server-one" => {"response" => {"outcome" => "success"}},
+        "server-two" => {"response" => {"outcome" => "success"}}
+    }}}}
+}
+
+
+
+
Application classifications shipped with WildFly
+
+

The subsystems shipped with the full WildFly distribution include the +following application classifications:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SubsystemClassification

datasources

data-source

datasources

jdbc-driver

datasources

xa-data-source

logging

logger

logging

logging-profile

mail

mail-session

messaging

jms-queue

messaging

jms-topic

messaging

queue

messaging

security-setting

naming

binding

resource-adapters

resource-adapter

security

security-domain

+
+

In each case the classification applies to the resources you would +expect, given its name.

+
+
+
+
+
+

5.2.7. RBAC effect on administrator user experience

+
+

The RBAC scheme will result in reduced permissions for administrators +who do not map to the SuperUser role, so this will of course have some +impact on their experience when using administrative tools like the +admin console and the CLI.

+
+
+
Admin console
+
+

The admin console takes great pains to provide a good user experience +even when the user has reduced permissions. Resources the user is not +permitted to see will simply not be shown, or if appropriate will be +replaced in the UI with an indication that the user is not authorized. +Interaction units like "Add" and "Remove" buttons and "Edit" links will +be suppressed if the user has no write permissions.

+
+
+
+
CLI
+
+

The CLI is a much more unconstrained tool than the admin console is, +allowing users to try to execute whatever operations they wish, so it’s +more likely that users who attempt to do things for which they lack +necessary permissions will receive failure messages. For example, a user +in the Monitor role cannot read passwords:

+
+
+
+
[domain@localhost:9990 /] /profile=default/subsystem=datasources/data-source=ExampleDS:read-attribute(name=password)
+{
+    "outcome" => "failed",
+    "result" => undefined,
+    "failure-description" => "WFLYCTL0313: Unauthorized to execute operation 'read-attribute' for resource '[
+    (\"profile\" => \"default\"),
+    (\"subsystem\" => \"datasources\"),
+    (\"data-source\" => \"ExampleDS\")
+]' -- \"WFLYCTL0332: Permission denied\"",
+    "rolled-back" => true
+}
+
+
+
+

If the user isn’t even allowed to +address the resource then the +response would be as if the resource doesn’t exist, even though it +actually does:

+
+
+
+
[domain@localhost:9990 /] /profile=default/subsystem=elytron/security-domain=ManagementDomain:read-resource
+{
+    "outcome" => "failed",
+    "failure-description" => "WFLYCTL0216: Management resource '[
+    (\"profile\" => \"default\"),
+    (\"subsystem\" => \"elytron\"),
+    (\"security-domain\" => \"ManagementDomain\")
+]' not found",
+    "rolled-back" => true
+}
+
+
+
+

This prevents unauthorized users fishing for sensitive data in resource +addresses by checking for "Permission denied" type failures.

+
+
+

Users who use the read-resource operation may ask for data, some of +which they are allowed to see and some of which they are not. If this +happens, the request will not fail, but inaccessible data will be elided +and a response header will be included advising on what was not +included. Here we show the effect of a Monitor trying to recursively +read the elytron subsystem configuration:

+
+
+
+
[domain@localhost:9990 /] /profile=default/subsystem=elytron:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "security-properties" => undefined,
+        "security-domain" => undefined,
+        "vault" => undefined
+    },
+    "response-headers" => {"access-control" => [{
+        "absolute-address" => [
+            ("profile" => "default"),
+            ("subsystem" => "elytron")
+        ],
+        "relative-address" => [],
+        "filtered-attributes" => ["security-properties"],
+        "filtered-children-types" => ["security-domain"]
+    }]}
+}
+
+
+
+

The response-headers section includes access control data in a list +with one element per relevant resource. (In this case there’s just one.) +The absolute and relative address of the resource is shown, along with +the fact that the value of the deep-copy-subject-mode attribute has +been filtered (i.e. undefined is shown as the value, which may not be +the real value) as well as the fact that child resources of type +security-domain have been filtered.

+
+
+
+
Description of access control constraints in the management model
+
+

metadata

+
+
+

The management model descriptive metadata returned from operations like +read-resource-description and read-operation-description can be +configured to include information describing the access control +constraints relevant to the resource, This is done by using the +access-control parameter. The output will be tailored to the caller’s +permissions. For example, a user who maps to the Monitor role could ask +for information about a resource in the mail subsystem:

+
+
+
+
[domain@localhost:9990 /] cd /profile=default/subsystem=mail/mail-session=default/server=smtp
+[domain@localhost:9990 server=smtp] :read-resource-description(access-control=trim-descriptions)
+{
+    "outcome" => "success",
+    "result" => {
+        "description" => undefined,
+        "access-constraints" => {"application" => {"mail-session" => {"type" => "mail"}}},
+        "attributes" => undefined,
+        "operations" => undefined,
+        "children" => {},
+        "access-control" => {
+            "default" => {
+                "read" => true,
+                "write" => false,
+                "attributes" => {
+                    "outbound-socket-binding-ref" => {
+                        "read" => true,
+                        "write" => false
+                    },
+                    "username" => {
+                        "read" => false,
+                        "write" => false
+                    },
+                    "tls" => {
+                        "read" => true,
+                        "write" => false
+                    },
+                    "ssl" => {
+                        "read" => true,
+                        "write" => false
+                    },
+                    "password" => {
+                        "read" => false,
+                        "write" => false
+                    }
+                }
+            },
+            "exceptions" => {}
+        }
+    }
+}
+
+
+
+

Because trim-descriptions was used as the value for the +access-control parameter, the typical "description", "attributes", +"operations" and "children" data is largely suppressed. (For more on +this, see below.) The +access-constraints field indicates that this resource is annotated +with an application constraint. The access-control field includes information about the +permissions the current caller has for this resource. The default +section shows the default settings for resources of this type. The +read and write fields directly under default show that the caller +can, in general, read this resource but cannot write it. The +attributes section shows the individual attribute settings. Note that +Monitor cannot read the username and password attributes.

+
+
+

There are three valid values for the access-control parameter to +read-resource-description and read-operation-description:

+
+
+
    +
  • +

    none – do not include access control information in the response. +This is the default behavior if no parameter is included.

    +
  • +
  • +

    trim-descriptions – remove the normal description details, as shown +in the example above

    +
  • +
  • +

    combined-descriptions – include both the normal output and the +access control data

    +
  • +
+
+
+
+
+

5.2.8. Learning about your own role mappings

+
+

Users can learn in which roles they are operating. In the admin console, +click on your name in the top right corner; the roles you are in will be +shown.

+
+
+

callersroles.png

+
+
+

CLI users should use the whoami operation with the verbose attribute +set:

+
+
+
+
[domain@localhost:9990 /] :whoami(verbose=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "identity" => {
+            "username" => "aadams",
+            "realm" => "ManagementRealm"
+        },
+        "mapped-roles" => [
+            "Maintainer"
+        ]
+    }
+}
+
+
+
+
+

5.2.9. "Run-as" capability for SuperUsers

+
+

If a user maps to the SuperUser role, WildFly also supports letting that +user request that they instead map to one or more other roles. This can +be useful when doing demos, or when the SuperUser is changing the RBAC +configuration and wants to see what effect the changes have from the +perspective of a user in another role. This capability is only available +to the SuperUser role, so it can only be used to narrow a user’s +permissions, not to potentially increase them.

+
+
+
CLI run-as
+
+

With the CLI, run-as capability is on a per-request basis. It is done by +using the "roles" operation header, the value of which can be the name +of a single role or a bracket-enclosed, comma-delimited list of role +names.

+
+
+

Example with a low level operation:

+
+
+
+
[standalone@localhost:9990 /] :whoami(verbose=true){roles=[Operator,Auditor]}
+{
+    "outcome" => "success",
+    "result" => {
+        "identity" => {
+            "username" => "$local",
+            "realm" => "ManagementRealm"
+        },
+        "mapped-roles" => [
+            "Auditor",
+            "Operator"
+        ]
+    }
+}
+
+
+
+

Example with a CLI command:

+
+
+
+
[standalone@localhost:9990 /] deploy /tmp/helloworld.war --headers={roles=Monitor}
+{"WFLYCTL0062: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-1" => "WFLYCTL0313: Unauthorized to execute operation 'add' for resource '[(\"deployment\" => \"helloworld.war\")]' -- \"WFLYCTL0332: Permission denied\""}}
+[standalone@localhost:9990 /] deploy /tmp/helloworld.war --headers={roles=Maintainer}
+
+
+
+

Here we show the effect of switching to a role that isn’t granted the +necessary permission.

+
+
+
+
Admin console run-as
+
+

Admin console users can change the role in which they operate by +clicking on their name in the top right corner and clicking on the "Run +as…​" link.

+
+
+

callersroles.png

+
+
+

Then select the role in which you wish to operate:

+
+
+

runasrole.png

+
+
+

The console will need to be restarted in order for the change to take +effect.

+
+
+
+
Using run-as roles with the "simple" access control provider
+
+

This "run-as" capability is available even if the "simple" access +control provider is used. When the "simple" provider is used, any +authenticated administrator is treated the same as if they would map to +SuperUser when the "rbac" provider is used.
+However, the "simple" provider actually understands all of the "rbac" +provider configuration settings described above, but only makes use of +them if the "run-as" capability is used for a request. Otherwise, the +SuperUser role has all permissions, so detailed configuration is +irrelevant.

+
+
+

Using the run-as capability with the "simple" provider may be useful if +an administrator is setting up an rbac provider configuration before +switching the provider to rbac to make that configuration take effect. +The administrator can then run-as different roles to see the effect of +the planned settings.

+
+
+
+
+
+
+
+

6. Application deployment

+
+ +
+

6.1. Managed Domain

+
+

In a managed domain, deployments are associated with a server-group +(see Core management concepts). +Any server within the server group will then be provided with that +deployment.

+
+
+

The domain and host controller components manage the distribution of +binaries across network boundaries.

+
+
+

6.1.1. Deployment Commands

+
+

Distributing deployment binaries involves two steps: uploading the +deployment to the repository the domain controller will use to +distribute its contents, and then assigning the deployment to one or +more server groups.

+
+
+

You can do this in one sweep with the CLI:

+
+
+
+
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war
+Either --all-server-groups or --server-groups must be specified.
+
+[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --all-server-groups
+'test-application.war' deployed successfully.
+
+
+
+

The deployment will be available to the domain controller, assigned to a +server group, and deployed on all running servers in that group:

+
+
+
+
[domain@localhost:9990 /] :read-children-names(child-type=deployment)
+{
+   "outcome" => "success",
+   "result" => [
+       "mysql-connector-java-5.1.15.jar",
+       "test-application.war"
+   ]
+}
+
+[domain@localhost:9990 /] /server-group=main-server-group/deployment=test-application.war:read-resource(include-runtime)
+{
+   "outcome" => "success",
+   "result" => {
+       "enabled" => true,
+       "name" => "test-application.war",
+       "managed" => true,
+       "runtime-name" => "test-application.war"
+   }
+}
+
+
+
+

If you only want the deployment deployed on servers in some server +groups, but not all, use the --server-groups parameter instead of +-all-server-groups:

+
+
+
+
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --server-groups=main-server-group,another-group
+'test-application.war' deployed successfully.
+
+
+
+

If you have a new version of the deployment that you want to deploy +replacing an existing one, use the --force parameter:

+
+
+
+
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --all-server-groups --force
+'test-application.war' deployed successfully.
+
+
+
+

You can remove binaries from server groups with the undeploy command:

+
+
+
+
[domain@localhost:9990 /] undeploy test-application.war --all-relevant-server-groups
+Successfully undeployed test-application.war.
+
+[domain@localhost:9990 /] /server-group=main-server-group:read-children-names(child-type=deployment)
+{
+   "outcome" => "success",
+   "result" => []
+}
+
+
+
+

If you only want to undeploy from some server groups but not others, use +the - server-groups parameter instead of +-all-relevant-server-groups.

+
+
+

The CLI deploy command supports a number of other parameters that can +control behavior. Use the --help parameter to learn more:

+
+
+
+
[domain@localhost:9990 /] deploy --help
+[...]
+
+
+
+ + + + + +
+ + +Managing deployments through the web interface provides an alternate, +sometimes simpler approach. +
+
+
+
+

6.1.2. Exploded managed deployments

+
+

Managed and unmanaged deployments can be 'exploded', i.e. on the +filesystem in the form of a directory structure whose structure +corresponds to an unzipped version of the archive. An exploded +deployment can be convenient to administer if your administrative +processes involve inserting or replacing files from a base version in +order to create a version tailored for a particular use (for example, +copy in a base deployment and then copy in a jboss-web.xml file to +tailor a deployment for use in WildFly.) Exploded deployments are also +nice in some development scenarios, as you can replace static content +(e.g. .html, .css) files in the deployment and have the new content +visible immediately without requiring a redeploy.

+
+
+

Since unmanaged deployment content is directly in your charge, the +following operations only make sense for a managed deployment.

+
+
+
+
[domain@localhost:9990 /] /deployment=exploded.war:add(content=[{empty=true}])
+
+
+
+

This will create an empty exploded deployment to which you’ll be able to +add content. The empty content parameter is required to check that you +really intend to create an empty deployment and not just forget to +define the content.

+
+
+
+
[domain@localhost:9990 /] /deployment=kitchensink.ear:explode()
+
+
+
+

This will 'explode' an existing archive deployment to its exploded +format. This operation is not recursive so you need to explode the +sub-deployment if you want to be able to manipulate the sub-deployment +content. You can do this by specifying the sub-deployment archive path +as a parameter to the explode operation.

+
+
+
+
[domain@localhost:9990 /] /deployment=kitchensink.ear:explode(path=wildfly-kitchensink-ear-web.war)
+
+
+
+

Now you can add or remove content to your exploded deployment. Note that +per-default this will overwrite existing contents, you can specify the +overwrite parameter to make the operation fail if the content already +exists.

+
+
+
+
[domain@localhost:9990 /] /deployment=exploded.war:add-content(content=[{target-path=WEB-INF/classes/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class, input-stream-index=/home/demo/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class}, {target-path=META-INF/MANIFEST.MF, input-stream-index=/home/demo/META-INF/MANIFEST.MF}, {target-path=META-INF/services/org.jboss.msc.service.ServiceActivator, input-stream-index=/home/demo/META-INF/services/org.jboss.msc.service.ServiceActivator}])
+
+
+
+

Each content specifies a source content and the target path to which it +will be copied relative to the deployment root. With WildFly 11 you can +use input-stream-index (which was a convenient way to pass a stream of +content) from the CLI by pointing it to a local file.

+
+
+
+
[domain@localhost:9990 /] /deployment=exploded.war:remove-content(paths=[WEB-INF/classes/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class, META-INF/MANIFEST.MF, META-INF/services/org.jboss.msc.service.ServiceActivator])
+
+
+
+

Now you can list the content of an exploded deployment, or just some +part of it.

+
+
+
+
[domain@localhost:9990 /] /deployment=kitchensink.ear:browse-content(archive=false, path=wildfly-kitchensink-ear-web.war)
+{
+    "outcome" => "success",
+    "result" => [
+        {
+            "path" => "META-INF/",
+            "directory" => true
+        },
+        {
+            "path" => "META-INF/MANIFEST.MF",
+            "directory" => false,
+            "file-size" => 128L
+        },
+        {
+            "path" => "WEB-INF/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/templates/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/classes/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/classes/org/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/controller/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/rest/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/util/",
+            "directory" => true
+        },
+        {
+            "path" => "resources/",
+            "directory" => true
+        },
+        {
+            "path" => "resources/css/",
+            "directory" => true
+        },
+        {
+            "path" => "resources/gfx/",
+            "directory" => true
+        },
+        {
+            "path" => "WEB-INF/templates/default.xhtml",
+            "directory" => false,
+            "file-size" => 2113L
+        },
+        {
+            "path" => "WEB-INF/faces-config.xml",
+            "directory" => false,
+            "file-size" => 1365L
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/controller/MemberController.class",
+            "directory" => false,
+            "file-size" => 2750L
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/rest/MemberResourceRESTService.class",
+            "directory" => false,
+            "file-size" => 6363L
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/rest/JaxRsActivator.class",
+            "directory" => false,
+            "file-size" => 464L
+        },
+        {
+            "path" => "WEB-INF/classes/org/jboss/as/quickstarts/kitchensink_ear/util/WebResources.class",
+            "directory" => false,
+            "file-size" => 667L
+        },
+        {
+            "path" => "WEB-INF/beans.xml",
+            "directory" => false,
+            "file-size" => 1262L
+        },
+        {
+            "path" => "index.xhtml",
+            "directory" => false,
+            "file-size" => 3603L
+        },
+        {
+            "path" => "index.html",
+            "directory" => false,
+            "file-size" => 949L
+        },
+        {
+            "path" => "resources/css/screen.css",
+            "directory" => false,
+            "file-size" => 4025L
+        },
+        {
+            "path" => "resources/gfx/headerbkg.png",
+            "directory" => false,
+            "file-size" => 1147L
+        },
+        {
+            "path" => "resources/gfx/asidebkg.png",
+            "directory" => false,
+            "file-size" => 1374L
+        },
+        {
+            "path" => "resources/gfx/banner.png",
+            "directory" => false,
+            "file-size" => 41473L
+        },
+        {
+            "path" => "resources/gfx/bkg-blkheader.png",
+            "directory" => false,
+            "file-size" => 116L
+        },
+        {
+            "path" => "resources/gfx/rhjb_eap_logo.png",
+            "directory" => false,
+            "file-size" => 2637L
+        },
+        {
+            "path" => "META-INF/maven/",
+            "directory" => true
+        },
+        {
+            "path" => "META-INF/maven/org.wildfly.quickstarts/",
+            "directory" => true
+        },
+        {
+            "path" => "META-INF/maven/org.wildfly.quickstarts/wildfly-kitchensink-ear-web/",
+            "directory" => true
+        },
+        {
+            "path" => "META-INF/maven/org.wildfly.quickstarts/wildfly-kitchensink-ear-web/pom.xml",
+            "directory" => false,
+            "file-size" => 4128L
+        },
+        {
+            "path" => "META-INF/maven/org.wildfly.quickstarts/wildfly-kitchensink-ear-web/pom.properties",
+            "directory" => false,
+            "file-size" => 146L
+        }
+    ]
+}
+
+
+
+

You also have a read-content operation but since it returns a binary +stream, this is not displayable from the CLI.

+
+
+
+
[domain@localhost:9990 /] /deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF)
+{
+  "outcome" => "success",
+    "result" => {"uuid" => "b373d587-72ee-4b1e-a02a-71fbb0c85d32"},
+    "response-headers" => {"attached-streams" => [{
+        "uuid" => "b373d587-72ee-4b1e-a02a-71fbb0c85d32",
+        "mime-type" => "text/plain"
+    }]}
+}
+
+
+
+

The management CLI however provides high level commands to display or +save binary stream attachments:

+
+
+
+
[domain@localhost:9990 /] attachment display --operation=/deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF)
+ATTACHMENT d052340a-abb7-4a66-aa24-4eeeb6b256be:
+Manifest-Version: 1.0
+Archiver-Version: Plexus Archiver
+Built-By: mjurc
+Created-By: Apache Maven 3.3.9
+Build-Jdk: 1.8.0_91
+
+
+
+
+
[domain@localhost:9990 /] attachment save --operation=/deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF) --file=example
+File saved to /home/mjurc/wildfly/build/target/wildfly-11.0.0.Alpha1-SNAPSHOT/example
+
+
+
+
+

6.1.3. XML Configuration File

+
+

When you deploy content, the domain controller adds two types of entries +to the domain.xml configuration file, one showing global information +about the deployment, and another for each relevant server group showing +how it is used by that server group:

+
+
+
+
[...]
+<deployments>
+   <deployment name="test-application.war"
+               runtime-name="test-application.war">
+       <content sha1="dda9881fa7811b22f1424b4c5acccb13c71202bd"/>
+   </deployment>
+</deployments>
+[...]
+<server-groups>
+   <server-group name="main-server-group" profile="default">
+       [...]
+       <deployments>
+           <deployment name="test-application.war" runtime-name="test-application.war"/>
+       </deployments>
+   </server-group>
+</server-groups>
+[...]
+
+
+
+

~(See domain/configuration/domain.xml)~

+
+
+
+
+

6.2. Standalone Server

+
+

Deployments on a standalone server work in a similar way to those on +managed domains. The main difference is that there are no server group +associations.

+
+
+

6.2.1. Deployment Commands

+
+

The same CLI commands used for managed domains work for standalone +servers when deploying and removing an application:

+
+
+
+
[standalone@localhost:9990 /] deploy ~/Desktop/test-application.war
+'test-application.war' deployed successfully.
+
+[standalone@localhost:9990 /] undeploy test-application.war
+Successfully undeployed test-application.war.
+
+
+
+
+

6.2.2. Deploying Using the Deployment Scanner

+
+

Deployment content (for example, war, ear, jar, and sar files) can be +placed in the standalone/deployments directory of the WildFly +distribution, in order to be automatically deployed into the server +runtime. For this to work the deployment-scanner subsystem must be +present. The scanner periodically checks the contents of the deployments +directory and reacts to changes by updating the server.

+
+
+ + + + + +
+ + +Users are encouraged to use the WildFly management APIs to upload and +deploy deployment content instead of relying on the deployment scanner +that periodically scans the directory, particularly if running +production systems. +
+
+
+
Deployment Scanner Modes
+
+

The WildFly filesystem deployment scanner operates in one of two +different modes, depending on whether it will directly monitor the +deployment content in order to decide to deploy or redeploy it.

+
+
+

Auto-deploy mode:

+
+
+

The scanner will directly monitor the deployment content, automatically +deploying new content and redeploying content whose timestamp has +changed. This is similiar to the behavior of previous AS releases, +although there are differences:

+
+
+
    +
  • +

    A change in any file in an exploded deployment triggers redeploy. +Because EE 6+ applications do not require deployment descriptors,
    +there is no attempt to monitor deployment descriptors and only redeploy +when a deployment descriptor changes.

    +
  • +
  • +

    The scanner will place marker files in this directory as an indication +of the status of its attempts to deploy or undeploy content. These are +detailed below.

    +
  • +
+
+
+

Manual deploy mode:

+
+
+

The scanner will not attempt to directly monitor the deployment content +and decide if or when the end user wishes the content to be deployed. +Instead, the scanner relies on a system of marker files, with the user’s +addition or removal of a marker file serving as a sort of command +telling the scanner to deploy, undeploy or redeploy content.

+
+
+

Auto-deploy mode and manual deploy mode can be independently configured +for zipped deployment content and exploded deployment content. This is +done via the "auto-deploy" attribute on the deployment-scanner element +in the standalone.xml configuration file:

+
+
+
+
<deployment-scanner scan-interval="5000" relative-to="jboss.server.base.dir"
+   path="deployments" auto-deploy-zipped="true" auto-deploy-exploded="false"/>
+
+
+
+

By default, auto-deploy of zipped content is enabled, and auto-deploy of +exploded content is disabled. Manual deploy mode is strongly recommended +for exploded content, as exploded content is inherently vulnerable to +the scanner trying to auto-deploy partially copied content.

+
+
+
+
Marker Files
+
+

The marker files always have the same name as the deployment content to +which they relate, but with an additional file suffix appended. For +example, the marker file to indicate the example.war file should be +deployed is named example.war.dodeploy. Different marker file suffixes +have different meanings.

+
+
+

The relevant marker file types are:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FilePurpose

.dodeploy

Placed by the user to indicate that the given content +should be deployed into the runtime (or redeployed if already deployed in +the runtime.)

.skipdeploy

Disables auto-deploy of the content for as long as the +file is present. Most useful for allowing updates to exploded content +without having the scanner initiate redeploy in the middle of the update. +Can be used with zipped content as well, although the scanner will detect +in-progress changes to zipped content and wait until changes are +complete.

.isdeploying

Placed by the deployment scanner service to indicate that +it has noticed a .dodeploy file or new or updated auto-deploymode content +and is in the process of deploying the content.This marker file will be +deleted when the deployment process completes.

.deployed

Placed by the deployment scanner service to indicate that +the given content has been deployed into the runtime. If an end user +deletes this file, the content will be undeployed.

.failed

Placed by the deployment scanner service to indicate that +the given content failed to deploy into the runtime. The contentof the +file will include some information about the cause ofthe failure. Note +that with auto-deploy mode, removing this file will make the deployment +eligible for deployment again.

.isundeploying

Placed by the deployment scanner service to indicate +that it has noticed a .deployed file has been deleted and the content is +being undeployed. This marker file will be deleted when the undeployment +process completes.

.undeployed

Placed by the deployment scanner service to indicate that +the given content has been undeployed from the runtime. If an end user +deletes this file, it has no impact.

.pending

Placed by the deployment scanner service to indicate that +it has noticed the need to deploy content but has not yet instructed the +server to deploy it. This file is created if the scanner detects that +some auto-deploy content is still in the process of being copied or if +there is some problem that prevents auto-deployment. The scanner will not +instruct the server to deploy or undeploy any content (not just +the directly affected content) as long as this condition holds.

+
+
+
Basic workflows:
+
+

All examples assume variable $JBOSS_HOME points to the root of the +WildFly distribution.

+
+
+
    +
  1. +

    Add new zipped content and deploy it:

    +
    +
      +
    1. +

      cp target/example.war/ $JBOSS_HOME/standalone/deployments

      +
    2. +
    3. +

      (Manual mode only) touch +$JBOSS_HOME/standalone/deployments/example.war.dodeploy

      +
    4. +
    +
    +
  2. +
  3. +

    Add new unzipped content and deploy it:

    +
    +
      +
    1. +

      cp -r target/example.war/ $JBOSS_HOME/standalone/deployments

      +
    2. +
    3. +

      (Manual mode only) touch +$JBOSS_HOME/standalone/deployments/example.war.dodeploy

      +
    4. +
    +
    +
  4. +
  5. +

    Undeploy currently deployed content:

    +
    +
      +
    1. +

      rm $JBOSS_HOME/standalone/deployments/example.war.deployed

      +
    2. +
    +
    +
  6. +
  7. +

    Auto-deploy mode only: Undeploy currently deployed content:

    +
    +
      +
    1. +

      rm $JBOSS_HOME/standalone/deployments/example.war

      +
    2. +
    +
    +
  8. +
  9. +

    Replace currently deployed zipped content with a new version and deploy it:

    +
    +
      +
    1. +

      cp target/example.war/ $JBOSS_HOME/standalone/deployments

      +
    2. +
    3. +

      (Manual mode only) touch +$JBOSS_HOME/standalone/deployments/example.war.dodeploy

      +
    4. +
    +
    +
  10. +
  11. +

    Manual mode only: Replace currently deployed unzipped content with a +new version and deploy it:

    +
    +
      +
    1. +

      rm $JBOSS_HOME/standalone/deployments/example.war.deployed

      +
    2. +
    3. +

      wait for $JBOSS_HOME/standalone/deployments/example.war.undeployed +file to appear

      +
    4. +
    5. +

      cp -r target/example.war/ $JBOSS_HOME/standalone/deployments

      +
    6. +
    7. +

      touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy

      +
    8. +
    +
    +
  12. +
  13. +

    Auto-deploy mode only: Replace currently deployed unzipped content +with a new version and deploy it:

    +
    +
      +
    1. +

      touch $JBOSS_HOME/standalone/deployments/example.war.skipdeploy

      +
    2. +
    3. +

      cp -r target/example.war/ $JBOSS_HOME/standalone/deployments

      +
    4. +
    5. +

      rm $JBOSS_HOME/standalone/deployments/example.war.skipdeploy

      +
    6. +
    +
    +
  14. +
  15. +

    Manual mode only: Live replace portions of currently deployed +unzipped content without redeploying:

    +
    +
      +
    1. +

      cp -r target/example.war/foo.html +$JBOSS_HOME/standalone/deployments/example.war

      +
    2. +
    +
    +
  16. +
  17. +

    Auto-deploy mode only: Live replace portions of currently deployed +unzipped content without redeploying:

    +
    +
      +
    1. +

      touch $JBOSS_HOME/standalone/deployments/example.war.skipdeploy

      +
    2. +
    3. +

      cp -r target/example.war/foo.html +$JBOSS_HOME/standalone/deployments/example.war

      +
    4. +
    +
    +
  18. +
  19. +

    Manual or auto-deploy mode: Redeploy currently deployed content +(i.e. bounce it with no content change):

    +
    +
      +
    1. +

      touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy

      +
    2. +
    +
    +
  20. +
  21. +

    Auto-deploy mode only: Redeploy currently deployed content (i.e. +bounce it with no content change):

    +
    +
      +
    1. +

      touch $JBOSS_HOME/standalone/deployments/example.war

      +
    2. +
    +
    +
  22. +
+
+
+ + + + + +
+ + +The above examples use Unix shell commands. Windows equivalents are: +cp src dest -→ xcopy /y src dest
+cp -r src dest -→ xcopy /e /s /y src dest
+rm afile -→ del afile
+touch afile -→ echo>> afile +
+
+
+

Note that the behavior of 'touch' and 'echo' are different but the +differences are not relevant to the usages in the examples above.

+
+
+
+
+
+

6.3. Managed and Unmanaged Deployments

+
+

WildFly supports two mechanisms for dealing with deployment content – +managed and unmanaged deployments.

+
+
+

With a managed deployment the server takes the deployment content and +copies it into an internal content repository and thereafter uses that +copy of the content, not the original user-provided content. The server +is thereafter responsible for the content it uses.

+
+
+

With an unmanaged deployment the user provides the local filesystem path +of deployment content, and the server directly uses that content. +However, the user is responsible for ensuring that content, e.g. for +making sure that no changes are made to it that will negatively impact +the functioning of the deployed application.

+
+
+

To help you differentiate managed from unmanaged deployments the +deployment model has a runtime boolean attribute 'managed'.

+
+
+

Managed deployments have a number of benefits over unmanaged:

+
+
+
    +
  • +

    They can be manipulated by remote management clients, not requiring +access to the server filesystem.

    +
  • +
  • +

    In a managed domain, WildFly/EAP will take responsibility for +replicating a copy of the deployment to all hosts/servers in the domain +where it is needed. With an unmanaged deployment, it is the user’s +responsibility to have the deployment available on the local filesystem +on all relevant hosts, at a consistent path.

    +
  • +
  • +

    The deployment content actually used is stored on the filesystem in +the internal content repository, which should help shelter it from +unintended changes.

    +
  • +
+
+
+

All of the previous examples above illustrate using managed deployments, +except for any discussion of deployment scanner handling of exploded +deployments. In WildFly 10 and earlier exploded deployments are always +unmanaged, this is no longer the case since WildFly 11.

+
+
+

6.3.1. Content Repository

+
+

For a managed deployment, the actual file the server uses when creating +runtime services is not the file provided to the CLI deploy command or +to the web console. It is a copy of that file stored in an internal +content repository. The repository is located in the +domain/data/content directory for a managed domain, or in +standalone/data/content for a standalone server. Actual binaries are +stored in a subdirectory:

+
+
+
+
ls domain/data/content/
+  |---/47
+  |-----95cc29338b5049e238941231b36b3946952991
+  |---/dd
+  |-----a9881fa7811b22f1424b4c5acccb13c71202bd
+
+
+
+ + + + + +
+ + +The location of the content repository and its internal structure is +subject to change at any time and should not be relied upon by end +users. +
+
+
+

The description of a managed deployment in the domain or standalone +configuration file includes an attribute recording the SHA1 hash of the +deployment content:

+
+
+
+
<deployments>
+   <deployment name="test-application.war"
+               runtime-name="test-application.war">
+       <content sha1="dda9881fa7811b22f1424b4c5acccb13c71202bd"/>
+   </deployment>
+</deployments>
+
+
+
+

The WildFly process calculates and records that hash when the user +invokes a management operation (e.g. CLI deploy command or using the +console) providing deployment content. The user is not expected to +calculate the hash.

+
+
+

The sha1 attribute in the content element tells the WildFly process +where to find the deployment content in its internal content repository.

+
+
+

In a domain each host will have a copy of the content needed by its +servers in its own local content repository. The WildFly domain +controller and secondary Host Controller processes take responsibility for +ensuring each host has the needed content.

+
+
+
+

6.3.2. Unmanaged Deployments

+
+

An unmanaged deployment is one where the server directly deploys the +content at a path you specify instead of making an internal copy and +then deploying the copy.

+
+
+

Initially deploying an unmanaged deployment is much like deploying a +managed one, except you tell WildFly that you do not want the deployment +to be managed:

+
+
+
+
[standalone@localhost:9990 /] deploy ~/Desktop/test-application.war --unmanaged
+'test-application.war' deployed successfully.
+
+
+
+

When you do this, instead of the server making a copy of the content at +/Desktop/test-application.war, calculating the hash of the content, +storing the hash in the configuration file and then installing the copy +into the runtime, instead it will convert +/Desktop/test-application.war to an absolute path, store the path in +the configuration file, and then install the original content in the +runtime.

+
+
+

You can also use unmanaged deployments in a domain:

+
+
+
+
[domain@localhost:9990 /] deploy /home/example/Desktop/test-application.war --server-group=main-server-group --unmanaged
+'test-application.war' deployed successfully.
+
+
+
+

However, before you run this command you must ensure that a copy of the +content is present on all machines that have servers in the target +server groups, all at the same filesystem path. The domain will not copy +the file for you.

+
+
+

Undeploy is no different from a managed undeploy:

+
+
+
+
[standalone@localhost:9990 /] undeploy test-application.war
+Successfully undeployed test-application.war.
+
+
+
+

Doing a replacement of the deployment with a new version is a bit +different, the server is using the file you want to replace. You should +undeploy the deployment, replace the content, and then deploy again. Or +you can stop the server, replace the deployment and deploy again.

+
+
+
+
+

6.4. Deployment Overlays

+
+

Deployment overlays are our way of 'overlaying' content into an existing +deployment, without physically modifying the contents of the deployment +archive. Possible use cases include swapping out deployment descriptors, +modifying static web resources to change the branding of an application, +or even replacing jar libraries with different versions.

+
+
+

Deployment overlays have a different lifecycle to a deployment. In order +to use a deployment overlay, you first create the overlay, using the CLI +or the management API. You then add files to the overlay, specifying the +deployment paths you want them to overlay. Once you have created the +overlay you then have to link it to a deployment name (which is done +slightly differently depending on if you are in standalone or domain +mode). Once you have created the link any deployment that matches the +specified deployment name will have the overlay applied.

+
+
+

When you modify or create an overlay it will not affect existing +deployments, they must be redeployed in order to take effect

+
+
+

6.4.1. Creating a deployment overlay

+
+

To create a deployment overlay the CLI provides a high level command to +do all the steps specified above in one go. An example command is given +below for both standalone and domain mode:

+
+
+
+
deployment-overlay add --name=myOverlay --content=/WEB-INF/web.xml=/myFiles/myWeb.xml,/WEB-INF/ejb-jar.xml=/myFiles/myEjbJar.xml --deployments=test.war,*-admin.war --redeploy-affected
+
+
+
+
+
deployment-overlay add --name=myOverlay --content=/WEB-INF/web.xml=/myFiles/myWeb.xml,/WEB-INF/ejb-jar.xml=/myFiles/myEjbJar.xml --deployments=test.war,*-admin.war --server-groups=main-server-group --redeploy-affected
+
+
+
+
+
+
+
+

7. Subsystem configuration

+
+
+

Subsystem configuration reference +:author: tcerar@redhat.com +:icons: font +:source-highlighter: coderay +:toc: macro +:toclevels: 2

+
+ +
+

The following chapters will focus on the high level management use cases +that are available through the CLI and the web interface. For a detailed +description of each subsystem configuration property, please consult the +respective component reference.

+
+
+

Schema Location

+
+
+ + + + + +
+ + +The configuration schemas can found in $JBOSS_HOME/docs/schema. +
+
+
+

7.1. EE Subsystem Configuration

+
+

The EE subsystem provides common functionality in the Jakarta EE platform, +such as the EE Concurrency Utilities (JSR 236) and @Resource +injection. The subsystem is also responsible for managing the lifecycle +of Jakarta EE application’s deployments, that is, .ear files and configuration of global directories to share common libraries across all deployed applications.

+
+
+

The EE subsystem configuration may be used to:

+
+
+
    +
  • +

    customise the deployment of Jakarta EE applications

    +
  • +
  • +

    create EE Concurrency Utilities instances

    +
  • +
  • +

    define the default bindings

    +
  • +
+
+
+

The subsystem name is ee and this document covers EE subsystem version +5.0, which XML namespace within WildFly XML configurations is +urn:jboss:domain:ee:5.0. The path for the subsystem’s XML schema, +within WildFly’s distribution, is docs/schema/jboss-as-ee_5_0.xsd.

+
+
+

Subsystem XML configuration example with all elements and attributes +specified:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:ee:5.0">
+    <global-modules>
+        <module name="org.jboss.logging"
+                slot="main"/>
+        <module name="org.apache.logging.log4j.api"
+                annotations="true"
+                meta-inf="true"
+                services="false" />
+    </global-modules>
+    <global-directories>
+        <directory name="common-libs" path="libs" relative-to="jboss.server.base.dir"/>
+    </global-directories>
+    <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
+    <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
+    <jboss-descriptor-property-replacement>false</jboss-descriptor-property-replacement>
+    <annotation-property-replacement>false</annotation-property-replacement>
+    <concurrent>
+        <context-services>
+            <context-service
+                    name="default"
+                    jndi-name="java:jboss/ee/concurrency/context/default"
+                    use-transaction-setup-provider="true" />
+        </context-services>
+        <managed-thread-factories>
+            <managed-thread-factory
+                    name="default"
+                    jndi-name="java:jboss/ee/concurrency/factory/default"
+                    context-service="default"
+                    priority="1" />
+        </managed-thread-factories>
+        <managed-executor-services>
+            <managed-executor-service
+                    name="default"
+                    jndi-name="java:jboss/ee/concurrency/executor/default"
+                    context-service="default"
+                    thread-factory="default"
+                    hung-task-threshold="60000"
+                    core-threads="5"
+                    max-threads="25"
+                    keepalive-time="5000"
+                    queue-length="1000000"
+                    reject-policy="RETRY_ABORT" />
+        </managed-executor-services>
+        <managed-scheduled-executor-services>
+            <managed-scheduled-executor-service
+                    name="default"
+                    jndi-name="java:jboss/ee/concurrency/scheduler/default"
+                    context-service="default"
+                    thread-factory="default"
+                    hung-task-threshold="60000"
+                    core-threads="5"
+                    keepalive-time="5000"
+                    reject-policy="RETRY_ABORT" />
+        </managed-scheduled-executor-services>
+    </concurrent>
+    <default-bindings
+            context-service="java:jboss/ee/concurrency/context/default"
+            datasource="java:jboss/datasources/ExampleDS"
+            jms-connection-factory="java:jboss/DefaultJMSConnectionFactory"
+            managed-executor-service="java:jboss/ee/concurrency/executor/default"
+            managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default"
+            managed-thread-factory="java:jboss/ee/concurrency/factory/default" />
+</subsystem>
+
+
+
+

7.1.1. Jakarta EE Application Deployment

+
+

The EE subsystem configuration allows the customisation of the +deployment behaviour for Jakarta EE Applications.

+
+
+
Global Modules
+
+

Global modules is a set of JBoss Modules that will be added as +dependencies to the JBoss Modules module of every Jakarta EE deployment. Such +dependencies allows Jakarta EE deployments to see the classes exported by +the global modules.

+
+
+

Each global module is defined through the module resource, an example +of its XML configuration:

+
+
+
+
  <global-modules>
+    <module name="org.jboss.logging" slot="main"/>
+    <module name="org.apache.logging.log4j.api" annotations="true" meta-inf="true" services="false" />
+  </global-modules>
+
+
+
+

The only mandatory attribute is the JBoss Modules module name, the slot +attribute defaults to main, and both define the JBoss Modules module ID to +reference.

+
+
+

The optional annotations attribute, which defaults to false, +indicates if a pre-computed annotation index should be imported from +META-INF/jandex.idx

+
+
+

The optional services attribute indicates if any services exposed in +META-INF/services should be made available to the deployments class +loader, and defaults to false.

+
+
+

The optional meta-inf attribute, which defaults to true, indicates +if the Module’s META-INF path should be available to the deployment’s +class loader.

+
+
+
+
Global Directory
+
+

Global modules can be used to share common libraries across all deployed applications, but it could be impractical if the name of a shared library changes very often or if there are many libraries you want to share. Both cases will require changes in the underlying module.xml that represents this global module.

+
+
+

The EE subsystem allows the configuration of a global directory, which represents a directory tree scanned automatically to include .jar files and resources as a single additional dependency. This module dependency is added as a system dependency on each deployed application. Basically, with a global directory, you will be relying on WildFly to automate the maintenance and configuration of a JBoss Modules module that represents the jar files and resources of a specific directory.

+
+
+

You can configure a global directory using the following operation:

+
+
+
+
  [standalone@localhost:9990 /] /subsystem=ee/global-directory=my-common-libs:add(path=lib, relative-to=jboss.home.dir)
+
+
+
+

The following attributes are available on the global-directory resource:

+
+
+
    +
  • +

    path: The path of the directory to scan. (Mandatory)

    +
  • +
  • +

    relative-to: The name of another previously named path, or of one of the standard paths provided by the system. (Optional)

    +
  • +
+
+
+

When a global-directory is created, the server establishes a JBoss Modules module with one Path Resource Loader created using 'path' and 'relative-to' attributes and one Jar Resource loader for each jar file included in this directory and its subdirectories.

+
+
+

The 'Path Resource Loader' will make available any file as a resource to the application. The 'Jar Resource loader' will make available any class inside of the jar file to the applications.

+
+
+

For example, suppose you have configured one global directory pointing to the following directory tree:

+
+
+
+
/my-common-libs/Z/a-lib.jar
+/my-common-libs/A/A/z-lib.jar
+/my-common-libs/A/a-lib.jar
+/my-common-libs/A/b-lib.jar
+/my-common-libs/a-lib.jar
+/my-common-libs/A/B/a-lib.jar
+/my-common-libs/properties-1.properties
+/my-common-libs/A/B/properties-2.properties
+
+
+
+

The JBoss Modules module generated after scanning this global-directory will be equivalent to the following module.xml:

+
+
+
+
<module xmlns="urn:jboss:module:1.9" name="deployment.external.global-directory.my-common-libs">
+    <resources>
+        <resource-root path="/my-common-libs"/>
+        <resource-root path="/my-common-libs/a-lib.jar"/>
+        <resource-root path="/my-common-libs/A/a-lib.jar"/>
+        <resource-root path="/my-common-libs/A/b-lib.jar"/>
+        <resource-root path="/my-common-libs/A/A/z-lib.jar"/>
+        <resource-root path="/my-common-libs/A/B/a-lib.jar"/>
+        <resource-root path="/my-common-libs/Z/a-lib.jar"/>
+    </resources>
+
+    <dependencies>
+        <module name="javaee.api"/>
+    </dependencies>
+</module>
+
+
+
+

The name of the generated module follows the pattern deployment.external.global-directory.{global-directory-name} and as such, it can be excluded selectively using your deployment-structure.xml.

+
+
+

All resources will be available from the application class loader. For example, you could access the above property files using the context ClassLoader of your current thread:

+
+
+
+
Thread.currentThread().getContextClassLoader().getResourceAsStream("properties-1.properties");
+Thread.currentThread().getContextClassLoader().getResourceAsStream("A/B/properties-2.properties");
+
+
+
+

All classes inside of each jar file will also be available, and the order of how the resource-root are created internally will govern the order of the class loading. The jar resources of the generated module will be created iterating over all jar files found in the directory tree. Each directory is scanned alphabetically starting from the root, and on each level, each subdirectory is also explored alphabetically until visiting all the branch. Files found on each level are also added in alphabetical order.

+
+
+

Notice you should know which classes are exposed on each .jar file and avoid conflicts including the same class twice with incompatible binary change. In those cases, classloading errors are likely to occur. Specifically, you should not add classes that interfere with the classes the server already makes available for your application; the goal of a global directory is not to override and replace existing library versions shipped with the server. It is a facility that will allow moving common frameworks you usually add to your application libs to a common place to facilitate maintenance.

+
+
+

The module created from the shared directory is loaded as soon as the first application is deployed in the server after creating the global-directory. That means, if the server is started/restarted and there are no applications deployed, then the global directory is neither scanned nor the module loaded. Any change in any of the contents of the global-directory will require a server reload to make them available to the deployed applications.

+
+
+

In case of domain mode or distributed environments, it is the user responsibility to make the content of the configured global directory consistent across all the server instances, as well as distribute the jar files that they contain.

+
+
+
+
EAR Subdeployments Isolation
+
+

A flag indicating whether each of the subdeployments within a .ear can +access classes belonging to another subdeployment within the same +.ear. The default value is false, which allows the subdeployments to +see classes belonging to other subdeployments within the .ear.

+
+
+
+
  <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
+
+
+
+

For example:

+
+
+
+
myapp.ear
+|
+|--- web.war
+|
+|--- ejb1.jar
+|
+|--- ejb2.jar
+
+
+
+

If the ear-subdeployments-isolated is set to false, then the classes +in web.war can access classes belonging to ejb1.jar and ejb2.jar. +Similarly, classes from ejb1.jar can access classes from ejb2.jar +(and vice-versa).

+
+
+ + + + + +
+ + +This flag has no effect on the isolated classloader of the .war +file(s), i.e. irrespective of whether this flag is set to true or +false, the .war within a .ear will have a isolated classloader, +and other subdeployments within that .ear will not be able to access +classes from that .war. This is as per spec. +
+
+
+
+
Property Replacement
+
+

The EE subsystem configuration includes flags to configure whether +system property replacement will be done on XML descriptors and Java +Annotations included in Jakarta EE deployments.

+
+
+ + + + + +
+ + +System properties etc are resolved in the security context of the +application server itself, not the deployment that contains the file. +This means that if you are running with a security manager and enable +this property, a deployment can potentially access system properties or +environment entries that the security manager would have otherwise +prevented. +
+
+
+
Spec Descriptor Property Replacement
+
+

Flag indicating whether system property replacement will be performed on +standard Jakarta EE XML descriptors. If not configured this defaults to +true, however it is set to false in the standard configuration files +shipped with WildFly.

+
+
+
+
  <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
+
+
+
+

When enabled, properties can be replaced in the following deployment descriptors:

+
+
+
    +
  • +

    ejb-jar.xml

    +
  • +
  • +

    persistence.xml

    +
  • +
  • +

    application.xml

    +
  • +
  • +

    web.xml

    +
  • +
  • +

    permissions.xml

    +
  • +
+
+
+
+
JBoss Descriptor Property Replacement
+
+

Flag indicating whether system property replacement will be performed on +WildFly proprietary XML descriptors, such as jboss-app.xml. This +defaults to true.

+
+
+
+
  <jboss-descriptor-property-replacement>false</jboss-descriptor-property-replacement>
+
+
+
+

When enabled, properties can be replaced in the following deployment descriptors:

+
+
+
    +
  • +

    jboss-ejb3.xml

    +
  • +
  • +

    jboss-app.xml

    +
  • +
  • +

    jboss-web.xml

    +
  • +
  • +

    jboss-permissions.xml

    +
  • +
  • +

    *-jms.xml

    +
  • +
  • +

    *-ds.xml

    +
  • +
+
+
+
+
Annotation Property Replacement
+
+

Flag indicating whether system property replacement will be performed on +Java annotations. The default value is false.

+
+
+
+
  <annotation-property-replacement>false</annotation-property-replacement>
+
+
+
+
+
+
+

7.1.2. EE Concurrency Utilities

+
+

EE Concurrency Utilities (JSR 236) were introduced to +ease the task of writing multithreaded applications. Instances +of these utilities are managed by WildFly, and the related configuration.

+
+
+
Context Services
+
+

The Context Service is a concurrency utility which creates contextual +proxies from existent objects. WildFly Context Services are also used to +propagate the context from a Jakarta EE application invocation thread, to +the threads internally used by the other EE Concurrency Utilities. +Context Service instances may be created using the subsystem XML +configuration:

+
+
+
+
  <context-services>
+    <context-service
+ name="default"
+ jndi-name="java:jboss/ee/concurrency/context/default"
+ use-transaction-setup-provider="true" />
+  </context-services>
+
+
+
+

The name attribute is mandatory, and it’s value should be a unique +name within all Context Services.

+
+
+

The jndi-name attribute is also mandatory, and defines where in the +JNDI the Context Service should be placed.

+
+
+

The optional use-trasaction-setup-provider attribute indicates if the +contextual proxies built by the Context Service should suspend +transactions in context, when invoking the proxy objects, and its value +defaults to true.

+
+
+

Management clients, such as the WildFly CLI, may also be used to +configure Context Service instances. An example to add and remove +one named other:

+
+
+
+
/subsystem=ee/context-service=other:add(jndi-name=java\:jboss\/ee\/concurrency\/other)
+/subsystem=ee/context-service=other:remove
+
+
+
+
+
Managed Thread Factories
+
+

The Managed Thread Factory allows Jakarta EE applications to create new +threads. WildFly Managed Thread Factory instances may also, optionally, +use a Context Service instance to propagate the Jakarta EE application +thread’s context to the new threads. Instance creation is done through +the EE subsystem, by editing the subsystem XML configuration:

+
+
+
+
  <managed-thread-factories>
+    <managed-thread-factory
+ name="default"
+ jndi-name="java:jboss/ee/concurrency/factory/default"
+ context-service="default"
+ priority="1" />
+  </managed-thread-factories>
+
+
+
+

The name attribute is mandatory, and it’s value should be a unique +name within all Managed Thread Factories.

+
+
+

The jndi-name attribute is also mandatory, and defines where in the +JNDI the Managed Thread Factory should be placed.

+
+
+

The optional context-service references an existent Context Service by +its name. If specified then thread created by the factory will +propagate the invocation context, present when creating the thread.

+
+
+

The optional priority indicates the priority for new threads created +by the factory, and defaults to 5.

+
+
+

Management clients, such as the WildFly CLI, may also be used to +configure Managed Thread Factory instances. An example to add and +remove one named other:

+
+
+
+
/subsystem=ee/managed-thread-factory=other:add(jndi-name=java\:jboss\/ee\/factory\/other)
+/subsystem=ee/managed-thread-factory=other:remove
+
+
+
+
+
Managed Executor Services
+
+

The Managed Executor Service is the Jakarta EE adaptation of Java SE +Executor Service, providing to Jakarta EE applications the functionality of +asynchronous task execution. WildFly is responsible to manage the +lifecycle of Managed Executor Service instances, which are specified +through the EE subsystem XML configuration:

+
+
+
+
<managed-executor-services>
+    <managed-executor-service
+        name="default"
+        jndi-name="java:jboss/ee/concurrency/executor/default"
+        context-service="default"
+        thread-factory="default"
+        hung-task-threshold="60000"
+        hung-task-termination-period="60000"
+        core-threads="5"
+        max-threads="25"
+        keepalive-time="5000"
+        queue-length="1000000"
+        reject-policy="RETRY_ABORT" />
+</managed-executor-services>
+
+
+
+

The name attribute is mandatory, and it’s value should be a unique +name within all Managed Executor Services.

+
+
+

The jndi-name attribute is also mandatory, and defines where in the +JNDI the Managed Executor Service should be placed.

+
+
+

The optional context-service references an existent Context Service by +its name. If specified then the referenced Context Service will +capture the invocation context present when submitting a task to the +executor, which will then be used when executing the task.

+
+
+

The optional thread-factory references an existent Managed Thread +Factory by its name, to handle the creation of internal threads. If +not specified then a Managed Thread Factory with default configuration +will be created and used internally.

+
+
+

The mandatory core-threads provides the number of threads to keep in +the executor’s pool, even if they are idle. If this is not defined or +is set to 0, the core pool size will be calculated based on the number +of available processors.

+
+
+

The optional queue-length indicates the number of tasks that can be +stored in the input queue. The default value is 0, which means the +queue capacity is unlimited.

+
+
+

The executor’s task queue is based on the values of the attributes +core-threads and queue-length:

+
+
+
    +
  • +

    If queue-length is 0, or queue-length is +Integer.MAX_VALUE (2147483647) and core-threads is 0, direct +handoff queuing strategy will be used and a synchronous queue will be +created.

    +
  • +
  • +

    If queue-length is Integer.MAX_VALUE but core-threads is not +0, an unbounded queue will be used.

    +
  • +
  • +

    For any other valid value for queue-length, a bounded queue wil be +created.

    +
  • +
+
+
+

The optional hung-task-threshold defines a runtime threshold value, in +milliseconds, for tasks to be considered hung by the executor. +A value of 0 will never consider tasks to be hung.

+
+
+

The optional hung-task-termination-period defines the period, in +milliseconds, for attempting the termination of hung tasks, by cancelling +their execution, and interrupting their executing threads. Please note +that the termination of a cancelled hung task is not guaranteed. +A value of 0, which is the default, deactivates the periodic +cancellation of hung tasks. Management clients, such as the WildFly CLI, +may still be used to manually attempt the termination of hung tasks:

+
+
+
+
/subsystem=ee/managed-executor-service=other:terminate-hung-tasks
+
+
+
+

The optional long-running-tasks is a hint to optimize the execution of +long running tasks, and defaults to false.

+
+
+

The optional max-threads defines the the maximum number of threads +used by the executor, which defaults to Integer.MAX_VALUE (2147483647).

+
+
+

The optional keepalive-time defines the time, in milliseconds, that an +internal thread may be idle. The attribute default value is 60000.

+
+
+

The optional reject-policy defines the policy to use when a task is +rejected by the executor. The attribute value may be the default +ABORT, which means an exception should be thrown, or RETRY_ABORT, +which means the executor will try to submit it once more, before +throwing an exception.

+
+
+

Management clients, such as the WildFly CLI, may also be used to +configure Managed Executor Service instances. An example to add and +remove one named other:

+
+
+
+
/subsystem=ee/managed-executor-service=other:add(jndi-name=java\:jboss\/ee\/executor\/other, core-threads=2)
+/subsystem=ee/managed-executor-service=other:remove
+
+
+
+
+
Managed Scheduled Executor Services
+
+

The Managed Scheduled Executor Service is the Jakarta EE adaptation of Java +SE Scheduled Executor Service, providing to Jakarta EE applications the +functionality of scheduling task execution. WildFly is responsible to +manage the lifecycle of Managed Scheduled Executor Service instances, +which are specified through the EE subsystem XML configuration:

+
+
+
+
<managed-scheduled-executor-services>
+    <managed-scheduled-executor-service
+        name="default"
+        jndi-name="java:jboss/ee/concurrency/scheduler/default"
+        context-service="default"
+        thread-factory="default"
+        hung-task-threshold="60000"
+        core-threads="5"
+        keepalive-time="5000"
+        reject-policy="RETRY_ABORT" />
+</managed-scheduled-executor-services>
+
+
+
+

The name attribute is mandatory, and it’s value should be a unique +name within all Managed Scheduled Executor Services.

+
+
+

The jndi-name attribute is also mandatory, and defines where in the +JNDI the Managed Scheduled Executor Service should be placed.

+
+
+

The optional context-service references an existent Context Service by +its name. If specified then the referenced Context Service will +capture the invocation context present when submitting a task to the +executor, which will then be used when executing the task.

+
+
+

The optional thread-factory references an existent Managed Thread +Factory by its name, to handle the creation of internal threads. If +not specified then a Managed Thread Factory with default configuration +will be created and used internally.

+
+
+

The mandatory core-threads provides the number of threads to keep in +the executor’s pool, even if they are idle. A value of 0 means there +is no limit.

+
+
+

The optional hung-task-threshold defines a runtime threshold value, in +milliseconds, for tasks to be considered hung by the executor. +A value of 0 will never consider tasks to be hung.

+
+
+

The optional hung-task-termination-period defines the period, in +milliseconds, for attempting the termination of hung tasks, by cancelling +their execution, and interrupting their executing threads. Please note +that the termination of a cancelled hung task is not guaranteed. +A value of 0, which is the default, deactivates the periodic +cancellation of hung tasks. Management clients, such as the WildFly CLI, +may still be used to manually attempt the termination of hung tasks:

+
+
+
+
/subsystem=ee/managed-scheduled-executor-service=other:terminate-hung-tasks
+
+
+
+

The optional long-running-tasks is a hint to optimize the execution of +long running tasks, and defaults to false.

+
+
+

The optional keepalive-time defines the time, in milliseconds, that an +internal thread may be idle. The attribute default value is 60000.

+
+
+

The optional reject-policy defines the policy to use when a task is +rejected by the executor. The attribute value may be the default +ABORT, which means an exception should be thrown, or RETRY_ABORT, +which means the executor will try to submit it once more, before +throwing an exception.

+
+
+

Management clients, such as the WildFly CLI, may also be used to +configure Managed Scheduled Executor Service instances. An example to +add and remove one named other:

+
+
+
+
/subsystem=ee/managed-scheduled-executor-service=other:add(jndi-name=java\:jboss\/ee\/scheduler\/other, core-threads=2)
+/subsystem=ee/managed-scheduled-executor-service=other:remove
+
+
+
+
+
+

7.1.3. Default EE Bindings

+
+

The Jakarta EE Specification mandates the existence of a default instance +for each of the following resources:

+
+
+
    +
  • +

    Context Service

    +
  • +
  • +

    Datasource

    +
  • +
  • +

    Jakarta Messaging Connection Factory

    +
  • +
  • +

    Managed Executor Service

    +
  • +
  • +

    Managed Scheduled Executor Service

    +
  • +
  • +

    Managed Thread Factory

    +
  • +
+
+
+

The EE subsystem looks up the default instances from JNDI, using the +names in the default bindings configuration, before placing those in the +standard JNDI names, such as java:comp/DefaultManagedExecutorService:

+
+
+
+
  <default-bindings
+ context-service="java:jboss/ee/concurrency/context/default"
+ datasource="java:jboss/datasources/ExampleDS"
+ jms-connection-factory="java:jboss/DefaultJMSConnectionFactory"
+ managed-executor-service="java:jboss/ee/concurrency/executor/default"
+ managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default"
+ managed-thread-factory="java:jboss/ee/concurrency/factory/default" />
+
+
+
+

Above bindings become application dependencies upon deployment. However in some cases +they might not be required or covered by non-default resources. In such case default binding could be:

+
+
+
+
+
    +
  • +

    rewriten - to point to user configured resource( :write-attribute(name=…​,value=…​) )

    +
  • +
  • +

    undefined - if there is no need for runtime dependency( :undefine-attribute(name=…​) )

    +
  • +
+
+
+
+
+ + + + + +
+ + +The default bindings are optional, if the jndi name for a default +binding is not configured then the related resource will not be +available to Jakarta EE applications. +
+
+
+ + + + + +
+ + +If default EE resources are not required and bindings do not point at them, +it is safe to remove or turn off default services. +
+
+
+
+
+

7.2. Naming Subsystem Configuration

+
+

The Naming subsystem provides the JNDI implementation on WildFly, and +its configuration allows to:

+
+
+
    +
  • +

    bind entries in global JNDI namespaces

    +
  • +
  • +

    turn off/on the remote JNDI interface

    +
  • +
+
+
+

The subsystem name is naming and this document covers Naming subsystem +version 2.0, which XML namespace within WildFly XML configurations is +urn:jboss:domain:naming:2.0. The path for the subsystem’s XML schema, +within WildFly’s distribution, is docs/schema/jboss-as-naming_2_0.xsd.

+
+
+

Subsystem XML configuration example with all elements and attributes +specified:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:naming:2.0">
+    <bindings>
+        <simple name="java:global/a" value="100" type="int" />
+        <simple name="java:global/jboss.org/docs/url" value="https://docs.jboss.org" type="java.net.URL" />
+        <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory" />
+        <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
+            <environment>
+                <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
+                <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
+                <property name="java.naming.security.authentication" value="simple" />
+                <property name="java.naming.security.principal" value="uid=admin,ou=system" />
+                <property name="java.naming.security.credentials" value="secret" />
+            </environment>
+        </external-context>
+        <lookup name="java:global/c" lookup="java:global/b" />
+    </bindings>
+    <remote-naming/>
+</subsystem>
+
+
+
+

7.2.1. Global Bindings Configuration

+
+

The Naming subsystem configuration allows binding entries into the +following global JNDI namespaces:

+
+
+
    +
  • +

    java:global

    +
  • +
  • +

    java:jboss

    +
  • +
  • +

    java:

    +
  • +
+
+
+ + + + + +
+ + +If WildFly is to be used as a Jakarta EE application server, then it’s +recommended to opt for java:global, since it is a standard (i.e. +portable) namespace. +
+
+
+

Four different types of bindings are supported:

+
+
+
    +
  • +

    Simple

    +
  • +
  • +

    Object Factory

    +
  • +
  • +

    External Context

    +
  • +
  • +

    Lookup

    +
  • +
+
+
+

In the subsystem’s XML configuration, global bindings are configured +through the <bindings /> XML element, as an example:

+
+
+
+
<bindings>
+    <simple name="java:global/a" value="100" type="int" />
+    <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory" />
+    <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
+        <environment>
+            <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
+            <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
+            <property name="java.naming.security.authentication" value="simple" />
+            <property name="java.naming.security.principal" value="uid=admin,ou=system" />
+            <property name="java.naming.security.credentials" value="secret" />
+        </environment>
+    </external-context>
+    <lookup name="java:global/c" lookup="java:global/b" />
+</bindings>
+
+
+
+
Simple Bindings
+
+

A simple binding is a primitive or java.net.URL entry, and it is defined +through the simple XML element. An example of its XML configuration:

+
+
+
+
<simple name="java:global/a" value="100" type="int" />
+
+
+
+

The name attribute is mandatory and specifies the target JNDI name for +the entry.

+
+
+

The value attribute is mandatory and defines the entry’s value.

+
+
+

The optional type attribute, which defaults to java.lang.String, +specifies the type of the entry’s value. Besides java.lang.String, +allowed types are all the primitive types and their corresponding object +wrapper classes, such as int or java.lang.Integer, and java.net.URL.

+
+
+

Management clients, such as the WildFly CLI, may be used to configure +simple bindings. An example to add and remove the one in the XML +example above:

+
+
+
+
/subsystem=naming/binding=java\:global\/a:add(binding-type=simple, type=int, value=100)
+/subsystem=naming/binding=java\:global\/a:remove
+
+
+
+
+
Object Factories
+
+

The Naming subsystem configuration allows the binding of +javax.naming.spi.ObjectFactory entries, through the object-factory +XML element, for instance:

+
+
+
+
<object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory">
+    <environment>
+        <property name="p1" value="v1" />
+        <property name="p2" value="v2" />
+    </environment>
+</object-factory>
+
+
+
+

The name attribute is mandatory and specifies the target JNDI name for +the entry.

+
+
+

The class attribute is mandatory and defines the object factory’s Java +type.

+
+
+

The module attribute is mandatory and specifies the JBoss Module ID +where the object factory Java class may be loaded from.

+
+
+

The optional environment child element may be used to provide a custom +environment to the object factory.

+
+
+

Management clients, such as the WildFly CLI, may be used to configure +object factory bindings. An example to add and remove the one in the +XML example above:

+
+
+
+
/subsystem=naming/binding=java\:global\/foo\/bar\/factory:add(binding-type=object-factory, module=org.foo.bar, class=org.foo.bar.ObjectFactory, environment=[p1=v1, p2=v2])
+/subsystem=naming/binding=java\:global\/foo\/bar\/factory:remove
+
+
+
+
+
External Context Federation
+
+

Federation of external JNDI contexts, such as a LDAP context, are +achieved by adding External Context bindings to the global bindings +configuration, through the external-context XML element. An example of +its XML configuration:

+
+
+
+
<external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
+    <environment>
+        <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
+        <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
+        <property name="java.naming.security.authentication" value="simple" />
+        <property name="java.naming.security.principal" value="uid=admin,ou=system" />
+        <property name="java.naming.security.credentials" value="secret" />
+    </environment>
+</external-context>
+
+
+
+

The name attribute is mandatory and specifies the target JNDI name for +the entry.

+
+
+

The class attribute is mandatory and indicates the Java initial naming +context type used to create the federated context. Note that such type +must have a constructor with a single environment map argument.

+
+
+

The optional module attribute specifies the JBoss Module ID where any +classes required by the external JNDI context may be loaded from.

+
+
+

The optional cache attribute, which value defaults to false, +indicates if the external context instance should be cached.

+
+
+

The optional environment child element may be used to provide the +custom environment needed to lookup the external context.

+
+
+

Management clients, such as the WildFly CLI, may be used to configure +external context bindings. An example to add and remove the one in +the XML example above:

+
+
+
+
/subsystem=naming/binding=java\:global\/federation\/ldap\/example:add(binding-type=external-context, cache=true, class=javax.naming.directory.InitialDirContext, environment=[java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap\:\/\/ldap.example.com\:389, java.naming.security.authentication=simple, java.naming.security.principal=uid\=admin\,ou\=system, java.naming.security.credentials= secret])
+ 
+/subsystem=naming/binding=java\:global\/federation\/ldap\/example:remove
+
+
+
+

Some JNDI providers may fail when their resources are looked up if they +do not implement properly the lookup(Name) method. Their errors would +look like:

+
+ +++ + + + + + +
11:31:49,047 ERROR org.jboss.resource.adapter.jms.inflow.JmsActivation +(default-threads -1) javax.naming.InvalidNameException: Only support +CompoundName namesat +com.tibco.tibjms.naming.TibjmsContext.lookup(TibjmsContext.java:504)at +javax.naming.InitialContext.lookup(InitialContext.java:421)
+
+

To work around their shortcomings, the +org.jboss.as.naming.lookup.by.string property can be specified in the +external-context’s environment to use instead the lookup(String) method +(with a performance degradation):

+
+
+
+
<property name="org.jboss.as.naming.lookup.by.string" value="true"/>
+
+
+
+

Binding Aliases

+
+
+

The Naming subsystem configuration allows the binding of existent +entries into additional names, i.e. aliases. Binding aliases are +specified through the lookup XML element. An example of its XML +configuration:

+
+
+
+
<lookup name="java:global/c" lookup="java:global/b" />
+
+
+
+

The name attribute is mandatory and specifies the target JNDI name for +the entry.

+
+
+

The lookup attribute is mandatory and indicates the source JNDI name. +It can chain lookups on external contexts. For example, having an +external context bounded to java:global/federation/ldap/example, +searching can be done there by setting lookup attribute to +java:global/federation/ldap/example/subfolder.

+
+
+

Management clients, such as the WildFly CLI, may be used to configure +binding aliases. An example to add and remove the one in the XML +example above:

+
+
+
+
/subsystem=naming/binding=java\:global\/c:add(binding-type=lookup, lookup=java\:global\/b)
+/subsystem=naming/binding=java\:global\/c:remove
+
+
+
+
+
+

7.2.2. Remote JNDI Configuration

+
+

The Naming subsystem configuration may be used to (de)activate the +remote JNDI interface, which allows clients to lookup entries present in +a remote WildFly instance.

+
+
+ + + + + +
+ + +Only entries within the java:jboss/exported context are accessible +over remote JNDI. +
+
+
+

In the subsystem’s XML configuration, remote JNDI access bindings are +configured through the <remote-naming /> XML element:

+
+
+
+
<remote-naming />
+
+
+
+

Management clients, such as the WildFly CLI, may be used to add/remove +the remote JNDI interface. An example to add and remove the one in +the XML example above:

+
+
+
+
/subsystem=naming/service=remote-naming:add
+/subsystem=naming/service=remote-naming:remove
+
+
+
+
+
+

7.3. DataSource configuration

+
+

Datasources are configured through the datasource subsystem. Declaring +a new datasource consists of two separate steps: You would need to +provide a JDBC driver and define a datasource that references the driver +you installed.

+
+
+

7.3.1. JDBC Driver Installation

+
+

The recommended way to install a JDBC driver into WildFly 29 is to deploy +it as a regular JAR deployment. The reason for this is that when you run +WildFly in domain mode, deployments are automatically propagated to all +servers to which the deployment applies; thus distribution of the driver +JAR is one less thing for you to worry about!

+
+
+

Any JDBC 4-compliant driver will automatically be recognized and +installed into the system by name and version. A JDBC JAR is identified +using the Java service provider mechanism. Such JARs will contain a text +a file named META-INF/services/java.sql.Driver, which contains the +name of the class(es) of the Drivers which exist in that JAR. If your +JDBC driver JAR is not JDBC 4-compliant, it can be made deployable in +one of a few ways.

+
+
+

Modify the JAR

+
+
+

The most straightforward solution is to simply modify the JAR and add +the missing file. You can do this from your command shell by:

+
+
+
    +
  1. +

    Change to, or create, an empty temporary directory.

    +
  2. +
  3. +

    Create a META-INF subdirectory.

    +
  4. +
  5. +

    Create a META-INF/services subdirectory.

    +
  6. +
  7. +

    Create a META-INF/services/java.sql.Driver file which contains one +line - the fully-qualified class name of the JDBC driver.

    +
  8. +
  9. +

    Use the jar command-line tool to update the JAR like this:

    +
  10. +
+
+
+
+
jar \-uf jdbc-driver.jar META-INF/services/java.sql.Driver
+
+
+
+

For a detailed explanation how to deploy JDBC 4 compliant driver jar, +please refer to the chapter " Application Deployment".

+
+
+
+

7.3.2. Datasource Definitions

+
+

The datasource itself is defined within the subsystem datasources:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:datasources:4.0">
+    <datasources>
+        <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS">
+            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
+            <driver>h2</driver>
+            <pool>
+                <min-pool-size>10</min-pool-size>
+                <max-pool-size>20</max-pool-size>
+                <prefill>true</prefill>
+            </pool>
+            <security>
+                <user-name>sa</user-name>
+                <password>sa</password>
+            </security>
+        </datasource>
+        <xa-datasource jndi-name="java:jboss/datasources/ExampleXADS" pool-name="ExampleXADS">
+           <driver>h2</driver>
+           <xa-datasource-property name="URL">jdbc:h2:mem:test</xa-datasource-property>
+           <xa-pool>
+                <min-pool-size>10</min-pool-size>
+                <max-pool-size>20</max-pool-size>
+                <prefill>true</prefill>
+           </xa-pool>
+           <security>
+                <user-name>sa</user-name>
+                <password>sa</password>
+           </security>
+        </xa-datasource>
+        <drivers>
+            <driver name="h2" module="com.h2database.h2">
+                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
+            </driver>
+        </drivers>
+  </datasources>
+ 
+</subsystem>
+
+
+
+

(See standalone/configuration/standalone.xml )

+
+
+

As you can see the datasource references a driver by it’s logical name.

+
+
+

You can easily query the same information through the CLI:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=datasources:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "data-source" => {"H2DS" => {
+            "connection-url" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1",
+            "jndi-name" => "java:/H2DS",
+            "driver-name" => "h2",
+            "pool-name" => "H2DS",
+            "use-java-context" => true,
+            "enabled" => true,
+            "jta" => true,
+            "pool-prefill" => true,
+            "pool-use-strict-min" => false,
+            "user-name" => "sa",
+            "password" => "sa",
+            "flush-strategy" => "FailingConnectionOnly",
+            "background-validation" => false,
+            "use-fast-fail" => false,
+            "validate-on-match" => false,
+            "use-ccm" => true
+        }},
+        "xa-data-source" => undefined,
+        "jdbc-driver" => {"h2" => {
+            "driver-name" => "h2",
+            "driver-module-name" => "com.h2database.h2",
+            "driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource"
+        }}
+    }
+}
+ 
+ 
+[standalone@localhost:9990 /] /subsystem=datasources:installed-drivers-list
+{
+    "outcome" => "success",
+    "result" => [{
+        "driver-name" => "h2",
+        "datasource-class-info" => [{"org.h2.jdbcx.JdbcDataSource" => {
+            "URL" => "java.lang.String",
+            "description" => "java.lang.String",
+            "loginTimeout" => "int",
+            "password" => "java.lang.String",
+            "url" => "java.lang.String",
+            "user" => "java.lang.String"
+        }}],
+        "deployment-name" => undefined,
+        "driver-module-name" => "com.h2database.h2",
+        "module-slot" => "main",
+        "driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource",
+        "driver-class-name" => "org.h2.Driver",
+        "driver-major-version" => 1,
+        "driver-minor-version" => 3,
+        "jdbc-compliant" => true
+    }]
+}
+
+
+
+ + + + + +
+ + +datasource-class-info shows connection properties defined in the (xa-)datasource-class. +
+
+
+ + + + + +
+ + +Using the web console or the CLI greatly simplifies the deployment of +JDBC drivers and the creation of datasources. +
+
+
+

The CLI offers a set of commands to create and modify datasources:

+
+
+
+
[standalone@localhost:9990 /] data-source --help
+ 
+SYNOPSIS
+  data-source --help [--properties | --commands] |
+              (--name=<resource_id> (--<property>=<value>)*) |
+              (<command> --name=<resource_id> (--<parameter>=<value>)*)
+              [--headers={<operation_header> (;<operation_header>)*}]
+DESCRIPTION
+  The command is used to manage resources of type /subsystem=datasources/data-source.
+[...]
+ 
+ 
+[standalone@localhost:9990 /] xa-data-source --help
+ 
+SYNOPSIS
+  xa-data-source --help [--properties | --commands] |
+                 (--name=<resource_id> (--<property>=<value>)*) |
+                 (<command> --name=<resource_id> (--<parameter>=<value>)*)
+                 [--headers={<operation_header> (;<operation_header>)*}]
+ 
+DESCRIPTION
+  The command is used to manage resources of type /subsystem=datasources/xa-data-source.
+ 
+RESOURCE DESCRIPTION
+  A JDBC XA data-source configuration
+ 
+[...]
+
+
+
+
+

7.3.3. Component Reference

+
+

The datasource subsystem is provided by the +IronJacamar project. For a detailed +description of the available configuration properties, please consult +the project documentation.

+
+ +
+
+
+

7.4. Agroal configuration

+
+

The Agroal subsystem allows the definition of datasources. Declaring a new datasource consists of two separate steps: provide a JDBC driver and define a datasource that references the driver you installed.

+
+
+

The Agroal subsystem is provided by the Agroal project. For a detailed description of the available configuration properties, please consult the project documentation.

+
+
+

7.4.1. Enabling the subsystem

+
+

If the WildFly configuration does not have Agroal subsystem enabled by default, it can be enabled in the following ways.

+
+
+
+
<extensions>
+    <extension module="org.wildfly.extension.datasources-agroal"/>
+    [...]
+</extensions>
+<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
+    [...]
+</subsystem>
+
+
+
+
+
[standalone@localhost:9990  /] /extension=org.wildfly.extension.datasources-agroal:add
+{"outcome" => "success"}
+[standalone@localhost:9990  /] /subsystem=datasources-agroal:add
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+
+

7.4.2. JDBC Driver Installation

+
+

A driver definition is a reference to a class in a JDBC driver. Multiple definitions can be created on the same JDBC driver for multiple classes in it. Agroal requires an implementation of java.sql.Driver or javax.sql.DataSource for non-XA datasources, while for XA a javax.sql.XADataSource implementation is required.

+
+
+ + + + + +
+ + +Agroal will try to load an java.sql.Driver from the specified module if the class is not defined +
+
+
+ + + + + +
+ + +Any installed driver provides an operation called class-info that lists all the properties available for that particular class, that can be set in the connection-factory. +
+
+
+
+
<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
+    [...]
+    <drivers>
+        <driver name="h2" module="com.h2database.h2" class="org.h2.Driver"/>
+    </drivers>
+</subsystem>
+
+
+
+
+
[standalone@localhost:9990  /] /subsystem=datasources-agroal/driver=h2:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "class" => "org.h2.Driver",
+        "module" => "com.h2database.h2"
+    }
+}
+
+
+
+
+

7.4.3. Common Datasource Definitions

+
+

Agroal provides both XA and non-XA datasources and most of the attributes that define them are common. This definition is mainly split in two logical units: the connection factory and the connection pool. As the name implies, the connection factory has all that is required to create new connections and connection pool defines how connections are handled by the pool.

+
+
+
Connection Factory definition
+
+

The connection factory requires a reference to a driver (see agroal-driver-installation). With a java.sql.Driver the preferred way to 'point' to the database is to specify an url attribute while for javax.sql.DataSource and javax.sql.XADataSource the preferred way is to specify connection-properties.

+
+
+ + + + + +
+ + +Attributes username and password are provided for basic authentication with the database. Agroal does not allow username and password to be set as connection-properties due to security requirements. +
+
+
+

Other features provided by the connection-factory definition include the possibility of executing a SQL statement right after the connection has been created and to specify the isolation level of transactions in the database.

+
+
+
+
<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
+     <datasource [...]>
+        [...]
+        <connection-factory driver="h2" url="jdbc:h2:tcp://localhost:1701" transaction-isolation="SERIALIZABLE" new-connection-sql="SELECT 1" username="sa" password="sa">
+            <connection-properties>
+                <property name="aProperty" value="aValue"/>
+                <property name="anotherProperty" value="anotherValue"/>
+            </connection-properties>
+        </connection-factory>
+    </datasource>
+    [...]
+</subsystem>
+
+
+
+
+
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "connection-factory" => {
+            "driver" => "h2",
+            "url" => "jdbc:h2:tcp://localhost:1701",
+            "transaction-isolation" => "SERIALIZABLE",
+            "new-connection-sql" => "SELECT 1",
+            "username" => "sa",
+            "password" => "sa",
+            "connection-properties" => {
+                "aProperty" => "aValue",
+                "anotherProperty" => "anotherValue"
+            }
+        }
+        [...]
+    }
+}
+
+
+
+
+
Connection Pool definition
+
+

The main attributes of the connection-pool definition are the ones that control it’s size. While the initial size attribute is only taken into account while bootstrapping the pool, min size and max size are always enforced and can be changed at any time without requiring a reload of the server.

+
+
+

Another important attribute of the connection-pool is the blocking timeout that defines the maximum amount of time a thread will wait for a connection. If that time elapses and still no connection is available an exception is thrown. Keep in mind that the default value is 0, meaning that a thread will wait forever for a connection to become available. Changing this setting does not require a reload of the server.

+
+
+

The connection pool provides other convenient features like background validation of connections on the pool, removal of idle connections from the pool and detection of connections held for too long by one thread. All these features are disabled by default and can be enabled by specifying an interval of time on the corresponding attribute.

+
+
+ + + + + +
+ + +There is a set of flush operations that perform many of these features on-demand. These are flush-all to close all connections immediately, flush-graceful to close all connections under normal operation, flush-invalid to remove any invalid connections from the pool and flush-idle to remove any connections not being used. +
+
+
+
+
<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
+     <datasource [...]>
+        [...]
+        <connection-pool max-size="30" min-size="10" initial-size="20" blocking-timeout="1000" background-validation="6000" leak-detection="5000" idle-removal="5"/>
+    </datasource>
+    [...]
+</subsystem>
+
+
+
+
+
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "connection-pool" => {
+            "max-size" => 30,
+            "min-size" => 10,
+            "initial-size" => 20,
+            "blocking-timeout" => 1000,
+            "background-validation" => 6000,
+            "leak-detection" => 5000,
+            "idle-removal" => 5
+        }
+        [...]
+    }
+}
+
+
+
+
+
Common datasource attributes
+
+

All datasources in Agroal have a name that’s used to locate them in the WildFly runtime model and are bound to a JNDI name.

+
+
+

The attribute statistics-enabled allow the collection of metrics regarding the pool that can be queried in the runtime model

+
+
+ + + + + +
+ + +There is also a reset-statistics operation provided. +
+
+
+
+
<subsystem xmlns="urn:jboss:domain:agroal:1.0">
+    <xa-datasource name="sample-xa" jndi-name="java:jboss/datasources/ExampleXADS" statistics-enabled="true">
+        [...]
+    </xa-datasource>
+    [...]
+</subsystem>
+
+
+
+
+
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample-xa:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "jndi-name" => "java:jboss/datasources/ExampleXADS",
+        "statistics-enabled" => true
+        [...]
+    }
+}
+
+
+
+

The available statistics include the number of created / destroyed connections and the number of connections in use / available in the pool. There are also statistics for the time it takes to create a connection and for how long have threads been blocked waiting for a connection.

+
+
+
+
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample:read-resource(include-runtime)
+{
+    "outcome" => "success",
+    "result" => {
+        "statistics" => {
+            "acquire-count" => 10L,
+            "active-count" => 3L,
+            "available-count" => 17L,
+            "awaiting-count" => 0L,
+            "creation-count" => 20L,
+            "destroy-count" => 0L,
+            "flush-count" => 0L,
+            "invalid-count" => 0L,
+            "leak-detection-count" => 0L,
+            "max-used-count" => 20L,
+            "reap-count" => 0L,
+            "blocking-time-average-ms" => 0L,
+            "blocking-time-max-ms" => 0L,
+            "blocking-time-total-ms" => 0L,
+            "creation-time-average-ms" => 96L,
+            "creation-time-max-ms" => 815L,
+            "creation-time-total-ms" => 964L
+        }
+        [...]
+    }
+}
+
+
+
+
+
DataSource specific attributes
+
+

In addition to all the common attributes, a datasource definition may disable the Jakarta Transactions integration.

+
+
+

Deferred enlistment is not supported, meaning that if Jakarta Transactions is enabled a connection must always be obtained within the scope of a transaction. The connection will always be enlisted with that transaction (lazy enlistment is not supported).

+
+
+ + + + + +
+ + +The connectable attribute allows a non-XA datasource to take part in an XA transaction ('Last Resource Commit Optimization (LRCO)' / 'Commit Markable Resource') +
+
+
+
+
<subsystem xmlns="urn:jboss:domain:datasources-agroal:2.0">
+    <datasource name="sample" jndi-name="java:jboss/datasources/ExampleDS" jta="false" connectable="false" statistics-enabled="true">
+        [...]
+    </datasource>
+    [...]
+</subsystem>
+
+
+
+
+
[standalone@localhost:9990  /] /subsystem=datasources-agroal/datasource=sample-xa:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "connectable" => false,
+        "jta" => false,
+        [...]
+    }
+}
+
+
+
+
+
XADataSource specific attributes
+
+

At the moment there are no attributes specific to a XADataSource definition.

+
+
+
+
+

7.4.4. Agroal known limitations

+
+

The subsystem to define default datasources remains "datasources" at the moment.

+
+
+
+
+

7.5. Logging Configuration

+
+
+The overall server logging configuration is represented by the logging +subsystem. It consists of four notable parts: handler configurations, +logger, the root logger declarations (aka log categories) and +logging profiles. Each logger does reference a handler (or set of +handlers). Each handler declares the log format and output: +
+
+
+
+
<subsystem xmlns="urn:jboss:domain:logging:3.0">
+   <console-handler name="CONSOLE" autoflush="true">
+       <level name="DEBUG"/>
+       <formatter>
+           <named-formatter name="COLOR-PATTERN"/>
+       </formatter>
+   </console-handler>
+   <periodic-rotating-file-handler name="FILE" autoflush="true">
+       <formatter>
+           <named-formatter name="PATTERN"/>
+       </formatter>
+       <file relative-to="jboss.server.log.dir" path="server.log"/>
+       <suffix value=".yyyy-MM-dd"/>
+   </periodic-rotating-file-handler>
+   <logger category="com.arjuna">
+       <level name="WARN"/>
+   </logger>
+   [...]
+   <root-logger>
+       <level name="DEBUG"/>
+       <handlers>
+           <handler name="CONSOLE"/>
+           <handler name="FILE"/>
+       </handlers>
+   </root-logger>
+   <formatter name="PATTERN">
+       <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
+   </formatter>
+   <formatter name="COLOR-PATTERN">
+       <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
+   </formatter>
+</subsystem>
+
+
+
+

7.5.1. Attributes

+
+

The root resource contains two notable attributes +add-logging-api-dependencies and use-deployment-logging-config.

+
+
+
add-logging-api-dependencies
+
+

The add-logging-api-dependencies controls whether or not the container +adds +implicit +logging API dependencies to your deployments. If set to true, the +default, all the implicit logging API dependencies are added. If set to +false the dependencies are not added to your deployments.

+
+
+
+
use-deployment-logging-config
+
+

The use-deployment-logging-config controls whether or not your +deployment is scanned for +per-deployment +logging. If set to true, the default, +per-deployment +logging is enabled. Set to false to disable this feature.

+
+
+
+
+

7.5.2. Per-deployment Logging

+
+

Per-deployment logging allows you to add a logging configuration file to +your deployment and have the logging for that deployment configured +according to the configuration file. In an EAR the configuration should +be in the META-INF directory. In a WAR or JAR deployment the +configuration file can be in either the META-INF or WEB-INF/classes +directories.

+
+
+

The following configuration files are allowed:

+
+
+
    +
  • +

    logging.properties

    +
  • +
  • +

    jboss-logging.properties

    +
  • +
+
+
+

You can also disable this functionality by changing the +use-deployment-logging-config attribute to false.

+
+
+
+

7.5.3. Logging Profiles

+
+

Logging profiles are like additional logging subsystems. Each logging +profile constists of three of the four notable parts listed above: +handler configurations, logger and the root logger declarations.

+
+
+

You can assign a logging profile to a deployment via the deployments +manifest. Add a Logging-Profile entry to the MANIFEST.MF file with a +value of the logging profile id. For example a logging profile defined +on /subsystem=logging/logging-profile=ejbs the MANIFEST.MF would look +like:

+
+
+
+
Manifest-Version: 1.0
+Logging-Profile: ejbs
+
+
+
+

A logging profile can be assigned to any number of deployments. Using a +logging profile also allows for runtime changes to the configuration. +This is an advantage over the per-deployment logging configuration as +the redeploy is not required for logging changes to take affect.

+
+
+
+

7.5.4. Default Log File Locations

+
+
Managed Domain
+
+

In a managed domain two types of log files do exist: Controller and +server logs. The controller components govern the domain as whole. It’s +their responsibility to start/stop server instances and execute managed +operations throughout the domain. Server logs contain the logging +information for a particular server instance. They are co-located with +the host the server is running on.

+
+
+

For the sake of simplicity we look at the default setup for managed +domain. In this case, both the domain controller components and the +servers are located on the same host:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProcessLog File

Host Controller

./domain/log/host-controller.log

Process Controller

./domain/log/process-controller.log

"Server One"

./domain/servers/server-one/log/server.log

"Server Two"

./domain/servers/server-two/log/server.log

"Server Three"

./domain/servers/server-three/log/server.log

+
+
+
Standalone Server
+
+

The default log files for a standalone server can be found in the log +subdirectory of the distribution:

+
+ ++++ + + + + + + + + + + + + +
ProcessLog File

Server

./standalone/log/server.log

+
+
+
+

7.5.5. List Log Files and Reading Log Files

+
+

Log files can be listed and viewed via management operations. The log +files allowed to be viewed are intentionally limited to files that exist +in the jboss.server.log.dir and are associated with a known file +handler. Known file handler types include file-handler, +periodic-rotating-file-handler and size-rotating-file-handler. The +operations are valid in both standalone and domain modes.

+
+
+
List Log Files
+
+

The logging subsystem has a log-file resource off the subsystem root +resource and off each logging-profile resource to list each log file.

+
+
+
CLI command and output
+
+
[standalone@localhost:9990 /] /subsystem=logging:read-children-names(child-type=log-file)
+{
+    "outcome" => "success",
+    "result" => [
+        "server.log",
+        "server.log.2014-02-12",
+        "server.log.2014-02-13"
+    ]
+}
+
+
+
+
+
Read Log File
+
+

The read-log-file operation is available on each log-file resource. +This operation has 4 optional parameters.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription

encoding

the encoding the file should be read in

lines

the number of lines from the file. A value of -1 indicates all +lines should be read.

skip

the number of lines to skip before reading.

tail

true to read from the end of the file up or false to read top +down.

+
+
CLI command and output
+
+
[standalone@localhost:9990 /] /subsystem=logging/log-file=server.log:read-log-file
+{
+    "outcome" => "success",
+    "result" => [
+        "2014-02-14 14:16:48,781 INFO  [org.jboss.as.server.deployment.scanner] (MSC service thread 1-11) JBAS015012: Started FileSystemDeploymentService for directory /home/jperkins/servers/wildfly-8.0.0.Final/standalone/deployments",
+        "2014-02-14 14:16:48,782 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-8) JBAS010400: Bound data source [java:jboss/myDs]",
+        "2014-02-14 14:16:48,782 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-15) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]",
+        "2014-02-14 14:16:48,786 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-9) JBAS015876: Starting deployment of \"simple-servlet.war\" (runtime-name: \"simple-servlet.war\")",
+        "2014-02-14 14:16:48,978 INFO  [org.jboss.ws.common.management] (MSC service thread 1-10) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.3.Final",
+        "2014-02-14 14:16:49,160 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-16) JBAS017534: Registered web context: /simple-servlet",
+        "2014-02-14 14:16:49,189 INFO  [org.jboss.as.server] (Controller Boot Thread) JBAS018559: Deployed \"simple-servlet.war\" (runtime-name : \"simple-servlet.war\")",
+        "2014-02-14 14:16:49,224 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management",
+        "2014-02-14 14:16:49,224 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990",
+        "2014-02-14 14:16:49,225 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly {wildflyVersion}.0.0.Final \"WildFly\" started in 1906ms - Started 258 of 312 services (90 services are lazy, passive or on-demand)"
+    ]
+}
+
+
+
+
+
+

7.5.6. FAQ

+
+
Why is there a logging.properties file?
+
+

You may have noticed that there is a logging.properties file in the +configuration directory. This is logging configuration is used when the +server boots up until the logging subsystem kicks in. If the logging +subsystem is not included in your configuration, then this would act as +the logging configuration for the entire server.

+
+
+ + + + + +
+ + +The logging.properties file is overwritten at boot and with each +change to the logging subsystem. Any changes made to the file are not +persisted. Any changes made to the XML configuration or via management +operations will be persisted to the logging.properties file and used +on the next boot. +
+
+
+
+
+

7.5.7. Logging Formatters

+
+

Formatters are used to format a log message. A formatter can be assigned to a logging handler.

+
+
+

The logging subsystem includes 4 types of handlers:

+
+ +
+
JSON Formatter
+
+

A formatter used to format log messages in JSON.

+
+
+
Examples
+
+
Simple JSON Formatter
+
+
/subsystem=logging/json-formatter=json:add(pretty-print=true, exception-output-type=formatted)
+
+
+
+
Logstash Formatter
+
+
/subsystem=logging/json-formatter=logstash:add(exception-output-type=formatted, key-overrides=[timestamp="@timestamp"],
+meta-data=[@version=1])
+
+
+
+
+
+
Pattern Formatter
+
+

A formatter used to format log messages in plain text. The following table describes the format characters for the +pattern formatter.

+
+
+ + + + + +
+ + +Highlighted symbols indicate the calculation of the caller is required which can be expensive to resolve. +
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Pattern Syntax
SymbolDescriptionExamples

%c

The category of the logging event. A precision specifier can be used to alter the dot delimited category

+
+
%c      org.jboss.example.Foo
+%c{1}   Foo
+%c{2}   example.Foo
+%c{.}   ...Foo
+%c{1.}  o.j.e.Foo
+%c{1~.} o.~.~.Foo
+
+

%C

The class of the code calling the log method. A precision specifier can be used to alter the dot delimited class name.

+
+
%C      org.jboss.example.Foo
+%C{1}   Foo
+%C{2}   example.Foo
+%C{.}   ...Foo
+%C{1.}  o.j.e.Foo
+%C{1~.} o.~.~.Foo
+
+

%d

The timestamp the log message. Any valid SimpleDateFormat pattern. The + default is yyyy-MM-dd HH:mm:ss,SSS.

+
+
%d{HH:mm:ss,SSS}
+%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}
+
+

%D

The name of the module the log message came from. A precision specifier can be used to alter the dot delimited module + name.

+
+
%D      org.jboss.example
+%D{1}   example
+%D{2}   jboss.example
+%D{.}   ..example
+%D{1.}  o.j.example
+%D{1~.} o.~.example
+
+

%e

The exception stack trace. Accepts an argument to indicate how many levels of suppressed messages to print.

++++ + + + + + + + + + + + + + + +

%e

Prints the full stack trace.

%e{0}

Prints the stack trace ignoring any suppressed messages.

%e{1}

Prints the stack trace with a maximum of one suppressed message.

%F

The name of the file the class that logged the message.

+

 

+

%h

The short host name. This will be the first portion of the qualified host name.

+
+
%h     localhost
+
+

%H

The qualified host name. A precision specifier can be used to alter the dot delimited host name.

+
+
%H    developer.jboss.org
+%H{1} developer
+
+

%i

The process id.

+

 

+

%k

The resource bundle key.

+

 

+

%K

If colored output is supported defines the colors to map to the log message.

++++ + + + + + + + + + + +

%K{level}

The level determines the color of the output.

%K{red}

All messages will be colored red.

%l

The location information. This includes the callers class name, method name, file name and line number.

+
+
%l    org.jboss.example.Foo.bar(Foo.java:33)
+
+

%L

The line number of the caller.

+

 

+

%m

The formatted message including any stack traces.

+

 

+

%M

The callers method name.

+

 

+

%n

A platform independent line separator.

+

 

+

%N

The name of the process.

+

 

+

%p

The level of the logged message.

+

 

+

%P

The localized level of the logged message.

+

 

+

%r

The relative number of milliseconds since the given base time from the log message.

+

 

+

%s

The simple formatted message. This will not include the stack trace if a cause was logged.

+

 

+

%t

The name of the callers thread.

+

 

+

%v

The version of the module. A precision specifier can be used to alter the dot delimited module version.

+

 

+

%x

The nested diagnostic context entries. A precision specifier can be used to specify the number of entries to print.

+
+
%x      value1.value2.value3
+%x{1}   value3
+%x{2}   value2.value3
+
+

%X

The mapped diagnostic context entry. The entry must be followed by the key for the MDC entry.

+

%X{key}

+

%z

Allows the timezone to be overridden when formatting the timestamp. This must precede the + timestamp.

+

%z{GMT}%d{yyyy-MM-dd’T’HH:mm:ssSSSXXX}

+

%#

Allows a system property to be appended to the log message.

+

%#{jboss.server.name}

+

%$

Allows a system property to be appended to the log message.

+

%${jboss.server.name}

+

%%

Escapes the % symbol.

+

 

+
+
+

You can also modify the format by placing the optional format modifier between the percent sign and the symbol.

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2. Format Modifier Examples
ModifierLeft JustifyMin WidthMax WidthExample

[%20c]

false

20

 

+
+
[  org.jboss.example]
+
+

[%-20c]

true

20

 

+
+
[org.jboss.example  ]
+
+

[%.10c]

 

 

10

+
+
[org.jboss]
+
+

[%20.30c]

false

20

30

+
+
[  org.jboss.example]
+
+

[%-20.30c]

true

20

30

+
+
[org.jboss.example  ]
+
+
+
+
Examples
+
+
Simple Pattern Formatter
+
+
/subsystem=logging/pattern-formatter=DEFAULT:add(pattern="%d{HH:mm:ssSSSXXX} %-5p [%c] (%t) %10.10#{jboss.node.name} %s%e%n")
+
+
+
+
Color Pattern Formatter
+
+
/subsystem=logging/pattern-formatter=DEFAULT:add(color-map="info:cyan,warn:brightyellow,error:brightred,debug:magenta", pattern="%K{level}%d{yyyy-MM-dd'T'HH:mm:ssSSSXXX} %-5p [%c] (%t) %s%e%n")
+
+
+
+
+
+
XML Formatter
+
+

A formatter used to format log messages in XML.

+
+
+
Examples
+
+
Simple XML Formatter
+
+
/subsystem=logging/xml-formatter=xml:add(pretty-print=true, exception-output-type=detailed-and-formatted)
+
+
+
+
Key Overrides XML Formatter
+
+
/subsystem=logging/xml-formatter=xml:add(pretty-print=true, print-namespace=true, namespace-uri="urn:custom:1.0", key-overrides={message=msg, record=logRecord, timestamp=date}, print-details=true)
+
+
+
+
+
+
Custom Formatter
+
+

A custom formatter to be used with handlers. Note that most log records are formatted in the printf format. Formatters +may require invocation of the org.jboss.logmanager.ExtLogRecord#getFormattedMessage() for the message to be properly +formatted.

+
+
+
Examples
+
+
+
/subsystem=logging/custom-formatter=custom:add(class=org.jboss.example.CustomFormatter, module=org.jboss.example, properties={prettyPrint=true,printDetails=true,bufferSize=1024})
+
+
+
+
+
+
+

7.5.8. Handlers

+
+
Overview
+
+

Handlers define how log messages are recorded. If a message is said to be +{oracle-javadocs}/java.logging/java/util/logging/Logger.html#isLoggable-java.util.logging.Level-[loggable] by a +logger the message is then processed by the log handler.

+
+
+

The following are the available handlers for WildFly Full;

+
+ +
+
async-handler
+
+

An async-handler is a handler that asynchronously writes log messages to it’s child handlers. This type of +handler is generally used to wrap other handlers that take a substantial time to write messages.

+
+
+
+
console-handler
+
+

A console-handler is a handler that writes log messages to the console. Generally this writes to stdout, +but can be set to write to stderr.

+
+
+
+
custom-handler
+
+

A custom-handler allows you to define any handler as a handler that +can be assigned to a logger or a async-handler.

+
+
+
+
file-handler
+
+

A file-handler is a handler that writes log messages to the specified file.

+
+
+
+
periodic-rotating-file-handler
+
+

A periodic-rotating-file-handler is a handler that writes log messages to the specified file. The file rotates on +the date pattern specified in the suffix attribute. The suffix must be a valid pattern recognized by the +java.text.SimpleDateFormat and must not rotate on seconds or +milliseconds.

+
+
+ + + + + +
+ + +The rotate happens before the next message is written by the handler. +
+
+
+
+
periodic-size-rotating-file-handler
+
+

A periodic-size-rotating-file-handler is a handler that writes log messages to the specified file. The file rotates on +the date pattern specified in the suffix attribute or the rotate-size attribute. The suffix must be a valid +pattern recognized by the java.text.SimpleDateFormat and must +not rotate on seconds or milliseconds.

+
+
+

The max-backup-index works differently on this handler than the +size-rotating-file-handler. The date suffix of the file to be rotated must be the +same as the current expected suffix. For example with a suffix pattern of yyyy-MM and a rotate-size of 10m the +file will be rotated with the current month each time the 10Mb size is reached.

+
+
+ + + + + +
+ + +The rotate happens before the next message is written by the handler. +
+
+
+
+
size-rotating-file-handler
+
+

A size-rotating-file-handler is a handler that writes log messages to the specified file. The file rotates when +the file size is greater than the rotate-size attribute. The rotated file will be kept and the index appended +to the name moving previously rotated file indexes up by 1 until the max-backup-index is reached. Once the +max-backup-index is reached, the indexed files will be overwritten.

+
+
+ + + + + +
+ + +The rotate happens before the next message is written by the handler. +
+
+
+
+
socket-handler
+
+

A socket-handler is a handler which sends messages over a socket. This can be a TCP or UDP socket and must be +defined in a socket binding group under the local-destination-outbound-socket-binding or +remote-destination-outbound-socket-binding resource.

+
+
+

During the boot logging messages will be queued until the socket binding is configured and the logging subsystem is +added. This is important to note because setting the level of the handler to DEBUG or TRACE could result in +large memory consumption during boot.

+
+
+ + + + + +
+ + +
+

A server booted in --admin-only mode will discard messages rather than send them over a socket.

+
+
+
+
+
CLI Example
+
+
# Add the socket binding
+/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=log-server:add(host=localhost, port=4560)
+# Add a json-formatter
+/subsystem=logging/json-formatter=json:add
+# Add the socket handler
+/subsystem=logging/socket-handler=log-server-handler:add(named-formatter=json, level=INFO, outbound-socket-binding-ref=log-server)
+# Add the handler to the root logger
+/subsystem=logging/root-logger=ROOT:add-handler(name=log-server-handler)
+
+
+
+
Add a UDP Example
+
+
/subsystem=logging/socket-handler=log-server-handler:add(named-formatter=json, level=INFO, outbound-socket-binding-ref=log-server, protocol=UDP)
+
+
+
+
Add SSL Example
+
+
# Add the socket binding
+/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=log-server:add(host=localhost, port=4560)
+
+# Add the Elytron key store
+/subsystem=elytron/key-store=log-server-ks:add(path=/path/to/keystore.pkcs12, type=PKCS12, credential-reference={clear-text=mypassword})
+# Add the Elytron trust manager
+/subsystem=elytron/trust-manager=log-server-tm:add(key-store=log-server-ks)
+# Add the client SSL context
+/subsystem=elytron/client-ssl-context=log-server-context:add(trust-manager=log-server-tm, protocols=["TLSv1.2"])
+
+# Add a json-formatter
+/subsystem=logging/json-formatter=json:add
+# Add the socket handler
+/subsystem=logging/socket-handler=log-server-handler:add(named-formatter=json, level=INFO, outbound-socket-binding-ref=log-server, protocol=SSL_TCP, ssl-context=log-server-context)
+# Add the handler to the root logger
+/subsystem=logging/root-logger=ROOT:add-handler(name=log-server-handler)
+
+
+
+ + + + + +
+ + +Wrapping a socket-handler in a async-handler may improve performance. +
+
+
+
+
syslog-handler
+
+

A syslog-handler is a handler that writes to a syslog server via UDP. The handler support +RFC3164 or RFC5424 formats.

+
+
+ + + + + +
+ + +
+

The syslog-handler is missing some configuration properties that may be +useful in some scenarios like setting a formatter. Use the +org.jboss.logmanager.handlers.SyslogHandler in module +org.jboss.logmanager as a +custom-handler to exploit +these benefits. Additional attributes will be added at some point so +this will no longer be necessary.

+
+
+
+
+
+
+
+

7.5.9. How To

+
+
How do I add a log category?
+
+
+
/subsystem=logging/logger=com.your.category:add
+
+
+
+
+
How do I change a log level?
+
+

To change a handlers log level:

+
+
+
+
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=DEBUG)
+
+
+
+

Changing the level on a log category is the same:

+
+
+
+
/subsystem=logging/logger=com.your.category:write-attribute(name=level,value=ALL)
+
+
+
+
+
How do I log my applications messages to their own file?
+
+
    +
  1. +

    Create a file handler. There are 3 different types of file handlers +to choose from; file-handler, periodic-rotating-file-handler and +size-rotating-file-handler. In this example we’ll just use a simple +file-handler.

    +
    +
    +
    /subsystem=logging/file-handler=fh:add(level=INFO, file={"relative-to"=>"jboss.server.log.dir", "path"=>"fh.log"}, append=false, autoflush=true)
    +
    +
    +
  2. +
  3. +

    Now create the log category.

    +
    +
    +
    /subsystem=logging/logger=org.your.company:add(use-parent-handlers=false,handlers=["fh"])
    +
    +
    +
  4. +
+
+
+
+
How do I use my own log4j2 implementation?
+
+

If you want to use your own log4j2 implementation, such as log4j-core, then you need to do the following two steps.

+
+
+
    +
  1. +

    Disable the adding of the logging dependencies to all your deployments with the +add-logging-api-dependencies attribute OR exclude the org.apache.logging.log4j.api +in a jboss-deployment-structure.xml.

    +
  2. +
  3. +

    Then you would need to include the log4j-api and a log4j2 implementation library in your deployment.

    +
  4. +
+
+
+ + + + + +
+ + +This only works for logging in your deployment. Server logs will continue to use the logging subsystem + configuration. +
+
+
+
+
+

7.5.10. Loggers

+
+

WIP

+
+
+ + + + + +
+ + +This is still a work in progress. Please feel free to edit any mistakes +you find +
+
+
+
Overview
+
+

Loggers are used to log messages. A logger is defined by a category +generally consisting of a package name or a class name.

+
+
+

A logger is the first step to determining if a messages should be logged +or not. If a logger is defined with a level, the level of the message +must be greater than the level defined on the logger. The filter is then +checked next and the rules of the filter will determine whether or not +the messages is said to be loggable.

+
+
+
Logger Resource
+
+

A logger resource uses the path subsystem=logging/logger=$category +where $category is the of the logger. For example to a logger named +org.wildfly.example would have a resource path of +subsystem=logging/logger=org.wildfly.example.

+
+
+

A logger as 4 writeable attributes;

+
+
+ +
+
+ + + + + +
+ + +You may notice that the category and filter attributes are missing. +While filter is writable it may be deprecated and removed in the +future. Both attributes are still on the resource for legacy reasons. +
+
+
+filter-spec +
+

The filter-spec attribute is an expression based string to define +filters for the logger.

+
+
+ + + + + +
+ + +Filters on loggers are not inherited. +
+
+
+
+handlers +
+

The handlers attribute is a list of handler names that should be +attached to the logger. If the +use-parent-handlers +attribute is set to true and the log messages is determined to be +loggable, parent loggers will continue to be processed.

+
+
+
+level +
+

The level attribute allows the minimum level to allow messages to be +logged at for the logger.

+
+
+
+use-parent-handlers +
+

The use-parent-handlers attribute is a boolean attribute to determine +whether or not parent loggers should also process the log message.

+
+
+
+
+
Root Logger Resource
+
+

The root-logger is similar to a +#Logger Resource only it has no +category and it’s name is must be ROOT.

+
+
+
+
Logger Hierarchy
+
+

A logger hierarchy is defined by it’s category. The category is a . +(dot) delimited string generally consisting of the package name or a +class name. For example the logger org.wildfly is the parent logger of +org.wildfly.example.

+
+
+
+
+
+

7.5.11. Logging Filters

+
+

Filters are used to add fine grained control over a log message. A filter can be assigned to a logger or log handler. +See the Filter documentation for details on filters.

+
+
+
Filter
+
+

The filter resource allows a custom filter to be used. The custom filter must reside in a module and implement the +Filter interface.

+
+
+

It’s generally suggested to add filters to a handler. By default loggers do no inherit filters. This means if a filter +is placed on a logger named org.jboss.as.logging is only checked if the logger name is equal to org.jboss.as.logging.

+
+
+
Examples
+
+
Adding a filter
+
+
/subsystem=logging/filter=myFilter:add(class=org.jboss.example.MyFilter, module=org.jboss.example, properties={matches="true"}, constructor-properties={pattern="*.WFLYLOG.*"))
+
+
+
+
Nesting a filter
+
+
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=filter-spec, value=not(myFilter))
+
+
+
+
+
+
Filter Expressions
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Filter TypeExpressionDescriptionParameter(s)Examples

accept

accept

Accepts all log messages.

None

accept

deny

deny

Denies all log messages.

None

deny

not

not(filterExpression)

Accepts a filter as an argument and inverts +the returned value.

The expression takes a single filter for it’s +argument.

not(match("JBAS"))

all

all(filterExpressions)

A filter consisting of several filters in +a chain. If any filter find the log message to be unloggable, the +message will not be logged and subsequent filters will not be checked.

The expression takes a comma delimited list of filters for it’s +argument.

all(match("JBAS"), match("WELD"))

any

any(filterExpressions)

A filter consisting of several filters in +a chain. If any filter fins the log message to be loggable, the message +will be logged and the subsequent filters will not be checked.

The +expression takes a comma delimited list of filters for it’s argument.

any(match("JBAS"), match("WELD"))

levelChange

levelChange(level)

A filter which modifies the log record +with a new level.

The expression takes a single string based level for +it’s argument.

levelChange(WARN)

levels

levels(levels)

A filter which includes log messages with a +level that is listed in the list of levels.

The expression takes a +comma delimited list of string based levels for it’s argument.

levels(DEBUG, INFO, WARN, ERROR)

levelRange

levelRange([minLevel,maxLevel])

A filter which logs +records that are within the level range.

The filter expression uses a +"[" to indicate a minimum inclusive level and a "]" to indicate a +maximum inclusive level. Otherwise use "(" or ")" respectively indicate +exclusive. The first argument for the expression is the minimum level +allowed, the second argument is the maximum level allowed.

minimum +level must be less than ERROR and the maximum level must be greater than +DEBUGlevelRange(ERROR, DEBUG) minimum level must be less than or equal +to ERROR and the maximum level must be greater than +DEBUGlevelRange[ERROR, DEBUG) minimum level must be less than or equal +to ERROR and the maximum level must be greater or equal to +INFOlevelRange[ERROR, INFO]

match

match("pattern")

A regular-expression based filter. The raw +unformatted message is used against the pattern.

The expression takes a +regular expression for it’s argument. match("JBAS\d+")

substitute

substitute("pattern", "replacement value")

A filter which +replaces the first match to the pattern with the replacement value.

The +first argument for the expression is the pattern the second argument is +the replacement text.

substitute("JBAS", "EAP")

substituteAll

substituteAll("pattern", "replacement value")

A filter +which replaces all matches of the pattern with the replacement value.

The first argument for the expression is the pattern the second +argument is the replacement text.

substituteAll("JBAS", "EAP")

filterName

myCustomFilter

A custom filter which is defined on a filter resource.

None

myCustomFilter
+any(myFilter1, myFilter2, myFilter3)

+
+
+
+
+

7.6. EJB3 subsystem configuration guide

+
+

This page lists the options that are available for configuring the EJB +subsystem.

+
+
+

A complete example of the config is shown below, with a full explanation +of each

+
+
+
+
<subsystem xmlns="urn:jboss:domain:ejb3:10.0">
+  <session-bean>
+    <stateless>
+      <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
+    </stateless>
+    <stateful default-session-timeout="600000" default-access-timeout="5000" cache-ref="distributable" passivation-disabled-cache-ref="simple"/>
+    <singleton default-access-timeout="5000"/>
+  </session-bean>
+  <mdb>
+    <resource-adapter-ref resource-adapter-name="hornetq-ra"/>
+    <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
+  </mdb>
+  <entity-bean>
+    <bean-instance-pool-ref pool-name="entity-strict-max-pool"/>
+  </entity-bean>
+    <pools>
+    <bean-instance-pools>
+      <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
+      <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
+      <strict-max-pool name="entity-strict-max-pool" max-pool-size="100" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
+    </bean-instance-pools>
+  </pools>
+  <caches>
+    <simple-cache name="simple"/>
+    <distributable-cache name="distributable" bean-management="default"/>
+  </caches>
+  <async thread-pool-name="default"/>
+  <timer-service thread-pool-name="default" default-data-store="default-file-store">
+    <data-stores>
+      <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>
+    </data-stores>
+  </timer-service>
+  <remote connectors="remoting-connector" thread-pool-name="default">
+    <profiles>
+        <profile name="profile" exclude-local-receiver="false" local-receiver-pass-by-value="false">
+          <remoting-ejb-receiver name="receiver" outbound-connection-ref="remote-ejb-connection"/>
+          <remote-http-connection name="connection" uri="http://localhost:8180/wildfly-services"/>
+          <static-ejb-discovery>
+            <module uri="http://localhost:8180/wildfly-services" module-name="foo" app-name="bar" distinct-name="baz"/>
+          </static-ejb-discovery>
+        </profile>
+    </profiles>
+  </remote>
+  <thread-pools>
+    <thread-pool name="default">
+      <max-threads count="10"/>
+      <core-threads count="10"/>
+      <keepalive-time time="60" unit="seconds"/>
+    </thread-pool>
+  </thread-pools>
+  <iiop enable-by-default="false" use-qualified-name="false"/>
+  <in-vm-remote-interface-invocation pass-by-value="false"/> <!-- Warning see notes below about possible issues -->
+</subsystem>
+
+
+
+

7.6.1. <session-bean>

+
+
<stateless>
+
+

This element is used to configure the instance pool that is used by +default for stateless session beans. If it is not present stateless +session beans are not pooled, but are instead created on demand for +every invocation. The instance pool can be overridden on a per +deployment or per bean level using jboss-ejb3.xml or the +org.jboss.ejb3.annotation.Pool annotation. The instance pools +themselves are configured in the <pools> element.

+
+
+
+
<stateful>
+
+

This element is used to configure Stateful Session Beans.

+
+
+
    +
  • +

    default-session-timeout This optional attribute specifies the default +amount of time in milliseconds a stateful session bean can remain idle +before it is eligible for removal by the container. +It can be overridden via ejb-jar.xml deployment descriptor or via +jakarta.ejb.StatefulTimeout annotation.

    +
  • +
  • +

    default-access-timeout This attribute specifies the default time +concurrent invocations on the same bean instance will wait to acquire +the instance lock. It can be overridden via the deployment descriptor or +via the jakarta.ejb.AccessTimeout annotation.

    +
  • +
  • +

    cache-ref This attribute is used to set the default cache for +beans which require a passivating cache. It can be overridden by jboss-ejb3.xml, or via +the org.jboss.ejb3.annotation.Cache annotation.

    +
  • +
  • +

    non-passivating-cache-ref This attribute is used to set the default cache +for beans which require a non-passivating cache.

    +
  • +
+
+
+
+
<singleton>
+
+

This element is used to configure Singleton Session Beans.

+
+
+
    +
  • +

    default-access-timeout This attribute specifies the default time +concurrent invocations will wait to acquire the instance lock. It can be +overridden via the deployment descriptor or via the +jakarta.ejb.AccessTimeout annotation.

    +
  • +
+
+
+
+
+

7.6.2. <mdb>

+
+
<resource-adaptor-ref>
+
+

This element sets the default resource adaptor for Message Driven Beans.

+
+
+
+
<bean-instance-pool-ref>
+
+

This element is used to configure the instance pool that is used by +default for Message Driven Beans. If it is not present they are not +pooled, but are instead created on demand for every invocation. The +instance pool can be overridden on a per deployment or per bean level +using jboss-ejb3.xml or the org.jboss.ejb3.annotation.Pool +annotation. The instance pools themselves are configured in the +<pools> element.

+
+
+
+
+

7.6.3. <entity-bean>

+
+

This element is used to configure the behavior for EJB2 EntityBeans.

+
+
+
<bean-instance-pool-ref>
+
+

This element is used to configure the instance pool that is used by +default for Entity Beans. If it is not present they are not pooled, but +are instead created on demand for every invocation. The instance pool +can be overridden on a per deployment or per bean level using +jboss-ejb3.xml or the org.jboss.ejb3.annotation.Pool annotation. The +instance pools themselves are configured in the <pools> element.

+
+
+
+
+

7.6.4. <pools>

+
+
<bean-instance-pools>
+
+

This element is used to configure pools used by stateless session, message driven beans and entity beans.

+
+
+
<strict-max-pool>
+
+

Each pool is configured using strict-max-pool element.

+
+
+
    +
  • +

    name Name of the pool.

    +
  • +
  • +

    max-pool-size Configured maximum number of bean instances that the pool can hold at a given point in time.

    +
  • +
  • +

    instance-acquisition-timeout The maximum amount of time to wait for a bean instance to be available from the pool.

    +
  • +
  • +

    instance-acquisition-timeout-unit The instance acquisition timeout unit

    +
  • +
+
+
+
+
+
+

7.6.5. <caches>

+
+

This element is used to define named cache factories to support the persistence of SFSB session states. +Cache factories may be passivating (an in-memory cache with the ability to passivate to persistant store +the session states of beans not recently used and then activate them when needed) or non-passivating +(an in-memory cache only). Default values for passivating and non-passivating caches are specified +in the <stateful> element mentioned above. A SFSB may override the named cache used to store its session states +via the @Cache annotation (in its class definition) or via a corresponding deployment descriptor.

+
+
+
<simple-cache>
+
+

This element defines a non-passivating (in-memory only) cache factory for storing session states of a SFSB.

+
+
+
+
<distributable-cache>
+
+

This element defines a passivating cache factory (in-memory plus passivation to persistent store) for storing +session states of a SFSB. A passivating cache factory relies on a bean-management provider to configure +the passivation mechanism and the persistent store that it uses.

+
+
+
    +
  • +

    bean-management This attribute specifies the bean-management provider to be used to +support passivation of cache entries. The bean-management provider is defined and configured +in the distributable-ejb subsystem (see the High Availability Guide). +If the attribute is non-defined, the default bean management provider +defined in the distributable-ejb subsystem is used.

    +
  • +
+
+
+
+
+

7.6.6. <async>

+
+

This element enables async EJB invocations. It is also used to specify +the thread pool that these invocations will use.

+
+
+
+

7.6.7. <timer-service>

+
+

This element enables the EJB timer service. It is also used to specify +the thread pool that these invocations will use.

+
+
+
<data-store>
+
+

This is used to configure the directory that persistent timer +information is saved to.

+
+
+
+
+

7.6.8. <remote>

+
+

This element is used to enable remote EJB invocations. In other words, it allows a remote EJB client +application to make invocations on Jakarta Enterprise beans deployed on the server.

+
+
+

It specifies the following attributes:

+
+
+
    +
  • +

    connectors specifies a space-separated list of remoting connectors to use (as defined in the remoting +subsystem configuration) for accepting invocations.

    +
  • +
  • +

    thread-pool specifies a thread pool to use for processing incoming remote invocations

    +
  • +
+
+
+
<profile>
+
+

A remote profile specifies a configuration of remote invocations that can +be referenced by many deployments. EJBs that are meant to be invoked can +be discovered in either a static or a dynamic way.

+
+
+

Static discovery decides which remote node to connect to based on the information +provided by the administrator.

+
+
+

Dynamic discovery is responsible for monitoring the available EJBs on all the +nodes to which connections are configured and decides which remote node to +connect to based on the gathered data.

+
+
+
    +
  • +

    name the name of the profile

    +
  • +
  • +

    exclude-local-receiver If set, no local receiver is used in this profile

    +
  • +
  • +

    local-receiver-pass-by-value If set, local receiver will pass ejb beans by value

    +
  • +
+
+
+
<static-ejb-discovery>
+
+

Static ejb discovery allows the administrator to explicitly specify on which remote nodes +given EJBs are located. The module tag is used to define it:

+
+
+
    +
  • +

    module-name the name of EJB module

    +
  • +
  • +

    app-name the name of EJB app

    +
  • +
  • +

    distinct-name the distinct name EJB

    +
  • +
  • +

    uri the address on which given EJB is located

    +
  • +
+
+
+
+
<remoting-ejb-receiver>
+
+

The remoting-ejb-receiver tag is used to define dynamic discovery based on +the remoting protocol:

+
+
+
    +
  • +

    name name of the remote connection

    +
  • +
  • +

    outbound-connection-ref reference to outbound connection defined in +the remoting subsystem

    +
  • +
  • +

    connection-timeout the timeout of the connection

    +
  • +
+
+
+
+
<remote-http-connection>
+
+

The remote-http-connection tag is used to define dynamic discovery based on +HTTP protocol:

+
+
+
    +
  • +

    name name of the HTTP connection

    +
  • +
  • +

    uri URI of the connection

    +
  • +
+
+
+
+
+
+

7.6.9. <thread-pools>

+
+

This is used to configure the thread pools used by async, timer and +remote invocations.

+
+
+
    +
  • +

    max-threads specifies the maximum number of threads in the thread pool. +It is a required attribute and defaults to 10.

    +
  • +
  • +

    core-threads specifies the number of core threads in the thread pool. +It is an optional attribute and defaults to max-threads value.

    +
  • +
  • +

    keepalive-time specifies the amount of time that non-core threads can +stay idle before they become eligible for removal. It is an optional +attribute and defaults to 60 seconds.

    +
  • +
+
+
+
+

7.6.10. <iiop>

+
+

This is used to enable IIOP (i.e. CORBA) invocation of EJB’s. If this +element is present then the JacORB subsystem must also be installed. It +supports the following two attributes:

+
+
+
    +
  • +

    enable-by-default If this is true then all EJB’s with EJB2.x home +interfaces are exposed via IIOP, otherwise they must be explicitly +enabled via jboss-ejb3.xml.

    +
  • +
  • +

    use-qualified-name If this is true then EJB’s are bound to the corba +naming context with a binding name that contains the application and +modules name of the deployment (e.g. myear/myejbjar/MyBean), if this is +false the default binding name is simply the bean name.

    +
  • +
+
+
+
+

7.6.11. <in-vm-remote-interface-invocation>

+
+

By default remote interface invocations use pass by value, as required +by the EJB spec. This element can use used to enable pass by reference, +which can give you a performance boost. Note WildFly will do a shallow +check to see if the caller and the EJB have access to the same class +definitions, which means if you are passing something such as a +List<MyObject>, WildFly only checks the List to see if it is the same +class definition on the call & EJB side. If the top level class +definition is the same, JBoss will make the call using pass by +reference, which means that if MyObject or any objects beneath it are +loaded from different classloaders, you would get a ClassCastException. +If the top level class definitions are loaded from different +classloaders, JBoss will use pass by value. JBoss cannot do a deep check +of all of the classes to ensure no ClassCastExceptions will occur +because doing a deep check would eliminate any performance boost you +would have received by using call by reference. It is recommended that +you configure pass by reference only on callers that you are sure will +use the same class definitions and not globally. This can be done via a +configuration in the jboss-ejb-client.xml as shown below.

+
+
+

To configure a caller/client use pass by reference, you configure your +top level deployment with a META-INF/jboss-ejb-client.xml containing:

+
+
+
+
<jboss-ejb-client xmlns="urn:jboss:ejb-client:1.0">
+    <client-context>
+        <ejb-receivers local-receiver-pass-by-value="false"/>
+    </client-context>
+</jboss-ejb-client>
+
+
+
+
+

7.6.12. <server-interceptors>

+
+

This element configures a number of server-side interceptors which can be +configured without changing the deployments.

+
+
+

Each interceptor is configured in <interceptor> tag which contains the +following fields:

+
+
+
    +
  • +

    module - the module in which the interceptor is defined

    +
  • +
  • +

    class - the class which implements the interceptor

    +
  • +
+
+
+

In order to use server interceptors you have to create a module that implements +them and place it into ${WILDFLY_HOME}/modules directory.

+
+
+

Interceptor implementations are POJO classes which use +jakarta.interceptor.AroundInvoke and jakarta.interceptor.AroundTimeout to +mark interceptor methods.

+
+
+

Sample configuration:

+
+
+
+
<server-interceptors>
+        <interceptor module="org.foo:FooInterceptor:1.0" class="org.foo.FooInterceptor"/>
+</server-interceptors>
+
+
+
+

Sample interceptor implementation:

+
+
+
+
package org.foo;
+
+import jakarta.annotation.PostConstruct;
+import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.InvocationContext;
+
+public class FooInterceptor {
+
+    @AroundInvoke
+    public Object bar(final InvocationContext invocationContext) throws Exception {
+        return invocationContext.proceed();
+    }
+}
+
+
+
+
+

7.6.13. <client-interceptors>

+
+

This element configures a number of client-side interceptors which can be +configured without changing the deployments.

+
+
+

Each interceptor is configured in <interceptor> tag which contains the +following fields:

+
+
+
    +
  • +

    module - the module in which the interceptor is defined

    +
  • +
  • +

    class - the class which implements the interceptor

    +
  • +
+
+
+

In order to use server interceptors you have to create a module that implements +them and place it into ${WILDFLY_HOME}/modules directory.

+
+
+

Interceptor implementations must implement org.jboss.ejb.client.EJBClientInterceptor +interface.

+
+
+

Sample configuration:

+
+
+
+
<client-interceptors>
+        <interceptor module="org.foo:FooInterceptor:1.0" class="org.foo.FooInterceptor"/>
+</client-interceptors>
+
+
+
+

Sample interceptor implementation:

+
+
+
+
package org.foo;
+
+import org.jboss.ejb.client.EJBClientInterceptor;
+import org.jboss.ejb.client.EJBClientInvocationContext;
+
+public class FooInterceptor implements EJBClientInterceptor {
+
+    @Override
+    public void handleInvocation(EJBClientInvocationContext context) throws Exception {
+        context.sendRequest();
+    }
+
+    @Override
+    public Object handleInvocationResult(EJBClientInvocationContext context) throws Exception {
+        return context.getResult();
+    }
+}
+
+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+

7.7. Undertow subsystem configuration

+
+
+
+

Web subsystem was replaced in WildFly 8 with Undertow.

+
+
+
+
+

There are two main parts to the undertow subsystem, which are server and +Servlet container configuration, as well as some ancillary items. +Advanced topics like load balancing and failover are covered on the +"High Availability Guide". The default configuration does is suitable +for most use cases and provides reasonable performance settings.

+
+
+

Required extension:

+
+
+
+
<extension module="org.wildfly.extension.undertow" />
+
+
+
+

Basic subsystem configuration example:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:undertow:13.0">
+        <buffer-cache name="default" buffer-size="1024" buffers-per-region="1024" max-regions="10"/>
+        <server name="default-server">
+            <http-listener name="default" socket-binding="http" />
+            <host name="default-host" alias="localhost">
+                <location name="/" handler="welcome-content" />
+            </host>
+        </server>
+        <servlet-container name="default" default-buffer-cache="default" stack-trace-on-error="local-only" >
+            <jsp-config/>
+            <persistent-sessions/>
+        </servlet-container>
+        <handlers>
+            <file name="welcome-content" path="${jboss.home.dir}/welcome-content" directory-listing="true"/>
+        </handlers>
+    </subsystem>
+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

default-server

the default server to use for deployments

default-virtual-host

the default virtual host to use for deployments

default-servlet-container

the default servlet container to use for deployments

instance-id

the id of Undertow. Defaults to "${jboss.node.name}" if undefined

obfuscate-session-route

set this to "true" to indicate the +instance-id should be obfuscated in routing. This prevents instance-id from being sent across +HTTP connections when serving remote requests with the HTTP invoker.

default-security-domain

the default security domain used by web deployments

statistics-enabled

set this to true to enable statistics gathering for Undertow subsystem

+
+ + + + + +
+ + +
+

When setting obfuscate-session-route to "true", the server’s +name is used as a salt in the hashing algorithm that obfuscates the value of instance-id. +For that reason, it is strongly advised that the value of the server be changed from "default-server" to something +else, or else it would be easy to reverse engineer the obfuscated route to its original value, using "default-server" +bytes as the salt.

+
+
+
+
+

Dependencies on other subsystems:

+
+
+

IO Subsystem

+
+
+

7.7.1. Buffer cache configuration

+
+

The buffer cache is used for caching content, such as static files. +Multiple buffer caches can be configured, which allows for separate +servers to use different sized caches.

+
+
+

Buffers are allocated in regions, and are of a fixed size. If you are +caching many small files then using a smaller buffer size will be +better.

+
+
+

The total amount of space used can be calculated by multiplying the +buffer size by the number of buffers per region by the maximum number of +regions.

+
+
+
+
  <buffer-caches>
+    <buffer-cache name="default" buffer-size="1024" buffers-per-region="1024" max-regions="10"/>
+  </buffer-caches>
+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

buffer-size

The size of the buffers. Smaller buffers allow space to be +utilised more effectively

buffers-per-region

The numbers of buffers per region

max-regions

The maximum number of regions. This controls the maximum +amount of memory that can be used for caching

+
+
+

7.7.2. Server configuration

+
+

A server represents an instance of Undertow. Basically this consists of +a set of connectors and some configured handlers.

+
+
+
+
<server name="default-server" default-host="default-host" servlet-container="default" >
+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

name

the name of this server

default-host

the virtual host that will be used if an incoming request +as no Host: header

servlet-container

the servlet container that will be used by this +server, unless is is explicitly overriden by the deployment

+
+
Connector configuration
+
+

Undertow provides HTTP, HTTPS and AJP connectors, which are configured +per server.

+
+
+
Common settings
+
+

The following settings are common to all connectors:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

allow-encoded-slash

If a request comes in with encoded / characters (i.e. %2F), will these be decoded.

allow-equals-in-cookie-value

If this is true then Undertow will allow non-escaped equals characters in unquoted cookie values. +Unquoted cookie values may not contain equals characters. If present the value ends before the +equals sign. The remainder of the cookie value will be dropped.

allow-unescaped-characters-in-url

If this is true Undertow will accept non-encoded characters that are disallowed by the URI specification. +This defaults to false, and in general should not be needed as most clients correctly encode characters. +Note that setting this to true can be considered a security risk, as allowing non-standard characters can +allow request smuggling attacks in some circumstances.

always-set-keep-alive

If this is true then a Connection: keep-alive header will be added to responses, even when it is not +strictly required by the specification.

buffer-pipelined-data

If we should buffer pipelined requests.

buffer-pool

The listeners buffer pool

certificate-forwarding

If certificate forwarding should be enabled. If this is enabled then the listener will take the certificate +from the SSL_CLIENT_CERT attribute. This should only be enabled if behind a proxy, and the proxy is +configured to always set these headers.

decode-url

If this is true then the parser will decode the URL and query parameters using the selected character +encoding (UTF-8 by default). If this is false they will not be decoded. This will allow a later handler to +decode them into whatever charset is desired.

disallowed-methods

A comma separated list of HTTP methods that are not allowed

enable-http2

Enables HTTP2 support for this listener

enabled (Deprecated)

If the listener is enabled

http2-enable-push

If server push is enabled for this connection

http2-header-table-size

The size of the header table used for HPACK compression, in bytes. This amount of memory will be allocated +per connection for compression. Larger values use more memory but may give better compression.

http2-initial-window-size

The flow control window size that controls how quickly the client can send data to the server

http2-max-concurrent-streams

The maximum number of HTTP/2 streams that can be active at any time on a single connection

http2-max-frame-size

The max HTTP/2 frame size

http2-max-header-list-size

The maximum size of request headers the server is prepared to accept

max-buffered-request-size

Maximum size of a buffered request, in bytes. Requests are not usually buffered, the most common case is +when performing SSL renegotiation for a POST request, and the post data must be fully buffered in order +to perform the renegotiation.

max-connections

The maximum number of concurrent connections. Only values greater than 0 are allowed. For unlimited +connections simply undefine this attribute value.

max-cookies

The maximum number of cookies that will be parsed. This is used to protect against hash vulnerabilities.

max-header-size

The maximum size of a http request header, in bytes.

max-headers

The maximum number of headers that will be parsed. This is used to protect against hash vulnerabilities.

max-parameters

The maximum number of parameters that will be parsed. This is used to protect against hash vulnerabilities. +This applies to both query parameters, and to POST data, but is not cumulative (i.e. you can potentially +have max parameters * 2 total parameters).

max-post-size

The maximum size of a post that will be accepted, in bytes.

no-request-timeout

The length of time in milliseconds that the connection can be idle before it is closed by the container.

proxy-address-forwarding

Enables handling of x-forwarded-host header (and other x-forwarded-* headers) and use this header information +to set the remote address. This should only be used behind a trusted proxy that sets these headers otherwise +a remote user can spoof their IP address.

proxy-protocol

If this is true then the listener will use the proxy protocol v1, as defined by +https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt. This option MUST only be enabled for listeners +that are behind a load balancer that supports the same protocol.

read-timeout

Configure a read timeout for a socket, in milliseconds. If the given amount of time elapses without a +successful read taking place, the socket’s next read will throw a {@link ReadTimeoutException}.

receive-buffer

The receive buffer size, in bytes.

record-request-start-time

If this is true then Undertow will record the request start time, to allow for request time to be logged. +This has a small but measurable performance impact

request-parse-timeout

The maximum amount of time (in milliseconds) that can be spent parsing the request

require-host-http11

Require that all HTTP/1.1 requests have a 'Host' header, as per the RFC. IF the request does not include +this header it will be rejected with a 403.

resolve-peer-address

Enables host dns lookup

rfc6265-cookie-validation

If cookies should be validated to ensure they comply with RFC6265.

secure

If this is true then requests that originate from this listener are marked as secure, even if the request +is not using HTTPS.

send-buffer

The send buffer size, in bytes.

socket-binding

The listener socket binding

tcp-backlog

Configure a server with the specified backlog.

tcp-keep-alive

Configure a channel to send TCP keep-alive messages in an implementation-dependent manner.

url-charset

URL charset

worker

The listeners XNIO worker

write-timeout

Configure a write timeout for a socket, in milliseconds. If the given amount of time +elapses without a successful write taking place, the socket’s next write will throw +a {@link WriteTimeoutException}.

+
+
+
HTTP Connector
+
+
+
<http-listener name="default" socket-binding="http"  />
+
+
+ ++++ + + + + + + + + + + + + +
AttributeDescription

redirect-socket

If this listener is supporting non-SSL requests, and a request is received for which a matching +<security-constraint> requires SSL transport, undertow will automatically redirect the request to the +socket binding port specified here.

+
+
+
HTTPS listener
+
+

Https listener provides secure access to the server. The most important +configuration option is ssl-context which cross references a pre-configured +SSL Context instance.

+
+
+
+
<https-listener name="https" socket-binding="https" ssl-context="applicationSSC" enable-http2="true"/>
+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

enable-spdy (Deprecated)

Enables SPDY support for this listener. This has been deprecated and has no effect, HTTP/2 should be used instead

enabled-cipher-suites (Deprecated)

Where an SSLContext is referenced it should be configured with the cipher suites to be supported.

enabled-protocols (Deprecated)

Configures SSL protocols

security-realm (Deprecated)

The listeners security realm

ssl-context

Reference to the SSLContext to be used by this listener.

ssl-session-cache-size (Deprecated)

The maximum number of active SSL sessions

ssl-session-timeout (Deprecated)

The timeout for SSL sessions, in seconds

verify-client (Deprecated)

The desired SSL client authentication mode for SSL channels

+
+
+
AJP listener
+
+
+
<ajp-listener name="default" socket-binding="ajp" />
+
+
+
+
+
+
Host configuration
+
+

The host element corresponds to a virtual host.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

name

The virtual host name

alias

A whitespace separated list of additional host names that should +be matched

default-web-module

The name of a deployment that should be used to +serve up requests that do not match anything.

queue-requests-on-start

If requests should be queued on start for this host. If this is set to false the default +response code will be returned instead.

+

Note: If a Non-graceful Startup is requested, and the queue-requests-on-start attribute is not set, requests will NOT be +queued despite the default value of true for the property. In the instance of a non-graceful startup, non-queued requests +are required. However, if non-graceful is configured, but queue-requests-on-start is explicitly set to true, then requests +will be queued, effectively disabling the non-graceful mode for requests to that host.

+
+
Console Access Logging
+
+

Each host allows for access logging to the console which writes structured data in JSON format. This only writes to +stdout and is a single line of JSON structured data.

+
+
+

The attributes management model attribute is used to determine which exchange attributes should be logged. This is +similar to the pattern used for traditional access logging. The main difference being since the data is structured +the ability to use defined keys is essential.

+
+
+

A metadata attribute also exists which allows extra metadata to be added to the output. The value of the attribute is +a set of arbitrary key/value pairs. The values can include management model expressions, which must be resolvable when +the console access log service is started. The value is resolved once per start or reload of the server.

+
+
+CLI Examples +
+
add-console-access-logging.cli
+
+
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add
+
+
+
+
complex-add-console-access-logging.cli
+
+
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add(metadata={"@version"="1", "qualifiedHostName"=${jboss.qualified.host.name:unknown}}, attributes={bytes-sent={}, date-time={key="@timestamp", date-format="yyyy-MM-dd'T'HH:mm:ssSSS"}, remote-host={}, request-line={}, response-header={key-prefix="responseHeader", names=["Content-Type"]}, response-code={}, remote-user={}})
+
+
+
+
+
{
+    "eventSource":"web-access",
+    "hostName":"default-host",
+    "@version":"1",
+    "qualifiedHostName":"localhost.localdomain",
+    "bytesSent":1504,
+    "@timestamp":"2019-05-02T11:57:37123",
+    "remoteHost":"127.0.0.1",
+    "remoteUser":null,
+    "requestLine":"GET / HTTP/2.0",
+    "responseCode":200,
+    "responseHeaderContent-Type":"text/html"
+}
+
+
+
+ + + + + +
+ + +The above JSON is formatted only for readability. The output will be on a single line. +
+
+
+
+
+
+
+

7.7.3. Servlet container configuration

+
+

The servlet-container element corresponds to an instance of an Undertow +Servlet container. Most servers will only need a single servlet +container, however there may be cases where it makes sense to define +multiple containers (in particular if you want applications to be +isolated, so they cannot dispatch to each other using the +RequestDispatcher. You can also use multiple Servlet containers to serve +different applications from the same context path on different virtual +hosts).

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

allow-non-standard-wrappers

The Servlet specification requires +applications to only wrap the request/response using wrapper classes +that extend from the ServletRequestWrapper and ServletResponseWrapper +classes. If this is set to true then this restriction is relaxed.

default-buffer-cache

The buffer cache that is used to cache static +resources in the default Servlet.

stack-trace-on-error

Can be either all, none, or local-only. When set +to none Undertow will never display stack traces. When set to All +Undertow will always display them (not recommended for production use). +When set to local-only Undertow will only display them for requests from +local addresses, where there are no headers to indicate that the request +has been proxied. Note that this feature means that the Undertow error +page will be displayed instead of the default error page specified in +web.xml.

default-encoding

The default encoding to use for requests and +responses.

use-listener-encoding

If this is true then the default encoding will +be the same as that used by the listener that received the request.

preserve-path-on-forward

If this is true, the return values of the +getServletPath(), getRequestURL() and getRequestURI() methods from + HttpServletRequest will be unchanged following a + RequestDispatcher.forward() call, and point to the original resource requested. +If false, following the RequestDispatcher.forward() call, they will +point to the resource being forwarded to.

+ +
+ +
+

This allows you to change the attributes of the session cookie.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

name

The cookie name

domain

The cookie domain

http-only

If the cookie is HTTP only

secure

If the cookie is marked secure

max-age

The max age of the cookie

+
+
+ +
+

This allows you to change the attributes of the affinity cookie. +If the affinity cookie is configured, the affinity will not be appended to the session ID, but will be sent via the configured cookie name.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

name (required)

The affinity cookie name

domain

The affinity cookie domain

http-only

If the affinity cookie is HTTP only

secure

If the affinity cookie is marked secure

max-age

The max age of the affinity cookie

+
+
+
Persistent Session Configuration
+
+

Persistent sessions allow session data to be saved across redeploys and +restarts. This feature is enabled by adding the persistent-sessions +element to the server config. This is mostly intended to be a +development time feature.

+
+
+

If the path is not specified then session data is stored in memory, and +will only be persistent across redeploys, rather than restarts.

+
+ ++++ + + + + + + + + + + + + + + + + +
AttributeDescription

path

The path to the persistent sessions data

relative-to

The location that the path is relevant to

+
+
+
+

7.7.4. AJP listeners

+
+

The AJP listeners are child resources of the subsystem undertow. They +are used with mod_jk, mod_proxy and mod_cluster of the Apache httpd +front-end. Each listener does reference a particular socket binding:

+
+
+
+
[standalone@localhost:9999 /] /subsystem=undertow/server=default-server:read-children-names(child-type=ajp-listener)
+{
+    "outcome" => "success",
+    "result" => [
+        "ajp-listener",
+    ]
+}
+ 
+[standalone@localhost:9999 /] /subsystem=undertow/server=default-server/ajp-listener=*:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "enabled" => "true",
+        "scheme" => "http",
+        "socket-binding" => "ajp",
+    }
+}
+
+
+
+

Creating a new ajp-listener requires you to declare a new +socket binding first:

+
+
+
+
[standalone@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=ajp:add(port=8009)
+
+
+
+

The newly created, unused socket binding can then be used to create a +new connector configuration:

+
+
+
+
[standalone@localhost:9999 /] /subsystem=undertow/server=default-server/ajp-listener=myListener:add(socket-binding=ajp, scheme=http, enabled=true)
+
+
+
+
+

7.7.5. Using WildFly as a Load Balancer

+
+

WildFly 10 added support for using the Undertow subsystem as a load +balancer. WildFly supports two different approaches, you can either +define a static load balancer, and specify the back end hosts in your +configuration, or use it as a mod_cluster frontend, and use mod_cluster +to dynamically update the hosts.

+
+
+
General Overview
+
+

WildFly uses Undertow’s proxy capabilities to act as a load balancer. +Undertow will connect to the back end servers using its built in client, +and proxies requests.

+
+
+

The following protocols are supported:

+
+
+
    +
  • +

    http

    +
  • +
  • +

    ajp

    +
  • +
  • +

    http2

    +
  • +
  • +

    h2c (clear text HTTP2)
    +Of these protocols h2c should give the best performance, if the back end +servers support it.

    +
  • +
+
+
+

The Undertow proxy uses async IO, the only threads that are involved in +the request is the IO thread that is responsible for the connection. The +connection to the back end server is made from the same thread, which +removes the need for any thread safety constructs.
+If both the front and back end servers support server push, and HTTP2 is +in use then the proxy also supports pushing responses to the client. In +cases where proxy and backend are capable of server push, but the client +does not support it the server will send a X-Disable-Push header to let +the backend know that it should not attempt to push for this request.

+
+
+
Load balancer server profiles
+
+

WildFly 11 added load balancer profiles for both standalone and domain modes.

+
+
+Example: Start standalone load balancer +
+
+
# configure correct path to WildFly installation
+WILDFLY_HOME=/path/to/wildfly
+
+# configure correct IP of the node
+MY_IP=192.168.1.1
+
+# run the load balancer profile
+$WILDFLY_HOME/bin/standalone.sh -b $MY_IP -bprivate $MY_IP -c standalone-load-balancer.xml
+
+
+
+

It’s highly recommended to use private/internal network for communication between load balancer and nodes. +To do this set the correct IP address to the private interface (-bprivate argument).

+
+
+
+Example: Start worker node +
+

Run the server with the HA (or Full HA) profile, which has mod_cluster component included. +If the UDP multicast is working in your environment, the workers should work out of the box without any change. +If it’s not the case, then configure the IP address of the load balancer statically.

+
+
+
+
# configure correct path to WildFly installation
+WILDFLY_HOME=/path/to/wildfly
+# configure correct IP of the node
+MY_IP=192.168.1.2
+
+# Configure static load balancer IP address.
+# This is necessary when UDP multicast doesn't work in your environment.
+LOAD_BALANCER_IP=192.168.1.1
+$WILDFLY_HOME/bin/jboss-cli.sh <<EOT
+
+embed-server -c=standalone-ha.xml
+/subsystem=modcluster/proxy=default:write-attribute(name=advertise, value=false)
+/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=proxy1:add(host=$LOAD_BALANCER_IP, port=8090)
+/subsystem=modcluster/proxy=default:list-add(name=proxies, value=proxy1)
+EOT
+
+# start the woker node with HA profile
+$WILDFLY_HOME/bin/standalone.sh -c standalone-ha.xml -b $MY_IP -bprivate $MY_IP
+
+
+
+

Again, to make it safe, users should configure private/internal IP address into MY_IP variable.

+
+
+
+
+
+
Using WildFly as a static load balancer
+
+

To use WildFly as a static load balancer the first step is to create a +proxy handler in the Undertow subsystem. For the purposes of this +example we are going to assume that our load balancer is going to load +balance between two servers, sv1.foo.com and sv2.foo.com, and will be +using the AJP protocol.

+
+
+

The first step is to add a reverse proxy handler to the Undertow +subsystem:

+
+
+
+
/subsystem=undertow/configuration=handler/reverse-proxy=my-handler:add()
+
+
+
+

Then we need to define outbound-socket-binding-s for remote hosts:

+
+
+
+
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host1:add(host=sv1.foo.com, port=8009)
+/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host2:add(host=sv2.foo.com, port=8009)
+
+
+
+

and than we add them as hosts to reverse proxy handler:

+
+
+
+
/subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host1:add(outbound-socket-binding=remote-host1, scheme=ajp, instance-id=myroute, path=/test)
+/subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host2:add(outbound-socket-binding=remote-host2, scheme=ajp, instance-id=myroute, path=/test)
+
+
+
+

Now we need to actually add the reverse proxy to a location. +Assuming we are serving the path /app:

+
+
+
+
/subsystem=undertow/server=default-server/host=default-host/location=\/app:add(handler=my-handler)
+
+
+
+

This is all there is to it. If you point your browser to http://localhost:8080/app +you should be able to see the proxied content.

+
+
+

The full details of all configuration options available can be found in +the subsystem reference.

+
+
+
+
+
+

7.8. Messaging configuration

+
+

The Jakarta Messaging server configuration is done through the messaging-activemq +subsystem. In this chapter we are going outline the frequently used +configuration options. For a more detailed explanation please consult +the Artemis user guide (See "Component Reference").

+
+
+

7.8.1. Required Extension

+
+

The configuration options discussed in this section assume that the the +org.wildfly.extension.messaging-activemq extension is present in your +configuration. This extension is not included in the standard +standalone.xml and standalone-ha.xml configurations included in the +WildFly distribution. It is, however, included with the +standalone-full.xml and standalone-full-ha.xml configurations.

+
+
+

You can add the extension to a configuration without it either by adding +an <extension module="org.wildfly.extension.messaging-activemq"/> +element to the xml or by using the following CLI operation:

+
+
+
+
[standalone@localhost:9990 /]/extension=org.wildfly.extension.messaging-activemq:add
+
+
+
+
+

7.8.2. Connectors

+
+

There are three kind of connectors that can be used to connect to +WildFly Jakarta Messaging Server

+
+
+
    +
  • +

    invm-connector can be used by a local client (i.e. one running in +the same JVM as the server)

    +
  • +
  • +

    netty-connector can be used by a remote client (and uses Netty over +TCP for the communication)

    +
  • +
  • +

    http-connector can be used by a remote client (and uses Undertow Web +Server to upgrade from a HTTP connection)

    +
  • +
+
+
+
+

7.8.3. Jakarta Messaging Connection Factories

+
+

There are three kinds of basic Jakarta Messaging connection-factory that depends +on the type of connectors that is used.

+
+
+

There is also a pooled-connection-factory which is special in that it +is essentially a configuration facade for both the inbound and +outbound connectors of the the Artemis Jakarta Connectors Resource Adapter. An MDB can +be configured to use a pooled-connection-factory (e.g. using +@ResourceAdapter). In this context, the MDB leverages the inbound +connector of the Artemis Jakarta Connectors RA. Other kinds of clients can look up the +pooled-connection-factory in JNDI (or inject it) and use it to send +messages. In this context, such a client would leverage the outbound +connector of the Artemis Jakarta Connectors RA. A pooled-connection-factory is also +special because:

+
+
+
    +
  • +

    It is only available to local clients, although it can be configured +to point to a remote server.

    +
  • +
  • +

    As the name suggests, it is pooled and therefore provides superior +performance to the clients which are able to use it. The pool size can +be configured via the max-pool-size and min-pool-size attributes.

    +
  • +
  • +

    It should only be used to send (i.e. produce) messages when looked +up in JNDI or injected.

    +
  • +
  • +

    It can be configured to use specific security credentials via the +user and password attributes. This is useful if the remote server to +which it is pointing is secured.

    +
  • +
  • +

    Resources acquired from it will be automatically enlisted any on-going +Jakarta Transactions. If you want to send a message from an Jakarta Enterprise Beans using CMT +then this is likely the connection factory you want to use so the send +operation will be atomically committed along with the rest of the Jakarta Enterprise Beans’s +transaction operations.

    +
  • +
+
+
+

To be clear, the inbound connector of the Artemis Jakarta Connectors RA (which is for +consuming messages) is only used by MDBs and other Jakarta Connectors based components. +It is not available to traditional clients.

+
+
+

Both a connection-factory and a pooled-connection-factory reference +a connector declaration.

+
+
+

A netty-connector is associated with a socket-binding which tells +the client using the connection-factory where to connect.

+
+
+
    +
  • +

    A connection-factory referencing a netty-connector is suitable to +be used by a remote client to send messages to or receive messages +from the server (assuming the connection-factory has an appropriately +exported entry).

    +
  • +
  • +

    A pooled-connection-factory looked up in JNDI or injected which is +referencing a netty-connector is suitable to be used by a local +client to send messages to a remote server granted the socket-binding +references an outbound-socket-binding pointing to the remote server in +question.

    +
  • +
  • +

    A pooled-connection-factory used by an MDB which is referencing a +remote-connector is suitable to consume messages from a remote server +granted the socket-binding references an outbound-socket-binding +pointing to the remote server in question.

    +
  • +
+
+
+

An in-vm-connector is associated with a server-id which tells the +client using the connection-factory where to connect (since multiple +Artemis servers can run in a single JVM).

+
+
+
    +
  • +

    A connection-factory referencing an in-vm-connector is suitable to +be used by a local client to either send messages to or receive +messages from a local server.

    +
  • +
  • +

    A pooled-connection-factory looked up in JNDI or injected which is +referencing an in-vm-connector is suitable to be used by a local +client only to send messages to a local server.

    +
  • +
  • +

    A pooled-connection-factory used by an MDB which is referencing an +in-vm-connector is suitable only to consume messages from a local +server.

    +
  • +
+
+
+

A http-connector is associated with the socket-binding that +represents the HTTP socket (by default, named http).

+
+
+
    +
  • +

    A connection-factory referencing a http-connector is suitable to +be used by a remote client to send messages to or receive messages from +the server by connecting to its HTTP port before upgrading to the +messaging protocol.

    +
  • +
  • +

    A pooled-connection-factory referencing a http-connector is +suitable to be used by a local client to send messages to a remote +server granted the socket-binding references an +outbound-socket-binding pointing to the remote server in question.

    +
  • +
  • +

    A pooled-connection-factory used by an MDB which is referencing a +http-connector is suitable only to consume messages from a remote +server granted the socket-binding references an +outbound-socket-binding pointing to the remote server in question.

    +
  • +
+
+
+

The entry declaration of a connection-factory or a +pooled-connection-factory specifies the JNDI name under which the +factory will be exposed. Only JNDI names bound in the +"java:jboss/exported" namespace are available to remote clients. If a +connection-factory has an entry bound in the "java:jboss/exported" +namespace a remote client would look-up the connection-factory using +the text after "java:jboss/exported". For example, the " +RemoteConnectionFactory`" is bound by default to +`"java:jboss/exported/jms/RemoteConnectionFactory" which means a remote +client would look-up this connection-factory using " +jms/RemoteConnectionFactory`". A `pooled-connection-factory should +not have any entry bound in the " java:jboss/exported`" namespace +because a `pooled-connection-factory is not suitable for remote +clients.

+
+
+

Since Jakarta Messaging 2.0, a default Jakarta Messaging connection factory is accessible to Jakarta EE +applications under the JNDI name java:comp/DefaultJMSConnectionFactory. +The WildFly messaging subsystem defines a pooled-connection-factory that +is used to provide this default connection factory. Any parameter change +on this pooled-connection-factory will be take into account by any EE +application looking the default Jakarta Messaging provider under the JNDI name +java:comp/DefaultJMSConnectionFactory.

+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
+    <server name="default">
+        [...]
+        <http-connector name="http-connector"
+                        socket-binding="http"
+                        endpoint="http-acceptor" />
+        <http-connector name="http-connector-throughput"
+                        socket-binding="http"
+                        endpoint="http-acceptor-throughput">
+            <param name="batch-delay"
+                   value="50"/>
+        </http-connector>
+        <in-vm-connector name="in-vm"
+                         server-id="0"/>
+      [...]
+      <connection-factory name="InVmConnectionFactory"
+                            connectors="in-vm"
+                            entries="java:/ConnectionFactory" />
+      <pooled-connection-factory name="activemq-ra"
+                            transaction="xa"
+                            connectors="in-vm"
+                            entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"/>
+      [...]
+   </server>
+</subsystem>
+
+
+
+

~(See standalone/configuration/standalone-full.xml)~

+
+
+
+

7.8.4. Jakarta Messaging Queues and Topics

+
+

Jakarta Messaging queues and topics are sub resources of the messaging-actively +subsystem. One can define either a jms-queue or jms-topic. Each +destination must be given a name and contain at least one entry in +its entries element (separated by whitespace).

+
+
+

Each entry refers to a JNDI name of the queue or topic. Keep in mind +that any jms-queue or jms-topic which needs to be accessed by a +remote client needs to have an entry in the "java:jboss/exported" +namespace. As with connection factories, if a jms-queue or or +jms-topic has an entry bound in the "java:jboss/exported" namespace a +remote client would look it up using the text after +"java:jboss/exported`". For example, the following `jms-queue +"testQueue" is bound to "java:jboss/exported/jms/queue/test" which means +a remote client would look-up this \{{kms-queue} using +"jms/queue/test". A local client could look it up using +"java:jboss/exported/jms/queue/test", "java:jms/queue/test", or more +simply "jms/queue/test":

+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
+    <server name="default">
+    [...]
+    <jms-queue name="testQueue"
+               entries="jms/queue/test java:jboss/exported/jms/queue/test" />
+    <jms-topic name="testTopic"
+               entries="jms/topic/test java:jboss/exported/jms/topic/test" />
+</subsystem>
+
+
+
+

~(See standalone/configuration/standalone-full.xml)~

+
+
+

Jakarta Messaging endpoints can easily be created through the CLI:

+
+
+
+
[standalone@localhost:9990 /] jms-queue add --queue-address=myQueue --entries=queues/myQueue
+
+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/jms-queue=myQueue:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "durable" => true,
+        "entries" => ["queues/myQueue"],
+        "selector" => undefined
+    }
+}
+
+
+
+

Pausing and resuming Queues and Topics

+
+
+

When a queue is paused, it will receive messages but will not deliver them. When it’s resumed, it’ll begin delivering the queued messages, if any. +When a topic is paused, it will receive messages but will not deliver them. Newly added subscribers will be paused too until the topic is resumed. When it is resumed, delivering will occur again. The persist parameter ensure that the topic stays paused on the restart of the server.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/jms-queue=myQueue:pause()
+
+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/jms-topic=myTopic:pause()
+
+
+
+

A number of additional commands to maintain the Jakarta Messaging subsystem are +available as well:

+
+
+
+
[standalone@localhost:9990 /] jms-queue --help --commands
+add
+...
+remove
+To read the description of a specific command execute 'jms-queue command_name --help'.
+
+
+
+
+

7.8.5. Dead Letter & Redelivery

+
+

Some of the settings are applied against an address wild card instead of +a specific messaging destination. The dead letter queue and redelivery +settings belong into this group:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
+   <server name="default">
+      [...]
+      <address-setting name="#"
+                       dead-letter-address="jms.queue.DLQ"
+                       expiry-address="jms.queue.ExpiryQueue"
+                       [...] />
+
+
+
+

~(See standalone/configuration/standalone-full.xml)~

+
+
+
+

7.8.6. Security Settings for Artemis addresses and Jakarta Messaging destinations

+
+

Security constraints are matched against an address wildcard, similar to +the DLQ and redelivery settings.

+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
+   <server name="default">
+      [...]
+      <security-setting name="#">
+          <role name="guest"
+                send="true"
+                consume="true"
+                create-non-durable-queue="true"
+                delete-non-durable-queue="true"/>
+
+
+
+

~(See standalone/configuration/standalone-full.xml)~

+
+
+
+

7.8.7. Security Domain for Users

+
+

By default, Artemis will use the " ApplicationDomain`" Elytron security +domain. This domain is used to authenticate users making connections to Artemis +and then they are authorized to perform specific functions based on their +role(s) and the `security-settings described above. This domain can be +changed by using the elytron-domain, e.g.:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
+   <server name="default">
+       <security elytron-domain="mySecurityDomain" />
+      [...]
+
+
+
+
+

7.8.8. SSL Configuration

+
+

The preferred way is to reuse an SSLContext defined in the Elytron subsystem and reference it using the ssl-context attribute available on http-acceptor, remote-acceptor, http-connector and remote-acceptor. +That way you can use the SSLContext with the broker but also with other services such as Undertow.

+
+
+ + + + + +
+ + +One point that you have to take into account is the fact that the connector might be used on a different point than the server you have configured it on. +For example, if you obtain the connection factory remotely using JNDI, the SSLContext configured in the connector is 'relative' to your client and not to the server it was configured. +That means that a standalone client wouldn’t be able to resolve it, and if this is running on another WildFly instance, the Elytron SSLContext must be configured there. +
+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:15.0">
+    [...]
+    <remote-acceptor name="acceptor" socket-binding="messaging" ssl-context="artemis-remote-ssl">
+        <param name="enabledProtocols" value="TLSv1.2"/>
+        <param name="use-nio" value="true"/>
+    </remote-acceptor>
+    [...]
+    <remote-connector name="netty" socket-binding="messaging-socket-binding" ssl-context="artemis-ra-ssl">
+        <param name="enabledProtocols" value="TLSv1.2"/>
+        <param name="use-nio" value="true"/>
+        <param name="verifyHost" value="true"/>
+    </remote-connector>
+    [...]
+</subsystem>
+[...]
+<subsystem xmlns="urn:wildfly:elytron:16.0">
+    [...]
+    <tls>
+        <key-stores>
+            <key-store name="artemisKS">
+                <credential-reference clear-text="artemisexample"/>
+                <implementation type="JKS"/>
+                <file path="server.keystore" relative-to="jboss.server.config.dir"/>
+            </key-store>
+            <key-store name="artemisTS">
+                <credential-reference clear-text="artemisexample"/>
+                <implementation type="JKS"/>
+                <file path="server.truststore" relative-to="jboss.server.config.dir"/>
+            </key-store>
+            [...]
+        </key-stores>
+        <key-managers>
+            <key-manager name="artemisKM" key-store="artemisKS">
+                <credential-reference clear-text="artemisexample"/>
+            </key-manager>
+            [...]
+        </key-managers>
+        <trust-managers>
+            <trust-manager name="artemisTM" key-store="artemisTS"/>
+            [...]
+        </trust-managers>
+        <server-ssl-contexts>
+            <server-ssl-context name="artemis-remote-ssl" protocols="TLSv1.2" key-manager="artemisKM" trust-manager="artemisTM"/>
+            [...]
+        </server-ssl-contexts>
+    </tls>
+</subsystem>
+
+
+
+
+

7.8.9. Cluster Authentication

+
+

If the Artemis server is configured to be clustered, it will use the +cluster 's user and password attributes to connect to other +Artemis nodes in the cluster.

+
+
+

If you do not change the default value of <cluster-password>, Artemis +will fail to authenticate with the error:

+
+
+
+
HQ224018: Failed to create session: HornetQExceptionerrorType=CLUSTER_SECURITY_EXCEPTION message=HQ119099: Unable to authenticate cluster user: HORNETQ.CLUSTER.ADMIN.USER
+
+
+
+

To prevent this error, you must specify a value for +<cluster-password>. It is possible to encrypt this value by as an encrypted +expression by referring to the Elytron documentation.

+
+
+

Alternatively, you can use the system property +jboss.messaging.cluster.password to specify the cluster password from +the command line.

+
+
+
+

7.8.10. Deployment of -jms.xml files

+
+

Starting with WildFly 29, you have the ability to deploy a -jms.xml file +defining Jakarta Messaging destinations, e.g.:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<messaging-deployment xmlns="urn:jboss:messaging-activemq-deployment:1.0">
+   <server name="default">
+      <jms-destinations>
+         <jms-queue name="sample">
+            <entry name="jms/queue/sample"/>
+            <entry name="java:jboss/exported/jms/queue/sample"/>
+         </jms-queue>
+      </jms-destinations>
+   </server>
+</messaging-deployment>
+
+
+
+ + + + + +
+ + +This feature is primarily intended for development as destinations +deployed this way can not be managed with any of the provided management +tools (e.g. console, CLI, etc). +
+
+
+
+

7.8.11. Jakarta Messaging Bridge

+
+

The function of a Jakarta Messaging bridge is to consume messages from a source Jakarta Messaging +destination, and send them to a target Jakarta Messaging destination. Typically either +the source or the target destinations are on different servers. +The bridge can also be used to bridge messages from other non Artemis +messaging servers, as long as they are JMS 1.1 compliant.

+
+
+

The Jakarta Messaging Bridge is provided by the Artemis project. For a detailed +description of the available configuration properties, please consult +the project documentation.

+
+
+
Modules for other messaging brokers
+
+

Source and target Jakarta Messaging resources (destination and connection factories) +are looked up using JNDI. +If either the source or the target resources are managed by another +messaging server than WildFly, the required client classes must be +bundled in a module. The name of the module must then be declared when +the Jakarta Messaging Bridge is configured.

+
+
+

The use of a Jakarta Messaging bridges with any messaging provider will require to +create a module containing the jar of this provider.

+
+
+

Let’s suppose we want to use an hypothetical messaging provider named +AcmeMQ. We want to bridge messages coming from a source AcmeMQ +destination to a target destination on the local WildFly messaging +server. To lookup AcmeMQ resources from JNDI, 2 jars are required, +acmemq-1.2.3.jar, mylogapi-0.0.1.jar (please note these jars do not +exist, this is just for the example purpose). We must not include a +Jakarta Messaging jar since it will be provided by a WildFly module directly.

+
+
+

To use these resources in a Jakarta Messaging bridge, we must bundle them in a WildFly +module:

+
+
+

in JBOSS_HOME/modules, we create the layout:

+
+
+
+
modules/
+`-- org
+    `-- acmemq
+        `-- main
+            |-- acmemq-1.2.3.jar
+            |-- mylogapi-0.0.1.jar
+            `-- module.xml
+
+
+
+

We define the module in module.xml:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<module xmlns="urn:jboss:module:1.9" name="org.acmemq">
+    <properties>
+        <property name="jboss.api" value="private"/>
+    </properties>
+ 
+ 
+    <resources>
+        <!-- insert resources required to connect to the source or target   -->
+        <!-- messaging brokers if it not another WildFly instance           -->
+        <resource-root path="acmemq-1.2.3.jar" />
+        <resource-root path="mylogapi-0.0.1.jar" />
+    </resources>
+ 
+ 
+    <dependencies>
+       <!-- add the dependencies required by messaging Bridge code                -->
+       <module name="java.se" />
+       <module name="jakarta.jms.api" />
+       <module name="jakarta.transaction.api"/>
+       <module name="org.jboss.remote-naming"/>
+       <!-- we depend on org.apache.activemq.artemis module since we will send messages to  -->
+       <!-- the Artemis server embedded in the local WildFly instance       -->
+       <module name="org.apache.activemq.artemis" />
+    </dependencies>
+</module>
+
+
+
+
+
Configuration
+
+

A Jakarta Messaging bridge is defined inside a jms-bridge section of the +messaging-activemq subsystem in the XML configuration files.

+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
+   <jms-bridge name="myBridge" module="org.acmemq">
+      <source connection-factory="ConnectionFactory"
+              destination="sourceQ"
+              user="user1"
+              password="pwd1"
+              quality-of-service="AT_MOST_ONCE"
+              failure-retry-interval="500"
+              max-retries="1"
+              max-batch-size="500"
+              max-batch-time="500"
+              add-messageID-in-header="true">
+         <source-context>
+            <property name="java.naming.factory.initial"
+                      value="org.acmemq.jndi.AcmeMQInitialContextFactory"/>
+            <property name="java.naming.provider.url"
+                      value="tcp://127.0.0.1:9292"/>
+         </source-context>
+      </source>
+      <target connection-factory"/jms/invmTargetCF"
+              destination="/jms/targetQ" />
+      </target>
+   </jms-bridge>
+</subsystem>
+
+
+
+

The source and target sections contain the name of the Jakarta Messaging resource +( connection-factory and destination) that will be looked up in +JNDI. +It optionally defines the user and password credentials. If they are +set, they will be passed as arguments when creating the Jakarta Messaging connection +from the looked up ConnectionFactory. +It is also possible to define JNDI context properties in the +source-context and target-context sections. If these sections are +absent, the Jakarta Messaging resources will be looked up in the local WildFly +instance (as it is the case in the target section in the example +above).

+
+
+
+
Management commands
+
+

A Jakarta Messaging Bridge can also be managed using the WildFly command line +interface:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging/jms-bridge=myBridge/:add(module="org.acmemq",
+      source-destination="sourceQ",
+      source-connection-factory="ConnectionFactory",
+      source-user="user1",
+      source-password="pwd1",
+      source-context={"java.naming.factory.initial" => "org.acmemq.jndi.AcmeMQInitialContextFactory",
+                      "java.naming.provider.url" => "tcp://127.0.0.1:9292"},
+      target-destination="/jms/targetQ",
+      target-connection-factory="/jms/invmTargetCF",
+      quality-of-service=AT_MOST_ONCE,
+      failure-retry-interval=500,
+      max-retries=1,
+      max-batch-size=500,
+      max-batch-time=500,
+      add-messageID-in-header=true)
+{"outcome" => "success"}
+
+
+
+

You can also see the complete Jakarta Messaging Bridge resource description from the +CLI:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging/jms-bridge=*/:read-resource-description
+{
+    "outcome" => "success",
+    "result" => [{
+        "address" => [
+            ("subsystem" => "messaging"),
+            ("jms-bridge" => "*")
+        ],
+        "outcome" => "success",
+        "result" => {
+            "description" => "A Jakarta Messaging bridge instance.",
+            "attributes" => {
+                ...
+        }
+    }]
+}
+
+
+
+
+
Statistics of a Jakarta Messaging Bridge
+
+

Currently two statistics are available on a Jakarta Messaging bridge: the number of processed messages and the number of aborted/rolled back messages. +Those are available with the following command :

+
+
+
+
/subsystem=messaging/jms-bridge=myBridge:read-attribute(name=message-count)
+{
+    "outcome" => "success",
+    "result" => 0L
+}
+
+/subsystem=messaging/jms-bridge=myBridge:read-attribute(name=aborted-message-count)
+{
+    "outcome" => "success",
+    "result" => 0L
+}
+
+
+
+
+
+

7.8.12. Component Reference

+
+

The messaging-activemq subsystem is provided by the Artemis project. For +a detailed description of the available configuration properties, please +consult the project documentation.

+
+
+
+
+ +
+
+
+
+
Controlling internal broker usage of memory and disk space
+
+

You can configure the disk space usage of the journal by using the global-max-disk-usage attribute, thus blocking the paging and processing of new messages until some disk space is available. +This is done from the CLI:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:write-attribute(name=global-max-disk-usage, value=70)
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+

You can define at which frequency the disk usage is checked using the disk-scan-period attribute.

+
+
+

In the same way configure the maximal memory affected to processing messages by using the global-max-memory-size attribute, thus blocking the processing of new messages until some memory space is available. +This is done from the CLI:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:write-attribute(name=global-max-memory-size, value=960000000)
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+
+
Critical analysis of the broker
+
+

When things go wrong on the broker, the critical analyzer may act as a safeguard shutting down the broker or the JVM.
+If the response time goes beyond a configured timeout, the broker is considered unstable and an action can be taken to either shutdown the broker or halt the VM. +Currently in WildFly this will only be logged but you can change that behaviour by setting the critical-analyzer-policy attribute to HALT or SHUTDOWN. +For this, the critical analyzer measures the response time in:

+
+
+
    +
  • +

    Queue delivery (adding to the queue)

    +
  • +
  • +

    Journal storage

    +
  • +
  • +

    Paging operations

    +
  • +
+
+
+

You can configure the critical analyzer on the broker using the CLI. +To disable the critical analyzer, you can execute the following CLI command:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:write-attribute(name=critical-analyzer-enabled, value=false)
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+

You can configure the critical analyzer with the following attributes:

+
+
+
    +
  • +

    critical-analyzer-enabled

    +
  • +
  • +

    critical-analyzer-timeout

    +
  • +
  • +

    critical-analyzer-check-period

    +
  • +
  • +

    critical-analyzer-policy

    +
  • +
+
+
+
+
Importing / Exporting the Journal
+
+

WildFly provides an operation to export the journal to a file which MUST be run in admin-mode. +This is done from the CLI:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:export-journal()
+{
+    "outcome" => "success",
+    "result" => "$JBOSS_HOME/standalone/data/activemq/journal-20210125-103331692+0100-dump.xml"
+}
+
+
+
+

You can now import such a dump file, in normal mode, using the command:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:import-journal(file=$FILE_PATH/journal-20210125-103331692+0100-dump.xml)
+{
+    "outcome" => "success"
+}
+
+
+
+

If you need to troubleshoot the journal you can use the print-data operation. Like the export operation, it needs to be executed in admin-mode. +Also this will send back a file so it must be coupled with the attachment operation to display or save the result. Note that the display operation won’t work properly if you are asking for a zipped version of the data.

+
+
+
+
[standalone@localhost:9990 /] attachment display --operation=/subsystem=messaging-activemq/server=default:print-data(secret)
+ATTACHMENT a69b87f3-ffeb-4596-be51-d73ebdc48b66:
+     _        _               _
+    / \  ____| |_  ___ __  __(_) _____
+   / _ \|  _ \ __|/ _ \  \/  | |/  __/
+  / ___ \ | \/ |_/  __/ |\/| | |\___ \
+ /_/   \_\|   \__\____|_|  |_|_|/___ /
+ Apache ActiveMQ Artemis 2.16.0
+
+ ....
+
+
+
+
+
+

7.8.13. Connect a pooled-connection-factory to a Remote Artemis Server

+
+

The messaging-activemq subsystem allows to configure a +pooled-connection-factory resource to let a local client deployed in +WildFly connect to a remote Artemis server.

+
+
+

The configuration of such a pooled-connection-factory is done in 3 +steps:

+
+
+
    +
  1. +

    create an outbound-socket-binding pointing to the remote messaging +server:

    +
    +
    +
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-artemis:add(host=<server host>, port=61616)
    +
    +
    +
  2. +
  3. +

    create a remote-connector referencing the outbound-socket-binding +created at step (1).

    +
    +
    +
    /subsystem=messaging-activemq/remote-connector=remote-artemis:add(socket-binding=remote-artemis)
    +
    +
    +
  4. +
  5. +

    create a pooled-connection-factory referencing the remote-connector +created at step (2).

    +
    +
    +
    /subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:add(connectors=[remote-artemis], entries=[java:/jms/remoteCF])
    +
    +
    +
  6. +
+
+
+

In Artemis 1.x topics and queues used had a prefix(jms.topic. and jms.queue.) that were prepended to the destination name. +In Artemis 2.x this is no longer the case, but for compatibility reasons WildFly still prepend those prefixes and tells Artemis to run in compatibility mode. +If you are connecting to a remote Artemis 2.x, it may not be in compatibility mode and thus the old prefixes may not be used anymore. +If you need to use destinations without those prefixes, you can configure your connection factory not to use them by setting the attribute enable-amq1-prefix to false.

+
+
+
+
/subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:write-attribute(name="enable-amq1-prefix", value="false")
+
+
+
+
Jakarta Messaging Queues and Topics on a remote Artemis Server
+
+

You can also add queues and topics defined on a remote Artemis server to be used as if they were local to the server. This means that you can make those remote destinations available via JNDI just like local destinations. +You can also configure destinations not to enable the Artemis 1.x prefixes by setting the attribute enable-amq1-prefix to false. Those destinations are defined out-of the server element:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
+    <external-jms-queue name="testQueue"
+               entries="jms/queue/test java:jboss/exported/jms/queue/test" enable-amq1-prefix="false" />
+    <external-jms-topic name="testTopic"
+               entries="jms/topic/test java:jboss/exported/jms/topic/test" enable-amq1-prefix="false" />
+</subsystem>
+
+
+
+

Jakarta Messaging endpoints can easily be created through the CLI:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/external-jms-queue=myQueue:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "entries" => ["queues/myQueue"]
+    }
+}
+
+
+
+

You don’t have operations to see or manage attributes of those destinations.

+
+
+
+
Configuration of a MDB using a pooled-connection-factory
+
+

When a pooled-connection-factory is configured to connect to a remote +Artemis, it is possible to configure Message-Driven Beans (MDB) to have +them consume messages from this remote server.

+
+
+

The MDB must be annotated with the @ResourceAdapter annotation using +the name of the pooled-connection-factory resource

+
+
+
+
import org.jboss.ejb3.annotation.ResourceAdapter;
+ 
+  @ResourceAdapter("remote-artemis")
+  @MessageDriven(name = "MyMDB", activationConfig = {
+    ...
+})
+public class MyMDB implements MessageListener {
+      public void onMessage(Message message) {
+       ...
+    }
+}
+
+
+
+

If the MDB needs to produce messages to the remote server, it must +inject the pooled-connection-factory by looking it up in JNDI using +one of its entries.

+
+
+
+
@Inject
+@JMSConnectionFactory("java:/jms/remoteCF")
+private JMSContext context;
+
+
+
+
Configuration of the destination
+
+

A MDB must also specify which destination it will consume messages from.

+
+
+

The standard way is to define a destinationLookup activation config +property that corresponds to a JNDI lookup on the local server.
+When the MDB is consuming from a remote Artemis server it will now create those bindings locally.
+It is possible to use the naming subsystem to configure +external context federation to have local JNDI +bindings delegating to external bindings.

+
+
+

However there is a simpler solution to configure the destination when +using the Artemis Resource Adapter.
+Instead of using JDNI to lookup the Jakarta Messaging Destination resource, you can +just specify the name of the destination (as configured in the remote +Artemis server) using the destination activation config property and +set the useJNDI activation config property to false to let the Artemis +Resource Adapter create automatically the Jakarta Messaging destination without +requiring any JNDI lookup.

+
+
+
+
@ResourceAdapter("remote-artemis")
+@MessageDriven(name = "MyMDB", activationConfig = {
+    @ActivationConfigProperty(propertyName = "useJNDI",         propertyValue = "false"),
+    @ActivationConfigProperty(propertyName = "destination",     propertyValue = "myQueue"),
+    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
+    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")
+})
+public class MyMDB implements MessageListener {
+    ...
+}
+
+
+
+

These properties configure the MDB to consume messages from the Jakarta Messaging +Queue named myQueue hosted on the remote Artemis server.
+In most cases, such a MDB does not need to lookup other destinations to +process the consumed messages and it can use the JMSReplyTo destination +if it is defined on the message.
+If the MDB needs any other Jakarta Messaging destinations defined on the remote +server, it must use client-side JNDI by following the +Artemis +documentation or configure external configuration context in the naming +subsystem (which allows to inject the Jakarta Messaging resources using the +@Resource annotation).

+
+
+
+
Configuration of a remote destination using annotations
+
+

The annotation @JMSDestinationDefinition can be used to create a destination on a remote Artemis Server. This will work in the same way as for a local server. +For this it needs to be able to access Artemis management queue. If your remote Artemis Server management queue is not the default one you can pass the management queue address as a property to the @JMSDestinationDefinition. +Please note that the destination is created remotely but won’t be removed once the deployement is undeployed/removed.

+
+
+
+
@JMSDestinationDefinition(
+    // explicitly mention a resourceAdapter corresponding to a pooled-connection-factory resource to the remote server
+    resourceAdapter = "activemq-ra",
+    name="java:global/env/myQueue2",
+    interfaceName="jakarta.jms.Queue",
+    destinationName="myQueue2",
+        properties = {
+            "management-address=my.management.queue",
+            "selector=color = 'red'"
+       }
+)
+
+
+
+

You can also configure destinations not to enable the Artemis 1.x prefixes by adding a property enable-amq1-prefix to false to the @JMSDestinationDefinition.

+
+
+
+
@JMSDestinationDefinition(
+    // explicitly mention a resourceAdapter corresponding to a pooled-connection-factory resource to the remote server
+    resourceAdapter = "activemq-ra",
+    name="java:global/env/myQueue2",
+    interfaceName="jakarta.jms.Queue",
+    destinationName="myQueue2",
+    properties = {
+        "enable-amq1-prefix=false"
+    }
+)
+
+
+
+
+
+
+

7.8.14. Backward & Forward Compatibility

+
+

WildFly supports both backwards and forwards compatibility with +legacy versions that were using HornetQ as their messaging brokers (such +as JBoss AS7 or WildFly 8 and 9).
+These two compatibility modes are provided by the ActiveMQ Artemis +project that supports HornetQ’s CORE protocol:

+
+
+
    +
  • +

    backward compatibility: WildFly messaging clients (using Artemis) can +connect to a legacy app server (running HornetQ)

    +
  • +
  • +

    forward compatibility: legacy messaging clients (using HornetQ) can connect +to a WildFly 29 app server (running Artemis).

    +
  • +
+
+
+
Forward Compatibility
+
+

Forward compatibility requires no code change in legacy messaging clients. It +is provided by the WildFly messaging-activemq subsystem and its +resources.

+
+
+
    +
  • +

    legacy-connection-factory is a subresource of the +messaging-activemq’s `server and can be used to store in JNDI a +HornetQ-based ConnectionFactory.

    +
  • +
+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
+    <server name="default">
+        ...
+        <legacy-connection-factory name="legacyConnectionFactory-discovery"
+                                   entries="java:jboss/exported/jms/RemoteConnectionFactory"
+                                   ... />
+    </server>
+</subsystem>
+
+
+
+
    +
  • +

    Legacy HornetQ-based messaging destinations can also be configured by +providing a legacy-entries attribute to the jms-queue and +jms-topic resource.

    +
  • +
+
+
+
+
    <jms-queue name="myQueue"
+               entries="java:jboss/exported/jms/myQueue-new"
+               legacy-entries="java:jboss/exported/jms/myQueue" />
+    <jms-topic name="testTopic"
+               entries="java:jboss/exported/jms/myTopic-new"
+               legacy-entries="java:jboss/exported/jms/myTopic" />
+
+
+
+

The legacy-entries must be used by legacy clients (using HornetQ) +while the regular entries are for WildFly 29 Jakarta Messaging clients (using +Artemis).

+
+
+

The legacy client will then lookup these legacy messaging resources to +communicate with WildFly.
+To avoid any code change in the legacy messaging clients, the legacy JNDI +entries must match the lookup expected by the legacy client.

+
+
+
Migration
+
+

During migration, the legacy messaging subsystem will create a +legacy-connection-factory resource and add legacy-entries to the +jms-queue and jms-topic resource if the boolean attribute +add-legacy-entries is set to true for its migrate operation. If +that is the case, the legacy entries in the migrated +messaging-activemq subsystem will correspond to the entries specified +in the legacy messaging subsystem and the regular entries will be +created with a -new suffix.
+If add-legacy-entries is set to false during migration, no legacy +resources will be created in the messaging-activemq subsystem and +legacy messaging clients will not be able to communicate with WildFly 29 +servers.

+
+
+
+
+
Backward Compatibility
+
+

Backward compatibility requires no configuration change in the legacy +server.
+WildFly 29 clients do not look up resources on the legacy server but +use client-side JNDI to create their Jakarta Messaging resources. WildFly’s Artemis client +can then use these resources to communicate with the legacy server +using the HornetQ CORE protocol.

+
+
+

Artemis supports +Client-side +JNDI to create Jakarta Messaging resources ( ConnectionFactory and Destination).

+
+
+

For example, if a WildFly 29 messaging client wants to communicate with a +legacy server using a queue named myQueue, it must use the +following properties to configure its JNDI InitialContext:

+
+
+
+
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
+connectionFactory.jms/ConnectionFactory=tcp://<legacy server address>:5445? \
+    protocolManagerFactoryStr=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory
+queue.jms/myQueue=myQueue
+
+
+
+

It can then use the jms/ConnectionFactory name to create the Jakarta Messaging +ConnectionFactory and jms/myQueue to create the Jakarta Messaging Queue.
+Note that the property +protocolManagerFactoryStr=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory +is mandatory when specifying the URL of the legacy connection factory so +that the Artemis JMS client can communicate with the HornetQ broker in +the legacy server.

+
+
+
+
+

7.8.15. AIO - NIO for messaging journal

+
+

Apache ActiveMQ Artemis (like HornetQ beforehand) ships with a high +performance journal. Since Apache ActiveMQ Artemis handles its own +persistence, rather than relying on a database or other 3rd party +persistence engine it is very highly optimised for the specific +messaging use cases. The majority of the journal is written in Java, +however we abstract out the interaction with the actual file system to +allow different pluggable implementations.

+
+
+

Apache ActiveMQ Artemis ships with two implementations:

+
+
+
    +
  • +

    Java NIO.

    +
  • +
+
+
+

The first implementation uses standard Java NIO to interface with the +file system. This provides extremely good performance and runs on any +platform where there’s a Java 6+ runtime.

+
+
+
    +
  • +

    Linux Asynchronous IO

    +
  • +
+
+
+

The second implementation uses a thin native code wrapper to talk to the +Linux asynchronous IO library (AIO). With AIO, Apache ActiveMQ Artemis +will be called back when the data has made it to disk, allowing us to +avoid explicit syncs altogether and simply send back confirmation of +completion when AIO informs us that the data has been persisted.

+
+
+

Using AIO will typically provide even better performance than using Java +NIO.

+
+
+

The AIO journal is only available when running Linux kernel 2.6 or later +and after having installed libaio (if it’s not already installed). If AIO is +not supported on the system then Artemis will fallback to NIO. To know which +type of journal is effectively used you can execute the following command using jboss-cli:

+
+
+
+
/subsystem=messaging-activemq/server=default:read-attribute(name=runtime-journal-type)
+
+
+
+

Please note that AIO is represented by ASYNCIO in the WildFly model configuration.

+
+
+

Also, please note that AIO will only work with the following file +systems: ext2, ext3, ext4, jfs, xfs. With other file systems, e.g. NFS +it may appear to work, but it will fall back to a slower synchronous +behaviour. Don’t put the journal on a NFS share!

+
+
+

One point that should be added is that AIO doesn’t work well with +encrypted partitions, thus you have to move to NIO on those.

+
+
+

What are the symptoms of an AIO isssue ?

+
+
+
AIO issue on WildFly 10
+
+

If you see the following exception in your WildFly log file / console

+
+
+
+
[org.apache.activemq.artemis.core.server] (ServerService Thread Pool -- 64) AMQ222010: Critical IO Error, shutting down the server. file=AIOSequentialFile:/home/wildfly/wildfly-10.0.0.Final/standalone/data/activemq/journal/activemq-data-2.amq, message=Cannot open file:The Argument is invalid: java.io.IOException: Cannot open file:The Argument is invalid
+ at org.apache.activemq.artemis.jlibaio.LibaioContext.open(Native Method)
+
+
+
+

that means that AIO isn’t working properly on your system.

+
+
+

To use NIO instead execute the following command using jboss-cli:

+
+
+
+
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-type, value=NIO)
+
+
+
+

You need to reload or restart your server and you should see the +following trace in your server console :

+
+
+
+
INFO  [org.apache.activemq.artemis.core.server] (ServerService Thread Pool -- 64) AMQ221013: Using NIO Journal
+
+
+
+
+
AIO issue on WildFly 9
+
+
+
[org.hornetq.core.server] (ServerService Thread Pool -- 64) HQ222010: Critical IO Error, shutting down the server. file=AIOSequentialFile:/home/wildfly/wildfly-9.0.2.Final/standalone/data/messagingjournal/hornetq-data-1.hq, message=Can't open file: HornetQException[errorType=NATIVE_ERROR_CANT_OPEN_CLOSE_FILE message=Can't open file]
+ at org.hornetq.core.libaio.Native.init(Native Method)
+
+
+
+

that means that AIO isn’t working properly on your system.

+
+
+

To use NIO instead execute the following commnd using jboss-cli :

+
+
+
+
/subsystem=messaging/hornetq-server=default:write-attribute(name=journal-type,value=NIO)
+
+
+
+

You need to reload or restart your server and you see the following +trace in your server console :

+
+
+
+
INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 64) HQ221013: Using NIO Journal
+
+
+
+
+
+

7.8.16. JDBC Store for Messaging Journal

+
+

The Artemis server that are integrated to WildFly can be configured to +use a JDBC store for its messaging journal instead of its file-based +journal.
+The server resource of the messaging-activemq subsystem needs to +configure its journal-datasource attribute to be able to use JDBC +store. If this attribute is not defined, the regular file-base journal +will be used for the Artemis server.
+This attribute value must correspond to a data source defined in the +datasource subsystem.

+
+
+

For example, if the datasources subsystem defines an ExampleDS data +source at /subsystem=datasources/data-source=ExampleDS, the Artemis +server can use it for its JDBC store with the operation:

+
+
+
+
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-datasource, value=ExampleDS)
+
+
+
+

Artemis JDBC store uses SQL commands to create the tables used to +persist its information.
+These SQL commands may differ depending on the type of database. The SQL +commands used by the JDBC store are located in modules/system/layers/base/org/apache/activemq/artemis/main/artemis-jdbc-store-${ARTEMIS_VERSION}.jar/journal-sql.properties.

+
+
+

Artemis uses different JDBC tables to store its bindings information, +the persistent messages and the large messages (paging is not supported +yet).

+
+
+

The name of these tables can be configured with the +journal-bindings-table, journal-messages-table, +journal-page-store-table, and journal-large-messages-table.

+
+
+

Please note that the configuration of the underlying pool is something that you need to take care of. +You need at least four connections:

+
+
+
    +
  • +

    one for the binding

    +
  • +
  • +

    one for the messages journal

    +
  • +
  • +

    one for the lease lock (if you use HA)

    +
  • +
  • +

    one for the node manager shared state (if you use HA)

    +
  • +
+
+
+

So you should define a min-pool-size of 4 for the pool.
+But one fact that you need to take into account is that paging and large messages can use an unbounded number of threads. +The size, a.k.a. max-pool-size, of the pool should be defined according to the amount of concurrent threads that perform page/large message streaming operations. There is no defined rule for this as there is no 1-1 relation between the number of threads and the number of connections. The number of connections depend on the number of threads processing paging and large messages operations as well as the time you are willing to wait to get a connection (cf. blocking-timeout-wait-millis). When new large messages or paging operations occur they will be in a dedicated thread and will try to get a connection, being enqueued until one is ready or the time to obtain one runs out which will create a failure.
+You really need to tailor your configuration according to your needs and test it in your environment following the DataSource configuration subsystem documentation and perform tests and peroformance runs before going to production.

+
+
+
Reference
+
+
+
+ +
+
+
+
+
+
+

7.8.17. Configuring Broadcast/Discovery

+
+

Each Artemis server can be configured to broadcast itself and/or discovery other Artemis servers within a cluster. +Artemis supports two mechanisms for configuring broadcast/discovery:

+
+
+
JGroups-based broadcast/discovery
+
+

Artemis can leverage the membership of an existing JGroups channel to both broadcast its identity and discover nodes on which Artemis servers are deployed. +WildFly’s default full-ha profile uses this mechanism for broadcast/discovery using the default JGroups channel of the server (as defined by the JGroups subsystem).

+
+
+

To add this support to a profile that does not include it by default, use the following:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/broadcast-group=bg-group1:add(jgroups-cluster=activemq-cluster,connectors=http-connector)
+[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/discovery-group=dg-group1:add(jgroups-cluster=activemq-cluster)
+
+
+
+

To segregate Artemis servers use a distinct membership, configure broadcast/discovery using a separate channel. To do this, first create the channel resource:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=jgroups/channel=messaging:add(stack=tcp)
+
+
+
+

This creates a new JGroups channel resource based on the "tcp" protocol stack. +Now create your broadcast/discovery groups using this channel:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/broadcast-group=bg-group2:add(jgroups-channel=messaging, jgroups-cluster=activemq-cluster, connectors=http-connector)
+[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/discovery-group=dg-group2:add(jgroups-channel=messaging, jgroups-cluster=activemq-cluster)
+
+
+
+
+
Multicast broadcast/discovery
+
+

To broadcast identity to standalone messaging clients, you can additionally configure broadcast/discovery using multicast sockets.

+
+
+

e.g.

+
+
+
+
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets/socket-binding=messaging(interface=private, multicast-address=230.0.0.4, multicast-port=45689)
+
+[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/broadcast-group=bg-group3:add(socket-binding=messaging, connectors=http-connector)
+[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default/discovery-group=dg-group3:add(socket-binding=messaging)
+
+
+
+
+
Cluster behind an HTTP load balancer
+
+

If the cluster is behind an HTTP load balancer we need to indicate to the clients that they must not use the cluster topology to connect to it but keep on using the initial connection to the load-balancer. +For this you need to specify on the (pooled) connection factory not to use the topology by setting the attribute "use-topology-for-load-balancing" to false.

+
+
+
+
/subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:write-attribute(name="use-topology-for-load-balancing", value="false")
+
+
+
+
+
Network Isolation (Split Brain)
+
+

It is possible that if a replicated live or backup server becomes isolated in a network that failover will occur and you will end up with 2 live servers serving messages in a cluster, this we call split brain. You main mitigate this problem by configuring one or more addresses that are part of your network topology, that will be pinged through the life cycle of the server.

+
+
+

The server will stop itself until the network is back on such case. +This is configured using the following configuration attributes:

+
+
+
    +
  • +

    network-check-NIC: The NIC (Network Interface Controller) to be used to validate the network.

    +
  • +
  • +

    network-check-period: The frequency of how often we should check if the network is still up.

    +
  • +
  • +

    network-check-timeout: The timeout used on the ping.

    +
  • +
  • +

    network-check-list: This is a comma separated list, no spaces, of DNS or IPs (it should accept IPV6) to be used to validate the network.

    +
  • +
  • +

    network-check-URL-list: The list of HTTP URIs to be used to validate the network.

    +
  • +
  • +

    network-check-ping-command: The command used to ping IPV4 addresses.

    +
  • +
  • +

    network-check-ping6-command: The command used to ping IPV6 addresses.

    +
  • +
+
+
+

For example, let’s ping the 10.0.0.1 IP address:

+
+
+
+
[standalone@localhost:9990 /]
+/subsystem=messaging-activemq/server=default:write-attribute(name=network-check-list, value="10.0.0.1")
+
+
+
+

Once 10.0.0.1 stops responding to the ping you will get an exception and the broker will stop:

+
+
+
+
WARN  [org.apache.activemq.artemis.logs] (ServerService Thread Pool -- 84) AMQ202002: Ping Address /10.0.0.1 wasnt reacheable.
+...
+INFO  [org.apache.activemq.artemis.logs] (Network-Checker-0 (NetworkChecker)) AMQ201001: Network is unhealthy, stopping service ActiveMQServerImpl::serverUUID=76e64326-f78e-11ea-b7a5-3ce1a1c35439
+
+
+
+
Warning
+
+

Make sure you understand your network topology as this is meant to validate your network. Using IPs that could eventually disappear or be partially visible may defeat the purpose. You can use a list of multiple IPs. Any successful ping will make the server OK to continue running

+
+
+
+
+
+
+

7.9. Transactions subsystem configuration

+
+

Required extension:

+
+
+
+
<extension module="org.jboss.as.transactions"/>
+
+
+
+

Basic subsystem configuration example:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
+  <core-environment node-identifier="${jboss.tx.node.id:1}">
+    <process-id>
+      <uuid/>
+    </process-id>
+  </core-environment>
+  <recovery-environment socket-binding="txn-recovery-environment"
+                        status-socket-binding="txn-status-manager"/>
+   <coordinator-environment statistics-enabled="${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
+  <object-store path="tx-object-store"
+                relative-to="jboss.server.data.dir"/>
+</subsystem>
+
+
+
+

7.9.1. Transaction subsystem configuration

+
+

Transaction subsystem configures the behaviour of the transaction manager. +Narayana is the transaction manager used in WildFly. +The second component configured within the subsystem is +WildFly Transaction Client +(the WFTC serves as an abstract layer to work with the transactional context).

+
+
+
Configuration of Narayana component
+
+

The structure of the transaction subsystem follows the structure of Narayana component. +Narayana defines a separate configuration bean for every +internal module. +For example any configuration related to Narayana core is available through beans +CoordinatorEnvironmentBean and +CoreEnvironmentBean, +for JTA processing it is +JTAEnvironmentBean, +for the transaction recovery setup it’s +RecoveryEnvironmentBean.

+
+
+

The transaction subsystem provides only a sub-set of the configuration available via Narayana beans. +Any other configuration option provided by Narayana is still possible to be configured via +system properties and JVM restart is usually required.

+
+
+

Narayana defines unified naming for the system properties which are used for configuration. +The system property is in form [bean name].[property name]. For example, the system property with name RecoveryEnvironmentBean.periodicRecoveryInitilizationOffset defined in +RecoveryEnvironmentBean +configures a waiting time for first time execution of the periodic recovery after application server starts.

+
+
+
+
Configuration in model and in XML
+
+

The transaction subsystem separates the configuration into sections in XML configuration file. +Every section belongs to some Narayana module. +The configuration for model consists, on the other hand, of a flat structure of attributes +(most of them at top level).

+
+
+

For example, the subsystem defines the node identifier under core-environment XML element in XML +configuration, while the node-identifer attribute is defined directly under /subsystem=transactions +resource in the model.

+
+
+

The description of individual attributes and their meaning can be found in the +Model Reference Guide.

+
+
+
jts
+
+

jts model attribute is configured as jts XML element

+
+
+
XML configuration enabling jts
+
+
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
+  ...
+  <jts />
+  ...
+</subsystem>
+
+
+
+
+
core-environment
+
+

node-identifier, process-id-uuid, process-id-socket-binding, process-id-socket-max-ports model + attributes are configured under core-environment XML element

+
+
+
XML configuration example for core-environment
+
+
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
+  ...
+  <core-environment node-identifier="1">
+    <process-id>
+      <socket socket-binding="txn-socket-id"
+              socket-process-id-max-ports="10"/>
+      </process-id>
+  </core-environment>
+  ...
+</subsystem>
+
+
+
+
+
recovery-environment
+
+

recovery-period, socket-binding, recovery-listener, status-socket-binding model attributes are configured under recovery-environment XML element

+
+
+
XML configuration example for recovery-environment
+
+
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
+  ...
+  <recovery-environment socket-binding="txn-recovery-environment"
+                        status-socket-binding="txn-status-manager"
+                        recovery-listener="false" />
+  ...
+</subsystem>
+
+
+
+

If you configure the recovery-listener then Narayana binds the linked socket, and a user may request +an explicit launch of +the recovery scan. +We can see an example of the socket communication in the following example.

+
+
+
telnet communication with recovery listener
+
+
telnet localhost 4712
+# command to start the recovery scan
+SCAN[enter]
+# at this time the transaction recovery has been started
+^]
+close
+
+
+
+
+
coordinator-environment
+
+

enable-tsm-status, statistics-enabled, default-timeout, maximum-timeout +model attributes are configured under coordinator-environment XML element

+
+
+
XML configuration example for coordinator-environment
+
+
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
+  ...
+  <coordinator-environment enable-tsm-status="true" statistics-enabled="true"
+                           default-timeout="300" maximum-timeout="31536000" />
+  ...
+</subsystem>
+
+
+
+transaction statistics +
+

When subsystem defines the statistics-enabled to true Narayana starts gathering +statistics about transaction processing. User can view a single attribute +or list all statistics attributes as a group. +Transaction statistics attributes are read-only runtime attributes.

+
+
+
observing all transaction statistics attributes
+
+
# connect to a running application server
+./bin/jboss-cli.sh -c
+
+# enable transaction statistics
+/subsystem=transactions:write-attribute(name=statistics-enabled, value=true)
+# list all statistics attributes
+/subsystem=transactions:read-attribute-group(name=statistics, include-runtime=true)
+
+
+
+
+
+
+
object-store
+
+

Narayana needs to persist data about transaction processing to a transaction log. +This persistent storage is called object store in context of Narayana. +Narayana requires to persist a log for an XA transactions that are processed +with the two-phase commit protocol. Otherwise, the transaction is held only in memory +without storing anything to the object store.

+
+
+

Narayana provides three object stores implementations.

+
+
+
    +
  • +

    ShadowNoFileLock store persists records in directory structure on the file system. +A separate file represents an record, log of a prepared transaction.
    +Used when attributes use-jdbc-store and use-journal-store are both false.

    +
  • +
  • +

    Journal store persists records in a journal file on the file system. +Records are stored in append only log implemented within ActiveMQ Artemis +project.
    +Used when attribute use-journal-store is true and use-jdbc-store is false.

    +
  • +
  • +

    JDBC stores persists records in a database. The records are accessible via JDBC connection. +This store requires a linked datasource from the datasources subsystem. +Used when attribute use-jdbc-store is true and use-journal-store is false.

    +
  • +
+
+
+
journal object-store
+
+

An XML configuration of object-store XML element configuring the journal store with model attributes +object-store-path, object-store-relative-to, journal-store-enable-async-io is

+
+
+
XML configuration example for object-store
+
+
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
+  ...
+    <object-store path="tx-object-store" relative-to="jboss.server.data.dir"/>
+    <use-journal-store enable-async-io="true"/>
+  ...
+</subsystem>
+
+
+
+
+
JDBC object-store
+
+

JDBC implementation makes the transaction log to be persisted into a database. +Transaction subsystem accesses the database via linked (via JNDI) non-transactional (jta=false) datasource. +When the transaction subsystem configures the JDBC store implementation then +the Transaction Manager creates one or few database tables (if they do not exist) to persist transaction data +when WildFly starts. Narayana creates a separate table for each store type. +Narayana uses the store type to grouping transaction records of the same type.

+
+
+

Narayana uses the following store types in WildFly

+
+
+
    +
  • +

    action store stores data for JTA transactions

    +
  • +
  • +

    state store stores data for TXOJ objects

    +
  • +
  • +

    communications store stores data for monitoring remote JTS transactions and storing CORBA IOR’s

    +
  • +
+
+
+

Attributes configuration may define a prefix for each store type. +When we configure no prefix, or the same prefix for all store types +then Narayana saves the transaction data into the same database table. +By default, Narayana persists transaction log in database table named JBossTSTxTable.

+
+
+
jboss cli example to setup JDBC object store
+
+
# PostgreSQL driver module
+./bin/jboss-cli.sh "embed-server, module add --name=org.postgresql --resources=/tmp/postgresql.jar \
+  --dependencies=java.se\,jakarta.transaction.api"
+
+# non-jta PostgreSQL datasource creation
+./bin/jboss-cli.sh "embed-server --server-config=standalone.xml,data-source add --name=JDBCStore \
+  --jndi-name=java:jboss/datasources/jdbcstore_postgresql --jta=false \
+  --connection-url=jdbc:postgresql://localhost:5432/test --user-name=test --password=test \
+  --driver-name=postgresql"
+
+# transaction subsystem configuration
+./bin/jboss-cli.sh "embed-server --server-config=standalone.xml, \
+  /subsystem=transactions:write-attribute(name=jdbc-store-datasource, \
+  value=java:jboss/datasources/jdbcstore_postgresql), \
+  /subsystem=transactions:write-attribute(name=use-jdbc-store,value=true)"
+./bin/jboss-cli.sh "embed-server --server-config=standalone.xml, \
+  /subsystem=transactions:write-attribute(name=jdbc-state-store-table-prefix,value=state), \
+  /subsystem=transactions:write-attribute(name=jdbc-state-store-drop-table,value=false),
+  /subsystem=transactions:write-attribute(name=jdbc-communication-store-table-prefix,value=communication), \
+  /subsystem=transactions:write-attribute(name=jdbc-communication-store-drop-table,value=false),
+  /subsystem=transactions:write-attribute(name=jdbc-action-store-table-prefix,value=action), \
+  /subsystem=transactions:write-attribute(name=jdbc-action-store-drop-table,value=false)"
+
+
+
+
XML configuration example for JDBC object-store
+
+
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
+  ...
+    <jdbc-store datasource-jndi-name="java:jboss/datasources/jdbcstore_postgresql">
+        <action table-prefix="action" drop-table="false"/>
+        <communication table-prefix="communication" drop-table="false"/>
+        <state table-prefix="state" drop-table="false"/>
+    </jdbc-store>
+  ...
+</subsystem>
+
+
+
+
+
+
commit-markable-resources
+
+

Makes possible for a database non-XA datasource (i.e., a local resource) to reliably +participate in an XA transaction +in the two-phase commit processing. +The datasource has to be configured with connectable attribute of value true and linked to transaction +subsystem as a commit markable resource (CMR).

+
+
+

As a prerequisite the database must contain a table named xids +(the database table name can be configured with attribute name under commit-markable-resource) +where Narayana persists additional metadata when two-phase commit prepares the non-XA datasource.

+
+
+

The SQL select that has to be working for xids table can be found +in the Narayana code.

+
+
+
example of SQL statement to create the xids table to store CMR metadata
+
+
-- PostgreSQL
+CREATE TABLE xids (
+  xid bytea, transactionManagerID varchar(64), actionuid bytea
+);
+CREATE UNIQUE INDEX index_xid ON xids (xid);
+
+-- Oracle
+CREATE TABLE xids (
+  xid RAW(144), transactionManagerID VARCHAR(64), actionuid RAW(28)
+);
+CREATE UNIQUE INDEX index_xid ON xids (xid);
+
+-- H2
+CREATE TABLE xids (
+  xid VARBINARY(144), transactionManagerID VARCHAR(64), actionuid VARBINARY(28)
+);
+CREATE UNIQUE INDEX index_xid ON xids (xid);
+
+
+
+
example of CMR datasource configuration in subsystem
+
+
# parameter 'connectable' is true for datasource
+./bin/jboss-cli.sh "embed-server --server-config=standalone.xml,\
+  /subsystem=datasources/data-source=ConnectableCMRDs:add(enabled=true, \
+  jndi-name=java:jboss/datasources/ConnectableCMRDs, jta=true, use-java-context=true, \
+  use-ccm=true, connectable=true, connection-url=\"jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\", \
+  driver-name=h2)"
+
+# linking the datasource into the transaction subsystem
+./bin/jboss-cli.sh "embed-server --server-config=standalone.xml,\
+  /subsystem=transactions/commit-markable-resource=\"java:jboss/datasources/ConnectableCMRDs\":add"
+./bin/jboss-cli.sh "embed-server --server-config=standalone.xml, \
+  /subsystem=transactions/commit-markable-resource=\"java:jboss/datasources/ConnectableCMRDs\":write-attribute(name=name, value=xids), \
+  /subsystem=transactions/commit-markable-resource=\"java:jboss/datasources/ConnectableCMRDs\":write-attribute(name=batch-size, value=10), \  /subsystem=transactions/commit-markable-resource=\"java:jboss/datasources/ConnectableCMRDs\":write-attribute(name=immediate-cleanup, value=false)"
+
+
+
+
XML configuration example for commit-markable-resources
+
+
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
+  ...
+  <commit-markable-resources>
+    <commit-markable-resource jndi-name="java:jboss/datasources/ConnectableCMRDs">
+      <xid-location name="xids" batch-size="10"/>
+    </commit-markable-resource>
+  </commit-markable-resources>
+  ...
+</subsystem>
+
+
+
+
+
log-store
+
+

log-store is a runtime only resource +that can be loaded with a snapshot of the content of the Narayana object store. +The operation /subsystem=transactions/log-store=log-store:probe loads +persisted transaction records from object store and that can be viewed in the model. +Another :probe operation flushes the old data and loads up-to-date records.

+
+
+
explore the snapshot of the Narayana object store
+
+
/subsystem=transactions/log-store=log-store:probe
+/subsystem=transactions/log-store=log-store:read-resource(recursive=true, include-runtime=true)
+
+
+
+

The resulted listing will be similar to the following one. +In this case we can see one transaction with one participant with status PREPARED.

+
+
+
+
{
+  "outcome" => "success",
+  "result" => {
+    "expose-all-logs" => false,
+    "type" => "default",
+    "transactions" => {"0:ffffc0a80065:-22769d16:60c87436:1a" => {
+      "age-in-seconds" => "48",
+      "id" => "0:ffffc0a80065:-22769d16:60c87436:1a",
+      "jmx-name" => undefined,
+      "type" => "StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction",
+      "participants" => {"1" => {
+        "eis-product-name" => undefined,
+        "eis-product-version" => undefined,
+        "jmx-name" => undefined,
+        "jndi-name" => "1",
+        "status" => "PREPARED",
+        "type" => "/StateManager/AbstractRecord/XAResourceRecord"
+      }}
+    }}
+  }
+}
+
+
+
+

The same content listed as a directory structure when we configure ShadowNoFileLock store

+
+
+
+
tree standalone/data/tx-object-store/
+standalone/data/tx-object-store/
+└── ShadowNoFileLockStore
+    └── defaultStore
+        ├── EISNAME
+        │   └── 0_ffffc0a80065_-22769d16_60c87436_14
+        └── StateManager
+            └── BasicAction
+                └── TwoPhaseCoordinator
+                    └── AtomicAction
+                        └── 0_ffffc0a80065_-22769d16_60c87436_1a
+
+
+
+
log-store transactions and participant operations
+
+

The transactions and participant resources contains several operations +that can be used to work with the content of the object store.

+
+
+
    +
  • +

    delete Removes the transaction record from the object store +and calls the XAResource.forget call at all participants.

    +
  • +
  • +

    refresh Reloads information from the Narayana object store about the participant +and updates the information from object store to model.

    +
  • +
  • +

    recover This operation switches the participant status to PREPARED. +This is useful mostly for HEURISTIC participant records as HEURISTIC state is +skipped by period recovery processing. Switching the HEURISTIC to PREPARED +means that the periodic recovery will try to finish the record.

    +
  • +
+
+
+
operations at log-store transactions structure
+
+
# delete of the transaction that subsequently deletes all participants
+/subsystem=transactions/log-store=log-store/transactions=0\:ffffc0a80065\:-22769d16\:60c87436\:1a:delete
+# delete of the particular participant
+/subsystem=transactions/log-store=log-store/transactions=0\:ffffc0a80065\:-22769d16\:60c87436\:1a/participants=1:delete
+# refresh and recover
+/subsystem=transactions/log-store=log-store/transactions=0\:ffffc0a80065\:-22769d16\:60c87436\:1a/participants=1:refresh
+/subsystem=transactions/log-store=log-store/transactions=0\:ffffc0a80065\:-22769d16\:60c87436\:1a/participants=1:recover
+
+
+
+
+
+
client
+
+

Configuration related to the +WildFly Transaction Client.

+
+
+
XML configuration example for client
+
+
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
+  ...
+  <client stale-transaction-time="600"/>
+  ...
+</subsystem>
+
+
+
+
+
+
+

7.10. Metrics Subsystem Configuration

+
+ + + + + +
+ + +
+

This subsystem exposes only base metrics from the WildFly Management Model and JVM MBeans.

+
+
+

MicroProfile Metrics is no longer supported by WildFly. For +a more robust alternative, see Micrometer and the micrometer susbsystem.

+
+
+
+
+

7.10.1. Extension

+
+

This org.wildfly.extension.metrics extension is included in all the standalone configurations included in the +WildFly distribution as well as the metrics layer.

+
+
+

You can also add the extension to a configuration without it either by adding +an <extension module="org.wildfly.extension.metrics"/> +element to the xml or by using the following CLI operation:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.metrics:add
+
+
+
+
+

7.10.2. Management Model

+
+

The /subsystem=metrics resource defines three attributes:

+
+
+
    +
  • +

    security-enabled - a boolean to indicate whether authentication is required to access the HTTP metrics endpoint (described below). By default, it is true. The +standalone configurations explicitly sets it to false to accept unauthenticated access to the HTTP endpoints.

    +
  • +
  • +

    exposed-subsystems - a list of strings corresponding to the names of subsystems that exposes their metrics in the HTTP metrics endpoints. +By default, it is not defined (there will be no metrics exposed by subsystem. The special wildcard "" can be used to expose metrics from all subsystems. The standalone +configuration sets this attribute to "".

    +
  • +
  • +

    prefix - A string to prepend to WildFly metrics that are exposed by the HTTP endpoint /metrics with the Prometheus output format.

    +
  • +
+
+
+
+

7.10.3. HTTP Endpoint

+
+

The Metric HTTP endpoint is accessible on WildFly HTTP management interface http://localhost:9990/metrics.

+
+
+

Secured access to the HTTP endpoint is controlled by the security-enabled attribute of the /subsystem=metrics resource. +If it is set to true, the HTTP client must be authenticated.

+
+
+

If security is disabled, the HTTP endpoint returns a 200 OK response:

+
+
+
+
$ curl -v http://localhost:9990/metrics
+< HTTP/1.1 200 OK
+...
+# HELP base_classloader_total_loaded_class_count Displays the total number of classes that have been loaded since the Java virtual machine has started execution
+.
+# TYPE base_classloader_total_loaded_class_count counter
+base_classloader_total_loaded_class_count 10822.0
+...
+
+
+
+

If security has been enabled, the HTTP client must pass the credentials corresponding to a management user +created by the add-user script. For example:

+
+
+
+
$ curl -v --digest -u myadminuser:myadminpassword http://localhost:9990/metrics
+< HTTP/1.1 200 OK
+...
+# HELP base_classloader_total_loaded_class_count Displays the total number of classes that have been loaded since the Java virtual machine has started execution
+.
+# TYPE base_classloader_total_loaded_class_count counter
+base_classloader_total_loaded_class_count 10822.0
+...
+
+
+
+

If the authentication fails, the server will reply with a 401 NOT AUTHORIZED response.

+
+
+
+

7.10.4. Exposed Metrics

+
+

The HTTP endpoint exposes the following metrics:

+
+
+
    +
  • +

    Base metrics - Metrics from JVM MBeans (read from their JMX MBeans)

    +
  • +
  • +

    Vendor metrics - WildFly Metrics from the management model subsystem and deployment subtrees.

    +
  • +
+
+
+

The HTTP endpoint exposes the metrics in the Prometheus format only.

+
+
+
WildFly Metrics Description
+
+

WildFly metrics names are based on the subsystem that provides them as well as the name of the attribute from the management model. +Their name can also be prepended with a prefix (specified on the /subsystem=metrics resource). +Other information is stored using labels.

+
+
+

For example Undertow exposes a metric attribute request-count for every Servlet in an application deployment. +This attribute will be exposed to Prometheus with the name wildfly_undertow_request_count. +Other information such as the name of the Servlet are added to the labels of the metrics.

+
+
+

The helloworld quickstart demonstrates the use of CDI and Servlet in Wildfly. +A corresponding metric will be exposed for it with the name and labels:

+
+
+
    +
  • +

    wildfly_undertow_request_count_total{deployment="helloworld.war",servlet="org.jboss.as.quickstarts.helloworld.HelloWorldServlet",subdeployment="helloworld.war"}

    +
  • +
+
+
+ + + + + +
+ + +Some subsystems (such as undertow or messaging-activemq) do not enable their statistics by default +as they have an impact on performance and memory usage. These subsystems provides a statistics-enabled attribute that must +be set to true to enable them. +For convenience, WildFly standalone configuration provides expressions to enable the statistics by setting a +System property -Dwildfly.statistics-enabled=true to enable statistics on the subsystems provided by the configuration. +
+
+
+
+
+
+

7.11. Micrometer Metrics Subsystem Configuration

+
+

Micrometer is a vendor-neutral observability facade that provides a generic, reusable API for registering and recording metrics related to application performance. This extension provides an integration with Micrometer, exposing its API to deployed applications so that they may expose application-specific metrics in addition to the server metrics added by the extension.

+
+
+ + + + + +
+ + +Standard WildFly continues to use the existing metrics subsystem, so this extension must be manually added and configured. See below for details. +
+
+
+

7.11.1. Extension

+
+

This org.wildfly.extension.micrometer extension is available to all the standalone configurations included in the WildFly distribution, but must be added manually:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.micrometer:add
+[standalone@localhost:9990 /] /subsystem=micrometer:add(endpoint="http://localhost:4318/v1/metrics")
+[standalone@localhost:9990 /] reload
+
+
+
+

This subsystem exposes metrics from the WildFly Management Model and JVM MBeans, as well as end-user applications via the Micrometer API now exposed to applications deployed to the server. By default, this extension will attempt to push metrics data via the OTLP protocol to an OpenTelemetry-compatible "collector". The endpoint for the collector must be configured explicitly, as you can see in the write-attribute statement above.

+
+
+ + + + + +
+ + +It is assumed that the server administrator will provision and secure the collector, which is outside the scope of this document. +
+
+
+

Note that this an alternative to the existing WildFly Metrics extension. While they may be run concurrently, it is not advisable, as this will likely have an impact on server performance due to the duplicated metrics collection. To disable WildFly Metrics, issue these commands:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=metrics:remove()
+[standalone@localhost:9990 /] /extension=org.wildfly.extension.metrics:remove()
+[standalone@localhost:9990 /] reload
+
+
+
+
+

7.11.2. Management Model

+
+

The /subsystem=micrometer resource defines three attributes:

+
+
+
    +
  • +

    endpoint - the URL of the metrics collector endpoint (default: http://localhost:4318/v1/metrics)

    +
  • +
  • +

    exposed-subsystems - a list of strings corresponding to the names of subsystems that exposes their metrics in the +HTTP metrics endpoints. By default, it is not defined (there will be no metrics exposed by subsystem). The special wildcard "*" can be used to expose metrics from all subsystems. The standalone configuration sets this attribute to "*".

    +
  • +
  • +

    step - the step size, or reporting frequency, to use (in seconds).

    +
  • +
+
+
+
+

7.11.3. Exposed Metrics

+
+

The following types of metrics are gathered and published by Micrometer:

+
+
+
    +
  • +

    Metrics from JVM MBeans (read directly from the JMX MBeans)

    +
  • +
  • +

    WildFly metrics from the management model subsystem and deployment subtrees.

    +
  • +
  • +

    Any application-specific metrics provided via the injected Micrometer MeterRegistry instance.

    +
  • +
+
+
+
WildFly Metrics Description
+
+

WildFly metrics names are based on the subsystem that provides them, as well as the name of the attribute from the management model.

+
+
+

For example Undertow exposes a metric attribute request-count for every Servlet in an application deployment. This attribute will be exposed with the name undertow_request_count. Other information such as the name of the Servlet are added to the tags of the metric.

+
+
+

The helloworld quickstart demonstrates the use of CDI and Servlet in WildFly. A corresponding metric will be exposed for it with the name and tags:

+
+
+
+
undertow_request_count_total{deployment="helloworld.war",servlet="org.jboss.as.quickstarts.helloworld.HelloWorldServlet",subdeployment="helloworld.war"} 4.0
+
+
+
+ + + + + +
+ + +Some subsystems (such as undertow or messaging-activemq) do not enable their statistics by default as they have an impact on performance and memory usage. These subsystems provide a statistics-enabled attribute that must be set to true to enable them. For convenience, WildFly standalone configuration provides expressions to enable the statistics by setting a System property -Dwildfly.statistics-enabled=true to enable statistics on the subsystems provided by the configuration. +
+
+
+
+
+

7.11.4. Use in Applications

+
+

Unlike the previous metrics systems, this new extension exposes an API (that of Micrometer) to applications in order to allow developers to record and export metrics out of the box. To do so, application developers will need to inject a MeterRegistry instance:

+
+
+
+
package com.redhat.wildfly.micrometerdemo;
+
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import io.micrometer.core.instrument.MeterRegistry;
+
+@RequestScoped
+@Path("/endpoint")
+public class Endpoint {
+    @Inject
+    private MeterRegistry registry;
+
+    @GET
+    public String method() {
+        registry.counter("dummy").increment();
+        return "Counter is " + registry.counter("dummy").count();
+    }
+}
+
+
+
+

This provides the application with a MeterRegistry instance that will have any recorded metrics exported with the system metrics WildFly already exposes. There is no need for an application to include the Micrometer dependencies in the application archive, as they are provided by the server out-of-the-box:

+
+
+
+
<dependency>
+    <groupId>io.micrometer</groupId>
+    <artifactId>micrometer-core</artifactId>
+    <version>${version.micrometer}</version>
+    <scope>provided</scope>
+</dependency>
+
+
+
+
+
+

7.12. OpenTelemetry Subsystem Configuration

+
+

7.12.1. Extension

+
+

This extension is not included in any of the standalone configurations included in the WildFly distribution. +To enable, the administrator must run the following CLI commands:

+
+
+
+
 $ jboss-cli.sh -c "/extension=org.wildfly.extension.opentelemetry:add()"
+ $ jboss-cli.sh -c "/subsystem=opentelemetry:add()"
+
+
+
+
+

7.12.2. Configuration

+
+

Systems administrators can configure a number of aspects of OpenTelemetry: the exporter, span processor, and sampler.

+
+
+
Exporter
+
+

The exporter can be selected and configured using the exporter child element, which supports these attributes:

+
+
+
    +
  • +

    exporter: WildFly supports two different exporters:

    +
    +
      +
    • +

      jaeger: The default exporter

      +
    • +
    • +

      otlp: The OpenTelemetry protocol

      +
    • +
    +
    +
  • +
  • +

    endpoint: The URL via which OpenTelemetry will push traces. The default is Jaeger’s gRPC-based endpoint, http://localhost:14250

    +
  • +
+
+
+
+
Span Processor
+
+

The span process is configured via the span-processor element, which supports the following attributes:

+
+
+
    +
  • +

    type: The type of span processor to use.

    +
    +
      +
    • +

      batch: The default processor, which sends traces in batches as configured via the remaining attributes

      +
    • +
    • +

      simple: Traces are pushed to the exporter as they finish.

      +
    • +
    +
    +
  • +
  • +

    batch-delay: The amount of time, in milliseconds, to wait before traces are published (default: 5000)

    +
  • +
  • +

    max-queue-size: The maximum size of the queue before traces are dropped (default: 2048)

    +
  • +
  • +

    max-export-batch-size: The maximum number of traces that are published in each batch, which must be smaller or equal to `max-queue-size (default: 512)

    +
  • +
  • +

    export-timeout: The maximum amount of time in milliseconds to allow for an export to complete before being cancelled (default: 30000)

    +
  • +
+
+
+
+
Sampler
+
+

The sampler is configured via the sampler element:

+
+
+
    +
  • +

    type: The type of sampler to use

    +
    +
      +
    • +

      on: Always on (all traces are recorded)

      +
    • +
    • +

      off: Always off (no traces are recorded)

      +
    • +
    • +

      ratio: Return a ratio of the traces (e.g., 1 trace in 10000).

      +
    • +
    +
    +
  • +
  • +

    ratio: The value used to configure the ratio sampler, which must be within [0.0, 1.0].For example, if 1 trace in 10,000 is to be exported, this value would be 0.0001.

    +
  • +
+
+
+
+
Example Configuration
+
+

The following XML is an example of the full configuration, including default values (WildFly does not typically persist +default values, so what you see in the configuration file may look different):

+
+
+
+
<subsystem xmlns="urn:wildfly:opentelemetry:1.0"
+        service-name="example">
+    <exporter
+        type="jaeger"
+        endpoint="http://localhost:14250"/>
+    <span-processor
+        type="batch"
+        batch-delay="4500"
+        max-queue-size="128"
+        max-export-batch-size="512"
+        export-timeout="45"/>
+    <sampler
+        type="on"/>
+</subsystem>
+
+
+
+
+
+

7.12.3. Application Usage

+
+

All incoming REST requests are automatically traced, so no work needs be done in user applications.If a REST request is received and the OpenTelemetry context propagation header (traceparent) is present, the request will traced as part of the remote trace context automatically.

+
+
+

Likewise, all Jakarta REST Client calls will have the trace context added to outgoing request headers so that requests to external applications can be traced correctly (assuming the remote system properly handles OpenTelemetry trace context propagation).If the REST Client call is made to another application on the local WildFly server, or a remote server of the same version or later, the trace context will propagate automatically as described above.

+
+
+

While automatic tracing may be sufficient in many cases, it will often be desirable to have traces occur throughout the user application.To support that, WildFly makes available the io.opentelemetry.api.OpenTelemetry and +io.opentelemetry.api.trace.Tracer instances, via CDI injection.A user application, then is able to create arbitrary spans as part of the server-managed trace:

+
+
+
+
@Path("/myEndpoint")
+public class MyEndpoint {
+    @Inject
+    private Tracer tracer;
+
+    @GET
+    public Response doSomeWork() {
+        final Span span = tracer.spanBuilder("Doing some work")
+                .startSpan();
+        span.makeCurrent();
+        doSomeMoreWork();
+        span.addEvent("Make request to external system.");
+        makeExternalRequest();
+        span.addEvent("All the work is done.");
+        span.end();
+
+        return Response.ok().build();
+}
+
+
+
+
+

7.12.4. Component Reference

+
+

OpenTelemetry support is provided via the OpenTelemetry project.

+
+
+
+
+

7.13. Health Subsystem Configuration

+
+ + + + + +
+ + +
+

This subsystem exposes only healthiness checks for the WildFly runtime. +Support for MicroProfile Health is provided by +the microprofile-health-smallrye subsystem.

+
+
+
+
+

7.13.1. Extension

+
+

This org.wildfly.extension.health extension is included in all the standalone configurations included in the +WildFly distribution as well as the health layer.

+
+
+

You can also add the extension to a configuration without it either by adding +an <extension module="org.wildfly.extension.health"/> +element to the xml or by using the following CLI operation:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.health:add
+
+
+
+
+

7.13.2. Management Model

+
+

The /subsystem=health resource defines one attribute:

+
+
+
    +
  • +

    security-enabled - a boolean to indicate whether authentication is required to access the HTTP health endpoint (described below). By default, it is true. The +standalone configurations explicitly sets it to false to accept unauthenticated access to the HTTP endpoints.

    +
  • +
+
+
+
+

7.13.3. HTTP Endpoint

+
+

The Health HTTP endpoint is accessible on the WildFly HTTP management interface http://localhost:9990/health.

+
+
+

The health subsystem registers three HTTP endpoints:

+
+
+
    +
  • +

    /health to test both the liveness and readiness of the application server.

    +
  • +
  • +

    /health/live to test the liveness of the application server

    +
  • +
  • +

    /health/ready to test the readiness of the application server.

    +
  • +
  • +

    /health/started to test the startup of the application server.

    +
  • +
+
+
+

The Health HTTP endpoints are accessible on the WildFly HTTP management interface (e.g. http://localhost:9990/health).

+
+
+

If the application server is healthy, it will return a 200 OK response:

+
+
+
+
$ curl -v http://localhost:9990/health
+< HTTP/1.1 200 OK
+
+
+
+

If the application server is not healthy, it returns 503 Service Unavailable

+
+
+
+
$ curl -v http://localhost:9990/health
+< HTTP/1.1 503 Service Unavailable
+
+
+
+
Secured Access to the HTTP endpoints
+
+

Secured access to the HTTP endpoint is controlled by the security-enabled attribute. +If it is set to true, the HTTP client must be authenticated.

+
+
+

If security has been enabled, the HTTP client must pass the credentials corresponding to a management user +created by the add-user script. For example:

+
+
+
+
$ curl -v --digest -u myadminuser:myadminpassword http://localhost:9990/health
+< HTTP/1.1 200 OK
+
+
+
+

If the authentication fails, the server will reply with a 401 NOT AUTHORIZED response.

+
+
+ + + + + +
+ + +The HTTP response contains additional information with individual outcomes for each probe that determined the healthiness. +This is informational only and the HTTP response code is the only relevant data to determine the healthiness of the application server. +
+
+
+
+
Default Server Procedures
+
+

WildFly provides some readiness procedures that are checked to determine if the application server is ready to serve requests:

+
+
+
    +
  • +

    boot-errors checks that there were no errors during the server boot sequence

    +
  • +
  • +

    deployments-status checks that all deployments were deployed without errors

    +
  • +
  • +

    server-state checks that the server state is running

    +
  • +
+
+
+
+
+
+

7.14. MicroProfile Config Subsystem Configuration

+
+

Support for MicroProfile Config is provided by + the microprofile-config-smallrye subsystem.

+
+
+

7.14.1. Required Extension

+
+

This extension is included in the standard configurations included in the +WildFly distribution.

+
+
+

You can also add the extension to a configuration without it either by adding +an <extension module="org.wildfly.extension.microprofile.config-smallrye"/> +element to the xml or by using the following CLI operation:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.config-smallrye:add
+
+
+
+
+

7.14.2. Supported ConfigSources

+
+

In addition to the default ConfigSources specified by the MicroProfile Config specification +(environment variables, System properties and META-INF/microprofile-config.properties file), the +microprofile-config-smallrye provides additional types of ConfigSource

+
+
+
ConfigSource from Properties
+
+

You can store properties directly in a config-source in the subsystem by using the properties +attribute when you add the config-source:

+
+
+
+
/subsystem=microprofile-config-smallrye/config-source=props:add(properties={"prop1" = "foo", "prop2" = "bar"})
+
+
+
+

This results in the XML configuration:

+
+
+
+
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
+    <config-source name="props">
+        <property name="prop1" value="foo"/>
+        <property name="prop2" value="bar"/>
+    </config-source>
+</subsystem>
+
+
+
+
+
ConfigSource from Directory
+
+

You can also read properties from a directory where each file is the name of +a property and the file content is the value of the property.

+
+
+

For example, let’s imagine that the directory /etc/config/numbers-app/ contains 2 files:

+
+
+
    +
  • +

    the num.size file contains the value 5

    +
  • +
  • +

    the num.max file contains the value 100

    +
  • +
+
+
+

We can create a config-source` to access these properties by using the operation:

+
+
+
+
/subsystem=microprofile-config-smallrye/config-source=file-props:add(dir={path=/etc/config/numbers-app})
+
+
+
+

This results in the XML configuration:

+
+
+
+
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:2.0">
+    <config-source name="file-props">
+        <dir path="/etc/config/numbers-app"/>
+    </config-source>
+</subsystem>
+
+
+
+

With that configuration, any application deployed in WildFly can use the num.size and +num.max properties that are stored in the directory:

+
+
+
+
@Inject
+@ConfigProperty(name = "num.size")
+int numSize; (1)
+
+@Inject
+@ConfigProperty(name = "num.max")
+int numMax; (2)
+
+
+
+ + + + + + + + + +
1will be set to 5
2will be set to 100
+
+
+ + + + + +
+ + +This corresponds to the layout used by OpenShift ConfigMaps. +The dir value corresponds to the mountPath in the ConfigMap definition in OpenShift or Kubernetes. +
+
+
+
ConfigSources from Root directory
+
+

You can also point to a root directory by adjusting the examples in the preceding section to include +root=true when defining them. Top level directories within this root directory each become an +individual ConfigSource reading from a directory similar to what we saw earlier in +ConfigSource from Directory. Any directories below the top-level +directories are ignored. Also, any files in the root directory are ignored; only files in the top +level directories within the root directory will be used for the configuration.

+
+
+

This is especially useful when running on OpenShift where constructs such as ConfigMap and +ServiceBinding instances get mapped under +a common known location. For example if there are two ConfigMap instances (for this example, +we will call them map-a, and map-b) used by your application pod, they will +each get mapped under /etc/config. So you would have /etc/config/map-a and /etc/config/map-b +directories.

+
+
+

Each of these directories will have files where the file name is the name of the property and the file +content is the value of the property, like we saw earlier.

+
+
+

We can thus simply run the following CLI command to pick up all these child directories as +a ConfigSource each:

+
+
+
+
/subsystem=microprofile-config-smallrye/config-source=config-map-root:add(dir={path=/etc/config, root=true})
+
+
+
+

This results in the XML configuration:

+
+
+
+
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:2.0">
+    <config-source name="config-map-root">
+        <dir path="/etc/config" root="true"/>
+    </config-source>
+</subsystem>
+
+
+
+

Assuming the /etc/config directory contains the map-a and map-b directories we are using +for this example, the above is analogous to doing:

+
+
+
+
/subsystem=microprofile-config-smallrye/config-source=file-props:add(dir={path=/etc/config/map-a})
+/subsystem=microprofile-config-smallrye/config-source=file-props:add(dir={path=/etc/config/map-b})
+
+
+
+

Specifying the root directory rather than each individual directory removes the need to know the +exact names of each entry under the common parent directory (this is especially useful in some +OpenShift scenarios where the names of these directories are auto-generated).

+
+
+

The situation where two ConfigSource entries under the same root both contain the same property +should be avoided. However, to make this situation deterministic, the directories representing each +ConfigSource are sorted by their name according to standard Java sorting rules before doing the +lookup of values. To make this more concrete, if we have the following entries: +* /etc/config/map-a/name contains kabir +* /etc/config/map-b/name contains jeff

+
+
+

Since map-a will come before map-b after sorting, in the following scenario kabir (coming from +map-a) will be injected for the following username field:

+
+
+
+
@Inject
+@ConfigProperty(name = "name")
+String username;
+
+
+
+

You may override this default sorting by including a file called config_ordinal in a directory. The +ordinal specified in that file will be used for config values coming from that directory. Building +on our previous example, if we had: +* /etc/config/map-a/config_ordinal contains 120 +* /etc/config/map-b/config_ordinal contains 140

+
+
+

Since now map-b has a higher ordinal (140) than map-a (120), we will instead inject the value +jeff for the earlier username field.

+
+
+

If there is no config_ordinal file in a top-level directory under the root directory, the +ordinal used when specifying the ConfigSource will be used for that directory.

+
+
+
+
+
ConfigSource from Class
+
+

You can create a specific type of ConfigSource implementation by creating a config-source resource +with a class attribute.

+
+
+

For example, you can provide an implementation of org.eclipse.microprofile.config.spi.ConfigSource +that is named org.example.MyConfigSource and provided by a JBoss module named org.example:

+
+
+
+
/subsystem=microprofile-config-smallrye/config-source=my-config-source:add(class={name=org.example.MyConfigSource, module=org.example})
+
+
+
+

This results in the XML configuration:

+
+
+
+
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:2.0">
+    <config-source name="my-config-source">
+        <class name="org.example.MyConfigSource" module="org.example"/>
+    </config-source>
+</subsystem>
+
+
+
+

All properties from this ConfigSource will be available to any WildFly deployment.

+
+
+
+
ConfigSourceProvider from Class
+
+

You can create a specific type of ConfigSourceProvider implementation by creating a config-source-provider resource +with a class attribute.

+
+
+

For example, you can provide an implementation of org.eclipse.microprofile.config.spi.ConfigSourceProvider +that is named org.example.MyConfigSourceProvider and provided by a JBoss module named org.example:

+
+
+
+
/subsystem=microprofile-config-smallrye/config-source-provider=my-config-source-provider:add(class={name=org.example.MyConfigSourceProvider, module=org.example})
+
+
+
+

This results in the XML configuration:

+
+
+
+
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:2.0">
+    <config-source-provider name="my-config-source-provider">
+         <class name="org.example.MyConfigSourceProvider" module="org.example"/>
+    </config-source-provider>
+</subsystem>
+
+
+
+

All properties from the ConfigSource`s provided by this `ConfigSourceProvider will be available to any WildFly deployment.

+
+
+
+
+

7.14.3. Deployment

+
+

Applications that are deployed in WildFly must have Jakarta Contexts and Dependency Injection enabled (e.g. with a META-INF/beans.xml +or by having Jakarta Contexts and Dependency Injection Bean annotation) to be able to use MicroProfile Config in their code.

+
+
+
+

7.14.4. Component Reference

+
+

The MicroProfile Config implementation is provided by the SmallRye Config project.

+
+
+ +
+
+
+
+

7.15. MicroProfile Health Subsystem Configuration

+
+

Support for MicroProfile Health is provided by + the microprofile-health-smallrye subsystem.

+
+
+

7.15.1. Required Extension

+
+

This extension is included in the standalone-microprofile configurations included in the +WildFly distribution.

+
+
+

You can also add the extension to a configuration without it either by adding +an <extension module="org.wildfly.extension.microprofile.health-smallrye"/> +element to the xml or by using the following CLI operation:

+
+
+
+
[standalone@localhost:9990 /]/extension=org.wildfly.extension.microprofile.health-smallrye:add
+
+
+
+

It depends on the base health extension org.wildfly.extension.health that must be installed.

+
+
+
+

7.15.2. Management Operations

+
+

The healthiness of the application server can be queried by calling 3 different operations:

+
+
+
    +
  • +

    check to check both the liveness and readiness of the runtime

    +
  • +
  • +

    check-live to check only the liveness of the runtime

    +
  • +
  • +

    check-ready to check only the readiness of the runtime

    +
  • +
  • +

    check-started to check only the startup of the runtime

    +
  • +
+
+
+
+
[standalone@localhost:9990 /] /subsystem=microprofile-health-smallrye:check
+{
+    "outcome" => "success", (1)
+    "result" => {
+        "status" => "UP", (2)
+        "checks" => [
+            {
+                "name" => "server-state",
+                "status" => "UP",
+                "data" => {"value" => "running"}
+            },
+            {
+                "name" => "empty-startup-checks",
+                "status" => "UP"
+            },
+            {
+                "name" => "empty-readiness-checks",
+                "status" => "UP"
+            },
+            {
+                "name" => "boot-errors",
+                "status" => "UP"
+            },
+            {
+                "name" => "empty-liveness-checks",
+                "status" => "UP"
+            },
+            {
+                "name" => "deployments-status",
+                "status" => "UP"
+            }
+        ]
+    }
+}
+
+
+
+ + + + + + + + + +
1this outcome means that the management operation is successful
2this status corresponds to the health check, UP if the application server is healthy, DOWN else.
+
+
+
+

7.15.3. HTTP Endpoints

+
+

The MicroProfile Health Check specifications defines three HTTP endpoints:

+
+
+
    +
  • +

    /health to test both the liveness and readiness of the application server.

    +
  • +
  • +

    /health/live to test the liveness of the application server

    +
  • +
  • +

    /health/ready to test the readiness of the application server.

    +
  • +
  • +

    /health/started to test the startup of the application server.

    +
  • +
+
+
+

The Health HTTP endpoints are accessible on WildFly HTTP management interface (e.g. http://localhost:9990/health).

+
+
+

If the application server is healthy, it will return a 200 OK response:

+
+
+
+
$ curl -v http://localhost:9990/health
+< HTTP/1.1 200 OK
+...
+{"status":"UP","checks":[{"name":"server-state","status":"UP","data":{"value":"running"}},{"name":"empty-startup-checks","status":"UP"},{"name":"empty-readiness-checks","status":"UP"},{"name":"boot-errors","status":"UP"},{"name":"empty-liveness-checks","status":"UP"},{"name":"deployments-status","status":"UP"}]}
+
+
+
+

If the application server is not healthy, it returns 503 Service Unavailable

+
+
+
+
$ curl -v http://localhost:9990/health
+< HTTP/1.1 503 Service Unavailable
+...
+{"outcome":"DOWN","checks":[{"name":"myFailingProbe","state":"DOWN","data":{"foo":"bar"}}]}
+
+
+
+
Secured Access to the HTTP endpoints
+
+

Secured access to the HTTP endpoint is controlled by the security-enabled attribute of the /subsystem=microprofile-health-smallrye resource. +The value of this attribute will override the security-enabled attribute of the /subsystem=health resource (documented in Health subsystem configuration guide). +If it is set to true, the HTTP client must be authenticated.

+
+
+

If security has been enabled, the HTTP client must pass the credentials corresponding to a management user +created by the add-user script. For example:

+
+
+
+
$ curl -v --digest -u myadminuser:myadminpassword http://localhost:9990/health
+< HTTP/1.1 200 OK
+...
+{"status":"UP","checks":[{"name":"empty-liveness-checks","status":"UP"},{"name":"server-state","status":"UP","data":{"value":"running"}},{"name":"boot-errors","status":"UP"},{"name":"deployments-status","status":"UP"},{"name":"empty-readiness-checks","status":"UP"}]}
+
+
+
+

If the authentication fails, the server will reply with a 401 NOT AUTHORIZED response.

+
+
+
+
Default Server Procedures
+
+

WildFly provides some readiness procedures that are checked to determine if the application server is ready to serve requests:

+
+
+
    +
  • +

    boot-errors checks that there were no errors during the server boot sequence

    +
  • +
  • +

    deployments-status checks that all deployments were deployed without errors

    +
  • +
  • +

    server-state checks that the server state is running

    +
  • +
  • +

    empty-readiness-checks determines the status when there are no readiness check procedures deployed to the server. The outcome of this procedure is determined by the empty-readiness-checks-status attribute. If the attribute is +UP (by default), the server can be ready when there are no readiness checks in the deployments. Setting the empty-readiness-checks-status attribute to DOWN will make this procedure fail when there are no readiness checks in the deployments.

    +
  • +
+
+
+

If a deployment does not provide any readiness checks, WildFly will automatically add one for each deployment (named ready-<deployment name>) which always returns UP.

+
+
+ + + + + +
+ + +
+

This allows applications that does not provide readiness checks to still be able to inform cloud containers when they are ready to serve requests. +Setting empty-readiness-checks-status to DOWN ensures that the server will not be ready until the application is deployed. At that time, the ready-<deployment name> +will be added (which returns UP) and the empty-readiness-checks procedure will no longer be checked as there is now a readiness check procedure provided either by the deployment or by the server.

+
+
+
+
+

WildFly also provide a liveness procedure that is checked to determine if the application server is live:

+
+
+
    +
  • +

    empty-liveness-checks determines the status when there are no liveness check procedures deployed to the server. The outcome of this procedure is determined by the empty-liveness-checks-status attribute. If the attribute is +UP (by default), the server can be live when there are no liveness checks in the deployments. Setting the empty-liveness-checks-status attribute to DOWN will make this procedure fail when there are no liveness checks in the deployments.

    +
  • +
+
+
+

WildFly also provides a similar procedure for what concerns startup checks:

+
+
+
    +
  • +

    empty-startup-checks determines the status when there are no startup check procedures deployed to the server. The outcome of this procedure is determined by the empty-startup-checks-status attribute. If the attribute is +UP (by default), the server can be ready when there are no startup checks in the deployments. Setting the empty-startup-checks-status attribute to DOWN will make this procedure fail when there are no readiness checks in the deployments.

    +
  • +
+
+
+

If a deployment does not provide any startup checks, WildFly will automatically add one for each deployment (named started-<deployment name>) which always returns UP.

+
+
+ + + + + +
+ + +
+

This allows applications that does not provide startup checks to still be able to inform cloud containers when they are started to proceed with the container start. +Setting empty-startup-checks-status to DOWN ensures that the server will not be ready until the application is deployed. At that time, the started-<deployment name> +will be added (which returns UP) and the empty-startup-checks procedure will no longer be checked as there is now a startup check procedure provided either by the deployment or by the server.

+
+
+
+
+
+
Disabling Default Server Procedures
+
+

It is possible to disable all these server procedures by using the MicroProfile Config property mp.health.disable-default-procedures.

+
+
+ + + + + +
+ + +
+

The MicroProfile Config property mp.health.disable-default-procedures is read at 2 different times:

+
+
+
    +
  1. +

    When the server starts, to determine if its server procedures should be disabled or enabled. It can be set using the system property mp.health.disable-default-procedures or the environment variable MP_HEALTH_DISABLE_DEFAULT_PROCEDURES. Setting this property in a deployment is ignored at that time.

    +
  2. +
  3. +

    When an application is deployed, to determine if WildFly should add a readiness check if the deployment does not provide any. At that time, setting this property in a microprofile-config.properties file in the deployment would be taken into account. (with the usual priority rules for MicroProfile Config properties).

    +
  4. +
+
+
+
+
+

When the mp.health.disable-default-procedures is set to true the server will not return any of its health checks in the responses which involve also the default empty configurable checks included before the deployments are processed, namely empty-readiness-checks, empty-startup-checks, and empty-liveness-checks. This means that the server might prematurely respond with invalid UP response particularly to startup and readiness invocations before the user deployment is processed. For this reason, MicroProfile Health specification defines two MicroProfile Config properties that specify the response returned while the server is still processing deployments, i.e. it returns an empty health response:

+
+
+
    +
  • +

    mp.health.default.readiness.empty.response (default DOWN) that specifies empty readiness response. This response will be switched to UP once the user deployment is processed even if it doesn’t contain any readiness checks. Otherwise, it will be switched to the status set by the user readiness checks.

    +
  • +
  • +

    mp.health.default.startup.empty.response (default DOWN) that specifies empty startup response. This response will be switched to UP once the user deployment is processed even if it doesn’t contain any startup checks. Otherwise, it will be switched to the status set by the user startup checks.

    +
  • +
+
+
+
+
+

7.15.4. Component Reference

+
+

The MicroProfile Health implementation is provided by the SmallRye Health project.

+
+
+ +
+
+
+
+

7.16. MicroProfile JWT Subsystem Configuration

+
+

Support for MicroProfile JWT RBAC is provided by the microprofile-jwt-smallrye subsystem.

+
+
+

The MicroProfile JWT specification describes how authentication can be performed using cryptographically signed JWT tokens and the contents of the token to be used to establish a resuting identity without relying on access to external repositories of identities such as databases or directory servers.

+
+
+

7.16.1. Subsystem

+
+

The MicroProfile JWT integration is provided by the microprofile-jwt-smallrye subsystem and is included in the default configuration, if not present the subsystem can be added using the following CLI commands.

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.jwt-smallrye:add
+
+[standalone@localhost:9990 /] /subsystem=microprofile-jwt-smallrye:add
+
+
+
+

At this point the server would need to be reloaded to activate the change.

+
+
+
+

7.16.2. Configuration

+
+

The microprofile-jwt-smallrye subsystem contains no configurable attributes or resources, it’s presence is required however to detect if a deployment is making use of the MP-JWT authentication mechanism and to activate support for JWT making use of the SmallRye JWT project.

+
+
+
Activation
+
+

The subsystem will scan all deployments to detect if the MP-JWT mechanism is required for any web components and if true activate the integration and the authentication mechanism.

+
+
+

The classes in the deployment will be scanned to identify if there is a class which extends jakarta.ws.rs.core.Application annotated with the org.eclipse.microprofile.auth.LoginConfig to specify an auth-method. Additionally the auth-method contained within the deployments web.xml will be checked.

+
+
+

If authentication configuration is defined within the @LoginConfig annotation and within the web.xml deployment descriptor the contents of the web.xml are given precedence.

+
+
+

If after evaluating the deployment the resulting auth-method is MP-JWT then this integration will be activated, in all other cases no activation will occur and deployment will continue as normal.

+
+
+
+
MicroProfile Config
+
+

For an individual deployment the configuration in relation to MicroProfile JWT can be provided using MicroProfile Config properties, many are defined within the MicroProfile JWT specification however SmallRye JWT also supports some additional properties.

+
+
+
MicroProfile JWT properties
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Property Name

Default

Description

mp.jwt.verify.publickey

none

Public Key supplied as a string, parsed from it in the order defined in section Supported Public Key Formats.

mp.jwt.verify.publickey.location

none

Config property allows for an external or internal location of Public Key to be specified.

mp.jwt.verify.publickey.algorithm

RS256

Signature algorithm. Set it to ES256 to support the Elliptic Curve signature algorithm.

mp.jwt.decrypt.key.location

none

Config property allows for an external or internal location of Private Decryption Key to be specified.

mp.jwt.verify.issuer

none

Expected value of the JWT iss (issuer) claim.

mp.jwt.verify.audiences

none

Comma separated list of the audiences that a token aud claim may contain.

mp.jwt.token.header

Authorization

Set this property if another header such as Cookie is used to pass the token.

mp.jwt.token.cookie

Bearer

Name of the cookie containing a token. This property will be effective only if mp.jwt.token.header is set to Cookie.

+
+

A minimal microprofile-config.properties could look like: -

+
+
+
+
mp.jwt.verify.publickey.location=META-INF/public.pem
+mp.jwt.verify.issuer=quickstart-jwt-issuer
+
+
+
+
+
Unavailable Options
+
+

There are presently a couple of limitations with support for JWKS which we are looking to address.

+
+
+
    +
  • +

    If a JWKS is inlined using the mp.jwt.verify.publickey property then only the first key from the set will be used with the remainder being ignored.

    +
  • +
  • +

    Encoding of JWKS using Base64 is presently unsupported.

    +
  • +
+
+
+

In both cases a clear text JWKS can be referenced instead using the mp.jwt.verify.publickey.location config property.

+
+
+

Support for Base64 encoded JWKS keys and inlined JWKS keys within the mp.jwt.verify.publickey property will be further evaluation and either support added or a contibution to the specification to remove these options.

+
+
+
+
SmallRye JWT Properties
+
+

The SmallRye JWT specific properties allow for a lot of customisation not covered by the specification, however as these are not specification defined they could be subject to change.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Property Name

Default

Description

smallrye.jwt.verify.key.location

NONE

Location of the verification key which can point to both public and secret keys. Secret keys can only be in the JWK format. Note that 'mp.jwt.verify.publickey.location' will be ignored if this property is set.

smallrye.jwt.verify.algorithm

RS256

Signature algorithm. Set it to ES256 to support the Elliptic Curve signature algorithm. This property is deprecated, use mp.jwt.verify.publickey.algorithm.

smallrye.jwt.verify.key-format

ANY

Set this property to a specific key format such as PEM_KEY, PEM_CERTIFICATE, JWK or JWK_BASE64URL to optimize the way the verification key is loaded.

smallrye.jwt.verify.relax-key-validation

false

Relax the validation of the verification keys, setting this property to true will allow public RSA keys with the length less than 2048 bit.

smallrye.jwt.verify.certificate-thumbprint

false

If this property is enabled then a signed token must contain either 'x5t' or 'x5t#S256' X509Certificate thumbprint headers. Verification keys can only be in JWK or PEM Certificate key formats in this case. JWK keys must have a 'x5c' (Base64-encoded X509Certificate) property set.

smallrye.jwt.token.header

Authorization

Set this property if another header such as Cookie is used to pass the token. This property is deprecated, use mp.jwt.token.header.

smallrye.jwt.token.cookie

none

Name of the cookie containing a token. This property will be effective only if smallrye.jwt.token.header is set to Cookie. This property is deprecated, use mp.jwt.token.cookie.

smallrye.jwt.always-check-authorization

false

Set this property to true for Authorization header be checked even if the smallrye.jwt.token.header is set to Cookie but no cookie with a smallrye.jwt.token.cookie name exists.

smallrye.jwt.token.schemes

Bearer

Comma-separated list containing an alternative single or multiple schemes, for example, DPoP.

smallrye.jwt.token.kid

none

Key identifier. If it is set then the verification JWK key as well every JWT token must have a matching kid header.

smallrye.jwt.time-to-live

none

The maximum number of seconds that a JWT may be issued for use. Effectively, the difference between the expiration date of the JWT and the issued at date must not exceed this value.

smallrye.jwt.require.named-principal

false

If an application relies on java.security.Principal returning a name then a token must have a upn or preferred_username or sub claim set. Setting this property will result in SmallRye JWT throwing an exception if none of these claims is available for the application code to reliably deal with a non-null Principal name.

smallrye.jwt.path.sub

none

Path to the claim containing the subject name. It starts from the top level JSON object and can contain multiple segments where each segment represents a JSON object name only, example: realms/subject. This property can be used if a token has no 'sub' claim but has the subject set in a different claim. Use double quotes with the namespace qualified claims.

smallrye.jwt.claims.sub

none

This property can be used to set a default sub claim value when the current token has no standard or custom sub claim available. Effectively this property can be used to customize java.security.Principal name if no upn or preferred_username or sub claim is set.

smallrye.jwt.path.groups

none

Path to the claim containing the groups. It starts from the top level JSON object and can contain multiple segments where each segment represents a JSON object name only, example: realm/groups. This property can be used if a token has no 'groups' claim but has the groups set in a different claim. Use double quotes with the namespace qualified claims.

smallrye.jwt.groups-separator

' '

Separator for splitting a string which may contain multiple group values. It will only be used if the smallrye.jwt.path.groups property points to a custom claim whose value is a string. The default value is a single space because a standard OAuth2 scope claim may contain a space separated sequence.

smallrye.jwt.claims.groups

none

This property can be used to set a default groups claim value when the current token has no standard or custom groups claim available.

smallrye.jwt.jwks.refresh-interval

60

JWK cache refresh interval in minutes. It will be ignored unless the mp.jwt.verify.publickey.location points to the HTTP or HTTPS URL based JWK set and no HTTP Cache-Control response header with a positive max-age parameter value is returned from a JWK set endpoint.

smallrye.jwt.jwks.forced-refresh-interval

30

Forced JWK cache refresh interval in minutes which is used to restrict the frequency of the forced refresh attempts which may happen when the token verification fails due to the cache having no JWK key with a kid property matching the current token’s kid header. It will be ignored unless the mp.jwt.verify.publickey.location points to the HTTP or HTTPS URL based JWK set.

smallrye.jwt.expiration.grace

60

Expiration grace in seconds. By default an expired token will still be accepted if the current time is no more than 1 min after the token expiry time.

smallrye.jwt.verify.aud

none

Comma separated list of the audiences that a token aud claim may contain. This property is deprecated. Use mp.jwt.verify.audiences instead.

smallrye.jwt.required.claims

none

Comma separated list of the claims that a token must contain.

smallrye.jwt.decrypt.key.location

none

Config property allows for an external or internal location of Private Decryption Key to be specified. This property is deprecated, use mp.jwt.decrypt.key.location.

smallrye.jwt.decrypt.algorithm

RSA_OAEP

Decryption algorithm.

smallrye.jwt.token.decryption.kid

none

Decryption Key identifier. If it is set then the decryption JWK key as well every JWT token must have a matching kid header.

+
+
+
+
+

7.16.3. Virtual Security

+
+

For traditional deployments to WildFly where security is required a security domain name would be identified during deployment and this in turn would be mapped to use configured resources either within the elytron or legacy security subsystems.

+
+
+

One of the main motivations for using MicroProfile JWT is the ability to describe an identity from the incoming token without relying on access to external resources. For this reason MicroProfile JWT deployments will not depend on managed SecurityDomain resources, instead a virtual SecurityDomain will be created and used across the deployment.

+
+
+

As the deployment is configured entirely within the MicroProfile Config properties other than the presence of the microprofile-jwt-smallrye subsystem the virtual SecurityDomain means no other managed configuration is required for the deployment.

+
+
+
+
+

7.17. MicroProfile OpenAPI Subsystem Configuration

+
+

The OpenAPI specification defines a contract for JAX-RS applications in the same way that WSDL defined a contract for legacy web services. +The MicroProfile OpenAPI specification defines a mechanism for generating an OpenAPI v3 document from a JAX-RS application as well as an API for customizing production of the document.

+
+
+

7.17.1. Subsystem

+
+

The MicroProfile OpenAPI capability is provided by the microprofile-openapi-smallrye subsystem. +This subsystem is included in the default standalone-microprofile.xml configuration of the WildFly distribution.

+
+
+

You can also add the subsystem manually to any profile via the CLI:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.openapi-smallrye:add()
+
+[standalone@localhost:9990 /] /subsystem=microprofile-openapi-smallrye:add()
+
+
+
+
+

7.17.2. Configuration

+
+

The microprofile-openapi-smallrye subsystem obtains all of its configuration via MicroProfile Config. Thus the subsystem itself defines no attributes.

+
+
+

In addition to the standard Open API configuration properties, WildFly supports the following additional MicroProfile Config properties:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDefaultDescription

mp.openapi.extensions.enabled

true

Enables/disables registration of an OpenAPI endpoint. Many users will want to parameterize this to selectively enable/disable OpenAPI in different environments.

mp.openapi.extensions.path

/openapi

Used to customize the path of the OpenAPI endpoint.

mp.openapi.extensions.servers.relative

true

Indicates whether auto-generated Server records are absolute or relative to the location of the OpenAPI endpoint. If absolute, WildFly will generate Server records including the protocols, hosts, and ports at which the given deployment is accessible.

+
+

e.g. /META-INF/microprofile-config.properties:

+
+
+
+
mp.openapi.extensions.enabled=${microprofile.openapi.enabled}
+mp.openapi.extensions.path=/swagger
+mp.openapi.extensions.servers.relative=false
+
+
+
+
+

7.17.3. HTTP/S Endpoint

+
+

The MicroProfile OpenAPI specification defines an HTTP endpoint that serves an OpenAPI 3.0 document describing the REST endpoints for the host. +The OpenAPI endpoint is registered using the configured path (e.g. http://localhost:8080/openapi) local to the root of the host associated with a given deployment.

+
+
+ + + + + +
+ + +Currently, the OpenAPI endpoint for a given virtual host can only document a single JAX-RS deployment. +To use OpenAPI with multiple JAX-RS deployments registered with different context paths on the same virtual host, each deployment should use a distinct endpoint path. +
+
+
+

By default, the OpenAPI endpoint returns a YAML document. +Alternatively, a JSON document can be requested via an Accept HTTP header, or a format query parameter.

+
+
+

e.g.

+
+
+
+
$ curl -v http://localhost:8080/openapi?format=JSON
+< HTTP/1.1 200 OK
+...
+{"openapi": "3.0.1" ... }
+
+
+$ curl -v -H'Accept: application/json' http://localhost:8080/openapi
+< HTTP/1.1 200 OK
+...
+{"openapi": "3.0.1" ... }
+
+
+
+

If the Undertow server/host of a given application defines an HTTPS listener, then the OpenAPI document will also be available via HTTPS, e.g. https://localhost:8443/openapi

+
+
+
+

7.17.4. Component Reference

+
+

The MicroProfile OpenAPI implementation is provided by the SmallRye OpenAPI project.

+
+
+ +
+
+ + + + + +
+ + +References in this document to Java API for RESTful Web Services (JAX-RS) refer to Jakarta RESTful Web Services unless otherwise noted. +
+
+
+
+
+

7.18. MicroProfile Fault Tolerance Subsystem

+
+

7.18.1. Specification

+
+

WildFly’s MicroProfile Fault Tolerance subsystem implements MicroProfile Fault Tolerance 4.0.

+
+
+

This MicroProfile specification provides the following interceptor bindings:

+
+
+
    +
  • +

    @Timeout to define a maximum duration or an execution.

    +
  • +
  • +

    @Retry to attempt execution again in case of a failure.

    +
  • +
  • +

    @Fallback to provide an alternative execution in case of a prior failure.

    +
  • +
  • +

    @CircuitBreaker to automatically fail-fast when an execution repeatedly fails.

    +
  • +
  • +

    @Bulkhead to limit concurrent executions so that one method doesn’t overload the entire system.

    +
  • +
  • +

    @Asynchronous to execute a method asynchronously.

    +
  • +
+
+
+

For complete documentation please refer to MicroProfile Fault Tolerance 4.0 specification.

+
+
+

Support for MicroProfile Fault Tolerance is +provided as by the microprofile-fault-tolerance-smallrye subsystem.

+
+
+

The MicroProfile Fault Tolerance implementation is provided by the SmallRye Fault Tolerance project.

+
+
+
+

7.18.2. Required Extension

+
+

This extension is automatically included in the standalone-microprofile server profiles, +however, it is not included by default in the default configuration of WildFly.

+
+
+ + + + + +
+ + +The MicroProfile Metrics extension and subsystem are required by this extension to provide Metrics integration, +please follow the instructions in the MicroProfile Metrics Subsystem Configuration section. +If the Metrics subsystem is not available, no metrics data will be collected. +
+
+
+

You can add the extension to a configuration without it either by using the following CLI operations:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.fault-tolerance-smallrye:add
+{"outcome" => "success"}
+
+[standalone@localhost:9990 /] /subsystem=microprofile-fault-tolerance-smallrye:add
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+[standalone@localhost:9990 /] reload
+
+
+
+

Or by adding an element to the application server profile XML to <extensions> section:

+
+
+
+
<extension module="org.wildfly.extension.microprofile.fault-tolerance-smallrye"/>
+
+
+
+

and then the subsystem in the <profile> section:

+
+
+
+
<subsystem xmlns="urn:wildfly:microprofile-fault-tolerance-smallrye:1.0"/>
+
+
+
+

The subsystem itself does not have any configurable elements.

+
+
+
+

7.18.3. Configuration

+
+

Apart from configuration properties defined by the specification, the SmallRye implementation provides the following +configuration properties:

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 3. SmallRye Fault Tolerance configuration properties
NameDefaultDescription

io.smallrye.faulttolerance.mainThreadPoolSize

100

Maximum number of threads in the thread pool.

io.smallrye.faulttolerance.mainThreadPoolQueueSize

-1 (unbounded)

Size of the queue that the thread pool should use.

+
+
+
+

7.19. MicroProfile Reactive Streams Operators Subsystem Configuration

+
+

Support for MicroProfile Reactive Streams Operators is +provided as a Tech Preview feature by the microprofile-reactive-streams-operators-smallrye subsystem.

+
+
+

7.19.1. Required Extension

+
+

This extension is not included in the standard configurations included in the WildFly distribution.

+
+
+

You can add the extension to a configuration either by adding +an <extension module="org.wildfly.extension.microprofile.reactive-streams-operators-smallrye"/> +element to the xml or by using the following CLI operation:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.reactive-streams-operators-smallrye:add
+{"outcome" => "success"}
+
+[standalone@localhost:9990 /] /subsystem=microprofile-reactive-streams-operators-smallrye:add
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+

If you provision your own server and include the microprofile-reactive-streams-operators layer, you will get the required modules, and the extension and subsystem will be added to your configuration.

+
+
+
+

7.19.2. Specification

+
+

WildFly’s MicroProfile Reactive Streams Operators subsystem implements MicroProfile Reactive Streams Operators 2.0, which adds support for asynchronous streaming of data. It essentially replicates the the interfaces, and their implementations, that were made available in the java.util.concurrent.Flow class introduced in Java 9. Thus MicroProfile Reactive Streams Operators can be considered a stop-gap until Java 9 and later is ubiquitous.

+
+
+
+

7.19.3. Configuration

+
+

The microprofile-reactive-streams-operators-smallrye subsystem contains no configurable attributes or resources. Its presence makes the interfaces +from the MicroProfile Reactive Streams Operators available to a deployment, and provides the implementation. Additionally it makes an instance of the ReactiveStreamsEngine class available for injection.

+
+
+
Activation
+
+

If the subsystem is present, the MicroProfile Reactive Streams Operators functionality will be available for all deployments on the server.

+
+
+
+
+

7.19.4. Component Reference

+
+

The MicroProfile Reactive Streams Operators implementation is provided by the SmallRye Mutiny project.

+
+ +
+
+
+

7.20. MicroProfile Reactive Messaging Subsystem Configuration

+
+
+
:smallrye-reactive-messaging-version:       3.6
+:smallrye-reactive-messaging-tag:           {smallrye-reactive-messaging-version}.0
+:eclipse-mp-reactive-messaging-api-version: 2.0
+
+
+
+

Support for MicroProfile Reactive Messaging is +provided as a Tech Preview feature by the microprofile-reactive-messaging-smallrye subsystem.

+
+
+

7.20.1. Required Extension

+
+

This extension is not included in the standard configurations included in the WildFly distribution.

+
+
+

You can add the extension to a configuration either by adding +an <extension module="org.wildfly.extension.microprofile.reactive-messaging-smallrye"/> +element to the xml or by using the following CLI operation:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.reactive-messaging-smallrye:add
+{"outcome" => "success"}
+
+[standalone@localhost:9990 /] /subsystem=microprofile-reactive-messaging-smallrye:add
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+

To use this subsystem, you must also enable the MicroProfile Reactive Streams Operators extension and subsystem.

+
+
+

If you provision your own server and include the microprofile-reactive-messaging Galleon layer, you will get the required modules, and the extension and subsystem will be added to your configuration.

+
+
+

If you provision the microprofile-reactive-messaging-kafka Galleon layer it includes the modules to enable the Kafka connector functionality. The microprofile-reactive-messaging-kafka layer includes the microprofile-reactive-messaging layer which provides the core MicroProfile Reactive Messaging functionality.

+
+
+
+

7.20.2. Specification

+
+

WildFly’s MicroProfile Reactive Messaging subsystem implements MicroProfile Reactive Messaging {eclipse-mp-reactive-messaging-api-version}, which adds support for asynchronous messaging support based on MicroProfile Reactive Streams Operators.

+
+
+
+

7.20.3. Configuration

+
+

The microprofile-reactive-messaging-smallrye subsystem contains no configurable attributes or resources. For the core MicroProfile Reactive Messaging functionality there is no configuration. For configuration of the connectors to external brokers MicroProfile Config is used.

+
+
+
Activation
+
+

The subsystem will scan all deployments to find classes containing methods with the org.eclipse.microprofile.reactive.messaging.Incoming or org.eclipse.microprofile.reactive.messaging.Outgoing annotations. If these annotations are found, Reactive Messaging will be enabled for the deployment.

+
+
+
+
Programming model and Limitations
+
+

See the spec for more thorough examples, this section just attempts to summarize the highlights.

+
+
+

Version 1.0 of the MicroProfile Reactive Messaging specification introduced the @Incoming and @Outgoing annotations. They are intended for use in an @ApplicationScoped (or @Dependent) CDI bean:

+
+
+
+
@ApplicationScoped
+public class MyBean {
+    @Outgoing("in-memory")
+    public String generate() {
+        return ...; // Do some generation of values
+    }
+
+    @Incoming("in-memory")
+    public void consume(String value) {
+        System.out.println(value);
+    }
+}
+
+
+
+

Values generated by the generate() method will be received by the consume() method. In this basic setup where the channel names match, the streams are dealt with in-memory. We’ll see how to have them handled by Kafka later on.

+
+
+

In the above example, we are essentially generating values and consuming them with no user-interaction. MicroProfile Reactive Messaging 2.0 introduces a @Channel annotation, which can be used to inject a Publisher for receiving values sent on streams, and an Emitter which can be used to send values to a stream. This makes it easier to send/receive values from code paths resulting from user interaction:

+
+
+
+
@ApplicationScoped
+public class MyBean {
+    @Inject
+    @Channel("in-memory")
+    Emitter<String> emitter;
+
+    @Inject
+    @Channel("in-memory")
+    Publisher<String> publisher;
+
+    void send(String value) {
+        emitter.send(value);
+    }
+}
+
+
+
+

In the above example we can now easily send data to the Reactive Messaging streams by calling Emitter.send(). Similarly, we can subscribe to the Publisher and receive the data. However, receiving still has a few shortcomings:

+
+
+
    +
  • +

    The above example will not work out of the box. When trying to send on the Emitter, you will get an error that there are no subscibers (which in turn runs the risk of causing overflow). This can be worked around by creating a subscription on the Publisher.

    +
  • +
  • +

    At present there can only be one subscription on the injected Publisher.

    +
  • +
+
+
+

The above points means that this Publisher is not usable directly as an asynchronous return value for e.g. a Jakarta RESTFul Webservices endpoint. As the Jakarta RESTFul Webservices request is what will create the subscription such a call would need to happen before calling Emitter.send().

+
+
+

If we replace the Emitter with the generate() method from the original method our example will work. However, if we return the Publisher to more than one Jakarta RESTFul Webservices request, we end up with more than one subscriptions which will not all receive every single value.

+
+
+

User’s applications intended to return published values to users via e.g. Jakarta RESTFul Webservices will need to do their own subscriptions and buffering of the data. Care must be taken to not let the cache grow uncontrolled, which could cause OutOfMemoryErrors.

+
+
+
+
Connectors
+
+

MicroProfile Reactive Messaging is designed to be flexible enough to integrate with a wide variety of external messaging systems. This functionality is provided via 'connectors'.

+
+
+

The only included connector at the moment is the Kafka connector.

+
+
+

Connectors are configured using MicroProfile Config. The property keys for the methods have some prefixes mandated by the MicroProfile Reactive Messaging Specification which lists these as:

+
+
+
    +
  • +

    mp.messaging.incoming.[channel-name].[attribute]=[value]

    +
  • +
  • +

    mp.messaging.outgoing.[channel-name].[attribute]=[value]

    +
  • +
  • +

    mp.messaging.connector.[connector-name].[attribute]=[value]

    +
  • +
+
+
+

Essentially channel-name is the @Incoming.value() or the @Outgoing.value().

+
+
+

If we have the following pair of methods:

+
+
+
+
@Outgoing("to")
+public int send() {
+    int i = // Randomly generated...
+}
+
+@Incoming("from")
+public void receive(int i) {
+    // Process payload
+}
+
+
+
+

Then the property prefixes mandated by the MicroProfile Reactive Messaging specifications are:

+
+
+
    +
  • +

    mp.messaging.incoming.from. - this would pick out the property as configuration of the receive() method.

    +
  • +
  • +

    mp.messaging.outgoing.to. - this would pick out the property as configuration of the send() method.

    +
  • +
+
+
+

Note that although these prefixes are understood by the subsystem, the full set depends on the connector you want to configure. Different connectors understand different properties.

+
+
+
Kafka Connector
+
+

An example of a minimal microprofile-config.properties file for Kafka for the example application shown previously:

+
+
+
+
kafka.bootstrap.servers=kafka:9092
+
+mp.messaging.outgoing.to.connector=smallrye-kafka
+mp.messaging.outgoing.to.topic=my-topic
+mp.messaging.outgoing.to.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer
+
+mp.messaging.incoming.from.connector=smallrye-kafka
+mp.messaging.incoming.from.topic=my-topic
+mp.messaging.incoming.from.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer
+
+
+
+

Next we will briefly discuss each of these entries. Remember the to channel is on the send() method, and the from channel is on the receive() method.

+
+
+

kafka.bootstrap.servers=kafka:9092 sets the URL of the Kafka broker to connect to for the whole application. It could also be done for just the to channel by setting mp.messaging.outgoing.to.bootstrap.servers=kafka:9092 instead.

+
+
+

mp.messaging.outgoing.to.connector=smallrye-kafka says that we want to use Kafka to back the to channel. Note that the value smallrye-kafka is SmallRye Reactive Messaging specific, and will only be understood if the Kafka connector is enabled.

+
+
+

mp.messaging.outgoing.to.topic=my-topic says that we will send data to the Kafka topic called my-topic.

+
+
+

mp.messaging.outgoing.to.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer tells the connector to use IntegerSerializer to serialize the values output by the send() method when writing to the topic. Kafka provides serializers for the standard Java types. You may implement your own serializer by writing a class implementing org.apache.kafka.common.serialization.Serializer and including it in the deployment.

+
+
+

mp.messaging.incoming.from.connector=smallrye-kafka says that we want to use Kafka to back the from channel. As above, the value smallrye-kafka is SmallRye Reactive Messaging specific.

+
+
+

mp.messaging.incoming.from.topic=my-topic says that we will read data from the Kafka topic called my-topic.

+
+
+

mp.messaging.incoming.from.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer tells the connector to use IntegerDeserializer to deserialize the values from the topic before calling the receive() method. You may implement your own deserializer by writing a class implementing org.apache.kafka.common.serialization.Deserializer and including it in the deployment.

+
+
+

In addition to the above, Apache Kafka, and SmallRye Reactive Messaging’s Kafka connector understand a lot more properties. These can be found in the SmallRye Reactive Messaging Kafka connector documentation, and in the Apache Kafka documentation for the producers and the consumers.

+
+
+

The prefixes discussed above are stripped off before passing the property to Kafka. The same happens for other configuration properties. See the Kafka documentation for more details about how to configure Kafka consumers and producers.

+
+
+Connecting to secure Kafka +
+

If connecting to a Kafka instance secured with SSL and SASL, the following example 'microprofile-config.properties' will help you get started. There are a few new properties. We are showing them on the connector level but they could equally well be defined on the channel level (i.e. with the mp.messaging.outgoing.to-kafka. and mp.messaging.incoming.from-kafka. prefixes from the previous examples rather than the connector-wide mp.messaging.connector.smallrye-kafka prefix).

+
+
+
+
mp.messaging.connector.smallrye-kafka.bootstrap.servers=localhost:9092
+mp.messaging.connector.smallrye-kafka.sasl.mechanism=PLAIN
+mp.messaging.connector.smallrye-kafka.security.protocol=SASL_SSL
+mp.messaging.connector.smallrye-kafka.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
+  username="${USER}" \
+  password="${PASSWORD}";
+mp.messaging.connector.smallrye-kafka.wildfly.elytron.ssl.context=test
+
+# Channel configuration would follow here, but is left out for brevity
+
+
+
+

Each of these lines has the following meaning:

+
+
+
    +
  • +

    mp.messaging.connector.smallrye-kafka.bootstrap.servers=localhost:9092 - specifies the Kafka servers to connect to. This is the same as in the previous examples

    +
  • +
  • +

    mp.messaging.connector.smallrye-kafka.sasl.mechanism=PLAIN - specifies the SASL mechanism to use. See sasl.mechanism in the Kafka documentation for other choices.

    +
  • +
  • +

    mp.messaging.connector.smallrye-kafka.security.protocol - specifies the protocol mechanism to use. See security.protocol in the Kafka documentation for other choices. In this case we are using SASL_SSL which means that communication is over SSL, and that SASL is used to authenticate

    +
  • +
  • +

    mp.messaging.connector.smallrye-kafka.sasl.jaas.config=…​ - specifies how we will authenticate with Kafka. In order to not hardcode the credentials in our microprofile-config.properties file we are using the property substitution feature of MicroProfile Config. In this case, if you have defined the USER and PASSWORD environment variables they will be passed in as part of the configuration

    +
  • +
  • +

    mp.messaging.connector.smallrye-kafka.wildfly.elytron.ssl.context=test - this is not needed if Kafka is secured with a CA signed certificate. If you are using self-signed certificates, you will need to specify a truststore in the Elytron subsystem, and create an SSLContext referencing that. The value of this property is used to look up the SSLContext in the Elytron subsystem under /subsystem=elytron/client-ssl-context=* in the WildFly management model. In this case the property value is test, so we look up the SSLContext defined by /subsystem=elytron/client-ssl-context=test and use that configure the truststore to use for the connection to Kafka.

    +
  • +
+
+
+
+Kafka User API +
+

In order to be able to get more information about messages received from Kafka, and to be able to influence how Kafka handles messages, there is a user API for Kafka. This API lives in the io/smallrye/reactive/messaging/kafka/api package.

+
+
+

The API consists of the following classes:

+
+
+
    +
  • +

    IncomingKafkaRecordMetadata - This metadata contains information such as:

    +
    +
      +
    • +

      the key of the Kafka record represented by a Message

      +
    • +
    • +

      the Kafka topic and partition used for the Message, and the offset within those

      +
    • +
    • +

      the Message timestamp and timestampType

      +
    • +
    • +

      the Message headers - these are pieces of information the application can attach on the producing side, and receive on the consuming side. They are stored and forwarded on by Kafka but have no meaning to Kafka itself.

      +
    • +
    +
    +
  • +
  • +

    OutgoingKafkaRecordMetadata - This is constructed via the builder returned via the builder() method, and allows you to specify/override how Kafka will handle the messages. Similar to the IncomingKafkaRecordMetadata case, you can set:

    +
    +
      +
    • +

      the key. Kafka will then treat this entry as the key of the message

      +
    • +
    • +

      the topic, as already seen we typically use the microprofile-config.properties configuration to specify the topic to use for a channel backed by Kafka. However, in some cases the code sending the message might need to make some choices (for example depending on values contained in the data) about which topic to send to. Specifying this here will make Kafka use that topic.

      +
    • +
    • +

      the partition. Generally, it is best to let Kafka’s partitioner choose the partition, but for cases where it is essential to be able to specify it this can be done

      +
    • +
    • +

      the timestamp if you don’t want the one auto-generated by Kafka

      +
    • +
    • +

      headers - you can attach headers for the consumer, as mentioned for IncomingKafkaRecordMetadata

      +
    • +
    +
    +
  • +
  • +

    KafkaMetadataUtil contains utility methods to write OutgoingKafkaRecordMetadata to a Message, and to read IncomingKafkaRecordMetadata from a Message. Note that if you write OutgoingKafkaRecordMetadata to a Message which is sent to a channel not handled by Kafka it will be ignored, and if you attempt to read IncomingKafkaRecordMetadata from a Message arriving from a channel no handled by Kafka it will be null.

    +
  • +
+
+
+

The following example shows how to write and read the key from a message:

+
+
+
+
@Inject
+@Channel("from-user")
+Emitter<Integer> emitter;
+
+@Incoming("from-user")
+@Outgoing("to-kafka")
+public Message<Integer> send(Message<Integer> msg) {
+    // Set the key in the metadata
+    OutgoingKafkaRecordMetadata<String> md =
+            OutgoingKafkaRecordMetadata.<String>builder()
+                .withKey("KEY-" + i)
+                .build();
+    // Note that Message is immutable so the copy returned by this method
+    // call is not the same as the parameter to the method
+    return KafkaMetadataUtil.writeOutgoingKafkaMetadata(msg, md);
+}
+
+@Incoming("from-kafka")
+public CompletionStage<Void> receive(Message<Integer> msg) {
+    IncomingKafkaRecordMetadata<String, Integer> metadata =
+        KafkaMetadataUtil.readIncomingKafkaMetadata(msg).get();
+
+    // We can now read the Kafka record key
+    String key = metadata.getKey();
+
+    // When using the Message wrapper around the payload we need to explicitly ack
+    // them
+    return msg.ack();
+}
+
+
+
+

To configure the Kafka mapping we need a microprofile-config.properties

+
+
+
+
kafka.bootstrap.servers=kafka:9092
+
+mp.messaging.outgoing.to-kafka.connector=smallrye-kafka
+mp.messaging.outgoing.to-kafka.topic=some-topic
+mp.messaging.outgoing.to-kafka.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer
+mp.messaging.outgoing.to-kafka.key.serializer=org.apache.kafka.common.serialization.StringSerializer
+
+mp.messaging.incoming.from-kafka.connector=smallrye-kafka
+mp.messaging.incoming.from-kafka.topic=some-topic
+mp.messaging.incoming.from-kafka.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer
+mp.messaging.incoming.from-kafka.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
+
+
+
+

This configuration looks a lot like the previous configuration that we saw, but note that we need to specify the key.serializer for the outgoing channel, and the key.deserializer for the incoming channel. As before, they are implementations of org.apache.kafka.common.serialization.Serializer and org.apache.kafka.common.serialization.Deserializer respectively. Kafka provides implementations for basic types, and you may write your own and include them in the deployment.

+
+
+
+A note on org.apache.kafka classes +
+

While we do expose the Kafka Clients jar in our BOMs, its usage is limited to

+
+
+
    +
  • +

    Classes/interfaces exposed via the Kafka User API, e.g.:

    +
    +
      +
    • +

      org.apache.kafka.common.header.Header and org.apache.kafka.common.header.Headers and implementations of those that are considered public API as per the Apache Kafka documentation.

      +
    • +
    • +

      org.apache.kafka.clients.consumer.ConsumerRecord

      +
    • +
    • +

      org.apache.kafka.common.record.TimestampType

      +
    • +
    +
    +
  • +
  • +

    Classes/interfaces needed for serialization and deserialization:

    +
    +
      +
    • +

      org.apache.kafka.common.serialization.Deserializer

      +
    • +
    • +

      org.apache.kafka.common.serialization.Serializer

      +
    • +
    • +

      Implementatations of org.apache.kafka.common.serialization.Deserializer and org.apache.kafka.common.serialization.Serializer in the org.apache.kafka.common.serialization package

      +
    • +
    +
    +
  • +
+
+
+
+
+
+
+

7.20.4. Component Reference

+
+

The MicroProfile Reactive Messaging implementation is provided by the SmallRye Reactive Messaging project.

+
+ +
+
+
+

7.21. MicroProfile Telemetry Subsystem Configuration

+
+

Support for MicroProfile Telemetry is provided by the microprofile-telemetry subsystem.

+
+
+

The MicroProfile Telemetry specification describes how OpenTelemetry can be integrated into a MicroProfile application.

+
+
+

7.21.1. Subsystem

+
+

The MicroProfile Telemetry integration is provided by the microprofle-telemetry subsystem, and is included in the default configuration. If not no present, the subsystem can be added using the following CLI commands.

+
+
+ + + + + +
+ + +
+

The MicroProfile Telemetry subsystem depends on the OpenTelemetry subsystem, so it must be added prior to adding MicroProfile Telemetry.

+
+
+
+
+
+
$ jboss-cli.sh -c <<EOF
+    if (outcome != success) of /subsystem=opentelemetry:read-resource
+        /extension=org.wildfly.extension.opentelemetry:add()
+        /subsystem=opentelemetry:add()
+    end-if
+    /extension=org.wildfly.extension.microprofile.telemetry:add
+    /subsystem=microprofile-telemetry:add
+    reload
+EOF
+
+
+
+
+

7.21.2. Configuration

+
+

The MicroProfile Telemetry subsystem contains no configurable attributes or resources. Any server configuration related to OpenTelemetry should be made to the opentelemetry subsystem, the documentation for which can be found in the relevant section of the Administration Guide.

+
+
+

The MicroProfile Telemetry subsystem does, however, allow for individual applications to override any server configuration via MicroProfile Config. For example, the default service name used in exported traces is derived from the deployment name, so if the deployment archive is my-application-1.0.war, the service name will be my-application-1.0.war. This can be overridden using the standard OpenTelemetry configuration properties (documented here):

+
+
+
+
otel.service.name=My Application
+
+
+
+

Note also that, per spec requirements, MicroProfile Telemetry is disabled by default and must be manually enabled on a per-application basis:

+
+
+
+
otel.sdk.disabled=false
+
+
+
+
+
+

7.22. MicroProfile LRA Subsystems Configuration

+
+
+
:narayana-version: 6.0.0.Final
+:eclipse-mp-lra-api-version: 2.0
+
+
+
+

Support for MicroProfile LRA (Long Running Actions) is +provided by the microprofile-lra-coordinator and microprofile-lra-participant subsystems.

+
+
+

The microprofile-lra-coordinator subsystem provides the LRA Coordinator capabilities required for the coordination of the distributed transactions.

+
+
+

The microprofile-lra-participant subsystem provides capabilities required to define services that participate in the LRAs by executing transactional actions and compensations. They communicate with the LRA Coordinator in order to process distributed transactions.

+
+
+

7.22.1. Required Extension

+
+

These extensions are not included in the standard configurations included in the WildFly distribution.

+
+
+

You can add the extensions to a configuration either by adding +a relevant extensions elements to the xml or by using CLI operations.

+
+
+
LRA Coordinator
+
+

You can add the extension to a configuration either by adding +an <extension module="org.wildfly.extension.microprofile.lra-coordinator"/> +element to the xml or by using the following CLI operation:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.lra-coordinator:add()
+{"outcome" => "success"}
+
+[standalone@localhost:9990 /] /subsystem=microprofile-lra-coordinator:add
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+

If you provision your own server and include the microprofile-lra-coordinator Galleon layer, you will get the required modules, and the extension and subsystem will be added to your configuration.

+
+
+
+
LRA Participant
+
+

You can add the extension to a configuration either by adding +an <extension module="org.wildfly.extension.microprofile.lra-participant"/> +element to the xml or by using the following CLI operation:

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.lra-participant:add()
+{"outcome" => "success"}
+
+[standalone@localhost:9990 /] /subsystem=microprofile-lra-participant:add
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+

If you provision your own server and include the microprofile-lra-participant Galleon layer, you will get the required modules, and the extension and subsystem will be added to your configuration.

+
+
+
+
+

7.22.2. Specification

+
+

WildFly’s MicroProfile LRA Participant subsystem implements MicroProfile +LRA {eclipse-mp-lra-api-version}, which adds support for Long Running Actions based on the saga pattern. The MicroProfile LRA Coordinator subsystem is used to provide coordination of such transactions which LRA Participants contact in order to enlist into the LRAs.

+
+
+

Tha LRA Coordinator can also run independently in the distributed system and can be started with for instance Docker like this:

+
+
+
+
$ docker run -p 8080:8080 quay.io/jbosstm/lra-coordinator
+
+
+
+
+

7.22.3. Management model

+
+

The /subsystem=microprofile-lra-coordinator resource defines two attributes:

+
+
+
    +
  • +

    host - Represents the name of the Undertow subsystem 'host' resource that the LRA Coordinator is deployed to.

    +
  • +
  • +

    server - Represents the name of the Undertow subsystem 'server' resource that the LRA Coordinator is deployed to.

    +
  • +
+
+
+

The /subsystem=microprofile-lra-participant resource defines one attribute:

+
+
+
    +
  • +

    lra-coordinator-url - The configuration of the LRA Coordinator URL required in order for this participant to connect to the coordinator.

    +
  • +
  • +

    proxy-host - Represents the name of the Undertow subsystem 'host' resource that the LRA Participant proxy deploys to.

    +
  • +
  • +

    proxy-server - Represents the name of the Undertow subsystem 'server' resource that the LRA Participant proxy deploys to.

    +
  • +
+
+
+
+

7.22.4. Component Reference

+
+

The MicroProfile LRA implementation is provided by the Narayana project - https://www.narayana.io/.

+
+ +
+
+
+

7.23. Web services configuration

+
+

JBossWS components are provided to the application server through the +webservices subsystem. JBossWS components handle the processing of WS +endpoints. The subsystem supports the configuration of published +endpoint addresses, and endpoint handler chains. A default webservice +subsystem is provided in the server’s domain and standalone +configuration files.

+
+
+

7.23.1. Structure of the webservices subsystem

+
+
Published endpoint address
+
+

JBossWS supports the rewriting of the <soap:address> element of +endpoints published in WSDL contracts. This feature is useful for +controlling the server address that is advertised to clients for each +endpoint.

+
+
+

The following elements are available and can be modified (all are +optional):

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription

modify-wsdl-address

boolean

This boolean enables and disables the +address rewrite functionality.When modify-wsdl-address is set to true +and the content of <soap:address> is a valid URL, JBossWS will rewrite +the URL using the values of wsdl-host and wsdl-port or +wsdl-secure-port.When modify-wsdl-address is set to false and the +content of <soap:address> is a valid URL, JBossWS will not rewrite the +URL. The <soap:address> URL will be used.When the content of +<soap:address> is not a valid URL, JBossWS will rewrite it no matter +what the setting of modify-wsdl-address.If modify-wsdl-address is set to +true and wsdl-host is not defined or explicitly set to +'jbossws.undefined.host' the content of <soap:address> URL is use. +JBossWS uses the requester’s host when rewriting the <soap:address>When +modify-wsdl-address is not defined JBossWS uses a default value of true.

wsdl-host

string

The hostname / IP address to be used for rewriting +<soap:address>.If wsdl-host is set to jbossws.undefined.host, JBossWS +uses the requester’s host when rewriting the <soap:address>When +wsdl-host is not defined JBossWS uses a default value of +'jbossws.undefined.host'.

wsdl-port

int

Set this property to explicitly define the HTTP port +that will be used for rewriting the SOAP address.Otherwise the HTTP port +will be identified by querying the list of installed HTTP connectors.

wsdl-secure-port

int

Set this property to explicitly define the HTTPS +port that will be used for rewriting the SOAP address.Otherwise the +HTTPS port will be identified by querying the list of installed HTTPS +connectors.

wsdl-uri-scheme

string

This property explicitly sets the URI scheme +to use for rewriting <soap:address> . Valid values are http and https. +This configuration overrides scheme computed by processing the endpoint +(even if a transport guaranteeis specified). The provided values for +wsdl-port and wsdl-secure-port (or their default values) are used +depending on specified scheme.

wsdl-path-rewrite-rule

string

This string defines a SED substitution +command (e.g., 's/regexp/replacement/g') that JBossWS executes against +the path component of each <soap:address> URL published from the +server.When wsdl-path-rewrite-rule is not defined, JBossWS retains the +original path component of each <soap:address> URL.When +'modify-wsdl-address' is set to "false" this element is ignored.

+
+
+
Predefined endpoint configurations
+
+

JBossWS enables extra setup configuration data to be predefined and +associated with an endpoint implementation. Predefined endpoint +configurations can be used for Jakarta XML Web Services client and Jakarta XML Web Services endpoint setup. +Endpoint configurations can include Jakarta XML Web Services handlers and key/value +properties declarations. This feature provides a convenient way to add +handlers to WS endpoints and to set key/value properties that control +JBossWS and Apache CXF internals ( +see +Apache CXF configuration).

+
+
+

The webservices subsystem provides +schema +to support the definition of named sets of endpoint configuration data. +Annotation, org.jboss.ws.api.annotation.EndpointConfig is provided to +map the named configuration to the endpoint implementation.

+
+
+

There is no limit to the number of endpoint configurations that can be +defined within the webservices subsystem. Each endpoint configuration +must have a name that is unique within the webservices subsystem. +Endpoint configurations defined in the webservices subsystem are +available for reference by name through the annotation to any endpoint +in a deployed application.

+
+
+

WildFly ships with two predefined endpoint configurations. +Standard-Endpoint-Config is the default configuration. +Recording-Endpoint-Config is an example of custom endpoint configuration +and includes a recording handler.

+
+
+
+
[standalone@localhost:9999 /] /subsystem=webservices:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "endpoint" => {},
+        "modify-wsdl-address" => true,
+        "wsdl-host" => expression "${jboss.bind.address:127.0.0.1}",
+        "endpoint-config" => {
+            "Standard-Endpoint-Config" => undefined,
+            "Recording-Endpoint-Config" => undefined
+        }
+    }
+}
+
+
+
+ + + + + +
+ + +The Standard-Endpoint-Config is a special endpoint configuration. It +is used for any endpoint that does not have an explicitly assigned +endpoint configuration. +
+
+
+
Endpoint configs
+
+

Endpoint configs are defined using the endpoint-config element. Each +endpoint configuration may include properties and handlers set to the +endpoints associated to the configuration.

+
+
+
+
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=Recording-Endpoint-Config:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "post-handler-chain" => undefined,
+        "property" => undefined,
+        "pre-handler-chain" => {"recording-handlers" => undefined}
+    }
+}
+
+
+
+

A new endpoint configuration can be added as follows:

+
+
+
+
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=My-Endpoint-Config:add
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-restart" => true,
+        "process-state" => "restart-required"
+    }
+}
+
+
+
+
+
Handler chains
+
+

Each endpoint configuration may be associated with zero or more PRE and +POST handler chains. Each handler chain may include JAXWS handlers. For +outbound messages the PRE handler chains are executed before any handler +that is attached to the endpoint using the standard means, such as with +annotation @HandlerChain, and POST handler chains are executed after +those objects have executed. For inbound messages the POST handler +chains are executed before any handler that is attached to the endpoint +using the standard means and the PRE handler chains are executed after +those objects have executed.

+
+
+
+
* Server inbound messages
+Client --> ... --> POST HANDLER --> ENDPOINT HANDLERS --> PRE HANDLERS --> Endpoint
+
+* Server outbound messages
+Endpoint --> PRE HANDLER --> ENDPOINT HANDLERS --> POST HANDLERS --> ... --> Client
+
+
+
+

The protocol-binding attribute must be used to set the protocols for +which the chain will be triggered.

+
+
+
+
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=Recording-Endpoint-Config/pre-handler-chain=recording-handlers:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "protocol-bindings" => "##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM",
+        "handler" => {"RecordingHandler" => undefined}
+    },
+    "response-headers" => {"process-state" => "restart-required"}
+}
+
+
+
+

A new handler chain can be added as follows:

+
+
+
+
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-handlers:add(protocol-bindings="##SOAP11_HTTP")
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-restart" => true,
+        "process-state" => "restart-required"
+    }
+}
+[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-handlers:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "handler" => undefined,
+        "protocol-bindings" => "##SOAP11_HTTP"
+    },
+    "response-headers" => {"process-state" => "restart-required"}
+}
+
+
+
+
+
Handlers
+
+

JAXWS handler can be added in handler chains:

+
+
+
+
[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=Recording-Endpoint-Config/pre-handler-chain=recording-handlers/handler=RecordingHandler:read-resource
+{
+    "outcome" => "success",
+    "result" => {"class" => "org.jboss.ws.common.invocation.RecordingServerHandler"},
+    "response-headers" => {"process-state" => "restart-required"}
+}
+[standalone@localhost:9999 /] /subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-handlers/handler=foo-handler:add(class="org.jboss.ws.common.invocation.RecordingServerHandler")
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-restart" => true,
+        "process-state" => "restart-required"
+    }
+}
+
+
+
+

Endpoint-config handler classloading

+
+
+ + + + + +
+ + +The class attribute is used to provide the fully qualified class name +of the handler. At deploy time, an instance of the class is created for +each referencing deployment. For class creation to succeed, the +deployment classloader must to be able to load the handler class. +
+
+
+
+
+
+

7.23.2. Runtime information

+
+

Each web service endpoint is exposed through the deployment that +provides the endpoint implementation. Each endpoint can be queried as a +deployment resource. For further information please consult the chapter +"Application Deployment". Each web service endpoint specifies a web +context and a WSDL Url:

+
+
+
+
[standalone@localhost:9999 /] /deployment="*"/subsystem=webservices/endpoint="*":read-resource
+{
+   "outcome" => "success",
+   "result" => [{
+       "address" => [
+           ("deployment" => "jaxws-samples-handlerchain.war"),
+           ("subsystem" => "webservices"),
+           ("endpoint" => "jaxws-samples-handlerchain:TestService")
+       ],
+       "outcome" => "success",
+       "result" => {
+           "class" => "org.jboss.test.ws.jaxws.samples.handlerchain.EndpointImpl",
+           "context" => "jaxws-samples-handlerchain",
+           "name" => "TestService",
+           "type" => "JAXWS_JSE",
+           "wsdl-url" => "http://localhost:8080/jaxws-samples-handlerchain?wsdl"
+       }
+   }]
+}
+
+
+
+
+

7.23.3. Component Reference

+
+

The web service subsystem is provided by the JBossWS project. For a +detailed description of the available configuration properties, please +consult the project documentation.

+
+
+
+
+ +
+
+
+
+
+
+

7.24. Resource adapters

+
+

Resource adapters are configured through the resource-adapters +subsystem. Declaring a new resource adapter consists of two separate +steps: You would need to deploy the .rar archive and define a resource +adapter entry in the subsystem.

+
+
+

7.24.1. Resource Adapter Definitions

+
+

The resource adapter itself is defined within the subsystem +resource-adapters:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
+    <resource-adapters>
+       <resource-adapter>
+          <archive>eis.rar</archive>
+          <!-- Resource adapter level config-property -->
+          <config-property name="Server">localhost</config-property>
+          <config-property name="Port">19000</config-property>
+          <transaction-support>XATransaction</transaction-support>
+          <connection-definitions>
+             <connection-definition class-name="com.acme.eis.ra.EISManagedConnectionFactory"
+                                    jndi-name="java:/eis/AcmeConnectionFactory"
+                                    pool-name="AcmeConnectionFactory">
+                <!-- Managed connection factory level config-property -->
+                <config-property name="Name">Acme Inc</config-property>
+                <pool>
+                   <min-pool-size>10</min-pool-size>
+                   <max-pool-size>100</max-pool-size>
+                </pool>
+                <security>
+                   <application/>
+                </security>
+             </connection-definition>
+         </connection-definitions>
+         <admin-objects>
+             <admin-object class-name="com.acme.eis.ra.EISAdminObjectImpl"
+                           jndi-name="java:/eis/AcmeAdminObject">
+                <config-property name="Threshold">10</config-property>
+             </admin-object>
+         </admin-objects>
+       </resource-adapter>
+    </resource-adapters>
+</subsystem>
+
+
+
+

Note, that only JNDI bindings under java:/ or java:jboss/ are supported.

+
+
+

(See standalone/configuration/standalone.xml )

+
+
+
+

7.24.2. Automatic activation of resource adapter archives

+
+

A resource adapter archive can be automatically activated with a +configuration by including an META-INF/ironjacamar.xml in the archive.

+
+ +
+
+

7.24.3. Component Reference

+
+

The resource adapter subsystem is provided by the +IronJacamar project. For a detailed +description of the available configuration properties, please consult +the project documentation.

+
+ +
+
+
+

7.25. Jakarta Batch Subsystem Configuration

+
+
+The batch subsystem is used to configure an environment for running +batch applications. WildFly uses +JBeret for it’s batch implementation. +Specific information about JBeret can be found in the +user guide. The +resource path, in CLI notation, for the subsystem +is subsystem=batch-jberet. +
+
+
+

7.25.1. Default Subsystem Configuration

+
+

For up to date information about subsystem configuration options see the +WildFly model reference.

+
+
+
+

7.25.2. Security

+
+

A new security-domain attribute was added to the batch-jberet +subsystem to allow batch jobs to be executed under that security domain. +Jobs that are stopped as part of a suspend operation will be restarted +on execution of a resume with the original user that started job.

+
+
+

There was a +org.wildfly.extension.batch.jberet.deployment.BatchPermission added to +allow a security restraint to various batch functions. The following +functions can be controlled with this permission.

+
+
+
    +
  • +

    start

    +
  • +
  • +

    stop

    +
  • +
  • +

    restart

    +
  • +
  • +

    abandon

    +
  • +
  • +

    read

    +
  • +
+
+
+

The read function allows users to use the getter methods from the +jakarta.batch.operations.JobOperator or read the batch-jberet +deployment resource, for example +/deployment=my.war/subsystem=batch-jberet:read-resource.

+
+
+
+

7.25.3. Job Repository

+
+

The batch subsystem supports 2 types of job repository:

+
+
+
    +
  • +

    in-memory job repository: all job execution data are kept in the memory +of WildFly instance. When the server shuts down, all job execution data +are lost. In a clustered environment, each WildFly server instance has its +own in-memory job repository, and it is not possible to share job execution +data between WildFly instances. This is the default job repository in +batch subsystem.

    +
  • +
  • +

    jdbc job repository: all job execution data are saved in a relational +database accessed via jdbc. In a clustered environment, a jdbc job repository +can be used to share job execution data between WildFly instances. +For example, one may start a job execution in one instance, stop and restart +it from a different WildFly instance.

    +
  • +
+
+
+
Handling Large Job Repositories
+
+

In some cases, when a job repository accumulates a large number of job +execution records (say hundreds of thousands), application deployment times may +be negatively impacted. This is relevant mainly to persistent job repository +implementations, like the jdbc job repository.

+
+
+

In order to avoid accumulating too high a number of job execution records, the +application can delete old executions via +JobOperator.abandon(long executionId), or other means like pruning the +database tables can be employed.

+
+
+

If it’s no possible to avoid storing large number of job execution records, +the job repositories can be configured to limit the number of job executions +that is returned by them by setting the execution-records-limit attribute. +If the attribute is set, Wildfly will only load specified maximum number of +job executions from the backing storage mechanism.

+
+
+
+
+

7.25.4. Deployment Descriptors

+
+

There are no deployment descriptors for configuring a batch environment +defined by the JSR-352 +specification. In WildFly you can use a +jboss-all.xml deployment descriptor to define aspects of the batch +environment for your deployment.

+
+
+

In the jboss-all.xml deployment descriptor you can define a named job +repository, a new job repository and/or a named thread pool. A named job +repository and named thread pool are resources defined on the batch +subsystem. Only a named thread pool is allowed to be defined in the +deployment descriptor.

+
+
+
Example Named Job Repository and Thread Pool
+
+
<jboss xmlns="urn:jboss:1.0">
+    <batch xmlns="urn:jboss:domain:batch-jberet:2.0">
+      <job-repository>
+        <named name="batch-ds"/>
+      </job-repository>
+      <thread-pool name="deployment-thread-pool"/>
+    </batch>
+</jboss>
+
+
+
+
Example new Job Repository
+
+
<jboss xmlns="urn:jboss:1.0">
+    <batch xmlns="urn:jboss:domain:batch-jberet:2.0">
+        <job-repository>
+            <jdbc data-source="batch-ds"/>
+        </job-repository>
+    </batch>
+</jboss>
+
+
+
+
+

7.25.5. Deployment Resources

+
+

Some subsystems in WildFly register runtime +resources for deployments. The batch subsystem registers jobs and +executions. The jobs are registered using the job name, this is not +the job XML name. Executions are registered using the execution id.

+
+
+
Batch application in a standalone server
+
+
[standalone@localhost:9990 /] /deployment=batch-jdbc-chunk.war/subsystem=batch-jberet:read-resource(recursive=true,include-runtime=true)
+{
+    "outcome" => "success",
+    "result" => {"job" => {
+        "reader-3" => {
+            "instance-count" => 1,
+            "running-executions" => 0,
+            "execution" => {"1" => {
+                "batch-status" => "COMPLETED",
+                "create-time" => "2015-08-07T15:37:06.416-0700",
+                "end-time" => "2015-08-07T15:37:06.519-0700",
+                "exit-status" => "COMPLETED",
+                "instance-id" => 1L,
+                "last-updated-time" => "2015-08-07T15:37:06.519-0700",
+                "start-time" => "2015-08-07T15:37:06.425-0700"
+            }}
+        },
+        "reader-5" => {
+            "instance-count" => 0,
+            "running-executions" => 0,
+            "execution" => undefined
+        }
+    }}
+}
+
+
+
+

The batch subsystem resource on a deployment also has 3 operations to +interact with batch jobs on the selected deployment. There is a +start-job, stop-job and restart-job operation. The execution +resource also has a stop-job and restart-job operation.

+
+
+
Example start-job
+
+
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:start-job(job-xml-name=simple, properties={writer.sleep=5000})
+{
+    "outcome" => "success",
+    "result" => 1L
+}
+
+
+
+
Example stop-job
+
+
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:stop-job(execution-id=2)
+
+
+
+
Example restart-job
+
+
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:restart-job(execution-id=2)
+{
+    "outcome" => "success",
+    "result" => 3L
+}
+
+
+
+
Result of resource after the 3 executions
+
+
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:read-resource(recursive=true, include-runtime=true)
+{
+    "outcome" => "success",
+    "result" => {"job" => {"chunkPartition" => {
+        "instance-count" => 2,
+        "running-executions" => 0,
+        "execution" => {
+            "1" => {
+                "batch-status" => "COMPLETED",
+                "create-time" => "2015-08-07T15:41:55.504-0700",
+                "end-time" => "2015-08-07T15:42:15.513-0700",
+                "exit-status" => "COMPLETED",
+                "instance-id" => 1L,
+                "last-updated-time" => "2015-08-07T15:42:15.513-0700",
+                "start-time" => "2015-08-07T15:41:55.504-0700"
+            },
+            "2" => {
+                "batch-status" => "STOPPED",
+                "create-time" => "2015-08-07T15:44:39.879-0700",
+                "end-time" => "2015-08-07T15:44:54.882-0700",
+                "exit-status" => "STOPPED",
+                "instance-id" => 2L,
+                "last-updated-time" => "2015-08-07T15:44:54.882-0700",
+                "start-time" => "2015-08-07T15:44:39.879-0700"
+            },
+            "3" => {
+                "batch-status" => "COMPLETED",
+                "create-time" => "2015-08-07T15:45:48.162-0700",
+                "end-time" => "2015-08-07T15:45:53.165-0700",
+                "exit-status" => "COMPLETED",
+                "instance-id" => 2L,
+                "last-updated-time" => "2015-08-07T15:45:53.165-0700",
+                "start-time" => "2015-08-07T15:45:48.163-0700"
+            }
+        }
+    }}}
+}
+
+
+
+

Pro Tip

+
+
+ + + + + +
+ + +You can filter jobs by an attribute on the execution resource with the +query operation. +
+
+
+
View all stopped jobs
+
+
/deployment=batch-chunk.war/subsystem=batch-jberet/job=*/execution=*:query(where=["batch-status", "STOPPED"])
+
+
+
+

As with all operations you can see details about the operation using the +:read-operation-description operation.

+
+
+

Tab completion

+
+
+ + + + + +
+ + +Don’t forget that CLI has tab completion which will complete operations +and attributes (arguments) on operations. +
+
+
+
Example start-job operation description
+
+
[standalone@localhost:9990 /] /deployment=batch-chunk.war/subsystem=batch-jberet:read-operation-description(name=start-job)
+{
+    "outcome" => "success",
+    "result" => {
+        "operation-name" => "start-job",
+        "description" => "Starts a batch job.",
+        "request-properties" => {
+            "job-xml-name" => {
+                "type" => STRING,
+                "description" => "The name of the job XML file to use when starting the job.",
+                "expressions-allowed" => false,
+                "required" => true,
+                "nillable" => false,
+                "min-length" => 1L,
+                "max-length" => 2147483647L
+            },
+            "properties" => {
+                "type" => OBJECT,
+                "description" => "Optional properties to use when starting the batch job.",
+                "expressions-allowed" => false,
+                "required" => false,
+                "nillable" => true,
+                "value-type" => STRING
+            }
+        },
+        "reply-properties" => {"type" => LONG},
+        "read-only" => false,
+        "runtime-only" => true
+    }
+}
+
+
+
+
+
+

7.26. Jakarta Faces Configuration

+
+

Jakarta Faces configuration is handled by the jsf subsystem. The jsf subsystem +allows multiple Jakarta Faces implementations to be installed on the same WildFly server. In particular, any +version that implements spec level 4.0 or higher can be installed. For each Jakarta Faces +implementation, a new slot needs to be created under jakarta.faces.impl, jakarta.faces.api, and +org.jboss.as.jsf-injection. When the jsf subsystem starts up, it scans the module path to find all +the Jakarta Faces implementations that have been installed. The default Jakarta Faces implementation that +WildFly should use is defined by the default-jsf-impl-slot subsystem attribute.

+
+
+

7.26.1. Installing a new Jakarta Faces implementation via a feature pack

+
+

WildFly supports provisioning a server using the Galleon tool, which allows an administrator to provision a server with +only the desired features, which are delivered as feature packs. For more information, see Provisioning WildFly with Galleon. +For an example of such a feature pack, see the WildFly MyFaces Feature Pack +project in the WildFly Extras GitHub organization.

+
+
+

As a quick start, to provision a server using this feature pack, one might use a commandline like the following:

+
+
+
+
$ galleon.sh provision myfaces_server.xml --dir=$SERVER_DIR
+
+
+
+
myfaces_server.xml
+
+
<?xml version="1.0" ?>
+<installation xmlns="urn:jboss:galleon:provisioning:3.0">
+  <feature-pack location="org.wildfly:wildfly-galleon-pack:{wildfly.version}">
+    <default-configs inherit="true"/>
+    <packages inherit="true"/>
+  </feature-pack>
+  <feature-pack location="org.wildfly:wildfly-myfaces-feature-pack:{feature-pack.version}">
+    <default-configs inherit="true"/>
+    <packages inherit="true"/>
+  </feature-pack>
+  <config model="standalone" name="standalone.xml">
+    <layers>
+      <!-- Base layer -->
+      <include name="management"/>
+      <include name="myfaces"/>
+    </layers>
+  </config>
+  <options>
+    <option name="optional-packages" value="passive+"/>
+    <option name="jboss-fork-embedded" value="true"/>
+  </options>
+</installation>
+
+
+
+
Start the server
+
+

After starting the server, the following CLI command can be used to verify that your new Jakarta Faces +implementation has been installed successfully. The new Jakarta Faces implementation should appear in the output +of this command.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=jsf:list-active-jsf-impls()
+
+
+
+
+
+

7.26.2. Changing the default Jakarta Faces implementation

+
+

The following CLI command can be used to make a newly installed Jakarta Faces implementation the default Jakarta +Server Faces implementation used by WildFly:

+
+
+
+
/subsystem=jsf/:write-attribute(name=default-jsf-impl-slot,value=<JSF_IMPL_NAME>-<JSF_VERSION>)
+
+
+
+

A server restart will be required for this change to take effect.

+
+
+
+

7.26.3. Configuring a Jakarta Faces app to use a non-default Jakarta Faces implementation

+
+

A Jakarta Faces app can be configured to use an installed Jakarta Faces implementation that’s not the +default implementation by adding a org.jboss.jbossfaces.JSF_CONFIG_NAME context parameter to its web.xml file. For +example, to indicate that a Jakarta Faces app should use MyFaces 4.0.0 (assuming MyFaces 4.0.0 has been installed +on the server), the following context parameter would need to be added:

+
+
+
+
<context-param>
+  <param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
+  <param-value>myfaces-4.0.0</param-value>
+</context-param>
+
+
+
+

If a Jakarta Faces app does not specify this context parameter, the default Jakarta Faces implementation +will be used for that app.

+
+
+
+

7.26.4. Disallowing DOCTYPE declarations

+
+

The following CLI commands can be used to disallow DOCTYPE declarations in Jakarta Faces deployments:

+
+
+
+
/subsystem=jsf:write-attribute(name=disallow-doctype-decl, value=true)
+reload
+
+
+
+

This setting can be overridden for a particular Jakarta Faces deployment by adding the +com.sun.faces.disallowDoctypeDecl context parameter to the deployment’s web.xml file:

+
+
+
+
<context-param>
+  <param-name>com.sun.faces.disallowDoctypeDecl</param-name>
+  <param-value>false</param-value>
+</context-param>
+
+
+
+
+
+

7.27. JMX subsystem configuration

+
+

The JMX subsystem registers a service with the Remoting endpoint so that +remote access to JMX can be obtained over the exposed Remoting +connector.

+
+
+

This is switched on by default in standalone mode and accessible over +port 9990 but in domain mode is switched off so needs to be enabled - in +domain mode the port will be the port of the Remoting connector for the +WildFly instance to be monitored.

+
+
+

To use the connector you can access it in the standard way using a +service:jmx URL:

+
+
+
+
import javax.management.MBeanServerConnection;
+import javax.management.remote.JMXConnector;
+import javax.management.remote.JMXConnectorFactory;
+import javax.management.remote.JMXServiceURL;
+ 
+public class JMXExample {
+ 
+    public static void main(String[] args) throws Exception {
+        //Get a connection to the WildFly MBean server on localhost
+        String host = "localhost";
+        int port = 9990;  // management-web port
+        String urlString =
+            System.getProperty("jmx.service.url","service:jmx:remote+http://" + host + ":" + port);
+        JMXServiceURL serviceURL = new JMXServiceURL(urlString);
+        JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, null);
+        MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
+ 
+        //Invoke on the WildFly MBean server
+        int count = connection.getMBeanCount();
+        System.out.println(count);
+        jmxConnector.close();
+    }
+}
+
+
+
+

You also need to set your classpath when running the above example. The +following script covers Linux. If your environment is much different, +paste your script when you have it working.

+
+
+
+
!/bin/bash
+
+# specify your WildFly folder +
+export YOUR_JBOSS_HOME=~/WildFly
+
+java -classpath $YOUR_JBOSS_HOME/bin/client/jboss-client.jar:./
+JMXExample
+
+
+
+

You can also connect using jconsole.

+
+
+ + + + + +
+ + +If using jconsole use the jconsole.sh and jconsole.bat scripts +included in the /bin directory of the WildFly distribution as these set +the classpath as required to connect over Remoting. +
+
+
+

In addition to the standard JVM MBeans, the WildFly MBean server +contains the following MBeans:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
JMX ObjectNameDescription

jboss.msc:type=container,name=jboss-as

Exposes management operations +on the JBoss Modular Service Container, which is the dependency +injection framework at the heart of WildFly. It is useful for debugging +dependency problems, for example if you are integrating your own +subsystems, as it exposes operations to dump all services and their +current states

jboss.naming:type=JNDIView

Shows what is bound in JNDI

jboss.modules:type=ModuleLoader,name=*

This collection of MBeans +exposes management operations on JBoss Modules classloading layer. It is +useful for debugging dependency problems arising from missing module +dependencies

+
+

7.27.1. Audit logging

+
+

Audit logging for the JMX MBean server managed by the JMX subsystem. The +resource is at /subsystem=jmx/configuration=audit-log and its +attributes are similar to the ones mentioned for +/core-service=management/access=audit/logger=audit-log in +Audit logging.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

enabled

true to enable logging of the JMX operations

log-boot

true to log the JMX operations when booting the server, false +otherwise

log-read-only

If true all operations will be audit logged, if false +only operations that change the model will be logged

+
+

Then which handlers are used to log the management operations are +configured as handler=* children of the logger. These handlers and +their formatters are defined in the global +/core-service=management/access=audit section mentioned in +Audit logging.

+
+
+
JSON Formatter
+
+

The same JSON Formatter is used as described in +Audit logging. However the records for MBean +Server invocations have slightly different fields from those logged for +the core management layer.

+
+
+
+
2013-08-29 18:26:29 - {
+    "type" : "jmx",
+    "r/o" : false,
+    "booting" : false,
+    "version" : "10.0.0.Final",
+    "user" : "$local",
+    "domainUUID" : null,
+    "access" : "JMX",
+    "remote-address" : "127.0.0.1/127.0.0.1",
+    "method" : "invoke",
+    "sig" : [
+        "javax.management.ObjectName",
+        "java.lang.String",
+        "[Ljava.lang.Object;",
+        "[Ljava.lang.String;"
+    ],
+    "params" : [
+        "java.lang:type=Threading",
+        "getThreadInfo",
+        "[Ljava.lang.Object;@5e6c33c",
+        "[Ljava.lang.String;@4b681c69"
+    ]
+}
+
+
+
+

It includes an optional timestamp and then the following information in +the json record

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field nameDescription

type

This will have the value jmx meaning it comes from the jmx +subsystem

r/o

true if the operation has read only impact on the MBean(s)

booting

true if the operation was executed during the bootup process, +false if it was executed once the server is up and running

version

The version number of the WildFly instance

user

The username of the authenticated user.

domainUUID

This is not currently populated for JMX operations

access

This can have one of the following values:*NATIVE - The +operation came in through the native management interface, for example +the CLI*HTTP - The operation came in through the domain HTTP interface, +for example the admin console*JMX - The operation came in through the +JMX subsystem. See JMX for how to configure audit logging for JMX.

remote-address

The address of the client executing this operation

method

The name of the called MBeanServer method

sig

The signature of the called called MBeanServer method

params

The actual parameters passed in to the MBeanServer method, a +simple Object.toString() is called on each parameter.

error

If calling the MBeanServer method resulted in an error, this +field will be populated with Throwable.getMessage()

+
+
+
+
+

7.28. Deployment Scanner configuration

+
+

The deployment scanner is only used in standalone mode. Its job is to +monitor a directory for new files and to deploy those files. It can be +found in standalone.xml:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">
+   <deployment-scanner scan-interval="5000"
+      relative-to="jboss.server.base.dir" path="deployments" />
+</subsystem>
+
+
+
+

You can define more deployment-scanner entries to scan for deployments +from more locations. The configuration showed will scan the +JBOSS_HOME/standalone/deployments directory every five seconds. The +runtime model is shown below, and uses default values for attributes not +specified in the xml:

+
+
+
+
[standalone@localhost:9999 /] /subsystem=deployment-scanner:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {"scanner" => {"default" => {
+        "auto-deploy-exploded" => false,
+        "auto-deploy-zipped" => true,
+        "deployment-timeout" => 60L,
+        "name" => "default",
+        "path" => "deployments",
+        "relative-to" => "jboss.server.base.dir",
+        "scan-enabled" => true,
+        "scan-interval" => 5000
+    }}}
+}
+
+
+
+

The attributes are

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription

name

STRING

The name of the scanner. default is used if not specified

path

STRING

The actual filesystem path to be scanned. Treated as an +absolute path, unless the 'relative-to' attribute is specified, in which +case the value is treated as relative to that path.

relative-to

STRING

Reference to a filesystem path defined in the +"paths" section of the server configuration, or one of the system +properties specified on startup. In the example above +jboss.server.base.dir resolves to JBOSS_HOME/standalone

scan-enabled

BOOLEAN

If true scanning is enabled

scan-interval

INT

Periodic interval, in milliseconds, at which the +repository should be scanned for changes. A value of less than 1 +indicates the repository should only be scanned at initial startup.

auto-deploy-zipped

BOOLEAN

Controls whether zipped deployment content +should be automatically deployed by the scanner without requiring the +user to add a .dodeploy marker file.

auto-deploy-exploded

BOOLEAN

Controls whether exploded deployment +content should be automatically deployed by the scanner without +requiring the user to add a .dodeploy marker file. Setting this to +'true' is not recommended for anything but basic development scenarios, +as there is no way to ensure that deployment will not occur in the +middle of changes to the content.

auto-deploy-xml

BOOLEAN

Controls whether XML content should be +automatically deployed by the scanner without requiring a .dodeploy +marker file.

deployment-timeout

LONG

Timeout, in seconds, a deployment is allows +to execute before being canceled. The default is 60 seconds.

+
+

Deployment scanners can be added by modifying standalone.xml before +starting up the server or they can be added and removed at runtime using +the CLI

+
+
+
+
[standalone@localhost:9990 /] /subsystem=deployment-scanner/scanner=new:add(scan-interval=10000,relative-to="jboss.server.base.dir",path="other-deployments")
+{"outcome" => "success"}
+[standalone@localhost:9990 /] /subsystem=deployment-scanner/scanner=new:remove
+{"outcome" => "success"}
+
+
+
+

You can also change the attributes at runtime, so for example to turn +off scanning you can do

+
+
+
+
[standalone@localhost:9990 /] /subsystem=deployment-scanner/scanner=default:write-attribute(name="scan-enabled",value=false)
+{"outcome" => "success"}
+[standalone@localhost:9990 /] /subsystem=deployment-scanner:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {"scanner" => {"default" => {
+        "auto-deploy-exploded" => false,
+        "auto-deploy-zipped" => true,
+        "deployment-timeout" => 60L,
+        "name" => "default",
+        "path" => "deployments",
+        "relative-to" => "jboss.server.base.dir",
+        "scan-enabled" => false,
+        "scan-interval" => 5000
+    }}}
+}
+
+
+
+
+

7.29. Core Management Subsystem Configuration

+
+

The core management subsystem is composed services used to manage the +server or monitor its status.
+The core management subsystem configuration may be used to:

+
+
+
    +
  • +

    register a listener for a server lifecycle events.

    +
  • +
  • +

    list the last configuration changes on a server.

    +
  • +
+
+
+

7.29.1. Lifecycle listener

+
+

You can create an implementation of +org.wildfly.extension.core.management.client.ProcessStateListener +which will be notified on running and runtime configuration state +changes thus enabling the developer to react to those changes.

+
+
+

In order to use this feature you need to create your own module then +configure and deploy it using the core management subsystem.

+
+
+

For example let’s create a simple listener :

+
+
+
+
 public class SimpleListener implements ProcessStateListener {
+ 
+    private File file;
+    private FileWriter fileWriter;
+    private ProcessStateListenerInitParameters parameters;
+ 
+    @Override
+    public void init(ProcessStateListenerInitParameters parameters) {
+        this.parameters = parameters;
+        this.file = new File(parameters.getInitProperties().get("file"));
+        try {
+            fileWriter = new FileWriter(file, true);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+ 
+    @Override
+    public void cleanup() {
+        try {
+            fileWriter.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            fileWriter = null;
+        }
+    }
+ 
+    @Override
+    public void runtimeConfigurationStateChanged(RuntimeConfigurationStateChangeEvent evt) {
+        try {
+            fileWriter.write(String.format("%s %s %s %s\n", parameters.getProcessType(), parameters.getRunningMode(), evt.getOldState(), evt.getNewState()));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+ 
+    @Override
+    public void runningStateChanged(RunningStateChangeEvent evt) {
+        try {
+            fileWriter.write(String.format("%s %s %s %s\n", parameters.getProcessType(), parameters.getRunningMode(), evt.getOldState(), evt.getNewState()));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}
+
+
+
+

To compile it you need to depend on the +org.wildfly.core:wildfly-core-management-client maven module. Now +let’s add the module to the wildfly modules :

+
+
+
+
module add --name=org.simple.lifecycle.events.listener --dependencies=org.wildfly.extension.core-management-client --resources=/home/ehsavoie/dev/demo/simple-listener/target/simple-process-state-listener.jar
+
+
+
+

Now we can register or listener :

+
+
+
+
/subsystem=core-management/process-state-listener=simple-listener:add(class=org.simple.lifecycle.events.listener.SimpleListener, module=org.simple.lifecycle.events.listener, properties={file=/home/wildfly/tmp/events.txt})
+
+
+
+
+

7.29.2. Configuration changes

+
+

You can use the core management subsystem to enable and configure an +in-memory history of the last configuration changes.
+For example to track the last 5 configuration changes let’s active this +:

+
+
+
+
/subsystem=core-management/service=configuration-changes:add(max-history=5)
+
+
+
+

Now we can list the last configuration changes :

+
+
+
+
/subsystem=core-management/service=configuration-changes:list-changes()
+{
+    "outcome" => "success",
+    "result" => [{
+        "operation-date" => "2016-12-05T11:05:12.867Z",
+        "access-mechanism" => "NATIVE",
+        "remote-address" => "/127.0.0.1",
+        "outcome" => "success",
+        "operations" => [{
+            "address" => [
+                ("subsystem" => "core-management"),
+                ("service" => "configuration-changes")
+            ],
+            "operation" => "add",
+            "max-history" => 5,
+            "operation-headers" => {
+                "caller-type" => "user",
+                "access-mechanism" => "NATIVE"
+            }
+        }]
+    }]
+}
+
+
+
+
+

7.29.3. JAXRS Subsystem Configuration

+
+

The jaxrs subsystem represents Jakarta RESTful Web Services. +RESTEasy is the implementation.

+
+
+
Required Extension:
+
+

The required extension is in the module org.jboss.as.jaxrs. In most cases the extension should be present. However, if it +is not you can add it with CLI.

+
+
+
+
/extension=org.jboss.as.jaxrs:add
+
+
+
+

This adds the following configuration entry:

+
+
+
+
<extension module="org.jboss.as.jaxrs"/>
+
+
+
+
+
Basic Subsystem Configuration Example:
+
+

By default the jaxrs subsystem is empty which results in default configuration values being used.

+
+
+

This can be changed with a management client such as the CLI or the web console. You can get detailed information about the +"Configuration switches" in section 3.5 of the RESTEasy User Guide.

+
+
+

An example configuring the subsystem with the CLI:

+
+
+
+
/subsystem=jaxrs:write-attribute(name=resteasy-add-charset, value=true)
+/subsystem=jaxrs:write-attribute(name=resteasy-gzip-max-input, value=17)
+/subsystem=jaxrs:write-attribute(name=resteasy-gzip-max-input, value=17)
+/subsystem=jaxrs:write-attribute(name=resteasy-jndi-resources, value=["java:global/jaxrsnoap/EJB_Resource1", "java:global/jaxrsnoap/EJB_Resource2"])
+/subsystem=jaxrs:write-attribute(name=resteasy-language-mappings, value={"es"="es", "fr"="fr", "en"="en-US"})
+/subsystem=jaxrs:write-attribute(name=resteasy-media-type-param-mapping, value=mt)
+/subsystem=jaxrs:write-attribute(name=resteasy-providers, value=["com.bluemonkey.reader", "com.bluemonkey.writer"])
+
+
+
+

This generates the following XML configuration.

+
+
+
+
<subsystem xmlns="urn:jboss:domain:jaxrs:2.0">
+    <resteasy-add-charset>true</resteasy-add-charset>
+    <resteasy-gzip-max-input>17</resteasy-gzip-max-input>
+    <resteasy-jndi-resources>
+        <jndi>
+            java:global/jaxrsnoap/EJB_Resource1
+        </jndi>
+        <jndi>
+            java:global/jaxrsnoap/EJB_Resource2
+        </jndi>
+    </resteasy-jndi-resources>
+    <resteasy-language-mappings>
+        <entry key="es">
+            es
+        </entry>
+        <entry key="fr">
+            fr
+        </entry>
+        <entry key="en">
+            en-US
+        </entry>
+    </resteasy-language-mappings>
+    <resteasy-media-type-param-mapping>mt</resteasy-media-type-param-mapping>
+    <resteasy-providers>
+        <class>
+            com.bluemonkey.reader
+        </class>
+        <class>
+            com.bluemonkey.writer
+        </class>
+    </resteasy-providers>
+</subsystem>
+
+
+
+ + + + + +
+ + +
+

The use of hyphens is a WildFly convention. The hyphens are translated into periods before +the parameters are passed into RESTEasy so that they conform to the RESTEasy parameter names.

+
+
+

For a discussion of the various parameters, see the RESTEasy User Guide.

+
+
+
+
+ + + + + +
+ + +One important thing to understand is that these parameters are global. That is, they apply to all deployments. +Since these parameters are global, the classes referred to in "resteasy.providers" and "resteasy.disable.providers" +must be available to all deployments. In practice, then, they are meant to enable +or disable RESTEasy providers. Note that they can be used in conjunction with +"resteasy-use-builtin-providers" to tailor a set of available providers. +
+
+
+ + + + + +
+ + +Another important fact is that once parameters are changed via some management interface the changes require + a redeployment of any applications previously deployed. +
+
+
+ + + + + +
+ + +RESTEasy has introduced a new treatment of jakarta.ws.rs.WebApplicationException's thrown by a +Jakarta REST client or MicroProfile REST Client running inside a RESTful resource, in which the embedded +jakarta.ws.rs.core.Response is "sanitized" before being returned to prevent the risk of information leaking from a +third party. The original behavior can be restored by setting the parameter +"resteasy.original.webapplicationexception.behavior" to "true". See the RESTEasy User Guide +chapter "Resteasy WebApplicationExceptions" for more information. +
+
+
+
+
+
+

7.30. Elytron OpenID Connect Client Subsystem Configuration

+
+

The ability to secure applications using OpenID Connect is +provided by the elytron-oidc-client subsystem.

+
+
+

7.30.1. Subsystem

+
+

The elytron-oidc-client subsystem is included in the default configuration. If not present, the subsystem can be +added using the following CLI commands.

+
+
+
+
[standalone@localhost:9990 /] /extension=org.wildfly.extension.elytron-oidc-client:add
+
+[standalone@localhost:9990 /] /subsystem=elytron-oidc-client:add
+
+[standalone@localhost:9990 /] reload
+
+
+
+
+

7.30.2. Configuration

+
+

By default, the elytron-oidc-client subsystem does not contain any configured resources or attributes.

+
+
+

The configuration required to secure an application with OpenID Connect can either be provided within the +application itself or within the elytron-oidc-client subsystem.

+
+
+
Deployment Configuration
+
+

The configuration required to secure an application with OpenID Connect can be specified in the deployment.

+
+
+

The first step is to create an oidc.json configuration file in the WEB-INF directory of the application. +The second step is to set the auth-method to OIDC in the application’s web.xml file.

+
+
+

Here is an example of an oidc.json configuration file:

+
+
+
+
{
+  "client-id" : "customer-portal",
+  "provider-url" : "http://localhost:8180/auth/realms/demo",
+  "ssl-required" : "external",
+  "use-resource-role-mappings" : false,
+  "enable-cors" : true,
+  "cors-max-age" : 1000,
+  "cors-allowed-methods" : "POST, PUT, DELETE, GET",
+  "cors-exposed-headers" : "WWW-Authenticate, My-custom-exposed-Header",
+  "enable-basic-auth" : false,
+  "expose-token" : true,
+  "verify-token-audience" : true,
+   "credentials" : {
+      "secret" : "234234-234234-234234"
+   },
+
+   "connection-pool-size" : 20,
+   "socket-timeout-millis": 5000,
+   "connection-timeout-millis": 6000,
+   "connection-ttl-millis": 500,
+   "disable-trust-manager": false,
+   "allow-any-hostname" : false,
+   "truststore" : "path/to/truststore.pkcs12",
+   "truststore-password" : "geheim",
+   "client-keystore" : "path/to/client-keystore.pkcs12",
+   "client-keystore-password" : "geheim",
+   "client-key-password" : "geheim",
+   "token-minimum-time-to-live" : 10,
+   "min-time-between-jwks-requests" : 10,
+   "public-key-cache-ttl": 86400,
+   "redirect-rewrite-rules" : {
+   "^/wsmain/api/(.*)$" : "/api/$1"
+   }
+}
+
+
+
+
+
Subsystem Configuration
+
+

Instead of adding configuration to your deployment to secure it with OpenID Connect as described in the +previous section, another option is to add configuration to the elytron-oidc-client subsystem instead.

+
+
+

The following example shows how to add configuration to the elytron-oidc-client subsystem.

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0">
+    <secure-deployment name="DEPLOYMENT_RUNTIME_NAME.war">
+        <client-id>customer-portal</client-id>
+        <provider-url>http://localhost:8180/auth/realms/demo</provider-url>
+        <ssl-required>external</ssl-required>
+        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
+    </secure-deployment>
+</subsystem>
+
+
+
+

The secure-deployment resource allows you to provide configuration for a specific deployment. In +the example above, the secure-deployment resource is providing the configuration that should be used +for the DEPLOYMENT_RUNTIME_NAME.war deployment, where DEPLOYMENT_RUNTIME_NAME corresponds to +the runtime-name for the deployment.

+
+
+

The various configuration options that can be specified in the secure-deployment configuration +correspond to the same options that can be specified in the oidc.json configuration that was +explained in the previous section.

+
+
+

If you have multiple applications that are being secured using the same OpenID provider, +the provider configuration can be defined separately as shown in the example below:

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0">
+    <provider name="keycloak">
+        <provider-url>http://localhost:8080/auth/realms/demo</provider-url>
+        <ssl-required>external</ssl-required>
+    </realm>
+    <secure-deployment name="customer-portal.war">
+        <provider>keycloak</provider>
+        <client-id>customer-portal</client-id>
+        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
+    </secure-deployment>
+    <secure-deployment name="product-portal.war">
+        <provider>keycloak</provider>
+        <client-id>product-portal</client-id>
+        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
+    </secure-deployment>
+</subsystem>
+
+
+
+
+
Activation
+
+

The elytron-oidc-client subsystem will scan deployments to detect if the OIDC authentication mechanism +is required for any web components (i.e., for each deployment, the subsystem will determine if OIDC configuration +has either been found within the deployment or if there is OIDC configuration for the deployment in the subsystem +configuration). If the subsystem detects that the OIDC mechanism is indeed required, the subsystem will +activate the authentication mechanism automatically. Otherwise, no activation will occur and deployment +will continue normally.

+
+
+
+
+

7.30.3. Virtual Security

+
+

The purpose of using OpenID Connect is to verify a user’s identity based on the authentication that’s been +performed by the OpenID provider. For this reason, OpenID Connect deployments do not depend on security-domain +resources that have been defined in the Elytron subsystem, like traditional deployments do. Instead, +the elytron-oidc-client subsystem will automatically create and make use of its own virtual security domain +across the deployment. No further managed configuration is required.

+
+
+ + + + + +
+ + +
+

To propagate an identity from a virtual security domain, additional configuration might be required +depending on your use case. See Identity Propagation for more details.

+
+
+
+
+
+

7.30.4. OpenID Providers

+
+

The provider-url attribute in the oidc.json configuration and in the elytron-oidc-client +subsystem configuration allows you to specify the URL for the OpenID provider that you’d like to use. +For WildFly 25, the elytron-oidc-client subsystem has been tested with the Keycloak OpenID provider. +Other OpenID providers haven’t been extensively tested yet so the use of other OpenID providers should +be considered experimental for now and should not be used in a production environment yet. Proper support +for other OpenID providers will be added in a future WildFly release.

+
+
+
Disabling "typ" Claim Validation
+
+

By default, when verifying an access token, the elytron-oidc-client subsystem expects the token +to contain a typ claim with value Bearer. Access tokens provided by the Keycloak OpenID provider +contain this claim. However, access tokens provided by other OpenID providers might not include this +claim, causing token validation to fail. When using an OpenID provider other than Keycloak, +it is possible to disable the typ claim validation by setting the wildfly.elytron.oidc.disable.typ.claim.validation +system property to true.

+
+
+
+
+

7.30.5. Multi-Tenancy Support

+
+

In some cases, it might be desirable to secure an application using multiple oidc.json configuration files. +For example, you might want a different oidc.json file to be used depending on the request in order to authenticate +users from multiple Keycloak realms. The elytron-oidc-client subsystem makes it possible to use a custom configuration +resolver so you can define which configuration file to use for each request.

+
+
+

To make use of the multi-tenancy feature, you need to create a class that implements the +org.wildfly.security.http.oidc.OidcClientConfigurationResolver interface, as shown in the example below:

+
+
+
+
package example;
+
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.wildfly.security.http.oidc.OidcClientConfiguration;
+import org.wildfly.security.http.oidc.OidcClientConfigurationBuilder;
+import org.wildfly.security.http.oidc.OidcClientConfigurationResolver;
+import org.wildfly.security.http.oidc.OidcHttpFacade;
+
+public class MyCustomConfigResolver implements OidcClientConfigurationResolver {
+
+    private final Map<String, OidcClientConfiguration> cache = new ConcurrentHashMap<>();
+
+    @Override
+    public OidcClientConfiguration resolve(OidcHttpFacade.Request request) {
+        String path = request.getURI();
+        String realm = ... // determine which Keycloak realm to use based on the request path
+        OidcClientConfiguration clientConfiguration = cache.get(realm);
+        if (clientConfiguration == null) {
+            InputStream is = getClass().getResourceAsStream("/oidc-" + realm + ".json"); // config to use based on the realm
+            clientConfiguration = OidcClientConfigurationBuilder.build(is);
+            cache.put(realm, clientConfiguration);
+        }
+        return clientConfiguration;
+    }
+
+}
+
+
+
+

Once you’ve created your OidcClientConfigurationResolver `, you can specify that you want to make +use of your custom configuration resolver by setting the `oidc.config.resolver context-param in +your application’s web.xml file, as shown in the example below:

+
+
+
+
<web-app>
+    ...
+    <context-param>
+        <param-name>oidc.config.resolver</param-name>
+        <param-value>example.MyCustomConfigResolver</param-value>
+    </context-param>
+    ...
+</web-app>
+
+
+
+
+

7.30.6. Identity Propagation

+
+

When securing an application with OpenID Connect, the elytron-oidc-client subsystem will automatically +create a virtual security domain for you. If your application invokes an EJB, additional configuration +might be required to propagate the security identity from the virtual security domain depending on how +the EJB is being secured.

+
+
+
Securing an EJB using a different security domain
+
+

If your application secured with OpenID Connect invokes an EJB within the same deployment (e.g., +within the same WAR or EAR) or invokes an EJB in a separate deployment (e.g., across EARs) +and you’d like to secure the EJB using a different security domain from your servlet, +additional configuration will be needed to outflow the security identities established by +the virtual security domain to another security domain.

+
+
+

The virtual-security-domain resource allows you to specify that security identities +established by a virtual security domain should automatically be outflowed to other +security domains. A virtual-security-domain resource has a few attributes, as +described below:

+
+
+
    +
  • +

    name - This is the runtime name of a deployment associated with a virtual security domain (e.g., +DEPLOYMENT_NAME.ear, a deployment that has a subdeployment that is secured using OpenID Connect).

    +
  • +
  • +

    outflow-security-domains - This is the list of security-domains that security identities from +the virtual security domain should be automatically outflowed to.

    +
  • +
  • +

    outflow-anonymous - When outflowing to a security domain, if outflow is not possible, should the +anonymous identity be used? Outflow to a security domain might not be possible if the domain does +not trust this domain or if the identity being outflowed to a domain does not exist in that domain. +Outflowing anonymous has the effect of clearing any identity already established for that domain. +This attribute defaults to false.

    +
  • +
+
+
+

In addition to configuring a virtual-security-domain resource, you’ll also need to update the +security-domain configuration for your EJB to indicate that it should trust security identities established +by the virtual-security-domain. This can be specified by configuring the trusted-virtual-security-domains +attribute for a security-domain (e.g., setting the trusted-virtual-security-domains attribute to +DEPLOYMENT_NAME.ear for a security-domain would indicate that this security-domain +should trust the virtual security domain associated with the DEPLOYMENT_NAME.ear deployment).

+
+
+

The virtual-security-domain configuration and trusted-virtual-security-domains configuration +will allow security identities established by a virtual security domain to be successfully +outflowed to a security-domain being used to secure the EJB.

+
+
+
+
Securing an EJB using the same virtual security domain
+
+
Within the same deployment
+
+

If your application secured with OpenID Connect invokes an EJB within the same deployment (e.g., +within the same WAR or EAR), and you’d like to secure the EJB using the same virtual security +domain as your servlet, no additional configuration is required. This means that if no security +domain configuration has been explicitly specified for the EJB, the virtual security domain will +automatically be used to secure the EJB.

+
+
+
+
Across deployments
+
+

If your application secured with OpenID Connect invokes an EJB in a separate deployment (e.g., across EARs) +and you’d like to secure the EJB using the same virtual security domain as your servlet, +additional configuration will be needed. In particular, the EJB will need to reference the virtual +security domain explicitly.

+
+
+

The virtual-security-domain resource allows you to reference the virtual security domain +from the security domain configuration for the EJB. As an example, a virtual-security-domain +resource could be added as follows:

+
+
+

/subsystem=elytron/virtual-security-domain=DEPLOYMENT_NAME.ear:add()

+
+
+

An annotation like @SecurityDomain(DEPLOYMENT_NAME.ear) can then be added to the EJB, +where DEPLOYMENT_NAME.ear is a reference to the virtual-security-domain defined above.

+
+
+

This configuration indicates that the virtual security domain associated with DEPLOYMENT_NAME.ear +should be used to secure the EJB.

+
+
+
+
+
+

7.30.7. Securing the management console with OpenID Connect

+
+

The management console can be secured with OpenID Connect using the Keycloak OpenID provider.

+
+
+ + + + + +
+ + +
+

The ability to secure the management console with the Keycloak OpenID provider is only available when +running a standalone server and is not supported when running a managed domain. The management +CLI cannot be secured with OpenID Connect.

+
+
+
+
+

To secure the management console with OpenID Connect, configuration is required on the Keycloak side +and in the elytron-oidc-client subsystem.

+
+
+
Keycloak Configuration
+
+

Follow the steps in Keycloak’s getting started guide to +add a new realm called wildfly-infra.

+
+
+

Then, create a new OpenID Connect client called wildfly-console. Set the Valid Redirect URIs using +the URI used to access the WildFly management console, e.g., http://localhost:9990/console/. Similarly, you’ll +also need to set *Web Origins using the management port for your WildFly instance, e.g., +http://localhost:9990.

+
+
+

Next, create a second OpenID Connect client called wildfly-management. This will be a bearer-only client so in +the Capability configuration, be sure to uncheck the Standard flow and Direct access grants.

+
+
+

If you will be configuring WildFly to enable Role Based Access Control (RBAC), you can also create +a new Realm role (e.g., Administrator) and assign it to a user.

+
+
+
+
Elytron OIDC Client Subsystem Configuration
+
+

We need to add a secure-deployment resource that references the wildfly-management client that was created +in the previous section.

+
+
+

A secure-server that references the wildfly-console client is also needed.

+
+
+

Some example CLI commands that add these resources can be seen here:

+
+
+
+
# Configure the Keycloak provider
+/subsystem=elytron-oidc-client/provider=keycloak:add(provider-url=http://localhost:8180/realms/wildfly-infra)
+
+# Create a secure-deployment in order to protect mgmt interface
+/subsystem=elytron-oidc-client/secure-deployment=wildfly-management:add(provider=keycloak,client-id=wildfly-management,principal-attribute=preferred_username,bearer-only=true,ssl-required=EXTERNAL)
+
+# Enable RBAC where roles are obtained from the identity
+/core-service=management/access=authorization:write-attribute(name=provider,value=rbac)
+/core-service=management/access=authorization:write-attribute(name=use-identity-roles,value=true)
+
+# Create a secure-server in order to publish the management console configuration via mgmt interface
+/subsystem=elytron-oidc-client/secure-server=wildfly-console:add(provider=keycloak,client-id=wildfly-console,public-client=true)
+
+# reload
+reload
+
+
+
+
+
+

7.30.8. Accessing the management console

+
+

With the above configuration in place, when you access the management console (e.g., http://localhost:9990/console/), +you will be redirected to Keycloak to log in, and will then be redirected back to the management console upon successful +authentication.

+
+
+
+
+

7.31. Simple configuration subsystems

+
+

The following subsystems currently have no configuration beyond its root +element in the configuration

+
+
+
+
<subsystem xmlns="urn:jboss:domain:jdr:1.0"/>
+<subsystem xmlns="urn:jboss:domain:pojo:1.0"/>
+<subsystem xmlns="urn:jboss:domain:sar:1.0"/>
+
+
+
+

The presence of each of these turns on a piece of functionality:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
NameDescription

jdr

Enables the gathering of diagnostic data for use in remote +analysis of error conditions. Although the data is in a simple format +and could be useful to anyone, primarily useful for JBoss EAP +subscribers who would provide the data to Red Hat when requesting +support

pojo

Enables the deployment of applications containing JBoss +Microcontainer services, as supported by previous versions of JBoss +Application Server

sar

Enables the deployment of .SAR archives containing MBean services, +as supported by previous versions of JBoss Application Server

+
+
+
+
+

8. Domain Setup

+
+
+

To run a group of servers as a managed domain you need to configure both +the domain controller and each host that joins the domain. This sections +focuses on the network configuration for the domain and host controller +components. For background information users are encouraged to review +the Operating modes and +Configuration +Files sections.

+
+
+

8.1. Domain Controller Configuration

+
+

The domain controller is the central government for a managed domain. A +domain controller configuration requires two steps:

+
+
+
    +
  • +

    A host needs to be configured to act as the Domain Controller for the +whole domain

    +
  • +
  • +

    The host must expose an addressable management interface binding for +the managed hosts to communicate with it

    +
  • +
+
+
+

Example IP Addresses

+
+
+ + + + + +
+ + +In this example the domain controller uses 192.168.0.101 and the host +controller 192.168.0.10 +
+
+
+

Configuring a host to act as the Domain Controller is done through the +domain-controller declaration in host.xml. If it includes the +<local/> element, then this host will become the domain controller:

+
+
+
+
<domain-controller>
+   <local/>
+</domain-controller>
+
+
+
+

~(See domain/configuration/host.xml)~

+
+
+

A host acting as the Domain Controller must expose a management +interface on an address accessible to the other hosts in the domain. +Exposing an HTTP(S) management interface is not required, but is +recommended as it allows the Administration Console to work:

+
+
+
+
<management-interfaces>
+    <native-interface sasl-authentication-factory="management-sasl-authentication">
+        <socket interface="management" port="9999"/>
+    </native-interface>
+    <http-interface http-authentication-factory="management-http-authentication">
+        <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
+        <socket interface="management" port="${jboss.management.http.port:9990}"/>
+    </http-interface>
+</management-interfaces>
+
+
+
+

The interface attributes above refer to a named interface declaration +later in the host.xml file. This interface declaration will be used to +resolve a corresponding network interface.

+
+
+
+
<interfaces>
+   <interface name="management">
+       <inet-address value="192.168.0.101"/>
+   </interface>
+</interfaces>
+
+
+
+

~(See domain/configuration/host.xml)~

+
+
+

Please consult the chapter "Interface Configuration" for a more detailed +explanation on how to configure network interfaces.

+
+
+

Next by default the Domain Controller is configured to require +authentication so a user needs to be added that can be used by the secondary +Host Controller to connect.

+
+
+

Make use of the add-user utility to add a new user, for this example I +am adding a new user called "secondary".

+
+
+ + + + + +
+ + +add-user MUST be run on the Domain Controller and NOT the +secondary Host Controller. +
+
+
+
+

8.2. Host Controller Configuration

+
+

Once the Domain Controller is configured correctly you can proceed with +any host that should join the domain. The Host Controller configuration +requires three steps:

+
+
+
    +
  • +

    The logical host name (within the domain) needs to be distinct

    +
  • +
  • +

    The Host Controller needs to know the Domain Controller IP address

    +
  • +
+
+
+

Provide a distinct, logical name for the host. In the following example +we simply name it "secondary":

+
+
+
+
<host xmlns="urn:jboss:domain:3.0"
+     name="secondary">
+[...]
+</host>
+
+
+
+

~(See domain/configuration/host.xml)~

+
+
+

If the name attribute is not set, the default name for the host will +be the value of the jboss.host.name system property. If that is not +set, the value of the HOSTNAME or COMPUTERNAME environment variable +will be used, one of which will be set on most operating systems. If +neither is set the name will be the value of +InetAddress.getLocalHost().getHostName().

+
+
+

An authentication-context needs to be defined in the elytron subsystem +to contain the identity of the host controller.

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron:15.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+    <authentication-client>
+        <authentication-configuration sasl-mechanism-selector="DIGEST-MD5"
+                                      name="hostAuthConfig"
+                                      authentication-name="secondary"
+                                      realm="ManagementRealm">
+            <credential-reference clear-text="host_us3r_password"/>
+        </authentication-configuration>
+        <authentication-context name="hcAuthContext">
+            <match-rule authentication-configuration="hostAuthConfig"/>
+        </authentication-context>
+    </authentication-client>
+....
+
+
+
+

Tell it how to find the Domain Controller, so it can register itself with +the domain:

+
+
+
+
<domain-controller>
+   <remote protocol="remote" host="192.168.0.101" port="9999" authentication-context="hcAuthContext"/>
+</domain-controller>
+
+
+
+

Since we have also exposed the HTTP management interface we could also +use:

+
+
+
+
<domain-controller>
+   <remote protocol="http-remoting" host="192.168.0.101" port="9990" username="secondary" authentication-context="hcAuthContext"/>
+</domain-controller>
+
+
+
+

~(See domain/configuration/host.xml)~

+
+
+ + + + + +
+ + +The name of each host needs to be unique when registering with the +Domain Controller, however the username does not - using the username +attribute allows the same account to be used by multiple hosts if this +makes sense in your environment. +
+
+
+

8.2.1. Ignoring domain wide resources

+
+

WildFly 10 and later make it easy for secondary Host Controllers to "ignore" +parts of the domain wide configuration. What does the mean and why is it +useful?

+
+
+

One of the responsibilities of the Domain Controller is ensuring that +all running Host Controllers have a consistent local copy of the domain +wide configuration (i.e. those resources whose address does not begin +with /host=*, i.e. those that are persisted in domain.xml. Having +that local copy allows a user to do the following things:

+
+
+
    +
  • +

    Ask the secondary Host Controller to launch its already configured servers, even if the +Domain Controller is not running.

    +
  • +
  • +

    Configured new servers, using different server groups from those +current running, and ask the secondary Host Controller to launch them, even if the Domain +Controller is not running.

    +
  • +
  • +

    Reconfigure the secondary Host Controller to act as the Domain Controller, allowing it to +take over as the Domain Controller if the previous Domain Controller has failed or been shut +down.

    +
  • +
+
+
+

However, of these three things only the latter two require that the +secondary Host Controller maintain a complete copy of the domain wide configuration. The +first only requires the secondary Host Controller to have the portion of the domain wide +configuration that is relevant to its current servers. And the first use +case is the most common one. A secondary Host Controller that is only meant to support the +first use case can safely "ignore" portions of the domain wide +configuration. And there are benefits to ignoring some resources:

+
+
+
    +
  • +

    If a server group is ignored, and the deployments mapped to that +server group aren’t mapped to other non-ignored groups, then the secondary Host Controller +does not need to pull down a copy of the deployment content from the +Domain Controller. That can save disk space on the secondary Host Controller, improve the speed of +starting new hosts and reduce network traffic.

    +
  • +
  • +

    WildFly supports "mixed domains" where a later version Domain +Controller can manage secondary Host Controllers running previous versions. But those +"legacy" secondary Host Controllers cannot understand configuration resources, attributes +and operations introduced in newer versions. So any attempt to use newer +things in the domain wide configuration will fail unless the legacy +secondary Host Controllers are ignoring the relevant resources. But ignoring resources will +allow the legacy secondary Host Controllers to work fine managing servers using profiles +without new concepts, while other hosts can run servers with profiles +that take advantage of the latest features.

    +
  • +
+
+
+

Prior to WildFly 10, a secondary Host Controller could be configured to ignore some +resources, but the mechanism was not particularly user friendly:

+
+
+
    +
  • +

    The resources to be ignored had to be listed in a fair amount of +detail in each host’s configuration.

    +
  • +
  • +

    If a new resource is added and needs to be ignored, then each host +that needs to ignore that must be updated to record that.

    +
  • +
+
+
+

Starting with WildFly 10, this kind of detailed configuration is no +longer required. Instead, with the standard versions of host.xml, the +secondary Host Controller will behave as follows:

+
+
+
    +
  • +

    If the secondary Host Controller was started with the --backup command line parameter, +the behavior will be the same as releases prior to 10; i.e. only +resources specifically configured to be ignored will be ignored.

    +
  • +
  • +

    Otherwise, the secondary Host Controller will "ignore unused resources".

    +
  • +
+
+
+

What does "ignoring unused resources" mean?

+
+
+
    +
  • +

    Any server-group that is not referenced by one of the host’s +server-config resources is ignored.

    +
  • +
  • +

    Any profile that is not referenced by a non-ignored server-group, +either directly or indirectly via the profile resource’s 'include' +attribute, is ignored

    +
  • +
  • +

    Any socket-binding-group that is not directly referenced by one of the +host’s server-config resources, or referenced by a non-ignored +server-group, is ignored

    +
  • +
  • +

    Extension resources will not be automatically ignored, even if no +non-ignored profile uses the extension. Ignoring an extension requires +explicit configuration. Perhaps in a future release extensions will be +explicitly ignored.

    +
  • +
  • +

    If a change is made to the secondary Host Controller host’s configuration or to the domain +wide configuration that reduces the set of ignored resources, then as +part of handling that change the secondary Host Controller will contact the Domain Controller to pull +down the missing pieces of configuration and will integrate those pieces +in its local copy of the management model. Examples of such changes +include adding a new server-config that references a previously ignored +server-group or socket-binding-group, changing the server-group or +socket-binding-group assigned to a server-config, changing the profile +or socket-binding-group assigned to a non-ignored server-group, or +adding a profile or socket-binding-group to the set of those included +directly or indirectly by a non-ignored profile or socket-binding-group.

    +
  • +
+
+
+

The default behavior can be changed, either to always ignore unused +resources, even if --backup is used, or to not ignore unused +resources, by updating the domain-controller element in the host-xml +file and setting the ignore-unused-configuration attribute:

+
+
+
+
<domain-controller>
+    <remote authentication-context="hcAuthContext" ignore-unused-configuration="false">
+        <discovery-options>
+            <static-discovery name="primary" protocol="${jboss.domain.primary.protocol:remote}" host="${jboss.domain.primary.address}" port="${jboss.domain.primary.port:9999}"/>
+        </discovery-options>
+    </remote>
+</domain-controller>
+
+
+
+

The "ignore unused resources" behavior can be used in combination with +the pre-WildFly 10 detailed specification of what to ignore. If that is +done both the unused resources and the explicitly declared resources +will be ignored. Here’s an example of such a configuration, one where +the secondary Host Controller cannot use the "org.example.foo" extension that has been +installed on the Domain Controller and on some secondary Host Controllers, but not this one:

+
+
+
+
<domain-controller>
+    <remote authentication-context="hcAuthContext" ignore-unused-configuration="true">
+        <ignored-resources type="extension">
+            <instance name="org.example.foo"/>
+        </ignored-resources>
+        <discovery-options>
+            <static-discovery name="primary" protocol="${jboss.domain.primary.protocol:remote}" host="${jboss.domain.primary.address}" port="${jboss.domain.primary.port:9999}"/>
+        </discovery-options>
+    </remote>
+</domain-controller>
+
+
+
+
+
+

8.3. Server groups

+
+

The Domain Controller defines one or more server groups and associates +each of these with a profile and a socket binding group, and also:

+
+
+
+
<server-groups>
+    <server-group name="main-server-group" profile="default">
+        <jvm name="default">
+           <heap size="64m" max-size="512m"/>
+           <permgen size="128m" max-size="128m"/>
+        </jvm>
+        <socket-binding-group ref="standard-sockets"/>
+    </server-group>
+    <server-group name="other-server-group" profile="bigger">
+        <jvm name="default">
+            <heap size="64m" max-size="512m"/>
+        </jvm>
+        <socket-binding-group ref="bigger-sockets"/>
+    </server-group>
+</server-groups>
+
+
+
+

~(See domain/configuration/domain.xml)~

+
+
+

The Domain Controller also defines the socket binding groups and the +profiles. The socket binding groups define the default socket bindings +that are used:

+
+
+
+
<socket-binding-groups>
+    <socket-binding-group name="standard-sockets" default-interface="public">
+        <socket-binding name="http" port="8080"/>
+        [...]
+    </socket-binding-group>
+    <socket-binding-group name="bigger-sockets" include="standard-sockets" default-interface="public">
+        <socket-binding name="unique-to-bigger" port="8123"/>
+    </socket-binding-group>
+</socket-binding-groups>
+
+
+
+

~(See domain/configuration/domain.xml)~
+In this example the bigger-sockets group includes all the socket +bindings defined in the standard-sockets groups and then defines an +extra socket binding of its own.

+
+
+

A profile is a collection of subsystems, and these subsystems are what +implement the functionality people expect of an application server.

+
+
+
+
<profiles>
+    <profile name="default">
+        <subsystem xmlns="urn:jboss:domain:web:1.0">
+            <connector name="http" scheme="http" protocol="HTTP/1.1" socket-binding="http"/>
+            [...]
+        </subsystem>
+        <\!-\- The rest of the subsystems here \-->
+        [...]
+    </profile>
+    <profile name="bigger">
+        <subsystem xmlns="urn:jboss:domain:web:1.0">
+            <connector name="http" scheme="http" protocol="HTTP/1.1" socket-binding="http"/>
+            [...]
+        </subsystem>
+        <\!-\- The same subsystems as defined by 'default' here \-->
+        [...]
+        <subsystem xmlns="urn:jboss:domain:fictional-example:1.0">
+            <socket-to-use name="unique-to-bigger"/>
+        </subsystem>
+    </profile>
+</profiles>
+
+
+
+

~(See domain/configuration/domain.xml)~
+Here we have two profiles. The bigger profile contains all the same +subsystems as the default profile (although the parameters for the +various subsystems could be different in each profile), and adds the +fictional-example subsystem which references the unique-to-bigger +socket binding.

+
+
+
+

8.4. Servers

+
+

The Host Controller defines one or more servers:

+
+
+
+
<servers>
+    <server name="server-one" group="main-server-group">
+        <\!-\- server-one inherits the default socket-group declared in the server-group \-->
+        <jvm name="default"/>
+    </server>
+ 
+    <server name="server-two" group="main-server-group" auto-start="true">
+        <socket-binding-group ref="standard-sockets" port-offset="150"/>
+        <jvm name="default">
+            <heap size="64m" max-size="256m"/>
+        </jvm>
+    </server>
+ 
+    <server name="server-three" group="other-server-group" auto-start="false">
+        <socket-binding-group ref="bigger-sockets" port-offset="250"/>
+    </server>
+</servers>
+
+
+
+

~(See domain/configuration/host.xml)~

+
+
+

server-one and server-two both are associated with +main-server-group so that means they both run the subsystems defined +by the default profile, and have the socket bindings defined by the +standard-sockets socket binding group. Since all the servers defined +by a host will be run on the same physical host we would get port +conflicts unless we used +<socket-binding-group ref="standard-sockets" port-offset="150"/> for +server-two. This means that server-two will use the socket bindings +defined by standard-sockets but it will add 150 to each port number +defined, so the value used for http will be 8230 for server-two.

+
+
+

server-three will not be started due to its auto-start="false". The +default value if no auto-start is given is true so both server-one +and server-two will be started when the host controller is started. +server-three belongs to other-server-group, so if its auto-start +were changed to true it would start up using the subsystems from the +bigger profile, and it would use the bigger-sockets socket binding +group.

+
+
+

8.4.1. JVM

+
+

The Host Controller contains the main jvm definitions with arguments:

+
+
+
+
<jvms>
+    <jvm name="default">
+        <heap size="64m" max-size="128m"/>
+    </jvm>
+</jvms>
+
+
+
+

~(See domain/configuration/host.xml)~
+From the preceding examples we can see that we also had a jvm +reference at server group level in the Domain Controller. The jvm’s name +must match one of the definitions in the Host Controller. The values +supplied at Domain Controller and Host Controller level are combined, +with the Host Controller taking precedence if the same parameter is +given in both places.

+
+
+

Finally, as seen, we can also override the jvm at server level. Again, +the jvm’s name must match one of the definitions in the Host Controller. +The values are combined with the ones coming in from Domain +Controller and Host Controller level, this time the server definition +takes precedence if the same parameter is given in all places.

+
+
+

Following these rules the jvm parameters to start each server would be

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
ServerJVM parameters

server-one

-Xms64m -Xmx128m

server-two

-Xms64m -Xmx256m

server-three

-Xms64m -Xmx128m

+
+
+
+
+
+

9. Management tasks

+
+
+

9.1. Command line parameters

+
+

To start up a WildFly managed domain, execute the +$JBOSS_HOME/bin/domain.sh script. To start up a standalone server, +execute the $JBOSS_HOME/bin/standalone.sh. With no arguments, the +default configuration is used. You can override the default +configuration by providing arguments on the command line, or in your +calling script.

+
+
+

9.1.1. System properties

+
+

To set a system property, pass its new value using the standard jvm +-Dkey=value options:

+
+
+
+
$JBOSS_HOME/bin/standalone.sh -Djboss.home.dir=some/location/wildFly \
+    -Djboss.server.config.dir=some/location/wildFly/custom-standalone
+
+
+
+

This command starts up a standalone server instance using a non-standard +AS home directory and a custom configuration directory. For specific +information about system properties, refer to the definitions below.

+
+
+

Instead of passing the parameters directly, you can put them into a +properties file, and pass the properties file to the script, as in the +two examples below.

+
+
+
+
$JBOSS_HOME/bin/domain.sh --properties=/some/location/jboss.properties
+$JBOSS_HOME/bin/domain.sh -P=/some/location/jboss.properties
+
+
+
+

Note however, that properties set this way are not processed as part of +JVM launch. They are processed early in the boot process, but this +mechanism should not be used for setting properties that control JVM +behavior (e.g. java.net.perferIPv4Stack) or the behavior of the JBoss +Modules classloading system.

+
+
+

The syntax for passing in parameters and properties files is the same +regardless of whether you are running the domain.sh, standalone.sh, +or the Microsoft Windows scripts domain.bat or standalone.bat.

+
+
+

The properties file is a standard Java property file containing +key=value pairs:

+
+
+
+
jboss.home.dir=/some/location/wildFly
+jboss.domain.config.dir=/some/location/wildFly/custom-domain
+
+
+
+

System properties can also be set via the xml configuration files. Note +however that for a standalone server properties set this way will not be +set until the xml configuration is parsed and the commands created by +the parser have been executed. So this mechanism should not be used for +setting properties whose value needs to be set before this point.

+
+
+
Controlling filesystem locations with system properties
+
+

The standalone and the managed domain modes each use a default +configuration which expects various files and writable directories to +exist in standard locations. Each of these standard locations is +associated with a system property, which has a default value. To +override a system property, pass its new value using the one of the +mechanisms above. The locations which can be controlled via system +property are:

+
+
+
Standalone
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Property nameUsageDefault value

java.ext.dirs

The JDK extension directory paths

null

jboss.home.dir

The root directory of the WildFly installation.

Set by +standalone.sh to $JBOSS_HOME

jboss.server.base.dir

The base directory for server content.

jboss.home.dir/standalone

jboss.server.config.dir

The base configuration directory.

jboss.server.base.dir/configuration

jboss.server.data.dir

The directory used for persistent data file +storage.

jboss.server.base.dir/data

jboss.server.log.dir

The directory containing the server.log file.

jboss.server.base.dir/log

jboss.server.temp.dir

The directory used for temporary file storage.

jboss.server.base.dir/tmp

jboss.server.content.dir

The directory used to store deployed content

jboss.server.data.dir/content

+
+
+
Managed Domain
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Property nameUsageDefault value

jboss.home.dir

The root directory of the WildFly installation.

Set by +domain.sh to $JBOSS_HOME

jboss.domain.base.dir

The base directory for domain content.

jboss.home.dir/domain

jboss.domain.config.dir

The base configuration directory

jboss.domain.base.dir/configuration

jboss.domain.data.dir

The directory used for persistent data file +storage.

jboss.domain.base.dir/data

jboss.domain.log.dir

The directory containing the host-controller.log +and process-controller.log files

jboss.domain.base.dir/log

jboss.domain.temp.dir

The directory used for temporary file storage

jboss.domain.base.dir/tmp

jboss.domain.deployment.dir

The directory used to store deployed +content

jboss.domain.base.dir/content

jboss.domain.servers.dir

The directory containing the output for the +managed server instances

jboss.domain.base.dir/servers

+
+
+
+
+

9.1.2. Other command line parameters

+
+

The first acceptable format for command line arguments to the WildFly +launch scripts is

+
+
+
+
--name=value
+
+
+
+

For example:

+
+
+
+
$JBOSS_HOME/bin/standalone.sh --server-config=standalone-ha.xml
+
+
+
+

If the parameter name is a single character, it is prefixed by a single +'-' instead of two. Some parameters have both a long and short option.

+
+
+
+
-x=value
+
+
+
+

For example:

+
+
+
+
$JBOSS_HOME/bin/standalone.sh -P=/some/location/jboss.properties
+
+
+
+

For some command line arguments frequently used in previous major +releases of WildFly, replacing the "=" in the above examples with a +space is supported, for compatibility.

+
+
+
+
-b 192.168.100.10
+
+
+
+

If possible, use the -x=value syntax. New parameters will always +support this syntax.

+
+
+

The sections below describe the command line parameter names that are +available in standalone and domain mode.

+
+
+
Standalone
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDefault if absentValue

--admin-only

-

Set the server’s running type to ADMIN_ONLY causing it +to open administrative interfaces and accept management requests but not +start other runtime services or accept end user requests.

--server-config -c

standalone.xml

A relative path which is interpreted +to be relative to jboss.server.config.dir. The name of the configuration +file to use.

--read-only-server-config

-

A relative path which is interpreted to +be relative to jboss.server.config.dir. This is similar to +--server-config but if this alternative is specified the server will not +overwrite the file when the management model is changed. However, a full +versioned history is maintained of the file.

--graceful-startup

true

Start the servers in gracefully, queuing or cleanly rejecting incoming requests until the server is fully started.

--git-repo

-

remote Git repository URL to use for configuration directory and content repository content or local if only a local repository is to be used.

--git-branch

master

The Git branch or tag to be used. If a tag name is used then the future commits will go into the detached state.

--git-auth

-

A URL to an Elytron configuration file containing the credentials to be used for connecting to the Git repository.

+
+
+
Managed Domain
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDefault if absentValue

--admin-only

-

Set the host controller’s running type to ADMIN_ONLY causing it to open +administrative interfaces and accept management requests but not start servers or, if this +host controller is the primary for the domain, accept incoming connections from secondary +host controllers.

--domain-config -c

domain.xml

A relative path which is interpreted to +be relative to jboss.domain.config.dir. The name of the domain wide +configuration file to use.

--read-only-domain-config

-

A relative path which is interpreted to +be relative to jboss.domain.config.dir. This is similar to +--domain-config but if this alternative is specified the host +controller will not overwrite the file when the management model is +changed. However, a full versioned history is maintained of the file.

--host-config

host.xml

A relative path which is interpreted to be +relative to jboss.domain.config.dir. The name of the host-specific +configuration file to use.

--read-only-host-config

-

A relative path which is interpreted to be +relative to jboss.domain.config.dir. This is similar to --host-config +but if this alternative is specified the host controller will not +overwrite the file when the management model is changed. However, a full +versioned history is maintained of the file.

+
+

The following parameters take no value and are only usable on secondary host +controllers (i.e. hosts configured to connect to a remote domain +controller.)

+
+ ++++ + + + + + + + + + + + + + + + + +
NameFunction

--backup

Causes the secondary host controller to create and maintain a +local copy (domain.cached-remote.xml) of the domain configuration. If +ignore-unused-configuration is unset in host.xml,a complete copy of the +domain configuration will be stored locally, otherwise the configured +value of ignore-unused-configuration in host.xml will be used. (See +ignore-unused-configuration for more details.)

--cached-dc

If the secondary host controller is unable to contact the +domain controller to get its configuration at boot, this option +will allow the secondary host controller to boot and become operational using +a previously cached copy of the domain configuration +(domain.cached-remote.xml.) If the cached configuration is not present, +this boot will fail. This file is created using one of the +following methods:- A previously successful connection to the +domain controller using --backup or --cached-dc.- Copying the domain +configuration from an alternative host to +domain/configuration/domain.cached-remote.xml.The unavailable +domain controller will be polled periodically for availability, and once +becoming available, the secondary host controller will reconnect to the +domain controller and synchronize the domain configuration. During +the interval the domain controller is unavailable, the secondary host +controller will not be able to make any modifications to the domain +configuration, but it may launch servers and handle requests to deployed +applications etc.

+
+
+
Common parameters
+
+

These parameters apply in both standalone or managed domain mode:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameFunction

-b=<value>

Sets system property jboss.bind.address to <value>. See +Controlling the Bind Address with -b for further details.

-b<name>=<value>

Sets system property jboss.bind.address.<name> to +<value> where name can vary. See Controlling the Bind Address with -b +for further details.

-u=<value>

Sets system property jboss.default.multicast.address to +<value>. See Controlling the Default Multicast Address with -u for +further details.

--version -v -V

Prints the version of WildFly to standard output and +exits the JVM.

--help-h

Prints a help message explaining the options and exits the +JVM.

+
+
+
+

9.1.3. Controlling the Bind Address with -b

+
+

WildFly binds sockets to the IP addresses and interfaces contained in +the <interfaces> elements in standalone.xml, domain.xml and +host.xml. (See +Interfaces +and +Socket +Bindings for further information on these elements.) The standard +configurations that ship with WildFly includes two interface +configurations:

+
+
+
+
<interfaces>
+    <interface name="management">
+        <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
+    </interface>
+    <interface name="public">
+       <inet-address value="${jboss.bind.address:127.0.0.1}"/>
+    </interface>
+</interfaces>
+
+
+
+

Those configurations use the values of system properties +jboss.bind.address.management and jboss.bind.address if they are +set. If they are not set, 127.0.0.1 is used for each value.

+
+
+

As noted in +Common +Parameters, the AS supports the -b and -b<name> command line +switches. The only function of these switches is to set system +properties jboss.bind.address and jboss.bind.address.<name> +respectively. However, because of the way the standard WildFly +configuration files are set up, using the -b switches can indirectly +control how the AS binds sockets.

+
+
+

If your interface configurations match those shown above, using this +as your launch command causes all sockets associated with interface +named "public" to be bound to 192.168.100.10.

+
+
+
+
$JBOSS_HOME/bin/standalone.sh -b=192.168.100.10
+
+
+
+

In the standard config files, public interfaces are those not associated +with server management. Public interfaces handle normal end-user +requests.

+
+
+ + + + + +
+ + +The interface named "public" is not inherently special. It is provided +as a convenience. You can name your interfaces to suit your environment. +
+
+
+

To bind the public interfaces to all IPv4 addresses (the IPv4 wildcard +address), use the following syntax:

+
+
+
+
$JBOSS_HOME/bin/standalone.sh -b=0.0.0.0
+
+
+
+

You can also bind the management interfaces, as follows:

+
+
+
+
$JBOSS_HOME/bin/standalone.sh -bmanagement=192.168.100.10
+
+
+
+

In the standard config files, management interfaces are those sockets +associated with server management, such as the socket used by the CLI, +the HTTP socket used by the admin console, and the JMX connector socket.

+
+
+ + + + + +
+ + +The -b switch only controls the interface bindings because the +standard config files that ship with WildFly sets things up that way. If +you change the <interfaces> section in your configuration to no longer +use the system properties controlled by -b, then setting -b in your +launch command will have no effect. +
+
+
+

For example, this perfectly valid setting for the "public" interface +causes -b to have no effect on the "public" interface:

+
+
+
+
<interface name="public">
+   <nic name="eth0"/>
+</interface>
+
+
+
+

The key point is the contents of the configuration files determine the +configuration. Settings like -b are not overrides of the +configuration files. They only provide a shorter syntax for setting a +system properties that may or may not be referenced in the configuration +files. They are provided as a convenience, and you can choose to modify +your configuration to ignore them.

+
+
+
+

9.1.4. Controlling the Default Multicast Address with -u

+
+

WildFly may use multicast communication for some services, particularly +those involving high availability clustering. The multicast addresses +and ports used are configured using the socket-binding elements in +standalone.xml and domain.xml. (See +Socket +Bindings for further information on these elements.) The standard HA +configurations that ship with WildFly include two socket binding +configurations that use a default multicast address:

+
+
+
+
<socket-binding name="jgroups-mping" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
+<socket-binding name="jgroups-udp" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
+
+
+
+

Those configurations use the values of system property +jboss.default.multicast.address if it is set. If it is not set, +230.0.0.4 is used for each value. (The configuration may include other +socket bindings for multicast-based services that are not meant to use +the default multicast address; e.g. a binding the mod-cluster services +use to communicate on a separate address/port with Apache httpd +servers.)

+
+
+

As noted in +Common Parameters, the AS supports the -u command line switch. The only +function of this switch is to set system property jboss.default.multicast.address. However, because of the way the +standard AS configuration files are set up, using the -u switches can indirectly control how the AS uses multicast.

+
+
+

If your socket binding configurations match those shown above, using +this as your launch command causes the service using those sockets +configurations to be communicate over multicast address 230.0.1.2.

+
+
+
+
$JBOSS_HOME/bin/standalone.sh -u=230.0.1.2
+
+
+
+ + + + + +
+ + +As with the -b switch, the -u switch only controls the multicast +address used because the standard config files that ship with WildFly +sets things up that way. If you change the <socket-binding> sections +in your configuration to no longer use the system properties controlled +by -u, then setting -u in your launch command will have no effect. +
+
+
+
+
+

9.2. Suspend, Resume and Graceful shutdown

+
+

9.2.1. Core Concepts

+
+

WildFly introduces the ability to suspend and resume servers. This can +be combined with shutdown to enable the server to gracefully finish +processing all active requests and then shut down. When a server is +suspended it will immediately stop accepting new requests, but wait for +existing requests to complete. A suspended server can be resumed at any +point, and will begin processing requests immediately. Suspending and +resuming has no effect on deployment state (e.g. if a server is +suspended singleton Jakarta Enterprise Beans’s will not be destroyed). As of WildFly 11 it is +also possible to start a server in suspended mode which means it will +not accept requests until it has been resumed. Servers will also be +suspended during the boot process, so no requests will be accepted until +the startup process is 100% complete.

+
+
+

Suspend/Resume has no effect on management operations; management +operations can still be performed while a server is suspended. If you +wish to perform a management operation that will affect the operation of +the server you can suspend the server, perform the operation, and then +resume the server. This allows all requests to finish, and makes sure +that no requests are running while the management changes are taking +place.

+
+
+ + + + + +
+ + +
+

If you perform a management operation while the server is suspended, +and the response to that operation includes the +operation-requires-reload or operation-requires-restart response +headers, then the operation will not take full effect until that +reload or restart is done. Simply resuming the server will not be +sufficient to cause the change to take effect.

+
+
+
+
+

When a server is suspending it goes through four different states:

+
+
+
    +
  • +

    RUNNING - The normal state, the server is accepting requests and +running normally

    +
  • +
  • +

    PRE_SUSPEND - In PRE_SUSPEND the server will notify external parties +that it is about to suspend, for example mod_cluster will notify the +load balancer that the deployment is suspending. Requests are still +accepted in this phase.

    +
  • +
  • +

    SUSPENDING - All new requests are rejected, and the server is +waiting for all active requests to finish. If there are no active +requests at suspend time this phase will be skipped.

    +
  • +
  • +

    SUSPENDED - All requests have completed, and the server is +suspended.

    +
  • +
+
+
+
+

9.2.2. Starting Suspended

+
+

In order to start into suspended mode when using a standalone server you +need to add --start-mode=suspend to the command line. It is also +possible to specify the start-mode in the reload operation to cause +the server to reload into suspended mode (other possible values for +start-mode are normal and admin-only).

+
+
+

In domain mode servers can be started in suspended mode by passing the +suspend=true parameter to any command that causes a server to start, +restart or reload (e.g. :start-servers(suspend=true)).

+
+
+
+

9.2.3. The Request Controller Subsystem

+
+

WildFly introduces a new subsystem called the Request Controller +Subsystem. This optional subsystem tracks all requests at their entry +point, which is how the graceful shutdown mechanism knows when all requests +are done. (It also allows you to provide a global limit on the total +number of running requests).

+
+
+

If this subsystem is not present suspend/resume will be limited. In +general things that happen in the PRE_SUSPEND phase will work as normal +(stopping message delivery, notifying the load balancer); however the +server will not wait for all requests to complete and instead will move +straight to SUSPENDED mode.

+
+
+

There is a small performance penalty associated with the request +controller subsystem (about on par with enabling statistics), so if you +do not require the suspend/resume functionality this subsystem can be +removed to get a small performance boost.

+
+
+
+

9.2.4. Subsystem Integrations

+
+

Suspend/Resume is a service provided by the WildFly platform that any +subsystem may choose to integrate with. Some subsystems integrate +directly with the suspend controller, while others integrate through the +request controller subsystem.

+
+
+

The following subsystems support graceful shutdown. Note that only +subsystems that provide an external entry point to the server need +graceful shutdown support. For example the Jakarta RESTful Web Services subsystem does not +require suspend/resume support as all access to Jakarta RESTful Web Services is through the +web connector.

+
+
+
    +
  • +

    Undertow - Undertow will wait for all requests to finish.

    +
  • +
  • +

    mod_cluster - The mod_cluster subsystem will notify the load +balancer that the server is suspending in the PRE_SUSPEND phase.

    +
  • +
  • +

    Jakarta Enterprise Beans - Jakarta Enterprise Beans will wait +for all remote Jakarta Enterprise Beans requests and MDB message +deliveries to finish. Delivery to MDB’s is stopped in the PRE_SUSPEND +phase. Jakarta Enterprise Beans timers are suspended, and missed timers will be activated +when the server is resumed.

    +
  • +
  • +

    Batch - Batch jobs will be stopped at a checkpoint while the server +is suspending. They will be restarted from that checkpoint when the +server returns to running mode.

    +
  • +
  • +

    EE Concurrency - The server will wait for all active jobs to finish. +All jobs that have already been queued will be skipped.

    +
  • +
  • +

    Transactions - The transaction subsystem waits for all running +transactions to finish while the server is suspending. During that time +the server refuses to start any new transaction. But any in-flight +transaction will be serviced - e.g. the server will accept any +incoming remote call which carries the context of a transaction already +started at the suspending server.

    +
  • +
+
+
+
Transactions and Jakarta Enterprise Beans
+
+

When you work with Jakarta Enterprise Beans you have to enable the graceful shutdown +functionality by setting the attribute enable-graceful-txn-shutdown to +true. For example, in the ejb3 subsystem section of standalone.xml:

+
+
+
+
<enable-graceful-txn-shutdown value="false"/>
+
+
+
+

By default graceful shutdown is disabled for the ejb subsystem. +The reason for this is that the behavior might be unwelcome in cluster +environments, as the server notifies remote clients that the node is no +longer available for remote calls only after the transactions are +finished. During that brief window of time, the client of a cluster may +send a new request to a node that is shutting down and it will refuse the +request because it is not related to an existing transaction. +If this attribute enable-graceful-txn-shutdown is set to false, we +disable the graceful behavior and Jakarta Enterprise Beans clients will not attempt to invoke +the node when it suspends, regardless of active transactions.

+
+
+
+
+

9.2.5. Standalone Mode

+
+

Suspend/Resume can be controlled via the following CLI operations +and commands in standalone mode:

+
+
+

:suspend(suspend-timeout=x)

+
+
+

Suspends the server. If the timeout is specified it will wait in the +SUSPENDING phase up to the specified number of seconds for all requests +to finish. If there is no timeout specified or the value is less than +zero it will wait indefinitely.

+
+
+

:resume

+
+
+

Resumes a previously suspended server. The server should be able to +begin serving requests immediately.

+
+
+

:read-attribute(name=suspend-state)

+
+
+

Returns the current suspend state of the server.

+
+
+

shutdown --suspend-timeout=x

+
+
+

If a timeout parameter is passed to the shutdown command then a graceful +shutdown will be performed. The server will be suspended, and will wait +in SUSPENDING state up to the specified number of seconds for all requests +to finish before shutting down. A timeout value of less than zero means +it will wait indefinitely.

+
+
+
+

9.2.6. Domain Mode

+
+

Domain mode has similar operations as standalone mode, however they can be +applied at global, server group, server and host levels:

+
+
+

Whole Domain

+
+
+

:suspend-servers(suspend-timeout=x)

+
+
+

:resume-servers

+
+
+

:stop-servers(suspend-timeout=x)

+
+
+

Server Group

+
+
+

/server-group=main-server-group:suspend-servers(suspend-timeout=x)

+
+
+

/server-group=main-server-group:resume-servers

+
+
+

/server-group=main-server-group:stop-servers(suspend-timeout=x)

+
+
+

Server

+
+
+

/host=primary/server-config=server-one:suspend(suspend-timeout=x)

+
+
+

/host=primary/server-config=server-one:resume

+
+
+

/host=primary/server-config=server-one:stop(suspend-timeout=x)

+
+
+

Host level

+
+
+

/host=primary:suspend-servers(suspend-timeout=x)

+
+
+

/host=primary:resume-servers

+
+
+

/host=primary:shutdown(suspend-timeout=x)

+
+
+

Note that even though the host controller itself is being shut down, the suspend-timeout attribute for the shutdown operation at host level is applied to the servers only and not to the host controller itself.

+
+
+
+

9.2.7. Graceful Shutdown via an OS Signal

+
+

If you use an OS signal like TERM to shut down your WildFly standalone server +process, e.g. via kill -15 <pid>, the WildFly server will shut down gracefully. +By default, the behavior will be analogous to a CLI shutdown --suspend-timeout=0 command; +that is the process will not wait in SUSPENDING state for in-flight requests to +complete before proceeding to SUSPENDED state and then shutting down. A different +timeout can be configured by setting the org.wildfly.sigterm.suspend.timeout +system property. The value of the property should be an integer indicating the maximum +number of seconds to wait for in-flight requests to complete. A value of -1 means +the server should wait indefinitely.

+
+
+

Graceful shutdown via an OS signal will not work if the server JVM is configured +to disable signal handling (i.e. with the -Xrs argument to java). It also won’t +work if the method used to terminate the process doesn’t result in a signal the +JVM can respond to (e.g. kill -9).

+
+
+

In a managed domain, Process Controller and Host Controller processes will not attempt +any sort of graceful shutdown in response to a signal. A domain mode server may, but +the proper way to control the lifecycle of a domain mode server process is via the +management API and its managing Host Controller, not via direct signals to the server +process.

+
+
+
+

9.2.8. Non-graceful Startup

+
+

By default, WildFly starts up gracefully, meaning that incoming requests are queued or cleanly rejected +until the server is ready to process them. In some instances, though, it may be desirable to allow the +server to begin to process requests at the earliest possible moment. One such example might be +when two deployed applications need to interact with one another during the deployment or +application startup. In one such scenario, Application A needs to make a REST request to +Application B to get information vital to its own startup. Under a graceful startup, the request +to Application B will block until the server is fully started. However, the server can’t fully +start, as Application A is waiting for data from Application B before its deploy/startup can +complete. In this situation, a deadlock occurs, and the server startup times out.

+
+
+

A non-graceful startup is intended to address this situation in that it will allow WildFly to +begin attempting to answer requests as soon as possible. In the scenario above, assuming +Application B has successfully deployed/started, Application A can also start immediately, as its +request will be fulfilled. Note, however, that a race condition can occur: if Application B is +not yet deployed (e.g., the deploy order is incorrect, or B has not finished starting), then +Application A may still fail to start since Application B is not available. WildFly users making +use of non-graceful startups must be aware of this and take steps to remedy those scenarios. With +a non-graceful startup, however, WildFly will no longer be the cause of a deployment failure in +such a configuration.

+
+
+

Some discussion here of how this relates to reloading and restarting, as well as to suspended starts, is +important. When reloading, the ApplicationServerService is stopped, and a new one started. It is equivalent +to if it was being started the first time: all the same stuff happens, but it happens faster because a lot of +classloading and static initialization doesn’t have to happen again. This includes honoring the value of +graceful-startup, so if the server was initially started non-gracefully, it will be reloaded in the same manner.

+
+
+

Restarting the server is similar. A restart means a new JVM, so all the initialization happens again, exactly +as it did on the first start. When restarting in domain mode, the Host Controller simply rereads the config +file and does the same thing it did the first time. In standalone, the restart is driven by standalone.[sh|ps1|bat]. +The running JVM exits with a specific exit code, which the script recognizes and starts a new server, using the +same parameters as the first start, so if you start a server non-gracefully, you will restart a server +non-gracefully.

+
+
+

Finally, there’s start-mode=suspend. In the event that an administrator specifies a suspended start as well as a +non-graceful start, the suspended start will "win". That is to say, the server will start in a suspended mode, +the graceful-start=false will be disregarded, and the server will log a message indicating that this is happening.

+
+
+
+
+

9.3. Starting and Stopping Servers in a Managed Domain

+
+

Starting a standalone server is done through the bin/standalone.sh +script. However in a managed domain server instances are managed by the +domain controller and need to be started through the management layer:

+
+
+

First of all, get to know which servers are configured on a particular +host:

+
+
+
+
[domain@localhost:9990 /] :read-children-names(child-type=host)
+{
+   "outcome" => "success",
+   "result" => ["local"]
+}
+ 
+ 
+[domain@localhost:9990 /] /host=local:read-children-names(child-type=server-config)
+{
+   "outcome" => "success",
+   "result" => [
+       "my-server",
+       "server-one",
+       "server-three"
+   ]
+}
+
+
+
+

Now that we know, that there are two servers configured on host " +local", we can go ahead and check their status:

+
+
+
+
[domain@localhost:9990 /] /host=local/server-config=server-one:read-resource(include-runtime=true)
+{
+   "outcome" => "success",
+   "result" => {
+       "auto-start" => true,
+       "group" => "main-server-group",
+       "interface" => undefined,
+       "name" => "server-one",
+       "path" => undefined,
+       "socket-binding-group" => undefined,
+       "socket-binding-port-offset" => undefined,
+       "status" => "STARTED",
+       "system-property" => undefined,
+       "jvm" => {"default" => undefined}
+   }
+}
+
+
+
+

You can change the server state through the " start" and " stop" +operations

+
+
+
+
[domain@localhost:9990 /] /host=local/server-config=server-one:stop
+{
+   "outcome" => "success",
+   "result" => "STOPPING"
+}
+
+
+
+ + + + + +
+ + +Navigating through the domain topology is much more simple when you use +the web interface. +
+
+
+
+

9.4. JVM settings

+
+

Configuration of the JVM settings is different for a managed domain and +a standalone server. In a managed domain, the domain controller +components are responsible for starting and stopping server processes and +hence determine the JVM settings. For a standalone server, it’s the +responsibility of the process that started the server (e.g. passing them +as command line arguments).

+
+
+

9.4.1. Managed Domain

+
+

In a managed domain the JVM settings can be declared at different +scopes: For a specific server group, for a host or for a particular +server. If not declared, the settings are inherited from the parent +scope. This allows you to customize or extend the JVM settings within +every layer.

+
+
+

Let’s take a look at the JVM declaration for a server group:

+
+
+
+
<server-groups>
+       <server-group name="main-server-group" profile="default">
+           <jvm name="default">
+               <heap size="64m" max-size="512m"/>
+           </jvm>
+           <socket-binding-group ref="standard-sockets"/>
+       </server-group>
+       <server-group name="other-server-group" profile="default">
+           <jvm name="default">
+               <heap size="64m" max-size="512m"/>
+           </jvm>
+           <socket-binding-group ref="standard-sockets"/>
+       </server-group>
+</server-groups>
+
+
+
+

(See domain/configuration/domain.xml )

+
+
+

In this example the server group "main-server-group" declares a heap +size of 64m and a maximum heap size of 512m. Any server that belongs +to this group will inherit these settings. You can change these settings +for the group as a whole, or a specific server or host:

+
+
+
+
<servers>
+       <server name="server-one" group="main-server-group" auto-start="true">
+           <jvm name="default"/>
+       </server>
+       <server name="server-two" group="main-server-group" auto-start="true">
+           <jvm name="default">
+               <heap size="64m" max-size="256m"/>
+           </jvm>
+           <socket-binding-group ref="standard-sockets" port-offset="150"/>
+       </server>
+       <server name="server-three" group="other-server-group" auto-start="false">
+           <socket-binding-group ref="standard-sockets" port-offset="250"/>
+       </server>
+</servers>
+
+
+
+

~(See domain/configuration/host.xml)~

+
+
+

In this case, server-two, belongs to the main-server-group and +inherits the JVM settings named default, but declares a lower maximum +heap size.

+
+
+
+
[domain@localhost:9999 /] /host=local/server-config=server-two/jvm=default:read-resource
+{
+   "outcome" => "success",
+   "result" => {
+       "heap-size" => "64m",
+       "max-heap-size" => "256m",
+   }
+}
+
+
+
+
Using filesystem locations as JVM options on domain mode
+
+

The Controlling filesystem locations with system properties section describes the available system properties associated with relevant WildFly file system paths. In addition to all the domain mode properties, the following server specific properties are also available for resolution as JVM options:

+
+
+
    +
  • +

    jboss.server.base.dir

    +
  • +
  • +

    jboss.server.log.dir

    +
  • +
  • +

    jboss.server.data.dir

    +
  • +
  • +

    jboss.server.temp.dir

    +
  • +
+
+
+

This ability is useful when you need to configure JVM settings without specifying a specific server name. For example, if you want to redirect the GC logging to a file to the default log server directory, you can configure the following JVM option at host level:

+
+
+
+
[domain@localhost:9990 /] /host=primary/jvm=default:add-jvm-option(jvm-option="-Xlog:gc:file=${jboss.server.log.dir}/gc.log")
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {"primary" => {"server-two" => {"response" => {
+        "outcome" => "success",
+        "response-headers" => {
+            "operation-requires-restart" => true,
+            "process-state" => "restart-required"
+        }
+    }}}}}}
+}
+
+
+
+
+
+

9.4.2. Standalone Server

+
+

For a standalone sever you have to pass in the JVM settings either as +command line arguments when executing the +$JBOSS_HOME/bin/standalone.sh script, or by declaring them in +$JBOSS_HOME/bin/standalone.conf. (For Windows users, the script to +execute is %JBOSS_HOME%/bin/standalone.bat while the JVM settings can +be declared in %JBOSS_HOME%/bin/standalone.conf.bat.)

+
+
+
+
+

9.5. Audit logging

+
+

WildFly comes with audit logging built in for management operations +affecting the management model. By default it is turned off. The +information is output as JSON records.

+
+
+

The default configuration of audit logging in standalone.xml looks as +follows:

+
+
+
+
    <management>
+        <audit-log>
+            <formatters>
+                <json-formatter name="json-formatter"/>
+            </formatters>
+            <handlers>
+                <file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
+            </handlers>
+            <logger log-boot="true" log-read-only="true" enabled="false">
+                <handlers>
+                    <handler name="file"/>
+                </handlers>
+            </logger>
+        </audit-log>
+...
+
+
+
+

Looking at this via the CLI it looks like

+
+
+
+
[standalone@localhost:9990 /] /core-service=management/access=audit:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "file-handler" => {"file" => {
+            "formatter" => "json-formatter",
+            "max-failure-count" => 10,
+            "path" => "audit-log.log",
+            "relative-to" => "jboss.server.data.dir"
+        }},
+        "json-formatter" => {"json-formatter" => {
+            "compact" => false,
+            "date-format" => "yyyy-MM-dd HH:mm:ss",
+            "date-separator" => " - ",
+            "escape-control-characters" => false,
+            "escape-new-line" => false,
+            "include-date" => true
+        }},
+        "logger" => {"audit-log" => {
+            "enabled" => false,
+            "log-boot" => true,
+            "log-read-only" => false,
+            "handler" => {"file" => {}}
+        }},
+        "syslog-handler" => undefined
+    }
+}
+
+
+
+

To enable it via CLI you need just

+
+
+
+
[standalone@localhost:9990 /] /core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)
+{"outcome" => "success"}
+
+
+
+

Audit data are stored in standalone/data/audit-log.log.

+
+
+ + + + + +
+ + +The audit logging subsystem has a lot of internal dependencies, and it +logs operations changing, enabling and disabling its components. When +configuring or changing things at runtime it is a good idea to make +these changes as part of a CLI batch. For example if you are adding a +syslog handler you need to add the handler and its information as one +step. Similarly if you are using a file handler, and want to change its +path and relative-to attributes, that needs to happen as one step. +
+
+
+

9.5.1. JSON Formatter

+
+

The first thing that needs configuring is the formatter, we currently +support outputting log records as JSON. You can define several +formatters, for use with different handlers. A log record has the +following format, and it is the formatter’s job to format the data +presented:

+
+
+
+
2013-08-12 11:01:12 - {
+    "type" : "core",
+    "r/o" : false,
+    "booting" : false,
+    "version" : "8.0.0.Alpha4",
+    "user" : "$local",
+    "domainUUID" : null,
+    "access" : "NATIVE",
+    "remote-address" : "127.0.0.1/127.0.0.1",
+    "success" : true,
+    "ops" : [JMX|WFLY8:JMX subsystem configuration],
+        "operation" : "write-attribute",
+        "name" : "enabled",
+        "value" : true,
+        "operation-headers" : {"caller-type" : "user"}
+    }]
+}
+
+
+
+

It includes an optional timestamp and then the following information in +the json record

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field nameDescription

type

This can have the values core, meaning it is a management +operation, or jmx meaning it comes from the jmx subsystem (see the jmx +subsystem for configuration of the jmx subsystem’s audit logging)

r/o

true if the operation does not change the management model, false +otherwise

booting

true if the operation was executed during the bootup process, +false if it was executed once the server is up and running

version

The version number of the WildFly instance

user

The username of the authenticated user. In this case the +operation has been logged via the CLI on the same machine as the running +server, so the special $local user is used

domainUUID

An ID to link together all operations as they are +propagated from the Domain Controller to its servers, secondary Host +Controllers, and secondary Host Controller servers

access

This can have one of the following values:*NATIVE - The +operation came in through the native management interface, for example +the CLI*HTTP - The operation came in through the domain HTTP interface, +for example the admin console*JMX - The operation came in through the +JMX subsystem. See JMX for how to configure audit logging for JMX.

remote-address

The address of the client executing this operation

success

true if the operation succeeded, false if it was rolled back

ops

The operations being executed. This is a list of the operations +serialized to JSON. At boot this will be all the operations resulting +from parsing the xml. Once booted the list will typically just contain a +single entry

+
+

The json formatter resource has the following attributes:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

include-date

Boolan toggling whether or not to include the timestamp +in the formatted log records

date-separator

A string containing characters to separate the date and +the rest of the formatted log message. Will be ignored if +include-date=false

date-format

The date format to use for the timestamp as understood by +java.text.SimpleDateFormat. Will be ignored if include-date=false

compact

If true will format the JSON on one line. There may still be +values containing new lines, so if having the whole record on one line +is important, set escape-new-line or escape-control-characters to true

escape-control-characters

If true it will escape all control +characters (ascii entries with a decimal value < 32) with the ascii code +in octal, e.g. a new line becomes '#012'. If this is true, it will +override escape-new-line=false

escape-new-line

If true it will escape all new lines with the ascii +code in octal, e.g. "#012".

+
+
+

9.5.2. Handlers

+
+

A handler is responsible for taking the formatted data and logging it to +a location. There are currently two types of handlers, File and Syslog. +You can configure several of each type of handler and use them to log +information.

+
+
+
File handler
+
+

The file handlers log the audit log records to a file on the server. The +attributes for the file handler are

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionRead Only

formatter

The name of a JSON formatter to use to format the log +records

false

path

The path of the audit log file

false

relative-to

The name of another previously named path, or of one of +the standard paths provided by the system. If relative-to is provided, +the value of the path attribute is treated as relative to the path +specified by this attribute

false

failure-count

The number of logging failures since the handler was +initialized

true

max-failure-count

The maximum number of logging failures before +disabling this handler

false

disabled-due-to-failure

true if this handler was disabled due to +logging failures

true

+
+

In our standard configuration path=audit-log.log and +relative-to=jboss.server.data.dir, typically this will be +$JBOSS_HOME/standalone/data/audit-log.log

+
+
+
+
Syslog handler
+
+

The default configuration does not have syslog audit logging set up. +Syslog is a better choice for audit logging since you can log to a +remote syslog server, and secure the authentication to happen over TLS +with client certificate authentication. Syslog servers vary a lot in +their capabilities so not all settings in this section apply to all +syslog servers. We have tested with rsyslog.

+
+
+

The address for the syslog handler is +/core-service=management/access=audit/syslog-handler=* and just like +file handlers you can add as many syslog entries as you like. The syslog +handler resources reference the main RFC’s for syslog a fair bit, for +reference they can be found at:
+* http://www.ietf.org/rfc/rfc3164.txt
+* http://www.ietf.org/rfc/rfc5424.txt
+* http://www.ietf.org/rfc/rfc6587.txt

+
+
+

The syslog handler resource has the following attributes:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
formatterThe name of a JSON formatter to use to format the log +recordsfalse

failure-count

The number of logging failures since the handler was +initialized

true

max-failure-count

The maximum number of logging failures before +disabling this handler

false

disabled-due-to-failure

true if this handler was disabled due to +logging failures

true

syslog-format

Whether to set the syslog format to the one specified in +RFC-5424 or RFC-3164

false

max-length

The maximum length in bytes a log message, including the +header, is allowed to be. If undefined, it will default to 1024 bytes if +the syslog-format is RFC3164, or 2048 bytes if the syslog-format is +RFC5424.

false

truncate

Whether or not a message, including the header, should +truncate the message if the length in bytes is greater than the maximum +length. If set to false messages will be split and sent with the same +header values

false

+
+

When adding a syslog handler you also need to add the protocol it will +use to communicate with the syslog server. The valid choices for +protocol are UDP, TCP and TLS. The protocol must be added at the +same time as you add the syslog handler, or it will fail. Also, you can +only add one protocol for the handler.

+
+
+
UDP
+
+

Configures the handler to use UDP to communicate with the syslog server. +The address of the UDP resource is +/core-service=management/access=audit/syslog-handler=*/protocol=udp. +The attributes of the UDP resource are:

+
+ ++++ + + + + + + + + + + + + + + + + +
AttributeDescription

host

The host of the syslog server for the udp requests

port

The port of the syslog server listening for the udp requests

+
+
+
TCP
+
+

Configures the handler to use TCP to communicate with the syslog server. +The address of the TCP resource is +/core-service=management/access=audit/syslog-handler=*/protocol=tcp. +The attributes of the TCP resource are:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

host

The host of the syslog server for the tcp requests

port

The port of the syslog server listening for the tcp requests

message-transfer

The message transfer setting as described in section +3.4 of RFC-6587. This can either be OCTET_COUNTING as described in +section 3.4.1 of RFC-6587, or NON_TRANSPARENT_FRAMING as described in +section 3.4.1 of RFC-6587

+
+
+
TLS
+
+

Configures the handler to use TLC to communicate securely with the +syslog server. The address of the TLS resource is +/core-service=management/access=audit/syslog-handler=*/protocol=tls. +The attributes of the TLS resource are the same as for TCP:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

host

The host of the syslog server for the tls requests

port

The port of the syslog server listening for the tls requests

message-transfer

The message transfer setting as described in section +3.4 of RFC-6587. This can either be OCTET_COUNTING as described in +section 3.4.1 of RFC-6587, or NON_TRANSPARENT_FRAMING as described in +section 3.4.1 of RFC-6587

+
+

If the syslog server’s TLS certificate is not signed by a certificate +signing authority, you will need to set up a truststore to trust the +certificate. The resource for the trust store is a child of the TLS +resource, and the full address is +/core-service=management/access=audit/syslog-handler=*/protocol=tls/authentication=truststore. +The attributes of the truststore resource are:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

keystore-password

The password for the truststore

keystore-path

The path of the truststore

keystore-relative-to

The name of another previously named path, or of +one of the standard paths provided by the system. If +keystore-relative-to is provided, the value of the keystore-path +attribute is treated as relative to the path specified by this attribute

+
+TLS with Client certificate authentication. +
+

If you have set up the syslog server to require client certificate +authentication, when creating your handler you will also need to set up +a client certificate store containing the certificate to be presented to +the syslog server. The address of the client certificate store resource +is +/core-service=management/access=audit/syslog-handler=*/protocol=tls/authentication=client-certificate-store +and its attributes are:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

keystore-password

The password for the keystore

key-password

The password for the keystore key

keystore-path

The path of the keystore

keystore-relative-to

The name of another previously named path, or of +one of the standard paths provided by the system. If +keystore-relative-to is provided, the value of the keystore-path +attribute is treated as relative to the path specified by this attribute

+
+
+
+
+
+

9.5.3. Logger configuration

+
+

The final part that needs configuring is the logger for the management +operations. This references one or more handlers and is configured at +/core-service=management/access=audit/logger=audit-log. The attributes +for this resource are:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

enabled

true to enable logging of the management operations

log-boot

true to log the management operations when booting the +server, false otherwise

log-read-only

If true all operations will be audit logged, if false +only operations that change the model will be logged

+
+

Then which handlers are used to log the management operations are +configured as handler=* children of the logger.

+
+
+
+

9.5.4. Domain Mode (host specific configuration)

+
+

In domain mode audit logging is configured for each host in its +host.xml file. This means that when connecting to the DC, the +configuration of the audit logging is under the host’s entry, e.g. here +is the default configuration:

+
+
+
+
[domain@localhost:9990 /] /host=primary/core-service=management/access=audit:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "file-handler" => {
+            "host-file" => {
+                "formatter" => "json-formatter",
+                "max-failure-count" => 10,
+                "path" => "audit-log.log",
+                "relative-to" => "jboss.domain.data.dir"
+            },
+            "server-file" => {
+                "formatter" => "json-formatter",
+                "max-failure-count" => 10,
+                "path" => "audit-log.log",
+                "relative-to" => "jboss.server.data.dir"
+            }
+        },
+        "json-formatter" => {"json-formatter" => {
+            "compact" => false,
+            "date-format" => "yyyy-MM-dd HH:mm:ss",
+            "date-separator" => " - ",
+            "escape-control-characters" => false,
+            "escape-new-line" => false,
+            "include-date" => true
+        }},
+        "logger" => {"audit-log" => {
+            "enabled" => false,
+            "log-boot" => true,
+            "log-read-only" => false,
+            "handler" => {"host-file" => {}}
+        }},
+        "server-logger" => {"audit-log" => {
+            "enabled" => false,
+            "log-boot" => true,
+            "log-read-only" => false,
+            "handler" => {"server-file" => {}}
+        }},
+        "syslog-handler" => undefined
+    }
+}
+
+
+
+

We now have two file handlers, one called host-file used to configure +the file to log management operations on the host, and one called +server-file used to log management operations executed on the servers. +Then logger=audit-log is used to configure the logger for the host +controller, referencing the host-file handler. +server-logger=audit-log is used to configure the logger for the +managed servers, referencing the server-file handler. The attributes +for server-logger=audit-log are the same as for +server-logger=audit-log in the previous section. Having the host +controller and server loggers configured independently means we can +control audit logging for managed servers and the host controller +independently.

+
+
+
+
+

9.6. Canceling Management Operations

+
+

WildFly includes the ability to use the CLI to cancel management +requests that are not proceeding normally.

+
+
+

9.6.1. The cancel-non-progressing-operation operation

+
+

The cancel-non-progressing-operation operation instructs the target +process to find any operation that isn’t proceeding normally and cancel +it.

+
+
+

On a standalone server:

+
+
+
+
[standalone@localhost:9990 /] /core-service=management/service=management-operations:cancel-non-progressing-operation
+{
+    "outcome" => "success",
+    "result" => "-1155777943"
+}
+
+
+
+

The result value is an internal identification number for the operation +that was cancelled.

+
+
+

On a managed domain host controller, the equivalent resource is in the +host=<hostname> portion of the management resource tree:

+
+
+
+
[domain@localhost:9990 /] /host=host-a/core-service=management/service=management-operations:cancel-non-progressing-operation
+{
+    "outcome" => "success",
+    "result" => "2156877946"
+}
+
+
+
+

An operation can be cancelled on an individual managed domain server as +well:

+
+
+
+
[domain@localhost:9990 /] /host=host-a/server=server-one/core-service=management/service=management-operations:cancel-non-progressing-operation
+{
+    "outcome" => "success",
+    "result" => "6497786512"
+}
+
+
+
+

An operation is considered to be not proceeding normally if it has been +executing with the exclusive operation lock held for longer than 15 +seconds. Read-only operations do not acquire the exclusive operation +lock, so this operation will not cancel read-only operations. Operations +blocking waiting for another operation to release the exclusive lock +will also not be cancelled.

+
+
+

If there isn’t any operation that is failing to proceed normally, there +will be a failure response:

+
+
+
+
[standalone@localhost:9990 /] /core-service=management/service=management-operations:cancel-non-progressing-operation
+{
+    "outcome" => "failed",
+    "failure-description" => "WFLYDM0089: No operation was found that has been holding the operation execution write lock for long than [15] seconds",
+    "rolled-back" => true
+}
+
+
+
+
+

9.6.2. The find-non-progressing-operation operation

+
+

To simply learn the id of an operation that isn’t proceeding normally, +but not cancel it, use the find-non-progressing-operation operation:

+
+
+
+
[standalone@localhost:9990 /] /core-service=management/service=management-operations:find-non-progressing-operation
+{
+    "outcome" => "success",
+    "result" => "-1155777943"
+}
+
+
+
+

If there is no non-progressing operation, the outcome will still be +success but the result will be undefined.

+
+
+

Once the id of the operation is known, the management resource for the +operation can be examined to learn more about its status.

+
+
+
+

9.6.3. Examining the status of an active operation

+
+

There is a management resource for any currently executing operation +that can be queried:

+
+
+
+
[standalone@localhost:9990 /] /core-service=management/service=management-operations/active-operation=-1155777943:read-resource(include-runtime=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "access-mechanism" => "undefined",
+        "address" => [
+            ("deployment" => "example")
+        ],
+        "caller-thread" => "management-handler-thread - 24",
+        "cancelled" => false,
+        "exclusive-running-time" => 101918273645L,
+        "execution-status" => "awaiting-stability",
+        "operation" => "deploy",
+        "running-time" => 101918279999L
+    }
+}
+
+
+
+

The response includes the following attributes:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldMeaning

access-mechanism

The mechanism used to submit a request to the server. +NATIVE, JMX, HTTP

address

The address of the resource targeted by the operation. The +value in the final element of the address will be '<hidden>' if the +caller is not authorized to address the operation’s target resource.

caller-thread

The name of the thread that is executing the operation.

cancelled

Whether the operation has been cancelled.

exclusive-status

Amount of time in nanoseconds the operation has +been executing with the exclusive operation execution lock held, or -1 +if the operation does not hold the exclusive execution lock.

execution-status

The current activity of the operation. See below for +details.

operation

The name of the operation, or '<hidden>' if the caller is +not authorized to address the operation’s target resource.

running-time

Amount of time the operation has been executing, in +nanoseconds.

+
+

The following are the values for the exclusive-running-time attribute:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueMeaning

executing

The caller thread is actively executing

awaiting-other-operation

The caller thread is blocking waiting for +another operation to release the exclusive execution lock

awaiting-stability

The caller thread has made changes to the service +container and is waiting for the service container to stabilize

completing

The operation is committed and is completing execution

rolling-back

The operation is rolling back

+
+

All currently executing operations can be viewed in one request using +the read-children-resources operation:

+
+
+
+
[standalone@localhost:9990 /] /core-service=management/service=management-operations:read-children-resources(child-type=active-operation)
+{
+    "outcome" => "success",
+    "result" => {"-1155777943" => {
+        "access-mechanism" => "undefined",
+        "address" => [
+            ("deployment" => "example")
+        ],
+        "caller-thread" => "management-handler-thread - 24",
+        "cancelled" => false,
+        "exclusive-running-time" => 101918273645L,
+        "execution-status" => "awaiting-stability",
+        "operation" => "deploy",
+        "running-time" => 101918279999L
+    },
+    {"-1246693202" => {
+        "access-mechanism" => "undefined",
+        "address" => [
+            ("core-service" => "management"),
+            ("service" => "management-operations")
+        ],
+        "caller-thread" => "management-handler-thread - 30",
+        "cancelled" => false,
+        "exclusive-running-time" => -1L,
+        "execution-status" => "executing",
+        "operation" => "read-children-resources",
+        "running-time" => 3356000L
+    }}
+}
+
+
+
+
+

9.6.4. Canceling a specific operation

+
+

The cancel-non-progressing-operation operation is a convenience +operation for identifying and canceling an operation. However, an +administrator can examine the active-operation resources to identify any +operation, and then directly cancel it by invoking the cancel +operation on the resource for the desired operation.

+
+
+
+
[standalone@localhost:9990 /] /core-service=management/service=management-operations/active-operation=-1155777943:cancel
+{
+    "outcome" => "success",
+    "result" => undefined
+}
+
+
+
+
+

9.6.5. Controlling operation blocking time

+
+

As an operation executes, the execution thread may block at various +points, particularly while waiting for the service container to +stabilize following any changes. Since an operation may be holding the +exclusive execution lock while blocking, in WildFly execution behavior +was changed to ensure that blocking will eventually time out, resulting +in roll back of the operation.

+
+
+

The default blocking timeout is 300 seconds. This is intentionally long, +as the idea is to only trigger a timeout when something has definitely +gone wrong with the operation, without any false positives.

+
+
+

An administrator can control the blocking timeout for an individual +operation by using the blocking-timeout operation header. For example, +if a particular deployment is known to take an extremely long time to +deploy, the default 300 second timeout could be increased:

+
+
+
+
[standalone@localhost:9990 /] deploy /tmp/mega.war --headers={blocking-timeout=450}
+
+
+
+

Note the blocking timeout is not a guaranteed maximum execution time +for an operation. If it only a timeout that will be enforced at various +points during operation execution.

+
+
+
+
+

9.7. Configuration file history

+
+

The management operations may modify the model. When this occurs the xml +backing the model is written out again reflecting the latest changes. In +addition a full history of the file is maintained. The history of the +file goes in a separate directory under the configuration directory.

+
+
+

As mentioned in Command line parameters the default +configuration file can be selected using a command-line parameter. For a +standalone server instance the history of the active standalone.xml is +kept in jboss.server.config.dir/standalone_xml_history (See +Command line parameters#standalone_system_properties +for more details). For a domain the active domain.xml and host.xml +histories are kept in jboss.domain.config.dir/domain_xml_history and +jboss.domain.config.dir/host_xml_history.

+
+
+

The rest of this section will only discuss the history for +standalone.xml. The concepts are exactly the same for domain.xml and +host.xml.

+
+
+

Within standalone_xml_history itself following a successful first time +boot we end up with three new files:

+
+
+
    +
  • +

    standalone.initial.xml - This contains the original configuration +that was used the first time we successfully booted. This file will +never be overwritten. You may of course delete the history directory and +any files in it at any stage.

    +
  • +
  • +

    standalone.boot.xml - This contains the original configuration that +was used for the last successful boot of the server. This gets +overwritten every time we boot the server successfully.

    +
  • +
  • +

    standalone.last.xml - At this stage the contents will be identical +to standalone.boot.xml. This file gets overwritten each time the +server successfully writes the configuration, if there was an unexpected +failure writing the configuration this file is the last known successful +write.

    +
  • +
+
+
+

standalone_xml_history contains a directory called current which +should be empty. Now if we execute a management operation that modifies +the model, for example adding a new system property using the CLI:

+
+
+
+
[standalone@localhost:9990 /] /system-property=test:add(value="test123")
+{"outcome" => "success"}
+
+
+
+

What happens is:

+
+
+
    +
  • +

    The original configuration file is backed up to +standalone_xml_history/current/standalone.v1.xml. The next change to +the model would result in a file called standalone.v2.xml etc. The 100 +most recent of these files are kept.

    +
  • +
  • +

    The change is applied to the original configuration file

    +
  • +
  • +

    The changed original configuration file is copied to +standalone.last.xml

    +
  • +
+
+
+

When restarting the server, any existing +standalone_xml_history/current directory is moved to a new timestamped +folder within the standalone_xml_history, and a new current folder +is created. These timestamped folders are kept for 30 days.

+
+
+

9.7.1. Snapshots

+
+

In addition to the backups taken by the server as described above you +can manually take snapshots which will be stored in the snapshot +folder under the _xml_history folder, the automatic backups described +above are subject to automatic house keeping so will eventually be +automatically removed, the snapshots on the other hand can be entirely +managed by the administrator.

+
+
+

You may also take your own snapshots using the CLI:

+
+
+
+
[standalone@localhost:9990 /] :take-snapshot
+{
+    "outcome" => "success",
+    "result" => {"name" => "/Users/kabir/wildfly/standalone/configuration/standalone_xml_history/snapshot/20110630-172258657standalone.xml"}
+}
+
+
+
+

You can also use the CLI to list all the snapshots

+
+
+
+
[standalone@localhost:9990 /] :list-snapshots
+{
+    "outcome" => "success",
+    "result" => {
+        "directory" => "/Users/kabir/wildfly/standalone/configuration/standalone_xml_history/snapshot",
+        "names" => [
+            "20110630-165714239standalone.xml",
+            "20110630-165821795standalone.xml",
+            "20110630-170113581standalone.xml",
+            "20110630-171411463standalone.xml",
+            "20110630-171908397standalone.xml",
+            "20110630-172258657standalone.xml"
+        ]
+    }
+}
+
+
+
+

To delete a particular snapshot:

+
+
+
+
[standalone@localhost:9990 /] :delete-snapshot(name="20110630-165714239standalone.xml")
+{"outcome" => "success"}
+
+
+
+

and to delete all snapshots:

+
+
+
+
[standalone@localhost:9990 /] :delete-snapshot(name="all")
+{"outcome" => "success"}
+
+
+
+

In domain mode executing the snapshot operations against the root node +will work against the domain model. To do this for a host model you need +to navigate to the host in question:

+
+
+
+
[domain@localhost:9990 /] /host=primary:list-snapshots
+{
+    "outcome" => "success",
+    "result" => {
+        "domain-results" => {"step-1" => {
+            "directory" => "/Users/kabir/wildfly/domain/configuration/host_xml_history/snapshot",
+            "names" => [
+                "20110630-141129571host.xml",
+                "20110630-172522225host.xml"
+            ]
+        }},
+        "server-operations" => undefined
+    }
+}
+
+
+
+
+

9.7.2. Subsequent Starts

+
+

For subsequent server starts it may be desirable to take the state of +the server back to one of the previously known states, for a number of +items an abbreviated reverence to the file can be used:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AbbreviationParameterDescription

initial

--server-config=initial

This will start the server using the +initial configuration first used to start the server.

boot

--server-config=boot

This will use the configuration from the +last successful boot of the server.

last

--server-config=last

This will start the server using the +configuration backed up from the last successful save.

v?

--server-config=v?

This will server the _xml_history/current +folder for the configuration where ? is the number of the backup to use.

-?

--server-config=-?

The server will be started after searching the +snapshot folder for the configuration which matches this prefix.

+
+

In addition to this the --server-config parameter can always be used +to specify a configuration relative to the jboss.server.config.dir and +finally if no matching configuration is found an attempt to locate the +configuration as an absolute path will be made.

+
+
+
+
+

9.8. Git Configuration file history

+
+

To enhance the initial configuration file history we have now a native Git support to manage the configuration history. This feature goes a little farther than the initial configuration file history in that it also manages content repository content and all the configuration files (such as properties). This feature only work for standalone servers using the default directory layout.

+
+
+

As mentioned in Command line parameters we support the usage of a remote Git repository to pull the configuration from or create or use a local Git repository. +In fact if a .git directory exists under jboss.server.base.dir then using Git for managing configuration files will be automatically activated. +Each modification of the content or the configuration will result in a new commit when the operation is successful and there are changes to commit. If there is an authenticated user then it will be stored as the author of the commit. +Please note that this is a real Git repository so using a native Git client you can manipulate it.

+
+
+

Now if we execute a management operation that modifies +the model, for example adding a new system property using the CLI:

+
+
+
+
[standalone@localhost:9990 /] /system-property=test:add(value="test123")
+{"outcome" => "success"}
+
+
+
+

What happens is:

+
+
+
    +
  • +

    The change is applied to the configuration file.

    +
  • +
  • +

    The configuration file is added to a new commit.

    +
  • +
+
+
+

9.8.1. Local Git Repository

+
+

Starting the server with the option --git-repo=local will initiate a Git repository if none exists or use the current Git repository. When initiating the local Git repository a .gitignore file will be created and added to the initial commit.

+
+
+

If a --git-branch parameter is added then the repository will be checked out on the supplied branch. Please note that the branch will not be automatically created and must exist in the repository already. By default, if no parameter is specified, the branch master will be used.

+
+
+
+

9.8.2. Remote Git Repository

+
+

If a remote Git repository is provided then the server will try to pull from it at boot. If this is the first time we are pulling then local files will be deleted to avoid the pull to fail because of the need to overwrite those existing files. +The parameter for --git-repo can be a URL or a remote alias provided you have manually added it to the local git configuration.

+
+
+

If a --git-branch parameter is added then the branch will be pulled, otherwise it will default to master.

+
+
+

For example this is an elytron configuration file that you could use to connect to GitHub via the --git-auth parameter:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <authentication-rules>
+            <rule use-configuration="test-login">
+            </rule>
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="test-login">
+                <sasl-mechanism-selector selector="BASIC" />
+                <set-user-name name="ehsavoie" />
+                <credentials>
+                    <clear-password password="my_api_key" />
+                </credentials>
+                <set-mechanism-realm name="testRealm" />
+            </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+

Sample command line to start the server using the standalone-full.xml file pulled from Github and being authenticated via the Elytron configuration file github-wildfly-config.xml:

+
+
+
+
./standalone.sh --git-repo=https://github.com/wildfly/wildfly-config.git --git-auth=file:///home/ehsavoie/tmp/github-wildfly-config.xml -c standalone-full.xml
+
+
+
+
+

9.8.3. Snapshots

+
+

In addition to the commits taken by the server as described above you +can manually take snapshots which will be stored as tags in the Git repository. +You can choose the tag name and the commit message attached to this tag.

+
+
+

You may also take your own snapshots using the CLI:

+
+
+
+
[standalone@localhost:9990 /] :take-snapshot(name="snapshot", comment="1st snapshot")
+{
+    "outcome" => "success",
+    "result" => "1st snapshot"
+}
+
+
+
+

You can also use the CLI to list all the snapshots

+
+
+
+
[standalone@localhost:9990 /] :list-snapshots
+{
+    "outcome" => "success",
+    "result" => {
+        "directory" => "",
+        "names" => [
+            "snapshot : 1st snapshot",
+            "refs/tags/snapshot",
+            "snapshot2 : 2nd snapshot",
+            "refs/tags/snapshot2"
+        ]
+    }
+}
+
+
+
+

To delete a particular snapshot:

+
+
+
+
[standalone@localhost:9990 /] :delete-snapshot(name="snapshot2")
+{"outcome" => "success"}
+
+
+
+
+

9.8.4. Remote push

+
+

You may need to push your repository changes to a remote repository so you can share them.

+
+
+
+
[standalone@localhost:9990 /] :publish-configuration(location="origin")
+{"outcome" => "success"}
+
+
+
+
+

9.8.5. SSH Authentication

+
+

Users may also connect to an SSH git server. In order to connect to any SSH git server to manage your configuration file history, you must use an Elytron configuration +file to specify your SSH credentials. The following example shows how to specify an SSH url and a wildfly-config.xml file +containing SSH credentials:

+
+
+
+
./standalone.sh --git-repo=git@github.com:wildfly/wildfly-config.git --git-auth=file:///home/user/github-wildfly-config.xml
+
+
+
+

There are a number of ways to specify your SSH credentials in the wildfly-config.xml file:

+
+
+
SSH Key Location Credential
+
+

It is possible to reference a file containing your SSH keys as follows:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <authentication-client xmlns="urn:elytron:client:1.6">
+        <authentication-rules>
+            <rule use-configuration="test-login">
+            </rule>
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="test-login">
+                <credentials>
+                    <ssh-credential ssh-directory="/home/user/git-persistence/" private-key-file="id_ec_test" known-hosts-file="known_hosts">
+                        <clear-password password="secret"/>
+                    </ssh-private-key>
+                </credentials>
+            </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+

This configuration indicates that the private key to be used for SSH authentication is in the file id_ec_test in the +directory /home/user/git-persistence and the passphrase "secret" is needed to decrypt the key.

+
+
+

The ssh-credential accepts the following attributes:

+
+
+
    +
  • +

    ssh-directory - the path to the directory containing the private key file and the known hosts file. The default value +is [user.home]/.ssh.

    +
  • +
  • +

    private-key-file - the name of the file containing the private key. The default private key file names used are: id_rsa, +id_dsa, and id_ecdsa.

    +
  • +
  • +

    known-hosts-file - the name of the file containing the known SSH hosts you trust. The default value is known_hosts

    +
  • +
+
+
+

One of the following child elements may also be used to specify the passphrase to be used to decrypt the private key (if applicable):

+
+
+
+
<ssh-credential ...>
+    <credential-store-reference store="..." alias="..." clear-text="..." />
+    <clear-password password="..." />
+    <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+</ssh-credential>
+
+
+
+
+
Key Pair Credential
+
+

It is also possible to specify your SSH credentials as a KeyPairCredential as follows:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <authentication-client xmlns="urn:elytron:client:1.6">
+        <authentication-rules>
+            <rule use-configuration="test-login">
+            </rule>
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="test-login">
+                <credentials>
+                    <key-pair>
+                        <openssh-private-key pem="-----BEGIN OPENSSH PRIVATE KEY-----
+                        b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCdRswttV
+                        UNQ6nKb6ojozTGAAAAEAAAAAEAAABoAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlz
+                        dHAyNTYAAABBBAKxnsRT7n6qJLKoD3mFfAvcH5ZFUyTzJVW8t60pNgNaXO4q5S4qL9yCCZ
+                        cKyg6QtVgRuVxkUSseuR3fiubyTnkAAADQq3vrkvuSfm4n345STr/i/29FZEFUd0qD++B2
+                        ZoWGPKU/xzvxH7S2GxREb5oXcIYO889jY6mdZT8LZm6ZZig3rqoEAqdPyllHmEadb7hY+y
+                        jwcQ4Wr1ekGgVwNHCNu2in3cYXxbrYGMHc33WmdNrbGRDUzK+EEUM2cwUiM7Pkrw5s88Ff
+                        IWI0V+567Ob9LxxIUO/QvSbKMJGbMM4jZ1V9V2Ti/GziGJ107CBudZr/7wNwxIK86BBAEg
+                        hfnrhYBIaOLrtP8R+96i8iu4iZAvcIbQ==
+                        -----END OPENSSH PRIVATE KEY-----">
+                            <clear-password password="secret"/>
+                        </openssh-private-key>
+                    </key-pair>
+                </credentials>
+            </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+

Along with the key-pair credential, if your known SSH hosts are not in ~/.ssh/known_hosts, you should specify an ssh-credential +with the ssh-directory and known-hosts-file attributes defined to specify the location and name of your known hosts file.

+
+
+

When specifying keys in OpenSSH format, it is only necessary to specify the private key and the public key will be parsed +from the private key string. When specifying key pairs in PKCS format, it is necessary to specify both the private and +public keys using the following elements:

+
+
+
+
<key-pair>
+    <private-key-pem>-----BEGIN PRIVATE KEY-----
+                     MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgj+ToYNaHz/pISg/Z
+                     I9BjdhcTre/SJpIxASY19XtOV1ehRANCAASngcxUTBf2atGC5lQWCupsQGRNwwnK
+                     6Ww9Xt37SmaHv0bX5n1KnsAal0ykJVKZsD0Z09jVF95jL6udwaKpWQwb
+                     -----END PRIVATE KEY-----</private-key>
+    <public-key-pem>-----BEGIN PUBLIC KEY-----
+                     MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEp4HMVEwX9mrRguZUFgrqbEBkTcMJ
+                     yulsPV7d+0pmh79G1+Z9Sp7AGpdMpCVSmbA9GdPY1RfeYy+rncGiqVkMGw==
+                     -----END PUBLIC KEY-----</public-key>
+</key-pair>
+
+
+
+

When using a key pair credential in OpenSSH format, it is also possible to specify a passphrase to be used to decrypt +the private key:

+
+
+
+
<openssh-private-key pem="...">
+    <credential-store-reference store="..." alias="..." clear-text="..." />
+    <clear-password password="..." />
+    <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+</ssh-private-key-file>
+
+
+
+

When using PKCS formatted keys, the keys should not be encrypted with a passphrase

+
+
+
+
Credential Store Reference
+
+

It is possible to specify your SSH credentials as a reference to a credential store entry. +See: Adding a Credential +to a credential store and Referencing Credentials +stored in a credential store.

+
+
+
+
+
+

9.9. YAML Configuration file

+
+

A common way to manage WildFly installations over time is to start with a standard configuration file (e.g. the out-of-the-box standalone.xml file that comes with each WildFly release) and then apply installation specific customizations to it (e.g. add datasource resources and Elytron security realm resources to integrate with the company’s own services). As the standard configuration file evolves over time (with new releases) the goal is to efficiently re-apply the installation specific customizations. Users have several ways to apply their customizations: edit the XML manually or with XML manipulation tools (neither of which is recommended), create jboss-cli scripts that you can run on each upgrade, or use WildFly’s YAML configuration file feature.

+
+
+

With the YAML configuration file approach, you provide one or more YAML files that specify the resources that you want WildFly to add to its running configuration, along with any configuration attribute values that should differ from what’s in standalone.xml. Using YAML files has advantages over using CLI scripts:

+
+
+
    +
  • +

    CLI scripts can be tricky to write as they usually aren’t idempotent. If you run a script that adds a datasource, that datasource is now in the standalone.xml file, so if you run the script again, it will fail due to attempting to add an existing resource. This can be worked around by using the --read-ony-server-config command line flag instead of the usual -c / --server-config. Or you can write more complex CLI scripts that check whether resources already exist before attempting to add them. Both of these approaches can work, but they can be tricky to do correctly. The YAML configuration file approach is idempotent. The WildFly server reads the YAML at boot and updates its running configuration, but it does not update the standalone.xml file, so the same thing can be done repeatedly.

    +
  • +
  • +

    Applying a CLI script usually involves launching a separate Java process (the WildFly CLI). Needing to do this can be a poor fit for configuration customization workflows. With the YAML configuration file approach, the WildFly server process itself process the YAML as part of boot.

    +
  • +
+
+
+

9.9.1. Starting with YAML files

+
+

Using the --yaml or -y argument you can pass a list of YAML files. Each path needs to be separated by the File.pathSeparator. It is a semicolon (;) on Windows and colon (:) on Mac and Unix-based operating systems. +Paths can be absolute, relative to the current execution directory or relative to the standalone configuration directory.

+
+
+
+
./standalone.sh -y=/home/ehsavoie/dev/wildfly/config2.yml:config.yml -c standalone-full.xml
+
+
+
+
+

9.9.2. What is in the YAML

+
+

The YAML root node must be wildfly-configuration, then you can follow the model tree to add or update resources.

+
+
+

Sample YAML file to define a new PostGresql datasource:

+
+
+
+
wildfly-configuration:
+  subsystem:
+    datasources:
+      jdbc-driver:
+        postgresql:
+          driver-name: postgresql
+          driver-xa-datasource-class-name: org.postgresql.xa.PGXADataSource
+          driver-module-name: org.postgresql.jdbc
+      data-source:
+        PostgreSQLDS:
+          enabled: true
+          exception-sorter-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
+          jndi-name: java:jboss/datasources/PostgreSQLDS
+          jta: true
+          max-pool-size: 20
+          min-pool-size: 0
+          connection-url: "jdbc:postgresql://localhost:5432}/demo"
+          driver-name: postgresql
+          user-name: postgres
+          password: postgres
+          validate-on-match: true
+          background-validation: false
+          background-validation-millis: 10000
+          flush-strategy: FailingConnectionOnly
+          statistics-enable: false
+          stale-connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.novendor.NullStaleConnectionChecker
+          valid-connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
+          transaction-isolation: TRANSACTION_READ_COMMITTED
+
+
+
+

We also provide three operations using tags:

+
+
+
    +
  • +

    !undefine: to undefine an attribute

    +
  • +
+
+
+

Sample YAML file to undefine the CONSOLE logger level:

+
+
+
+
wildfly-configuration:
+    subsystem:
+        logging:
+          console-handler:
+            CONSOLE:
+              level: !undefine
+
+
+
+
    +
  • +

    !remove: to remove the resource

    +
  • +
+
+
+

Sample YAML file to remove the MicroProfile Smallrye JWT subsystem:

+
+
+
+
wildfly-configuration:
+    subsystem:
+        microprofile-jwt-smallrye: !remove
+
+
+
+
    +
  • +

    !list-add: to add an element to a list (with an optionnal index).

    +
  • +
+
+
+

Sample YAML file to add a RemoteTransactionPermission to the permissions list at the position 0:

+
+
+
+
wildfly-configuration:
+    subsystem:
+        elytron:
+          permission-set:
+           default-permissions:
+             permissions: !list-add
+              - class-name: org.wildfly.transaction.client.RemoteTransactionPermission
+                module: org.wildfly.transaction.client
+                target-name: "*"
+                index: 0
+
+
+
+
+
+
+
+

10. Management API reference

+
+
+

This section is an in depth reference to the WildFly management API. +Readers are encouraged to read the +Management clients and +Core management concepts sections +for fundamental background information, as well as the +Management tasks and +Domain setup sections for key task oriented +information. This section is meant as an in depth reference to delve +into some of the key details.

+
+
+

10.1. Global operations

+
+

The WildFly management API includes a number of operations that apply to +every resource.

+
+
+

10.1.1. The read-resource operation

+
+

Reads a management resource’s attribute values along with either basic +or complete information about any child resources. Supports the following +parameters, none of which are required:

+
+
+
    +
  • +

    recursive – (boolean, default is false) – whether to include +complete information about child resources, recursively.

    +
  • +
  • +

    recursive-depth – (int) – The depth to which information about child +resources should be included if recursive is true. If not set, the +depth will be unlimited; i.e. all descendant resources will be included.

    +
  • +
  • +

    proxies – (boolean, default is false) – whether to include remote +resources in a recursive query (i.e. host level resources from secondary +Host Controllers in a query of the Domain Controller; running server +resources in a query of a host).

    +
  • +
  • +

    include-runtime – (boolean, default is false) – whether to include +runtime attributes (i.e. those whose value does not come from the +persistent configuration) in the response.

    +
  • +
  • +

    include-defaults – (boolean, default is true) – whether to include +in the result default values not set by users. Many attributes have a +default value that will be used in the runtime if the users have not +provided an explicit value. If this parameter is false the value for +such attributes in the result will be undefined. If true the result +will include the default value for such parameters.

    +
  • +
+
+
+
+

10.1.2. The read-attribute operation

+
+

Reads the value of an individual attribute. Takes a single, required, +parameter:

+
+
+
    +
  • +

    name – (string) – the name of the attribute to read.

    +
  • +
  • +

    include-defaults – (boolean, default is true) – whether to include +in the result default values not set by users. Many attributes have a +default value that will be used in the runtime if the users have not +provided an explicit value. If this parameter is false the value for +such attributes in the result will be undefined. If true the result +will include the default value for such parameters.

    +
  • +
+
+
+
+

10.1.3. The write-attribute operation

+
+

Writes the value of an individual attribute. Takes two required +parameters:

+
+
+
    +
  • +

    name – (string) – the name of the attribute to write.

    +
  • +
  • +

    value – (type depends on the attribute being written) – the new +value.

    +
  • +
+
+
+
+

10.1.4. The undefine-attribute operation

+
+

Sets the value of an individual attribute to the undefined value, if +such a value is allowed for the attribute. The operation will fail if +the undefined value is not allowed. Takes a single required parameter:

+
+
+
    +
  • +

    name – (string) – the name of the attribute to write.

    +
  • +
+
+
+
+

10.1.5. The list-add operation

+
+

Adds an element to the value of a list attribute, adding the element to +the end of the list unless the optional attribute index is passed:

+
+
+
    +
  • +

    name – (string) – the name of the list attribute to add new value +to.

    +
  • +
  • +

    value – (type depends on the element being written) – the new +element to be added to the attribute value.

    +
  • +
  • +

    index – (int, optional) – index where in the list to add the new +element. By default it is undefined meaning add at the end. Index is +zero based.

    +
  • +
+
+
+

This operation will fail if the specified attribute is not a list.

+
+
+
+

10.1.6. The list-remove operation

+
+

Removes an element from the value of a list attribute, either the +element at a specified index, or the first element whose value matches +a specified value:

+
+
+
    +
  • +

    name – (string) – the name of the list attribute to add new value +to.

    +
  • +
  • +

    value – (type depends on the element being written, optional) – the +element to be removed. Optional and ignored if index is specified.

    +
  • +
  • +

    index – (int, optional) – index in the list whose element should be +removed. By default it is undefined, meaning value should be +specified.

    +
  • +
+
+
+

This operation will fail if the specified attribute is not a list.

+
+
+
+

10.1.7. The list-get operation

+
+

Gets one element from a list attribute by its index

+
+
+
    +
  • +

    name – (string) – the name of the list attribute

    +
  • +
  • +

    index – (int, required) – index of element to get from list

    +
  • +
+
+
+

This operation will fail if the specified attribute is not a list.

+
+
+
+

10.1.8. The list-clear operation

+
+

Empties the list attribute. It is different from :undefine-attribute +as it results in attribute of type list with 0 elements, whereas +:undefine-attribute results in an undefined value for the attribute

+
+
+
    +
  • +

    name – (string) – the name of the list attribute

    +
  • +
+
+
+

This operation will fail if the specified attribute is not a list.

+
+
+
+

10.1.9. The map-put operation

+
+

Adds an key/value pair entry to the value of a map attribute:

+
+
+
    +
  • +

    name – (string) – the name of the map attribute to add the new entry +to.

    +
  • +
  • +

    key – (string) – the key of the new entry to be added.

    +
  • +
  • +

    value – (type depends on the entry being written) – the value of the +new entry to be added to the attribute value.

    +
  • +
+
+
+

This operation will fail if the specified attribute is not a map.

+
+
+
+

10.1.10. The map-remove operation

+
+

Removes an entry from the value of a map attribute:

+
+
+
    +
  • +

    name – (string) – the name of the map attribute to remove the new +entry from.

    +
  • +
  • +

    key – (string) – the key of the entry to be removed.

    +
  • +
+
+
+

This operation will fail if the specified attribute is not a map.

+
+
+
+

10.1.11. The map-get operation

+
+

Gets the value of one entry from a map attribute

+
+
+
    +
  • +

    name – (string) – the name of the map attribute

    +
  • +
  • +

    key – (string) – the key of the entry.

    +
  • +
+
+
+

This operation will fail if the specified attribute is not a map.

+
+
+
+

10.1.12. The map-clear operation

+
+

Empties the map attribute. It is different from :undefine-attribute as +it results in attribute of type map with 0 entries, whereas +:undefine-attribute results in an undefined value for the attribute

+
+
+
    +
  • +

    name – (string) – the name of the map attribute

    +
  • +
+
+
+

This operation will fail if the specified attribute is not a map.

+
+
+
+

10.1.13. The read-resource-description operation

+
+

Returns the description of a resource’s attributes, types of children +and, optionally, operations. Supports the
+following parameters, none of which are required:

+
+
+
    +
  • +

    recursive – (boolean, default is false) – whether to include +information about child resources, recursively.

    +
  • +
  • +

    proxies – (boolean, default is false) – whether to include remote +resources in a recursive query (i.e. host level resources from secondary +Host Controllers in a query of the Domain Controller; running server +resources in a query of a host)

    +
  • +
  • +

    operations – (boolean, default is false) – whether to include +descriptions of the resource’s operations

    +
  • +
  • +

    inherited – (boolean, default is true) – if operations is +true, whether to include descriptions of operations inherited from +higher level resources. The global operations described in this section +are themselves inherited from the root resource, so the primary effect +of setting inherited to false is to exclude the descriptions of the +global operations from the output.

    +
  • +
+
+
+

See Description of the +Management Model for details on the result of this operation.

+
+
+
+

10.1.14. The read-operation-names operation

+
+

Returns a list of the names of all the operations the resource supports. +Takes no parameters.

+
+
+
+

10.1.15. The read-operation-description operation

+
+

Returns the description of an operation, along with details of its +parameter types and its return value. Takes a single, required, +parameter:

+
+
+
    +
  • +

    name – (string) – the name of the operation

    +
  • +
+
+
+

See Description of the +Management Model for details on the result of this operation.

+
+
+
+

10.1.16. The read-children-types operation

+
+

Returns a list of the +types of child resources the resource supports. Takes two optional +parameters:

+
+
+
    +
  • +

    include-aliases – (boolean, default is false) – whether to include +alias children (i.e. those which are aliases of other sub-resources) in +the response.

    +
  • +
  • +

    include-singletons – (boolean, default is false) – whether to +include singleton children (i.e. those are children that acts as +resource aggregate and are registered with a wildcard name) in the +response +wildfly-dev +discussion around this topic.

    +
  • +
+
+
+
+

10.1.17. The read-children-names operation

+
+

Returns a list of the names of all child resources of a given +type. +Takes a single, required, parameter:

+
+
+
    +
  • +

    child-type – (string) – the name of the type

    +
  • +
+
+
+
+

10.1.18. The read-children-resources operation

+
+

Returns information about all of a resource’s children that are of a +given type. +For each child resource, the returned information is equivalent to +executing the read-resource operation on that resource. Takes the +following parameters, of which only \{{child-type} is required:

+
+
+
    +
  • +

    child-type – (string) – the name of the type of child resource

    +
  • +
  • +

    recursive – (boolean, default is false) – whether to include +complete information about child resources, recursively.

    +
  • +
  • +

    recursive-depth – (int) – The depth to which information about child +resources should be included if recursive is \{{true}. If not set, +the depth will be unlimited; i.e. all descendant resources will be +included.

    +
  • +
  • +

    proxies – (boolean, default is false) – whether to include remote +resources in a recursive query (i.e. host level resources from secondary +Host Controllers in a query of the Domain Controller; running server +resources in a query of a host)

    +
  • +
  • +

    include-runtime – (boolean, default is false) – whether to include +runtime attributes (i.e. those whose value does not come from the +persistent configuration) in the response.

    +
  • +
  • +

    include-defaults – (boolean, default is true) – whether to include +in the result default values not set by users. Many attributes have a +default value that will be used in the runtime if the users have not +provided an explicit value. If this parameter is false the value for +such attributes in the result will be undefined. If true the result +will include the default value for such parameters.

    +
  • +
+
+
+
+

10.1.19. The read-attribute-group operation

+
+

Returns a list of attributes of a +type for a given attribute group name. For each attribute the returned +information is equivalent to executing the read-attribute operation of +that resource. Takes the following parameters, of which only \{{name} +is required:

+
+
+
    +
  • +

    name – (string) – the name of the attribute group to read.

    +
  • +
  • +

    include-defaults – (boolean, default is true) – whether to include +in the result default values not set by users. Many attributes have a +default value that will be used in the runtime if the users have not +provided an explicit value. If this parameter is false the value for +such attributes in the result will be undefined. If true the result +will include the default value for such parameters.

    +
  • +
  • +

    include-runtime – (boolean, default is false) – whether to include +runtime attributes (i.e. those whose value does not come from the +persistent configuration) in the response.

    +
  • +
  • +

    include-aliases – (boolean, default is false) – whether to include +alias attributes (i.e. those which are alias of other attributes) in the +response.

    +
  • +
+
+
+
+

10.1.20. The read-attribute-group-names operation

+
+

Returns a list of attribute groups names for a given type. +Takes no parameters.

+
+
+
+

10.1.21. Standard Operations

+
+

Besides the global operations described above, by convention nearly +every resource should expose an add operation and a remove +operation. Exceptions to this convention are the root resource, and +resources that do not store persistent configuration and are created +dynamically at runtime (e.g. resources representing the JVM’s platform +mbeans or resources representing aspects of the running state of a +deployment.)

+
+
+
The add operation
+
+

The operation that creates a new resource must be named add. The +operation may take zero or more parameters; what those parameters are +depends on the resource being created.

+
+
+
+
The remove operation
+
+

The operation that removes an existing resource must be named remove. +The operation should take no parameters.

+
+
+
+
+
+

10.2. Detyped management and the jboss-dmr library

+
+

The management model exposed by WildFly is very large and complex. There +are dozens, probably hundreds of logical concepts involved – hosts, +server groups, servers, subsystems, datasources, web connectors, and on +and on – each of which in a classic objected oriented API design could +be represented by a Java type (i.e. a Java class or interface.) +However, a primary goal in the development of WildFly’s native +management API was to ensure that clients built to use the API had as +few compile-time and run-time dependencies on JBoss-provided classes as +possible, and that the API exposed by those libraries be powerful but +also simple and stable. A management client running with the management +libraries created for an earlier version of WildFly should still work if +used to manage a later version domain. The management client libraries +needed to be forward compatible.

+
+
+

It is highly unlikely that an API that consists of hundreds of Java +types could be kept forward compatible. Instead, the WildFly management +API is a detyped API. A detyped API is like decaffeinated coffee – it +still has a little bit of caffeine, but not enough to keep you awake at +night. WildFly’s management API still has a few Java types in it (it’s +impossible for a Java library to have no types!) but not enough to keep +you (or us) up at night worrying that your management clients won’t be +forward compatible.

+
+
+

A detyped API works by making it possible to build up arbitrarily +complex data structures using a small number of Java types. All of the +parameter values and return values in the API are expressed using those +few types. Ideally, most of the types are basic JDK types, like +java.lang.String, java.lang.Integer, etc. In addition to the basic +JDK types, WildFly’s detyped management API uses a small library called +jboss-dmr. The purpose of this section is to provide a basic overview +of the jboss-dmr library.

+
+
+

Even if you don’t use jboss-dmr directly (probably the case for all but +a few users), some of the information in this section may be useful. +When you invoke operations using the application server’s Command Line +Interface, the return values are just the text representation of of a +jboss-dmr ModelNode. If your CLI commands require complex parameter +values, you may yourself end up writing the text representation of a +ModelNode. And if you use the HTTP management API, all response bodies +as well as the request body for any POST will be a JSON representation +of a ModelNode.

+
+
+

The source code for jboss-dmr is available on +Github. The maven coordinates for +a jboss-dmr release are org.jboss.jboss-dmr:jboss-dmr.

+
+
+

10.2.1. ModelNode and ModelType

+
+

The public API exposed by jboss-dmr is very simple: just three classes, +one of which is an enum!

+
+
+

The primary class is org.jboss.dmr.ModelNode. A ModelNode is +essentially just a wrapper around some value; the value is typically +some basic JDK type. A ModelNode exposes a getType() method. This +method returns a value of type org.jboss.dmr.ModelType, which is an +enum of all the valid types of values. And that’s 95% of the public API; +a class and an enum. (We’ll get to the third class, Property, below.)

+
+
+
Basic ModelNode manipulation
+
+

To illustrate how to work with ModelNode s, we’ll use the +Beanshell scripting library. We won’t get into +many details of beanshell here; it’s a simple and intuitive tool and +hopefully the following examples are as well.

+
+
+

We’ll start by launching a beanshell interpreter, with the jboss-dmr +library available on the classpath. Then we’ll tell beanshell to import +all the jboss-dmr classes so they are available for use:

+
+
+
+
$ java -cp bsh-2.0b4.jar:jboss-dmr-1.0.0.Final.jar bsh.Interpreter
+BeanShell 2.0b4 - by Pat Niemeyer (pat@pat.net)
+bsh % import org.jboss.dmr.*;
+bsh %
+
+
+
+

Next, create a ModelNode and use the beanshell print function to +output what type it is:

+
+
+
+
bsh % ModelNode node = new ModelNode();
+bsh % print(node.getType());
+UNDEFINED
+
+
+
+

A new ModelNode has no value stored, so its type is +ModelType.UNDEFINED.

+
+
+

Use one of the overloaded set method variants to assign a node’s +value:

+
+
+
+
bsh % node.set(1);
+bsh % print(node.getType());
+INT
+bsh % node.set(true);
+bsh % print(node.getType());
+BOOLEAN
+bsh % node.set("Hello, world");
+bsh % print(node.getType());
+STRING
+
+
+
+

Use one of the asXXX() methods to retrieve the value:

+
+
+
+
bsh % node.set(2);
+bsh % print(node.asInt());
+2
+bsh % node.set("A string");
+bsh % print(node.asString());
+A string
+
+
+
+

ModelNode will attempt to perform type conversions when you invoke the +asXXX methods:

+
+
+
+
bsh % node.set(1);
+bsh % print(node.asString());
+1
+bsh % print(node.asBoolean());
+true
+bsh % node.set(0);
+bsh % print(node.asBoolean());
+false
+bsh % node.set("true");
+bsh % print(node.asBoolean());
+true
+
+
+
+

Not all type conversions are possible:

+
+
+
+
bsh % node.set("A string");
+bsh % print(node.asInt());
+// Error: // Uncaught Exception: Method Invocation node.asInt : at Line: 20 : in file: <unknown file> : node .asInt ( )
+ 
+Target exception: java.lang.NumberFormatException: For input string: "A string"
+ 
+java.lang.NumberFormatException: For input string: "A string"
+ at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
+ at java.lang.Integer.parseInt(Integer.java:449)
+ at java.lang.Integer.parseInt(Integer.java:499)
+ at org.jboss.dmr.StringModelValue.asInt(StringModelValue.java:61)
+ at org.jboss.dmr.ModelNode.asInt(ModelNode.java:117)
+        ....
+
+
+
+

The ModelNode.getType() method can be used to ensure a node has an +expected value type before attempting a type conversion.

+
+
+

One set variant takes another ModelNode as its argument. The value +of the passed in node is copied, so there is no shared state between the +two model nodes:

+
+
+
+
bsh % node.set("A string");
+bsh % ModelNode another = new ModelNode();
+bsh % another.set(node);
+bsh % print(another.asString());
+A string
+bsh % node.set("changed");
+bsh % print(node.asString());
+changed
+bsh % print(another.asString());
+A string
+
+
+
+

A ModelNode can be cloned. Again, there is no shared state between the +original node and its clone:

+
+
+
+
bsh % ModelNode clone = another.clone();
+bsh % print(clone.asString());
+A string
+bsh % another.set(42);
+bsh % print(another.asString());
+42
+bsh % print(clone.asString());
+A string
+
+
+
+

Use the protect() method to make a ModelNode immutable:

+
+
+
+
bsh % clone.protect();
+bsh % clone.set("A different string");
+// Error: // Uncaught Exception: Method Invocation clone.set : at Line: 15 : in file: <unknown file> : clone .set ( "A different string" )
+ 
+Target exception: java.lang.UnsupportedOperationException
+ 
+java.lang.UnsupportedOperationException
+ at org.jboss.dmr.ModelNode.checkProtect(ModelNode.java:1441)
+ at org.jboss.dmr.ModelNode.set(ModelNode.java:351)
+        ....
+
+
+
+
+
Lists
+
+

The above examples aren’t particularly interesting; if all we can do +with a ModelNode is wrap a simple Java primitive, what use is that? +However, a ModelNode’s value can be more complex than a simple +primitive, and using these more complex types we can build complex data +structures. The first more complex type is `ModelType.LIST.

+
+
+

Use the add methods to initialize a node’s value as a list and add to +the list:

+
+
+
+
bsh % ModelNode list = new ModelNode();
+bsh % list.add(5);
+bsh % list.add(10);
+bsh % print(list.getType());
+LIST
+
+
+
+

Use asInt() to find the size of the list:

+
+
+
+
bsh % print(list.asInt());
+2
+
+
+
+

Use the overloaded get method variant that takes an int param to +retrieve an item. The item is returned as a ModelNode:

+
+
+
+
bsh % ModelNode child = list.get(1);
+bsh % print(child.asInt());
+10
+
+
+
+

Elements in a list need not all be of the same type:

+
+
+
+
bsh % list.add("A string");
+bsh % print(list.get(1).getType());
+INT
+bsh % print(list.get(2).getType());
+STRING
+
+
+
+

Here’s one of the trickiest things about jboss-dmr: The get +methods actually mutate state; they are not "read-only". For example, +calling get with an index that does not exist yet in the list will +actually create a child of type ModelType.UNDEFINED at that index (and +will create UNDEFINED children for any intervening indices.)

+
+
+
+
bsh % ModelNode four = list.get(4);
+bsh % print(four.getType());
+UNDEFINED
+bsh % print(list.asInt());
+6
+
+
+
+

Since the get call always returns a ModelNode and never null it is +safe to manipulate the return value:

+
+
+
+
bsh % list.get(5).set(30);
+bsh % print(list.get(5).asInt());
+30
+
+
+
+

That’s not so interesting in the above example, but later on with node +of type ModelType.OBJECT we’ll see how that kind of method chaining +can let you build up fairly complex data structures with a minimum of +code.

+
+
+

Use the asList() method to get a List<ModelNode> of the children:

+
+
+
+
bsh % for (ModelNode element : list.asList()) {
+print(element.getType());
+}
+INT
+INT
+STRING
+UNDEFINED
+UNDEFINED
+INT
+
+
+
+

The asString() and toString() methods provide slightly differently +formatted text representations of a ModelType.LIST node:

+
+
+
+
bsh % print(list.asString());
+[5,10,"A string",undefined,undefined,30]
+bsh % print(list.toString());
+[
+    5,
+    10,
+    "A string",
+    undefined,
+    undefined,
+    30
+]
+
+
+
+

Finally, if you’ve previously used set to assign a node’s value to +some non-list type, you cannot use the add method:

+
+
+
+
bsh % node.add(5);
+// Error: // Uncaught Exception: Method Invocation node.add : at Line: 18 : in file: <unknown file> : node .add ( 5 )
+ 
+Target exception: java.lang.IllegalArgumentException
+ 
+java.lang.IllegalArgumentException
+ at org.jboss.dmr.ModelValue.addChild(ModelValue.java:120)
+ at org.jboss.dmr.ModelNode.add(ModelNode.java:1007)
+ at org.jboss.dmr.ModelNode.add(ModelNode.java:761)
+        ...
+
+
+
+

You can, however, use the setEmptyList() method to change the node’s +type, and then use add:

+
+
+
+
bsh % node.setEmptyList();
+bsh % node.add(5);
+bsh % print(node.toString());
+[5]
+
+
+
+
+
Properties
+
+

The third public class in the jboss-dmr library is +org.jboss.dmr.Property. A Property is a String ⇒ ModelNode tuple.

+
+
+
+
bsh % Property prop = new Property("stuff", list);
+bsh % print(prop.toString());
+org.jboss.dmr.Property@79a5f739
+bsh % print(prop.getName());
+stuff
+bsh % print(prop.getValue());
+[
+    5,
+    10,
+    "A string",
+    undefined,
+    undefined,
+    30
+]
+
+
+
+

The property can be passed to ModelNode.set:

+
+
+
+
bsh % node.set(prop);
+bsh % print(node.getType());
+PROPERTY
+
+
+
+

The text format for a node of ModelType.PROPERTY is:

+
+
+
+
bsh % print(node.toString());
+("stuff" => [
+    5,
+    10,
+    "A string",
+    undefined,
+    undefined,
+    30
+])
+
+
+
+

Directly instantiating a Property via its constructor is not common. +More typically one of the two argument ModelNode.add or +ModelNode.set variants is used. The first argument is the property +name:

+
+
+
+
bsh % ModelNode simpleProp = new ModelNode();
+bsh % simpleProp.set("enabled", true);
+bsh % print(simpleProp.toString());
+("enabled" => true)
+bsh % print(simpleProp.getType());
+PROPERTY
+bsh % ModelNode propList = new ModelNode();
+bsh % propList.add("min", 1);
+bsh % propList.add("max", 10);
+bsh % print(propList.toString());
+[
+    ("min" => 1),
+    ("max" => 10)
+]
+bsh % print(propList.getType());
+LIST
+bsh % print(propList.get(0).getType());
+PROPERTY
+
+
+
+

The asPropertyList() method provides easy access to a +List<Property>:

+
+
+
+
bsh % for (Property prop : propList.asPropertyList()) {
+print(prop.getName() + " = " + prop.getValue());
+}
+min = 1
+max = 10
+
+
+
+
+
ModelType.OBJECT
+
+

The most powerful and most commonly used complex value type in jboss-dmr +is ModelType.OBJECT. A ModelNode whose value is ModelType.OBJECT +internally maintains a Map<String, ModelNode.

+
+
+

Use the get method variant that takes a string argument to add an +entry to the map. If no entry exists under the given name, a new entry +is added with a the value being a ModelType.UNDEFINED node. The node +is returned:

+
+
+
+
bsh % ModelNode range = new ModelNode();
+bsh % ModelNode min = range.get("min");
+bsh % print(range.toString());
+{"min" => undefined}
+bsh % min.set(2);
+bsh % print(range.toString());
+{"min" => 2}
+
+
+
+

Again it is important to remember that the get operation may mutate +the state of a model node by adding a new entry. It is not a read-only +operation.

+
+
+

Since get will never return null, a common pattern is to use method +chaining to create the key/value pair:

+
+
+
+
bsh % range.get("max").set(10);
+bsh % print(range.toString());
+{
+    "min" => 2,
+    "max" => 10
+}
+
+
+
+

A call to get passing an already existing key will of course return +the same model node as was returned the first time get was called with +that key:

+
+
+
+
bsh % print(min == range.get("min"));
+true
+
+
+
+

Multiple parameters can be passed to get. This is a simple way to +traverse a tree made up of ModelType.OBJECT nodes. Again, get may +mutate the node on which it is invoked; e.g. it will actually create the +tree if nodes do not exist. This next example uses a workaround to get +beanshell to handle the overloaded get method that takes a variable +number of arguments:

+
+
+
+
bsh % String[] varargs = { "US", "Missouri", "St. Louis" };
+bsh % salesTerritories.get(varargs).set("Brian");
+bsh % print(salesTerritories.toString());
+{"US" => {"Missouri" => {"St. Louis" => "Brian"}}}
+
+
+
+

The normal syntax would be:

+
+
+
+
salesTerritories.get("US", "Missouri", "St. Louis").set("Brian");
+
+
+
+

The key/value pairs in the map can be accessed as a List<Property:

+
+
+
+
bsh % for (Property prop : range.asPropertyList()) {
+print(prop.getName() + " = " + prop.getValue());
+}
+min = 2
+
+
+
+

The semantics of the backing map in a node of ModelType.OBJECT are +those of a LinkedHashMap. The map remembers the order in which +key/value pairs are added. This is relevant when iterating over the +pairs after calling asPropertyList() and for controlling the order in +which key/value pairs appear in the output from toString().

+
+
+

Since the get method will actually mutate the state of a node if the +given key does not exist, ModelNode provides a couple methods to let +you check whether the entry is there. The has method simply does that:

+
+
+
+
bsh % print(range.has("unit"));
+false
+bsh % print(range.has("min"));
+true
+
+
+
+

Very often, the need is to not only know whether the key/value pair +exists, but whether the value is defined (i.e. not +ModelType.UNDEFINED. This kind of check is analogous to checking +whether a field in a Java class has a null value. The hasDefined lets +you do this:

+
+
+
+
bsh % print(range.hasDefined("unit"));
+false
+bsh % // Establish an undefined child 'unit';
+bsh % range.get("unit");
+bsh % print(range.toString());
+{
+    "min" => 2,
+    "max" => 10,
+    "unit" => undefined
+}
+bsh % print(range.hasDefined("unit"));
+false
+bsh % range.get("unit").set("meters");
+bsh % print(range.hasDefined("unit"));
+true
+
+
+
+
+
ModelType.EXPRESSION
+
+

A value of type ModelType.EXPRESSION is stored as a string, but can +later be resolved to different value. The string has a special syntax +that should be familiar to those who have used the system property +substitution feature in previous JBoss AS releases.

+
+
+
+
[<prefix>][${<system-property-name>[:<default-value>]}][<suffix>]*
+
+
+
+

For example:

+
+
+
+
${queue.length}
+http://${host}
+http://${host:localhost}:${port:8080}/index.html
+
+
+
+

Use the setExpression method to set a node’s value to type expression:

+
+
+
+
bsh % ModelNode expression = new ModelNode();
+bsh % expression.setExpression("${queue.length}");
+bsh % print(expression.getType());
+EXPRESSION
+
+
+
+

Calling asString() returns the same string that was input:

+
+
+
+
bsh % print(expression.asString());
+${queue.length}
+
+
+
+

However, calling toString() tells you that this node’s value is not of +ModelType.STRING:

+
+
+
+
bsh % print(expression.toString());
+expression "${queue.length}"
+
+
+
+

When the resolve operation is called, the string is parsed and any +embedded system properties are resolved against the JVM’s current system +property values. A new ModelNode is returned whose value is the +resolved string:

+
+
+
+
bsh % System.setProperty("queue.length", "10");
+bsh % ModelNode resolved = expression.resolve();
+bsh % print(resolved.asInt());
+10
+
+
+
+

Note that the type of the ModelNode returned by resolve() is +ModelType.STRING:

+
+
+
+
bsh % print(resolved.getType());
+STRING
+
+
+
+

The resolved.asInt() call in the previous example only worked because +the string "10" happens to be convertible into the int 10.

+
+
+

Calling resolve() has no effect on the value of the node on which the +method is invoked:

+
+
+
+
bsh % resolved = expression.resolve();
+bsh % print(resolved.toString());
+"10"
+bsh % print(expression.toString());
+expression "${queue.length}"
+
+
+
+

If an expression cannot be resolved, resolve just uses the original +string. The string can include more than one system property +substitution:

+
+
+
+
bsh % expression.setExpression("http://${host}:${port}/index.html");
+bsh % resolved = expression.resolve();
+bsh % print(resolved.asString());
+http://${host}:${port}/index.html
+
+
+
+

The expression can optionally include a default value, separated from +the name of the system property by a colon:

+
+
+
+
bsh % expression.setExpression("http://${host:localhost}:${port:8080}/index.html");
+bsh % resolved = expression.resolve();
+bsh % print(resolved.asString());
+http://localhost:8080/index.html
+
+
+
+

Actually including a system property substitution in the expression is +not required:

+
+
+
+
bsh % expression.setExpression("no system property");
+bsh % resolved = expression.resolve();
+bsh % print(resolved.asString());
+no system property
+bsh % print(expression.toString());
+expression "no system property"
+
+
+
+

The resolve method works on nodes of other types as well; it returns a +copy without attempting any real resolution:

+
+
+
+
bsh % ModelNode basic = new ModelNode();
+bsh % basic.set(10);
+bsh % resolved = basic.resolve();
+bsh % print(resolved.getType());
+INT
+bsh % resolved.set(5);
+bsh % print(resolved.asInt());
+5
+bsh % print(basic.asInt());
+10
+
+
+
+

In addition to system properties, in the above examples, we also support substituting +from environment variables. See the Expression Resolution +subsection for a more thorough description of how this works in practice.

+
+
+
+
ModelType.TYPE
+
+

You can also pass one of the values of the ModelType enum to set:

+
+
+
+
bsh % ModelNode type = new ModelNode();
+bsh % type.set(ModelType.LIST);
+bsh % print(type.getType());
+TYPE
+bsh % print(type.toString());
+LIST
+
+
+
+

This is useful when using a ModelNode data structure to describe +another ModelNode data structure.

+
+
+
+
Full list of ModelNode types
+
+

BIG_DECIMAL
+BIG_INTEGER
+BOOLEAN
+BYTES
+DOUBLE
+EXPRESSION
+INT
+LIST
+LONG
+OBJECT
+PROPERTY
+STRING
+TYPE
+UNDEFINED

+
+
+
+
Text representation of a ModelNode
+
+

TODO – document the grammar

+
+
+
+
JSON representation of a ModelNode
+
+

TODO – document the grammar

+
+
+
+
+
+

10.3. Description of the Management Model

+
+

A detailed description of the resources, attributes and operations that +make up the management model provided by an individual WildFly instance +or by any Domain Controller or secondary Host Controller process can be +queried using the read-resource-description, read-operation-names, +read-operation-description and read-child-types operations described +in the Global operations section. In this +section we provide details on what’s included in those descriptions.

+
+
+

10.3.1. Description of the WildFly Managed Resources

+
+

All portions of the management model exposed by WildFly are addressable +via an ordered list of key/value pairs. For each addressable +Management Resource, the following +descriptive information will be available:

+
+
+
    +
  • +

    description – String – text description of this portion of the model

    +
  • +
  • +

    min-occurs – int, either 0 or 1 – Minimum number of resources of +this type that must exist in a valid model. If not present, the default +value is 0.

    +
  • +
  • +

    max-occurs – int – Maximum number of resources of this type that may +exist in a valid model. If not present, the default value depends upon +the value of the final key/value pair in the address of the described +resource. If this value is '*', the default value is Integer.MAX_VALUE, +i.e. there is no limit. If this value is some other string, the default +value is 1.

    +
  • +
  • +

    attributes – Map of String (the attribute name) to complex structure +– the configuration attributes available in this portion of the model. +See the Description of an Attribute section +for the representation of each attribute.

    +
  • +
  • +

    operations – Map of String (the operation name) to complex structure +– the operations that can be targeted at this address. See the +Description of an Operation section +for the representation of each operation.

    +
  • +
  • +

    children – Map of String (the type of child) to complex structure – +the relationship of this portion of the model to other addressable +portions of the model. See the +Description of Parent/Child Relationships +section for the representation of each child relationship.

    +
  • +
  • +

    head-comment-allowed – boolean – This description key is for +possible future use.

    +
  • +
  • +

    tail-comment-allowed – boolean – This description key is for +possible future use.

    +
  • +
+
+
+

For example:

+
+
+
+
{
+     "description => "A manageable resource",
+     "tail-comment-allowed" => false,
+     "attributes" => {
+          "foo" => {
+               .... details of attribute foo
+          }
+      },
+     "operations" => {
+          "start" => {
+               .... details of the start operation
+          }
+      },
+     "children" => {
+          "bar" => {
+               .... details of the relationship with children of type "bar"
+          }
+      }
+}
+
+
+
+
Description of an Attribute
+
+

An attribute is a portion of the management model that is not directly +addressable. Instead, it is conceptually a property of an addressable +management resource. For +each attribute in the model, the following descriptive information will +be available:

+
+
+
    +
  • +

    description – String – text description of the attribute

    +
  • +
  • +

    typeorg.jboss.dmr.ModelType – the type of the attribute value. +One of the enum values BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, +INT, LIST, LONG, OBJECT, PROPERTY, STRING. Most of these are +self-explanatory. An OBJECT will be represented in the detyped model as +a map of string keys to values of some other legal type, conceptually +similar to a javax.management.openmbean.CompositeData. A PROPERTY is a +single key/value pair, where the key is a string, and the value is of +some other legal type.

    +
  • +
  • +

    value-type – ModelType or complex structure – Only present if type +is LIST or OBJECT. If all elements in the LIST or all the values of the +OBJECT type are of the same type, this will be one of the ModelType +enums BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, INT, LONG, +STRING. Otherwise, value-type will detail the structure of the +attribute value, enumerating the value’s fields and the type of their +value. So, an attribute with a type of LIST and a value-type value +of ModelType.STRING is analogous to a Java List<String>, while one +with a value-type value of ModelType.INT is analogous to a Java +List<Integer>. An attribute with a type of OBJECT and a value-type +value of ModelType.STRING is analogous to a Java +Map<String, String>. An attribute with a type of OBJECT and a +value-type whose value is not of type ModelType represents a +fully-defined complex object, with the object’s legal fields and their +values described.

    +
  • +
  • +

    expressions-allowed – boolean – indicates whether the value of the +attribute may be of type ModelType.EXPRESSION, instead of its standard +type (see type and value-type above for discussion of an attribute’s +standard type.) A value of ModelType.EXPRESSION contains a +system-property or environment variable +substitution expression that the server will resolve +against the server-side system property map before using the value. For +example, an attribute named max-threads may have an expression value of +${example.pool.max-threads:10} instead of just 10. Default value if +not present is false. +See the Expression Resolution subsection +for a more thorough description.

    +
  • +
  • +

    required – boolean – true if the attribute must have a defined value +in a representation of its portion of the model unless another attribute +included in a list of alternatives is defined; false if it may be +undefined (implying a null value) even in the absence of alternatives. +If not present, true is the default.

    +
  • +
  • +

    nillable – boolean – true if the attribute might not have a defined +value in a representation of its portion of the model. A nillable +attribute may
    +be undefined either because it is not required or because it is +required but has alternatives and one of the alternatives is defined.

    +
  • +
  • +

    storage – String – Either "configuration" or "runtime". If +"configuration", the attribute’s value is stored as part of the +persistent configuration (e.g. in domain.xml, host.xml or +standalone.xml.) If "runtime" the attribute’s value is not stored in the +persistent configuration; the value only exists as long as the resource +is running.

    +
  • +
  • +

    access-type – String – One of "read-only", "read-write" or "metric". +Whether an attribute value can be written, or can only read. A "metric" +is a read-only attribute whose value is not stored in the persistent +configuration, and whose value may change due to activity on the server. +If an attribute is "read-write", the resource will expose an operation +named "write-attribute" whose "name" parameter will accept this +attribute’s name and whose "value" parameter will accept a valid value +for this attribute. That operation will be the standard means of +updating this attribute’s value.

    +
  • +
  • +

    restart-required – String – One of "no-services", "all-services", +"resource-services" or "jvm". Only relevant to attributes whose +access-type is read-write. Indicates whether execution of a +write-attribute operation whose name parameter specifies this attribute +requires a restart of services (or an entire JVM) in order for the +change to take effect in the runtime . See the discussion of +Applying +Updates to Runtime Services below. Default value is "no-services".

    +
  • +
  • +

    default – the default value for the attribute that will be used in +runtime services if the attribute is not explicitly defined and no other +attributes listed as alternatives are defined.

    +
  • +
  • +

    alternatives – List of string – Indicates an exclusive relationship +between attributes. If this attribute is defined, the other attributes +listed in this descriptor’s value should be undefined, even if their +required descriptor says true; i.e. the presence of this attribute +satisfies the requirement. Note that an attribute that is not explicitly +configured but has a default value is still regarded as not being +defined for purposes of checking whether the exclusive relationship has +been violated. Default is undefined; i.e. this does not apply to most +attributes.

    +
  • +
  • +

    requires – List of string – Indicates that if this attribute has a +value (other than undefined), the other attributes listed in this +descriptor’s value must also have a value, even if their required +descriptor says false. This would typically be used in conjunction with +alternatives. For example, attributes "a" and "b" are required, but are +alternatives to each other; "c" and "d" are optional. But "b" requires +"c" and "d", so if "b" is used, "c" and "d" must also be defined. +Default is undefined; i.e. this does not apply to most attributes.

    +
  • +
  • +

    capability-reference – string – if defined indicates that this +attribute’s value specifies the dynamic portion of the name of the +specified capability provided by another resource. This indicates the +attribute is a reference to another area of the management model. (Note +that at present some attributes that reference other areas of the model +may not provide this information.)

    +
  • +
  • +

    head-comment-allowed – boolean – This description key is for +possible future use.

    +
  • +
  • +

    tail-comment-allowed – boolean – This description key is for +possible future use.

    +
  • +
  • +

    arbitrary key/value pairs that further describe the attribute value, +e.g. "max" ⇒ 2. See the Arbitrary +Descriptors section.

    +
  • +
+
+
+

Some examples:

+
+
+
+
"foo" => {
+     "description" => "The foo",
+     "type" => INT,
+     "max" => 2
+}
+
+
+
+
+
"bar" => {
+     "description" => "The bar",
+     "type" => OBJECT,
+     "value-type" => {
+          "size" => INT,
+          "color" => STRING
+     }
+}
+
+
+
+
+
Description of an Operation
+
+

A management resource may have operations associated with it. The +description of an operation will include the following information:

+
+
+
    +
  • +

    operation-name – String – the name of the operation

    +
  • +
  • +

    description – String – text description of the operation

    +
  • +
  • +

    request-properties – Map of String to complex structure – +description of the parameters of the operation. Keys are the names of +the parameters, values are descriptions of the parameter value types. +See +below +for details on the description of parameter value types.

    +
  • +
  • +

    reply-properties – complex structure, or empty – description of the +return value of the operation, with an empty node meaning void. See +below +for details on the description of operation return value types.

    +
  • +
  • +

    restart-required – String – One of "no-services", "all-services", +"resource-services" or "jvm". Indicates whether the operation makes a +configuration change that requires a restart of services (or an entire +JVM) in order for the change to take effect in the runtime. See +the discussion of Applying +Updates to Runtime Services below. Default value is "no-services".

    +
  • +
+
+
+
Description of an Operation Parameter or Return Value
+
+
    +
  • +

    description – String – text description of the parameter or return +value

    +
  • +
  • +

    typeorg.jboss.dmr.ModelType – the type of the parameter or +return value. One of the enum values BIG_DECIMAL, BIG_INTEGER, BOOLEAN, +BYTES, DOUBLE, INT, LIST, LONG, OBJECT, PROPERTY, STRING.

    +
  • +
  • +

    value-typeModelType or complex structure – Only present if type +is LIST or OBJECT. If all elements in the LIST or all the values of the +OBJECT type are of the same type, this will be one of the ModelType +enums BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, INT, LIST, LONG, +PROPERTY, STRING. Otherwise, value-type will detail the structure of the +attribute value, enumerating the value’s fields and the type of their +value.So, a parameter with a type of LIST and a value-type value of +ModelType.STRING is analogous to a Java List<String>, while one with +a value-type value of ModelType.INT is analogous to a Java +List<Integer>. A parameter with a type of OBJECT and a value-type +value of ModelType.STRING is analogous to a Java +Map<String, String>. A parameter with a type of OBJECT and a +value-type whose value is not of type ModelType represents a +fully-defined complex object, with the object’s legal fields and their +values described.

    +
  • +
  • +

    expressions-allowed – boolean – indicates whether the value of the +the parameter or return value may be of type ModelType.EXPRESSION, +instead its standard type (see type and value-type above for discussion +of the standard type.) A value of ModelType.EXPRESSION contains a +system-property or environment variable +substitution expression that the server will resolve +against the server-side system property map before using the value. For +example, a parameter named max-threads may have an expression value of +${example.pool.max-threads:10} instead of just 10. Default value if +not present is false. +See the Expression Resolution subsection +for a more thorough description.

    +
  • +
  • +

    required – boolean – true if the parameter or return value must have +a defined value in the operation or response unless another item +included in a list of alternatives is defined; false if it may be +undefined (implying a null value) even in the absence of alternatives. +If not present, true is the default.

    +
  • +
  • +

    nillable – boolean – true if the parameter or return value might not +have a defined value in a representation of its portion of the model. A +nillable parameter or return value may be undefined either because it is +not required or because it is required but has alternatives and one +of the alternatives is defined.

    +
  • +
  • +

    default – the default value for the parameter that will be used in +runtime services if the parameter is not explicitly defined and no other +parameters listed as alternatives are defined.

    +
  • +
  • +

    restart-required – String – One of "no-services", "all-services", +"resource-services" or "jvm". Only relevant to attributes whose +access-type is read-write. Indicates whether execution of a +write-attribute operation whose name parameter specifies this attribute +requires a restart of services (or an entire JVM) in order for the +change to take effect in the runtime . See the discussion of +Applying +Updates to Runtime Services below. Default value is "no-services".

    +
  • +
  • +

    alternatives – List of string – Indicates an exclusive relationship +between parameters. If this attribute is defined, the other parameters +listed in this descriptor’s value should be undefined, even if their +required descriptor says true; i.e. the presence of this parameter +satisfies the requirement. Note that an parameer that is not explicitly +configured but has a default value is still regarded as not being +defined for purposes of checking whether the exclusive relationship has +been violated. Default is undefined; i.e. this does not apply to most +parameters.

    +
  • +
  • +

    requires – List of string – Indicates that if this parameter has a +value (other than undefined), the other parameters listed in this +descriptor’s value must also have a value, even if their required +descriptor says false. This would typically be used in conjunction with +alternatives. For example, parameters "a" and "b" are required, but are +alternatives to each other; "c" and "d" are optional. But "b" requires +"c" and "d", so if "b" is used, "c" and "d" must also be defined. +Default is undefined; i.e. this does not apply to most parameters.

    +
  • +
  • +

    arbitrary key/value pairs that further describe the attribute value, +e.g. "max" ⇒2. See the Arbitrary Descriptors +section.

    +
  • +
+
+
+
+
+
Arbitrary Descriptors
+
+

The description of an attribute, operation parameter or operation return +value type can include arbitrary key/value pairs that provide extra +information. Whether a particular key/value pair is present depends on +the context, e.g. a pair with key "max" would probably only occur as +part of the description of some numeric type.

+
+
+

Following are standard keys and their expected value type. If descriptor +authors want to add an arbitrary key/value pair to some descriptor and +the semantic matches the meaning of one of the following items, the +standard key/value type must be used.

+
+
+
    +
  • +

    min – int – the minimum value of some numeric type. The absence of +this item implies there is no minimum value.

    +
  • +
  • +

    max – int – the maximum value of some numeric type. The absence of +this item implies there is no maximum value.

    +
  • +
  • +

    min-length – int – the minimum length of some string, list or byte[] +type. The absence of this item implies a minimum length of zero.

    +
  • +
  • +

    max-length – int – the maximum length of some string, list or +byte[]. The absence of this item implies there is no maximum value.

    +
  • +
  • +

    allowed – List – a list of legal values. The type of the elements in +the list should match the type of the attribute.

    +
  • +
  • +

    unit - The unit of the value, if one is applicable - e.g. ns, ms, s, +m, h, KB, MB, TB. See the +org.jboss.as.controller.client.helpers.MeasurementUnit in the +org.jboss.as:jboss-as-controller-client artifact for a listing of legal +measurement units..

    +
  • +
  • +

    filesystem-path – boolean – a flag to indicate that the attribute is a +path on the filesystem.

    +
  • +
  • +

    attached-streams – boolean – a flag to indicate that the attribute is a +stream id to an attached stream.

    +
  • +
  • +

    relative-to – boolean – a flag to indicate that the attribute is a +relative path.

    +
  • +
  • +

    feature-reference – boolean – a flag to indicate that the attribute is a +reference to a provisioning feature via a capability.

    +
  • +
+
+
+

Some examples:

+
+
+
+
{
+     "operation-name" => "incrementFoo",
+     "description" => "Increase the value of the 'foo' attribute by the given amount",
+     "request-properties" => {
+          "increment" => {
+               "type" => INT,
+               "description" => "The amount to increment",
+               "required" => true
+     }},
+     "reply-properties" => {
+               "type" => INT,
+               "description" => "The new value",
+     }
+}
+
+
+
+
+
{
+     "operation-name" => "start",
+     "description" => "Starts the thing",
+     "request-properties" => {},
+     "reply-properties" => {}
+}
+
+
+
+
+
Description of Parent/Child Relationships
+
+

The address used to target an addressable portion of the model must be +an ordered list of key value pairs. The effect of this requirement is +the addressable portions of the model naturally form a tree structure, +with parent nodes in the tree defining what the valid keys are and the +children defining what the valid values are. The parent node also +defines the cardinality of the relationship. The description of the +parent node includes a children element that describes these +relationships:

+
+
+
+
{
+     ....
+     "children" => {
+          "connector" => {
+               .... description of the relationship with children of type "connector"
+          },
+          "virtual-host" => {
+               .... description of the relationship with children of type "virtual-host"
+          }
+}
+
+
+
+

The description of each relationship will include the following +elements:

+
+
+
    +
  • +

    description – String – text description of the relationship

    +
  • +
  • +

    model-description – either "undefined" or a complex structure – This +is a node of ModelType.OBJECT, the keys of which are legal values for +the value portion of the address of a resource of this type, with the +special character '*' indicating the value portion can have an arbitrary +value. The values in the node are the full description of the particular +child resource (its text description, attributes, operations, children) +as detailed above. This model-description may also be "undefined", +i.e. a null value, if the query that asked for the parent node’s +description did not include the "recursive" param set to true.

    +
  • +
+
+
+

Example with if the recursive flag was set to true:

+
+
+
+
{
+     "description" => "The connectors used to handle client connections",
+     "model-description" => {
+          "*" => {
+              "description" => "Handles client connections",
+              "min-occurs" => 1,
+              "attributes => {
+                   ... details of children as documented above
+              },
+              "operations" => {
+                   .... details of operations as documented above
+              },
+              "children" => {
+                   .... details of the children's children
+              }
+          }
+     }
+}
+
+
+
+

If the recursive flag was false:

+
+
+
+
{
+     "description" => "The connectors used to handle client connections",
+     "model-description" => undefined
+}
+
+
+
+
+
Applying Updates to Runtime Services
+
+

An attribute or operation description may include a restart-required +descriptor; this section is an explanation of the +meaning of that descriptor.

+
+
+

An operation that changes a management resource’s persistent +configuration usually can also also affect a runtime service associated +with the resource. For example, there is a runtime service associated +with any host.xml or standalone.xml <interface> element; other +services in the runtime depend on that service to provide the +InetAddress associated with the interface. In many cases, an update to +a resource’s persistent configuration can be immediately applied to the +associated runtime service. The runtime service’s state is updated to +reflect the new value(s).

+
+
+

However, in many cases the runtime service’s state cannot be updated +without restarting the service. Restarting a service can have broad +effects. A restart of a service A will trigger a restart of other +services B, C and D that depend on A, triggering a restart of services that +depend on B, C and D, etc. Those service restarts may very well disrupt +handling of end-user requests.

+
+
+

Because restarting a service can be disruptive to end-user request +handling, the handlers for management operations will not restart any +service without some form of explicit instruction from the end user +indicating a service restart is desired. In a few cases, simply +executing the operation is an indication the user wants services to +restart (e.g. a /host=primary/server-config=server-one:restart +operation in a managed domain, or a /:reload operation on a standalone +server.) For all other cases, if an operation (or attribute write) +cannot be performed without restarting a service, the metadata +describing the operation or attribute will include a restart-required +descriptor whose value indicates what is necessary +for the operation to affect the runtime:

+
+
+
    +
  • +

    no-services – Applying the operation to the runtime does not require +the restart of any services. This value is the default if the +restart-required descriptor is not present.

    +
  • +
  • +

    all-services – The operation can only immediately update the +persistent configuration; applying the operation to the runtime will +require a subsequent restart of all services in the affected VM. +Executing the operation will put the server into a reload-required +state. Until a restart of all services is performed the response to this +operation and to any subsequent operation will include a response header +"process-state" ⇒ "reload-required". For a standalone server, a +restart of all services can be accomplished by executing the reload +CLI command. For a server in a managed domain, restarting all services +is done via a reload operation targeting the particular server (e.g. +/host=primary/server=server-one:reload).

    +
  • +
  • +

    jvm --The operation can only immediately update the persistent +configuration; applying the operation to the runtime will require a full +process restart (i.e. stop the JVM and launch a new JVM). Executing the +operation will put the server into a restart-required state. Until +a restart is performed the response to this operation and to any +subsequent operation will include a response header +"process-state" ⇒ "restart-required". For a standalone server, a full +process restart requires first stopping the server via OS-level +operations (Ctrl-C, kill) or via the shutdown CLI command, and then +starting the server again from the command line. For a server in a +managed domain, restarting a server requires executing the +/host=<host>/server-config=<server>:restart operation.

    +
  • +
  • +

    resource-services – The operation can only immediately update the +persistent configuration; applying the operation to the runtime will +require a subsequent restart of some services associated with the +resource. If the operation includes the request header +"allow-resource-service-restart" ⇒ true, the handler for the +operation will go ahead and restart the runtime service. Otherwise +executing the operation will put the server into a reload-required +state. (See the discussion of all-services above for more on the +reload-required state.)

    +
  • +
+
+
+
+
+

10.3.2. Expression Resolution

+
+

When resolving an expression in the model the following locations are checked. +For this example we will use the expression ${my.example-expr}.

+
+
+
    +
  • +

    First we check if there is a system property with the name +my.example-expr. +If there is, we use its value as the result of the resolution. +If not, we continue checking the next locations.

    +
  • +
  • +

    We convert the name my.example-expr to upper case, and replace all +non-alphanumeric characters with underscores, ending up with +MY_EXAMPLE_EXPR. We check if there is an environment variable with that +name. If there is, we use its value as the result of the resolution. +If not, we continue checking the next location.

    +
  • +
+
+
+ + + + + +
+ + +This step was introduced for WildFly 25, and has the scope to introduce some issues in special cases. Say you have an environment variable COMMON_VAR_NAME=foo already in use, and you use ${common-var-name:bar} in the wildfly configuration. Prior to WildFly 25, the default value (i.e. bar) will be used. In WildFly 25 and later, the value from the environment variable (i.e. foo) will be used. +
+
+
+
    +
  • +

    If (and only if) the original name starts with env. we trim the prefix +and look for an environment variable called what we are left with, with no +conversion performed (e.g. if the original name was env.example, we look for +an environment variable called example; if the original name was +env.MY_EXAMPLE_EXPR, we look for an environment variable called MY_EXAMPLE_EXPR). +If there is such an environmet variable, we use its value as the result of the resolution.

    +
  • +
  • +

    If none of the above checks yielded a result, the resolution failed. The +final step is to check if the expression provided a default. Our ${my.example-expr} +example provided no default, so the expression could not be resolved. If +we had specified a default in the expression the default is returned (e.g. for +${my.example-expr:hello}, the value hello is returned).

    +
  • +
+
+
+
+
+

10.4. The HTTP management API

+
+

10.4.1. Introduction

+
+

The Management API in WildFly is accessible through multiple channels, +one of them being HTTP and JSON.

+
+
+

Even if you haven’t used a curl command line you might already have used +this channel since it is how the web console interact with the +Management API.

+
+
+

WildFly is distributed secured by default, the default security +mechanism is username / password based making use of HTTP Digest for +the authentication process.

+
+
+

Thus you need to create a user with the add-user.sh script.

+
+
+
+

10.4.2. Interacting with the model

+
+

Since we must be authenticated , the client will have to support HTTP +Digest authentication.

+
+
+

For example this can be activated in curl using the --digest option.

+
+
+

The WildFly HTTP Management API adheres to the REST principles so the +GET operations must be idempotent.

+
+
+

This means that using a request with method GET can be used to read +the model but you won’t be able to change it.

+
+
+

You must use POST to change the model or read it. A POST request may +contain the operation either in DMR or in JSON format as its body.

+
+
+

You have to define the Content-Type=application/json header in the +request to specify that you are using some JSON.

+
+
+

If you want to submit DMR in the request body then the Content-Type or +the Accept header should be "application/dmr-encoded".

+
+
+
+

10.4.3. GET for Reading

+
+

While you can do everything with POST, some operations can be called +through a 'classical' GET request.

+
+
+

These are the supported operations for a GET :

+
+
+
    +
  • +

    attribute : for a read-attribute operation

    +
  • +
  • +

    resource : for a read-resource operation

    +
  • +
  • +

    resource-description : for a read-resource-description operation

    +
  • +
  • +

    snapshots : for the list-snapshots operation

    +
  • +
  • +

    operation-description : for a read-operation-description operation

    +
  • +
  • +

    operation-names : for ad read-operation-names operation

    +
  • +
+
+
+

The URL format is the following one : http://server:9990/management/ +<path_to_resource>?operation=<operation_name>&operation_parameter=<value>…​

+
+
+

path_to_resource is the path to the wanted resource replacing all '=' +with '/' : thus for example subsystem=undertow/server=default-server +becomes subsystem/undertow/server/default-server.

+
+
+

So to read the server-state :

+
+
+
+
http://localhost:9990/management?operation=attribute&name=server-state&json.pretty=1
+
+
+
+
+

10.4.4. Let’s read some resource

+
+
    +
  • +

    This is simple operation that is equivalent of running +:read-attribute(name=server-state) with CLI in root directory

    +
    +
      +
    • +

      Using GET

      +
      +
      +
      http://localhost:9990/management?operation=attribute&name=server-state&json.pretty=1
      +
      +
      +
    • +
    • +

      Using POST

      +
      +
      +
      $ curl --digest -L -D - http://localhost:9990/management --header "Content-Type: application/json" -d '{"operation":"read-attribute","name":"server-state","json.pretty":1}' -u admin
      +Enter host password for user 'admin':
      +HTTP/1.1 401 Unauthorized
      +Connection: keep-alive
      +WWW-Authenticate: Digest realm="ManagementRealm",domain="/management",nonce="P80WU3BANtQNMTQwNjg5Mzc5MDQ2MlpjmRaZ+Vlp1OVeNEGBeXg=",opaque="00000000000000000000000000000000",algorithm=MD5
      +Content-Length: 77
      +Content-Type: text/html
      +Date: Fri, 01 Aug 2014 11:49:50 GMT
      +
      +HTTP/1.1 200 OK
      +Connection: keep-alive
      +Authentication-Info: nextnonce="M+h9aADejeINMTQwNjg5Mzc5MDQ2OPQbHKdAS8pRE8BbGEDY5uI="
      +Content-Type: application/json; charset=utf-8
      +Content-Length: 55
      +Date: Fri, 01 Aug 2014 11:49:50 GMT
      +
      +{
      +    "outcome" : "success",
      +    "result" : "running"
      +}
      +
      +
      +
    • +
    +
    +
  • +
  • +

    Here’s an example of an operation on a resource with a nested address +and passed parameters. This is same as if you would run +/host=primary/server=server-01:read-attribute(name=server-state)

    +
  • +
+
+
+
+
$ curl --digest -L -D - http://localhost:9990/management --header "Content-Type: application/json" -d '{"operation":"read-attribute","address":[{"host":"primary"},{"server":"server-01"}],"name":"server-state","json.pretty":1}'
+HTTP/1.1 200 OK
+Transfer-encoding: chunked
+Content-type: application/json
+Date: Tue, 17 Apr 2012 04:02:24 GMT
+
+{
+ "outcome" : "success",
+ "result" : "running"
+}
+
+
+
+
    +
  • +

    Following example will get us information from http connection in +undertow subsystem including run-time attributes
    +This is the same as running +/subsystem=undertow/server=default-server:read-resource(include-runtime=true,recursive=true) +in CLI

    +
    +
      +
    • +

      Using GET

      +
      +
      +
      http://localhost:9990/management/subsystem/undertow/server/default-server?operation=resource&recursive=true&json.pretty=1
      +
      +{
      +    "default-host" : "default-host",
      +    "servlet-container" : "default",
      +    "ajp-listener" : null,
      +    "host" : {"default-host" : {
      +        "alias" : ["localhost"],
      +        "default-web-module" : "ROOT.war",
      +        "filter-ref" : {
      +            "server-header" : {"predicate" : null},
      +            "x-powered-by-header" : {"predicate" : null}
      +        },
      +        "location" : {"/" : {
      +            "handler" : "welcome-content",
      +            "filter-ref" : null
      +        }},
      +        "setting" : null
      +    }},
      +    "http-listener" : {"default" : {
      +        "allow-encoded-slash" : false,
      +        "allow-equals-in-cookie-value" : false,
      +        "always-set-keep-alive" : true,
      +        "buffer-pipelined-data" : true,
      +        "buffer-pool" : "default",
      +        "certificate-forwarding" : false,
      +        "decode-url" : true,
      +        "enabled" : true,
      +        "max-buffered-request-size" : 16384,
      +        "max-cookies" : 200,
      +        "max-header-size" : 51200,
      +        "max-headers" : 200,
      +        "max-parameters" : 1000,
      +        "max-post-size" : 10485760,
      +        "proxy-address-forwarding" : false,
      +        "read-timeout" : null,
      +        "receive-buffer" : null,
      +        "record-request-start-time" : false,
      +        "redirect-socket" : "https",
      +        "send-buffer" : null,
      +        "socket-binding" : "http",
      +        "tcp-backlog" : null,
      +        "tcp-keep-alive" : null,
      +        "url-charset" : "UTF-8",
      +        "worker" : "default",
      +        "write-timeout" : null
      +    }},
      +    "https-listener" : null
      +}
      +
      +
      +
    • +
    • +

      Using POST

      +
      +
      +
      $ curl --digest -D - http://localhost:9990/management --header "Content-Type: application/json" -d '{"operation":"read-resource", "include-runtime":"true" , "recursive":"true", "address":["subsystem","undertow","server","default-server"], "json.pretty":1}' -u admin:admin
      +HTTP/1.1 401 Unauthorized
      +Connection: keep-alive
      +WWW-Authenticate: Digest realm="ManagementRealm",domain="/management",nonce="a3paQ9E0/l8NMTQwNjg5OTU0NDk4OKjmim2lopZNc5zCevjYWpk=",opaque="00000000000000000000000000000000",algorithm=MD5
      +Content-Length: 77
      +Content-Type: text/html
      +Date: Fri, 01 Aug 2014 13:25:44 GMT
      +
      +HTTP/1.1 200 OK
      +Connection: keep-alive
      +Authentication-Info: nextnonce="nTOSJd3ufO4NMTQwNjg5OTU0NDk5MeUsRw5rKXUT4Qvk1nbrG5c="
      +Content-Type: application/json; charset=utf-8
      +Content-Length: 1729
      +Date: Fri, 01 Aug 2014 13:25:45 GMT
      +
      +{
      +    "outcome" : "success",
      +    "result" : {
      +        "default-host" : "default-host",
      +        "servlet-container" : "default",
      +        "ajp-listener" : null,
      +        "host" : {"default-host" : {
      +            "alias" : ["localhost"],
      +            "default-web-module" : "ROOT.war",
      +            "filter-ref" : {
      +                "server-header" : {"predicate" : null},
      +                "x-powered-by-header" : {"predicate" : null}
      +            },
      +            "location" : {"/" : {
      +                "handler" : "welcome-content",
      +                "filter-ref" : null
      +            }},
      +            "setting" : null
      +        }},
      +        "http-listener" : {"default" : {
      +            "allow-encoded-slash" : false,
      +            "allow-equals-in-cookie-value" : false,
      +            "always-set-keep-alive" : true,
      +            "buffer-pipelined-data" : true,
      +            "buffer-pool" : "default",
      +            "certificate-forwarding" : false,
      +            "decode-url" : true,
      +            "enabled" : true,
      +            "max-buffered-request-size" : 16384,
      +            "max-cookies" : 200,
      +            "max-header-size" : 51200,
      +            "max-headers" : 200,
      +            "max-parameters" : 1000,
      +            "max-post-size" : 10485760,
      +            "proxy-address-forwarding" : false,
      +            "read-timeout" : null,
      +            "receive-buffer" : null,
      +            "record-request-start-time" : false,
      +            "redirect-socket" : "https",
      +            "send-buffer" : null,
      +            "socket-binding" : "http",
      +            "tcp-backlog" : null,
      +            "tcp-keep-alive" : null,
      +            "url-charset" : "UTF-8",
      +            "worker" : "default",
      +            "write-timeout" : null
      +        }},
      +        "https-listener" : null
      +    }
      +}
      +
      +
      +
    • +
    +
    +
  • +
  • +

    You may also used some encoded DMR but the result won’t be human +readable

    +
    +
    +
    curl --digest -u admin:admin --header "Content-Type: application/dmr-encoded" -d bwAAAAMACW9wZXJhdGlvbnMADXJlYWQtcmVzb3VyY2UAB2FkZHJlc3NsAAAAAAAHcmVjdXJzZVoB  http://localhost:9990/management
    +
    +
    +
  • +
  • +

    You can deploy applications on the server

    +
    +
      +
    • +

      First upload the file which will create a managed content. You will +have to use http://localhost:9990/management/add-content

      +
      +
      +
      curl --digest -u admin:admin --form file=@tiny-webapp.war  http://localhost:9990/management/add-content
      +{"outcome" : "success", "result" : { "BYTES_VALUE" : "+QJlHTDrogO9pm/57GkT/vxWNz0=" }}
      +
      +
      +
    • +
    • +

      Now let’s deploy the application

      +
      +
      +
      curl --digest -u admin:admin -L --header "Content-Type: application/json" -d '{"content":[{"hash": {"BYTES_VALUE" : "+QJlHTDrogO9pm/57GkT/vxWNz0="}}], "address": [{"deployment":"tiny-webapp.war"}], "operation":"add", "enabled":"true"}' http://localhost:9990/management
      +{"outcome" : "success"}
      +
      +
      +
    • +
    +
    +
  • +
+
+
+
+

10.4.5. Using some Jakarta RESTful Web Services code

+
+
+
HttpAuthenticationFeature feature = HttpAuthenticationFeature.digest("admin", "admin");
+Client client = ClientBuilder.newClient();
+client.register(feature);
+Entity<SimpleOperation> operation = Entity.entity(
+    new SimpleOperation("read-resource", true, "subsystem", "undertow", "server", "default-server"),
+    MediaType.APPLICATION_JSON_TYPE);
+WebTarget managementResource = client.target("http://localhost:9990/management");
+String response = managementResource.request(MediaType.APPLICATION_JSON_TYPE)
+    .header("Content-type", MediaType.APPLICATION_JSON)
+    .post(operation, String.class);
+System.out.println(response);
+
+
+{"outcome" : "success", "result" : {"default-host" : "default-host", "servlet-container" : "default", "ajp-listener" : null, "host" : {"default-host" : {"alias" : ["localhost"], "default-web-module" : "ROOT.war", "filter-ref" : {"server-header" : {"predicate" : null}, "x-powered-by-header" : {"predicate" : null}}, "location" : {"/" : {"handler" : "welcome-content", "filter-ref" : null}}, "setting" : null}}, "http-listener" : {"default" : {"allow-encoded-slash" : false, "allow-equals-in-cookie-value" : false, "always-set-keep-alive" : true, "buffer-pipelined-data" : true, "buffer-pool" : "default", "certificate-forwarding" : false, "decode-url" : true, "enabled" : true, "max-buffered-request-size" : 16384, "max-cookies" : 200, "max-header-size" : 51200, "max-headers" : 200, "max-parameters" : 1000, "max-post-size" : 10485760, "proxy-address-forwarding" : false, "read-timeout" : null, "receive-buffer" : null, "record-request-start-time" : false, "redirect-socket" : "https", "send-buffer" : null, "socket-binding" : "http", "tcp-backlog" : null, "tcp-keep-alive" : null, "url-charset" : "UTF-8", "worker" : "default", "write-timeout" : null}}, "https-listener" : null}}
+
+
+
+
+
+

10.5. The native management API

+
+

A standalone WildFly process, or a managed domain Domain Controller or +secondary Host Controller process can be configured to listen for remote +management requests using its "native management interface":

+
+
+
+
<native-interface interface="management" port="9999" sasl-authentication-factory="management-sasl-authentication"/>
+
+
+
+

~(See standalone/configuration/standalone.xml or +domain/configuration/host.xml)~

+
+
+

The CLI tool that comes with the application server uses this interface, +and user can develop custom clients that use it as well. In this section +we’ll cover the basics on how to develop such a client. We’ll also cover +details on the format of low-level management operation requests and +responses – information that should prove useful for users of the CLI +tool as well.

+
+
+

10.5.1. Native Management Client Dependencies

+
+

The native management interface uses an open protocol based on the JBoss +Remoting library. JBoss Remoting is used to establish a communication +channel from the client to the process being managed. Once the +communication channel is established the primary traffic over the +channel is management requests initiated by the client and asynchronous +responses from the target process.

+
+
+

A custom Java-based client should have the maven artifact +org.jboss.as:jboss-as-controller-client and its dependencies on the +classpath. The other dependencies are:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Maven ArtifactPurpose

org.jboss.remoting:jboss-remoting

Remote communication

org.jboss:jboss-dmr

Detyped representation of the management model

org.jboss.as:jboss-as-protocol

Wire protocol for remote WildFly +management

org.jboss.sasl:jboss-sasl

SASL authentication

org.jboss.xnio:xnio-api

Non-blocking IO

org.jboss.xnio:xnio-nio

Non-blocking IO

org.jboss.logging:jboss-logging

Logging

org.jboss.threads:jboss-threads

Thread management

org.jboss.marshalling:jboss-marshalling

Marshalling and unmarshalling +data to/from streams

+
+

The client API is entirely within the +org.jboss.as:jboss-as-controller-client artifact; the other +dependencies are part of the internal implementation of +org.jboss.as:jboss-as-controller-client and are not compile-time +dependencies of any custom client based on it.

+
+
+

The management protocol is an open protocol, so a completely custom +client could be developed without using these libraries (e.g. using +Python or some other language.)

+
+
+
+

10.5.2. Working with a ModelControllerClient

+
+

The org.jboss.as.controller.client.ModelControllerClient class is the +main class a custom client would use to manage a WildFly server instance +or a Domain Controller or secondary Host Controller.

+
+
+

The custom client must have maven artifact +org.jboss.as:jboss-as-controller-client and its dependencies on the +classpath.

+
+
+
Creating the ModelControllerClient
+
+

To create a management client that can connect to your target process’s +native management socket, simply:

+
+
+
+
ModelControllerClient client = ModelControllerClient.Factory.create(InetAddress.getByName("localhost"), 9999);
+
+
+
+

The address and port are what is configured in the target process' +<management><management-interfaces><native-interface…​/> element.

+
+
+

Typically, however, the native management interface will be secured, +requiring clients to authenticate. On the client side, the custom client +will need to provide the user’s authentication credentials, obtained in +whatever manner is appropriate for the client (e.g. from a dialog box in +a GUI-based client.) Access to these credentials is provided by passing +in an implementation of the +javax.security.auth.callback.CallbackHandler interface. For example:

+
+
+
+
static ModelControllerClient createClient(final InetAddress host, final int port,
+                  final String username, final char[] password, final String securityRealmName) {
+ 
+    final CallbackHandler callbackHandler = new CallbackHandler() {
+ 
+        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+            for (Callback current : callbacks) {
+                if (current instanceof NameCallback) {
+                    NameCallback ncb = (NameCallback) current;
+                    ncb.setName(username);
+                } else if (current instanceof PasswordCallback) {
+                    PasswordCallback pcb = (PasswordCallback) current;
+                    pcb.setPassword(password.toCharArray());
+                } else if (current instanceof RealmCallback) {
+                    RealmCallback rcb = (RealmCallback) current;
+                    rcb.setText(rcb.getDefaultText());
+                } else {
+                    throw new UnsupportedCallbackException(current);
+                }
+            }
+        }
+    };
+ 
+    return ModelControllerClient.Factory.create(host, port, callbackHandler);
+}
+
+
+
+
+
Creating an operation request object
+
+

Management requests are formulated using the org.jboss.dmr.ModelNode +class from the jboss-dmr library. The jboss-dmr library allows the +complete WildFly management model to be expressed using a very small +number of Java types. See +Detyped +management and the jboss-dmr library for full details on using this +library.

+
+
+

Let’s show an example of creating an operation request object that can +be used to +read +the resource description for the web subsystem’s HTTP connector:

+
+
+
+
ModelNode op = new ModelNode();
+op.get("operation").set("read-resource-description");
+ 
+ModelNode address = op.get("address");
+address.add("subsystem", "web");
+address.add("connector", "http");
+ 
+op.get("recursive").set(true);
+op.get("operations").set(true);
+
+
+
+

What we’ve done here is created a ModelNode of type ModelType.OBJECT +with the following fields:

+
+
+
    +
  • +

    operation – the name of the operation to invoke. All operation +requests must include this field and its value must be a String.

    +
  • +
  • +

    address – the address of the resource to invoke the operation +against. This field’s must be of ModelType.LIST with each element in +the list being a ModelType.PROPERTY. If this field is omitted the +operation will target the root resource. The operation can be targeted +at any address in the management model; here we are targeting it at the +resource for the web subsystem’s http connector.

    +
  • +
+
+
+

In this case, the request includes two optional parameters:

+
+
+
    +
  • +

    recursive – true means you want the description of child resources +under this resource. Default is false

    +
  • +
  • +

    operations – true means you want the description of operations +exposed by the resource to be included. Default is false.

    +
  • +
+
+
+

Different operations take different parameters, and some take no +parameters at all.

+
+
+

See Format of a +Detyped Operation Request for full details on the structure of a +ModelNode that will represent an operation request.

+
+
+

The example above produces an operation request ModelNode equivalent to +what the CLI produces internally when it parses and executes the +following low-level CLI command:

+
+
+
+
[localhost:9999 /] /subsystem=web/connector=http:read-resource-description(recursive=true,operations=true)
+
+
+
+
+
Execute the operation and manipulate the result:
+
+

The execute method sends the operation request ModelNode to the +process being managed and returns a ModelNode the contains the process' +response:

+
+
+
+
ModelNode returnVal = client.execute(op);
+System.out.println(returnVal.get("result").toString());
+
+
+
+

See Format of a +Detyped Operation Response for general details on the structure of the +"returnVal" ModelNode.

+
+
+

The execute operation shown above will block the calling thread until +the response is received from the process being managed. +ModelControllerClient also exposes and API allowing asynchronous +invocation:

+
+
+
+
Future<ModelNode> future = client.executeAsync(op);
+. . .  // do other stuff
+ModelNode returnVal = future.get();
+System.out.println(returnVal.get("result").toString());
+
+
+
+
+
Close the ModelControllerClient
+
+

A ModelControllerClient can be reused for multiple requests. Creating +a new ModelControllerClient for each request is an anti-pattern. +However, when the ModelControllerClient is no longer needed, it should +always be explicitly closed, allowing it to close down any connections +to the process it was managing and release other resources:

+
+
+
+
client.close();
+
+
+
+
+
+

10.5.3. Format of a Detyped Operation Request

+
+

The basic method a user of the WildFly 29 programmatic management API +would use is very simple:

+
+
+
+
ModelNode execute(ModelNode operation) throws IOException;
+
+
+
+

where the return value is the detyped representation of the response, +and operation is the detyped representation of the operation being +invoked.

+
+
+

The purpose of this section is to document the structure of operation.

+
+
+

See Format of a +Detyped Operation Response for a discussion of the format of the +response.

+
+
+
Simple Operations
+
+

A text representation of simple operation would look like this:

+
+
+
+
{
+    "operation" => "write-attribute",
+    "address" => [
+        ("profile" => "production"),
+        ("subsystem" => "threads"),
+        ("bounded-queue-thread-pool" => "pool1")
+    ],
+    "name" => "count",
+    "value" => 20
+}
+
+
+
+

Java code to produce that output would be:

+
+
+
+
ModelNode op = new ModelNode();
+op.get("operation").set("write-attribute");
+ModelNode addr = op.get("address");
+addr.add("profile", "production");
+addr.add("subsystem", "threads");
+addr.add("bounded-queue-thread-pool", "pool1");
+op.get("name").set("count");
+op.get("value").set(20);
+System.out.println(op);
+
+
+
+

The order in which the outermost elements appear in the request is not +relevant. The required elements are:

+
+
+
    +
  • +

    operation – String – The name of the operation being invoked.

    +
  • +
  • +

    address – the address of the managed resource against which the +request should be executed. If not set, the address is the root +resource. The address is an ordered list of key-value pairs describing +where the resource resides in the overall management resource tree. +Management resources are organized in a tree, so the order in which +elements in the address occur is important.

    +
  • +
+
+
+

The other key/value pairs are parameter names and their values. The +names and values should match what is specified in the +operation’s +description.

+
+
+

Parameters may have any name, except for the reserved words operation, +address and operation-headers.

+
+
+
+
Operation Headers
+
+

Besides the special operation and address values discussed above, +operation requests can also include special "header" values that help +control how the operation executes. These headers are created under the +special reserved word operation-headers:

+
+
+
+
ModelNode op = new ModelNode();
+op.get("operation").set("write-attribute");
+ModelNode addr = op.get("address");
+addr.add("base", "domain");
+addr.add("profile", "production");
+addr.add("subsystem", "threads");
+addr.add("bounded-queue-thread-pool", "pool1");
+op.get("name").set("count");
+op.get("value").set(20);
+op.get("operation-headers", "rollback-on-runtime-failure").set(false);
+System.out.println(op);
+
+
+
+

This produces:

+
+
+
+
{
+    "operation" => "write-attribute",
+    "address" => [
+        ("profile" => "production"),
+        ("subsystem" => "threads"),
+        ("bounded-queue-thread-pool" => "pool1")
+    ],
+    "name" => "count",
+    "value" => 20,
+    "operation-headers" => {
+        "rollback-on-runtime-failure => false
+    }
+}
+
+
+
+

The following operation headers are supported:

+
+
+
    +
  • +

    rollback-on-runtime-failure – boolean, optional, defaults to true. +Whether an operation that successfully updates the persistent +configuration model should be reverted if it fails to apply to the +runtime. Operations that affect the persistent configuration are applied +in two stages – first to the configuration model and then to the actual +running services. If there is an error applying to the configuration +model the operation will be aborted with no configuration change and no +change to running services will be attempted. However, operations are +allowed to change the configuration model even if there is a failure to +apply the change to the running services – if and only if this +rollback-on-runtime-failure header is set to false. So, this header +only deals with what happens if there is a problem applying an operation +to the running state of a server (e.g. actually increasing the size of a +runtime thread pool.)

    +
  • +
  • +

    rollout-plan – only relevant to requests made to a Domain Controller +or Host Controller. See " +Operations with a +Rollout Plan" for details.

    +
  • +
  • +

    allow-resource-service-restart – boolean, optional, defaults to +false. Whether an operation that requires restarting some runtime +services in order to take effect should do so. See discussion of +resource-services in the +"Applying +Updates to Runtime Services" section of the Description of the +Management Model section for further details.

    +
  • +
  • +

    roles – String or list of strings. Name(s) of RBAC role(s) the +permissions for which should be used when making access control +decisions instead of those from the roles normally associated with the +user invoking the operation. Only respected if the user is normally +associated with a role with all permissions (i.e. SuperUser), meaning +this can only be used to reduce permissions for a caller, not to +increase permissions.

    +
  • +
  • +

    blocking-timeout – int, optional, defaults to 300. Maximum time, in +seconds, that the operation should block at various points waiting for +completion. If this period is exceeded, the operation will roll back. +Does not represent an overall maximum execution time for an operation; +rather it is meant to serve as a sort of fail-safe measure to prevent +problematic operations indefinitely tying up resources.

    +
  • +
+
+
+
+
Composite Operations
+
+

The root resource for a Domain or Host Controller or an individual +server will expose an operation named " `composite`". This operation +executes a list of other operations as an atomic unit (although the +atomicity requirement can be +relaxed. +The structure of the request for the " `composite`" operation has the +same fundamental structure as a simple operation (i.e. operation name, +address, params as key value pairs).

+
+
+
+
{
+    "operation" => "composite",
+    "address" => [],
+    "steps" => [
+         {
+              "operation" => "write-attribute",
+              "address" => [
+                   ("profile" => "production"),
+                   ("subsystem" => "threads"),
+                   ("bounded-queue-thread-pool" => "pool1")
+              ],
+              "count" => "count",
+              "value" => 20
+         },
+         {
+              "operation" => "write-attribute",
+              "address" => [
+                   ("profile" => "production"),
+                   ("subsystem" => "threads"),
+                   ("bounded-queue-thread-pool" => "pool2")
+              ],
+              "name" => "count",
+              "value" => 10
+         }
+    ],
+    "operation-headers" => {
+        "rollback-on-runtime-failure => false
+    }
+}
+
+
+
+

The "composite" operation takes a single parameter:

+
+
+
    +
  • +

    steps – a list, where each item in the list has the same structure +as a simple operation request. In the example above each of the two +steps is modifying the thread pool configuration for a different pool. +There need not be any particular relationship between the steps. Note +that the rollback-on-runtime-failure and rollout-plan operation +headers are not supported for the individual steps in a composite +operation.

    +
    +
    +
     +
    +The `rollback-on-runtime-failure` operation header discussed above has a
    +particular meaning when applied to a composite operation, controlling
    +whether steps that successfully execute should be reverted if other
    +steps fail at runtime. Note that if any steps modify the persistent
    +configuration, and any of those steps fail, all steps will be reverted.
    +Partial/incomplete changes to the persistent configuration are not
    +allowed.
    +
    +
    +
  • +
+
+
+
+
Operations with a Rollout Plan
+
+

Operations targeted at domain or host level resources can potentially +impact multiple servers. Such operations can include a "rollout plan" +detailing the sequence in which the operation should be applied to +servers as well as policies for detailing whether the operation should +be reverted if it fails to execute successfully on some servers.

+
+
+

If the operation includes a rollout plan, the structure is as follows:

+
+
+
+
{
+    "operation" => "write-attribute",
+    "address" => [
+        ("profile" => "production"),
+        ("subsystem" => "threads"),
+        ("bounded-queue-thread-pool" => "pool1")
+    ],
+    "name" => "count",
+    "value" => 20,
+    "operation-headers" => {
+        "rollout-plan" => {
+            "in-series" => [
+                {
+                    "concurrent-groups" => {
+                        "groupA" => {
+                            "rolling-to-servers" => true,
+                            "max-failure-percentage" => 20
+                        },
+                        "groupB" => undefined
+                    }
+                },
+                {
+                   "server-group" => {
+                        "groupC" => {
+                            "rolling-to-servers" => false,
+                            "max-failed-servers" => 1
+                        }
+                    }
+                },
+                {
+                    "concurrent-groups" => {
+                        "groupD" => {
+                            "rolling-to-servers" => true,
+                            "max-failure-percentage" => 20
+                        },
+                        "groupE" => undefined
+                    }
+                }
+            ],
+            "rollback-across-groups" => true
+        }
+    }
+}
+
+
+
+

As you can see, the rollout plan is another structure in the +operation-headers section. The root node of the structure allows two +children:

+
+
+
    +
  • +

    in-series – a list – A list of activities that are to be performed +in series, with each activity reaching completion before the next step +is executed. Each activity involves the application of the operation to +the servers in one or more server groups. See below for details on each +element in the list.

    +
  • +
  • +

    rollback-across-groups – boolean – indicates whether the need to +rollback the operation on all the servers in one server group should +trigger a rollback across all the server groups. This is an optional +setting, and defaults to false.

    +
  • +
+
+
+

Each element in the list under the in-series node must have one or the +other of the following structures:

+
+
+
    +
  • +

    concurrent-groups – a map of server group names to policies +controlling how the operation should be applied to that server group. +For each server group in the map, the operation may be applied +concurrently. See below for details on the per-server-group policy +configuration.

    +
  • +
  • +

    server-group – a single key/value mapping of a server group name to +a policy controlling how the operation should be applied to that server +group. See below for details on the policy configuration. (Note: there +is no difference in plan execution between this and a " +`concurrent-groups`" map with a single entry.)

    +
  • +
+
+
+

The policy controlling how the operation is applied to the servers +within a server group has the following elements, each of which is +optional:

+
+
+
    +
  • +

    rolling-to-servers – boolean – If true, the operation will be +applied to each server in the group in series. If false or not +specified, the operation will be applied to the servers in the group +concurrently.

    +
  • +
  • +

    max-failed-servers – int – Maximum number of servers in the group +that can fail to apply the operation before it should be reverted on all +servers in the group. The default value if not specified is zero; i.e. +failure on any server triggers rollback across the group.

    +
  • +
  • +

    max-failure-percentage – int between 0 and 100 – Maximum percentage +of the total number of servers in the group that can fail to apply the +operation before it should be reverted on all servers in the group. The +default value if not specified is zero; i.e. failure on any server +triggers rollback across the group.

    +
  • +
+
+
+

If both max-failed-servers and max-failure-percentage are set, +max-failure-percentage takes precedence.

+
+
+

Looking at the (contrived) example above, application of the operation +to the servers in the domain would be done in 3 phases. If the policy +for any server group triggers a rollback of the operation across the +server group, all other server groups will be rolled back as well. The 3 +phases are:

+
+
+
    +
  1. +

    Server groups groupA and groupB will have the operation applied +concurrently. The operation will be applied to the servers in groupA in +series, while all servers in groupB will handle the operation +concurrently. If more than 20% of the servers in groupA fail to apply +the operation, it will be rolled back across that group. If any servers +in groupB fail to apply the operation it will be rolled back across that +group.

    +
  2. +
  3. +

    Once all servers in groupA and groupB are complete, the operation +will be applied to the servers in groupC. Those servers will handle the +operation concurrently. If more than one server in groupC fails to apply +the operation it will be rolled back across that group.

    +
  4. +
  5. +

    Once all servers in groupC are complete, server groups groupD and +groupE will have the operation applied concurrently. The operation will +be applied to the servers in groupD in series, while all servers in +groupE will handle the operation concurrently. If more than 20% of the +servers in groupD fail to apply the operation, it will be rolled back +across that group. If any servers in groupE fail to apply the operation +it will be rolled back across that group.

    +
  6. +
+
+
+
Default Rollout Plan
+
+

All operations that impact multiple servers will be executed with a +rollout plan. However, actually specifying the rollout plan in the +operation request is not required. If no rollout-plan operation header +is specified, a default plan will be generated. The plan will have the +following characteristics:

+
+
+
    +
  • +

    There will only be a single high level phase. All server groups +affected by the operation will have the operation applied concurrently.

    +
  • +
  • +

    Within each server group, the operation will be applied to all servers +concurrently.

    +
  • +
  • +

    Failure on any server in a server group will cause rollback across the +group.

    +
  • +
  • +

    Failure of any server group will result in rollback of all other +server groups.

    +
  • +
+
+
+
+
Creating and reusing a Rollout Plan
+
+

Since a rollout plan may be quite complex, having to pass it as a header +every time can become quickly painful. So instead we can store it in the +model and then reference it when we want to use it.
+To create a rollout plan you can use the operation rollout-plan add +like this :

+
+
+
+
rollout-plan add --name=simple --content={"rollout-plan" => {"in-series" => [{"server-group" => {"main-server-group" => {"rolling-to-servers" => false,"max-failed-servers" => 1}}}, {"server-group" => {"other-server-group" => {"rolling-to-servers" => true,"max-failure-percentage" => 20}}}],"rollback-across-groups" => true}}
+
+
+
+

This will create a rollout plan called simple in the content +repository.

+
+
+
+
[domain@192.168.1.20:9999 /] /management-client-content=rollout-plans/rollout-plan=simple:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "content" => {"rollout-plan" => {
+            "in-series" => [
+                {"server-group" => {"main-server-group" => {
+                    "rolling-to-servers" => false,
+                    "max-failed-servers" => 1
+                }}},
+                {"server-group" => {"other-server-group" => {
+                    "rolling-to-servers" => true,
+                    "max-failure-percentage" => 20
+                }}}
+            ],
+            "rollback-across-groups" => true
+        }},
+        "hash" => bytes {
+            0x13, 0x12, 0x76, 0x65, 0x8a, 0x28, 0xb8, 0xbc,
+            0x34, 0x3c, 0xe9, 0xe6, 0x9f, 0x24, 0x05, 0xd2,
+            0x30, 0xff, 0xa4, 0x34
+        }
+    }
+}
+
+
+
+

Now you may reference the roolout plan in your command by adding a +header just like this :

+
+
+
+
deploy /quickstart/ejb-in-war/target/wildfly-ejb-in-war.war --all-server-groups --headers={rollout name=simple}
+
+
+
+
+
+
+

10.5.4. Format of a Detyped Operation Response

+
+

As noted previously, the basic method a user of the WildFly 29 +programmatic management API would use is very simple:

+
+
+
+
ModelNode execute(ModelNode operation) throws IOException;
+
+
+
+

where the return value is the detyped representation of the response, +and operation is the detyped representation of the operating being +invoked.

+
+
+

The purpose of this section is to document the structure of the return +value.

+
+
+

For the format of the request, see +Format of a +Detyped Operation Request.

+
+
+
Simple Responses
+
+

Simple responses are provided by the following types of operations:

+
+
+
    +
  • +

    Non-composite operations that target a single server. (See below for +more on composite operations).

    +
  • +
  • +

    Non-composite operations that target a Domain Controller or secondary Host +Controller and don’t require the responder to apply the operation on +multiple servers and aggregate their results (e.g. a simple read of a +domain configuration property.)

    +
  • +
+
+
+

The response will always include a simple boolean outcome field, with +one of three possible values:

+
+
+
    +
  • +

    success – the operation executed successfully

    +
  • +
  • +

    failed – the operation failed

    +
  • +
  • +

    cancelled – the execution of the operation was cancelled. (This +would be an unusual outcome for a simple operation which would generally +very rapidly reach a point in its execution where it couldn’t be +cancelled.)

    +
  • +
+
+
+

The other fields in the response will depend on whether the operation +was successful.

+
+
+

The response for a failed operation:

+
+
+
+
{
+    "outcome" => "failed",
+    "failure-description" => "[JBAS-12345] Some failure message"
+}
+
+
+
+

A response for a successful operation will include an additional field:

+
+
+
    +
  • +

    result – the return value, or undefined for void operations or +those that return null

    +
  • +
+
+
+

A non-void result:

+
+
+
+
{
+    "outcome" => "success",
+    "result" => {
+        "name" => "Brian",
+        "age" => 22
+    }
+}
+
+
+
+

A void result:

+
+
+
+
{
+    "outcome" => "success",
+    "result" => undefined
+}
+
+
+
+

The response for a cancelled operation has no other fields:

+
+
+
+
{
+    "outcome" => "cancelled"
+}
+
+
+
+
+
Response Headers
+
+

Besides the standard outcome, result and failure-description +fields described above, the response may also include various headers +that provide more information about the affect of the operation or about +the overall state of the server. The headers will be child element under +a field named response-headers. For example:

+
+
+
+
{
+    "outcome" => "success",
+    "result" => undefined,
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+

A response header is typically related to whether an operation could be +applied to the targeted runtime without requiring a restart of some or +all services, or even of the target process itself. Please see the +"Applying +Updates to Runtime Services" section of the Description of the +Management Model section for a discussion of the basic concepts related +to what happens if an operation requires a service restart to be +applied.

+
+
+

The current possible response headers are:

+
+
+
    +
  • +

    operation-requires-reload – boolean – indicates that the specific +operation that has generated this response requires a restart of all +services in the process in order to take effect in the runtime. This +would typically only have a value of 'true'; the absence of the header +is the same as a value of 'false.'

    +
  • +
  • +

    operation-requires-restart – boolean – indicates that the specific +operation that has generated this response requires a full process +restart in order to take effect in the runtime. This would typically +only have a value of 'true'; the absence of the header is the same as a +value of 'false.'

    +
  • +
  • +

    process-state – enumeration – Provides information about the overall +state of the target process. One of the following values:

    +
    +
      +
    • +

      starting – the process is starting

      +
    • +
    • +

      running – the process is in a normal running state. The +process-state header would typically not be seen with this value; the +absence of the header is the same as a value of 'running'.

      +
    • +
    • +

      reload-required – some operation (not necessarily this one) has +executed that requires a restart of all services in order for a +configuration change to take effect in the runtime.

      +
    • +
    • +

      restart-required – some operation (not necessarily this one) has +executed that requires a full process restart in order for a +configuration change to take effect in the runtime.

      +
    • +
    • +

      stopping – the process is stopping

      +
    • +
    +
    +
  • +
+
+
+
+
Basic Composite Operation Responses
+
+

A composite operation is one that incorporates more than one simple +operation in a list and executes them atomically. See the +"Composite +Operations" section for more information.

+
+
+

Basic composite responses are provided by the following types of +operations:

+
+
+
    +
  • +

    Composite operations that target a single server.

    +
  • +
  • +

    Composite operations that target a Domain Controller or a secondary Host +Controller and don’t require the responder to apply the operation on +multiple servers and aggregate their results (e.g. a list of simple +reads of domain configuration properties.)

    +
  • +
+
+
+

The high level format of a basic composite operation response is largely +the same as that of a simple operation response, although there is an +important semantic difference. For a composite operation, the meaning of +the outcome flag is controlled by the value of the operation request’s +rollback-on-runtime-failure header field. If that field was false +(default is true), the outcome flag will be success if all steps were +successfully applied to the persistent configuration even if none of +the composite operation’s steps was successfully applied to the runtime.

+
+
+

What’s distinctive about a composite operation response is the result +field. First, even if the operation was not successful, the result +field will usually be present. (It won’t be present if there was some +sort of immediate failure that prevented the responder from even +attempting to execute the individual operations.) Second, the content of +the result field will be a map. Each entry in the map will record the +result of an element in the steps parameter of the composite operation +request. The key for each item in the map will be the string " step-X`" +where "X" is the 1-based index of the step’s position in the request’s +`steps list. So each individual operation in the composite operation +will have its result recorded.

+
+
+

The individual operation results will have the same basic format as the +simple operation results described above. However, there are some +differences from the simple operation case when the individual +operation’s outcome flag is failed. These relate to the fact that in +a composite operation, individual operations can be rolled back or not +even attempted.

+
+
+

If an individual operation was not even attempted (because the overall +operation was cancelled or, more likely, a prior operation failed):

+
+
+
+
{
+    "outcome" => "cancelled"
+}
+
+
+
+

An individual operation that failed and was rolled back:

+
+
+
+
{
+    "outcome" => "failed",
+    "failure-description" => "[JBAS-12345] Some failure message",
+    "rolled-back" => true
+}
+
+
+
+

An individual operation that itself succeeded but was rolled back due to +failure of another operation:

+
+
+
+
{
+    "outcome" => "failed",
+    "result" => {
+        "name" => "Brian",
+        "age" => 22
+    },
+    "rolled-back" => true
+}
+
+
+
+

An operation that failed and was rolled back:

+
+
+
+
{
+    "outcome" => "failed",
+    "failure-description" => "[JBAS-12345] Some failure message",
+    "rolled-back" => true
+}
+
+
+
+

Here’s an example of the response for a successful 2 step composite +operation:

+
+
+
+
{
+    "outcome" => "success",
+    "result" => [
+        {
+            "outcome" => "success",
+            "result" => {
+                "name" => "Brian",
+                "age" => 22
+            }
+        },
+        {
+            "outcome" => "success",
+            "result" => undefined
+        }
+    ]
+}
+
+
+
+

And for a failed 3 step composite operation, where the first step +succeeded and the second failed, triggering cancellation of the 3rd and +rollback of the others:

+
+
+
+
{
+    "outcome" => "failed",
+    "failure-description" => "[JBAS-99999] Composite operation failed; see individual operation results for details",
+    "result" => [
+        {
+            "outcome" => "failed",
+            "result" => {
+                "name" => "Brian",
+                "age" => 22
+            },
+            "rolled-back" => true
+        },
+        {
+            "outcome" => "failed",
+            "failure-description" => "[JBAS-12345] Some failure message",
+            "rolled-back" => true
+        },
+        {
+            "outcome" => "cancelled"
+        }
+    ]
+}
+
+
+
+
+
Multi-Server Responses
+
+

Multi-server responses are provided by operations that target a Domain +Controller or secondary Host Controller and require the responder to apply +the operation on multiple servers and aggregate their results (e.g. +nearly all domain or host configuration updates.)

+
+
+

Multi-server operations are executed in several stages.

+
+
+

First, the operation may need to be applied against the authoritative +configuration model maintained by the Domain Controller (for +domain.xml confgurations) or a Host Controller (for a host.xml +configuration). If there is a failure at this stage, the operation is +automatically rolled back, with a response like this:

+
+
+
+
{
+    "outcome" => "failed",
+    "failure-description" => {
+        "domain-failure-description" => "[JBAS-33333] Failed to apply X to the domain model"
+    }
+}
+
+
+
+

If the operation was addressed to the domain model, in the next stage +the Domain Controller will ask each secondary Host Controller to apply it to +its local copy of the domain model. If any Host Controller fails to do +so, the Domain Controller will tell all Host Controllers to revert the +change, and it will revert the change locally as well. The response to +the client will look like this:

+
+
+
+
{
+    "outcome" => "failed",
+    "failure-description" => {
+        "host-failure-descriptions" => {
+            "hostA" => "[DOM-3333] Failed to apply to the domain model",
+            "hostB" => "[DOM-3333] Failed to apply to the domain model"
+        }
+    }
+}
+
+
+
+

If the preceding stages succeed, the operation will be pushed to all +affected servers. If the operation is successful on all servers, the +response will look like this (this example operation has a void +response, hence the result for each server is undefined):

+
+
+
+
{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {
+        "groupA" => {
+            "serverA-1" => {
+                "host" => "host1",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined
+                }
+            },
+            "serverA-2" => {
+                "host" => "host2",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined
+                }
+            }
+        },
+        "groupB" => {
+            "serverB-1" => {
+                "host" => "host1",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined
+                }
+            },
+            "serverB-2" => {
+                "host" => "host2",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined
+                }
+            }
+        }
+    }
+}
+
+
+
+

The operation need not succeed on all servers in order to get an +"outcome" ⇒ "success" result. All that is required is that it succeed +on at least one server without the rollback policies in the rollout plan +triggering a rollback on that server. An example response in such a +situation would look like this:

+
+
+
+
{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {
+        "groupA" => {
+            "serverA-1" => {
+                "host" => "host1",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined
+                }
+            },
+            "serverA-2" => {
+                "host" => "host2",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined
+                }
+            }
+        },
+        "groupB" => {
+            "serverB-1" => {
+                "host" => "host1",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined,
+                    "rolled-back" => true
+                }
+            },
+            "serverB-2" => {
+                "host" => "host2",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined,
+                    "rolled-back" => true
+                }
+            },
+            "serverB-3" => {
+                "host" => "host3",
+                "response" => {
+                    "outcome" => "failed",
+                    "failure-description" => "[DOM-4556] Something didn't work right",
+                    "rolled-back" => true
+                }
+            }
+        }
+    }
+}
+
+
+
+

Finally, if the operation fails or is rolled back on all servers, an +example response would look like this:

+
+
+
+
{
+    "outcome" => "failed",
+    "server-groups" => {
+        "groupA" => {
+            "serverA-1" => {
+                "host" => "host1",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined
+                }
+            },
+            "serverA-2" => {
+                "host" => "host2",
+                "response" => {
+                    "outcome" => "success",
+                    "result" => undefined
+                }
+            }
+        },
+        "groupB" => {
+            "serverB-1" => {
+                "host" => "host1",
+                "response" => {
+                    "outcome" => "failed",
+                    "result" => undefined,
+                    "rolled-back" => true
+                }
+            },
+            "serverB-2" => {
+                "host" => "host2",
+                "response" => {
+                    "outcome" => "failed",
+                    "result" => undefined,
+                    "rolled-back" => true
+                }
+            },
+            "serverB-3" => {
+                "host" => "host3",
+                "response" => {
+                    "outcome" => "failed",
+                    "failure-description" => "[DOM-4556] Something didn't work right",
+                    "rolled-back" => true
+                }
+            }
+        }
+    }
+}
+
+
+
+
+
+
+
+
+

11. CLI Recipes

+
+
+

11.1. Properties

+
+

11.1.1. Adding, reading and removing system property using CLI

+
+

For standalone mode:

+
+
+
+
$ ./bin/jboss-cli.sh --connect controller=IP_ADDRESS
+[standalone@IP_ADDRESS:9990 /] /system-property=foo:add(value=bar)
+[standalone@IP_ADDRESS:9990 /] /system-property=foo:read-resource
+{
+    "outcome" => "success",
+    "result" => {"value" => "bar"}
+}
+[standalone@IP_ADDRESS:9990 /] /system-property=foo:remove
+{"outcome" => "success"}
+
+
+
+

For domain mode the same commands are used, you can add/read/remove +system properties for:
+All hosts and server instances in domain

+
+
+
+
[domain@IP_ADDRESS:9990 /] /system-property=foo:add(value=bar)
+[domain@IP_ADDRESS:9990 /] /system-property=foo:read-resource
+[domain@IP_ADDRESS:9990 /] /system-property=foo:remove
+
+
+
+

Host and its server instances

+
+
+
+
[domain@IP_ADDRESS:9990 /] /host=primary/system-property=foo:add(value=bar)
+[domain@IP_ADDRESS:9990 /] /host=primary/system-property=foo:read-resource
+[domain@IP_ADDRESS:9990 /] /host=primary/system-property=foo:remove
+
+
+
+

Just one server instance

+
+
+
+
[domain@IP_ADDRESS:9990 /] /host=primary/server-config=server-one/system-property=foo:add(value=bar)
+[domain@IP_ADDRESS:9990 /] /host=primary/server-config=server-one/system-property=foo:read-resource
+[domain@IP_ADDRESS:9990 /] /host=primary/server-config=server-one/system-property=foo:remove
+
+
+
+
+

11.1.2. Overview of all system properties

+
+

Overview of all system properties in WildFly including OS system +properties and properties specified on command line using -D, -P or +--properties arguments.

+
+
+

Standalone

+
+
+
+
[standalone@IP_ADDRESS:9990 /] /core-service=platform-mbean/type=runtime:read-attribute(name=system-properties)
+
+
+
+

Domain

+
+
+
+
[domain@IP_ADDRESS:9990 /] /host=primary/core-service=platform-mbean/type=runtime:read-attribute(name=system-properties)
+[domain@IP_ADDRESS:9990 /] /host=primary/server=server-one/core-service=platform-mbean/type=runtime:read-attribute(name=system-properties)
+
+
+
+
+
+

11.2. Configuration

+
+

11.2.1. List Subsystems

+
+
+
[standalone@localhost:9990 /] /:read-children-names(child-type=subsystem)
+{
+    "outcome" => "success",
+    "result" => [
+        "batch",
+        "datasources",
+        "deployment-scanner",
+        "ee",
+        "ejb3",
+        "infinispan",
+        "io",
+        "jaxrs",
+        "jca",
+        "jdr",
+        "jmx",
+        "jpa",
+        "jsf",
+        "logging",
+        "mail",
+        "naming",
+        "pojo",
+        "remoting",
+        "resource-adapters",
+        "sar",
+        "security",
+        "threads",
+        "transactions",
+        "undertow",
+        "webservices",
+        "weld"
+    ]
+}
+
+
+
+
+

11.2.2. List description of available attributes and childs

+
+

Descriptions, possible attribute type and values, permission and whether +expressions ( $\{ …​ } ) are allowed from the underlying model are +shown by the read-resource-description command.

+
+
+
+
/subsystem=datasources/data-source=ExampleDS:read-resource-description
+{
+    "outcome" => "success",
+    "result" => {
+        "description" => "A JDBC data-source configuration",
+        "head-comment-allowed" => true,
+        "tail-comment-allowed" => true,
+        "attributes" => {
+            "connection-url" => {
+                "type" => STRING,
+                "description" => "The JDBC driver connection URL",
+                "expressions-allowed" => true,
+                "nillable" => false,
+                "min-length" => 1L,
+                "max-length" => 2147483647L,
+                "access-type" => "read-write",
+                "storage" => "configuration",
+                "restart-required" => "no-services"
+            },
+            "driver-class" => {
+                "type" => STRING,
+                "description" => "The fully qualified name of the JDBC driver class",
+                "expressions-allowed" => true,
+                "nillable" => true,
+                "min-length" => 1L,
+                "max-length" => 2147483647L,
+                "access-type" => "read-write",
+                "storage" => "configuration",
+                "restart-required" => "no-services"
+            },
+            "datasource-class" => {
+                "type" => STRING,
+                "description" => "The fully qualified name of the JDBC datasource class",
+                "expressions-allowed" => true,
+                "nillable" => true,
+                "min-length" => 1L,
+                "max-length" => 2147483647L,
+                "access-type" => "read-write",
+                "storage" => "configuration",
+                "restart-required" => "no-services"
+            },
+            "jndi-name" => {
+                "type" => STRING,
+                "description" => "Specifies the JNDI name for the datasource",
+                "expressions-allowed" => true,
+                "nillable" => false,
+                "access-type" => "read-write",
+                "storage" => "configuration",
+                "restart-required" => "no-services"
+            },
+           ...
+
+
+
+
+

11.2.3. View configuration as XML for domain model or host model

+
+

Assume you have a host that is called "primary"

+
+
+
+
[domain@localhost:9990 /] /host=primary:read-config-as-xml
+
+
+
+

Just for the domain or standalone

+
+
+
+
[domain@localhost:9990 /] :read-config-as-xml
+
+
+
+
+

11.2.4. Take a snapshot of what the current domain is

+
+
+
[domain@localhost:9990 /] :take-snapshot()
+{
+    "outcome" => "success",
+    "result" => {
+        "domain-results" => {"step-1" => {"name" => "JBOSS_HOME/domain/configuration/domain_xml_history/snapshot/20110908-165222603domain.xml"}},
+        "server-operations" => undefined
+    }
+}
+
+
+
+
+

11.2.5. Take the latest snapshot of the host.xml for a particular host

+
+

Assume you have a host that is called "primary"

+
+
+
+
[domain@localhost:9990 /]  /host=primary:take-snapshot
+{
+    "outcome" => "success",
+    "result" => {
+        "domain-results" => {"step-1" => {"name" => "JBOSS_HOME/domain/configuration/host_xml_history/snapshot/20110908-165640215host.xml"}},
+        "server-operations" => undefined
+    }
+}
+
+
+
+
+

11.2.6. How to get interface address

+
+

The attribute for interface is named "resolved-address". It’s a runtime +attribute so it does not show up in :read-resource by default. You have +to add the "include-runtime" parameter.

+
+
+
+
./jboss-cli.sh --connect
+Connected to standalone controller at localhost:9990
+[standalone@localhost:9990 /] cd interface=public
+[standalone@localhost:9990 interface=public] :read-resource(include-runtime=true)
+{
+     "outcome" => "success",
+     "result" => {
+         "any" => undefined,
+         "any-address" => undefined,
+         "any-ipv4-address" => undefined,
+         "any-ipv6-address" => undefined,
+         "criteria" => [("inet-address" => expression "${jboss.bind.address:127.0.0.1}")],
+         "inet-address" => expression "${jboss.bind.address:127.0.0.1}",
+         "link-local-address" => undefined,
+         "loopback" => undefined,
+         "loopback-address" => undefined,
+         "multicast" => undefined,
+         "name" => "public",
+         "nic" => undefined,
+         "nic-match" => undefined,
+         "not" => undefined,
+         "point-to-point" => undefined,
+         "public-address" => undefined,
+         "resolved-address" => "127.0.0.1",
+         "site-local-address" => undefined,
+         "subnet-match" => undefined,
+         "up" => undefined,
+         "virtual" => undefined
+     }
+}
+[standalone@localhost:9990 interface=public] :read-attribute(name=resolved-address)
+{
+     "outcome" => "success",
+     "result" => "127.0.0.1"
+}
+
+
+
+

It’s similar for domain, just specify path to server instance:

+
+
+
+
[domain@localhost:9990 /] /host=primary/server=server-one/interface=public:read-attribute(name=resolved-address)
+{
+    "outcome" => "success",
+    "result" => "127.0.0.1"
+}
+
+
+
+
+
+

11.3. Runtime

+
+

11.3.1. Get all configuration and runtime details from CLI

+
+
+
./bin/jboss-cli.sh -c command=":read-resource(include-runtime=true, recursive=true, recursive-depth=10)"
+
+
+
+
+
+

11.4. Scripting

+
+

11.4.1. Windows and "Press any key to continue …​" issue

+
+

WildFly scripts for Windows end with "Press any key to continue …​". +This behavior is useful when script is executed by double clicking the +script but not when you need to invoke several commands from custom +script (e.g. 'bin/jboss-admin.bat --connect command=:shutdown').

+
+
+

To avoid "Press any key to continue …​" message you need to specify +NOPAUSE variable. Call 'set NOPAUSE=true' in command line before running +any WildFly 29 .bat script or include it in your custom script before +invoking scripts from WildFly.

+
+
+
+
+

11.5. Statistics

+
+

11.5.1. Read statistics of active datasources

+
+
+
/subsystem=datasources/data-source=ExampleDS/statistics=pool:read-resource(include-runtime=true)
+/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:read-resource(include-runtime=true)
+
+
+
+

or

+
+
+
+
/subsystem=datasources/data-source=ExampleDS:read-resource(include-runtime=true,recursive=true)
+
+
+
+
+
+

11.6. Deployment

+
+

11.6.1. CLI deployment command

+
+

In addition to the legacy deploy, undeploy and deployment-info commands, +that stay un-changed, the CLI offers a deployment command that properly +separates the various use cases encountered when managing deployments. This command +offers a simpler interface and should be the way to go when managing deployments. +New features will be added thanks to the deployment command, legacy commands will not evolve. +This document contains a summary of the capabilities of this command, type help deployment +to display the list of all available actions and help deployment <action> for the detailed +description of an action.

+
+
+

Actions to deploy some content:

+
+
+
    +
  • +

    deployment deploy-file: To deploy a file located on the file system.

    +
  • +
  • +

    deployment deploy-url: To deploy content referenced by an URL.

    +
  • +
  • +

    deployment deploy-cli-achive: To deploy some content thanks to a CLI archive +(.cli file) located on the file system.

    +
  • +
+
+
+

Actions to enable some deployments:

+
+
+
    +
  • +

    deployment enable: To enable a given disabled deployment.

    +
  • +
  • +

    deployment enable-all: To enable all disabled deployments.

    +
  • +
+
+
+

Actions to disable some deployments:

+
+
+
    +
  • +

    deployment disable: To disable a given enabled deployment.

    +
  • +
  • +

    deployment disable-all: To disable all enabled deployments.

    +
  • +
+
+
+

Actions to undeploy some deployments:

+
+
+
    +
  • +

    deployment undeploy: To undeploy a given deployment and remove its content +from the repository.

    +
  • +
  • +

    deployment undeploy-cli-archive: To undeploy some content using a CLI archive +(.cli file) located on the file system.

    +
  • +
+
+
+

Actions to get information on some deployments:

+
+
+
    +
  • +

    deployment info: To display information about single or multiple deployments.

    +
  • +
  • +

    deployment list: To display all the existing deployments.

    +
  • +
+
+
+
+

11.6.2. Incremental deployment with the CLI

+
+

It can be desirable to incrementally create and(or) update a WildFly +deployment. This chapter details how this can be achieved using the +WildFly CLI tool.

+
+
+

Steps to create an empty deployment and add an index html file.

+
+
+
    +
  1. +

    Create an empty deployment named my app:

    +
    +
    +
    [standalone@localhost:9990 /] /deployment=myapp:add(content=[{empty=true}])
    +
    +
    +
  2. +
  3. +

    Add an index.html to my app:

    +
    +
    +
    [standalone@localhost:9990 /] /deployment=myapp:add-content(content=[{input-stream-index=<press TAB>
    +
    +
    +
    +

    Then use completion to navigate to your index.html file.

    +
    +
  4. +
  5. +

    Provide a target name for index.html inside the deployment and +execute the operation:

    +
    +
    +
    [standalone@localhost:9990 /] /deployment=myapp:add-content(content=[{input-stream-index=./index.html, target-path=index.xhtml}]
    +
    +
    +
  6. +
  7. +

    Your content has been added, you can browse the content of a +deployment using the browse-content operation:

    +
    +
    +
    [standalone@localhost:9990 /] /deployment=myapp:browse-content(path=./)
    +
    +
    +
  8. +
  9. +

    You can display (or save) the content of a deployed file using the +attachement command:

    +
    +
    +
    attachment display --operation=/deployment=myapp:read-content(path=index.xhtml)
    +
    +
    +
  10. +
  11. +

    You can remove content from a deployment:

    +
    +
    +
    /deployment=myapp:remove-content(paths=[./index.xhtml])
    +
    +
    +
  12. +
+
+
+

Tips

+
+
+
    +
  • +

    add-content operation allows you to add more than one file ( +content argument is a list of complex types).

    +
  • +
  • +

    CLI offers completion for browse-content’s path and +remove-content's paths argument.

    +
  • +
  • +

    You can safely use operations that are using attached streams in batch +operations. In the case of batch operations, streams are attached to the +composite operation.

    +
  • +
+
+
+ + + + + +
+ + +On Windows, path separator '\' needs to be escaped, this is a limitation +of CLI handling complex types. The file path completion is automatically +escaping the paths it is proposing. +
+
+
+
Notes for server side operation Handler implementors
+
+

In order to benefit from CLI support for attached file streams and file +system completion, you need to properly structure your operation +arguments. Steps to create an operation that receives a list of file +streams attached to the operation:

+
+
+
    +
  1. +

    Define your operation argument as a LIST of INT (The LIST +value-type must be of type INT).

    +
  2. +
  3. +

    In the description of your argument, add the 2 following boolean +descriptors: filesystem-path and attached-streams

    +
  4. +
+
+
+

When your operation is called from the CLI, file system completion will +be automatically proposed for your argument. At execution time, the file +system paths will be automatically converted onto the index of the +attached streams.

+
+
+
+
+
+

11.7. Downloading files with the CLI

+
+

Some management resources are exposing the content of files in the +matter of streams. Streams returned by a management operation are +attached to the headers of the management response. The CLI command +attachment (see CLI help for a detailed description of this command) +allows to display or save the content of the attached streams.

+
+
+
    +
  • +

    Displaying the content of server.log file:

    +
    +
    +
    attachment display --operation=/subsystem=logging/log-file=server.log:read-resource(include-runtime)
    +
    +
    +
  • +
  • +

    Saving locally the server.log file:

    +
    +
    +
    attachment save --operation=/subsystem=logging/log-file=server.log:read-resource(include-runtime) --file=./server.log
    +
    +
    +
  • +
  • +

    Displaying the content of a deployed file:

    +
    +
    +
    attachment display --operation=/deployment=myapp:read-content(path=index.xhtml)
    +
    +
    +
  • +
+
+
+
    +
  • +

    By default existing files will be preserved. Use the option +--overwrite to overwrite existing file.

    +
  • +
  • +

    attachment can be used in batch mode.

    +
  • +
+
+
+
+

11.8. Iteration of Collections

+
+

The command for allows to iterate the content of an operation result. As an +example, this command can be used to display the content of the Manifest files +present in all deployed applications. For example:

+
+
+
+
for deployed in :read-children-names(child-type=deployment)
+ echo $deployed Manifest content
+ attachment display --operation=/deployment=$deployed:read-content(path=META-INF/MANIFEST.MF)
+done
+
+
+
+

When this for block is executed, the content of all Manifest files is displayed in the CLI console.

+
+
+

Tips

+
+
+
    +
  • +

    The scope of the defined variable is limited to the for block.

    +
  • +
  • +

    If a variable with the same name already exists, the for command will print an error.

    +
  • +
  • +

    If the operation doesn’t return a list, the for command will print an error.

    +
  • +
  • +

    for block can be discarded and not execute by adding the option --discard to done.

    +
  • +
+
+
+
+

11.9. Security Commands

+
+

CLi offers a security command to group all security related management actions +under a single command.

+
+
+
    +
  • +

    security enable-ssl-management: To enable SSL (elytron SSLContext) for the +management interfaces. Type help security enable-ssl-management for a +complete description of the command.

    +
  • +
+
+
+

Among other ways to configure SSL, this command offers an interactive wizard to +help you configure SSL by generating a self-signed certificate. +Example of wizard usage:

+
+
+
+
security enable-ssl-management --interactive
+Please provide required pieces of information to enable SSL:
+Key-store file name (default management.keystore):
+Password (blank generated):
+What is your first and last name? [Unknown]:
+What is the name of your organizational unit? [Unknown]:
+What is the name of your organization? [Unknown]:
+What is the name of your City or Locality? [Unknown]:
+What is the name of your State or Province? [Unknown]:
+What is the two-letter country code for this unit? [Unknown]:
+Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
+Validity (in days, blank default):
+Alias (blank generated):
+Enable SSL Mutual Authentication y/n (blank n):n
+
+SSL options:
+key store file: management.keystore
+distinguished name: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
+password: KRzne5s1
+validity: default
+alias: alias-265e6c6d-ff4e-4b8c-8f10-f015d678eb29
+Server keystore file management.keystore, certificate signing request management.csr and
+certificate file management.keystore.pem will be generated in server configuration directory.
+Do you confirm y/n :y
+
+
+
+

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

+
+
+

This command can also obtain the certificates from the Let’s Encrypt certificate authority +by use of the --lets-encrypt parameter. +Besides the mentioned workflow the user will be prompted to specify more information +(eg: account key store, certificate authority account) to obtain the certificate from Let’s Encrypt.

+
+
+
    +
  • +

    security disable-ssl-management: To disable SSL (elytron SSLContext) for the +management interfaces. Type help security disable-ssl-management for +a complete description of the command.

    +
  • +
  • +

    security enable-ssl-http-server: To enable SSL (elytron SSLContext) for the +undertow server. The same wizard as the enable-ssl-management action is available. +Type help security enable-ssl-http-server for a complete description of the command.

    +
  • +
+
+
+

This command can also obtain the certificates from the Let’s Encrypt certificate authority +by use of the --lets-encrypt parameter. +Besides the mentioned workflow the user will be prompted to specify more information +(eg: account key store, certificate authority account) to obtain the certificate from Let’s Encrypt.

+
+
+
    +
  • +

    security disable-ssl-http-server: To disable SSL (elytron SSLContext) for the +undertow server. Type help security disable-ssl-http-server for a complete +description of the command.

    +
  • +
  • +

    security enable-sasl-management: To enable SASL authentication (elytron SASL factory) for the +management interfaces. Calling this command without any option will have the +effect to associate the out of the box SASL factory to the http-interface. +Type help security enable-sasl-management for a complete description of the command.

    +
  • +
+
+
+

This command supports a subset of SASL mechanisms such as: EXTERNAL, DIGEST-MD5, +JBOSS-LOCAL-USER, SCRAM-*, …​ The CLI completer proposes the set of mechanisms that +can be properly configured using this command. Each mechanism can be associated +to a property file realm, a file-system realm or a trust-store realm according to its nature.

+
+
+

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

+
+
+
    +
  • +

    security disable-sasl-management: To disable SASL for the +management interfaces. If a mechanism is provided, this mechanism will be removed +from the factory, the factory will stay associated to the interface. Without mechanism, the +factory is no more active on the management interface. Type help security disable-sasl-management +for a complete description of the command.

    +
  • +
  • +

    security reorder-sasl-management: To re-order the list of SASL mechanisms present +in the factory. Order of mechanisms is of importance, the first in the list is sent to the client. +Type help security reorder-sasl-management for a complete description of the command.

    +
  • +
  • +

    security enable-http-auth-management: To enable HTTP authentication (elytron HTTP factory) for the +management http-interface. Calling this command without any option will have the +effect to associate the out of the box HTTP Authentication factory to the http-interface. +Type help security enable-http-auth-management for a complete description of the command.

    +
  • +
+
+
+

This command supports a subset of HTTP mechanisms such as: BASIC, CLIENT_CERT, DIGEST, …​ +The CLI completer proposes the set of mechanisms that can be properly configured +using this command. Each mechanism can be associated to a property file realm, +a file-system realm or a trust-store realm according to its nature.

+
+
+

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

+
+
+
    +
  • +

    security disable-http-auth-management: To disable HTTP Authentication for the +http management interface. If a mechanism is provided, this mechanism will be removed +from the factory, the factory will stay associated to the interface. Without mechanism, the +factory is no more active on the management interface. Type help security disable-http-auth-management +for a complete description of the command.

    +
  • +
  • +

    security enable-http-auth-http-server: To enable HTTP authentication (elytron HTTP factory) for the +given undertow security domain. +Type help security enable-http-auth-http-server for a complete description of the command.

    +
  • +
+
+
+

This command supports a subset of HTTP mechanisms such as: BASIC, CLIENT_CERT, DIGEST, …​ +The CLI completer proposes the set of mechanisms that can be properly configured +using this command. Each mechanism can be associated to a property file realm, +a file-system realm or a trust-store realm according to its nature.

+
+
+

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

+
+
+
    +
  • +

    security disable-http-auth-http-server: To disable HTTP Authentication for the +given undertow security domain. If a mechanism is provided, this mechanism will be removed +from the factory, the factory will stay associated to the security domain. Without mechanism, the +factory is no more active on the security-domain. Type help security disable-http-auth-http-server +for a complete description of the command.

    +
  • +
+
+
+
+

11.10. Evolving standard configurations with support for MicroProfile

+
+

The CLI script JBOSS_HOME/docs/examples/enable-microprofile.cli can be applied to a default standalone configuration +to add support for MicroProfile.

+
+
+

Impact on updated configuration:

+
+
+
    +
  • +

    Addition of MicroProfile subsystems.

    +
  • +
  • +

    Removal of security subsystem.

    +
  • +
  • +

    Removal of ManagementRealm.

    +
  • +
  • +

    Elytron security used for management and application entry points.

    +
  • +
+
+
+

By default the script updates standalone.xml configuration. +Thanks to the config=<config name> system property, the script can be applied to another standalone configuration.

+
+
+

NB: this script has to be applied offline with no server running.

+
+
+
    +
  • +

    To update standalone.xml server configuration:

    +
    +
      +
    • +

      ./bin/jboss-cli.sh --file=docs/examples/enable-microprofile.cli

      +
    • +
    +
    +
  • +
  • +

    To update other standalone server configurations:

    +
    +
      +
    • +

      ./bin/jboss-cli.sh --file=docs/examples/enable-microprofile.cli +-Dconfig=<standalone-full.xml|standalone-ha.xml|standalone-full-ha.xml>

      +
    • +
    +
    +
  • +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Bootable_Guide.html b/latest/Bootable_Guide.html new file mode 100644 index 000000000..8feadba57 --- /dev/null +++ b/latest/Bootable_Guide.html @@ -0,0 +1,1473 @@ + + + + + + + + +Bootable JAR Guide + + + + + + + +
+
+
+
+

© 2020 The original authors.

+
+ +
+
+

WildFly bootable JAR application development

+
+
+
+

This document details the steps to follow in order to develop a WildFly application +packaged as a bootable JAR. A bootable JAR can be run both on bare-metal and cloud platforms.

+
+
+

Developing an application packaged as a bootable JAR is not different from developing an application for a traditional +WildFly server installation using Maven. +The extra steps required to package your application inside a bootable JAR are handled by the +org.wildfly.plugins:wildfly-jar-maven-plugin Maven plugin.

+
+
+

This document contains the minimal information set required to build and run a WildFly bootable JAR. +Complete information on the Maven plugin usage can be found in the bootable JAR documentation.

+
+
+
+
+

1. Adding the bootable JAR Maven plugin to your pom file

+
+
+

This is done by adding an extra build step to your application deployment Maven pom.xml file.

+
+
+
+
<build>
+  <plugins>
+    <plugin>
+      <groupId>org.wildfly.plugins</groupId>
+      <artifactId>wildfly-jar-maven-plugin</artifactId>
+      <configuration>
+        ...
+      </configuration>
+      <executions>
+        <execution>
+          <goals>
+            <goal>package</goal>
+          </goals>
+        </execution>
+      </executions>
+    </plugin>
+  </plugins>
+</build>
+
+
+
+

The next chapter covers the plugin configuration items that are required to identify the WildFly server version and content.

+
+
+
+
+

2. Galleon configuration

+
+
+

The Bootable JAR Maven plugin depends on Galleon to construct the WildFly server contained in the JAR file.

+
+
+

Galleon is configured thanks to the Maven plugin <configuration> element.

+
+
+

The first required piece of information that Galleon needs is a reference to the WildFly Galleon feature-pack. +The WildFly Galleon feature-pack is a maven artifact that contains everything needed to dynamically provision a server. +This feature-pack, as well as the feature-packs on which its depends, +are deployed in public maven repositories.

+
+
+

When the bootable JAR Maven plugin builds a JAR, WildFly feature-packs are retrieved and +their content is assembled to create the server contained in the JAR.

+
+
+

Once you have identified a WildFly Galleon feature-pack, you need to select a set of +WildFly Layers that are used to compose the server.

+
+
+

The set of Galleon layers to include is driven by the needs of the application you are developing. +The list of WildFly Layers provides details on +the server features that each layer brings. Make sure that the API and server features you are using (eg: Jakarta RESTful Web Services, MicroProfile Config, datasources) +are provided by the layers you are choosing.

+
+
+

If you decide not to specify Galleon layers, a server containing all MicroProfile subsystems is +provisioned. (The server configuration is identical to the standalone-microprofile.xml configuration +in the traditional WildFly server zip.)

+
+
+

Maven Plugin configuration extract example:

+
+
+
+
<build>
+  <plugins>
+    <plugin>
+      <groupId>org.wildfly.plugins</groupId>
+      <artifactId>wildfly-jar-maven-plugin</artifactId>
+      <configuration>
+        <feature-pack-location>wildfly@maven(org.jboss.universe:community-universe)</feature-pack-location> (1)
+        <layers>
+          <layer>jaxrs-server</layer> (2)
+        </layers>
+      </configuration>
+      <executions>
+        <execution>
+          <goals>
+            <goal>package</goal>
+          </goals>
+        </execution>
+      </executions>
+    </plugin>
+  </plugins>
+</build>
+
+
+
+

(1) In this plugin configuration extract, we are retrieving the latest WildFly Galleon feature-pack installed in the + org.jboss.universe:community-universe Galleon universe. In case you would like to provision a specific version of the server, +you would need to specify the server version, for example wildfly@maven(org.jboss.universe:community-universe)#21.0.0.Final

+
+
+

(2) The jaxrs-server layer and all its dependencies are provisioned.

+
+
+ + + + + +
+ + +
+

If your project is using WildFly Preview, the feature-pack-location to use +is wildfly-preview@maven(org.jboss.universe:community-universe).

+
+
+
+
+

2.1. WildFly Layers

+
+

A Galleon layer is a name that identifies a server capability (e.g.: jaxrs, +ejb, microprofile-config, jpa) or an aggregation of such capabilities. A layer captures a server capability in the form of:

+
+
+
    +
  • +

    A piece of server XML configuration (e.g.: extension, configured subsystem, interfaces) that describes the capability.

    +
  • +
  • +

    A set of modules and other filesystem content that implements the capability.

    +
  • +
+
+
+

When you are using a layer, it delivers these pieces of information in order for +Galleon to assemble a server containing only the required configuration and modules.

+
+
+

In the tables below we provide basic information about all of the layers WildFly provides.

+
+
+

Besides the layer names and a brief description of each, the tables below detail the various dependency relationships +between layers. If the capabilities provided by a layer A require capabilities provided by another layer B, then layer A will depend on layer B. +If you ask for layer A, then Galleon will automatically provide B as well. In some cases A’s dependency on B can be optional; that +is A typically comes with B, but can function without it. In this case if you ask for A by default Galleon will provide B as well, +but you can tell Galleon to exclude B.

+
+
+

Some layers are logical alternatives to other layers. If two layers are alternatives to each other they both provide the same general +capabilities, but with different implementation characteristics. For example a number of layers provide the capability to cache different +types of objects. These layers typically come in pairs of alternatives, where one alternative provides local caching, while the other provides +distributed caching. If a layer you want has an optional dependency on a layer that has an alternative, you can exclude that dependency +and instead specify the alternative. If a layer has an alternative the Description column in the tables below will identify it.

+
+
+ + + + + +
+ + +
+

If the elytron layer is present, security will be handled by the elytron subsystem. +The undertow and ejb subsystems are configured with an other application-security-domain that references the Elytron ApplicationDomain security domain.

+
+
+
+
+

2.1.1. Foundational Galleon layers

+
+

A single Galleon layer can provide a relatively small set of capabilities, but most users will want to start with a broader set +of capabilities without having to spell out all the details. To help with this WildFly provides a few foundational layers +all of which provide typical core WildFly capabilities like the logging subsystem and a secure remote management interface.

+
+
+

You don’t have to base your WildFly installation on one of these foundational layers, but doing so may be more convenient.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionDependencies

datasources-web-server

A servlet container with support for datasources.

core-server
+core-tools (optional)
+datasources (optional)
+elytron
+web-server

jaxrs-server

An extension of datasources-web-server with support for Jakarta RESTful Web Services, CDI and JPA.

bean-validation (optional)
+cdi (optional)
+datasources-web-server
+jaxrs (optional)
+jpa (optional)
+microprofile-rest-client (optional)

cloud-server

An extension of jaxrs-server to address common cloud requirements.

ee-security (optional)
+jaxrs-server
+jms-activemq (optional)
+observability (optional)
+resource-adapters (optional)

core-server

A typical manageable server core. This layer could serve as a base for a more +specialized WildFly that doesn’t need the capabilities provided by the other foundational layers.

core-management (optional)
+jmx-remoting (optional)
+logging (optional)
+management (optional)
+request-controller (optional)
+security-manager (optional)

ee-core-profile-server

A Jakarta EE Core Profile server.

core-server
+cdi
+ee-integration
+elytron
+jaxrs-core
+jsonp
+jsonb

+
+
+

2.1.2. Basic Galleon Layers

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

Dependencies

base-server

Empty runnable server.

git-history (optional)

batch-jberet

Support for Jakarta Batch.

cdi
+ee
+elytron
+transactions

bean-validation

Support for Jakarta Bean Validation.

base-server
+cdi (optional)

cdi

Support for Jakarta Contexts and Dependency Injection.

base-server
+bean-validation (optional)

cloud-profile

An aggregation of some basic layers to address cloud use cases.

bean-validation (optional)
+cdi (optional)
+ee-security (optional)
+jaxrs (optional)
+jms-activemq (optional)
+jpa (optional)
+observability (optional)
+resource-adapters (optional)
+web-server

core-management

Support for server management services.

base-server

core-tools

Support for jboss-cli, add-user and elytron-tool launch scripts and configuration files.

management (optional)

datasources

Support for datasources.

transactions

deployment-scanner

Support for deployment directory scanning.

base-server

discovery

Support for discovery.

base-server

ee

Support for common functionality in the Jakarta EE platform and for Jakarta Concurrency.

ee-concurrency (optional)
+ee-integration

ee-concurrency

Support for Jakarta Concurrency.

naming

ee-integration

Support for common functionality in the Jakarta EE platform.

jsonb (optional)
+naming

ee-security

Support for EE Security.

cdi
+elytron

ejb-http-invoker

Support for invoking Jakarta Enterprise Beans over HTTP.

ejb-lite
+elytron
+undertow

ejb

Support for Jakarta Enterprise Beans, excluding the IIOP protocol.

ejb-lite
+messaging-activemq
+remoting
+resource-adapters
+undertow

ejb-dist-cache

Infinispan-based distributed cache for stateful session beans.
+Alternative: ejb-local-cache

transactions

ejb-lite

Support for Jakarta Enterprise Beans Lite.

ejb-local-cache (optional)
+naming
+transactions

ejb-local-cache

Infinispan-based local cache for stateful session beans.
+Alternative: ejb-dist-cache

transactions

elytron

Support for Elytron security.

base-server

embedded-activemq

Support for an embedded Apache Activemq Artemis Jakarta Messaging broker.
+Alternative: remote-activemq

cdi
+ee
+elytron
+naming
+remoting
+messaging-activemq
+undertow

git-history

Support for using git for configuration management.

hibernate-search

Support for Hibernate Search. The jpa dependency can be excluded and jpa-distributed used instead.

jpa (optional)

h2-datasource

Support for an H2 datasource

h2-driver

h2-default-datasource

Support for an H2 datasource set as the ee subsystem default datasource.

h2-datasource

h2-driver

Support for the H2 JDBC driver.

base-server

iiop-openjdk

Support for IIOP

naming

io

Support for XNIO workers and buffer pools.

base-server

jaxrs-core

Support for Jakarta RESTful Web Services.

ee-integration
+servlet

jaxrs

Support for Jakarta RESTful Web Services with optional ee-concurrency and deployment scanner layers.

deployment-scanner (optional)
+ee-concurrency (optional)
+jaxrs-core

jdr

Support for the JBoss Diagnostic Reporting (JDR) subsystem.

base-server
+management (optional)

jms-activemq

Deprecated - use messaging-activemq.

messaging-activemq

jmx

Support for registration of Management Model MBeans.

base-server

jmx-remoting

Support for a JMX remoting connector.

jmx
+management

jpa

Support for JPA (using the latest WildFly supported Hibernate release).
+Alternative: jpa-distributed

bean-validation (optional)
+datasources

jpa-distributed

Support for JPA with a distributed second level cache.
+Alternative: jpa

bean-validation (optional)
+datasources

jsf

Support for Jakarta Faces.

bean-validation (optional)
+cdi
+web-server

jsonb

Support for JSON Binding (Jakarta JSON Binding) provisioning the Jakarta JSON Binding API and Implementation modules.

base-server

jsonp

Support for JSON Processing (Jakarta JSON Processing) provisioning the Jakarta JSON Processing API and Implementation modules.

base-server

logging

Support for the logging subsystem.

base-server

mail

Support for Jakarta Mail.

base-server
+naming

management

Support for remote access to management interfaces secured using Elytron.

elytron

messaging-activemq

Support for connections to a remote Jakarta Messaging broker.

resource-adapters

micrometer

Support for Micrometer

cdi

microprofile-config

Support for MicroProfile Config.

cdi

microprofile-fault-tolerance

Support for MicroProfile Fault Tolerance.

cdi
+microprofile-config

microprofile-health

Support for MicroProfile Health.

management
+microprofile-config

microprofile-jwt

Support for MicroProfile JWT.

ee-security
+microprofile-config

microprofile-openapi

Support for MicroProfile OpenAPI.

jaxrs
+microprofile-config

microprofile-platform

Support for available MicroProfile platform specifications.

microprofile-config (optional)
+microprofile-fault-tolerance (optional)
+microprofile-health (optional)
+microprofile-jwt (optional)
+microprofile-openapi (optional)
+microprofile-rest-client (optional)

microprofile-rest-client

Support for MicroProfile REST client.

microprofile-config

microprofile-reactive-messaging

Support for MicroProfile Reactive Messaging

cdi
+reactive-streams-operators

microprofile-reactive-messaging-kafka

Support for MicroProfile Reactive Messaging Kafka connector

reactive-messaging

microprofile-reactive-streams-operators

Support for MicroProfile Reactive Streams Operators

cdi

microprofile-lra-coordinator

Support for MicroProfile LRA Coordinator

cdi
+jaxrs
+transactions

microprofile-lra-participant

Support for MicroProfile LRA Participant

cdi
+jaxrs

microprofile-telemetry

Support for MicroProfile Telemetry

cdi
+microprofile-config
+opentelemetry

mod_cluster

Support for mod_cluster subsystem.

web-server

naming

Support for JNDI.

base-server

observability

Support for MicroProfile monitoring features.

microprofile-config (optional)
+microprofile-health (optional)

opentelemetry

Support for OpenTelemetry

cdi

pojo

Support for legacy JBoss Microcontainer applications.

base-server

remote-activemq

Support for connections to a remote Apache Activemq Artemis Jakarta Messaging broker.
+Alternative: embedded-activemq

messaging-activemq

remoting

Support for inbound and outbound JBoss Remoting connections, secured using Elytron.

elytron
+io

request-controller

Support for request management

base-server

resource-adapters

Support for deployment of Jakarta Connectors resource adapters.

transactions

sar

Support for SAR archives to deploy MBeans.

base-server
+jmx

security-manager

Support for applying security manager permissions to applications.

base-server

servlet

A servlet container.

ee-integration
+naming
+undertow

transactions

Support for transactions.

ee
+elytron

undertow

Support for the Undertow HTTP server. Provides servlet support but does not provide typical EE integration like resource injection. +Use web-server for a servlet container with EE integration.

base-server
+io

undertow-https

Support for the Undertow HTTPS server secured using the applicationSSC SSLContext.

elytron
+undertow

undertow-load-balancer

Support for Undertow configured as a load balancer.

base-server
+io

web-clustering

Support for distributable web applications. Configures a non-local Infinispan-based container web cache for data session handling suitable to clustering environments.

transactions
+web-server

web-console

Support for loading the HAL web console from the /console context on the HTTP +management interface. Not required to use a HAL console obtained independently +and configured to connect to the server.

management

web-passivation

Support for distributable web applications. Configures a local Infinispan-based container web cache for data session handling suitable to single node environments.

transactions
+web-server

web-server

A servlet container.

deployment-scanner (optional)
+ee
+ee-concurrency (optional)
+naming
+servlet

webservices

Support for Jakarta XML Web Services

ejb-lite (optional)
+messaging-activemq (optional)
+web-server

+
+ + + + + +
+ + +References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. + References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+
+

3. Additional configuration

+
+
+

The plugin allows you to specify additional configuration items:

+
+
+
    +
  • +

    A set of WildFly CLI scripts to execute to fine tune the server configuration.

    +
  • +
  • +

    Some extra content to be copied inside the bootable JAR (e.g.: server keystore).

    +
  • +
+
+
+

Check this documentation for more details on how to configure execution of +CLI scripts and to package extra content.

+
+
+
+
+

4. Packaging your application

+
+
+

Call ` mvn package` to package both your application and the bootable JAR in the file <project build directory>/<project final name>-bootable.jar

+
+
+

In order to speed-up the development of your application (avoid rebuilding the JAR each time your application is re-compiled), +the Maven plugin offers a development mode that allows you to build and start the bootable JAR only once.

+
+
+

Check this documentation for more details on the development mode.

+
+
+
+
+

5. Running your application

+
+
+

Call java -jar <path to bootable JAR> <arguments>

+
+
+

In additon, you can use the wildfly-jar:run and wildfly-jar:start plugin goals to launch the bootable JAR.

+
+
+

5.1. Bootable JAR arguments

+
+

The following arguments can be used when starting the bootable JAR:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription

-b[interface]=<value>

Set system property jboss.bind.address.<interface> to the given value

-b=<value>

Set system property jboss.bind.address to the given value

-D<name>[=<value>]

Set a system property. The system properties are set by the server. They are not set by the bootable JAR JVM.

--help

Display help then exit

--cli-script=<path to CLI script file>

Path to a CLI script to execute when starting the Bootable JAR

--deployment=<path to WAR/JAR/EAR file or exploded deployment directory>

Application to install in the hollow JAR. Adding a deployment to an bootable JAR already containing a deployment is invalid.

--display-galleon-config

Display the content of the Galleon configuration used to build this bootable JAR.

--install-dir=<path to directory to install server in>

By default a new TEMP directory is created. TEMP directory location is controlled by the Java VM (call to Files.createTempDirectory).

--properties=<url>

Load system properties from the given url

-S<name>[=value]

Set a security property

-secmgr

Activate and install the WildFlySecurityManager.

-u=<value>

Set system property jboss.default.multicast.address to the given value.

--version

Print version and exit.

+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Client_Guide.html b/latest/Client_Guide.html new file mode 100644 index 000000000..cee63d05d --- /dev/null +++ b/latest/Client_Guide.html @@ -0,0 +1,2169 @@ + + + + + + + +WildFly Client Configuration + + + + + + + +
+
+
+ +
+
+
+

1. Introduction

+
+
+

As of WildFly 11 a common configuration framework has been introduced for use by the client libraries to define configuration, this allows for the configuration to be shared across multiple clients rather than relying on their own configuration files. As an example the configuration used by a Jakarta Enterprise Beans client can be shared with the JBoss CLI, if both of these required SSL configuration this can now be defined once and re-used.

+
+
+

Programmatic APIs are also available for many of the options however this document is focusing on the configuration available within the common wildfly-config.xml configuration file.

+
+
+
+
+

2. wildfly-config.xml Discovery

+
+
+

At the time a client requires access to its configuration, the class path is scanned for a wildfly-config.xml or META-INF/wildfly-config.xml file. Once the file is located the configuration will be parsed to be made available for that client.

+
+
+

Alternatively, the wildfly.config.url system property can also be specified to identify the location of the configuration that should be used.

+
+
+
+
+

3. Configuration Sections

+
+
+

3.1. <authentication-client /> - WildFly Elytron

+
+

The <authentication-client/> element can be added to the wildfly-config.xml configuration to define configuration in relation to authentication configuration for outbound connections and SSL configuration for outbound connections e.g.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+       ...
+    </authentication-client>
+</configuration>
+
+
+
+

Note: A single wildfly-config.xml could be used by multiple projects using multiple versions of WildFly Elytron, newer versions of WildFly Elytron will introduce new configuration using later namespace versions however they will still continue to support the previously released schemas until advertised otherwise. For the configuration to be compatible with this either use a schema and namespace compatible with all the versions in use, or multiple authentication-client elements can be added, these should be added ordered by namespace youngest to oldest. If a configuration with a later namespace is discovered by a newer WildFly Elytron client it will be used and parsing will not look for an older version as well.

+
+
+

The <authentication-client /> configuration can contain the following sections: -

+
+
+
+
<credential-stores />
+
+

Definitions of credential stores to be referenced from elsewhere in the configuration.

+
+
<key-stores />
+
+

Definitions of KeyStores to be referenced elsewhere in the configuration.

+
+
<authentication-rules />
+
+

Rules to be applied for outbound connections to match against an appropriate authentication configuration.

+
+
<authentication-configurations />
+
+

The individual authentication configurations that will be matched by the authentication rules.

+
+
<net-authenticator />
+
+

Flag to enable integration with the [java.net.Authenticator|https://docs.oracle.com/javase/8/docs/api/java/net/Authenticator.html].

+
+
<ssl-context-rules />
+
+

Rules to be applied for outbound connections to match against an appropriate SSL context configuration.

+
+
<ssl-contexts />
+
+

Individual SSL context definitions that will be matched by the ssl context rules.

+
+
<providers/>
+
+

Definition of how [java.security.Provider|https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html] instances will be discovered.

+
+
+
+
+

3.1.1. <credential-stores />

+
+

The <credential-stores /> element can be used to define individual named credential stores that can subsequently be used elsewhere in the configuration to reference stored credentials as an alternative to the credentials being embedded in the configuration.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <credential-stores>
+            <credential-store name="..." type="..." provider="..." >
+                <attributes>
+                    <attribute name="..." value="..." />
+                </attributes>
+                <protection-parameter-credentials>...</protection-parameter-credentials>
+            </credential-store>
+        </credential-stores>
+    </authentication-client>
+</configuration>
+
+
+
+

In addition to the name an individual <credential-store /> definition can contain the following optional attributes: -

+
+
+
+
type
+
+

The type of the credential store, e.g.KeyStoreCredentialStore.

+
+
provider
+
+

The name of the [java.security.Provider|https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html] to use to load the credential store.

+
+
+
+
+

The following child elements can also be added to configure the credential store.

+
+
+
+
<attributes .>
+
+

Definition of configuration attributes used to initialise the credential store.

+
+
+
+
+

e.g.

+
+
+
+
<attributes>
+    <attribute name="..." value="..." />
+</attributes>
+
+
+
+

The <attribute/> element can be repeated as many times as is required for the configuration.

+
+
+
+
<protection-parameter-credentials />
+
+

One or more credentials to be assembled into a protection parameter when initialising the credential store.

+
+
+
+
+

The <protection-paramter-credentials /> element can contain one more more child elements, which of these are actually supported will depend on the credential store implementation: -

+
+
+
+
<protection-parameter-credentials>
+    <key-store-reference>...</key-store-reference>
+    <credential-store-reference store="..." alias="..." clear-text="..." />
+    <clear-password password="..." />
+    <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+    <key-pair>
+        <public-key-pem>...</public-key-pem>
+        <private-key-pem>...</public-key-pem>
+        <openssh-private-key pem="...">
+            <credential-store-reference store="..." alias="..." clear-text="..." />
+            <clear-password password="..." />
+            <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+        </openssh-private-key>
+    </key-pair>
+    <certificate private-key-pem="..." pem="..." />
+    <public-key-pem>...</public-key-pem>
+    <bearer-token value="..." />
+    <oauth2-bearer-token token-endpoint-uri="...">...</oauth2-bearer-token>
+</protection-parameter-credentials>
+
+
+
+

The potential child elements of <protection-parameter-credentials /> are: -

+
+
+
+
<key-store-reference>
+
+

Defines a reference to an entry within a KeyStore for an entry to use.

+
+
+
+
+

The overall structure of this element is: -

+
+
+
+
<key-store-reference key-store-name="..." alias="...">
+   <key-store-clear-password password="..." />
+   <key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+   <credential-store-reference store="..." alias="..." clear-text="..." />
+   <key-store-credential>...</key-store-credential>
+</key-store-reference>
+
+
+
+

This structure is identical to the structure use in [<key-store-credential />|#key-store-credential].

+
+
+
+
<credential-store-reference store="…​" alias="…​" clear-text="…​" />
+
+

Reference to a credential stored in a credential store.

+
+
<clear-password password="…​" />
+
+

A password specified in the clear.

+
+
<masked-password algorithm="…​" key-material="…​" iteration-count="…​" salt="…​" masked-password="…​" initialization-vector="…​" />
+
+

A masked password.

+
+
<key-pair public-key-pem="…​" private-key-pem="…​" />
+
+

A public and private key pair.

+
+
* <certificate private-key-pem="…​" pem="…​" />
+
+

A pem encoded private key and corresponding certificate.

+
+
<public-key-pem>…​</public-key-pem>
+
+

A pem encoded public key.

+
+
* <bearer-token value="…​" />
+
+

A bearer token

+
+
<oauth2-bearer-token>…​</oauth2-bearer-token>
+
+

An oath2 bearer token.

+
+
+
+
+

The full structure of this element is: -

+
+
+
+
<oauth2-bearer-token token-endpoint-uri="...">
+    <client-credentials client-id="..." client-secret="..." />
+    <masked-client-credentials client-id="...">
+        <masked-client-secret algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+    </masked-client-credentials>
+    <resource-owner-credentials name="..." password="..." />
+    <masked-resource-owner-credentials name="...">
+            <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+    </masked-resource-owner-credentials >
+</oauth2-bearer-token>
+
+
+
+
+

3.1.2. <key-stores />

+
+

The <key-stores /> element can be used to define individual key-store definitions that can subsequently be referenced from alternative locations within the configuration.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <key-stores>
+            <key-store name="...">
+               <!-- One of the following to specify where to load the KeyStore from. -->
+               <file-name name="..." />
+               <load-from uri-"..." />
+               <resource name="..." />
+               <!-- One of the following to specify the protection parameter to unlock the KeyStore. -->
+               <key-store-clear-password password="..." />
+               <key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+               <key-store-credential>...</key-store-credential>
+            </key-store>
+        </key-stores>
+       ...
+    </authentication-client>
+</configuration>
+
+
+
+

An individual <key-store /> definition must contain exactly one of the following elements to define where to load the store from.

+
+
+
+
<file name="…​" />*
+
+

Load from file where 'name' is the name of the file.

+
+
<load-from uri="…​" />
+
+

Load the file from the URI specified.

+
+
<resource name="…​" />
+
+

Load as a resource from the Thread context classloader where 'name' is the name of the resource to load.

+
+
+
+
+

Exactly one of the following elements must also be present to specify the protection parameter for initialisation of the KeyStore.

+
+
+
+
<key-store-clear-password password="…​" />
+
+

A password specified in the clear.

+
+
<key-store-masked-password algorithm="…​" key-material="…​" iteration-count="…​" salt="…​" masked-password="…​" initialization-vector="…​" />
+
+

A masked password.

+
+
<key-store-credential>…​</key-store-credential>
+
+

A reference to another KeyStore to obtain an Entry to use as the protection parameter to access this KeyStore.

+
+
+
+
+

The structure of the <key-store-credential /> element is:

+
+
+
+
<key-store-credential key-store-name="..." alias="...">
+   <key-store-clear-password password="..." />
+   <key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+   <credential-store-reference store="..." alias="..." clear-text="..." />
+   <key-store-credential>...</key-store-credential>
+</key-store-credential>
+
+
+
+

This element contains two attributes: -

+
+
+
+
key-store-name
+
+

(Mandatory) - Name of the KeyStore being referenced to load the entry from.

+
+
alias
+
+

(Optional) - The alias of the entry to load from the referenced KeyStore, this can only be omitted for KeyStores that contain only a single entry.

+
+
+
+
+

Java KeyStores also make use of a protection parameter when accessing a single entry in addition to the protection parameter to load the KeyStore, exactly one of the following elements must be present to specify the protection parameter of the entry being loaded.

+
+
+
+
<key-store-clear-password password="…​" />
+
+

A password specified in the clear.

+
+
<key-store-masked-password algorithm="…​" key-material="…​" iteration-count="…​" salt="…​" masked-password="…​" initialization-vector="…​" />
+
+

A masked password.

+
+
<credential-store-reference store="…​" alias="…​" clear-text="…​" />
+
+

Reference to a credential stored in a credential store.

+
+
<key-store-credential>…​</key-store-credential>
+
+

A reference to another KeyStore to obtain an Entry to use as the protection parameter to access the alias.

+
+
+
+
+

The <key-store-credential /> is exactly the same, this means theoretically a chain of references could be used to lead to the unlocking of the required alias.

+
+
+
+

3.1.3. <authentication-rules /> and <ssl-context-rules />

+
+

When either an authentication-configuration or an ssl-context is required the URI of the resources being accessed as well as an optional abstract type and abstract type authority and matched against the rules defined in the configuration to identify which authentication-configuration or ssl-context should be used.

+
+
+

The rules to match <authentication-configuration /> instances are defined within the <authentication-rules /> element.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <authentication-rules>
+            <rule use-configuration="...">
+                ...
+            </rule>
+        </authentication-rules>
+       ...
+    </authentication-client>
+</configuration>
+
+
+
+

The rules to match against the <ssl-context /> definitions are contains within the <ssl-context-rules /> element.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <ssl-context-rules>
+            <rule use-ssl-context="...">
+                ...
+            </rule>
+        </ssl-context-rules>
+       ...
+    </authentication-client>
+</configuration>
+
+
+
+

Overall this means that authentication configuration matching is independent of SSLContext matching. By separating the rules from the configurations is means multiple rules can be defined that match against the same configuration.

+
+
+

The rules applied so first match wins and not most specific match wins, to achieve a most specific match wins configuration place the most specific rules at the beginning leaving the more general matches towards the end.

+
+
+

For both the <authentication-rules /> and the <ssl-context-rules /> the structure of the rules is identical other than one references an authentication configuration and the other references an SSLContext.

+
+
+
+
<rule use-configuration|use-ssl-context="...">
+    <!-- At most one of the following two can be defined. -->
+    <match-no-user />
+    <match-user name="..." />
+    <!-- Each of the following can be defined at most once. -->
+    <match-protocol name="..." />
+    <match-host name="..." />
+    <match-path name="..." />
+    <match-port number="..." />
+    <match-urn name="..." />
+    <match-domain name="..." />
+    <match-abstract-type name="..." authority="..." />
+</rule>
+
+
+
+

Where multiple matches are defined within a rule they must all match for the rule to apply. If a rule is defined with no match elements then it becomes a match all rule and will match anything, these can be useful at the end of the configuration to ensure something matches.

+
+
+

The individual match elements are: -

+
+
+
+
<match-no-user />
+
+

user-info can be embedded within a URI, this rule matches when there is no user-info. +<match-user name="…​" /> - Matches when the user-info embedded in the URI matches the name specified within this element. +<match-protocol name="…​" /> - Matches the protocol within the URI against the name specified in this match element. +<match-host-name name="…​" /> - Matches the host name from within the URI against the name specified in this match element. +<match-path name="…​" /> - Matches the path from the URI against the name specified in this match element. +<match-port number="…​" /> - Matches the port number specified within the URI against the number in this match element. This only matches against the number specified within the URI and not against any default derrived from the protocol. +<match-urn name="…​" />" - Matches the scheme specific part of the URI against the name specified within this element.

+
+
* <match-domain-name name="…​"/>
+
+

Matches where the protocol of the URI is 'domain' and the scheme specific part of the URI is the name specified within this match element.

+
+
<match-abstract-type name="…​" authority="…​" />
+
+

Matches the abstract type and/or authority against the values specified within this match element.

+
+
+
+
+
Elytron client default SSL context security provider
+
+

Elytron client provides a java security provider which can be used to register a JVM wide default SSLContext. The provider can instantiate an SSLContext from an Elytron client configuration file. This SSLContext will then be the one returned when SSLContext.getDefault() is called. When this provider is registered then all client libraries that use SSLContext.getDefault() will use the Elytron client configuration without having to use Elytron client APIs in their code.

+
+
+

To register this org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider provider, a runtime dependency on wildfly-elytron-client and wildfly-client-config is needed. Then it can be registered the usual way, either statically or dynamically.

+
+
+

The provider loads the SSL context from either the current authentication context obtained from the classpath, or from the authentication context obtained from the file whose path is passed into the security provider either programmatically or as an argument in the java.security file. Any arguments passed to the provider directly have precedence over the authentication context from the classpath.

+
+
+

As an example, the SSL context configured to match all rules is the one that will be initialized and returned by this provider:

+
+
+
+
<rule use-ssl-context="ssl-context-for-client-provider" />
+
+
+
+

Or:

+
+
+
+
myAuthenticationContext.withSsl(MatchRule.ALL, myDefaultSslContext);
+
+
+
+

To register the provider programmatically and specify the path to an Elytron client configuration file, the following code can be used:

+
+
+
+
Security.insertProviderAt(new WildFlyElytronClientDefaultSSLContextProvider(CONFIG_FILE_PATH), 1);
+
+
+
+

Alternatively, the provider can be registered in the java.security file and the path to an Elytron client configuration file can be optionally specified as shown below:

+
+
+
+
security.provider.1=org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider CONFIG_FILE_PATH
+
+
+
+

When you have a default SSL context configured and you register this provider with high enough priority, you can make use of it by calling:

+
+
+
+
SSLContext.getDefault();
+
+
+
+

If no default SSL context is configured or there is no configuration present, the provider will be ignored.

+
+
+
+
+

3.1.4. <authentication-configurations />

+
+

The <authentication-configurations /> element contains named configurations that can then be matched from the <authentication-rules />

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <authentication-configurations>
+            <configuration name="...">
+                <!-- Destination Overrides. -->
+                <set-host name="..." />
+                <set-port number="..." />
+                <set-protocol name="..." />
+                <!-- At most one of the following two elements. -->
+                <set-user-name name="..." />
+                <set-anonymous />
+                <set-mechanism-realm name="..." />
+                <rewrite-user-name-regex pattern="..." replacement="..." />
+                <sasl-mechanism-selector selector="..." />
+                <set-mechanism-properties>
+                   <property key="..." value="..." />
+                </set-mechanism-properties>
+                <credentials>...</credentials>
+                <set-authorization-name name="..." />
+                <providers>...</providers>
+                <!-- At most one of the following two elements. -->
+                <use-provider-sasl-factory />
+                <use-service-loader-sasl-factory module-name="..." />
+            </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+

The elements within the <configuration /> element provide the following features: -

+
+
+

The first three elements override the destination.

+
+
+
+
<set-host-name name="…​" />
+
+

Override the host name for the authenticated call.

+
+
<set-port-number number="…​" />
+
+

Override the port number for the authenticated call.

+
+
<set-protocol name="…​"/>
+
+

Override the protocol for the authenticated call.

+
+
+
+
+

The next two are mutually exclusive and can be used to set the name for authentication or switch to anonymous authentication.

+
+
+
+
<set-user-name name="…​"/>
+
+

Set the user name to use for authentication.

+
+
<set-anonymous />
+
+

Switch to anonymous authentication.

+
+
<set-mechanism-realm-name name="…​" />
+
+

Specify the name of the realm that will be selected by the SASL mechanism if required.

+
+
<rewrite-user-name-regex pattern="…​" replacement="…​" />
+
+

A regular expression pattern and replacement to re-write the user name used for authentication.

+
+
<sasl-mechanism-selector selector="…​" />
+
+

A SASL mechanism selector using the syntax from [org.wildfly.security.sasl.SaslMechanismSelector,fromString()|https://github.com/wildfly-security/wildfly-elytron/blob/1.1.4.Final/src/main/java/org/wildfly/security/sasl/SaslMechanismSelector.java#L544]

+
+
<set-mechanism-properties>…​</set-mechanism-properties>
+
+

One or more properties defined as <property key="…​" value="…​" /> to be passed to the authentication mechanisms.

+
+
<credentials>…​</credentials>
+
+

One or more credentials available for use during authentication.

+
+
+
+
+

The content of this element is the same as documented for [<protection-parameter-credentials />|#client-credentials-type]

+
+
+
+
<credentials>
+    <key-store-reference>...</key-store-reference>
+    <credential-store-reference store="..." alias="..." clear-text="..." />
+    <clear-password password="..." />
+    <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+    <key-pair>
+        <public-key-pem>...</public-key-pem>
+        <private-key-pem>...</public-key-pem>
+        <openssh-private-key pem="...">
+            <credential-store-reference store="..." alias="..." clear-text="..." />
+            <clear-password password="..." />
+            <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+        </openssh-private-key>
+    </key-pair>
+    <ssh-credential ssh-directory="..." private-key-file="..." known-hosts-file="...">
+        <credential-store-reference store="..." alias="..." clear-text="..." />
+        <clear-password password="..." />
+        <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+    </ssh-credential>
+    <certificate private-key-pem="..." pem="..." />
+    <public-key-pem>...</public-key-pem>
+    <bearer-token value="..." />
+    <oauth2-bearer-token token-endpoint-uri="...">...</oauth2-bearer-token>
+</credentials>
+
+
+
+
+
<set-authorization-name name="…​" />
+
+

Specify the name that should be used for authorization if different from the authentication identity.

+
+
<providers/>
+
+

This element is described in more detail within [<providers />|#Providers] and overrides the default or inherited provider discovery with a definition specific to this authentication configuration definition.

+
+
+
+
+

The final two elements are mutually exclusive and define how the SASL mechanism factories will be discovered for authentication.

+
+
+
+
<use-provider-sasl-factory />
+
+

The [java.security.Provider|https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html] instances either inherited or defined in this configuration will be used to locate the available SASL client factories.

+
+
<use-service-loader-sasl-factory module-name="…​" />
+
+

SASL client factories will be discovered using service loader discovery on the specified module or if not specified using the ClassLoader loading the configuration.

+
+
+
+
+
+

3.1.5. <net-authenticator />

+
+

This element contains no specific configuration, however if present the [org.wildfly.security.auth.util.ElytronAuthenticator|http://wildfly-security.github.io/wildfly-elytron/1.1.x/org/wildfly/security/auth/util/ElytronAuthenticator.html] will be registered with [java.net.Authenticator.setDefault(Authenticator)|https://docs.oracle.com/javase/8/docs/api/java/net/Authenticator.html#setDefault-java.net.Authenticator-] meaning that the WildFly Elytron authentication client configuration can be used for authentication where the JDK APIs are used for HTTP calls which require authentication.

+
+
+

There are some limitations within this integration as the JDK will cache the authentication JVM wide from the first call so is better used in stand alone processes that don’t require different credentials for different calls to the same URI,

+
+
+
+

3.1.6. <ssl-contexts />

+
+

The <ssl-contexts /> element holds individual names SSLContext definitions that can subsequently be matched by the [<ssl-context-rules />|#Rules].

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.4">
+        <ssl-contexts>
+            <default-ssl-context name="..."/>
+            <ssl-context name="...">
+                <key-store-ssl-certificate>...</key-store-ssl-certificate>
+                <trust-store key-store-name="..." />
+                <cipher-suite selector="..." names="..." />
+                <protocol names="... ..." />
+                <provider-name name="..." />
+                <providers>...</providers>
+                <certificate-revocation-list path="..." maximum-cert-path="..." />
+            </ssl-context>
+        </ssl-contexts>
+    </authentication-client>
+</configuration>
+
+
+
+

The element <default-ssl-context name="…​" /> simply takes the SSLContext obtainable from [javax.net.ssl.SSLContext.getDefault()|https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLContext.html#getDefault--] and assigns it a name so it can referenced from the [<ssl-context-rules />|#Rules]. This element can be repeated meaning the default SSLContext can be referenced using different names.

+
+
+

The element <ssl-context /> is used to define a named configured SSLContext, each of the child elements is optional and can be specified at most once to build up the configuration of the SSLContext.

+
+
+
+
<key-store-ssl-certificate>
+
+

Defines a reference to an entry within a KeyStore for the key and certificate to use in this SSLContext.

+
+
+
+
+

The overall structure of this element is: -

+
+
+
+
<key-store-ssl-certificate key-store-name="..." alias="..." provider-name="..." algorithm="...">
+   <key-store-clear-password password="..." />
+   <key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+   <credential-store-reference store="..." alias="..." clear-text="..." />
+   <key-store-credential>...</key-store-credential>
+</key-store-ssl-certificate>
+
+
+
+

This structure is identical to the structure use in [<key-store-credential />|#key-store-credential], but it is to obtain the entry for the key and certificate. The nested elements however remain the protection parameter to unlock the entry. In comparison with the key-store-credential the key-store-ssl-certificate allows to configure also the TrustManager: -

+
+
+
+
provider-name
+
+

- Name of the provider used to obtain the KeyManagerFactory.

+
+
algorithm
+
+

- The algorithm name of the KeyManagerFactory to obtain.

+
+
<trust-store-key-store-name />
+
+

A reference to a KeyStore that will be used to initialise the TrustManager.

+
+
<cipher-suite selector="…​" names="…​" />
+
+

Configuration to filter the enabled cipher suites. This element must contain at least one of the following two attributes: -

+
+
selector
+
+

(Optional) Used to configure the enabled cipher suites for TLSv1.2 and below. The format of the selector attribute is described in detail +in org.wildfly.security.ssl.CipherSuiteSelector.fromString(selector). +The default value is DEFAULT, which corresponds to all known cipher suites that do not have NULL encryption and excludes any cipher suites that have no authentication.

+
+
names
+
+

(Optional) Used to configure the enabled cipher suites for TLSv1.3. The format of the names attribute is a simple colon (":") +separated list of TLSv1.3 cipher suite names (e.g., TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256). +This attribute must be specified in order for TLSv1.3 to be enabled.

+
+
+
+
+

The following example configuration specifies that the default filtering should be used for TLSv1.2 and below and specifies that the +TLS_AES_128_CCM_8_SHA256 and TLS_AES_256_GCM_SHA384 cipher suites should be used for TLSv1.3.

+
+
+
+
<cipher-suite selector="DEFAULT" names="TLS_AES_128_CCM_8_SHA256:TLS_AES_256_GCM_SHA384"/>
+
+
+
+
+
<protocol names="…​"/>
+
+

Used to define a space separated list of the protocols to be supported. The default value is TLSv1 TLSv1.1 TLSv1.2 TLSv1.3. Note that the TLSv1.3 protocol will only be usable when running against JDK 11 or higher.

+
+
<provider-name />
+
+

Once the available providers have been identified only the provider with the name defined on this element will be used.

+
+
<providers/>
+
+

This element is described in more detail within [<providers />|#Providers] and overrides the default or inherited provider discovery with a definition specific to this SSLContext definition.

+
+
<certificate-revocation-list />
+
+

The presence of this element enabled checking the peer’s certificate against a certificate revocation list, this element defines both a path to the certificate revocation list and also specifies the maximum number of non-self-issued intermediate certificates that may exist in a certification path

+
+
<certificate-revocation-lists />
+
+

This element enables checking the peer’s certificate against multiple certificate revocation lists. This element defines a list of certificate revocation list objects which define a path to the certificate revocation list, +and also the base path of the certificate revocation list file.

+
+
+
+
+ + + + + +
+ + +The certificate-revocation-list element can be substituted by a certificate-revocation-lists element which in turn allows the +configuration of multiple certificate revocation lists as follows. +
+
+
+
+
<configuration>
+    <authentication-client xmlns="urn:elytron:1.4">
+        <ssl-contexts>
+            <default-ssl-context name="..."/>
+            <ssl-context name="...">
+                ...
+                <certificate-revocation-lists>
+                    <certificate-revocation-list path="..." relative-to="..." />
+                    <certificate-revocation-list path="..." relative-to="..." />
+                </certificate-revocation-lists>
+            </ssl-context>
+        </ssl-contexts>
+    </authentication-client>
+</configuration>
+
+
+
+
Configuring SSLv2Hello
+
+

Older JDK versions use SSLv2Hello during the initial SSL handshake message +where the SSL/TLS version that will be used for the rest of the communication is +negotiated.

+
+
+

Using SSLv2Hello is discouraged, therefore newer JDK versions disable this protocol +on the client by default. However, they do provide the ability to re-enable it if necessary.

+
+
+

SSLv2Hello can be configured as a supported protocol for the SSL context as follows:

+
+
+
+
<protocol names="SSLv2Hello TLSv1">
+
+
+
+
+
WARNING:
+
+
    +
  • +

    The use of SSLv2Hello is strongly discouraged.

    +
  • +
  • +

    SSLv2Hello cannot be configured by itself, as its purpose is to determine +which encryption protocols are supported by the server it connects to. It always +needs to be configured along side another encryption protocol.

    +
  • +
  • +

    Additionally, IBM JDK does not support specifying SSLv2Hello in its client, although a +server side connection always accepts this protocol.

    +
  • +
+
+
+
+
+

3.1.7. <providers />

+
+

The <providers /> element is used to define how [java.security.Provider|https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html] instances are located when required. The other configuration sections of <authentication-client /> are independent of each other, the <providers /> configuration however applies to the current element and it’s children unless overridden, this configuration can be specified in the following locations.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <providers />
+        ...
+        <credential-stores>
+            <credential-store name="..">
+                ...
+                <providers />
+            </credential-store>
+        <credential-stores>
+        ...
+        <authentication-configurations>
+            <authentication-configuration name="...">
+                ...
+                <providers />
+            </authentication-configuration>
+        </authentication-configurations>
+        ...
+        <ssl-contexts>
+            <ssl-context name="...">
+                ...
+                <providers />
+            </ssl-context>
+        </ssl-contexts>
+    </authentication-client>
+</configuration>
+
+
+
+

If an individual <credential-store />, <authentication-configuration />, or <ssl-context /> contains a <providers /> definition that that definition will apply specifically to that instance. If a configured item does not contain a <providers /> definition but a top level <providers /> is defined within <authentication-configuration /> then that will be used instead.

+
+
+

The <providers /> element can be defined as: -

+
+
+
+
<providers>
+    <global />
+    <use-service-loader module-name="..." />
+</providers>
+
+
+
+

Both the child elements are optional, can appear in any order and can be repeated although repeating <global /> would not really be beneficial.

+
+
+
+
<global />
+
+

The providers from [java.security.Security.getProviders()|https://docs.oracle.com/javase/8/docs/api/java/security/Security.html#getProviders--]

+
+
<credential-stores />
+
+

Providers loaded using service loader discovery from the module specified, if no module is specified the ClassLoader which loaded the authentication client is used.

+
+
+
+
+

Where no <provider /> configuration exists the default behaviour is the equivalent of: -

+
+
+
+
<providers>
+    <use-service-loader />
+    <global />
+</providers>
+
+
+
+

This gives the WildFly Elytron Provider priority over any globally registered Providers but also allows for the globally registered providers to be used.

+
+
+
+

3.1.8. Masked Password Types

+
+

The authentication client supports the following masked password types:

+
+
+
+
<masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+<key-store-masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+
+<!--In oauth2-bearer-token!-->
+<masked-resource-owner-credentials name="...">
+        <masked-password algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+</masked-resource-owner-credentials >
+<masked-client-credentials client-id="...">
+    <masked-client-secret algorithm="..." key-material="..." iteration-count="..." salt="..." masked-password="..." initialization-vector="..." />
+</masked-client-credentials>
+
+
+
+

The following attributes are used to define the masked password:

+
+
+
+
algorithm
+
+

The algorithm that was used to encrypt the password. If this attribute is not specified, the default value is "masked-MD5-DES". +A list of the supported algorithm types can be found in +Masked Password Type

+
+
key-material
+
+

The initial key material that was used to encrypt the password. If this attribute is not specified, the default value is "somearbitrarycrazystringthatdoesnotmatter".

+
+
iteration-count
+
+

The iteration count that was used to encrypt the password. This attribute is required.

+
+
salt
+
+

The salt that was used to encrypt the password. This attribute is required.

+
+
masked-password
+
+

The base64 encrypted password (without the "MASK-" prefix). This attribute is required.

+
+
initialization-vector
+
+

The initialization vector that was used to encrypt the password. This attribute is optional.

+
+
+
+
+
+
+

3.2. jboss-ejb-client

+
+

The jboss-ejb-client.xml can be used to conifure EJB client from within a deployment. The file +should be located in jar’s META-INF directory.

+
+
+
+
<jboss-ejb-client xmlns="urn:jboss:ejb-client:1.4">
+    <client-context invocation-timeout="1000" deployment-node-selector="org.foo.DeploymentNodeSelector" default-compression="5">
+        <ejb-receivers exclude-local-receiver="false" local-receiver-pass-by-value="true">
+            <remoting-ejb-receiver outbound-connection-ref="connection" connection-timeout="3000"/>
+        </ejb-receivers>
+        <http-connections>
+            <http-connection uri="http://localhost:8180/wildfly-services"/>
+        </http-connections>
+        <profile name="test-profile"/>
+    </client-context>
+</jboss-ejb-client>
+
+
+
+

3.2.1. <client-context>

+
+

Configurations that will be used to setup an EJB client context for the deployment.

+
+
+
    +
  • +

    invocation-timeout A timeout, in milliseconds, that will be used for EJB invocations. +A value of zero or a negative value will imply a "wait forever" semantic where the invocation +will never timeout and the client will wait for the invocation result indefinitely.

    +
  • +
  • +

    deployment-node-selector The fully qualified class name of the class which implements the +org.jboss.ejb.client.DeploymentNodeSelector interface. The instance of this class will be used +for selecting nodes, from among multiple eligible nodes within an EJB client context, which can +handle a particular deployment.

    +
  • +
  • +

    default-compression Default compression level (from 0 to 9) of request and response message +payload.

    +
  • +
+
+
+
<ejb-receivers>
+
+

Configures a number of remoting based EJB receivers.

+
+
+
    +
  • +

    exclude-local-receiver Set to true if the local receiver which gets added to the EJB client +context by default, has to be excluded from the context.

    +
  • +
  • +

    local-receiver-pass-by-value Set to false if the local receiver that’s available in the EJB +client context, should use pass-by-reference (instead of pass-by-value) semantics for the EJB invocations.

    +
  • +
+
+
+
<remoting-ejb-receiver>
+
+
    +
  • +

    outbound-connection-ref Reference to an outbound connection configured in the remoting subsystem.

    +
  • +
  • +

    connect-timeout The timeout, in milliseconds, to be used while creating a connection.

    +
  • +
+
+
+
+
+
<http-connections>
+
+

Configures remote http-connection for EJB invocation

+
+
+
<http-connection>
+
+

HTTP Connection for EJB invocation.

+
+
+
    +
  • +

    uri Uniform Resource Identifier for the HTTP connection should be defined.

    +
  • +
+
+
+
+
+
<profile>
+
+

References a remoting profile configured in the remoting subsystem.

+
+
+
    +
  • +

    name The name of the profile.

    +
  • +
+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+

3.3. Remoting Client Configuration

+
+

3.3.1. <endpoint /> - Remoting Client

+
+

You can use the endpoint element, which is in the urn:jboss-remoting:5.0 namespace, to configure a JBoss Remoting client endpoint using the wildfly-config.xml file. This section describes how to configure a JBoss Remoting client using this element.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+...
+    <endpoint xmlns="urn:jboss-remoting:5.0">
+       ...
+    </endpoint>
+...
+</configuration>
+
+
+
+

This section describes the child elements and attributes that can be configured within this element.

+
+
+

The <endpoint /> element contains the following optional attribute:

+
+ ++++ + + + + + + + + + + + + +
Attribute NameAttribute Description

name

The endpoint name. If not given, an endpoint name will be derived from the system’s host name, if possible.

+
+

The <endpoint /> element can optionally contain the following two child elements, as described in the next sections:

+
+
+
    +
  • +

    <providers />

    +
  • +
  • +

    <connections />

    +
  • +
+
+
+

The configured endpoint will use the default XNIO configuration.

+
+
+
<providers />
+
+

This optional element specifies transport providers for the remote endpoint. It can contain any number of <provider /> sub-elements.

+
+
+
<provider />
+
+

This element defines a remote transport provider provider. It has the following attributes.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameAttribute Description

scheme

The primary URI scheme which corresponds to this provider. This attribute is required.

aliases

A space-separated list of other URI scheme names that are also recognized for this provider . This attribute is optional.

module

The name of the module that contains the provider implementation. This attribute is optional; if not given, the class loader of JBoss Remoting itself will be searched for the provider class.

class

The name of the class that implements the transport provider. This attribute is optional; if not given, the Java java.util.ServiceLoader facility will be used to search for the provider class.

+
+

This element has no content.

+
+
+
+
+
<connections />
+
+

This optional element specifies connections for the remote endpoint. It can contain any number of [#connection] elements.

+
+
+
<connection />
+
+

This element defines a connection for the remote endpoint. It has the following attributes.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameAttribute Description

destination

The destination URI for the connection. This attribute is required.

read-timeout

The timeout, in seconds, for read operations on the corresponding socket. This attribute is optional, however it should only be given if a heartbeat-interval is defined.

write-timeout

The timeout, in seconds, for a write operation. This attribute is optional, however it should only be given if a heartbeat-interval is defined..

ip-traffic-class

Defines the numeric IP traffic class to use for this connection’s traffic. This attribute is optional.

tcp-keepalive

Boolean setting that determines whether to use TCP keepalive. This attribute is optional.

heartbeat-interval

The interval, in milliseconds, to use when checking for a connection heartbeat. This attribute is optional.

+
+
+
+
Example Remoting Client Configuration in the wildfly-config.xml File
+
+
+
<configuration>
+...
+    <endpoint xmlns="urn:jboss-remoting:5.0">
+        <connections>
+            <connection destination="remote+http://10.20.30.40:8080" read-timeout="50" write-timeout="50" heartbeat-interval="10000"/>
+        </connections>
+    </endpoint>
+...
+</configuration>
+
+
+
+
+
+
+

3.4. XNIO Client Configuration

+
+

3.4.1. <worker /> - XNIO Client

+
+

You can use the worker element, which is in the urn:xnio:3.5 namespace, to configure a default XNIO worker using the wildfly-config.xml file. This section describes how to do this.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+...
+    <worker xmlns="urn:xnio:3.5">
+       ...
+    </worker>
+...
+</configuration>
+
+
+
+

This section describes the child elements that can be configured within this root worker element.

+
+
+

The <worker /> element can optionally contain the following child elements, as described in the next sections:

+
+
+
    +
  • +

    <daemon-threads />

    +
  • +
  • +

    <worker-name />

    +
  • +
  • +

    <pool-size />

    +
  • +
  • +

    <task-keepalive />

    +
  • +
  • +

    <io-threads />

    +
  • +
  • +

    <stack-size />

    +
  • +
  • +

    <outbound-bind-addresses />

    +
  • +
+
+
+
<daemon-threads />
+
+

This optional element takes a single required attribute:

+
+ ++++ + + + + + + + + + + + + +
Attribute NameAttribute Description

value

The value of the setting (required). A value of true indicates that worker and task threads should be daemon threads, and false indicates that they should not be daemon threads. If this element is not given, a value of true is assumed.

+
+

This element has no content.

+
+
+
+
<worker-name />
+
+

This element defines the name of the worker. The worker name will appear in thread dumps and in JMX.

+
+ ++++ + + + + + + + + + + + + +
Attribute NameAttribute Description

value

The worker’s name (required).

+
+

This element has no content.

+
+
+
+
<pool-size />
+
+

This optional element defines the size parameters of the worker’s task thread pool. The following attributes are allowed:

+
+ ++++ + + + + + + + + + + + + +
Attribute NameAttribute Description

max-threads

A positive integer which specifies the maximum number of threads that should be created (required).

+
+
+
<task-keepalive />
+
+

This optional element establishes the keep-alive time of task threads before they may be expired.

+
+ ++++ + + + + + + + + + + + + +
Attribute NameAttribute Description

value

A positive integer which represents the minimum number of seconds to keep idle threads alive (required).

+
+
+
<io-threads />
+
+

This optional element determines how many I/O (selector) threads should be maintained. Generally this number should be a small constant multiple of the number of available cores.

+
+ ++++ + + + + + + + + + + + + +
Attribute NameAttribute Description

value

A positive integer value for the number of I/O threads (required).

+
+
+
<stack-size />
+
+

This optional element establishes the desired minimum thread stack size for worker threads.

+
+ ++++ + + + + + + + + + + + + +
Attribute NameAttribute Description

value

A positive integer value which indicates the requested stack size, in bytes (required).

+
+
+
<outbound-bind-addresses />
+
+

This optional element specifies bind addresses to use for outbound connections. Each bind address mapping consists of a destination IP address block, and a bind address and optional port number to use for connections to destinations within that block.

+
+
+
<bind-address />
+
+

This element defines an individual bind address mapping.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
Attribute NameAttribute Description

match

The IP address block in CIDR notation to match (required).

bind-address

The IP address to bind to if the address block matches (required).

bind-port

A specific port number to bind to if the address block matches (optional, defaults to 0 meaning "any port").

+
+
+
+
+
+

3.5. webservices-client

+
+

<webservices /> - Webservices Client

+
+
+

The <webservices /> element in a wildfly-config.xml file can be used to specify Web Services Client configuration that will apply during assigning of configurations when building a client. This element is from the “urn:elytron:client:1.5” namespace. Below is the example of use:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+...
+    <webservices>
+       ...
+    </webservices>
+...
+</configuration>
+
+
+
+

The <webservices /> element can optionally contain the following child elements:

+
+
+
    +
  • +

    <set-http-mechanism name="BASIC"/> This element is used to specify an HTTP mechanism that WS client should use to authenticate. Currently only the HTTP Basic authentication is supported and used as default.

    +
  • +
  • +

    <set-ws-security-type name="UsernameToken"/> This element is used to specify WS-Security type that WS client will use to authenticate with the server. Currently only Username Token Profile can be configured.

    +
  • +
+
+
+

These elements will take effect only if both username and password are configured in Elytron client.

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Cloud_References.html b/latest/Cloud_References.html new file mode 100644 index 000000000..344404611 --- /dev/null +++ b/latest/Cloud_References.html @@ -0,0 +1,544 @@ + + + + + + + +References + + + + + + +
+
+

Helm

+ +
+
+

OpenShift

+ +
+
+

WildFly

+ +
+
+ + + \ No newline at end of file diff --git a/latest/Developer_Guide.html b/latest/Developer_Guide.html new file mode 100644 index 000000000..31bf00165 --- /dev/null +++ b/latest/Developer_Guide.html @@ -0,0 +1,25349 @@ + + + + + + + + +Developer Guide + + + + + + + +
+
+
+
+

© 2017 The original authors.

+
+ +
+
Target Audience
+

Java Developers

+
+
+
+
+

1. Class Loading in WildFly

+
+
+

Since JBoss AS 7, Class loading is considerably different from previous +versions of JBoss AS. Class loading is based on the +MODULES project. Instead of the more familiar +hierarchical class loading environment, WildFly’s class loading is based +on modules that have to define explicit dependencies on other modules. +Deployments in WildFly are also modules, and do not have access to +classes that are defined in jars in the application server unless an +explicit dependency on those classes is defined.

+
+
+

1.1. Deployment Module Names

+
+

Module names for top level deployments follow the format +deployment.myarchive.war while sub deployments are named like +deployment.myear.ear.mywar.war.

+
+
+

This means that it is possible for a deployment to import classes from +another deployment using the other deployments module name, the details +of how to add an explicit module dependency are explained below.

+
+
+
+

1.2. Automatic Dependencies

+
+

Even though in WildFly modules are isolated by default, as part of the +deployment process some dependencies on modules defined by the +application server are set up for you automatically. For instance, if +you are deploying a Jakarta EE application a dependency on the Java EE +API’s will be added to your module automatically. Similarly, if your +module contains a beans.xml file a dependency on +Weld will be added automatically, along +with any supporting modules that weld needs to operate.

+
+
+

For a complete list of the automatic dependencies that are added, please +see Implicit module dependencies for deployments.

+
+
+

Automatic dependencies can be excluded through the use of +jboss-deployment-structure.xml.

+
+
+
+

1.3. Class Loading Precedence

+
+

A common source of errors in Java applications is including API classes +in a deployment that are also provided by the container. This can result +in multiple versions of the class being created and the deployment +failing to deploy properly. To prevent this in WildFly, module +dependencies are added in a specific order that should prevent this +situation from occurring.

+
+
+

In order of highest priority to lowest priority

+
+
+
    +
  1. +

    System Dependencies - These are dependencies that are added to the +module automatically by the container, including the Jakarta EE api’s.

    +
  2. +
  3. +

    User Dependencies - These are dependencies that are added through +jboss-deployment-structure.xml or through the Dependencies: manifest +entry.

    +
  4. +
  5. +

    Local Resource - Class files packaged up inside the deployment +itself, e.g. class files from WEB-INF/classes or WEB-INF/lib of a +war.

    +
  6. +
  7. +

    Inter deployment dependencies - These are dependencies on other +deployments in an ear deployment. This can include classes in an ear’s +lib directory, or classes defined in other ejb jars.

    +
  8. +
+
+
+
+

1.4. WAR Class Loading

+
+

The war is considered to be a single module, so classes defined in +WEB-INF/lib are treated the same as classes in WEB-INF/classes. All +classes packaged in the war will be loaded with the same class loader.

+
+
+
+

1.5. EAR Class Loading

+
+

Ear deployments are multi-module deployments. This means that not all +classes inside an ear will necessarily have access to all other classes +in the ear, unless explicit dependencies have been defined. By default +the EAR/lib directory is a single module, and every WAR or EJB jar +deployment is also a separate module. Sub deployments (wars and +ejb-jars) always have a dependency on the parent module, which gives +them access to classes in EAR/lib, however they do not always have an +automatic dependency on each other. This behaviour is controlled via the +ear-subdeployments-isolated setting in the ee subsystem configuration:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:ee:1.0" >            
+  <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
+</subsystem>
+
+
+
+

By default this is set to false, which allows the sub-deployments to see +classes belonging to other sub-deployments within the .ear.

+
+
+

For example, consider the following .ear deployment:

+
+
+
+
myapp.ear
+ |
+ |--- web.war
+ |
+ |--- ejb1.jar
+ |
+ |--- ejb2.jar
+
+
+
+

If the ear-subdeployments-isolated is set to false, then the classes in +web.war can access classes belonging to ejb1.jar and ejb2.jar. +Similarly, classes from ejb1.jar can access classes from ejb2.jar (and +vice-versa).

+
+
+ + + + + +
+ + +The ear-subdeployments-isolated element value has no effect on the +isolated classloader of the .war file(s). i.e. irrespective of whether +this flag is set to true or false, the .war within a .ear will have an +isolated classloader and other sub-deployments within that .ear will not +be able to access classes from that .war. This is as per spec. +
+
+
+

If the ear-subdeployments-isolated is set to true then no automatic +module dependencies between the sub-deployments are set up. User must +manually setup the dependency with Class-Path entries, or by setting +up explicit module dependencies.

+
+
+

Portability

+
+
+ + + + + +
+ + +The Jakarta EE specification says that portable applications should not +rely on sub deployments having access to other sub deployments unless an +explicit Class-Path entry is set in the MANIFEST.MF. So portable +applications should always use Class-Path entry to explicitly state +their dependencies. +
+
+
+ + + + + +
+ + +It is also possible to override the ear-subdeployments-isolated element +value at a per deployment level. See the section on +jboss-deployment-structure.xml below. +
+
+
+

1.5.1. Dependencies: Manifest Entries

+
+

Deployments (or more correctly modules within a deployment) may set up +dependencies on other modules by adding a Dependencies: manifest +entry. This entry consists of a comma separated list of module names +that the deployment requires. The available modules can be seen under +the modules directory in the application server distribution. For +example to add a dependency on javassist and apache velocity you can add +a manifest entry as follows:

+
+
+

Dependencies: org.javassist export,org.apache.velocity export services,org.antlr

+
+
+

Each dependency entry may also specify some of the following parameters +by adding them after the module name:

+
+
+
    +
  • +

    export This means that the dependencies will be exported, so any +module that depends on this module will also get access to the +dependency.

    +
  • +
  • +

    services By default items in META-INF of a dependency are not +accessible, this makes items from META-INF/services accessible so +services in +the modules can be loaded.

    +
  • +
  • +

    optional If this is specified the deployment will not fail if the +module is not available.

    +
  • +
  • +

    meta-inf This will make the contents of the META-INF directory +available (unlike services, which just makes META-INF/services +available). In general this will not cause any deployment descriptors in +META-INF to be processed, with the exception of beans.xml. If a +beans.xml file is present this module will be scanned by Weld and any +resulting beans will be available to the application.

    +
  • +
  • +

    annotations If a Jandex index has be created for the module these +annotations will be merged into the deployments annotation index. The +Jandex index can be generated using +the Jandex Ant task or the Jandex Maven plugin, and must be named +META-INF/jandex.idx. Note that it is not +necessary to break open the jar being indexed to add this to the modules +class path, a better approach is to create a jar containing just this +index, and adding it as an additional resource root in the module.xml +file.

    +
  • +
+
+
+

Adding a dependency to all modules in an EAR

+
+
+ + + + + +
+ + +Using the export parameter it is possible to add a dependency to all +sub deployments in an ear. If a module is exported from a +Dependencies: entry in the top level of the ear (or by a jar in the +ear/lib directory) it will be available to all sub deployments as +well. +
+
+
+ + + + + +
+ + +To generate a MANIFEST.MF entry when using maven put the following in +your pom.xml: +
+
+
+
pom.xml
+
+
<build>
+   ...
+   <plugins>
+     <plugin>
+       <groupId>org.apache.maven.plugins</groupId>
+       <artifactId>maven-war-plugin</artifactId>
+       <configuration>
+          <archive>
+             <manifestEntries>
+                <Dependencies>org.slf4j</Dependencies>
+             </manifestEntries>
+          </archive>
+       </configuration>
+     </plugin>
+   </plugins>
+</build>
+
+
+
+

If your deployment is a jar you must use the maven-jar-plugin rather +than the maven-war-plugin.

+
+
+
+

1.5.2. Class Path Entries

+
+

It is also possible to add module dependencies on other modules inside +the deployment using the Class-Path manifest entry. This can be used +within an ear to set up dependencies between sub deployments, and also +to allow modules access to additional jars deployed in an ear that are +not sub deployments and are not in the EAR/lib directory. If a jar in +the EAR/lib directory references a jar via Class-Path: then this +additional jar is merged into the parent ear’s module, and is accessible +to all sub deployments in the ear.

+
+
+
+
+

1.6. Global Modules

+
+

It is also possible to set up global modules, that are accessible to all +deployments. This is done by modifying the configuration file +(standalone/domain.xml).

+
+
+

For example, to add javassist to all deployments you can use the +following XML:

+
+
+
standalone.xml/domain.xml
+
+
<subsystem xmlns="urn:jboss:domain:ee:1.0" >            
+  <global-modules>
+    <module name="org.javassist" slot="main" />            
+  </global-modules> 
+</subsystem>
+
+
+
+

Note that the slot field is optional and defaults to main.

+
+
+
+

1.7. Global Directory

+
+

The EE subsystem allows the configuration of a global directory, which represents a directory tree scanned automatically to include .jar files and resources as a single additional dependency. This dependency is added as a system dependency to all deployed application. See Subsystem EE Global Directory to get more information about how to set up a global directory.

+
+
+
+

1.8. JBoss Deployment Structure File

+
+

jboss-deployment-structure.xml is a JBoss specific deployment +descriptor that can be used to control class loading in a fine grained +manner. It should be placed in the top level deployment, in META-INF +(or WEB-INF for web deployments). It can do the following:

+
+
+
    +
  • +

    Prevent automatic dependencies from being added

    +
  • +
  • +

    Add additional dependencies

    +
  • +
  • +

    Define additional modules

    +
  • +
  • +

    Change an EAR deployments isolated class loading behaviour

    +
  • +
  • +

    Add additional resource roots to a module

    +
  • +
+
+
+

An example of a complete jboss-deployment-structure.xml file for an +ear deployment is as follows:

+
+
+
jboss-deployment-structure.xml
+
+
<jboss-deployment-structure>
+  <!-- Make sub deployments isolated by default, so they cannot see each others classes without a Class-Path entry -->
+  <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
+  <!-- This corresponds to the top level deployment. For a war this is the war's module, for an ear -->
+  <!-- This is the top level ear module, which contains all the classes in the EAR's lib folder     -->
+  <deployment>
+     <!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
+     <!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
+     <exclude-subsystems>
+        <subsystem name="logging" />
+    </exclude-subsystems>
+    <!-- Exclusions allow you to prevent the server from automatically adding some dependencies     -->
+    <exclusions>
+        <module name="org.javassist" />
+    </exclusions>
+    <!-- This allows you to define additional dependencies, it is the same as using the Dependencies: manifest attribute -->
+    <dependencies>
+      <module name="deployment.javassist.proxy" />
+      <module name="deployment.myjavassist" />
+      <!-- Import META-INF/services for ServiceLoader impls as well -->
+      <module name="myservicemodule" services="import"/>
+    </dependencies>
+    <!-- These add additional classes to the module. In this case it is the same as including the jar in the EAR's lib directory -->
+    <resources>
+      <resource-root path="my-library.jar" />
+    </resources>
+  </deployment>
+  <sub-deployment name="myapp.war">
+    <!-- This corresponds to the module for a web deployment -->
+    <!-- it can use all the same tags as the <deployment> entry above -->
+    <dependencies>
+      <!-- Adds a dependency on a ejb jar. This could also be done with a Class-Path entry -->
+      <module name="deployment.myear.ear.myejbjar.jar" />
+    </dependencies>
+    <!-- Set's local resources to have the lowest priority -->
+    <!-- If the same class is both in the sub deployment and in another sub deployment that -->
+    <!-- is visible to the war, then the Class from the other deployment will be loaded,  -->
+    <!-- rather than the class actually packaged in the war. -->
+    <!-- This can be used to resolve ClassCastExceptions  if the same class is in multiple sub deployments-->
+    <local-last value="true" />
+  </sub-deployment>
+  <!-- Now we are going to define two additional modules -->
+  <!-- This one is a different version of javassist that we have packaged -->
+  <module name="deployment.myjavassist" >
+    <resources>
+     <resource-root path="javassist.jar" >
+       <!-- We want to use the servers version of javassist.util.proxy.* so we filter it out-->
+       <filter>
+         <exclude path="javassist/util/proxy" />
+       </filter>
+     </resource-root>
+    </resources>
+  </module>
+  <!-- This is a module that re-exports the containers version of javassist.util.proxy -->
+  <!-- This means that there is only one version of the Proxy classes defined          -->
+  <module name="deployment.javassist.proxy" >
+    <dependencies>
+      <module name="org.javassist" >
+        <imports>
+          <include path="javassist/util/proxy" />
+          <exclude path="/**" />
+        </imports>
+      </module>
+    </dependencies>
+  </module>
+</jboss-deployment-structure>
+
+
+
+ + + + + +
+ + +The xsd for jboss-deployment-structure.xml is available at +jboss-deployment-structure-1_3.xsd +
+
+
+
+

1.9. Accessing JDK classes

+
+

Not all JDK classes are exposed to a deployment by default. If your +deployment uses JDK classes that are not exposed you can get access to +them using jboss-deployment-structure.xml with system dependencies:

+
+
+
Using jboss-deployment-structure.xml to access JDK classes
+
+
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
+    <deployment>
+        <dependencies>
+            <system export="true">
+                <paths>
+                    <path name="com/sun/corba/se/spi/legacy/connection"/>
+                </paths>
+            </system>
+        </dependencies>
+    </deployment>
+</jboss-deployment-structure>
+
+
+
+
+

1.10. The "jboss.api" property and application use of modules shipped with WildFly

+
+

The WildFly distribution includes a large number of modules, a great +many of which are included for use by WildFly internals, with no testing +of the appropriateness of their direct use by applications or any +commitment to continue to ship those modules in future releases if they +are no longer needed by the internals. So how can a user know whether it +is advisable for their application to specify an explicit dependency on +a module WildFly ships? The "jboss.api" property specified in the +module’s module.xml file can tell you:

+
+
+
Example declaration of the jboss.api property
+
+
<module xmlns="urn:jboss:module:1.9" name="com.google.guava">
+    <properties>
+        <property name="jboss.api" value="private"/>
+    </properties>
+
+
+
+

If a module does not have a property element like the above, then it’s +equivalent to one with a value of "public".

+
+
+

Following are the meanings of the various values you may see for the +jboss.api property:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueMeaning

public

May be explicitly depended upon by end user applications. Will +continue to be available in future releases within the same major series +and should not have incompatible API changes in future releases within +the same minor series, and ideally not within the same major series.

private

Intended for internal use only. Only tested according to +internal usage. May not be safe for end user applications to use +directly.Could change significantly or be removed in a future release +without notice.

unsupported

If you see this value in a module.xml in a WildFly +release, please file a bug report, as it is not applicable in WildFly. +In EAP it has a meaning equivalent to "private" but that does not mean +the module is "private" in WildFly; it could very easily be "public".

preview

May be explicitly depended upon by end user applications, but +there are no guarantees of continued availability in future releases or +that there will not be incompatible API changes. This is not a common +classification in WildFly. It is not used in WildFly 10.

deprecated

May be explicitly depended upon by end user applications. +Stable and reliable but an alternative should be sought. Will be removed +in a future major release.

+
+

Note that these definitions are only applicable to WildFly. In EAP and +other Red Hat products based on WildFly the same classifiers are used, +with generally similar meaning, but the precise meaning is per the +definitions on the Red Hat customer support portal.

+
+
+

If an application declares a direct dependency on a module marked +"private", "unsupported" or "deprecated", during deployment a WARN +message will be logged. The logging will be in log categories +"org.jboss.as.dependency.private", "org.jboss.as.dependency.unsupported" +and "org.jboss.as.dependency.deprecated" respectively. These categories +are not used for other purposes, so once you feel sufficiently warned +the logging can be safely suppressed by turning the log level for the +relevant category to ERROR or higher.

+
+
+

Other than the WARN messages noted above, declaring a direct dependency +on a non-public module has no impact on how WildFly processes the +deployment.

+
+
+
+

1.11. How to list the module dependencies of a deployed application

+
+

In WildFly it is possible to list the module dependencies added by the container to your deployed application. This task can be achieved via the command line interface, where specific operations are available to list the module dependencies for deployments and ear-subdeployments.

+
+
+

You can list the module dependencies of a deployment using the list-modules operation as below:

+
+
+
+
[standalone@localhost:9990 /] /deployment=test-application.war:list-modules
+
+
+
+

In case of ear-subdeployments, the list-modules operation is also available under the subdeployment resource:

+
+
+
+
[standalone@localhost:9990 /] /deployment=test-application.ear/subdeployment=test-application.war:list-modules
+
+
+
+

If you are running WildFly in domain mode, this operation is available via the server resource at the host level:

+
+
+
+
[domain@localhost:9990 /] /host=primary/server=server-one/deployment=test-application.war:list-modules
+
+
+
+
+
[domain@localhost:9990 /] /host=primary/server=server-one/deployment=test-application.ear/subdeployment=test-application.war:list-modules
+
+
+
+

By default, the list-modules operation shows the list of dependencies in a compact view, including only the module name. You can control this output using the attribute verbose=[false*|true] to enable/disable a detailed response.

+
+
+

The following output shows an example of a detailed view:

+
+
+
+
[standalone@localhost:9990 /] /deployment=test-application.ear:list-modules(verbose=true)
+  {
+      "outcome" => "success",
+      "result" => {
+          "system-dependencies" => [
+              {
+                  "name" => "com.fasterxml.jackson.datatype.jackson-datatype-jdk8",
+                  "optional" => true,
+                  "export" => false,
+                  "import-services" => true
+              },
+              {
+                  "name" => "com.fasterxml.jackson.datatype.jackson-datatype-jsr310",
+                  "optional" => true,
+                  "export" => false,
+                  "import-services" => true
+              },
+              ...
+          ],
+          "local-dependencies" => [
+              {
+                "name" => "deployment.test-application.ear.test-application-ejb.jar",
+                "optional" => false,
+                "export" => false,
+                "import-services" => true
+              },
+              ...
+          ],
+          "user-dependencies" => [
+              {
+                  "name" => "com.fasterxml.jackson.datatype.jackson-datatype-jdk8",
+                  "optional" => false,
+                  "export" => false,
+                  "import-services" => false
+              },
+              {
+                  "name" => "org.hibernate:5.3",
+                  "optional" => false,
+                  "export" => false,
+                  "import-services" => false
+              },
+              ...
+          ]
+      }
+  }
+
+
+
+

The list_modules operation shows information in three different categories:

+
+
+
    +
  • +

    system-dependencies: These are the dependencies added implicitly by the server container.

    +
  • +
  • +

    local-dependencies: These are dependencies on other parts of the deployment.

    +
  • +
  • +

    user-dependencies: These are the dependencies defined by the user via a manifest file or deployment-structure.xml.

    +
  • +
+
+
+

For each module, the following information is shown:

+
+
+
    +
  • +

    name: The module name and, if the slot name is not the default "main" slot, the slot name is concatenated after a ":" character separator.

    +
  • +
  • +

    optional: If the dependency was added as an optional dependency.

    +
  • +
  • +

    export: If the dependency is being exported to other modules.

    +
  • +
  • +

    import-services: If the module for the deployment or subdeployment is allowed to import services from the dependency.

    +
  • +
+
+
+
+
+
+

2. Implicit module dependencies for deployments

+
+
+

As explained in the Class Loading in WildFly article, +WildFly 29 is based on module classloading. A class within a module B +isn’t visible to a class within a module A, unless module B adds a +dependency on module A. Module dependencies can be explicitly (as +explained in that classloading article) or can be "implicit". This +article will explain what implicit module dependencies mean and how, +when and which modules are added as implicit dependencies.

+
+
+

2.1. What’s an implicit module dependency?

+
+

Consider an application deployment which contains Jakarta Enterprise Beans. Jakarta Enterprise Beans typically +need access to classes from the jakarta.ejb.* package and other Jakarta EE +API packages. The jars containing these packages are already shipped in +WildFly and are available as "modules". The module which contains the +jakarta.ejb.* classes has a specific name and so does the module which +contains all the Jakarta EE API classes. For an application to be able to +use these classes, it has to add a dependency on the relevant modules. +Forcing the application developers to add module dependencies like these +(i.e. dependencies which can be "inferred") isn’t a productive approach. +Hence, whenever an application is being deployed, the deployers within +the server, which are processing this deployment "implicitly" add these +module dependencies to the deployment so that these classes are visible +to the deployment at runtime. This way the application developer doesn’t +have to worry about adding them explicitly. How and when these implicit +dependencies are added is explained in the next section.

+
+
+
+

2.2. How and when is an implicit module dependency added?

+
+

When a deployment is being processed by the server, it goes through a +chain of "deployment processors". Each of these processors will have a +way to check if the deployment meets a certain criteria and if it does, +the deployment processor adds an implicit module dependency to that +deployment. Let’s take an example - Consider (again) an Jakarta Enterprise Beans 3 deployment +which has the following class:

+
+
+
MySuperDuperBean.java
+
+
@Stateless
+public class MySuperDuperBean {
+ 
+...
+ 
+}
+
+
+
+

As can be seen, we have a simple @Stateless Jakarta Enterprise Beans. When the deployment +containing this class is being processed, the Jakarta Enterprise Beans deployment processor +will see that the deployment contains a class with the @Stateless +annotation and thus identifies this as an Jakarta Enterprise Beans deployment. This is just +one of the several ways, various deployment processors can identify a +deployment of some specific type. The Jakarta Enterprise Beans deployment processor will +then add an implicit dependency on the Jakarta EE API module, so that all +the Jakarta EE API classes are visible to the deployment.

+
+
+

Some subsystems will always add API classes, even if the trigger +condition is not met. These are listed separately below.

+
+
+

In the next section, we’ll list down the implicit module dependencies +that are added to a deployment, by various deployers within WildFly.

+
+
+
+

2.3. Which are the implicit module dependencies?

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Subsystem responsible for adding the implicit dependencyDependencies +that are always addedDependencies that are added if a trigger +condition is metTrigger which leads to the implicit module dependency +being added

Core Server

java.se org.jboss.vfs

 

 

Batch Subsystem

jakarta.batch.api

 

 implicit

EE Subsystem

javaee.api

 

 

Jakarta Enterprise Beans 3 subsystem

 

javaee.api

The presence of ejb-jar.xml (in valid +locations in the deployment, as specified by spec) or the presence of +annotation based Jakarta Enterprise Beans (ex: @Stateless, @Stateful, @MessageDriven etc)

Jakarta RESTful Web Services (RESTEasy) subsystem

com.fasterxml.jackson.core.jackson-annotations
+com.fasterxml.jackson.core.jackson-core
+com.fasterxml.jackson.core.jackson-databind
+com.fasterxml.jackson.datatype.jackson-datatype-jdk8
+com.fasterxml.jackson.datatype.jackson-datatype-jsr310
+com.fasterxml.jackson.jakarta.jackson-jakarta-json-provider
+jakarta.json.api
+jakarta.ws.rs.api
+jakarta.xml.bind.api
+org.eclipse.microprofile.restclient
+org.jboss.resteasy.resteasy-atom-provider
+org.jboss.resteasy.resteasy-client
+org.jboss.resteasy.resteasy-client-api
+org.jboss.resteasy.resteasy-client-microprofile
+org.jboss.resteasy.resteasy-core
+org.jboss.resteasy.resteasy-core-spi
+org.jboss.resteasy.resteasy-crypto
+org.jboss.resteasy.resteasy-jackson2-provider
+org.jboss.resteasy.resteasy-jaxb-provider
+org.jboss.resteasy.resteasy-jsapi
+org.jboss.resteasy.resteasy-json-binding-provider
+org.jboss.resteasy.resteasy-json-p-provider
+org.jboss.resteasy.resteasy-multipart-provider
+org.jboss.resteasy.resteasy-validator-provider

The presence of Jakarta RESTful Web Services annotations in the deployment

Jakarta Connectors subsystem

jakarta.resource.api

jakarta.jms.api jakarta.validation.api +org.jboss.logging org.jboss.ironjacamar.api org.jboss.ironjacamar.impl +org.hibernate.validator

If the deployment is a resource adaptor (RAR) +deployment.

Jakarta Persistence (Hibernate) subsystem

jakarta.persistence.api

javaee.api +org.jboss.as.jpa org.hibernate

The presence of an @PersistenceUnit or +@PersistenceContext annotation, or a <persistence-unit-ref> or +<persistence-context-ref> in a deployment descriptor..

Logging Subsystem

org.jboss.logging org.apache.commons.logging + org.apache.logging.log4j.api org.slf4j org.jboss.logging.jul-to-slf4j-stub

 

 

SAR Subsystem

 

org.jboss.logging org.jboss.modules

The deployment +is a SAR archive

Security Subsystem

org.picketbox

 

 

Web Subsystem

 

javaee.api jakarta.faces.api jakarta.faces.impl org.hibernate.validator org.jboss.as.web org.jboss.logging

The deployment is a WAR archive. Jakarta Faces +is only added if used. Multiple version options exist for Jakarta Faces.

Web Services Subsystem

org.jboss.ws.api org.jboss.ws.spi

 

 

Weld (CDI) Subsystem

 

jakarta.persistence.api javaee.api org.javassist +org.jboss.interceptor org.jboss.as.weld org.jboss.logging +org.jboss.weld.core org.jboss.weld.api org.jboss.weld.spi

If a +beans.xml file is detected in the deployment

+
+
+
+
+

3. Deployment Descriptors used In WildFly

+
+
+

This page gives a list and a description of all the valid deployment +descriptors that a WildFly deployment can use. This document is a work +in progress.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptorLocationSpecificationDescriptionInfo

jboss-deployment-structure.xml

META-INF or WEB-INF of the top level +deployment

 

This file can be used to control class loading for the +deployment

Class Loading in WildFly

beans.xml

WEB-INF or META-INF

Jakarta Contexts and Dependency Injection

The presence of this descriptor +(even if empty) activates Jakarta Contexts and Dependency Injection

Weld Reference Guide

web.xml

WEB-INF

Servlet

Web deployment descriptor

 

jboss-web.xml

WEB-INF

 

JBoss Web deployment descriptor. This can be +use to override settings from web.xml, and to set WildFly specific +options

 

ejb-jar.xml

WEB-INF of a war, or META-INF of an Jakarta Enterprise Beans jar

Jakarta Enterprise Beans

The Jakarta Enterprise Beans +spec deployment descriptor

ejb-jar.xml schema

jboss-ejb3.xml

WEB-INF of a war, or META-INF of an Jakarta Enterprise Beans jar

 

The +JBoss Jakarta Enterprise Beans deployment descriptor, this can be used to override settings +from ejb-jar.xml, and to set WildFly specific settings

 

application.xml

META-INF of an EAR

Jakarta EE Platform Specification

 

application.xml schema

jboss-app.xml

META-INF of an EAR

 

JBoss application deployment +descriptor, can be used to override settings application.xml, and to set +WildFly specific settings

 

persistence.xml

META-INF

Jakarta Persistence

Jakarta Persistence descriptor used for defining +persistence units

Hibernate Reference Guide

jboss-ejb-client.xml

WEB-INF of a war, or META-INF of an Jakarta Enterprise Beans jar

 

Remote Jakarta Enterprise Beans settings. This file is used to setup the Jakarta Enterprise Beans client context +for a deployment that is used for remote Jakarta Enterprise Beans invocations

Jakarta Enterprise Beans +invocations from a remote server instance

jbosscmp-jdbc.xml

META-INF of an Jakarta Enterprise Beans jar

 

CMP deployment +descriptor. Used to map CMP entity beans to a database. The format is +largely unchanged from previous versions.

 

ra.xml

META-INF of a rar archive

 

Spec deployment descriptor for +resource adaptor deployments

IronJacamar Reference Guide Schema

ironjacamar.xml

META-INF of a rar archive

 

JBoss deployment +descriptor for resource adaptor deployments

IronJacamar Reference Guide

*-jms.xml

META-INF or WEB-INF

 

Jakarta Messaging message destination deployment +descriptor, used to deploy message destinations with a deployment

 

*-ds.xml

META-INF or WEB-INF

 

Datasource deployment descriptor, use +to bundle datasources with a deployment

DataSource Configuration

application-client.xml

META-INF of an application client jar

Jakarta EE +Platform Specification

The spec deployment descriptor for application +client deployments

application-client.xml schema

jboss-client.xml

META-INF of an application client jar

 

The WildFly +specific deployment descriptor for application client deployments

 

jboss-webservices.xml

META-INF for Jakarta Enterprise Beans webservice deployments or +WEB-INF for POJO webservice deployments/Jakarta Enterprise Beans webservice endpoints bundled +in .war

 

The JBossWS 4.0.x specific deployment descriptor for +webservice endpoints

 

+
+
+
+ +
+
+

The purpose of this page is to document tips and techniques that will +assist developers in creating fast, secure, and reliable applications. +It is also a place to note what you should avoid doing when developing +applications.

+
+
+
+
+

5. Application Client Reference

+
+
+

As a Jakarta EE compliant server, WildFly 29 contains an application +client. An application client is essentially a cut down server instance, +that allows you to use EE features such as injection in a client side +program.

+
+
+ + + + + +
+ + +This article is not a tutorial on application client development, rather +it covers the specifics of the WildFly application client. There are +tutorials available elsewhere that cover application client basics, such +as +this +one. +
+
+
+ + + + + +
+ + +Note that the application client is different from the Jakarta Enterprise Beans client +libraries, it is perfectly possible to write a client application that does +not use the application client, but instead uses the jboss-ejb-client +library directly. +
+
+
+

5.1. Getting Started

+
+

To launch the application client use the appclient.sh or +appclient.bat script in the bin directory. For example:

+
+
+
+
./appclient.sh --host=10.0.0.1 myear.ear#appClient.jar arg1
+
+
+
+

The --host argument tells the appclient the server to connect to. The +next argument is the application client deployment to use, application +clients can only run a single deployment, and this deployment must also +be deployed on the full server instance that the client is connecting +too.

+
+
+

Any arguments after the deployment to use are passed directly through to +the application clients main function.

+
+
+
+

5.2. Connecting to more than one host

+
+

If you want to connect to more than one host or make use of the +clustering functionality then you need to specify a +jboss-ejb-client.properties file rather than a host:

+
+
+
+
./appclient.sh --ejb-client-properties=my-jboss-ejb-client.properties myear.ear#appClient.jar arg1
+
+
+
+
+
+
+

6. Embedded API

+
+
+

The embedded API can be used to launch WildFly Full within a currently running process.

+
+
+

The embedded server can be reinitialized with a different JBoss Home. However the module directory, module.path +system property, and the modules system packages, jboss.modules.system.pkgs system property, are effectively static. +This means that creating a new embedded server or host controller within the same VM will not allow overriding the +modules directory or the system packages.

+
+
+

You can also set a hint to indicate which log manager is being used. The hint attempts to ensure that JBoss Logging +will bind to the correct log manager. It also adds the hinted logging package to the modules system packages.

+
+
+ + + + + +
+ + +If using the embedded API with Java 11 you’ll need to add --add-module=java.se to your JVM arguments. See +MODULES-372 for details. +
+
+
+

6.1. Standalone API

+
+

A standalone server allows you to manage the lifecycle of a server within the currently running process. The server +can be configured in admin-only mode or fully started and applications can be deployed.

+
+
+

6.1.1. Examples

+
+
Simple Example
+
+
final StandaloneServer server = EmbeddedProcessFactory.createStandaloneServer(Configuration.Builder.of(jbossHome).build());
+server.start();
+
+try {
+    // Print the listening address
+    final ModelControllerClient client = server.getModelControllerClient();
+    final ModelNode address = Operations.createAddress("interface", "public");
+    final ModelNode op = Operations.createReadAttributeOperation(address, "inet-address");
+    op.get("resolve-expressions").set(true);
+    final ModelNode result = client.execute(op);
+    if (!Operations.isSuccessfulOutcome((result))) {
+        throw new RuntimeException("Failed to get the public inet-address: " + Operations.getFailureDescription(result));
+    }
+    System.out.printf("Listening on %s%n", Operations.readResult(result).asString());
+} finally {
+    server.stop();
+}
+
+
+
+
Server in admin-only Example
+
+
final StandaloneServer server = EmbeddedProcessFactory.createStandaloneServer(
+    Configuration.Builder.of(jbossHome)
+        .addCommandArgument("--admin-only")
+        .build());
+server.start();
+
+try {
+    // Print the listening address
+    final ModelControllerClient client = server.getModelControllerClient();
+    final ModelNode address = Operations.createAddress();
+    final ModelNode op = Operations.createReadAttributeOperation(address, "running-mode");
+    op.get("resolve-expressions").set(true);
+    final ModelNode result = client.execute(op);
+    if (!Operations.isSuccessfulOutcome((result))) {
+        throw new RuntimeException("Failed to get the running-mode: " + Operations.getFailureDescription(result));
+    }
+    System.out.printf("Running mode is %s%n", Operations.readResult(result).asString());
+} finally {
+    server.stop();
+}
+
+
+
+
log4j2 Hint
+
+
final StandaloneServer server = EmbeddedProcessFactory.createStandaloneServer(Configuration.Builder.of(jbossHome)
+        .setLoggerHint(Configuration.LoggerHint.LOG4J2)
+        .build()
+);
+server.start();
+
+try {
+    // Print the listening address
+    final ModelControllerClient client = server.getModelControllerClient();
+    final ModelNode address = Operations.createAddress("interface", "public");
+    final ModelNode op = Operations.createReadAttributeOperation(address, "inet-address");
+    op.get("resolve-expressions").set(true);
+    final ModelNode result = client.execute(op);
+    if (!Operations.isSuccessfulOutcome((result))) {
+        throw new RuntimeException("Failed to get the public inet-address: " + Operations.getFailureDescription(result));
+    }
+    org.apache.logging.log4j.LogManager.getFormatterLogger(Main.class).info("Listening on %s%n", Operations.readResult(result).asString());
+} finally {
+    server.stop();
+}
+
+
+
+
+
+

6.2. Host Controller API

+
+

The host controller API creates a host controller in the current process. The host controller is started in admin-only +mode therefore servers within the domain cannot be started. However the server configuration can be altered via +management operations.

+
+
+

6.2.1. Example

+
+
Simple Example
+
+
final HostController server = EmbeddedProcessFactory.createHostController(Configuration.Builder.of(jbossHome).build());
+server.start();
+
+try {
+    // Print the listening address
+    final ModelControllerClient client = server.getModelControllerClient();
+    final ModelNode address = new ModelNode().setEmptyList();
+    final ModelNode op = Operations.createOperation(ClientConstants.READ_CHILDREN_NAMES_OPERATION, address);
+    op.get(ClientConstants.CHILD_TYPE).set(ClientConstants.SERVER_GROUP);
+    final ModelNode result = client.execute(op);
+    if (!Operations.isSuccessfulOutcome(result)) {
+        throw new RuntimeException("Failed to get the public inet-address: " + Operations.getFailureDescription(result));
+    }
+    System.out.println("Available server groups:");
+    for (ModelNode value : Operations.readResult(result).asList()) {
+        System.out.printf("\t%s%n", value.asString());
+    }
+} finally {
+    server.stop();
+}
+
+
+
+
+
+
+
+

7. CDI Reference

+
+
+

WildFly uses Weld, the CDI reference +implementation as its CDI provider. To activate CDI for a deployment +simply add a beans.xml file in any archive in the deployment.

+
+
+

This document is not intended to be a CDI tutorial, it only covers CDI +usage that is specific to WildFly. For some general information on CDI +see the below links:

+
+ +
+

7.1. Using CDI Beans from outside the deployment

+
+

For WildFly 29 onwards, it is now possible to have classes outside the +deployment be picked up as CDI beans. In order for this to work, you must +add a dependency on the external deployment that your beans are coming +from, and make sure the META-INF directory of this deployment is +imported, so that your deployment has visibility to the beans.xml file +(To import beans from outside the deployment they must be in an archive +with a beans.xml file).

+
+
+

There are two ways to do this, either using the MANIFEST.MF or using +jboss-deployment-structure.xml.

+
+
+

Using MANIFEST.MF you need to add a Dependencies entry, with +meta-inf specified after the entry, e.g.

+
+
+
+
Dependencies: com.my-cdi-module meta-inf, com.my-other-cdi-module meta-inf
+
+
+
+

Using jboss-deployment-structure.xml you need to add a dependency +entry with meta-inf="import", e.g.

+
+
+
+
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
+    <deployment>
+        <dependencies>
+            <module name="deployment.d1.jar" meta-inf="import"/>
+        </dependencies>
+    </deployment>
+</jboss-deployment-structure>
+
+
+
+

Note that this can be used to create beans from both modules in the +modules directory, and from other deployments.

+
+
+

For more information on class loading and adding dependencies to your +deployment please see the Class +Loading Guide

+
+
+
+

7.2. Suppressing implicit bean archives

+
+

CDI 1.1 brings new options to packaging of CDI-enabled applications. In +addition to well-known explicit bean archives (basically any archive +containing the beans.xml file) the specification introduces implicit +bean archives.

+
+
+

An implicit bean archive is any archive that contains one or more +classes annotated with a bean defining annotation (scope annotation) or +one or more session beans. As a result, the beans.xml file is no longer +required for CDI to work in your application.

+
+
+

In an implicit bean archive only those classes that are either +annotated with bean defining annotations or are session beans are +recognized by CDI as beans (other classes cannot be injected).

+
+
+

This has a side-effect, though. Libraries exist that make use of scope +annotation (bean defining annotations) for their own convenience but are +not designed to run with CDI support. Guava would be an example of such +library. If your application bundles such library it will be recognized +as a CDI archive and may +fail the +deployment.

+
+
+

Fortunately, WildFly makes it possible to suppress implicit bean +archives and only enable CDI in archives that bundle the beans.xml file. +There are two ways to achieve this:

+
+
+

7.2.1. Per-deployment configuration

+
+

You can either set this up for your deployment only by adding the +following content to the META-INF/jboss-all.xml file of your +application:

+
+
+
+
<jboss xmlns="urn:jboss:1.0">
+    <weld xmlns="urn:jboss:weld:1.0" require-bean-descriptor="true"/>
+</jboss>
+
+
+
+
+

7.2.2. Global configuration

+
+

Alternatively, you may configure this for all deployments in your +WildFly instance by executing the following command:

+
+
+
+
/subsystem=weld:write-attribute(name=require-bean-descriptor,value=true)
+
+
+
+
+
+

7.3. Non-portable mode

+
+

CDI 1.1 clarifies some aspects of how CDI protable extensions work. As a +result, some extensions that do not use the API properly (but were +tolerated in CDI 1.0 environment) may stop working with CDI 1.1.If this +is the case of your application you will see an exception like this:

+
+
+
+
org.jboss.weld.exceptions.IllegalStateException: WELD-001332: BeanManager method getBeans() is not available during application initialization
+
+
+
+

Fortunatelly, there is a non-portable mode available in WildFly which +skips some of the API usage checks and therefore allows the legacy +extensions to work as before.

+
+
+

Again, there are two ways to enable the non-portable mode:

+
+
+

7.3.1. Per-deployment configuration

+
+

You can either set this up for your deployment only by adding the +following content to the META-INF/jboss-all.xml file of your +application:

+
+
+
+
<jboss xmlns="urn:jboss:1.0">
+    <weld xmlns="urn:jboss:weld:1.0" non-portable-mode="true" />
+</jboss>
+
+
+
+
+

7.3.2. Global configuration

+
+

Alternatively, you may configure this for all deployments in your +WildFly instance by executing the following command:

+
+
+
+
/subsystem=weld:write-attribute(name=non-portable-mode,value=true)
+
+
+
+

Note that new portable extensions should always use the +BeanManager +API properly and thus never require the non-portable mode. The +non-portable mode only exists to preserve compatibility with legacy +extensions!

+
+
+ + + + + +
+ + +References in this document to CDI refer to Jakarta Contexts and Dependency Injection unless otherwise noted. +
+
+
+
+
+
+
+

8. EE Concurrency Utilities

+
+
+
+EE Concurrency Utilities (JSR 236) is a technology introduced with Java +EE 7, which adapts well known Java SE concurrency utilities to the Java +EE application environment specifics. The Jakarta EE application server is +responsible for the creation (and shutdown) of every instance of the EE +Concurrency Utilities, and provide these to the applications, ready to +use. +
+
+
+

The EE Concurrency Utilities support the propagation of the invocation +context, capturing the existent context in the application threads to +use in their own threads, the same way a logged-in user principal is +propagated when a servlet invokes an Jakarta Enterprise Beans asynchronously. The propagation +of the invocation context includes, by default, the class loading, JNDI +and security contexts.

+
+
+

WildFly creates a single default instance of each EE Concurrency Utility +type in all configurations within the distribution, as mandated by the +specification, but additional instances, perhaps customised to better +serve a specific usage, may be created through WildFly’s EE Subsystem +Configuration. To learn how to configure EE Concurrency Utilities please +refer to EE Concurrency +Utilities Configuration. Additionally, the EE subsystem configuration +also includes the configuration of which instance should be considered +the default instance mandated by the Jakarta EE specification, and such +configuration is covered by +Default EE Bindings Configuration.

+
+
+

8.1. Context Service

+
+

The Context Service ( jakarta.enterprise.concurrent.ContextService) is a +brand new concurrency utility, which applications may use to build +contextual proxies from existing objects.

+
+
+

A contextual proxy is an object that sets an invocation context, captured +when created, whenever is invoked, before delegating the invocation to +the original object.

+
+
+

Usage example:

+
+
+
+
public void onGet(...) {
+  Runnable task = ...;
+  Runnable contextualTask = contextService.createContextualProxy(task, Runnable.class);
+  // ...
+}
+
+
+
+

WildFly default configurations creates a single default instance of a +Context Service, which may be retrieved through @Resource injection:

+
+
+
+
@Resource
+private ContextService contextService;
+
+
+
+ + + + + +
+ + +To retrieve instead a non default Context Service instance, +@Resource’s `lookup attribute needs to specify the JNDI name used in +the wanted instance configuration. WildFly will always inject the +default instance, no matter what’s the name attribute value, if the +lookup attribute is not defined. +
+
+
+

Applications may alternatively use instead the standard JNDI API:

+
+
+
+
ContextService contextService = InitialContext.doLookup("java:comp/DefaultContextService");
+
+
+
+ + + + + +
+ + +As mandated by the Jakarta EE specification, the default Context Service +instance’s JNDI name is java:comp/DefaultContextService. +
+
+
+
+

8.2. Managed Thread Factory

+
+

The Managed Thread Factory ( +jakarta.enterprise.concurrent.ManagedThreadFactory) allows Java EE +applications to create Java threads. It is an extension of Java SE’s +Thread Factory ( java.util.concurrent.ThreadFactory) adapted to the +Jakarta EE platform specifics.

+
+
+

Managed Thread Factory instances are managed by the application server, +thus Jakarta EE applications are forbidden to invoke any lifecycle related +method.

+
+
+

In case the Managed Thread Factory is configured to use a Context +Service, the application’s thread context is captured when a thread +creation is requested, and such context is propagated to the thread’s +Runnable execution.

+
+
+

Managed Thread Factory threads implement +jakarta.enterprise.concurrent.ManageableThread, which allows an +application to learn about termination status.

+
+
+

Usage example:

+
+
+
+
public void onGet(...) {
+  Runnable task = ...;
+  Thread thread = managedThreadFactory.newThread(task);
+  thread.start();
+    // ...
+}
+
+
+
+

WildFly default configurations creates a single default instance of a +Managed Thread Factory, which may be retrieved through @Resource +injection:

+
+
+
+
@Resource
+private ManagedThreadFactory managedThreadFactory;
+
+
+
+ + + + + +
+ + +To retrieve instead a non default Managed Thread Factory instance, +@Resource’s `lookup attribute needs to specify the JNDI name used in +the wanted instance configuration. WildFly will always inject the +default instance, no matter what’s the name attribute value, in case +the lookup attribute is not defined. +
+
+
+

Applications may alternatively use instead the standard JNDI API:

+
+
+
+
ManagedThreadFactory managedThreadFactory = InitialContext.doLookup("java:comp/DefaultManagedThreadFactory");
+
+
+
+ + + + + +
+ + +As mandated by the Jakarta EE specification, the default Managed Thread +Factory instance’s JNDI name is java:comp/DefaultManagedThreadFactory. +
+
+
+
+

8.3. Managed Executor Service

+
+

The Managed Executor Service ( +jakarta.enterprise.concurrent.ManagedExecutorService) allows Java EE +applications to submit tasks for asynchronous execution. It is an +extension of Java SE’s Executor Service ( +java.util.concurrent.ExecutorService) adapted to the Jakarta EE platform +requirements.

+
+
+

Managed Executor Service instances are managed by the application +server, thus Jakarta EE applications are forbidden to invoke any lifecycle +related method.

+
+
+

In case the Managed Executor Service is configured to use a Context +Service, the application’s thread context is captured when the task is +submitted, and propagated to the executor thread responsible for the +task execution.

+
+
+

Usage example:

+
+
+
+
public void onGet(...) {
+    Runnable task = ...;
+    Future future = managedExecutorService.submit(task);
+    // ...
+}
+
+
+
+

WildFly default configurations creates a single default instance of a +Managed Executor Service, which may be retrieved through @Resource +injection:

+
+
+
+
@Resource
+private ManagedExecutorService managedExecutorService;
+
+
+
+ + + + + +
+ + +To retrieve instead a non default Managed Executor Service instance, +@Resource’s `lookup attribute needs to specify the JNDI name used in +the wanted instance configuration. WildFly will always inject the +default instance, no matter what’s the name attribute value, in case +the lookup attribute is not defined. +
+
+
+

Applications may alternatively use instead the standard JNDI API:

+
+
+
+
ManagedExecutorService managedExecutorService = InitialContext.doLookup("java:comp/DefaultManagedExecutorService");
+
+
+
+ + + + + +
+ + +As mandated by the Jakarta EE specification, the default Managed Executor +Service instance’s JNDI name is +java:comp/DefaultManagedExecutorService. +
+
+
+
+

8.4. Managed Scheduled Executor Service

+
+

The Managed Scheduled Executor Service ( +jakarta.enterprise.concurrent.ManagedScheduledExecutorService) allows +Jakarta EE applications to schedule tasks for asynchronous execution. It is +an extension of Java SE’s Executor Service ( +java.util.concurrent.ScheduledExecutorService) adapted to the Java EE +platform requirements.

+
+
+

Managed Scheduled Executor Service instances are managed by the +application server, thus Jakarta EE applications are forbidden to invoke +any lifecycle related method.

+
+
+

In case the Managed Scheduled Executor Service is configured to use a +Context Service, the application’s thread context is captured when the +task is scheduled, and propagated to the executor thread responsible for +the task execution.

+
+
+

Usage example:

+
+
+
+
public void onGet(...) {
+    Runnable task = ...;
+    ScheduledFuture future = managedScheduledExecutorService.schedule(task, 60, TimeUnit.SECONDS);
+    // ...
+}
+
+
+
+

WildFly default configurations creates a single default instance of a +Managed Scheduled Executor Service, which may be retrieved through +@Resource injection:

+
+
+
+
@Resource
+private ManagedScheduledExecutorService managedScheduledExecutorService;
+
+
+
+ + + + + +
+ + +To retrieve instead a non default Managed Scheduled Executor Service +instance, @Resource’s `lookup attribute needs to specify the JNDI +name used in the wanted instance configuration. WildFly will always +inject the default instance, no matter what’s the name attribute +value, in case the lookup attribute is not defined. +
+
+
+

Applications may alternatively use instead the standard JNDI API:

+
+
+
+
ManagedScheduledExecutorService managedScheduledExecutorService = InitialContext.doLookup("java:comp/DefaultManagedScheduledExecutorService");
+
+
+
+ + + + + +
+ + +As mandated by the Jakarta EE specification, the default Managed Scheduled +Executor Service instance’s JNDI name is +java:comp/DefaultManagedScheduledExecutorService. +
+
+
+
+
+
+

9. Jakarta Enterprise Beans 3 Reference Guide

+
+
+

This chapter details the extensions that are available when developing +Enterprise Java Beans tm on WildFly 29.

+
+
+

Currently, there is no support for configuring the extensions using an +implementation specific descriptor file.

+
+
+

9.1. Resource Adapter for Message Driven Beans

+
+

Each Message Driven Bean must be connected to a resource adapter.

+
+
+

9.1.1. Specification of Resource Adapter using Metadata Annotations

+
+

The ResourceAdapter annotation is used to specify the resource adapter +with which the MDB should connect.

+
+
+

The value of the annotation is the name of the deployment unit +containing the resource adapter. For example jms-ra.rar.

+
+
+

For example:

+
+
+
+
@MessageDriven(messageListenerInterface = PostmanPat.class)
+@ResourceAdapter("ejb3-rar.rar")
+
+
+
+
+
+

9.2. Run-as Principal

+
+

Whenever a run-as role is specified for a given method invocation the +default anonymous principal is used as the caller principal. This +principal can be overridden by specifying a run-as principal.

+
+
+

9.2.1. Specification of Run-as Principal using Metadata Annotations

+
+

The RunAsPrincipal annotation is used to specify the run-as principal +to use for a given method invocation.

+
+
+

The value of the annotation specifies the name of the principal to +use. The actual type of the principal is undefined and should not be +relied upon.

+
+
+

Using this annotation without specifying a run-as role is considered an +error.

+
+
+

For example:

+
+
+
+
@RunAs("admin")
+@RunAsPrincipal("MyBean")
+
+
+
+
+
+

9.3. Security Domain

+
+

Each Enterprise Java Bean tm can be associated with a security domain. +Only when an Jakarta Enterprise Beans are associated with a security domain will +authentication and authorization be enforced.

+
+
+

9.3.1. Specification of Security Domain using Metadata Annotations

+
+

The SecurityDomain annotation is used to specify the security domain +to associate with the Jakarta Enterprise Beans.

+
+
+

The value of the annotation is the name of the security domain to be +used.

+
+
+

For example:

+
+
+
+
@SecurityDomain("other")
+
+
+
+
+
+

9.4. Transaction Timeout

+
+

For any newly started transaction a transaction timeout can be specified +in seconds.

+
+
+

When a transaction timeout of 0 is used, then the actual transaction +timeout will default to the domain configured default.
+TODO: add link to tx subsystem

+
+
+

Although this is only applicable when using transaction attribute +REQUIRED or REQUIRES_NEW the application server will not detect +invalid setups.

+
+
+

New Transactions

+
+
+ + + + + +
+ + +Take care that even when transaction attribute REQUIRED is specified, +the timeout will only be applicable if a new transaction is started. +
+
+
+

9.4.1. Specification of Transaction Timeout with Metadata Annotations

+
+

The TransactionTimeout annotation is used to specify the transaction +timeout for a given method.

+
+
+

The value of the annotation is the timeout used in the given unit +granularity. It must be a positive integer or 0. Whenever 0 is specified +the default domain configured timeout is used.

+
+
+

The unit specifies the granularity of the value. The actual value +used is converted to seconds. Specifying a granularity lower than +SECONDS is considered an error, even when the computed value will +result in an even amount of seconds.

+
+
+

For example:@TransactionTimeout(value = 10, unit = TimeUnit.SECONDS)

+
+
+
+

9.4.2. Specification of Transaction Timeout in the Deployment Descriptor

+
+

The trans-timeout element is used to define the transaction timeout +for business, home, component, and message-listener interface methods; +no-interface view methods; web service endpoint methods; and timeout +callback methods.

+
+
+

The trans-timeout element resides in the urn:trans-timeout namespace +and is part of the standard container-transaction element as defined +in the jboss namespace.

+
+
+

For the rules when a container-transaction is applicable please refer +to EJB 3.1 FR 13.3.7.2.1.

+
+
+
Example of trans-timeout
+
+

jboss-ejb3.xml

+
+
+
+
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+               xmlns="http://java.sun.com/xml/ns/javaee"
+               xmlns:tx="urn:trans-timeout"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd
+http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd
+urn:trans-timeout http://www.jboss.org/j2ee/schema/trans-timeout-1_0.xsd"
+               version="3.1"
+               impl-version="2.0">
+    <assembly-descriptor>
+        <container-transaction>
+            <method>
+                <ejb-name>BeanWithTimeoutValue</ejb-name>
+                <method-name>*</method-name>
+                <method-intf>Local</method-intf>
+            </method>
+            <tx:trans-timeout>
+                <tx:timeout>10</tx:timeout>
+                <tx:unit>Seconds</tx:unit>
+            </tx:trans-timeout>
+        </container-transaction>
+    </assembly-descriptor>
+</jboss:ejb-jar>
+
+
+
+
+
+
+

9.5. Timer service

+
+

The service is responsible to call the registered timeout methods of the +different session beans.

+
+
+ + + + + +
+ + +A persistent timer will be identified by the name of the EAR, the name +of the sub-deployment JAR and the Bean’s name.
+If one of those names are changed (e.g. EAR name contain a version) the +timer entry became orphaned and the timer event will not longer be +fired. +
+
+
+

9.5.1. Single event timer

+
+

The timer is will be started once at the specified time.

+
+
+

In case of a server restart the timeout method of a persistent timer +will only be called directly if the specified time is elapsed.
+If the timer is not persistent, it will no longer be available +if JBoss is restarted or the application is redeployed.

+
+
+
+

9.5.2. Recurring timer

+
+

The timer will be started at the specified first occurrence and after +that point at each time if the interval is elapsed.
+If the timer will be started during the last execution is not finished +the execution will be suppressed with a warning to avoid concurrent +execution.

+
+
+

In case of server downtime for a persistent timer, the timeout method +will be called only once if one, or more than one, interval is +elapsed.
+If the timer is not persistent, it will no longer be active +after the server is restarted or the application is redeployed.

+
+
+
+

9.5.3. Calendar timer

+
+

The timer will be started if the schedule expression match. It will be +automatically deactivated and removed if there will be no next +expiration possible, i.e. If you set a specific year.

+
+
+

For example:

+
+
+
+
@Schedule( ... dayOfMonth="1", month="1", year="2012") +
+// start once at 01-01-2012 00:00:00
+
+
+
+
Programmatic calendar timer
+
+

If the timer is persistent it will be fetched at server start and the +missed timeouts are called concurrent.
+If a persistent timer contains an end date it will be executed once +nevertheless how many times the execution was missed. Also a retry will +be suppressed if the timeout method throw an Exception.
+In case of such expired timer access to the given Timer object might +throw a NoMoreTimeoutExcption or NoSuchObjectException.

+
+
+

If the timer is non persistent it will not longer be active after the +server is restarted or the application is redeployed.

+
+
+

TODO: clarify whether this should happen concurrently/blocked or even +fired only once like a recurring timer!

+
+
+
+
Annotated calendar timer
+
+

If the timer is non persistent it will not activated for missed events +during the server is down. In case of server start the timer is +scheduled based on the @Schedule annotation.

+
+
+

If the timer is persistent (default if not deactivated by annotation) +all missed events are fetched at server start and the annotated timeout +method is called concurrent.

+
+
+

TODO: clarify whether this should happen concurrently/blocked or even +fired only once like a recurring timer!

+
+
+
+
+
+

9.6. Container interceptors

+
+
+JBoss AS versions prior to WildFly8 allowed a JBoss specific way to +plug-in user application specific interceptors on the server side so +that those interceptors get invoked during an EJB invocation. Such +interceptors differed from the typical (portable) spec provided Jakarta EE +interceptors. The Jakarta Interceptors are expected to run after the +container has done necessary invocation processing which involves +security context propagation, transaction management and other such +duties. As a result, these Jakarta Interceptors come too late into the +picture, if the user applications have to intercept the call before +certain container specific interceptor(s) are run. +
+
+
+

9.6.1. Typical EJB invocation call path on the server

+
+

A typical EJB invocation looks like this:

+
+
+

Client application

+
+
+
+
MyBeanInterface bean = lookupBean();
+ 
+bean.doSomething();
+
+
+
+

The invocation on the bean.doSomething() triggers the following (only +relevant portion of the flow shown below):

+
+
+
    +
  1. +

    WildFly specific interceptor (a.k.a container interceptor) 1

    +
  2. +
  3. +

    WildFly specific interceptor (a.k.a container interceptor) 2

    +
  4. +
  5. +

    …​.

    +
  6. +
  7. +

    WildFly specific interceptor (a.k.a container interceptor) N

    +
  8. +
  9. +

    User application specific Jakarta EE interceptor(s) (if any)

    +
  10. +
  11. +

    Invocation on the EJB instance’s method

    +
  12. +
+
+
+

The WildFly specific interceptors include the security context +propagation, transaction management and other container provided +services. In some cases, the " `container interceptors`" (let’s call +them that) might even decide break the invocation flow and not let the +invocation proceed (for example: due to the invoking caller not being +among the allowed user roles who can invoke the method on the bean).

+
+
+

Previous versions of JBoss AS allowed a way to plug-in the user +application specific interceptors (which relied on JBoss AS specific +libraries) into this invocation flow so that they do run some +application specific logic before the control reaches step#5 above. For +example, AS5 allowed the use of JBoss AOP interceptors to do this.

+
+
+

As of WildFly 8, this feature was implemented.

+
+
+
+

9.6.2. Configuring container interceptors

+
+

As you can see from the JIRA https://issues.redhat.com/browse/AS7-5897, +one of the goals of this feature implementation was to make sure that we +don’t introduce any new WildFly specific library dependencies for the +container interceptors. So we decided to allow the Jakarta Interceptors +(which are just POJO classes with lifecycle callback annotations) to be +used as container interceptors. As such you won’t need any dependency on +any WildFly specific libraries. That will allow us to support this +feature for a longer time in future versions of WildFly.

+
+
+

Furthermore, configuring these container interceptors is similar to +configuring the Jakarta Interceptors for EJBs. In fact, it uses the same +xsd elements that are allowed in ejb-jar.xml for 3.1 version of ejb-jar +deployment descriptor.

+
+
+ + + + + +
+ + +Container interceptors can only be configured via deployment +descriptors. There’s no annotation based way to configure container +interceptors. This was an intentional decision, taken to avoid +introducing any WildFly specific library dependency for the annotation. +
+
+
+

Configuring the container interceptors can be done in jboss-ejb3.xml +file, which then gets placed under the META-INF folder of the EJB +deployment, just like the ejb-jar.xml. Here’s an example of how the +container interceptor(s) can be configured in jboss-ejb3.xml:

+
+
+
jboss-ejb3.xml
+
+
<jboss xmlns="http://www.jboss.com/xml/ns/javaee"
+       xmlns:jee="http://java.sun.com/xml/ns/javaee"
+       xmlns:ci ="urn:container-interceptors:1.0">
+    <jee:assembly-descriptor>
+        <ci:container-interceptors>
+            <!-- Default interceptor -->
+            <jee:interceptor-binding>
+                <ejb-name>*</ejb-name>
+                <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.ContainerInterceptorOne</interceptor-class>
+            </jee:interceptor-binding>
+            <!-- Class level container-interceptor -->
+            <jee:interceptor-binding>
+                <ejb-name>AnotherFlowTrackingBean</ejb-name>
+                <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.ClassLevelContainerInterceptor</interceptor-class>
+            </jee:interceptor-binding>
+            <!-- Method specific container-interceptor -->
+            <jee:interceptor-binding>
+                <ejb-name>AnotherFlowTrackingBean</ejb-name>
+                <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.MethodSpecificContainerInterceptor</interceptor-class>
+                <method>
+                    <method-name>echoWithMethodSpecificContainerInterceptor</method-name>
+                </method>
+            </jee:interceptor-binding>
+            <!-- container interceptors in a specific order -->
+            <jee:interceptor-binding>
+                <ejb-name>AnotherFlowTrackingBean</ejb-name>
+                <interceptor-order>
+                    <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.ClassLevelContainerInterceptor</interceptor-class>
+                    <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.MethodSpecificContainerInterceptor</interceptor-class>
+                    <interceptor-class>org.jboss.as.test.integration.ejb.container.interceptor.ContainerInterceptorOne</interceptor-class>
+                </interceptor-order>
+                <method>
+                    <method-name>echoInSpecificOrderOfContainerInterceptors</method-name>
+                </method>
+            </jee:interceptor-binding>
+        </ci:container-interceptors>
+    </jee:assembly-descriptor>
+</jboss>
+
+
+
+
    +
  • +

    The usage of urn:container-interceptors:1.0 namespace which allows the +container-interceptors elements to be configured

    +
  • +
  • +

    The container-interceptors element which contain the interceptor +bindings

    +
  • +
  • +

    The interceptor bindings themselves are the same elements as what the +EJB3.1 xsd allows for standard Jakarta Interceptors

    +
  • +
  • +

    The interceptors can be bound either to all EJBs in the deployment +(using the * wildcard) or individual bean level (using the specific +EJB name) or at specific method level for the EJBs.

    +
  • +
+
+
+ + + + + +
+ + +The xsd for the urn:container-interceptors:1.0 namespace is available +here +https://github.com/wildfly/wildfly/blob/main/ejb3/src/main/resources/schema/jboss-ejb-container-interceptors_1_0.xsd +
+
+
+

The interceptor classes themselves are simple POJOs and use the +@jakarta.annotation.AroundInvoke to mark the around invoke method which +will get invoked during the invocation on the bean. Here’s an example of +the interceptor:

+
+
+
Example of container interceptor
+
+
public class ClassLevelContainerInterceptor {
+    @AroundInvoke
+    private Object iAmAround(final InvocationContext invocationContext) throws Exception {
+        return this.getClass().getName() + " " + invocationContext.proceed();
+    }
+}
+
+
+
+
+

9.6.3. Container interceptor positioning in the interceptor chain

+
+

The container interceptors configured for a EJB are guaranteed to be run +before the WildFly provided security interceptors, transaction +management interceptors and other such interceptors thus allowing the +user application specific container interceptors to setup any relevant +context data before the invocation proceeds.

+
+
+
+

9.6.4. Semantic difference between container interceptor(s) and Jakarta Interceptors API

+
+

Although the container interceptors are modeled to be similar to the +Jakarta Interceptors, there are some differences in the API semantics. +One such difference is that invoking on +jakarta.interceptor.InvocationContext.getTarget() method is illegal for +container interceptors since these interceptors are invoked way before +the EJB components are setup or instantiated.

+
+
+
+

9.6.5. Testcase

+
+

This testcase in the WildFly codebase can be used for reference for +implementing container interceptors in user applications +https://github.com/wildfly/wildfly/blob/main/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/container/interceptor/ContainerInterceptorsTestCase.java

+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+

9.7. Jakarta Enterprise Beans 3 Database Persistent Timers

+
+
+WildFly now supports persistent timers backed by a shared database. High-availability +support is provided through the database, and as a result it is not +intended to be a super high performance solution that supports thousands +of timers going off a second, however properly tuned it should provide +sufficient performance for most use cases. +
+
+
+ + + + + +
+ + +Note that for this to work correctly the underlying database must +support the READ_COMMITTED or SERIALIZABLE isolation mode and the +datasource must be configured accordingly +
+
+
+

9.7.1. Setup

+
+

In order to use clustered timers it is necessary to add a database +backed timer store. This can be done from the CLI with the following +command:

+
+
+
+
/subsystem=ejb3/service=timer-service/database-data-store=my-clustered-store:add(allow-execution=true, datasource-jndi-name="java:/MyDatasource", refresh-interval=60000, database=postgresql, partition=mypartition)
+
+
+
+

An explanation of the parameters is below:

+
+
+
    +
  • +

    allow-execution - If this node is allowed to execute timers. If this +is false then timers added on this node will be added to the database +for another node to execute. This allows you to limit timer execution to +a few nodes in a cluster, which can greatly reduce database load for +large clusters.

    +
  • +
  • +

    datasource-jndi-name - The datasource to use

    +
  • +
  • +

    refresh-interval - The refresh interval in milliseconds. This is the +period of time that must elapse before this node will check the database +for new timers added by other nodes. A smaller value means that timers +will be picked up more quickly, however it will result in more load on +the database. This is most important to tune if you are adding timers +that will expire quickly. If the node that added the timer cannot +execute it (e.g. because it has failed or because allow-execution is +false), this timer may not be executed until a node has refreshed.

    +
  • +
  • +

    database - Define the type of database that is in use. Some SQL +statements are customised by database, and this tells the data store +which version of the SQL to use.
    +Without this attribute the server try to detected the type +automatically, current supported types are postgresql, mysql, oracle, +db2, hsql and h2.
    +Note that this SQL resides in the file +modules/system/layers/base/org/jboss/as/ejb3/main/timers/timer-sql.properties
    +And as such is it possible to modify the SQL that is executed or add +support for new databases by adding new DB specific SQL to this file (if +you do add support for a new database it would be greatly appreciated if +you could contribute the SQL back to the project).

    +
  • +
  • +

    partition - A node will only see timers from other nodes that have +the same partition name. This allows you to break a large cluster up +into several smaller clusters, which should improve performance. e.g. +instead of having a cluster of 100 nodes, where all hundred are trying +to execute and refresh the same timers, you can create 20 clusters of 5 +nodes by giving ever group of 5 a different partition name.

    +
  • +
+
+
+
Non clustered timers
+
+

Note that you can still use the database data store for non-clustered +timers, in which case set the refresh interval to zero and make sure +that every node has a unique partition name (or uses a different +database).

+
+
+
+
+

9.7.2. Using clustered timers in a deployment

+
+

It is possible to use the data store as default for all applications by +changing the default-data-store within the ejb3 subsystem:

+
+
+
+
    <timer-service thread-pool-name="timer" default-data-store="clustered-store">
+        <data-stores>
+            <database-data-store name="clustered-store" datasource-jndi-name="java:jboss/datasources/ExampleDS" partition="timer"/>
+        </data-stores>
+    </timer-service>
+
+
+
+

Another option is to use a separate data store for specific +applications, all that is required is to set the timer data store name +in jboss-ejb3.xml:

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+               xmlns="http://java.sun.com/xml/ns/javaee"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xmlns:timer="urn:timer-service:1.0"
+               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd
+                     http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
+               version="3.1"
+               impl-version="2.0">
+    <assembly-descriptor>
+            <timer:timer>
+                <ejb-name>*</ejb-name>
+                <timer:persistence-store-name>my-clustered-store</timer:persistence-store-name>
+            </timer:timer>
+        </assembly-descriptor>
+</jboss:ejb-jar>
+
+
+
+
+

9.7.3. Programmatically Refresh Timer

+
+

In a clustered deployment, multiple nodes updating timer datastore may cause the in-memory timer state to be temporarily +out of sync. Some application may find the refresh-interval configuration not sufficient in some cases, and +need to programmatically refresh timers. This can be done with Jakarta Interceptors configured for those business methods +that need this capability, as illustrated in the following steps:

+
+
+
    +
  • +

    Implement an Jakarta Interceptors that enables wildfly.ejb.timer.refresh.enabled to true. For example,

    +
  • +
+
+
+
+
import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.Interceptor;
+import jakarta.interceptor.InvocationContext;
+
+/**
+ * An interceptor to enable programmatic timer refresh across multiple nodes.
+ */
+@Interceptor
+public class RefreshInterceptor {
+    @AroundInvoke
+    public Object intercept(InvocationContext context) throws Exception {
+        context.getContextData().put("wildfly.ejb.timer.refresh.enabled", Boolean.TRUE);
+        return context.proceed();
+    }
+}
+
+
+
+
    +
  • +

    Configure the Jakarta Interceptors to the target stateless or singleton bean business methods. +When wildfly.ejb.timer.refresh.enabled is set to true, calling TimerService.getAllTimers() +will first refresh from timer datastore before returning timers. For example,

    +
  • +
+
+
+
+
@Singleton
+public class RefreshBean1 ... {
+
+    @Interceptors(RefreshInterceptor.class)
+    public void businessMethod1() {
+        ...
+        // since wildfly.ejb.timer.refresh.enabled is set to true in interceptor for this business method,
+        // calling timerService.getAllTimers() will first refresh from timer datastore before returning timers.
+        final Collection<Timer> allTimers = timerService.getAllTimers();
+        ...
+    }
+}
+
+
+
+
    +
  • +

    Applications may configure such an interceptor to certain business methods that require this capability. +Alternatively, applications may implement a dedicated business method to programmatically refresh timers, to +be invoked by other parts of the application when needed. For example,

    +
  • +
+
+
+
+
    @Interceptors(RefreshInterceptor.class)
+    public List<Timer> getAllTimerInfoWithRefresh() {
+        return timerService.getAllTimers();
+    }
+
+    public void businessMethod1() {
+        final LocalBusinessInterface businessObject = sessionContext.getBusinessObject(LocalBusinessInterface.class);
+        businessObject.getAllTimerInfoWithRefresh();
+
+        // timer has been programmatically refreshed from datastore.
+        // continue with other business logic...
+    }
+
+
+
+
+

9.7.4. Technical details

+
+

Internally every node that is allowed to execute timers schedules a +timeout for every timer is knows about. When this timeout expires then +this node attempts to 'lock' the timer, by updating its state to +running. The query this executes looks like:

+
+
+
+
UPDATE JBOSS_EJB_TIMER SET TIMER_STATE=? WHERE ID=? AND TIMER_STATE<>? AND NEXT_DATE=?;
+
+
+
+

Due to the use of a transaction and READ_COMMITTED or SERIALIZABLE +isolation mode only one node will succeed in updating the row, and this +is the node that the timer will run on.

+
+
+
+
+

9.8. Jakarta Enterprise Beans Distributed Timers

+
+
+WildFly now supports distributed timers backed by an embedded Infinispan cache. +The Infinispan cache not only provides an HA solution for persistent timer metadata, in the case of a server crash or restart, +but also distributes timer execution evenly between cluster members. +Consequently, this solution generally provides better performance and scalability than the existing database solution. +
+
+
+

This feature can also be used to provide file, database, or remote Infinispan cluster persistence of timer metadata for single server architectures, effectively replacing the existing file-store and database-store TimerService facilities. +Additionally, this feature can also provide passivation support for non-persistent timers to allow the creation of large number of transient timers without the risk of running out of memory.

+
+
+

9.8.1. Setup

+
+

Distributed timer behavior is configured via the distributable-ejb subsystem, and can be configured globally via the ejb3 subsystem or customized per EJB via the timer-service EJB deployment descriptor namespace.

+
+
+

WildFly’s HA profiles (e.g. standalone-ha.xml) are configured to use the distributable timer service by default to handle both persistent and non-persistent timers.

+
+
+

To enable the use of distributable timer service within a non-HA profile (e.g. standalone.xml), one must first disable the existing data store mechanism, and then specify the timer management to use for persistent timers, which references a timer management resource from the distributable-ejb subsystem.

+
+
+
+
batch
+ /subsystem=ejb3/service=timer-service:undefine-attribute(name=default-data-store)
+ /subsystem=ejb3/service=timer-service:write-attribute(name=default-persistent-timer-management, value=persistent)
+run-batch
+
+
+
+

To use distributable timer management for transient (i.e. non-persistent) timers, remove the thread-pool-name attribute, and then specify the timer management to use for transient timers, which references a timer management resource from the distributable-ejb subsystem.

+
+
+
+
batch
+ /subsystem=ejb3/service=timer-service:undefine-attribute(name=thread-pool)
+ /subsystem=ejb3/service=timer-service:write-attribute(name=default-transient-timer-management, value=transient)
+run-batch
+
+
+
+

Alternatively, distributable timer management can be enabled via the timer-service deployment descriptor namespace, either globally, or per EJB. +e.g.

+
+
+
+
<t:timer-service>
+    <ejb-name>*</ejb-name>
+    <t:persistent-timer-management>distributed</t:persistent-timer-management>
+    <t:transient-timer-management>transient</t:transient-timer-management>
+</t:timer-service>
+
+
+
+

The <persistent-timer-management/> and <transient-timer-management/> elements above each reference a named timer management resource defined within the distributable-ejb subsystem.

+
+
+

To customize distributed EJB timer behavior, please refer to the distributable-ejb subsystem documentation.

+
+
+
+
+

9.9. Jakarta Enterprise Beans IIOP Guide

+
+

9.9.1. Enabling IIOP

+
+

To enable IIOP you must have the JacORB subsystem installed, and the +<iiop/> element present in the ejb3 subsystem configuration. The +standalone-full.xml configuration that comes with the distribution has +both of these enabled.

+
+
+

The <iiop/> element takes two attributes that control the default +behaviour of the server, for full details see EJB3 +subsystem configuration guide.

+
+
+
+

9.9.2. Enabling JTS

+
+

To enable JTS simply add a <jts/> element to the transactions +subsystem configuration.

+
+
+

It is also necessary to enable the JacORB transactions interceptor as +shown below.

+
+
+
+
<subsystem xmlns="urn:jboss:domain:jacorb:1.1">
+  <orb>
+    <initializers transactions="on"/>
+  </orb>
+</subsystem>
+
+
+
+
+

9.9.3. Dynamic Stub’s

+
+

Downloading stubs directly from the server is no longer supported. If +you do not wish to pre-generate your stub classes JDK Dynamic stubs can +be used instead. The enable JDK dynamic stubs simply set the +com.sun.CORBA.ORBUseDynamicStub system property to true.

+
+
+
+

9.9.4. Configuring Jakarta Enterprise Beans IIOP settings via jboss-ejb3.xml

+
+

TODO

+
+
+
+
+

9.10. Jakarta Enterprise Beans over HTTP

+
+

Beginning with WildFly 11 it is now possible to use HTTP as the +transport (instead of remoting) for remote Jakarta Enterprise Beans and JNDI invocations.

+
+
+

Everything mentioned below is applicable for both JNDI and Jakarta Enterprise Beans +functionality.

+
+
+

9.10.1. Server Configuration

+
+

In order to configure the server the http-invoker needs to be enabled on +each virtual host you wish to use in the Undertow subsystem. This is +enabled by default in standard configs, but if it has been removed it +can be added via:

+
+
+
+
/subsystem=undertow/server=default-server/host=default-host/setting=http-invoker:add(http-authentication-factory=myfactory, path="/wildfly-services")
+
+
+
+

The Hhttp-invoker takes two parameters, a path (which defaults to +/wildfly-services) and a http-authentication-factory which must be a +reference to an Elytron http-authentication-factory.

+
+
+

Note that any deployment that wishes to use this must use Elytron +security with the same security domain that corresponds to the HTTP +authentication factory.

+
+
+
+

9.10.2. Performing Invocations

+
+

The mechanism for performing invocations is exactly the same as for the +remoting based Jakarta Enterprise Beans client, the only difference is that instead of a +'remote+http' URI you use a 'http' URI (which must include the path that +was configured in the invoker). For example if you are currently using +'remote+ http://localhost:8080' as the target URI, you would change this +to 'http://localhost:8080/wildfly-services'.

+
+
+
+

9.10.3. Implementation details

+ +
+
+
+

9.11. jboss-ejb3.xml Reference

+
+

jboss-ejb3.xml is a custom deployment descriptor that can be placed in +either ejb-jar or war archives. If it is placed in an ejb-jar then it +must be placed in the META-INF folder, in a web archive it must be +placed in the WEB-INF folder.

+
+
+

The contents of jboss-ejb3.xml are merged with the contents of +ejb-jar.xml, with the jboss-ejb3.xml items taking precedence.

+
+
+

9.11.1. Example File

+
+

A simple example is shown below:

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+               xmlns="http://java.sun.com/xml/ns/javaee"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xmlns:s="urn:security:1.1"
+               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd"
+               version="3.1"
+               impl-version="2.0">
+    <enterprise-beans>
+        <message-driven>
+            <ejb-name>ReplyingMDB</ejb-name>
+            <ejb-class>org.jboss.as.test.integration.ejb.mdb.messagedestination.ReplyingMDB</ejb-class>
+            <activation-config>
+                <activation-config-property>
+                    <activation-config-property-name>destination</activation-config-property-name>
+                    <activation-config-property-value>java:jboss/mdbtest/messageDestinationQueue
+                    </activation-config-property-value>
+                </activation-config-property>
+            </activation-config>
+        </message-driven>
+    </enterprise-beans>
+    <assembly-descriptor>
+        <s:security>
+            <ejb-name>DDMyDomainSFSB</ejb-name>
+            <s:security-domain>myDomain</s:security-domain>
+            <s:run-as-principal>myPrincipal</s:run-as-principal>
+        </s:security>
+    </assembly-descriptor>
+</jboss:ejb-jar>
+
+
+
+

As you can see the format is largely similar to ejb-jar.xml, in fact +they even use the same namespaces, however jboss-ejb3.xml adds some +additional namespaces of its own to allow for configuring non-spec info. +The format of the standard http://java.sun.com/xml/ns/javaee is well +documented elsewhere, this document will cover the non-standard +namespaces.

+
+
+ + + + + +
+ + +Namespace "http://www.jboss.com/xml/ns/javaee" is bound to "jboss-ejb3-spec-2_0.xsd": this file redefines some elements of "ejb-jar_3_1.xml" +
+
+
+
The root namespace http://www.jboss.com/xml/ns/javaee
+ +
+
+
Assembly descriptor namespaces
+
+

The following namespaces can all be used in the <assembly-descriptor> +element. They can be used to apply their configuration to a single bean, +or to all beans in the deployment by using * as the ejb-name.

+
+
+
The security namespace urn:security
+
+

This allows you to set the security domain and the run-as principal for +an Jakarta Enterprise Beans.

+
+
+
+
<s:security>
+  <ejb-name>*</ejb-name>
+  <s:security-domain>myDomain</s:security-domain>
+  <s:run-as-principal>myPrincipal</s:run-as-principal>
+</s:security>
+
+
+
+
+
The resource adaptor namespace urn:resource-adapter-binding
+
+

This allows you to set the resource adaptor for an MDB.

+
+
+
+
<r:resource-adapter-binding>
+  <ejb-name>*</ejb-name>
+  <r:resource-adapter-name>myResourceAdaptor</r:resource-adapter-name>
+</r:resource-adapter-binding>
+
+
+
+
+
The IIOP namespace urn:iiop
+
+

The IIOP namespace is where IIOP settings are configured. As there are +quite a large number of options these are covered in the +IIOP guide.

+
+
+
+
The pool namespace urn:ejb-pool:1.0
+
+

This allows you to select the pool that is used by the SLSB or MDB. +Pools are defined in the server configuration (i.e. standalone.xml or +domain.xml)

+
+
+
+
<p:pool>
+  <ejb-name>*</ejb-name>
+  <p:bean-instance-pool-ref>my-pool</p:bean-instance-pool-ref>
+</p:pool>
+
+
+
+
+
The cache namespace urn:ejb-cache:1.0
+
+

This allows you to select the cache that is used by the SFSB. Caches are +defined in the server configuration (i.e. standalone.xml or +domain.xml)

+
+
+
+
<c:cache>
+  <ejb-name>*</ejb-name>
+  <c:cache-ref>my-cache</c:cache-ref>
+</c:cache>
+
+
+
+
+
The clustering namespace urn:clustering:1.0
+
+

This namespace is deprecated and as of WildFly 29 its use has no effect. +The clustering behavior of Jakarta Enterprise Beans are determined by the profile in use on +the server.

+
+
+
+
The timer-service namespace urn:timer-service:2.0
+
+

This allows you to customize the TimerService behavior for a given EJB.

+
+
+

e.g.

+
+
+
+
<t:timer-service>
+    <ejb-name>*</ejb-name>
+    <t:persistent-timer-management>persistent</t:persistent-timer-management>
+    <t:transient-timer-management>transient</t:transient-timer-management>
+</t:timer-service>
+
+
+
+
+
+
+
+

9.12. Message Driven Beans Controlled Delivery

+
+

There are three mechanisms in WildFly that allow controlling if a +specific MDB is actively receiving or not messages:

+
+
+
    +
  • +

    delivery active

    +
  • +
  • +

    delivery groups

    +
  • +
  • +

    clustered singleton

    +
  • +
+
+
+

We will see each one of them in the following sections.

+
+
+

9.12.1. Delivery Active

+
+

Delivery active is simply an attribute associated with the MDB that +indicates if the MDB is receiving messages or not. If an MDB is not +currently receiving messages, the messages will be saved in the queue or +topic for later, according to the rules of the topic/queue.

+
+
+

You can configure delivery active using xml or annotations, and you can +change its value after deployment using the cli.

+
+
+
    +
  • +

    jboss-ejb3.xml:

    +
  • +
+
+
+

In the jboss-ejb3 xml file, configure the value of active as false to +mark that the MDB will not be receiving messages as soon as it is +deployed:

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+               xmlns="http://java.sun.com/xml/ns/javaee"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xmlns:d="urn:delivery-active:1.2"
+               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"                version="3.1"
+               impl-version="2.0">
+    <assembly-descriptor>
+        <d:delivery>
+            <ejb-name>HelloWorldQueueMDB</ejb-name>
+            <d:active>false</d:active>
+        </d:delivery>
+    </assembly-descriptor>
+</jboss:ejb-jar>
+
+
+
+

You can use a wildcard "*" in the place of ejb-name if you want to apply +that active value to all MDBs in your application.

+
+
+
    +
  • +

    annotation

    +
  • +
+
+
+

Alternatively, you can use the org.jboss.ejb3.annotation.DeliveryActive +annotation, as in the example below:

+
+
+
+
@MessageDriven(name = "HelloWorldMDB", activationConfig = {
+
+ @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
+
+ @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
+
+ @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
+
+@DeliveryActive(false)
+
+public class HelloWorldMDB implements MessageListener {
+    public void onMessage(Message rcvMessage) {
+      // ...
+    }
+}
+
+
+
+
Start-delivery and Stop-Delivery
+
+

These management operations dynamically change the value of the active +attribute, enabling or disabling delivery for the MDB. at runtime To use +them, connect to the WildFly instance you want to manage, then enter the +path of the MDB you want to manage delivery for:

+
+
+
+
[standalone@localhost:9990 /] cd deployment=jboss-helloworld-mdb.war/subsystem=ejb3/message-driven-bean=HelloWorldMDB
+
+[standalone@localhost:9990 message-driven-bean=HelloWorldMDB] :stop-delivery
+{"outcome" => "success"}
+
+[standalone@localhost:9990 message-driven-bean=HelloWorldMDB] :start-delivery
+{"outcome" => "success"}
+
+
+
+
+
+

9.12.2. Delivery Groups

+
+

Delivery groups provide a straightforward way to manage delivery for a +group of MDBs. Every MDB belonging to a delivery group has delivery +active if that group is active, and has delivery inactive +whenever the group is not active.

+
+
+

You can add a delivery group to the ejb3 subsystem using either the +subsystem xml or cli. Next, we will see examples of each case. In those +examples we will add only a single delivery group, but keep in mind that +you can add as many delivery groups as you need to a WildFly instance.

+
+
+
    +
  • +

    the ejb3 subsystem xml (located in your configuration xml, such as +standalone.xml)

    +
  • +
+
+
+
+
<subsystem xmlns="urn:jboss:domain:ejb3:4.0">
+    ...
+    <mdb>
+        ...
+        <delivery-groups>
+            <delivery-group name="mdb-group-name" active="true"/>
+        </delivery-groups>
+    </mdb>
+    ...
+</subsystem>
+
+
+
+

The example above adds a delivery group named "mdb-group-name" (you can +use whatever name suits you best as the group name). The "true" active +attribute indicates that all MDBs belonging to that group will have +delivery active right after deployment. If you mark that attribute as +false, you are indicating that every MDB belonging to the group will not +start receiving messages after deployment, a condition that will remain +until the group becomes active.

+
+
+
    +
  • +

    jboss-cli

    +
  • +
+
+
+

You can add a mdb-delivery-group using the add command as below:

+
+
+
+
[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:add
+{"outcome" => "success"}
+
+
+
+
Reading and Writing the Delivery State of a Delivery Group
+
+

You can check whether delivery is active for a group by reading the +active attribute, which defaults to true:

+
+
+
+
[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:read-attribute(name=active)
+{ "outcome" => "success", "result" => true }
+
+
+
+

To make the the delivery-group inactive, just write the active attribute +with a false value:

+
+
+
+
[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:write-attribute(name=active,value=false)
+{"outcome" => "success"}
+
+[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:read-attribute(name=active)
+{ "outcome" => "success", "result" => false }
+
+
+
+

To make it active again, write the attribute with a true value:

+
+
+
+
[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:write-attribute(name=active,value=true)
+{"outcome" => "success"}
+
+[standalone@localhost:9990 /] ./subsystem=ejb3/mdb-delivery-group=mdb-group-name:read-attribute(name=active)
+{ "outcome" => "success", "result" => true }
+
+
+
+
+
Using Delivery Groups
+
+

To mark that an MDB belongs to a delivery-group, declare so in the +jboss-ejb3.xml file:

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+
+<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+               xmlns="http://java.sun.com/xml/ns/javaee"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xmlns:d="urn:delivery-active:1.2"
+               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
+               version="3.1"
+               impl-version="2.0">
+    <assembly-descriptor>
+        <d:delivery>
+            <ejb-name>HelloWorldMDB</ejb-name>
+            <d:group>mdb-delivery-group</d:group>
+        </d:delivery>
+    </assembly-descriptor>
+</jboss:ejb-jar>
+
+
+
+

You can also use a wildcard to mark that all MDBs in your application +belong to a delivery-group. In the following example, we add all MDBs in +the application to group1, except for HelloWorldMDB, that is added to +group2:

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+               xmlns="http://java.sun.com/xml/ns/javaee"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xmlns:d="urn:delivery-active:1.2"
+               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
+               version="3.1"
+               impl-version="2.0">
+    <assembly-descriptor>
+        <d:delivery>
+            <ejb-name>*</ejb-name>
+            <d:group>group1</d:group>
+        </d:delivery>
+        <d:delivery>
+            <ejb-name>HelloWorldMDB</ejb-name>
+            <d:group>group2</d:group>
+        </d:delivery>
+    </assembly-descriptor>
+</jboss:ejb-jar>
+
+
+
+

Another option is to use org.jboss.ejb3.annotation.DeliveryGroup +annotation on each MDB class belonging to a group:

+
+
+
+
@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
+ @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
+ @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
+ @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
+
+@DeliveryGroup("group2")
+
+public class HelloWorldMDB implements MessageListener {
+    ...
+}
+
+
+
+

A MDB can belong to more than one delivery group. See the following example:

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+
+<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+               xmlns="http://java.sun.com/xml/ns/javaee"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xmlns:d="urn:delivery-active:1.2"
+               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
+               version="3.1"
+               impl-version="2.0">
+    <assembly-descriptor>
+        <d:delivery>
+            <ejb-name>*</ejb-name>
+            <d:group>mdb-delivery-group1</d:group>
+        </d:delivery>
+        <d:delivery>
+            <ejb-name>HelloWorldMDB</ejb-name>
+            <d:group>mdb-delivery-group2</d:group>
+            <d:group>mdb-delivery-group3</d:group>
+        </d:delivery>
+    </assembly-descriptor>
+</jboss:ejb-jar>
+
+
+
+

In the example above, we use the wildcard to specify that every MDB in the +ejb-jar will belong to mdb-delivery-group1. +That means that, in order for delivery of messages to be active for those MDBs, +mdb-delivery-group1 must be active.

+
+
+

In addition, the configuration above specifies that HelloWorldMDB belongs also +to mdb-delivery-group2 and mdb-delivery-group3. So, delivery of messages to + HelloWorldMDB will only be active when mdb-delivery-group1, + mdb-delivery-group2, and mdb-delivery-group3 are all active.

+
+
+

The same could be specified using the @DeliveryGroup annotation:

+
+
+
+
@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
+ @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
+ @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
+ @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
+
+@DeliveryGroup("mdb-delivery-group2")
+@DeliveryGroup("mdb-delivery-group3")
+
+public class HelloWorldMDB implements MessageListener {
+    ...
+}
+
+
+
+

Notice that all the delivery-groups used by an application must be installed in +the WildFly server upon deployment, or the deployment will fail with a message +stating that the delivery-group is missing.

+
+
+
+
+

9.12.3. Clustered Singleton Delivery

+
+

Delivery can be marked as singleton in a clustered environment. In this +case, only one node in the cluster will have delivery active for that +MDB, whereas in all other nodes, delivery will be inactive. This option +can be used for applications that are deployed in all nodes of the +cluster. Such applications will be active in all nodes of the cluster, +except for the MDBs that are marked as clustered singleton. For those +MDBs, only one cluster node will be processing their messages. In case +that node stops, another node will have delivery activated, guaranteeing +that there is always one node processing the messages. This node is what +we call primary singleton provider of the MDB.

+
+
+

Notice that applications using clustered singleton delivery can only be +deployed in clustered WildFly servers (i.e., servers that are using the +ha configuration).

+
+
+

To mark delivery as clustered singleton, you can use the jboss-ejb3.xml +or the @ClusteredSingleton annotation:

+
+
+
    +
  • +

    jboss-ejb3.xml:

    +
  • +
+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+               xmlns="http://java.sun.com/xml/ns/javaee"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xmlns:c="urn:clustering:1.1"
+               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
+               version="3.1"
+               impl-version="2.0">
+    <assembly-descriptor>
+        <c:clustering>
+            <ejb-name>HelloWorldMDB</ejb-name>
+            <c:clustered-singleton>true</c:clustered-singleton>
+        </c:clustering>
+    </assembly-descriptor>
+</jboss:ejb-jar>
+
+
+
+

As in the previous jboss-ejb3.xml examples, a wildcard can be used in +the place of the ejb-name to indicate that all MDBs in the application +are singleton clustered.

+
+
+
    +
  • +

    annotation

    +
  • +
+
+
+

You can use the org.jboss.ejb3.annotation.ClusteredSingleton annotation +to mark an MDB as clustered singleton:

+
+
+
+
@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
+ @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue"),
+ @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
+ @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
+
+@ClusteredSingleton
+
+public class HelloWorldMDB implements MessageListener { ... }
+
+
+
+
+

9.12.4. Using Multiple MDB Delivery Control Mechanisms

+
+

The previous delivery control mechanisms can be used together in a +single MDB. In this case, they work as a set of restrictions for +delivery to be active in a MDB.

+
+
+

For example, if an MDB belongs to one or more delivery groups and is also a +clustered singleton MDB, the delivery will be active for that MDB only +if the delivery groups are active in the cluster node that was elected as +the primary singleton provider.

+
+
+

Also, if you use jboss-cli to stopDelivery on a MDB that belongs to one or more +delivery groups, the MDB will stop receiving messages in case all groups +were active. If one or more of the groups associated with the MDB was not active, +the MDB will continue in the same, inactive state. But, once all groups become active, +the MDB will still be prevented from receiving messages, unless a startDelivery +operation is executed to revert the previously executed stopDelivery operation.

+
+
+

Invoking stopDelivery on an MDB that is marked as clustered singleton +will work in a similar way: no visible effect if the current node is not +the primary singleton provider; but it will stop delivery of messages +for that MDB if the current node is the primary singleton provider. If +the current node is not the primary singleton provider, but eventually becomes so, the +delivery of messages will not be active for that MDB, unless a +startDelivery operation is invoked.

+
+
+

In other words, when more than one delivery control mechanism is used in +conjunction, they act as a set of restrictions that need all to be true +in order for the MDB to receive messages:

+
+
+
    +
  • +

    MDB belongs to one delivery-group + stop-delivery was invoked: the delivery group +needs to be active and the delivery needs to be restarted (via start-delivery) in order +for that MDB to start receiving messages;

    +
  • +
  • +

    MDB belongs to one delivery-group + MDB is clustered singleton: the delivery group +needs to be active and the current node needs to be the primary singleton provider +node in order for that MDB to start receiving messages;

    +
  • +
  • +

    MDB belongs to one delivery-group + MDB is clustered singleton + stop-delivery was invoked: +as above, the delivery-group has to be active, the current cluster node must be the +primary singleton provider node, plus, start-delivery needs to be invoked on that MDB, +only with these three factors being true the MDB will start receiving messages.

    +
  • +
  • +

    MDB belongs to multiple delivery-groups + stop-delivery was invoked: all the delivery +groups need to be active and the delivery needs to be restarted (via start-delivery) in +order for that MDB to start receiving messages;

    +
  • +
  • +

    MDB belongs to multiple delivery-groups + MDB is clustered singleton: all the delivery +groups need to be active and the current node needs to be the primary singleton +provider node in order for that MDB to start receiving messages;

    +
  • +
  • +

    MDB belongs to multiple delivery-groups + MDB is clustered singleton + stop-delivery was +invoked: as above, all delivery-groups must be active, and current cluster node has to be the +primary singleton provider node, plus, start-delivery needs to be invoked on that MDB, only +with these three factors being true the MDB will start receiving messages.

    +
  • +
+
+
+
+
+

9.13. Securing Jakarta Enterprise Beans

+
+

The Jakarta EE spec specifies certain annotations (like @RolesAllowed, +@PermitAll, @DenyAll) which can be used on Jakarta Enterprise Beans implementation classes +and/or the business method implementations of the beans. Like with all +other configurations, these security related configurations can also be +done via the deployment descriptor (ejb-jar.xml). We won’t be going +into the details of Jakarta EE specific annotations/deployment descriptor +configurations in this chapter but instead will be looking at the vendor +specific extensions to the security configurations.

+
+
+

9.13.1. Security Domain

+
+

The Jakarta EE spec doesn’t mandate a specific way to configure security +domain for a bean. It leaves it to the vendor implementations to allow +such configurations, the way they wish. In WildFly 29, the use of +@org.jboss.ejb3.annotation.SecurityDomain annotation allows the +developer to configure the security domain for a bean. Here’s an +example:

+
+
+
+
import org.jboss.ejb3.annotation.SecurityDomain;
+ 
+import jakarta.ejb.Stateless;
+ 
+@Stateless
+@SecurityDomain("other")
+public class MyBean ...
+{
+   ...
+}
+
+
+
+

The use of @SecurityDomain annotation lets the developer to point the +container to the name of the security domain which is configured in the +Jakarta Enterprise Beans 3 subsystem in the standalone/domain configuration. The configuration +of the security domain in the Jakarta Enterprise Beans 3 subsystem is out of the scope of this +chapter.

+
+
+

An alternate way of configuring a security domain, instead of using +annotation, is to use jboss-ejb3.xml deployment descriptor. Here’s an +example of how the configuration will look like:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jboss:jboss
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:s="urn:security:1.1"
+         xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd"
+         version="3.1" impl-version="2.0">
+ 
+    <assembly-descriptor>
+        <s:security>
+   <!-- Even wildcard * is supported -->
+            <ejb-name>MyBean</ejb-name>
+            <!-- Name of the security domain which is configured in the EJB3 subsystem -->
+            <s:security-domain>other</s:security-domain>
+        </s:security>
+    </assembly-descriptor>
+</jboss:jboss>
+
+
+
+

As you can see we use the security-domain element to configure the +security domain.

+
+
+ + + + + +
+ + +The jboss-ejb3.xml is expected to be placed in the .jar/META-INF folder +of a .jar deployment or .war/WEB-INF folder of a .war deployment. +
+
+
+
+

9.13.2. Absence of security domain configuration but presence of other

+
+

security metadata

+
+
+

Let’s consider the following example bean:

+
+
+
+
@Stateless
+public class FooBean {
+ 
+ @RolesAllowed("bar")
+ public void doSomething() {
+  ..
+ }
+...
+}
+
+
+
+

As you can see the doSomething method is configured to be accessible +for users with role "bar". However, the bean isn’t configured for any +specific security domain. Prior to WildFly 29, the absence of an +explicitly configured security domain on the bean would leave the bean +unsecured, which meant that even if the doSomething method was +configured with @RolesAllowed("bar") anyone even without the "bar" +role could invoke on the bean.

+
+
+

In WildFly 29, the presence of any security metadata (like @RolesAllowed, +@PermitAll, @DenyAll, @RunAs, @RunAsPrincipal) on the bean or any +business method of the bean, makes the bean secure, even in the absence +of an explicitly configured security domain. In such cases, the security +domain name is default to "other". Users can explicitly configure an +security domain for the bean if they want to using either the annotation +or deployment descriptor approach explained earlier.

+
+
+
+

9.13.3. Access to methods without explicit security metadata, on a secured

+
+

bean

+
+
+

Consider this example bean:

+
+
+
+
@Stateless
+public class FooBean {
+ 
+ @RolesAllowed("bar")
+ public void doSomething() {
+  ..
+ }
+ 
+ 
+ public void helloWorld() {
+  ...
+    }
+}
+
+
+
+

As you can see the doSomething method is marked for access for only +users with role "bar". That enables security on the bean (with security +domain defaulted to "other"). However, notice that the method +helloWorld doesn’t have any specific security configurations.

+
+
+

In WildFly 29, such methods which have no explicit security +configurations, in a secured bean, will be treated similar to a method +with @DenyAll configuration. What that means is, no one is allowed +access to the helloWorld method. This behaviour can be controlled via +the jboss-ejb3.xml deployment descriptor at a per bean level or a per +deployment level as follows:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jboss:jboss
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:s="urn:security:1.1"
+        xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd"
+        version="3.1" impl-version="2.0">
+ 
+    <assembly-descriptor>
+        <s:security>
+   <!-- Even wildcard * is supported where * is equivalent to all EJBs in the deployment -->
+            <ejb-name>FooBean</ejb-name>
+            <s:missing-method-permissions-deny-access>false</s:missing-method-permissions-deny-access>
+        </s:security>
+    </assembly-descriptor>
+</jboss:jboss>
+
+
+
+

Notice the use of <missing-method-permissions-deny-access> element. +The value for this element can either be true or false. If this element +isn’t configured then it is equivalent to a value of true i.e. no one is +allowed access to methods, which have no explicit security +configurations, on secured beans. Setting this to false allows access to +such methods for all users i.e. the behaviour will be switched to be +similar to @PermitAll.

+
+
+

This behaviour can also be configured at the Jakarta Enterprise Beans 3 subsystem level so +that it applies to all Jakarta Enterprise Beans 3 deployments on the server, as follows:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:ejb3:1.4">
+...
+            <default-missing-method-permissions-deny-access value="true"/>
+...
+</subsystem>
+
+
+
+

Again, the default-missing-method-permissions-deny-access element +accepts either a true or false value. A value of true makes the +behaviour similar to @DenyAll and a value of false makes it behave +like @PermitAll

+
+
+
+
+

9.14. Jakarta Enterprise Beans Client Interceptors

+
+

9.14.1. Implementing Client Interceptors

+
+

The Jakarta Enterprise Beans client supports the notion of client side interceptors. These are interceptors +that are run before an invocation is dispatched, and can modify various properties of +the request before it is sent, as well as modifying parameters and the return value.

+
+
+

These interceptors are represented by the class org.jboss.ejb.client.EJBClientInterceptor, +and are generally registered placing interceptor class names in +META-INF/services/org.jboss.ejb.client.EJBClientInterceptor.

+
+
+

For more details about what can be modified refer to the Jakarta Enterprise Beans client JavaDoc.

+
+
+
+

9.14.2. Accessing invocation context data

+
+

It is possible for client interceptors to access data from the invocation context data map used in the server +invocation (i.e. InvocationContext.getContextData()). To access a specific key you must call +org.jboss.ejb.client.EJBClientInvocationContext.addReturnedContextDataKey(String key) with +the name of the key you are interested in. This method must be called from the handleInvocation method +of the interceptor.

+
+
+

If there is data in the context map under this specific key then it will be sent back to the client +and will be available in the handleInvocationResult in the client invocations context data map.

+
+
+
+
+

9.15. Jakarta Enterprise Beans on Kubernetes

+
+

If the WildFly server is deployed on Kubernetes then there are several +points that you need to bear in mind when you use EJBs.

+
+
+ + + + + +
+ + +When deploying on Kubernetes you should consider the use of the WildFly Operator. + It manages the Kubernetes objects in WildFly friendly way. + For example, it uses StatefulSet for the correct handling of EJB remoting and transaction recovery processing. +
+
+
+

The rest of this chapter assumes the StatefulSet is used +as the Kubernetes API object for managing the WildFly server.

+
+
+

The StatefulSet provides a guarantee of persistent storage and network hostname stability +over the restarts of the pod.

+
+
+

These two guarantees are particularly important for the transaction manager which is a stateful component. +The persistent storage over restarts is needed as the transaction log is usually stored at the file system. +If the transaction manager creates a transaction log record it’s created only at the transaction log particular to the WildFly instance. +The hostname stability is needed as the WildFly may be contacted via EJB remote call with transaction propagation. +The WildFly has to be reachable under the same hostname even after pod restarts. +As the transaction log is bound to the particular WildFly instance it may be finished only there.

+
+
+

9.15.1. EJB calls on Kubernetes

+
+

The EJB caller has two options on how to configure the remote call. +It can be defined either as a remote outbound connection (see details at Admin Guide, section Outbound Connections) +or you may use a direct InitialContext lookup in your code.

+
+
+

If you use either case then for the Kubernetes you need to adjust the configuration of the target node. +For the target hostname, you need to use the DNS name of the very first pod managed by StatefulSet.

+
+
+

The StatefulSet guarantees depend on the ordering of the pods. The pods are named in the prescribed order. +If you scale your application up to 3 replicas you may expect +your pods will have names such as wildfly-server-0, wildfly-server-1, wildfly-server-2.

+
+
+

It’s expected a headless services +to be used along with the StatefulSet. With the headless service, there is ensured the DNS hostname for the pod. +If the application uses the WildFly Operator, a headless service will be created with a name such as wildfly-server-headless. +Then the DNS name of the very first pod will be wildfly-server-0.wildfly-server-headless.

+
+
+

The use of the hosname wildfly-server-0.wildfly-server-headless +guarantees that the EJB call may reach any WildFly instance connected to the cluster. +It’s a bootstrap connection which is used to initialize the EJB client +which gathers the structure of the WildFly cluster as the next step.

+
+
+
+

9.15.2. EJB configuration for Kubernetes

+
+

These are steps you need to process in order to run EJB remote calls. +Some steps are related to the server configuration, the other ones +on your application.

+
+
+
    +
  • +

    The clustering has to be set correctly, see the High Availability Guide, section of Kubernetes discovery.

    +
  • +
  • +

    All the socket-binding must define the client mapping for the DNS value mapped by StatefulSet headless service. +For example if the application is named wildfly-server and the StatefulSet headless service is named wildfly-server-headless +then the http socket binding has to be defined in the following way:

    +
  • +
+
+
+
+
<socket-binding name="http" port="${jboss.http.port:8080}">
+   <client-mapping destination-address="${jboss.node.name}.wildfly-server-headless"/>
+</socket-binding>
+
+
+
+
    +
  • +

    A small workaround is needed for the remote EJB transaction recovery on Kubernetes +(the issue could be tracked at WFCORE-4668). +The WildFly application server has to be configured with property wildfly.config.url. +The wildfly.config.url points to a XML configuration file. If we consider one being placed at $JBOSS_HOME/standalone/configuration/wildfly-config.xml +then the property is setup as JAVA_OPTS="$JAVA_OPTS -Dwildfly.config.url=$JBOSS_HOME/standalone/configuration/wildfly-config.xml". +The wildfly-config.xml defines the EJB recovery authentication to be used during transaction recovery for remote EJB calls. +The target server has to configure a user that is permitted to receive the EJB remote calls. +Such a user is then configured by standard means of security configuration. +Let’s say there is configured a user on the target server. +The user is created with script $JBOSS_HOME/bin/add-user.sh under the ApplicationRealm. +Then the caller WildFly uses the configuration in wildfly-config.xml this way +(you may copy the content below, but replace the >>PASTE_…​_HERE<< with user and password you configured):

    +
  • +
+
+
+
+
<configuration>
+  <authentication-client xmlns="urn:elytron:1.0">
+  <authentication-rules>
+          <rule use-configuration="jta">
+              <match-abstract-type name="jta" authority="jboss"/>
+      </rule>
+      </authentication-rules>
+      <authentication-configurations>
+       <configuration name="jta">
+               <sasl-mechanism-selector selector="DIGEST-MD5"/>
+               <providers>
+                   <use-service-loader />
+           </providers>
+       <set-user-name name=">>PASTE_USER_NAME_HERE<<"/>
+           <credentials>
+                    <clear-password password=">>PASTE_PASSWORD_HERE<<"/>
+           </credentials>
+               <set-mechanism-realm name="ApplicationRealm" />
+           </configuration>
+      </authentication-configurations>
+  </authentication-client>
+</configuration>
+
+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+

9.16. Jakarta Enterprise Beans Deployment Runtime Resources

+
+

Enterprise bean deployment exposes certain management runtime resources to help users inspect enterprise bean metadata +and monitor invocation statistics. Bean metadata is configured in the application via deployment descriptor and +annotations. Stateless, stateful, singleton session beans and message-driven beans support a common set of resources, +and also resources specific to the bean type. For example, these are some of the common enterprise bean resources:

+
+
+
    +
  • +

    jndi-names

    +
  • +
  • +

    component-class-name

    +
  • +
  • +

    declared-roles

    +
  • +
  • +

    transaction-type

    +
  • +
  • +

    stateful-timeout

    +
  • +
  • +

    activation-config

    +
  • +
+
+
+

Users can view these enterprise bean resources via WildFly CLI or Administration Console. The following sections +provides sample CLI and Administration Console output for each enterprise bean type. For complete details, refer to +WildFly Model Reference Documentation

+
+
+

9.16.1. Stateless Session Bean Runtime Resources

+
+

To view the management runtime resources for a deployed stateless session bean in CLI, run the following CLI command:

+
+
+
+
/deployment=<DEPLOYMENT-NAME>/subsystem=ejb3/stateless-session-bean=<BEAN-NAME>:read-resource(include-runtime)
+
+
+
+

The following is a sample output for a stateless session bean named ManagedStatelessBean in deployment ejb-management.jar:

+
+
+
+
/deployment=ejb-management.jar/subsystem=ejb3/stateless-session-bean=ManagedStatelessBean:read-resource(include-runtime)
+{
+    "outcome" => "success",
+    "result" => {
+        "async-methods" => ["void async(int, int)"],
+        "business-local" => ["sample.ManagedStatelessBean"],
+        "business-remote" => ["sample.BusinessInterface"],
+        "component-class-name" => "sample.ManagedStatelessBean",
+        "declared-roles" => [
+            "Role3",
+            "Role2",
+            "Role1"
+        ],
+        "execution-time" => 160L,
+        "invocations" => 3L,
+        "jndi-names" => [
+            "java:global/ejb-management/ManagedStatelessBean!sample.BusinessInterface",
+            "java:module/ManagedStatelessBean!sample.BusinessInterface",
+            "java:app/ejb-management/ManagedStatelessBean!sample.BusinessInterface",
+            "java:global/ejb-management/ManagedStatelessBean!sample.ManagedStatelessBean",
+            "java:module/ManagedStatelessBean!sample.ManagedStatelessBean",
+            "java:app/ejb-management/ManagedStatelessBean!sample.ManagedStatelessBean"
+        ],
+        "methods" => {"doIt" => {
+            "execution-time" => 160L,
+            "invocations" => 3L,
+            "wait-time" => 10L
+        }},
+        "peak-concurrent-invocations" => 1L,
+        "pool-available-count" => 64,
+        "pool-create-count" => 1,
+        "pool-current-size" => 1,
+        "pool-max-size" => 64,
+        "pool-name" => "slsb-strict-max-pool",
+        "pool-remove-count" => 0,
+        "run-as-role" => "Role3",
+        "security-domain" => "other",
+        "timeout-method" => "public void sample.ManagedStatelessBean.timeout(jakarta.ejb.Timer)",
+        "timers" => [{
+            "time-remaining" => 4735224L,
+            "next-timeout" => 1577768415000L,
+            "calendar-timer" => true,
+            "persistent" => false,
+            "info" => "timer1",
+            "schedule" => {
+                "year" => "*",
+                "month" => "*",
+                "day-of-month" => "*",
+                "day-of-week" => "*",
+                "hour" => "0",
+                "minute" => "0",
+                "second" => "15",
+                "timezone" => undefined,
+                "start" => undefined,
+                "end" => undefined
+            }
+        }],
+        "transaction-type" => "CONTAINER",
+        "wait-time" => 10L,
+        "service" => {"timer-service" => undefined}
+    }
+}
+
+
+
+

To view it in WildFly Administration Console, go to the Management Model section of the target deployment. For example,

+
+
+

ejb/stateless-management-resource.png

+
+
+
+

9.16.2. Stateful Session Bean Runtime Resources

+
+

To view the management runtime resources for a deployed stateful session bean in CLI, run the following CLI command:

+
+
+
+
/deployment=<DEPLOYMENT-NAME>/subsystem=ejb3/stateful-session-bean=<BEAN-NAME>:read-resource(include-runtime)
+
+
+
+

The following is a sample output for a stateful session bean named ManagedStatefulBean2 in deployment ejb-management.jar:

+
+
+
+
/deployment=ejb-management.jar/subsystem=ejb3/stateful-session-bean=ManagedStatefulBean2:read-resource(include-runtime)
+{
+    "outcome" => "success",
+    "result" => {
+        "after-begin-method" => "private void sample.ManagedStatefulBean2.afterBegin()",
+        "after-completion-method" => "private void sample.ManagedStatefulBean2.afterCompletion()",
+        "async-methods" => ["void async(int, int)"],
+        "before-completion-method" => "private void sample.ManagedStatefulBean2.beforeCompletion()",
+        "business-local" => ["sample.ManagedStatefulBean2"],
+        "business-remote" => ["sample.BusinessInterface"],
+        "cache-size" => 0,
+        "component-class-name" => "sample.ManagedStatefulBean2",
+        "declared-roles" => [
+            "Role3",
+            "Role2",
+            "Role1"
+        ],
+        "execution-time" => 163L,
+        "invocations" => 4L,
+        "jndi-names" => [
+            "java:app/ejb-management/ManagedStatefulBean2!sample.BusinessInterface",
+            "java:global/ejb-management/ManagedStatefulBean2!sample.BusinessInterface",
+            "java:module/ManagedStatefulBean2!sample.BusinessInterface",
+            "java:app/ejb-management/ManagedStatefulBean2!sample.ManagedStatefulBean2",
+            "java:global/ejb-management/ManagedStatefulBean2!sample.ManagedStatefulBean2",
+            "java:module/ManagedStatefulBean2!sample.ManagedStatefulBean2"
+        ],
+        "methods" => {
+            "doIt" => {
+                "execution-time" => 163L,
+                "invocations" => 3L,
+                "wait-time" => 3L
+            },
+            "remove" => {
+                "execution-time" => 0L,
+                "invocations" => 1L,
+                "wait-time" => 1L
+            }
+        },
+        "passivated-count" => 0,
+        "passivation-capable" => false,
+        "peak-concurrent-invocations" => 1L,
+        "remove-methods" => [
+            {
+                "bean-method" => "void remove()",
+                "retain-if-exception" => false
+            },
+            {
+                "bean-method" => "void removeTrue()",
+                "retain-if-exception" => true
+            },
+            {
+                "bean-method" => "void removeFalse()",
+                "retain-if-exception" => false
+            }
+        ],
+        "run-as-role" => "Role3",
+        "security-domain" => "other",
+        "stateful-timeout" => "2 HOURS",
+        "total-size" => 0,
+        "transaction-type" => "BEAN",
+        "wait-time" => 4L,
+        "service" => undefined
+    }
+}
+
+
+
+

To view it in WildFly Administration Console, go to the Management Model section of the target deployment. For example,

+
+
+

ejb/stateful-management-resource.png

+
+
+
+

9.16.3. Singleton Bean Runtime Resources

+
+

To view the management runtime resources for a deployed singleton bean in CLI, run the following CLI command:

+
+
+
+
/deployment=<DEPLOYMENT-NAME>/subsystem=ejb3/singleton-bean=<BEAN-NAME>:read-resource(include-runtime)
+
+
+
+

The following is a sample output for a singleton bean named ManagedSingletonBean in deployment ejb-management.jar:

+
+
+
+
/deployment=ejb-management.jar/subsystem=ejb3/singleton-bean=ManagedSingletonBean:read-resource(include-runtime)
+{
+    "outcome" => "success",
+    "result" => {
+        "async-methods" => ["void async(int, int)"],
+        "business-local" => ["sample.ManagedSingletonBean"],
+        "business-remote" => ["sample.BusinessInterface"],
+        "component-class-name" => "sample.ManagedSingletonBean",
+        "concurrency-management-type" => undefined,
+        "declared-roles" => [
+            "Role3",
+            "Role2",
+            "Role1"
+        ],
+        "depends-on" => undefined,
+        "execution-time" => 156L,
+        "init-on-startup" => false,
+        "invocations" => 3L,
+        "jndi-names" => [
+            "java:module/ManagedSingletonBean!sample.ManagedSingletonBean",
+            "java:global/ejb-management/ManagedSingletonBean!sample.ManagedSingletonBean",
+            "java:app/ejb-management/ManagedSingletonBean!sample.ManagedSingletonBean",
+            "java:app/ejb-management/ManagedSingletonBean!sample.BusinessInterface",
+            "java:global/ejb-management/ManagedSingletonBean!sample.BusinessInterface",
+            "java:module/ManagedSingletonBean!sample.BusinessInterface"
+        ],
+        "methods" => {"doIt" => {
+            "execution-time" => 156L,
+            "invocations" => 3L,
+            "wait-time" => 0L
+        }},
+        "peak-concurrent-invocations" => 1L,
+        "run-as-role" => "Role3",
+        "security-domain" => "other",
+        "timeout-method" => "public void sample.ManagedSingletonBean.timeout(jakarta.ejb.Timer)",
+        "timers" => [{
+            "time-remaining" => 4304279L,
+            "next-timeout" => 1577768415000L,
+            "calendar-timer" => true,
+            "persistent" => false,
+            "info" => "timer1",
+            "schedule" => {
+                "year" => "*",
+                "month" => "*",
+                "day-of-month" => "*",
+                "day-of-week" => "*",
+                "hour" => "0",
+                "minute" => "0",
+                "second" => "15",
+                "timezone" => undefined,
+                "start" => undefined,
+                "end" => undefined
+            }
+        }],
+        "transaction-type" => "CONTAINER",
+        "wait-time" => 0L,
+        "service" => {"timer-service" => undefined}
+    }
+}
+
+
+
+

To view it in WildFly Administration Console, go to the Management Model section of the target deployment. For example,

+
+
+

ejb/singleton-management-resource.png

+
+
+
+

9.16.4. Message-driven Bean Runtime Resources

+
+

To view the management runtime resources for a deployed message-driven bean in CLI, run the following CLI command:

+
+
+
+
/deployment=<DEPLOYMENT-NAME>/subsystem=ejb3/message-driven-bean=<BEAN-NAME>:read-resource(include-runtime)
+
+
+
+

The following is a sample output for a message-driven bean named ManagedMDB in deployment ejb-management.jar:

+
+
+
+
/deployment=ejb-management.jar/subsystem=ejb3/message-driven-bean=ManagedMDB:read-resource(include-runtime)
+{
+    "outcome" => "success",
+    "result" => {
+        "activation-config" => [
+            ("destinationType" => "jakarta.jms.Queue"),
+            ("destination" => "java:/queue/ManagedMDB-queue")
+        ],
+        "component-class-name" => "sample.ManagedMDB",
+        "declared-roles" => [
+            "Role3",
+            "Role2",
+            "Role1"
+        ],
+        "delivery-active" => true,
+        "execution-time" => 0L,
+        "invocations" => 0L,
+        "message-destination-link" => undefined,
+        "message-destination-type" => undefined,
+        "messaging-type" => "jakarta.jms.MessageListener",
+        "methods" => {},
+        "peak-concurrent-invocations" => 0L,
+        "pool-available-count" => 16,
+        "pool-create-count" => 0,
+        "pool-current-size" => 0,
+        "pool-max-size" => 16,
+        "pool-name" => "mdb-strict-max-pool",
+        "pool-remove-count" => 0,
+        "run-as-role" => "Role3",
+        "security-domain" => "other",
+        "timeout-method" => "public void sample.ManagedMDB.timeout(jakarta.ejb.Timer)",
+        "timers" => [{
+            "time-remaining" => 4213581L,
+            "next-timeout" => 1577768415000L,
+            "calendar-timer" => true,
+            "persistent" => false,
+            "info" => "timer1",
+            "schedule" => {
+                "year" => "*",
+                "month" => "*",
+                "day-of-month" => "*",
+                "day-of-week" => "*",
+                "hour" => "0",
+                "minute" => "0",
+                "second" => "15",
+                "timezone" => undefined,
+                "start" => undefined,
+                "end" => undefined
+            }
+        }],
+        "transaction-type" => "CONTAINER",
+        "wait-time" => 0L,
+        "service" => {"timer-service" => undefined}
+    }
+}
+
+
+
+

To view it in WildFly Administration Console, go to the Management Model section of the target deployment. For example,

+
+
+

ejb/mdb-management-resource.png

+
+
+
+
+
+
+

10. JPA Reference Guide

+
+
+

10.1. Introduction

+
+

The WildFly JPA subsystem implements the Jakarta Persistence 3.1 container-managed +requirements. Deploys the persistence unit definitions, the persistence +unit/context annotations and persistence unit/context references in the +deployment descriptor. JPA Applications use the Hibernate (version 5.3) +persistence provider, which is included with WildFly. The JPA subsystem +uses the standard SPI (jakarta.persistence.spi.PersistenceProvider) to +access the Hibernate persistence provider and some additional extensions +as well.

+
+
+

During application deployment, JPA use is detected (e.g. persistence.xml +or @PersistenceContext/Unit annotations) and injects Hibernate +dependencies into the application deployment. This makes it easy to +deploy JPA applications.

+
+
+

In the remainder of this documentation, "entity manager" refers to an +instance of the jakarta.persistence.EntityManager class. +Javadoc +for the JPA interfacesand JPA 2.2 +specification.

+
+
+

The index of the Hibernate documentation is at +https://hibernate.org/orm/documentation/6.1/

+
+
+
+

10.2. Update your Persistence.xml for Hibernate

+
+

The persistence provider class name in Hibernate is +org.hibernate.jpa.HibernatePersistenceProvider.

+
+
+

Your persistence.xml can specify:

+
+
+

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

+
+
+

Or remove the persistence provider class name from your persistence.xml +(so the default provider will be used).

+
+
+
+

10.3. Entity manager

+
+

The entity manager (jakarta.persistence.EntityManager class) is similar to +the Hibernate Session class; applications use it to +create/read/update/delete data (and related operations). Applications +can use application-managed or container-managed entity managers. Keep +in mind that the entity manager is not thread safe, don’t share the same +entity manager instance with multiple threads.

+
+
+

Internally, the entity manager, has a persistence context for managing +entities. You can think of the persistence context as being closely +associated with the entity manager.

+
+
+
+

10.4. Container-managed entity manager

+
+

When you inject a container-managed entity managers into an application +variable, it is treated like an (EE container controlled) Java proxy +object, that will be associated with an underlying EntityManager +instance, for each started JTA transaction and is flushed/closed when +the JTA transaction commits. Such that when your application code +invokes EntityManager.anyMethod(), the current JTA transaction is +searched (using persistence unit name as key) for the underlying +EntityManager instance, if not found, a new EntityManager instance is +created and associated with the current JTA transaction, to be reused +for the next EntityManager invocation. Use the @PersistenceContext +annotation, to inject a container-managed entity manager into a +jakarta.persistence.EntityManager variable.

+
+
+
+

10.5. Application-managed entity manager

+
+

An application-managed entity manager is kept around until the +application closes it. The scope of the application-managed entity +manager is from when the application creates it and lasts until the +application closes it. Use the @PersistenceUnit annotation, to inject +a persistence unit into a jakarta.persistence.EntityManagerFactory +variable. The EntityManagerFactory can return an application-managed +entity manager.

+
+
+
+

10.6. Persistence Context

+
+

The JPA persistence context contains the entities managed by the entity +manager (via the JPA persistence provider). The underlying entity +manager maintains the persistence context. The persistence context acts +like a first level (transactional) cache for interacting with the +datasource. Loaded entities are placed into the persistence context +before being returned to the application. Entities changes are also +placed into the persistence context (to be saved in the database when +the transaction commits).

+
+
+
+

10.7. Transaction-scoped Persistence Context

+
+

The transaction-scoped persistence context coordinates with the (active) +JTA transaction. When the transaction commits, the persistence context +is flushed to the datasource (entity objects are detached but may still +be referenced by application code). All entity changes that are expected +to be saved to the datasource, must be made during a transaction. +Entities read outside of a transaction will be detached when the entity +manager invocation completes. Example transaction-scoped persistence +context is below.

+
+
+
+
@Stateful  // will use container managed transactions
+public class CustomerManager {
+  @PersistenceContext(unitName = "customerPU") // default type is PersistenceContextType.TRANSACTION
+  EntityManager em;
+  public customer createCustomer(String name, String address) {
+    Customer customer = new Customer(name, address);
+    em.persist(customer);  // persist new Customer when JTA transaction completes (when method ends).
+                           // internally:
+                           //    1. Look for existing "customerPU" persistence context in active JTA transaction and use if found.
+                           //    2. Else create new "customerPU" persistence context (e.g. instance of org.hibernate.ejb.HibernatePersistence)
+                           //       and put in current active JTA transaction.
+    return customer;       // return Customer entity (will be detached from the persistence context when caller gets control)
+  }  // Transaction.commit will be called, Customer entity will be persisted to the database and "customerPU" persistence context closed
+
+
+
+
+

10.8. Extended Persistence Context

+
+

The (ee container managed) extended persistence context can span +multiple transactions and allows data modifications to be queued up +(without an active JTA transaction), to be applied +during completion of next JTA transaction. The Container-managed extended persistence +context can only be injected into a stateful session bean.

+
+
+
+
@PersistenceContext(type = PersistenceContextType.EXTENDED, unitName = "inventoryPU")
+EntityManager em;
+
+
+
+

10.8.1. Extended Persistence Context Inheritance

+
+
+
JPA 2.2 specification section 7.6.3.1
+ 
+If a stateful session bean instantiates a stateful session bean (executing in the same EJB container instance) which also has such an extended persistence context with the same synchronization type, the extended persistence context of the first stateful session bean is inherited by the second stateful session bean and bound to it, and this rule recursively applies independently of whether transactions are active or not at the point of the creation of the stateful session beans. If the stateful session beans differ in declared synchronization type, the EJBException is thrown by the container.  If the persistence context has been inherited by any stateful session beans, the container does not close the persistence context until all such stateful session beans have been removed or otherwise destroyed.
+
+
+
+

By default, the current stateful session bean being created, will ( +deeply) inherit the extended persistence context from any stateful +session bean executing in the current Java thread. The deep +inheritance of extended persistence context includes walking multiple +levels up the stateful bean call stack (inheriting from parent beans). +The deep inheritance of extended persistence context includes sibling +beans. For example, parentA references child beans beanBwithXPC & +beanCwithXPC. Even though parentA doesn’t have an extended persistence +context, beanBwithXPC & beanCwithXPC will share the same extended +persistence context.

+
+
+

Some other EE application servers, use shallow inheritance, where +stateful session bean only inherit from the parent stateful session bean +(if there is a parent bean). Sibling beans do not share the same +extended persistence context unless their (common) parent bean also has +the same extended persistence context.

+
+
+

Applications can include a (top-level) jboss-all.xml deployment +descriptor that specifies either the (default) DEEP extended +persistence context inheritance or SHALLOW.

+
+
+

The WF/docs/schema/jboss-jpa_1_0.xsd describes the jboss-jpa +deployment descriptor that may be included in the jboss-all.xml. Below +is an example of using SHALLOW extended persistence context +inheritance:

+
+
+
+
+

<jboss>
+<jboss-jpa xmlns="http://www.jboss.com/xml/ns/javaee">
+<extended-persistence inheritance="SHALLOW"/>
+</jboss-jpa>
+</jboss>

+
+
+
+
+

Below is an example of using DEEP extended persistence inheritance:

+
+
+
+
+

<jboss>
+<jboss-jpa xmlns="http://www.jboss.com/xml/ns/javaee">
+<extended-persistence inheritance="DEEP"/>
+</jboss-jpa>
+</jboss>

+
+
+
+
+

The AS console/cli can change the default extended persistence context +setting (DEEP or SHALLOW). The following cli commands will read the +current JPA settings and enable SHALLOW extended persistence context +inheritance for applications that do not include the jboss-jpa +deployment descriptor:

+
+
+
+
+
/jboss-cli.sh
+

cd subsystem=jpa
+:read-resource
+:write-attribute(name=default-extended-persistence-inheritance,value="SHALLOW")

+
+
+
+
+
+
+

10.9. Entities

+
+

JPA allows use of your (pojo) plain old Java class to represent a +database table row.

+
+
+
+
@PersistenceContext EntityManager em;
+Integer bomPk = getIndexKeyValue();
+BillOfMaterials bom = em.find(BillOfMaterials.class, bomPk); // read existing table row into BillOfMaterials class
+ 
+BillOfMaterials createdBom = new BillOfMaterials("...");     // create new entity
+em.persist(createdBom);  // createdBom is now managed and will be saved to database when the current JTA transaction completes
+
+
+
+

The entity lifecycle is managed by the underlying persistence provider.

+
+
+
    +
  • +

    New (transient): an entity is new if it has just been instantiated +using the new operator, and it is not associated with a persistence +context. It has no persistent representation in the database and no +identifier value has been assigned.

    +
  • +
  • +

    Managed (persistent): a managed entity instance is an instance with a +persistent identity that is currently associated with a persistence +context.

    +
  • +
  • +

    Detached: the entity instance is an instance with a persistent +identity that is no longer associated with a persistence context, +usually because the persistence context was closed or the instance was +evicted from the context.

    +
  • +
  • +

    Removed: a removed entity instance is an instance with a persistent +identity, associated with a persistence context, but scheduled for +removal from the database.

    +
  • +
+
+
+
+

10.10. Deployment

+
+

The persistence.xml contains the persistence unit configuration (e.g. +datasource name) and as described in the JPA 2.0 spec (section 8.2), the +jar file or directory whose META-INF directory contains the +persistence.xml file is termed the root of the persistence unit. In Java +EE environments, the root of a persistence unit must be one of the +following (quoted directly from the JPA 2.0 specification):

+
+
+

"

+
+
+
    +
  • +

    an EJB-JAR file

    +
  • +
  • +

    the WEB-INF/classes directory of a WAR file

    +
  • +
  • +

    a jar file in the WEB-INF/lib directory of a WAR file

    +
  • +
  • +

    a jar file in the EAR library directory

    +
  • +
  • +

    an application client jar file

    +
  • +
+
+
+

The persistence.xml can specify either a JTA datasource or a non-JTA +datasource. The JTA datasource is expected to be used within the EE +environment (even when reading data without an active transaction). If a +datasource is not specified, the default-datasource will instead be used +(must be configured).

+
+
+ + + + + +
+ + +Java Persistence 1.0 supported use of a jar file in the root of +the EAR as the root of a persistence unit. This use is no longer +supported. Portable applications should use the EAR library directory +for this case instead. +
+
+
+

"

+
+
+

Question: Can you have a EAR/META-INF/persistence.xml?

+
+
+

Answer: No, the above may deploy but it could include other archives +also in the EAR, so you may have deployment issues for other reasons. +Better to put the persistence.xml in an EAR/lib/somePuJar.jar.

+
+
+
+

10.11. Troubleshooting

+
+

The org.jboss.as.jpa logging can be enabled to get the following +information:

+
+
+
    +
  • +

    INFO - when persistence.xml has been parsed, starting of persistence +unit service (per deployed persistence.xml), stopping of persistence +unit service

    +
  • +
  • +

    DEBUG - informs about entity managers being injected, creating/reusing +transaction scoped entity manager for active transaction

    +
  • +
  • +

    TRACE - shows how long each entity manager operation took in +milliseconds, application searches for a persistence unit, parsing of +persistence.xml

    +
  • +
+
+
+

To enable TRACE, open the as/standalone/configuration/standalone.xml (or +as/domain/configuration/domain.xml) file. Search for <subsystem +xmlns="urn:jboss:domain:logging:1.0"> and add the org.jboss.as.jpa +category. You need to change the console-handler level from INFO to +TRACE.

+
+
+
+
<subsystem xmlns="urn:jboss:domain:logging:1.0">
+     <console-handler name="CONSOLE">
+      <level name="TRACE" />
+      ...
+     </console-handler>
+ 
+     </periodic-rotating-file-handler>
+     <logger category="com.arjuna">
+        <level name="WARN" />
+     </logger>
+ 
+     <logger category="org.jboss.as.jpa">
+        <level name="TRACE" />
+     </logger>
+ 
+     <logger category="org.apache.tomcat.util.modeler">
+        <level name="WARN" />
+     </logger>
+     ...
+
+
+
+

To see what is going on at the JDBC level, enable jboss.jdbc.spy TRACE +and add spy="true" to the datasource.

+
+
+
+
<datasource jndi-name="java:jboss/datasources/..." pool-name="..." enabled="true" spy="true">
+<logger category="jboss.jdbc.spy">
+  <level name="TRACE"/>
+</logger>
+
+
+
+

To troubleshoot issues with the Hibernate second level cache, try +enabling trace for org.hibernate.SQL + org.hibernate.cache.infinispan
+org.infinispan:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:logging:1.0">
+     <console-handler name="CONSOLE">
+      <level name="TRACE" />
+      ...
+     </console-handler>
+ 
+     </periodic-rotating-file-handler>
+     <logger category="com.arjuna">
+        <level name="WARN" />
+     </logger>
+ 
+     <logger category="org.hibernate.SQL">
+        <level name="TRACE" />
+     </logger>
+ 
+     <logger category="org.hibernate">
+        <level name="TRACE" />
+     </logger>
+      <logger category="org.infinispan">
+        <level name="TRACE" />
+     </logger>
+ 
+     <logger category="org.apache.tomcat.util.modeler">
+        <level name="WARN" />
+     </logger>
+     ...
+
+
+
+
+

10.12. Using the Infinispan second level cache

+
+

To enable the second level cache with Hibernate, just set the +hibernate.cache.use_second_level_cache property to true or +set shared-cache-mode to one of the following:

+
+
+
    +
  • +

    ENABLE_SELECTIVE

    +
  • +
  • +

    DISABLE_SELECTIVE

    +
  • +
  • +

    ALL

    +
  • +
+
+
+

Infinispan is the cache provider for JPA applications, so you don’t need to specify +anything in addition. The Infinispan version that is included in +WildFly is expected to work with the Hibernate version that is included +with WildFly. Example persistence.xml settings:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+<persistence-unit name="2lc_example_pu">
+   <description>example of enabling the second level cache.</description>
+   <jta-data-source>java:jboss/datasources/mydatasource</jta-data-source>
+   <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
+</persistence-unit>
+</persistence>
+
+
+
+

Here is an example of enabling the second level cache for a Hibernate +native API hibernate.cfg.xml file:

+
+
+
+
<property name="hibernate.cache.region.factory_class" value="org.infinispan.hibernate.cache.v53.InfinispanRegionFactory"/>
+<property name="hibernate.cache.infinispan.shared" value="false"/>
+<property name="hibernate.cache.use_second_level_cache" value="true"/>
+
+
+
+

The Hibernate native API application will also need a MANIFEST.MF:

+
+
+
+
Dependencies: org.infinispan,org.hibernate
+
+
+
+

Infinispan +Hibernate/JPA second level cache provider documentation contains +advanced configuration information but you should bear in mind that when +Hibernate runs within WildFly 29, some of those configuration options, +such as region factory, are not needed. Moreover, the application server +providers you with option of selecting a different cache container for +Infinispan via hibernate.cache.infinispan.container persistence +property. To reiterate, this property is not mandatory and a default +container is already deployed for by the application server to host the +second level cache.

+
+
+

Here is an example of what the Hibernate cache settings may currently be +in your standalone.xml:

+
+
+
+
 <cache-container name="hibernate" module="org.infinispan.hibernate-cache">
+     <local-cache name="entity">
+         <transaction mode="NON_XA"/>
+         <object-memory size="10000"/>
+         <expiration max-idle="100000"/>
+     </local-cache>
+     <local-cache name="local-query">
+         <object-memory size="10000"/>
+         <expiration max-idle="100000"/>
+     </local-cache>
+     <local-cache name="timestamps"/>
+ </cache-container>
+
+
+
+

Below is an example of customizing the "entity", "immutable-entity", +"local-query", "pending-puts", "timestamps" cache configuration may look +like:

+
+
+
+
 <cache-container name="hibernate" module="org.infinispan.hibernate-cache" default-cache="immutable-entity">
+    <local-cache name="entity">
+        <transaction mode="NONE"/>
+        <eviction max-entries="-1"/>
+        <expiration max-idle="120000"/>
+    </local-cache>
+    <local-cache name="immutable-entity">
+        <transaction mode="NONE"/>
+        <eviction max-entries="-1"/>
+        <expiration max-idle="120000"/>
+    </local-cache>
+    <local-cache name="local-query">
+        <eviction max-entries="-1"/>
+        <expiration max-idle="300000"/>
+    </local-cache>
+    <local-cache name="pending-puts">
+        <transaction mode="NONE"/>
+        <eviction strategy="NONE"/>
+        <expiration max-idle="60000"/>
+    </local-cache>
+    <local-cache name="timestamps">
+        <transaction mode="NONE"/>
+        <eviction strategy="NONE"/>
+    </local-cache>
+</cache-container>
+
+
+
+

Persistence.xml to use the above custom settings:

+
+
+
+
<properties>
+    <property name="hibernate.cache.use_second_level_cache" value="true"/>
+    <property name="hibernate.cache.use_query_cache" value="true"/>
+    <property name="hibernate.cache.infinispan.immutable-entity.cfg" value="immutable-entity"/>
+    <property name="hibernate.cache.infinispan.timestamps.cfg" value="timestamps"/>
+    <property name="hibernate.cache.infinispan.pending-puts.cfg" value="pending-puts"/>
+</properties>
+
+
+
+
+ +
+

WildFly includes Hibernate Search. +If you want to use the bundled version of Hibernate Search, which requires to use the default Hibernate ORM persistence provider:

+
+
+
    +
  • +

    Ensure at least one entity in your application is annotated with org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed, +so that WildFly will make the module org.hibernate.search.mapper.orm:main available to your deployment.

    +
  • +
  • +

    Ensure you set the configuration property hibernate.search.backend.type to lucene, +so that WildFly will make the module org.hibernate.search.backend.lucene:main available to your deployment.

    +
  • +
  • +

    Alternatively, add dependencies to those modules explicitly, +for example using a manifest entry. +Do not forget to append the services keyword, otherwise Hibernate Search may not detect these modules.

    +
    +

    For example:

    +
    +
  • +
+
+
+
+
Dependencies: org.hibernate.search.mapper.orm services,org.hibernate.search.backend.lucene services
+
+
+
+

If you do not want Hibernate Search to be exposed to your deployment, set the persistence property wildfly.jpa.hibernate.search.module to either none to not automatically inject any Hibernate Search module, or to any other module identifier to inject a different module. For example you could set wildfly.jpa.hibernate.search.module=org.hibernate.search.mapper.orm:6.1.0.Beta1 to use the experimental version 6.1.0.Beta1 instead of the provided module; in this case you’ll have to download and add the custom modules to the application server as other versions are not included. When setting wildfly.jpa.hibernate.search.module=none you might also opt to include Hibernate Search and its dependencies within your application but we highly recommend the modules approach.

+
+
+
+

10.14. Packaging the Hibernate JPA persistence provider with your application

+
+

WildFly allows the packaging of Hibernate persistence provider jars with +the application. The JPA deployer will detect the presence of a +persistence provider in the application and +jboss.as.jpa.providerModule needs to be set to application.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?> +
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+version="1.0"> +
+<persistence-unit name="myOwnORMVersion_pu"> +
+<description>Hibernate Persistence Unit.</description> +
+<jta-data-source>java:jboss/datasources/PlannerDS</jta-data-source> +
+<properties> +
+<property name="jboss.as.jpa.providerModule" value="application" /> +
+</properties> +
+</persistence-unit> +
+</persistence>
+
+
+
+
+ +
+

You need to copy the EclipseLink (3.0 or newer) jar into the WildFly +modules/org/eclipse/persistence/main folder and update +modules/org/eclipse/persistence/main/module.xml to include the +EclipseLink jar (take care to use the jar name that you copied in). If +you happen to leave the EclipseLink version number in the jar name, the +module.xml should reflect that. This will help you get your application +that depends on EclipseLink, to deploy on WildFly.

+
+
+
+
 <module xmlns="urn:jboss:module:1.9" name="org.eclipse.persistence">
+    <resources>
+        <resource-root path="jipijapa-eclipselink-jakarta-27.0.0.Final.jar"/>
+        <resource-root path="eclipselink.jar">           <filter>
+              <exclude path="jakarta/**" />
+           </filter>
+        </resource-root>
+    </resources>
+ 
+    <dependencies>
+        <module name="java.logging"/>
+        <module name="java.management"/>
+        <module name="java.naming"/>
+        <module name="jakarta.annotation.api"/>
+        <module name="jakarta.enterprise.api"/>
+        <module name="jakarta.json.api" optional="true"/>
+        <module name="jakarta.persistence.api"/>
+        <module name="jakarta.transaction.api"/>
+        <module name="jakarta.validation.api"/>
+        <module name="jakarta.xml.bind.api"/>
+        <module name="org.antlr"/>
+        <module name="org.jboss.as.jpa.spi"/>
+        <module name="org.jboss.logging"/>
+        <module name="org.jboss.vfs"/>
+    </dependencies>
+</module>
+
+
+
+

You should then be able to deploy applications with persistence.xml that +include;

+
+
+
+
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+
+
+ +
+
+

10.16. Native Hibernate use

+
+

Applications that use the Hibernate API directly, can be referred to +as native Hibernate applications. Native Hibernate applications, can +choose to use the Hibernate jars included with WildFly or they can +package their own copy of the Hibernate jars. Applications that utilize +JPA will automatically have the Hibernate classes injected onto the +application deployment classpath. Meaning that JPA applications, should +expect to use the Hibernate jars included in WildFly.

+
+
+

Example MANIFEST.MF entry to add dependency for Hibernate native +applications:

+
+
+
+
Manifest-Version: 1.0
+...
+Dependencies: org.hibernate
+
+
+
+
+

10.17. Injection of Hibernate Session and SessionFactory

+
+

You can inject a org.hibernate.Session and org.hibernate.SessionFactory +directly, just as you can do with EntityManagers and +EntityManagerFactorys.

+
+
+
+
import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+@Stateful public class MyStatefulBean ... {
+   @PersistenceContext(unitName="crm") Session session1;
+   @PersistenceContext(unitName="crm2", type=EXTENDED) Session extendedpc;
+   @PersistenceUnit(unitName="crm") SessionFactory factory;
+}
+
+
+
+
+

10.18. Hibernate ORM 5.1 native API bytecode transformer was removed

+
+

If your application references the Hibernate ORM 5.1 native API bytecode transformer, you should remove references to org.jboss.as.hibernate.Hibernate51CompatibilityTransformer +in any jboss-deployment-structure.xml files in your application. The Hibernate51CompatibilityTransformer system property is now ignored.

+
+
+

For the following example Hibernate51CompatibilityTransformer.xml, you need to remove each transformer:

+
+
+
+
<jboss-deployment-structure>
+    <deployment>
+        <transformers>
+            <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/>
+        </transformers>
+        <dependencies>
+            <module name="org.hibernate" export="true" />
+        </dependencies>
+    </deployment>
+    <sub-deployment name="main.war">
+        <transformers>
+            <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/>
+        </transformers>
+    </sub-deployment>
+</jboss-deployment-structure>
+
+
+
+

Updated jboss-deployment-structure.xml:

+
+
+
+
<jboss-deployment-structure>
+    <deployment>
+        <dependencies>
+            <module name="org.hibernate" export="true" />
+        </dependencies>
+    </deployment>
+</jboss-deployment-structure>
+
+
+
+
+

10.19. Hibernate properties

+
+

WildFly automatically sets or checks the following Hibernate properties (if +not already set in persistence unit definition):

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyPurpose

hibernate.id.new_generator_mappings

Can no longer be set to false by applications as per the Hibernate 6 change to only support hibernate.id.new_generator_mappings=true.

hibernate.transaction.jta.platform= instance of +org.hibernate.service.jta.platform.spi.JtaPlatform interface

The +transaction manager, user transaction and transaction synchronization +registry is passed into Hibernate via this class.

hibernate.session_factory_name = qualified persistence unit name

Is +set to the application name + persistence unit name (application can +specify a different value but it needs to be unique across all +application deployments on the AS instance).

hibernate.session_factory_name_is_jndi = false

only set if the +application didn’t specify a value for hibernate.session_factory_name.

hibernate.entitymanager_factory_name = qualified persistence unit +name

Is set to the application name + persistence unit name +(application can specify a different value but it needs to be unique +across all application deployments on the AS instance). +This replaces the hibernate.ejb.entitymanager_factory_name property which is no longer supported.

hibernate.query.jpaql_strict_compliance=true

 

hibernate.auto_quote_keyword=false

 

hibernate.implicit_naming_strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl

hibernate.model.generator_name_as_sequence_name=true

hibernate.jpa.compliance=true

Sets all of the various hibernate.jpa.* properties to true (hibernate.jpa.compliance.transaction, hibernate.jpa.compliance.closed,hibernate.jpa.compliance.query, hibernate.jpa.compliance.list, hibernate.jpa.compliance.caching, hibernate.jpa.compliance.proxy

hibernate.enable_lazy_load_no_trans=false

+
+
+

10.20. Persistence unit properties

+
+

The following properties are supported in the persistence unit +definition (in the persistence.xml file):

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyPurpose

jboss.as.jpa.providerModule

name of the persistence provider module +(default is org.hibernate). Should be application, if a persistence +provider is packaged with the application. See note below about some +module names that are built in (based on the provider).

jboss.as.jpa.adapterModule

name of the integration classes that help +WildFly to work with the persistence provider.

jboss.as.jpa.adapterClass

class name of the integration adapter.

jboss.as.jpa.managed

set to false to disable container managed JPA +access to the persistence unit. The default is true, which enables +container managed JPA access to the persistence unit. This is typically +set to false for Spring applications.

jboss.as.jpa.classtransformer

set to false to disable class +transformers for the persistence unit. Set to true, to allow entity +class enhancing/rewriting.

wildfly.jpa.default-unit

set to true to choose the default persistence +unit in an application. This is useful if you inject a persistence +context without specifying the unitName (@PersistenceContext +EntityManager em) but have multiple persistence units specified in your +persistence.xml.

wildfly.jpa.twophasebootstrap

persistence providers (like Hibernate +ORM 4.3+ via EntityManagerFactoryBuilder), allow a two phase persistence +unit bootstrap, which improves JPA integration with Jakarta Contexts and Dependency Injection. Setting the +wildfly.jpa.twophasebootstrap hint to false, disables the two phase +bootstrap (for the persistence unit that contains the hint).

wildfly.jpa.applicationdatasource

set to true when using an application defined DataSource or resource reference to a global DataSource.

wildfly.jpa.allowdefaultdatasourceuse

set to false to prevent +persistence unit from using the default data source. Defaults to true. +This is only important for persistence units that do not specify a +datasource.

jboss.as.jpa.deferdetach

Controls whether a transaction scoped +persistence context used in a non-JTA transaction thread will detach +loaded entities after each EntityManager invocation or when the +persistence context is closed (e.g. business method ends). Defaults to +false (entities are cleared after EntityManager invocation) and if set +to true, the detach is deferred until the context is closed.

wildfly.jpa.skipquerydetach

Controls whether a transaction scoped +persistence context used in a non-JTA transaction thread will detach +Query results immediately. Defaults to +false (Query results are detached immediately) and if set +to true, the detach is deferred until the persistence context is closed.

wildfly.jpa.hibernate.search.module

Controls which version of +Hibernate Search to include on classpath. Only makes sense when using +Hibernate as JPA implementation. The default is auto; other valid values +are none or a full module identifier to use an alternative version.

jboss.as.jpa.scopedname

Specify the qualified (application scoped) +persistence unit name to be used. By default, this is internally set to +the application name + persistence unit name. The +hibernate.cache.region_prefix will default to whatever you set +jboss.as.jpa.scopedname to. Make sure you set the +jboss.as.jpa.scopedname value to a value not already in use by other +applications deployed on the same application server instance.

wildfly.jpa.allowjoinedunsync

If set to true, allows an +SynchronizationType.UNSYNCHRONIZED persistence context that has been +joined to the active JTA transaction, to be propagated into a +SynchronizationType.SYNCHRONIZED persistence context. Otherwise, an +IllegalStateException exception would of been thrown that complains that +an unsychronized persistence context cannot be propagated into a +synchronized persistence context. Defaults to false.

wildfly.jpa.skipmixedsynctypechecking

Set to true to disable the +throwing of an IllegalStateException exception when propagating an +SynchronizationType.UNSYNCHRONIZED persistence context into a +SynchronizationType.SYNCHRONIZED persistence context. This is a +workaround intended to allow applications that used to incorrectly not +get IllegalStateException exception with extended persistence contexts, +to avoid the IllegalStateException, so they don’t have to change their +application right away (for compatibility purposes). This hint may be +deprecated in a future release. See WFLY-7108 for more details. Defaults +to false.

wildfly.jpa.regionfactory

Only applies to Hibernate ORM 5.3+, set to false to disable automatic use of Infinispan as second level cache (hibernate.cache.region.factory_class).

wildfly.jpa.jtaplatform

Only applies to Hibernate ORM 5.3+, set to false to disable automatic configuring of the JTA integration platform (hibernate.transaction.jta.platform).

+
+
+

10.21. Determine the persistence provider module

+
+

As mentioned above, if the jboss.as.jpa.providerModule property is not +specified, the provider module name is determined by the provider name +specified in the persistence.xml. The mapping is:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Provider NameModule name

blank

org.hibernate

org.hibernate.jpa.HibernatePersistenceProvider

org.hibernate

org.hibernate.ogm.jpa.HibernateOgmPersistence

org.hibernate.ogm

oracle.toplink.essentials.PersistenceProvider

oracle.toplink

oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider

oracle.toplink

org.eclipse.persistence.jpa.PersistenceProvider

org.eclipse.persistence

org.datanucleus.api.jpa.PersistenceProviderImpl

org.datanucleus

org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider

org.datanucleus:appengine

org.apache.openjpa.persistence.PersistenceProviderImpl

org.apache.openjpa

+
+
+

10.22. Binding EntityManagerFactory/EntityManager to JNDI

+
+

By default WildFly does not bind the entity manager factory to JNDI. +However, you can explicitly configure this in the persistence.xml of +your application by setting the jboss.entity.manager.factory.jndi.name +hint. The value of that property should be the JNDI name to which the entity manager factory should be bound.

+
+
+

You can also bind a container managed (transaction scoped) entity manager to JNDI as well, }}via hint +jboss.entity.manager.jndi.name\{ +}{{. As a reminder, a transaction scoped entity manager (persistence context), acts as a proxy that always gets an unique underlying entity manager (at the persistence provider level).

+
+
+

Here’s an example:

+
+
+

persistence.xml

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.0"
+   xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="
+        http://java.sun.com/xml/ns/persistence
+        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
+   <persistence-unit name="myPU">
+      <!-- If you are running in a production environment, add a managed
+         data source, the example data source is just for proofs of concept! -->
+      <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
+      <properties>
+         <!-- Bind entity manager factory to JNDI at java:jboss/myEntityManagerFactory -->
+         <property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/myEntityManagerFactory" />
+         <property name="jboss.entity.manager.jndi.name" value="java:/myEntityManager"/>
+       </properties>
+   </persistence-unit>
+</persistence>
+
+
+
+
+
@Stateful
+public class ExampleSFSB {
+  public void createSomeEntityWithTransactionScopedEM(String name) {
+    Context context = new InitialContext();
+    jakarta.persistence.EntityManager entityManager = (jakarta.persistence.EntityManager) context.lookup("java:/myEntityManager");
+    SomeEntity someEntity = new SomeEntity();
+    someEntity.setName(name);    entityManager.persist(name);
+  }
+}
+
+
+
+ + + + + +
+ + +References in this document to Java Transaction API (JTA) refer to Jakarta Transactions unless otherwise noted. + References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. +
+
+
+
+
+
+

11. JTA Reference

+
+
+

WildFly uses Narayana as the implementation of the JTA specification. +Narayana manages transactions in the application server.

+
+
+

11.1. Transactions in Enterprise Java applications

+
+

Transactions are one of the core functionalities provided by the container +for the applications. A developer can manage transactions either with +the programmatic approach - with API defined by JTA specification. +Or he can use annotations. There are two types.

+
+
+
    +
  • +

    first - EJB annotations, their meaning and capabilities are defined under +EJB specification and are valid when used in the EJB component

    +
  • +
  • +

    second - CDI annotations, their meaning is defined under JTA specification

    +
  • +
+
+
+

11.1.1. Transactions managed with programmatic JTA API

+
+

The JTA API is defined under +jakarta.transaction +package. The package could be considered a bit misguiding as it presents classes +which are expected to be used by application developer. These classes +are intended as an API for the application server (as the WildFly is).

+
+
+

The user is expected to interact with +jakarta.transaction.UserTransaction +which defines the transaction boundaries. The UserTransaction could be used +in case the transaction is not defined by annotation at the method +- aka. the transaction is not managed by the container. Those are places like +servlets, CDI bean which is not annotated with @Transactional and +EJBs defined as bean managed.

+
+
+

UserTransaction is available via CDI injection

+
+
+
+
@Inject
+UserTransaction txn;
+
+
+
+

or with EJB @Resource injection where you can additionally define the JNDI +name to be looked-up. The specification says it’s java:comp/UserTransaction.

+
+
+
+
@Resource(lookup = "java:comp/UserTransaction")
+UserTransaction txn;
+
+
+
+

The code can then look like

+
+
+
+
@WebServlet(name="TestServlet", urlPatterns={"/"})
+public class TestServlet extends HttpServlet {
+    private static final Logger LOG = Logger.getLogger(TestServlet.class);
+
+    @Inject
+    private UserTransaction txn;
+
+    @PersistenceContext
+    private EntityManager em;
+
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        try {
+            txn.begin();
+
+            em.persist(new TestEntity(1, "Mr. Transaction"));
+
+            txn.commit();
+          } catch (NotSupportedException beginExceptions) {
+              LOG.errorf(beginExceptions, "Cannot start transaction: '%s'", txn);
+          } catch (SecurityException | IllegalStateException | RollbackException
+                  | HeuristicMixedException | HeuristicRollbackException commitExceptions) {
+              LOG.errorf(commitExceptions, "Cannot commit transaction: '%s'", txn);
+          } catch (SystemException systemException) {
+              LOG.errorf(systemException, "Unexpected error condition on work with transaction: '%s'", txn);
+          }
+    }
+}
+
+
+
+

jakarta.transaction.TransactionManager +is not meant to be used by business logic but if you need to register +a synchronization +or you need to change transaction timeout (before the begin() method is called) +then it will be the option for you.

+
+
+

The TransactionManager could be taken with injection +and looked-up with the JNDI name

+
+
+
+
@Inject
+TransactionManager tm;
+
+// or
+
+@Resource(lookup = "java:/TransactionManager")
+TransactionManager tm;
+
+
+
+
+

11.1.2. Transactions in CDI beans

+
+

If you start using CDI beans then you can manage transactions either programmatically +or you can use annotations. +The @Transactional +defines transaction boundaries +(start of the method starts the transaction, while the transaction is finished at its end). +If the method finishes sucessfully the transaction is committed. +If the transaction ends with RuntimeException then it’s rolled-back.

+
+
+

When you define the method to be @Transactional you define the behaviour +of incoming (or non-existent) transactional context. +Please refer the to documentation for +Transactional.TxType.

+
+
+

It’s important to note that the TxType influences the transaction management +only when called with the managed CDI bean. If you call the method directly - +without the CDI container wraps the invocation then the TxType has no effect.

+
+
+
+
@RequestScope
+public class MyCDIBean {
+  @Inject
+  MyCDIBean myBean;
+
+  @Transactional(TxType.REQUIRED)
+  public void mainMethod() {
+    // CDI container does not wrap the invocation
+    // no new transaction is started
+    innerFunctionality();
+
+    // CDI container starts a new transaction
+    // the method uses TxType.REQUIRES_NEW and is called from the CDI bean
+    myBean.innerFunctionality();
+  }
+
+  @Transactional(TxType.REQUIRES_NEW)
+  private void innerFunctionality() {
+    // some business logic
+  }
+}
+
+
+
+ + + + + +
+ + +the exception handling could be influenced by attributes + rollbackOn and dontRollbackOn (of the @Transactional annotation) +
+
+
+ + + + + +
+ + +if you use the @Transactional for managing transactions boundaries + you won’t be permitted to use the UserTransaction methods. + If you do so you can expect a runtime exception being thrown. +
+
+
+

CDI introduces as well a scope for use with transactions - +@TransactionScoped.

+
+
+
+

11.1.3. Transactions in EJBs

+
+

Transaction management in EJB is administered with two annotations: +@TransactionManagement +@TransactionAttribute.

+
+
+ + + + + +
+ + +you can define the same behaviour when you use the ejb-jar.xml + descriptor instead of the annotations +
+
+
+

The WildFly provides specific annotation org.jboss.ejb3.annotation.TransactionTimeout +which gives you the chance to change the transaction timeout for a particular bean/method.

+
+
+ + + + + +
+ + +when you use message-driven bean then the @TransactionTimeout does not work + and you need to define the timeout through the @ActivationConfigProperty: + @ActivationConfigProperty(propertyName="transactionTimeout", propertyValue="1") +
+
+
+

The default behaviour of an EJB is to be

+
+
+
    +
  • +

    container managed - transaction boundaries are driven by annotations

    +
  • +
  • +

    when the EJB method is invoked - a new transaction is started when no transaction context is available, +or the method joins the existing transactions when the transaction context is passed by the call

    +
  • +
+
+
+

It’s the same transactional behaviour as if the EJB is annotated with

+
+
+
+
@TransactionManagement(TransactionManagementType.CONTAINER)
+@TransactionAttribute(TransactionAttributeType.REQUIRED)
+
+
+
+
Container managed transactions
+
+

Using the @TransactionManagement(TransactionManagementType.CONTAINER) means +the container is responsible to manage transactions. The boundary of the transaction +is defined by the start and end of the method and you influence the behaviour by using +@TransactionAttribute.

+
+
+

If java.lang.RuntimeException is thrown the transaction is rolled back. +EJBContext +could be used to define the transaction should be rolled-back +by the end of the method when setRollbackOnly is used.

+
+
+
+
@Stateless
+public class MyBean {
+  @PersistenceContext
+  private EntityManager em;
+
+  @Resource
+  EJBContext ctx;
+
+  public void method() {
+    em.persist(new TestEntity());
+    // at the end of the method the rollback is called
+    ctx.setRollbackOnly();
+  }
+}
+
+
+
+ + + + + +
+ + +the EJBContext let you get the UserTransaction but you are not allowed + to do any operation with that when you run container managed transaction. + You can expect to receive a runtime exception in such case. +
+
+
+
+
Bean managed transactions
+
+

Using the @TransactionManagement(TransactionManagementType.BEAN) means +the transaction will be managed manually with the use of the JTA API. +That’s with the UserTransaction injections and methods on it. +You can inject the EJBContext to get the UserTransaction instance too.

+
+
+ + + + + +
+ + +if a call is made from the container-managed method, + passing the transaction context to the bean managed method + then the context is suspended. It’s similar(!) to + call transaction managed bean annotated with + @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) +
+
+
+
+
Transaction synchronization
+
+

JTA API gives a chance to react to the event of a finishing transaction. +The definition says that transaction manager announces the even of beforeCompletion and afterCompletion +which are defined by the interface jakarta.transaction.Synchronization. +The beforeCompletion +callback is invoked at time the transaction manager starts to commit the global transaction. The invocation is processed in the transaction context. +The afterCompletion +is invoked after the transaction is committed or rolled-back (and is processed outside of the transaction context).

+
+
+

The user needs just to create a simple Java POJO and implement the interface.

+
+
+
+
public class MySynchronization
+        implements jakarta.transaction.Synchronization {
+  @Override
+  public void beforeCompletion() {
+    System.out.println("Transaction is about to be finished"):
+  }
+
+  @Override
+  public void afterCompletion(int status) {
+    System.out.println("Transaction finished with status " + status):
+  }
+}
+
+
+
+

For registration of the synchronization callback, the user can inject the +jakarta.transaction.TransactionSynchronizationRegistry. +(the mandated JNDI location for the object is at java:comp/TransactionSynchronizationRegistry) and then to register +the synchronization instance. The instance is bound to the currently active transaction.

+
+
+
+
@Resource
+TransactionSynchronizationRegistry transactionSynchronizationRegistry;
+
+public void method() {
+  transactionSynchronizationRegistry
+    .registerInterposedSynchronization(new MySynchronization());
+}
+
+
+
+

The transaction synchronization registry adds other useful methods which are putResource(Object key, Object value) +and getResource(Object key). Their purpose is saving data objects alongside the transaction context. +When the transaction is active you can store and retrieve the saved data. When the transaction is finished +and there is no transaction context available (e.g. at afterCompletion) the java.lang.IllegalStateException +is thrown.

+
+
+

The other option for the user is to use the transaction object +to register the synchronization.

+
+
+
+
@Resource(lookup = "java:/TransactionManager")
+TransactionManager tm;
+
+public void method() {
+tm.getTransaction().registerSynchronization(new MySynchronization());
+
+
+
+

When the user runs the Stateful Session Bean he can implement +interface jakarta.ejb.SessionSynchronization +(or to use annotations) for the definition of the synchronization callbacks onto the bean. +The session synchronization defines three methods. +Of these three methods afterBegin is not connected to the transaction synchronization so we will not discuss it further. +The following example works with annotations but the bean may just implement the SessionSynchronization +interface and it would work the same way.

+
+
+
+
// only(!) SFSB can use the capability of SessionSynchronization
+@Stateful
+public class MyStatefulBean {
+  public void method() {
+    System.out.println("Running an important business logic...");
+    Thread.sleep(42000);
+  }
+
+  @BeforeCompletion
+  public void beforeCompletion() {
+    System.out.println("Transaction is about to be finished"):
+  }
+
+  @AfterCompletion
+  public void afterCompletion(boolean committed) {
+    System.out.println("Transaction finished with the outcome "
+      + (committed ? "committed" : "rolled-back")):
+  }
+}
+
+
+
+ + + + + +
+ + +for more information about CDI and registration of transaction synchronization + look at the article about Narayana integration of CDI events. +
+
+
+
+
+
+

11.2. Transactions subsystem class loading

+
+

The WildFly classloading is based +on the jboss modules +which define the modular class loading system. +The transactions for CDI comes as the extension and because of it +this extension has to be available at the application classpath. +If the application/deployment uses annotations @Transactional +or @TransactionScoped then class loading handling is done automatically.

+
+
+

There is one limitation with the CDI with this approach. +If your application adds the transactional annotations dynamically +(you adds the annotations dynamically during runtime) then the +transaction module has to be +explicitly added +to the application classpath.

+
+
+

This can be done with creating META-INF/MANIFEST.MF or +with use of jboss-deployment-structure.xml descriptor. The MANIFEST.MF +could look like

+
+
+
+
Manifest-Version: 1.0
+Dependencies: org.jboss.jts export services
+
+
+
+
+

11.3. Transactions troubleshooting

+
+

The Narayana component is configured to log only messages with level WARN +(see category com.arjuna in the standalone-*.xml). +If you struggle issues of the transactional handling +you can get a better insight into transaction processing by setting the level to TRACE.

+
+
+
+
/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=TRACE)
+
+
+
+

The TRACE could overwhelm you with information from the transactions subsystem. +Let’s quickly review what are the most important points to look at in the log.

+
+
+ + + + + +
+ + +It’s beneficial to understand how + the two-phase commit works. +
+
+
+

An example of the log messages produces by Narayana is (the content is shortened for sake of brevity)

+
+
+
+
[section 1]
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.jta] (default task-1) BaseTransaction.begin
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) StateManager::StateManager( 2, 0 )
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::BasicAction()
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::Begin() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::actionInitialise() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) ActionHierarchy::ActionHierarchy(1)
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) ActionHierarchy::add(0:ffff0a28050c:-a09a5fe:5c598d64:3b, 1)
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::addChildThread () action 0:ffff0a28050c:-a09a5fe:5c598d64:3b adding Thread[default task-1,5,main]
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::addChildThread () action 0:ffff0a28050c:-a09a5fe:5c598d64:3b adding Thread[default task-1,5,main] result = true
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) TransactionReaper::insert ( BasicAction: 0:ffff0a28050c:-a09a5fe:5c598d64:3b status: ActionStatus.RUNNING, 300 )
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.arjuna] (default task-1) ReaperElement::ReaperElement ( BasicAction: 0:ffff0a28050c:-a09a5fe:5c598d64:3b status: ActionStatus.RUNNING, 300 )
+2019-02-05 14:19:39,745 TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.registerSynchronization - Class: class org.wildfly.transaction.client.AbstractTransaction$AssociatingSynchronization HashCode: 1114413551 toString: org.wildfly.transaction.client.AbstractTransaction$AssociatingSynchronization@426c99ef
+
+
+[section 2]
+TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.enlistResource ( TestXAResource(TestXAResourceCommon(id:944, xid:null, timeout:299, prepareReturn:0)) )
+TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.getStatus: jakarta.transaction.Status.STATUS_ACTIVE
+TRACE [com.arjuna.ats.arjuna] (default task-1) OutputObjectState::OutputObjectState()
+TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.write_committed(0:ffff0a28050c:-a09a5fe:5c598d64:43, EISNAME)
+TRACE [com.arjuna.ats.arjuna] (default task-1) ShadowingStore.write_state(0:ffff0a28050c:-a09a5fe:5c598d64:43, EISNAME, StateType.OS_ORIGINAL)
+TRACE [com.arjuna.ats.arjuna] (default task-1) ShadowingStore.genPathName(0:ffff0a28050c:-a09a5fe:5c598d64:43, EISNAME, StateType.OS_ORIGINAL)
+TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.genPathName(0:ffff0a28050c:-a09a5fe:5c598d64:43, EISNAME, 11)
+TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.openAndLock(data/tx-object-store/ShadowNoFileLockStore/defaultStore/EISNAME/0_ffff0a28050c_-a09a5fe_5c598d64_43, FileLock.F_WRLCK, true)
+TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.closeAndUnlock(data/tx-object-store/ShadowNoFileLockStore/defaultStore/EISNAME/0_ffff0a28050c_-a09a5fe_5c598d64_43, null, java.io.FileOutputStream@72d0d91)
+TRACE [com.arjuna.ats.arjuna] (default task-1) StateManager::StateManager( 1, 0 )
+TRACE [com.arjuna.ats.arjuna] (default task-1) AbstractRecord::AbstractRecord (0:ffff0a28050c:-a09a5fe:5c598d64:45, 1)
+TRACE [com.arjuna.ats.jta] (default task-1) XAResourceRecord.XAResourceRecord ( < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, TestXAResource(TestXAResourceCommon(id:944, xid:null, timeout:300, prepareReturn:0)) ), record id=0:ffff0a28050c:-a09a5fe:5c598d64:45
+TRACE [com.arjuna.ats.arjuna] (default task-1) RecordList::insert(RecordList: empty) : appending /StateManager/AbstractRecord/XAResourceRecord for 0:ffff0a28050c:-a09a5fe:5c598d64:45
+
+[section 3]
+TRACE [com.arjuna.ats.jta] (default task-1) BaseTransaction.commit
+TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.commitAndDisassociate
+TRACE [com.arjuna.ats.jta] (default task-1) TransactionImple.getStatus: jakarta.transaction.Status.STATUS_ACTIVE
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::End() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
+
+[section 4]
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::prepare () for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
+TRACE [com.arjuna.ats.jta] (default task-1) XAResourceRecord.topLevelPrepare for XAResourceRecord < resource:TestXAResource(TestXAResourceCommon(id:944, xid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, timeout:300, prepareReturn:0)), txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, heuristic: TwoPhaseOutcome.FINISH_OK, product: Crash Recovery Test/EAP Test, jndiName: java:/TestXAResource com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6454bcb3 >, record id=0:ffff0a28050c:-a09a5fe:5c598d64:45
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::doPrepare() result for action-id (0:ffff0a28050c:-a09a5fe:5c598d64:3b) on record id: (0:ffff0a28050c:-a09a5fe:5c598d64:45) is (TwoPhaseOutcome.PREPARE_OK) node id: (1)
+TRACE [com.arjuna.ats.arjuna] (default task-1) RecordList::insert(RecordList: empty) : appending /StateManager/AbstractRecord/XAResourceRecord for 0:ffff0a28050c:-a09a5fe:5c598d64:45
+TRACE [com.arjuna.ats.arjuna] (default task-1) OutputObjectState::OutputObjectState(0:ffff0a28050c:-a09a5fe:5c598d64:3b, /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction)
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::save_state ()
+TRACE [com.arjuna.ats.arjuna] (default task-1) StateManager.packHeader for object-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b birth-date 1549372780127
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::save_state - next record to pack is a 171 record /StateManager/AbstractRecord/XAResourceRecord should save it? = true
+
+[section 5]
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::phase2Commit() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::doCommit (XAResourceRecord < resource:TestXAResource(TestXAResourceCommon(id:944, xid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, timeout:300, prepareReturn:0)), txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, heuristic: TwoPhaseOutcome.FINISH_OK, product: Crash Recovery Test/EAP Test, jndiName: java:/TestXAResource com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6454bcb3 >)
+TRACE [com.arjuna.ats.jta] (default task-1) XAResourceRecord.topLevelCommit for XAResourceRecord < resource:TestXAResource(TestXAResourceCommon(id:944, xid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, timeout:300, prepareReturn:0)), txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a28050c:-a09a5fe:5c598d64:3b, node_name=1, branch_uid=0:ffff0a28050c:-a09a5fe:5c598d64:44, subordinatenodename=null, eis_name=java:/TestXAResource >, heuristic: TwoPhaseOutcome.FINISH_OK, product: Crash Recovery Test/EAP Test, jndiName: java:/TestXAResource com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6454bcb3 >, record id=0:ffff0a28050c:-a09a5fe:5c598d64:45
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::doCommit() result for action-id (0:ffff0a28050c:-a09a5fe:5c598d64:3b) on record id: (0:ffff0a28050c:-a09a5fe:5c598d64:45) is (TwoPhaseOutcome.FINISH_OK) node id: (1)
+
+[section 6]
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::updateState() for action-id 0:ffff0a28050c:-a09a5fe:5c598d64:3b
+TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.remove_committed(0:ffff0a28050c:-a09a5fe:5c598d64:3b, /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction)
+TRACE [com.arjuna.ats.arjuna] (default task-1) ShadowingStore.remove_state(0:ffff0a28050c:-a09a5fe:5c598d64:3b, /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction, StateType.OS_ORIGINAL)
+TRACE [com.arjuna.ats.arjuna] (default task-1) FileSystemStore.closeAndUnlock(data/tx-object-store/ShadowNoFileLockStore/defaultStore/StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction/0_ffff0a28050c_-a09a5fe_5c598d64_3b, null, null)
+TRACE [com.arjuna.ats.arjuna] (default task-1) BasicAction::End() result for action-id (0:ffff0a28050c:-a09a5fe:5c598d64:3b) is (TwoPhaseOutcome.FINISH_OK) node id: (1)
+TRACE [com.arjuna.ats.jta] (default task-1) SynchronizationImple.afterCompletion - Class: class org.wildfly.transaction.client.AbstractTransaction$AssociatingSynchronization HashCode: 1685304571 toString: org.wildfly.transaction.client.AbstractTransaction$AssociatingSynchronization@6473b4fb
+TRACE [com.arjuna.ats.jta] (default task-1) SynchronizationImple.afterCompletion - Class: class org.wildfly.transaction.client.provider.jboss.JBossLocalTransactionProvider$1 HashCode: 1429380276 toString: org.wildfly.transaction.client.provider.jboss.JBossLocalTransactionProvider$1@55329cb4
+TRACE [com.arjuna.ats.arjuna] (default task-1) TransactionReaper::remove ( BasicAction: 0:ffff0a28050c:-a09a5fe:5c598d64:3b status: ActionStatus.COMMITTED )
+
+
+
+
    +
  • +

    It’s good to consider to follow with the thread id (in the log above it’s default-task-1). +The transaction could be suspended and started at the different thread +but it’s not usual.

    +
  • +
  • +

    The log shows the Narayana processes the two-phase commit. Bear in mind that the example above +shows only one resource to be part of the two-phase commit handling. +That’s intentional for the log not being too long.

    +
  • +
  • +

    the section-1 refers to the point where the transaction is started. The +JTA synchronizations + are registered and the transaction is added to be handled by transaction reaper + (the transaction reaper is an independent thread taking care of transaction timeouts, + see more at section Transaction timeouts + in the Narayana documentation).

    +
  • +
  • +

    At this place consider the BasicAction (a Narayana abstraction for the transaction) +is identified by string 0:ffff0a28050c:-a09a5fe:5c598d64:3b. +It refers to the transaction id. You can track it through the log and follow +what is happening with the particular transaction.

    +
  • +
  • +

    the section-2 refers to the part of business logic processing. That’s the time +when a database insertion is run or Jakarta Messaging sends a message to a queue. +That’s where you spot message containing enlistResource. After the resource +is enlisted to the transaction the transaction manager saves a record +persistently under transaction log store.

    +
  • +
  • +

    the section-3 refers to the time when the transaction is about to be committed. +That means all business logic was finished (that could be the time a method +annotated with @Transactional reached its end).

    +
  • +
  • +

    the section-4 refers to the first phase of 2PC which is prepare. You can see +XAResourceRecord.topLevelPrepare informing what’s the global transaction id +(already defined at the start of the transaction) and the branch id +(particular to each resource). The resource is then prepared.

    +
  • +
  • +

    when whole prepare phase finishes Narayana saves the state into object store

    +
  • +
  • +

    the section-5 refers to the second phase of 2PC which is commit. You can see +XAResourceRecord.topLevelCommit with similar information as for prepare.

    +
  • +
  • +

    the section-6 shows the transaction is finished, information about the transaction +is removed from the Narayana object store and unregistered from the transaction reaper.

    +
  • +
+
+
+

For more grained troubleshooting you can consider using +Byteman tool.

+
+
+
+

11.4. Transactions configuration

+
+

Configuration related to the behaviour of the Narayana transaction manager +is covered under transactions subsystem. For the details refer to +Admin Guide Transactions subsystem.

+
+
+

To check the subsystem model you can use the WildFly model reference +or list all the configuration options of the subsystem in jboss-cli

+
+
+
+
/subsystem=transactions:read-resource-description(recursive=true)
+
+
+
+ + + + + +
+ + +References in this document to CDI refer to Jakarta Contexts and Dependency Injection unless otherwise noted. + References in this document to Java Transaction API (JTA) refer to Jakarta Transactions unless otherwise noted. + References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+

12. JNDI Reference

+
+
+
+WildFly offers several mechanisms to retrieve components by name. Every +WildFly instance has it’s own local JNDI namespace ( java:) which is +unique per JVM. The layout of this namespace is primarily governed by +the Jakarta EE specification. Applications which share the same WildFly +instance can use this namespace to intercommunicate. In addition to +local JNDI, a variety of mechanisms exist to access remote components. +
+
+
+
    +
  • +

    Client JNDI - This is a mechanism by which remote components can be +accessed using the JNDI APIs, but without network round-trips . This +approach is the most efficient, and removes a potential single point +of failure . For this reason, it is highly recommended to use Client +JNDI over traditional remote JNDI access. However, to make this +possible, it does require that all names follow a strict layout, so user +customizations are not possible. Currently only access to remote Jakarta Enterprise Beans +are supported via the ejb: namespace. Future revisions will likely add a +Jakarta Messaging client JNDI namespace.

    +
  • +
  • +

    Traditional Remote JNDI - This is a more familiar approach to EE +application developers, where the client performs a remote component +name lookup against a server, and a proxy/stub to the component is +serialized as part of the name lookup and returned to the client. The +client then invokes a method on the proxy which results in another +remote network call to the underlying service. In a nutshell, +traditional remote JNDI involves two calls to invoke an EE component, +whereas Client JNDI requires one. It does however allow for customized +names, and for a centralised directory for multiple application servers. +This centralized directory is, however, a single point of failure.

    +
  • +
  • +

    EE Application Client / Server-To-Server Delegation - This approach is +where local names are bound as an alias to a remote name using one of +the above mechanisms. This is useful in that it allows applications to +only ever reference standard portable Jakarta EE names in both code and +deployment descriptors. It also allows for the application to be unaware +of network topology details/ This can even work with Java SE clients by +using the little known EE Application Client feature. This feature +allows you to run an extremely minimal AS server around your +application, so that you can take advantage of certain core services +such as naming and injection.

    +
  • +
+
+
+
+
+

13. Local JNDI

+
+
+

The Jakarta EE platform specification defines the following JNDI contexts:

+
+
+
    +
  • +

    java:comp - The namespace is scoped to the current component (i.e. +Jakarta Enterprise Beans)

    +
  • +
  • +

    java:module - Scoped to the current module

    +
  • +
  • +

    java:app - Scoped to the current application

    +
  • +
  • +

    java:global - Scoped to the application server

    +
  • +
+
+
+

In addition to the standard namespaces, WildFly also provides the +following two global namespaces:

+
+
+
    +
  • +

    java:jboss

    +
  • +
  • +

    java:/

    +
  • +
+
+
+ + + + + +
+ + +Only entries within the java:jboss/exported context are accessible +over remote JNDI. +
+
+
+ + + + + +
+ + +For web deployments java:comp is aliased to java:module, so Jakarta Enterprise Beans’s +deployed in a war do not have their own comp namespace. +
+
+
+

13.1. Binding entries to JNDI

+
+

There are several methods that can be used to bind entries into JNDI in +WildFly.

+
+
+

13.1.1. Using a deployment descriptor

+
+

For Jakarta EE applications the recommended way is to use a +deployment descriptor to create the binding. For +example the following web.xml binds the string "Hello World" to +java:global/mystring and the string "Hello Module" to +java:comp/env/hello (any non absolute JNDI name is relative to +java:comp/env context).

+
+
+
+
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
+         version="3.1">
+    <env-entry>
+        <env-entry-name>java:global/mystring</env-entry-name>
+        <env-entry-type>java.lang.String</env-entry-type>
+        <env-entry-value>Hello World</env-entry-value>
+    </env-entry>
+    <env-entry>
+        <env-entry-name>hello</env-entry-name>
+        <env-entry-type>java.lang.String</env-entry-type>
+        <env-entry-value>Hello Module</env-entry-value>
+    </env-entry>
+</web-app>
+
+
+
+

For more details, see the Java EE +Platform Specification.

+
+
+
+

13.1.2. Programmatically

+
+
Jakarta EE Applications
+
+

Standard Jakarta EE applications may use the standard JNDI API, included +with Java SE, to bind entries in the global namespaces (the standard +java:comp, java:module and java:app namespaces are read-only, as +mandated by the Jakarta EE Platform Specification).

+
+
+
+
  InitialContext initialContext = new InitialContext();
+  initialContext.bind("java:global/a", 100);
+
+
+
+ + + + + +
+ + +There is no need to unbind entries created programmatically, since +WildFly tracks which bindings belong to a deployment, and the bindings +are automatically removed when the deployment is undeployed. +
+
+
+
+
WildFly Modules and Extensions
+
+

With respect to code in WildFly Modules/Extensions, which is executed +out of a Jakarta EE application context, using the standard JNDI API may +result in a UnsupportedOperationException if the target namespace uses a +WritableServiceBasedNamingStore. To work around that, the bind() +invocation needs to be wrapped using WildFly proprietary APIs:

+
+
+
+
  InitialContext initialContext = new InitialContext();
+  WritableServiceBasedNamingStore.pushOwner(serviceTarget);
+  try {
+    initialContext.bind("java:global/a", 100);
+  } finally {
+    WritableServiceBasedNamingStore.popOwner();
+  }
+
+
+
+ + + + + +
+ + +The ServiceTarget removes the bind when uninstalled, thus using one out +of the module/extension domain usage should be avoided, unless entries +are removed using unbind(). +
+
+
+
+
+

13.1.3. Naming Subsystem Configuration

+
+

It is also possible to bind to one of the three global namespaces using +configuration in the naming subsystem. This can be done by either +editing the standalone.xml/domain.xml file directly, or through the +management API.

+
+
+

Four different types of bindings are supported:

+
+
+
    +
  • +

    Simple - A primitive or java.net.URL entry (default is +java.lang.String).

    +
  • +
  • +

    Object Factory - This allows to specify the +javax.naming.spi.ObjectFactory that is used to create the looked up +value.

    +
  • +
  • +

    External Context - An external context to federate, such as an LDAP +Directory Service

    +
  • +
  • +

    Lookup - The allows to create JNDI aliases, when this entry is looked +up it will lookup the target and return the result.

    +
  • +
+
+
+

An example standalone.xml might look like:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:naming:2.0" >
+  <bindings>
+    <simple name="java:global/a" value="100" type="int" />
+    <simple name="java:global/jbossDocs" value="https://docs.jboss.org" type="java.net.URL" /><object-factory name="java:global/b" module="com.acme" class="org.acme.MyObjectFactory" />
+    <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
+      <environment>
+        <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
+        <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
+        <property name="java.naming.security.authentication" value="simple" />
+        <property name="java.naming.security.principal" value="uid=admin,ou=system" />
+        <property name="java.naming.security.credentials" value="secret" />
+      </environment>
+    </external-context>
+    <lookup name="java:global/c" lookup="java:global/b" />
+ </bindings>
+</subsystem>
+
+
+
+

The CLI may also be used to bind an entry. As an example:

+
+
+
+
/subsystem=naming/binding=java\:global\/mybinding:add(binding-type=simple, type=long, value=1000)
+
+
+
+ + + + + +
+ + +WildFly’s Administrator Guide includes a section describing in detail +the Naming subsystem configuration. +
+
+
+
+
+

13.2. Retrieving entries from JNDI

+
+

13.2.1. Resource Injection

+
+

For Jakarta EE applications the recommended way to lookup a JNDI entry is +to use @Resource injection:

+
+
+
+
  @Resource(lookup = "java:global/mystring")
+  private String myString;
+ 
+  @Resource(name = "hello")
+  private String hello;
+ 
+  @Resource
+  ManagedExecutorService executor;
+
+
+
+

Note that @Resource is more than a JNDI lookup, it also binds an entry +in the component’s JNDI environment. The new bind JNDI name is defined +by @Resource’s `name attribute, which value, if unspecified, is the +Java type concatenated with / and the field’s name, for instance +java.lang.String/myString. More, similar to when using deployment +descriptors to bind JNDI entries. unless the name is an absolute JNDI +name, it is considered relative to java:comp/env. For instance, with +respect to the field named myString above, the @Resource’s `lookup +attribute instructs WildFly to lookup the value in +java:global/mystring, bind it in +java:comp/env/java.lang.String/myString, and then inject such value +into the field.

+
+
+

With respect to the field named hello, there is no lookup attribute +value defined, so the responsibility to provide the entry’s value is +delegated to the deployment descriptor. Considering that the deployment +descriptor was the web.xml previously shown, which defines an +environment entry with same hello name, then WildFly inject the valued +defined in the deployment descriptor into the field.

+
+
+

The executor field has no attributes specified, so the bind’s name +would default to +java:comp/env/jakarta.enterprise.concurrent.ManagedExecutorService/executor, +but there is no such entry in the deployment descriptor, and when that +happens it’s up to WildFly to provide a default value or null, depending +on the field’s Java type. In this particular case WildFly would inject +the default instance of a managed executor service, the value in +java:comp/DefaultManagedExecutorService, as mandated by the EE +Concurrency Utilities 1.0 Specification (JSR 236).

+
+
+
+

13.2.2. Standard Java SE JNDI API

+
+

Jakarta EE applications may use, without any additional configuration +needed, the standard JNDI API to lookup an entry from JNDI:

+
+
+
+
  String myString = (String) new InitialContext().lookup("java:global/mystring");
+
+
+
+

or simply

+
+
+
+
  String myString = InitialContext.doLookup("java:global/mystring");
+
+
+
+
+
+
+
+

14. Remote JNDI Access

+
+
+

WildFly supports two different types of remote JNDI.

+
+
+

14.1. http-remoting:

+
+

The http-remoting: protocol implementation is provided by JBoss Remote +Naming project, and uses http upgrade to lookup items from the servers +local JNDI. To use it, you must have the appropriate jars on the class +path, if you are maven user can be done simply by adding the following +to your pom.xml dependencies:

+
+
+
+
<dependency>
+  <groupId>org.wildfly</groupId>
+  <artifactId>wildfly-ejb-client-bom</artifactId>
+  <version>11.0.0.Final</version>
+  <type>pom</type>
+</dependency>
+
+
+
+

If you are not using maven a shaded jar that contains all required +classes
+can be found in the bin/client directory of WildFly’s distribution.

+
+
+
+
final Properties env = new Properties();
+env.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
+env.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
+// the property below is required ONLY if there is no ejb client configuration loaded (such as a
+// jboss-ejb-client.properties in the class path) and the context will be used to lookup EJBs
+env.put("jboss.naming.client.ejb.context", true);
+InitialContext remoteContext = new InitialContext(env);
+RemoteCalculator ejb = (RemoteCalculator) remoteContext.lookup("wildfly-http-remoting-ejb/CalculatorBean!"
+                + RemoteCalculator.class.getName());
+
+
+
+ + + + + +
+ + +The http-remoting client assumes JNDI names in remote lookups are +relative to java:jboss/exported namespace, a lookup of an absolute JNDI +name will fail. +
+
+
+
+

14.2. ejb:

+
+

The ejb: namespace implementation is provided by the jboss-ejb-client +library, and allows the lookup of EJB’s using their application name, +module name, ejb name and interface type. To use it, you must have the +appropriate jars on the class path, if you are maven user can be done +simply by adding the following to your pom.xml dependencies:

+
+
+
+
<dependency>
+  <groupId>org.wildfly</groupId>
+  <artifactId>wildfly-ejb-client-bom</artifactId>
+  <version>11.0.0.Final</version>
+  <type>pom</type>
+</dependency>
+
+
+
+

If you are not using maven a shaded jar that contains all required +classes
+can be found in the bin/client directory of WildFly’s distribution.

+
+
+

This is a client side JNDI implementation. Instead of looking up an EJB +on the server the lookup name contains enough information for the client +side library to generate a proxy with the EJB information. When you +invoke a method on this proxy it will use the current EJB client context +to perform the invocation. If the current context does not have a +connection to a server with the specified EJB deployed then an error +will occur. Using this protocol it is possible to look up EJB’s that do +not actually exist, and no error will be thrown until the proxy is +actually used. The exception to this is stateful session beans, which +need to connect to a server when they are created in order to create the +session bean instance on the server.

+
+
+
+
final Properties env = new Properties();
+env.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
+InitialContext remoteContext = new InitialContext(env);
+MyRemoteInterface myRemote = (MyRemoteInterface) remoteContext.lookup("ejb:myapp/myejbjar/MyEjbName\!com.test.MyRemoteInterface");
+MyStatefulRemoteInterface myStatefulRemote = (MyStatefulRemoteInterface) remoteContext.lookup("ejb:myapp/myejbjar/MyStatefulName\!comp.test.MyStatefulRemoteInterface?stateful");
+
+
+
+

The first example is a lookup of a singleton, stateless or EJB 2.x home +interface. This lookup will not hit the server, instead a proxy will be +generated for the remote interface specified in the name. The second +example is for a stateful session bean, in this case the JNDI lookup +will hit the server, in order to tell the server to create the SFSB +session.

+
+
+ + + + + +
+ + +For more details on how the server connections are configured, including +the required jboss ejb client setup, please see +EJB invocations from a remote client using JNDI. +
+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+

15. Jakarta RESTful Web Services Reference Guide

+
+
+

RESTEasy is the Jakarta RESTful Web Services implementation used in WildFly Full. For detailed documentation see the +RESTEasy 6.2.4.Final documentation.

+
+
+

15.1. Jakarta RESTful Web Services Activation

+
+

This section outlines the three options you have for deploying Jakarta RESTful Web Services +applications in WildFly 29. These three methods are specified in the +Jakarta RESTful Web Services 3.1 specification in section 2.3.2.

+
+
+

15.1.1. Subclassing jakarta.ws.rs.core.Application and using @ApplicationPath

+
+

This is the easiest way and does not require any xml configuration. +Simply include a subclass of jakarta.ws.rs.core.Application in your +application, and annotate it with the path that you want your JAX-RS +classes to be available. For example:

+
+
+
+
@ApplicationPath("/mypath")
+public class MyApplication extends Application {
+}
+
+
+
+

This will make your Jakarta RESTful Web Services resources available under / +mywebappcontext /mypath.

+
+
+ + + + + +
+ + +Note that that the path is /mypath not /mypath/* +
+
+
+
+

15.1.2. Subclassing jakarta.ws.rs.core.Application and using web.xml

+
+

If you do not wish to use @ApplicationPath but still need to subclass +Application you can set up the Jakarta RESTful Web Services mapping in web.xml:

+
+
+
+
public class MyApplication extends Application {
+}
+
+
+
+
+
<servlet-mapping>
+   <servlet-name>com.acme.MyApplication</servlet-name>
+   <url-pattern>/hello/*</url-pattern>
+</servlet-mapping>
+
+
+
+

This will make your Jakarta RESTful Web Services resources available under / +mywebappcontext /hello.

+
+
+ + + + + +
+ + +You can also use this approach to override an application path set with +the @ApplicationPath annotation. +
+
+
+
+

15.1.3. Using web.xml

+
+

If you don’t wan’t to subclass Application you can set the Jakarta RESTful Web Services +mapping in web.xml as follows:

+
+
+
+
<servlet-mapping>
+   <servlet-name>jakarta.ws.rs.core.Application</servlet-name>
+   <url-pattern>/hello/*</url-pattern>
+</servlet-mapping>
+
+
+
+

This will make your Jakarta RESTful Web Services resources available under / +mywebappcontext /hello.

+
+
+ + + + + +
+ + +Note that you only have to add the mapping, not the corresponding +servlet. The server is responsible for adding the corresponding servlet +automatically. +
+
+
+
+
+

15.2. Using Jackson for serialization

+
+

By default, for JSON processing the Jakarta JSON Processing API is used. However, you can use Jackson instead. This can +be achieved by setting the resteasy.preferJacksonOverJsonB property as a system property or as a +context property in the deployment’s web.xml. There is also a subsystem attribute, resteasy-prefer-jackson-over-jsonb, +which can be set to true. Finally, if no value is set for the context and system properties, the subsystem scans Jakarta +RESTful Web Services deployments for Jackson annotations and sets the property to true if any of those annotations are +found.

+
+
+

15.2.1. Custom ObjectMapper

+
+

In some cases you may want to or need to create a custom ObjectMapper. This can be achieved by creating a +jakarta.ws.rs.ext.ContextResolver which creates the ObjectMapper. The following example creates an ObjectMapper +which allows JSR-310 date/times.

+
+
+
+
import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.ext.ContextResolver;
+import jakarta.ws.rs.ext.Provider;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.json.JsonMapper;
+
+@Provider
+@Produces(MediaType.APPLICATION_JSON)
+public class JacksonDatatypeJacksonProducer implements ContextResolver<ObjectMapper> {
+
+    private final ObjectMapper json;
+
+    public JacksonDatatypeJacksonProducer() {
+        this.json = JsonMapper.builder()
+                .findAndAddModules()
+                .build();
+    }
+
+    @Override
+    public ObjectMapper getContext(Class<?> objectType) {
+        return json;
+    }
+}
+
+
+
+

As of WildFly 27 and RESTEasy 6.2 to get the Jakarta XML Binding annotations to work with Jackson for JSON serialization +you need to use a custom ObjectMapper. An example of this ObjectMapper would look like:

+
+
+
+
import jakarta.ws.rs.ext.ContextResolver;
+import jakarta.ws.rs.ext.Provider;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.json.JsonMapper;
+import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;
+
+@Provider
+public class JaxbJsonObjectMapperProvider implements ContextResolver<ObjectMapper> {
+    private static final JsonMapper MAPPER = JsonMapper.builder()
+            .addModule(new JakartaXmlBindAnnotationModule())
+            .build();
+
+    @Override
+    public ObjectMapper getContext(final Class<?> type) {
+        return MAPPER;
+    }
+}
+
+
+
+
+
+

15.3. Using the Tracing Feature

+
+

The tracing feature provides more internal states of the Jakarta RESTful Web Services container. For example, it could +be able to show what filters a request is going through, or how long time a request is processed and other kinds of information.

+
+
+

The tracing feature can be enabled by setting the tracing-type attribute to ALL or ON_DEMAND. You can also control +the threshold with the tracing-threshold attribute. The following is an example of enabling tracing using CLI:

+
+
+
+
/subsystem=jaxrs:write-attribute(name=tracing-type, value=ALL)
+:reload
+
+
+
+

You can also configure the tracing feature with the context parameters resteasy.server.tracing.type and +resteasy.server.tracing.threshold in your deployments web.xml file.

+
+
+ + + + + +
+ + +The tracing feature should not be used in production environments. Data can be exposed to clients via HTTP headers. +
+
+
+
+

15.4. RESTEasy Spring Framework Integration

+
+

WildFly generally includes support for Jakarta Context and Dependency Injection (CDI). The Spring Framework, however, +does not support CDI. You may need to exclude some subsystems and modules for Spring applications to work with Jakarta +RESTful Web Services.

+
+
+

The following is an example jboss-deployment-structure.xml that may be needed.

+
+
+
+
<?xml version="1.0"?>
+<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"
+                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <deployment>
+        <exclusions>
+            <module name="org.jboss.resteasy.resteasy-cdi"/>
+        </exclusions>
+    </deployment>
+</jboss-deployment-structure>
+
+
+
+

The org.jboss.resteasy.resteasy-cdi module adds CDI support for the RESTEasy implementation. Excluding this +should allow Spring deployments to work.

+
+
+ + + + + +
+ + +References in this document to Java API for RESTful Web Services (JAX-RS) refer to Jakarta RESTful Web Services unless otherwise noted. +
+
+
+
+
+
+

16. Sharing sessions between wars in an ear

+
+
+

Undertow allows you to share sessions between wars in an ear, if it is +explicitly configured to do so. Note that if you use this feature your +applications may not be portable, as this is not a standard servlet +feature.

+
+
+

In order to enable this you must include a shared-session-config +element in the jboss-all.xml file in the META-INF directory of the +ear:

+
+
+
+
<jboss xmlns="urn:jboss:1.0">
+    <shared-session-config xmlns="urn:jboss:shared-session-config:2.0">
+        <session-config>
+            <cookie-config>
+                <path>/</path>
+            </cookie-config>
+        </session-config>
+    </shared-session-config>
+</jboss>
+
+
+
+

This element is used to configure the shared session manager that will +be used by all wars in the ear. For full details of all the options +provided by this file please see the schema at +https://github.com/wildfly/wildfly/blob/main/undertow/src/main/resources/schema/shared-session-config_2_0.xsd, +however in general it mimics the options that are available in +jboss-web.xml for configuring the session.

+
+
+
+
+

17. Webservices reference guide

+
+
+

The Web Services functionalities of WildFly are provided by the JBossWS +project integration.

+
+
+

The latest project documentation is available +here.

+
+
+

This section covers the most relevant topics for the JBossWS version +available on WildFly 29.

+
+
+

17.1. Jakarta XML Web Services User Guide

+
+

The Java API for XML-Based Web +Services (JAX-WS / JSR-224) defines the mapping between WSDL and Java +as well as the classes to be used for accessing webservices and +publishing them. JBossWS implements the latest JAX-WS specification, +hence users can reference it for any vendor agnostic webservice usage +need. Below is a brief overview of the most basic functionalities.

+
+
+

17.1.1. Web Service Endpoints

+
+

Jakarta XML Web Services simplifies the development model for a web service endpoint a +great deal. In short, an endpoint implementation bean is annotated with +Jakarta XML Web Services annotations and deployed to the server. The server automatically +generates and publishes the abstract contract (i.e. wsdl+schema) for +client consumption. All marshalling/unmarshalling is delegated to +JAXB.

+
+
+
Plain old Java Object (POJO)
+
+

Let’s take a look at simple POJO endpoint implementation. All endpoint +associated metadata is provided via +JSR-181 annotations

+
+
+
+
@WebService
+@SOAPBinding(style = SOAPBinding.Style.RPC)
+public class JSEBean01
+{
+   @WebMethod
+   public String echo(String input)
+   {
+      ...
+   }
+}
+
+
+
+
The endpoint as a web application
+
+

A Jakarta XML Web Services java service endpoint (JSE) is deployed as a web application. +Here is a sample web.xml descriptor:

+
+
+
+
<web-app ...>
+  <servlet>
+    <servlet-name>TestService</servlet-name>
+    <servlet-class>org.jboss.test.ws.jaxws.samples.jsr181pojo.JSEBean01</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>TestService</servlet-name>
+    <url-pattern>/*</url-pattern>
+  </servlet-mapping>
+</web-app>
+
+
+
+
+
Packaging the endpoint
+
+

A JSR-181 java service endpoint (JSE) is packaged as a web application +in a war file.

+
+
+
+
<war warfile="${build.dir}/libs/jbossws-samples-jsr181pojo.war" webxml="${build.resources.dir}/samples/jsr181pojo/WEB-INF/web.xml">
+  <classes dir="${build.dir}/classes">
+    <include name="org/jboss/test/ws/samples/jsr181pojo/JSEBean01.class"/>
+  </classes>
+</war>
+
+
+
+

Note, only the endpoint implementation bean and web.xml are required.

+
+
+
+
Accessing the generated WSDL
+
+

A successfully deployed service endpoint will show up in the WildFly +managent console. You can get the deployed endpoint wsdl address there +too.

+
+
+ + + + + +
+ + +Note, it is also possible to generate the abstract contract off line +using JBossWS tools. For details of that please see Bottom-Up (Java to +WSDL). +
+
+
+
+
+
Jakarta Enterprise Beans 3 Stateless Session Bean (SLSB)
+
+

The Jakarta XML Web Services programming model supports the same set of annotations on +Jakarta Enterprise Beans 3 stateless session beans as on POJO endpoints.

+
+
+
+
@Stateless
+@Remote(EJB3RemoteInterface.class)
+@RemoteBinding(jndiBinding = "/ejb3/EJB3EndpointInterface")
+
+@WebService
+@SOAPBinding(style = SOAPBinding.Style.RPC)
+public class EJB3Bean01 implements EJB3RemoteInterface
+{
+   @WebMethod
+   public String echo(String input)
+   {
+      ...
+   }
+}
+
+
+
+

Above you see an Enterprise Beans-3.0 stateless session bean that exposes one method +both on the remote interface and as an endpoint operation.

+
+
+
Packaging the endpoint
+
+

A JSR-181 Jakarta Enterprise Beans service endpoint is packaged as an ordinary ejb +deployment.

+
+
+
+
<jar jarfile="${build.dir}/libs/jbossws-samples-jsr181ejb.jar">
+  <fileset dir="${build.dir}/classes">
+    <include name="org/jboss/test/ws/samples/jsr181ejb/EJB3Bean01.class"/>
+    <include name="org/jboss/test/ws/samples/jsr181ejb/EJB3RemoteInterface.class"/>
+  </fileset>
+</jar>
+
+
+
+
+
Accessing the generated WSDL
+
+

A successfully deployed service endpoint will show up in the WildFly +managent console. You can get the deployed endpoint wsdl address there +too.

+
+
+ + + + + +
+ + +Note, it is also possible to generate the abstract contract off line +using JBossWS tools. For details of that please see Bottom-Up (Java to +WSDL). +
+
+
+
+
+
Endpoint Provider
+
+

Jakarta XML Web Services services typically implement a native Java service endpoint +interface (SEI), perhaps mapped from a WSDL port type, either directly +or via the use of annotations.

+
+
+

Java SEIs provide a high level Java-centric abstraction that hides the +details of converting between Java objects and their XML representations +for use in XML-based messages. However, in some cases it is desirable +for services to be able to operate at the XML message level. The +Provider interface offers an alternative to SEIs and may be implemented +by services wishing to work at the XML message level.

+
+
+

A Provider based service instances invoke method is called for each +message received for the service.

+
+
+
+
@WebServiceProvider(wsdlLocation = "WEB-INF/wsdl/Provider.wsdl")
+@ServiceMode(value = Service.Mode.PAYLOAD)
+public class ProviderBeanPayload implements Provider<Source>
+{
+   public Source invoke(Source req)
+   {
+      // Access the entire request PAYLOAD and return the response PAYLOAD
+   }
+}
+
+
+
+

Note, Service.Mode.PAYLOAD is the default and does not have to be +declared explicitly. You can also use Service.Mode.MESSAGE to access +the entire SOAP message (i.e. with MESSAGE the Provider can also see +SOAP Headers)

+
+
+

The abstract contract for a provider endpoint cannot be +derived/generated automatically. Therefore it is necessary to specify +the wsdlLocation with the @ WebServiceProvider annotation.

+
+
+
+
+

17.1.2. Web Service Clients

+
+
Service
+
+

Service is an abstraction that represents a WSDL service. A WSDL +service is a collection of related ports, each of which consists of a +port type bound to a particular protocol and available at a particular +endpoint address.

+
+
+

For most clients, you will start with a set of stubs generated from the +WSDL. One of these will be the service, and you will create objects of +that class in order to work with the service (see "static case" below).

+
+
+
Service Usage
+
+Static case +
+

Most clients will start with a WSDL file, and generate some stubs using +JBossWS tools like wsconsume. This usually gives a mass of files, one +of which is the top of the tree. This is the service implementation +class.

+
+
+

The generated implementation class can be recognised as it will have two +public constructors, one with no arguments and one with two arguments, +representing the wsdl location (a java.net.URL) and the service name +(a javax.xml.namespace.QName) respectively.

+
+
+

Usually you will use the no-argument constructor. In this case the WSDL +location and service name are those found in the WSDL. These are set +implicitly from the @WebServiceClient annotation that decorates the +generated class.

+
+
+

The following code snippet shows the generated constructors from the +generated class:

+
+
+
+
// Generated Service Class
+
+@WebServiceClient(name="StockQuoteService", targetNamespace="http://example.com/stocks", wsdlLocation="http://example.com/stocks.wsdl")
+public class StockQuoteService extends jakarta.xml.ws.Service
+{
+   public StockQuoteService()
+   {
+      super(new URL("http://example.com/stocks.wsdl"), new QName("http://example.com/stocks", "StockQuoteService"));
+   }
+
+   public StockQuoteService(String wsdlLocation, QName serviceName)
+   {
+      super(wsdlLocation, serviceName);
+   }
+
+   ...
+}
+
+
+
+

Section Dynamic Proxy explains how to obtain a port from the service and +how to invoke an operation on the port. If you need to work with the XML +payload directly or with the XML representation of the entire SOAP +message, have a look at Dispatch.

+
+
+
+Dynamic case +
+

In the dynamic case, when nothing is generated, a web service client +uses Service.create to create Service instances, the following code +illustrates this process.

+
+
+
+
URL wsdlLocation = new URL("http://example.org/my.wsdl");
+QName serviceName = new QName("http://example.org/sample", "MyService");
+Service service = Service.create(wsdlLocation, serviceName);
+
+
+
+
+
+
Handler Resolver
+
+

Jakarta XML Web Services provides a flexible plug-in framework for message processing +modules, known as handlers, that may be used to extend the capabilities +of a Jakarta XML Web Services runtime system. Handler Framework describes the handler +framework in detail. A Service instance provides access to a +HandlerResolver via a pair of getHandlerResolver / +setHandlerResolver methods that may be used to configure a set of +handlers on a per-service, per-port or per-protocol binding basis.

+
+
+

When a Service instance is used to create a proxy or a Dispatch instance +then the handler resolver currently registered with the service is used +to create the required handler chain. Subsequent changes to the handler +resolver configured for a Service instance do not affect the handlers on +previously created proxies, or Dispatch instances.

+
+
+
+
Executor
+
+

Service instances can be configured with a +java.util.concurrent.Executor. The executor will then be used to +invoke any asynchronous callbacks requested by the application. The +setExecutor and getExecutor methods of Service can be used to +modify and retrieve the executor configured for a service.

+
+
+
+
+
Dynamic Proxy
+
+

You can create an instance of a client proxy using one of getPort +methods on the Service.

+
+
+
+
/**
+ * The getPort method returns a proxy. A service client
+ * uses this proxy to invoke operations on the target
+ * service endpoint. The <code>serviceEndpointInterface</code>
+ * specifies the service endpoint interface that is supported by
+ * the created dynamic proxy instance.
+ **/
+public <T> T getPort(QName portName, Class<T> serviceEndpointInterface)
+{
+   ...
+}
+
+/**
+ * The getPort method returns a proxy. The parameter
+ * <code>serviceEndpointInterface</code> specifies the service
+ * endpoint interface that is supported by the returned proxy.
+ * In the implementation of this method, the Jakarta XML Web Services
+ * runtime system takes the responsibility of selecting a protocol
+ * binding (and a port) and configuring the proxy accordingly.
+ * The returned proxy should not be reconfigured by the client.
+ *
+ **/
+public <T> T getPort(Class<T> serviceEndpointInterface)
+{
+   ...
+}
+
+
+
+

The service endpoint interface (SEI) is usually generated using tools. +For details see Top Down (WSDL to Java)

+
+
+

A generated static Service usually also offers typed methods to get +ports. These methods also return dynamic proxies that implement the SEI.

+
+
+
+
@WebServiceClient(name = "TestEndpointService", targetNamespace = "http://org.jboss.ws/wsref",
+   wsdlLocation = "http://localhost.localdomain:8080/jaxws-samples-webserviceref?wsdl")
+
+public class TestEndpointService extends Service
+{
+    ...
+
+    public TestEndpointService(URL wsdlLocation, QName serviceName) {
+        super(wsdlLocation, serviceName);
+    }
+
+    @WebEndpoint(name = "TestEndpointPort")
+    public TestEndpoint getTestEndpointPort()
+    {
+        return (TestEndpoint)super.getPort(TESTENDPOINTPORT, TestEndpoint.class);
+    }
+}
+
+
+
+
+
WebServiceRef
+
+

The @WebServiceRef annotation is used to declare a reference to a Web +service. It follows the resource pattern exemplified by the +jakarta.annotation.Resource annotation in +JSR-250.

+
+
+

There are two uses to the WebServiceRef annotation:

+
+
+
    +
  1. +

    To define a reference whose type is a generated service class. In +this case, the type and value element will both refer to the generated +service class type. Moreover, if the reference type can be inferred by +the field/method declaration the annotation is applied to, the type and +value elements MAY have the default value (Object.class, that is). If +the type cannot be inferred, then at least the type element MUST be +present with a non-default value.

    +
  2. +
  3. +

    To define a reference whose type is a SEI. In this case, the type +element MAY be present with its default value if the type of the +reference can be inferred from the annotated field/method declaration, +but the value element MUST always be present and refer to a generated +service class type (a subtype of jakarta.xml.ws.Service). The wsdlLocation +element, if present, overrides theWSDL location information specified in +the WebService annotation of the referenced generated service class.

    +
    +
    +
    public class EJB3Client implements EJB3Remote
    +{
    +   @WebServiceRef
    +   public TestEndpointService service4;
    +
    +   @WebServiceRef
    +   public TestEndpoint port3;
    +
    +
    +
  4. +
+
+
+
+
Dispatch
+
+

XMLWeb Services use XML messages for communication between services and +service clients. The higher level Jakarta XML Web Services APIs are designed to hide the +details of converting between Java method invocations and the +corresponding XML messages, but in some cases operating at the XML +message level is desirable. The Dispatch interface provides support for +this mode of interaction.

+
+
+

Dispatch supports two usage modes, identified by the constants +jakarta.xml.ws.Service.Mode.MESSAGE and +jakarta.xml.ws.Service.Mode.PAYLOAD respectively:

+
+
+

Message In this mode, client applications work directly with +protocol-specific message structures. E.g., when used with a SOAP +protocol binding, a client application would work directly with a SOAP +message.

+
+
+

Message Payload In this mode, client applications work with the +payload of messages rather than the messages themselves. E.g., when used +with a SOAP protocol binding, a client application would work with the +contents of the SOAP Body rather than the SOAP message as a whole.

+
+
+

Dispatch is a low level API that requires clients to construct messages +or message payloads as XML and requires an intimate knowledge of the +desired message or payload structure. Dispatch is a generic class that +supports input and output of messages or message payloads of any type.

+
+
+
+
Service service = Service.create(wsdlURL, serviceName);
+Dispatch dispatch = service.createDispatch(portName, StreamSource.class, Mode.PAYLOAD);
+
+String payload = "<ns1:ping xmlns:ns1='http://oneway.samples.jaxws.ws.test.jboss.org/'/>";
+dispatch.invokeOneWay(new StreamSource(new StringReader(payload)));
+
+payload = "<ns1:feedback xmlns:ns1='http://oneway.samples.jaxws.ws.test.jboss.org/'/>";
+Source retObj = (Source)dispatch.invoke(new StreamSource(new StringReader(payload)));
+
+
+
+
+
Asynchronous Invocations
+
+

The BindingProvider interface represents a component that provides a +protocol binding for use by clients, it is implemented by proxies and is +extended by the Dispatch interface.

+
+
+

BindingProvider instances may provide asynchronous operation +capabilities. When used, asynchronous operation invocations are +decoupled from the BindingProvider instance at invocation time such +that the response context is not updated when the operation completes. +Instead a separate response context is made available using the +Response interface.

+
+
+
+
public void testInvokeAsync() throws Exception
+{
+   URL wsdlURL = new URL("http://" + getServerHost() + ":8080/jaxws-samples-asynchronous?wsdl");
+   QName serviceName = new QName(targetNS, "TestEndpointService");
+   Service service = Service.create(wsdlURL, serviceName);
+   TestEndpoint port = service.getPort(TestEndpoint.class);
+   Response response = port.echoAsync("Async");
+   // access future
+   String retStr = (String) response.get();
+   assertEquals("Async", retStr);
+}
+
+
+
+
+
Oneway Invocations
+
+

@Oneway indicates that the given web method has only an input message +and no output. Typically, a oneway method returns the thread of control +to the calling application prior to executing the actual business +method.

+
+
+
+
@WebService (name="PingEndpoint")
+@SOAPBinding(style = SOAPBinding.Style.RPC)
+public class PingEndpointImpl
+{
+   private static String feedback;
+
+   @WebMethod
+   @Oneway
+   publicvoid ping()
+   {
+      log.info("ping");
+      feedback = "ok";
+   }
+
+   @WebMethod
+   public String feedback()
+   {
+      log.info("feedback");
+      return feedback;
+   }
+}
+
+
+
+
+
Timeout Configuration
+
+

There are two properties to configure the http connection timeout and +client receive time out:

+
+
+
+
public void testConfigureTimeout() throws Exception
+{
+   //Set timeout until a connection is established
+   ((BindingProvider)port).getRequestContext().put("jakarta.xml.ws.client.connectionTimeout", "6000");
+
+   //Set timeout until the response is received
+   ((BindingProvider) port).getRequestContext().put("jakarta.xml.ws.client.receiveTimeout", "1000");
+
+   port.echo("testTimeout");
+}
+
+
+
+
+
+

17.1.3. Common API

+
+

This sections describes concepts that apply equally to Web Service +Endpoints and Web Service Clients.

+
+
+
Handler Framework
+
+

The handler framework is implemented by a Jakarta XML Web Services protocol binding in +both client and server side runtimes. Proxies, and Dispatch instances, +known collectively as binding providers, each use protocol bindings to +bind their abstract functionality to specific protocols.

+
+
+

Client and server-side handlers are organized into an ordered list known +as a handler chain. The handlers within a handler chain are invoked each +time a message is sent or received. Inbound messages are processed by +handlers prior to binding provider processing. Outbound messages are +processed by handlers after any binding provider processing.

+
+
+

Handlers are invoked with a message context that provides methods to +access and modify inbound and outbound messages and to manage a set of +properties. Message context properties may be used to facilitate +communication between individual handlers and between handlers and +client and service implementations. Different types of handlers are +invoked with different types of message context.

+
+
+
Logical Handler
+
+

Handlers that only operate on message context properties and message +payloads. Logical handlers are protocol agnostic and are unable to +affect protocol specific parts of a message. Logical handlers are +handlers that implement jakarta.xml.ws.handler.LogicalHandler.

+
+
+
+
Protocol Handler
+
+

Handlers that operate on message context properties and protocol +specific messages. Protocol handlers are specific to a particular +protocol and may access and change protocol specific aspects of a +message. Protocol handlers are handlers that implement any interface +derived from jakarta.xml.ws.handler.Handler except +jakarta.xml.ws.handler.LogicalHandler.

+
+
+
+
Service endpoint handlers
+
+

On the service endpoint, handlers are defined using the @HandlerChain +annotation.

+
+
+
+
@WebService
+@HandlerChain(file = "jaxws-server-source-handlers.xml")
+public class SOAPEndpointSourceImpl
+{
+   ...
+}
+
+
+
+

The location of the handler chain file supports 2 formats

+
+
+

\1. An absolute java.net.URL in externalForm. (ex: +http://myhandlers.foo.com/handlerfile1.xml)

+
+
+

\2. A relative path from the source file or class file. (ex: +bar/handlerfile1.xml)

+
+
+
+
Service client handlers
+
+

On the client side, handler can be configured using the @HandlerChain +annotation on the SEI or dynamically using the API.

+
+
+
+
Service service = Service.create(wsdlURL, serviceName);
+Endpoint port = (Endpoint)service.getPort(Endpoint.class);
+
+BindingProvider bindingProvider = (BindingProvider)port;
+List<Handler> handlerChain = new ArrayList<Handler>();
+handlerChain.add(new LogHandler());
+handlerChain.add(new AuthorizationHandler());
+handlerChain.add(new RoutingHandler());
+bindingProvider.getBinding().setHandlerChain(handlerChain); // important!
+
+
+
+
+
+
Message Context
+
+

MessageContext is the super interface for all Jakarta XML Web Services message contexts. +It extends Map<String,Object> with additional methods and constants to +manage a set of properties that enable handlers in a handler chain to +share processing related state. For example, a handler may use the put +method to insert a property in the message context that one or more +other handlers in the handler chain may subsequently obtain via the get +method.

+
+
+

Properties are scoped as either APPLICATION or HANDLER. All properties +are available to all handlers for an instance of an MEP on a particular +endpoint. E.g., if a logical handler puts a property in the message +context, that property will also be available to any protocol handlers +in the chain during the execution of an MEP instance. APPLICATION scoped +properties are also made available to client applications (see section +4.2.1) and service endpoint implementations. The defaultscope for a +property is HANDLER.

+
+
+
Logical Message Context
+
+

Logical Handlers are passed a message context of type +LogicalMessageContext when invoked. LogicalMessageContext extends +MessageContext with methods to obtain and modify the message payload, +it does not provide access to the protocol specific aspects of amessage. +A protocol binding defines what component of a message are available via +a logical message context. The SOAP binding defines that a logical +handler deployed in a SOAP binding can access the contents of the SOAP +body but not the SOAP headers whereas the XML/HTTP binding defines that +a logical handler can access the entire XML payload of a message.

+
+
+
+
SOAP Message Context
+
+

SOAP handlers are passed a SOAPMessageContext when invoked. +SOAPMessageContext extends MessageContext with methods to obtain and +modify the SOAP message payload.

+
+
+
+
+
Fault Handling
+
+

An implementation may thow a SOAPFaultException

+
+
+
+
public void throwSoapFaultException()
+{
+   SOAPFactory factory = SOAPFactory.newInstance();
+   SOAPFault fault = factory.createFault("this is a fault string!", new QName("http://foo", "FooCode"));
+   fault.setFaultActor("mr.actor");
+   fault.addDetail().addChildElement("test");
+   thrownew SOAPFaultException(fault);
+}
+
+
+
+

or an application specific user exception

+
+
+
+
public void throwApplicationException() throws UserException
+{
+   thrownew UserException("validation", 123, "Some validation error");
+}
+
+
+
+ + + + + +
+ + +In case of the latter, JBossWS generates the required fault wrapper +beans at runtime if they are not part of the deployment +
+
+
+
+
+

17.1.4. Jakarta XML Web Services Annotations

+ +
+
jakarta.xml.ws.ServiceMode
+
+

The ServiceMode annotation is used to specify the mode for a provider +class, i.e. whether a provider wants to have access to protocol message +payloads (e.g. a SOAP body) or the entire protocol messages (e.g. a SOAP +envelope).

+
+
+
+
jakarta.xml.ws.WebFault
+
+

The WebFault annotation is used when mapping WSDL faults to Java +exceptions, see section 2.5. It is used to capture the name of the fault +element used when marshalling the Jakarta XML Binding type generated from the global +element referenced by the WSDL fault message. It can also be used to +customize the mapping of service specific exceptions to WSDL faults.

+
+
+
+
jakarta.xml.ws.RequestWrapper
+
+

The RequestWrapper annotation is applied to the methods of an SEI. It +is used to capture the Jakarta XML Binding generated request wrapper bean and the +element name and namespace for marshalling / unmarshalling the bean. The +default value of localName element is the operationName as defined in +WebMethod annotation and the default value for the targetNamespace +element is the target namespace of the SEI.When starting from Java, this +annotation is used to resolve overloading conflicts in document literal +mode. Only the className element is required in this case.

+
+
+
+
jakarta.xml.ws.ResponseWrapper
+
+

The ResponseWrapper annotation is applied to the methods of an SEI. It +is used to capture the Jakarta XML Binding generated response wrapper bean and the +element name and namespace for marshalling / unmarshalling the bean. The +default value of the localName element is the operationName as defined +in the WebMethod appended with "Response" and the default value of the +targetNamespace element is the target namespace of the SEI. When +starting from Java, this annotation is used to resolve overloading +conflicts in document literal mode. Only the className element is +required in this case.

+
+
+
+
jakarta.xml.ws.WebServiceClient
+
+

The WebServiceClient annotation is specified on a generated service +class (see 2.7). It is used to associate a class with a specific Web +service, identify by a URL to a WSDL document and the qualified name of +a wsdl:service element.

+
+
+
+
jakarta.xml.ws.WebEndpoint
+
+

The WebEndpoint annotation is specified on the getPortName() methods +of a generated service class (see 2.7). It is used to associate a get +method with a specific wsdl:port, identified by its local name (a +NCName).

+
+
+
+
jakarta.xml.ws.WebServiceProvider
+
+

The WebServiceProvider annotation is specified on classes that +implement a strongly typed jakarta.xml.ws.Provider. It is used to +declare that a class that satisfies the requirements for a provider (see +5.1) does indeed define a Web service endpoint, much like the +WebService annotation does for SEI-based endpoints.

+
+
+

The WebServiceProvider and WebService annotations are mutually +exclusive.

+
+
+
+
jakarta.xml.ws.BindingType
+
+

The BindingType annotation is applied to an endpoint implementation +class. It specifies the binding to use when publishing an endpoint of +this type.

+
+
+

The default binding for an endpoint is the SOAP 1.1/HTTP one.

+
+
+
+
jakarta.xml.ws.WebServiceRef
+
+

The WebServiceRef annotation is used to declare a reference to a Web +service. It follows the resource pattern exemplified by the +jakarta.annotation.Resource annotation in JSR-250 [JBWS:32]. The +WebServiceRef annotation is required to be honored when running on the +Jakarta EE platform, where it is subject to the common resource injection +rules described by the platform specification [JBWS:33].

+
+
+
+
jakarta.xml.ws.WebServiceRefs
+
+

The WebServiceRefs annotation is used to declare multiple references +to Web services on a single class. It is necessary to work around the +limition against specifying repeated annotations of the same type on any +given class, which prevents listing multiple jakarta.ws.WebServiceRef +annotations one after the other. This annotation follows the resource +pattern exemplified by the jakarta.annotation.Resources annotation in +JSR-250.

+
+
+

Since no name and type can be inferred in this case, each +WebServiceRef annotation inside a WebServiceRefs MUST contain name and +type elements with non-default values. The WebServiceRef annotation is +required to be honored when running on the Jakarta EE platform, where it +is subject to the common resource injection rules described by the +platform specification.

+
+
+
+
jakarta.xml.ws.Action
+
+

The Action annotation is applied to the methods of a SEI. It used to +generate the wsa:Action on wsdl:input and wsdl:output of each +wsdl:operation mapped from the annotated methods.

+
+
+
+
jakarta.xml.ws.FaultAction
+
+

The FaultAction annotation is used within the Action annotation to +generate the wsa:Action element on the wsdl:fault element of each +wsdl:operation mapped from the annotated methods.

+
+
+
+
+

17.1.5. JSR-181 Annotations

+
+

JSR-181 defines the syntax and semantics of Java Web Service (JWS) +metadata and default values.

+
+ +
+
jakarta.jws.WebService
+
+

Marks a Java class as implementing a Web Service, or a Java interface as +defining a Web Service interface.

+
+
+
+
jakarta.jws.WebMethod
+
+

Customizes a method that is exposed as a Web Service operation.

+
+
+
+
jakarta.jws.OneWay
+
+

Indicates that the given web method has only an input message and no +output. Typically, a oneway method returns the thread of control to the +calling application prior to executing the actual business method. A +JSR-181 processor is REQUIRED to report an error if an operation marked +@Oneway has a return value, declares any checked exceptions or has any +INOUT or OUT parameters.

+
+
+
+
jakarta.jws.WebParam
+
+

Customizes the mapping of an individual parameter to a Web Service +message part and XML element.

+
+
+
+
jakarta.jws.WebResult
+
+

Customizes the mapping of the return value to a WSDL part and XML +element.

+
+
+
+
jakarta.jws.SOAPBinding
+
+

Specifies the mapping of the Web Service onto the SOAP message protocol.

+
+
+

The SOAPBinding annotation has a target of TYPE and METHOD. The +annotation may be placed on a method if and only if the +SOAPBinding.style is DOCUMENT. Implementations MUST report an error +if the SOAPBinding annotation is placed on a method with a +SOAPBinding.style of RPC. Methods that do not have a SOAPBinding +annotation accept the SOAPBinding behavior defined on the type.

+
+
+
+
jakarta.jws.HandlerChain
+
+

The @HandlerChain annotation associates the Web Service with an +externally defined handler chain.

+
+
+

It is an error to combine this annotation with the +@SOAPMessageHandlers annotation.

+
+
+

The @HandlerChain annotation MAY be present on the endpoint interface +and service implementation bean. The service implementation bean’s +@HandlerChain is used if @HandlerChain is present on both.

+
+
+

The @HandlerChain annotation MAY be specified on the type only. The +annotation target includes METHOD and FIELD for use by Jakarta XML Web Services Specification-2.x.

+
+
+ + + + + +
+ + +References in this document to Java API for XML-Based Web Services (JAX-WS) refer to the Jakarta XML Web Services unless otherwise noted +
+
+
+
+
+
+

17.2. Jakarta XML Web Services Tools

+
+

The Jakarta XML Web Services tools provided by JBossWS can be used in a variety of ways. +First we will look at server-side development strategies, and then +proceed to the client.

+
+
+

17.2.1. Server side

+
+

When developing a Web Service Endpoint (the server-side) you have the +option of starting from Java ( bottom-up development), or from the +abstact contract (WSDL) that defines your service ( top-down +development). If this is a new service (no existing contract), the +bottom-up approach is the fastest route; you only need to add a few +annotations to your classes to get a service up and running. However, if +you are developing a service with an already defined contract, it is far +simpler to use the top-down approach, since the provided tool will +generate the annotated code for you.

+
+
+

Bottom-up use cases:

+
+
+
    +
  • +

    Exposing an already existing Jakarta Enterprise Beans 3 bean as a Web Service

    +
  • +
  • +

    Providing a new service, and you want the contract to be generated for +you

    +
  • +
+
+
+

Top-down use cases:

+
+
+
    +
  • +

    Replacing the implementation of an existing Web Service, and you can’t +break compatibility with older clients

    +
  • +
  • +

    Exposing a service that conforms to a contract specified by a third +party (e.g. a vender that calls you back using an already defined +protocol).

    +
  • +
  • +

    Creating a service that adheres to the XML Schema and WSDL you +developed by hand up front

    +
  • +
+
+
+

The following Jakarta XML Web Services command line tools are included in JBossWS:

+
+ ++++ + + + + + + + + + + + + + + + + +
CommandDescription

wsprovide

Generates Jakarta XML Web Services portable artifacts, and provides the +abstract contract. Used for bottom-up development.

wsconsume

Consumes the abstract contract (WSDL and Schema files), and +produces artifacts for both a server and client. Used for top-down and +client development

+
+
Bottom-Up (Using wsprovide)
+
+

The bottom-up strategy involves developing the Java code for your +service, and then annotating it using Jakarta XML Web Services annotations. These +annotations can be used to customize the contract that is generated for +your service. For example, you can change the operation name to map to +anything you like. However, all of the annotations have sensible +defaults, so only the @WebService annotation is required.

+
+
+

This can be as simple as creating a single class:

+
+
+
+
package echo;
+ 
+@jakarta.jws.WebService
+public class Echo
+{
+   public String echo(String input)
+   {
+      return input;
+   }
+}
+
+
+
+

A JSE or Jakarta Enterprise Beans 3 deployment can be built using this class, and it is the +only Java code needed to deploy on JBossWS. The WSDL, and all other Java +artifacts called "wrapper classes" will be generated for you at deploy +time. This actually goes beyond the Jakarta XML Web Services specification, which requires +that wrapper classes be generated using an offline tool. The reason for +this requirement is purely a vender implementation problem, and since we +do not believe in burdening a developer with a bunch of additional +steps, we generate these as well. However, if you want your deployment +to be portable to other application servers, you will unfortunately need +to use a tool and add the generated classes to your deployment.

+
+
+

This is the primary purpose of the wsprovide tool, to generate +portable Jakarta XML Web Services artifacts. Additionally, it can be used to "provide" the +abstract contract (WSDL file) for your service. This can be obtained by +invoking wsprovide using the "-w" option:

+
+
+
+
$ javac -d . -classpath jboss-jaxws.jar Echo.java
+$ wsprovide -w echo.Echo
+Generating WSDL:
+EchoService.wsdl
+Writing Classes:
+echo/jaxws/Echo.class
+echo/jaxws/EchoResponse.class
+
+
+
+

Inspecting the WSDL reveals a service called EchoService:

+
+
+
+
<service name='EchoService'>
+ <port binding='tns:EchoBinding' name='EchoPort'>
+  <soap:address location='REPLACE_WITH_ACTUAL_URL'/>
+ </port>
+</service>
+
+
+
+

As expected, this service defines one operation, " echo":

+
+
+
+
<portType name='Echo'>
+ <operation name='echo' parameterOrder='echo'>
+  <input message='tns:Echo_echo'/>
+  <output message='tns:Echo_echoResponse'/>
+ </operation>
+</portType>
+
+
+
+ + + + + +
+ + +Remember that when deploying on JBossWS you do not need to run this +tool. You only need it for generating portable artifacts and/or the +abstract contract for your service. +
+
+
+

Let’s create a POJO endpoint for deployment on WildFly. A simple +web.xml needs to be created:

+
+
+
+
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+  version="2.4">
+ 
+  <servlet>
+    <servlet-name>Echo</servlet-name>
+    <servlet-class>echo.Echo</servlet-class>
+  </servlet>
+ 
+  <servlet-mapping>
+    <servlet-name>Echo</servlet-name>
+    <url-pattern>/Echo</url-pattern>
+  </servlet-mapping>
+</web-app>
+
+
+
+

The web.xml and the single class can now be used to create a war:

+
+
+
+
$ mkdir -p WEB-INF/classes
+$ cp -rp echo WEB-INF/classes/
+$ cp web.xml WEB-INF
+$ jar cvf echo.war WEB-INF
+added manifest
+adding: WEB-INF/(in = 0) (out= 0)(stored 0%)
+adding: WEB-INF/classes/(in = 0) (out= 0)(stored 0%)
+adding: WEB-INF/classes/echo/(in = 0) (out= 0)(stored 0%)
+adding: WEB-INF/classes/echo/Echo.class(in = 340) (out= 247)(deflated 27%)
+adding: WEB-INF/web.xml(in = 576) (out= 271)(deflated 52%)
+
+
+
+

The war can then be deployed to the JBoss Application Server.The war can +then be deployed to the JBoss Application Server; this will internally +invoke wsprovide, which will generate the WSDL. If deployment was +successful, and you are using the default settings, it should be +available in the server management console.

+
+
+

For a portable Jakarta XML Web Services deployment, the wrapper classes generated earlier +could be added to the deployment.

+
+
+
+
Top-Down (Using wsconsume)
+
+

The top-down development strategy begins with the abstract contract for +the service, which includes the WSDL file and zero or more schema files. +The wsconsume tool is then used to consume this contract, and produce +annotated Java classes (and optionally sources) that define it.

+
+
+ + + + + +
+ + +wsconsume may have problems with symlinks on Unix systems +
+
+
+

Using the WSDL file from the bottom-up example, a new Java +implementation that adheres to this service can be generated. The "-k" +option is passed to wsconsume to preserve the Java source files that +are generated, instead of providing just classes:

+
+
+
+
$ wsconsume -k EchoService.wsdl
+echo/Echo.java
+echo/EchoResponse.java
+echo/EchoService.java
+echo/Echo_Type.java
+echo/ObjectFactory.java
+echo/package-info.java
+echo/Echo.java
+echo/EchoResponse.java
+echo/EchoService.java
+echo/Echo_Type.java
+echo/ObjectFactory.java
+echo/package-info.java
+
+
+
+

The following table shows the purpose of each generated file:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FilePurpose

Echo.java

Service Endpoint Interface

Echo_Type.java

Wrapper bean for request message

EchoResponse.java

Wrapper bean for response message

ObjectFactory.java

Jakarta XML Binding XML Registry

package-info.java

Holder for Jakarta XML Binding package annotations

EchoService.java

Used only by Jakarta XML Web Services clients

+
+

Examining the Service Endpoint Interface reveals annotations that are +more explicit than in the class written by hand in the bottom-up +example, however, these evaluate to the same contract:

+
+
+
+
@WebService(name = "Echo", targetNamespace = "http://echo/")
+public interface Echo {
+    @WebMethod
+    @WebResult(targetNamespace = "")
+    @RequestWrapper(localName = "echo", targetNamespace = "http://echo/", className = "echo.Echo_Type")
+    @ResponseWrapper(localName = "echoResponse", targetNamespace = "http://echo/", className = "echo.EchoResponse")
+    public String echo(
+        @WebParam(name = "arg0", targetNamespace = "")
+        String arg0);
+ 
+}
+
+
+
+

The only missing piece (besides for packaging) is the implementation +class, which can now be written, using the above interface.

+
+
+
+
package echo;
+ 
+@jakarta.jws.WebService(endpointInterface="echo.Echo")
+public class EchoImpl implements Echo
+{
+   public String echo(String arg0)
+   {
+      return arg0;
+   }
+}
+
+
+
+
+
+

17.2.2. Client Side

+
+

Before going to detail on the client-side it is important to understand +the decoupling concept that is central to Web Services. Web Services are +not the best fit for internal RPC, even though they can be used in this +way. There are much better technologies for this (CORBA, and RMI for +example). Web Services were designed specifically for interoperable +coarse-grained correspondence. There is no expectation or guarantee that +any party participating in a Web Service interaction will be at any +particular location, running on any particular OS, or written in any +particular programming language. So because of this, it is important to +clearly separate client and server implementations. The only thing they +should have in common is the abstract contract definition. If, for +whatever reason, your software does not adhere to this principal, then +you should not be using Web Services. For the above reasons, the +recommended methodology for developing a client is to follow the +top-down approach , even if the client is running on the same server.

+
+
+

Let’s repeat the process of the top-down section, although using the +deployed WSDL, instead of the one generated offline by wsprovide. The +reason why we do this is just to get the right value for soap:address. +This value must be computed at deploy time, since it is based on +container configuration specifics. You could of course edit the WSDL +file yourself, although you need to ensure that the path is correct.

+
+
+

Offline version:

+
+
+
+
<service name='EchoService'>
+  <port binding='tns:EchoBinding' name='EchoPort'>
+   <soap:address location='REPLACE_WITH_ACTUAL_URL'/>
+  </port>
+</service>
+
+
+
+

Online version:

+
+
+
+
<service name="EchoService">
+  <port binding="tns:EchoBinding" name="EchoPort">
+    <soap:address location="http://localhost.localdomain:8080/echo/Echo"/>
+  </port>
+</service>
+
+
+
+

Using the online deployed version with wsconsume:

+
+
+
+
$ wsconsume -k http://localhost:8080/echo/Echo?wsdl
+echo/Echo.java
+echo/EchoResponse.java
+echo/EchoService.java
+echo/Echo_Type.java
+echo/ObjectFactory.java
+echo/package-info.java
+echo/Echo.java
+echo/EchoResponse.java
+echo/EchoService.java
+echo/Echo_Type.java
+echo/ObjectFactory.java
+echo/package-info.java
+
+
+
+

The one class that was not examined in the top-down section, was +EchoService.java. Notice how it stores the location the WSDL was +obtained from.

+
+
+
+
@WebServiceClient(name = "EchoService", targetNamespace = "http://echo/", wsdlLocation = "http://localhost:8080/echo/Echo?wsdl")
+public class EchoService extends Service
+{
+    private final static URL ECHOSERVICE_WSDL_LOCATION;
+ 
+    static {
+        URL url = null;
+        try
+        {
+           url = new URL("http://localhost:8080/echo/Echo?wsdl");
+        }
+        catch (MalformedURLException e)
+        {
+           e.printStackTrace();
+        }
+        ECHOSERVICE_WSDL_LOCATION = url;
+    }
+ 
+    public EchoService(URL wsdlLocation, QName serviceName)
+    {
+         super(wsdlLocation, serviceName);
+    }
+ 
+    public EchoService()
+    {
+         super(ECHOSERVICE_WSDL_LOCATION, new QName("http://echo/", "EchoService"));
+    }
+ 
+    @WebEndpoint(name = "EchoPort")
+    public Echo getEchoPort()
+    {
+         return (Echo)super.getPort(new QName("http://echo/", "EchoPort"), Echo.class);
+    }
+}
+
+
+
+

As you can see, this generated class extends the main client entry point +in Jakarta XML Web Services, jakarta.xml.ws.Service. While you can use Service directly, +this is far simpler since it provides the configuration info for you. +The only method we really care about is the getEchoPort() method, +which returns an instance of our Service Endpoint Interface. Any WS +operation can then be called by just invoking a method on the returned +interface.

+
+
+ + + + + +
+ + +It’s not recommended to refer to a remote WSDL URL in a production +application. This causes network I/O every time you instantiate the +Service Object. Instead, use the tool on a saved local copy, or use the +URL version of the constructor to provide a new WSDL location. +
+
+
+

All that is left to do, is write and compile the client:

+
+
+
+
import echo.*;
+ 
+public class EchoClient
+{
+   public static void main(String args[])
+   {
+      if (args.length != 1)
+      {
+          System.err.println("usage: EchoClient <message>");
+          System.exit(1);
+      }
+ 
+      EchoService service = new EchoService();
+      Echo echo = service.getEchoPort();
+      System.out.println("Server said: " + echo.echo(args0));
+   }
+}
+
+
+
+

It is easy to change the endpoint address of your operation at runtime, +setting the ENDPOINT_ADDRESS_PROPERTY as shown below:

+
+
+
+
EchoService service = new EchoService();
+      Echo echo = service.getEchoPort();
+ 
+      /* Set NEW Endpoint Location */
+      String endpointURL = "http://NEW_ENDPOINT_URL";
+      BindingProvider bp = (BindingProvider)echo;
+      bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
+ 
+      System.out.println("Server said: " + echo.echo(args0));
+
+
+
+
+
+

17.3. wsconsume

+
+

wsconsume is a command line tool and ant task that "consumes" the +abstract contract (WSDL file) and produces portable Jakarta XML Web Services and +client artifacts.

+
+
+

17.3.1. Command Line Tool

+
+

The command line tool has the following usage:

+
+
+
+
usage: wsconsume [options] <wsdl-url>
+options:
+  -h, --help                  Show this help message
+  -b, --binding=<file>        One or more Jakarta XML Web Services or Jakarta XML Binding binding files
+  -k, --keep                  Keep/Generate Java source
+  -c  --catalog=<file>        Oasis XML Catalog file for entity resolution
+  -j  --clientjar=<name>      Create a jar file of the generated artifacts for calling the webservice
+  -p  --package=<name>        The target package for generated source
+  -w  --wsdlLocation=<loc>    Value to use for @WebServiceClient.wsdlLocation
+  -o, --output=<directory>    The directory to put generated artifacts
+  -s, --source=<directory>    The directory to put Java source
+  -t, --target=<2.0|2.1|2.2>  The Jakarta XML Web Services specification target
+  -q, --quiet                 Be somewhat more quiet
+  -v, --verbose               Show full exception stack traces
+  -l, --load-consumer         Load the consumer and exit (debug utility)
+  -e, --extension             Enable SOAP 1.2 binding extension
+  -a, --additionalHeaders     Enables processing of implicit SOAP headers
+  -n, --nocompile             Do not compile generated sources
+
+
+
+ + + + + +
+ + +The wsdlLocation is used when creating the Service to be used by clients +and will be added to the @WebServiceClient annotation, for an endpoint +implementation based on the generated service endpoint interface you +will need to manually add the wsdlLocation to the @WebService annotation +on your web service implementation and not the service endpoint +interface. +
+
+
+
Examples
+
+

Generate artifacts in Java class form only:

+
+
+
+
wsconsume Example.wsdl
+
+
+
+

Generate source and class files:

+
+
+
+
wsconsume -k Example.wsdl
+
+
+
+

Generate source and class files in a custom directory:

+
+
+
+
wsconsume -k -o custom Example.wsdl
+
+
+
+

Generate source and class files in the org.foo package:

+
+
+
+
wsconsume -k -p org.foo Example.wsdl
+
+
+
+

Generate source and class files using multiple binding files:

+
+
+
+
wsconsume -k -b wsdl-binding.xml -b schema1-binding.xml -b schema2-binding.xml
+
+
+
+
+
+

17.3.2. Maven Plugin

+
+

The wsconsume tools is included in the +org.jboss.ws.plugins:jaxws-tools-maven-plugin plugin. The plugin has +two goals for running the tool, wsconsume and wsconsume-test, which +basically do the same during different maven build phases (the former +triggers the sources generation during generate-sources phase, the +latter during the generate-test-sources one).

+
+
+

The wsconsume plugin has the following parameters:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault

bindingFiles

Jakarta XML Web Services or Jakarta XML Binding binding file

true

classpathElements

Each classpathElement provides alibrary file to be +added to classpath

$\{project.compileClasspathElements}or$\{project.testClasspathElements}

catalog

Oasis XML Catalog file for entity resolution

none

targetPackage

The target Java package for generated code.

generated

bindingFiles

One or more Jakarta XML Web Services or Jakarta XML Binding binding file

none

wsdlLocation

Value to use for @WebServiceClient.wsdlLocation

generated

outputDirectory

The output directory for generated artifacts.

$\{project.build.outputDirectory}or$\{project.build.testOutputDirectory}

sourceDirectory

The output directory for Java source.

$\{project.build.directory}/wsconsume/java

verbose

Enables more informational output about command progress.

false

wsdls

The WSDL files or URLs to consume

n/a

extension

Enable SOAP 1.2 binding extension.

false

encoding

The charset encoding to use for generated sources.

$\{project.build.sourceEncoding}

argLine

An optional additional argline to be used when running in fork +mode;can be used to set endorse dir, enable debugging, +etc.Example<argLine>-Djava.endorsed.dirs=…​</argLine>

none

fork

Whether or not to run the generation task in a separate VM.

false

target

A preference for the Jakarta XML Web Services specification target

Depends on +the underlying stack and endorsed dirs if any

+
+
Examples
+
+

You can use wsconsume in your own project build simply referencing the +jaxws-tools-maven-plugin in the configured plugins in your pom.xml +file.

+
+
+

The following example makes the plugin consume the test.wsdl file and +generate SEI and wrappers' java sources. The generated sources are then +compiled together with the other project classes.

+
+
+
+
<build>
+  <plugins>
+    <plugin>
+      <groupId>org.jboss.ws.plugins</groupId>
+      <artifactId>jaxws-tools-maven-plugin</artifactId>
+      <version>1.2.0.Beta1</version>
+      <configuration>
+        <wsdls>
+          <wsdl>${basedir}/test.wsdl</wsdl>
+        </wsdls>
+      </configuration>
+      <executions>
+        <execution>
+          <goals>
+            <goal>wsconsume</goal>
+          </goals>
+        </execution>
+      </executions>
+    </plugin>
+  </plugins>
+</build>
+
+
+
+

You can also specify multiple wsdl files, as well as force the target +package, enable SOAP 1.2 binding and turn the tool’s verbose mode on:

+
+
+
+
<build>
+  <plugins>
+    <plugin>
+      <groupId>org.jboss.ws.plugins</groupId>
+      <artifactId>jaxws-tools-maven-plugin</artifactId>
+      <version>1.2.0.Beta1</version>
+      <configuration>
+       <wsdls>
+        <wsdl>${basedir}/test.wsdl</wsdl>
+        <wsdl>${basedir}/test2.wsdl</wsdl>
+       </wsdls>
+       <targetPackage>foo.bar</targetPackage>
+       <extension>true</extension>
+       <verbose>true</verbose>
+      </configuration>
+      <executions>
+        <execution>
+          <goals>
+            <goal>wsconsume</goal>
+          </goals>
+        </execution>
+      </executions>
+    </plugin>
+  </plugins>
+</build>
+
+
+
+

Finally, if the wsconsume invocation is required for consuming a wsdl to +be used in your testsuite only, you might want to use the +wsconsume-test goal as follows:

+
+
+
+
<build>
+  <plugins>
+    <plugin>
+      <groupId>org.jboss.ws.plugins</groupId>
+      <artifactId>jaxws-tools-maven-plugin</artifactId>
+      <version>1.2.0.Beta1</version>
+      <configuration>
+        <wsdls>
+          <wsdl>${basedir}/test.wsdl</wsdl>
+        </wsdls>
+      </configuration>
+      <executions>
+        <execution>
+          <goals>
+            <goal>wsconsume-test</goal>
+          </goals>
+        </execution>
+      </executions>
+    </plugin>
+  </plugins>
+</build>
+
+
+
+

Plugin stack dependencyThe plugin itself does not have an explicit +dependency to a JBossWS stack, as it’s meant for being used with +implementations of any supported version of the JBossWS SPI. So the +user is expected to set a dependency in his own pom.xml to the desired +JBossWS stack version. The plugin will rely on the that for using the +proper tooling.

+
+
+
+
<dependencies>
+  <dependency>
+    <groupId>org.jboss.ws.cxf</groupId>
+    <artifactId>jbossws-cxf-client</artifactId>
+    <version>4.0.0.GA</version>
+  </dependency>
+</dependencies>
+
+
+
+ + + + + +
+ + +Be careful when using this plugin with the Maven War Plugin as that +include any project dependency into the generated application war +archive. You might want to set <scope>provided</scope> for the +JBossWS stack dependency to avoid that. +
+
+
+ + + + + +
+ + +Up to version 1.1.2.Final, the artifactId of the plugin was +maven-jaxws-tools-plugin. +
+
+
+
+
+

17.3.3. Ant Task

+
+

The wsconsume Ant task ( org.jboss.ws.tools.ant.WSConsumeTask) has +the following attributes:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault

fork

Whether or not to run the generation task in a separate VM.

true

keep

Keep/Enable Java source code generation.

false

catalog

Oasis XML Catalog file for entity resolution

none

package

The target Java package for generated code.

generated

binding

A Jakarta XML Web Services or Jakarta XML Binding binding file

none

wsdlLocation

Value to use for @WebServiceClient.wsdlLocation

generated

encoding

The charset encoding to use for generated sources

n/a

destdir

The output directory for generated artifacts.

"output"

sourcedestdir

The output directory for Java source.

value of destdir

target

The Jakarta XML Web Services specification target. Allowed values are 2.0, 2.1 +and 2.2

 

verbose

Enables more informational output about command progress.

false

wsdl

The WSDL file or URL

n/a

extension

Enable SOAP 1.2 binding extension.

false

additionalHeaders

Enables processing of implicit SOAP headers

false

+
+ + + + + +
+ + +Users also need to put streamBuffer.jar and stax-ex.jar to the classpath +of the ant task to generate the appropriate artefacts. +
+
+
+ + + + + +
+ + +The wsdlLocation is used when creating the Service to be used by clients +and will be added to the @WebServiceClient annotation, for an endpoint +implementation based on the generated service endpoint interface you +will need to manually add the wsdlLocation to the @WebService annotation +on your web service implementation and not the service endpoint +interface. +
+
+
+

Also, the following nested elements are supported:

+
+ +++++ + + + + + + + + + + + + + + + + + + + +
ElementDescriptionDefault

binding

A Jakarta XML Web Services or Jakarta XML Binding binding file

none

jvmarg

Allows setting of custom jvm arguments

 

+
+
Examples
+
+

Generate Jakarta XML Web Services source and classes in a separate JVM with separate +directories, a custom wsdl location attribute, and a list of binding +files from foo.wsdl:

+
+
+
+
<wsconsume
+  fork="true"
+  verbose="true"
+  destdir="output"
+  sourcedestdir="gen-src"
+  keep="true"
+  wsdllocation="handEdited.wsdl"
+  wsdl="foo.wsdl">
+  <binding dir="binding-files" includes="*.xml" excludes="bad.xml"/>
+</wsconsume>
+
+
+
+
+
+
+

17.4. wsprovide

+
+

wsprovide is a command line tool, Maven plugin and Ant task that +generates portable Jakarta XML Web Services artifacts for a service endpoint +implementation. It also has the option to "provide" the abstract +contract for offline usage.

+
+
+

17.4.1. Command Line Tool

+
+

The command line tool has the following usage:

+
+
+
+
usage: wsprovide [options] <endpoint class name>
+options:
+  -h, --help                  Show this help message
+  -k, --keep                  Keep/Generate Java source
+  -w, --wsdl                  Enable WSDL file generation
+  -a, --address The generated port soap:address in wsdl
+  -c. --classpath=<path>      The classpath that contains the endpoint
+  -o, --output=<directory>    The directory to put generated artifacts
+  -r, --resource=<directory>  The directory to put resource artifacts
+  -s, --source=<directory>    The directory to put Java source
+  -e, --extension             Enable SOAP 1.2 binding extension
+  -q, --quiet                 Be somewhat more quiet
+  -t, --show-traces           Show full exception stack traces
+
+
+
+
Examples
+
+

Generating wrapper classes for portable artifacts in the "generated" +directory:

+
+
+
+
wsprovide -o generated foo.Endpoint
+
+
+
+

Generating wrapper classes and WSDL in the "generated" directory

+
+
+
+
wsprovide -o generated -w foo.Endpoint
+
+
+
+

Using an endpoint that references other jars

+
+
+
+
wsprovide -o generated -c application1.jar:application2.jar foo.Endpoint
+
+
+
+
+
+

17.4.2. Maven Plugin

+
+

The wsprovide tools is included in the +org.jboss.ws.plugins:jaxws-tools- maven- plugin plugin. The plugin +has two goals for running the tool, wsprovide and wsprovide-test, +which basically do the same during different Maven build phases (the +former triggers the sources generation during process-classes phase, +the latter during the process-test-classes one).

+
+
+

The wsprovide plugin has the following parameters:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault

testClasspathElements

Each classpathElement provides alibrary file to +be added to classpath

$\{project.compileClasspathElements}or$\{project.testClasspathElements}

outputDirectory

The output directory for generated artifacts.

$\{project.build.outputDirectory}or$\{project.build.testOutputDirectory}

resourceDirectory

The output directory for resource artifacts +(WSDL/XSD).

$\{project.build.directory}/wsprovide/resources

sourceDirectory

The output directory for Java source.

$\{project.build.directory}/wsprovide/java

extension

Enable SOAP 1.2 binding extension.

false

generateWsdl

Whether or not to generate WSDL.

false

verbose

Enables more informational output about command progress.

false

portSoapAddress

The generated port soap:address in the WSDL

 

endpointClass

Service Endpoint Implementation.

 

+
+
Examples
+
+

You can use wsprovide in your own project build simply referencing the +maven-jaxws-tools-plugin in the configured plugins in your pom.xml +file.

+
+
+

The following example makes the plugin provide the wsdl file and +artifact sources for the specified endpoint class:

+
+
+
+
<build>
+  <plugins>
+    <plugin>
+      <groupId>org.jboss.ws.plugins</groupId>
+      <artifactId>jaxws-tools-maven-plugin</artifactId>
+      <version>1.2.0.Beta1</version>
+      <configuration>
+        <verbose>true</verbose>
+        <endpointClass>org.jboss.test.ws.plugins.tools.wsprovide.TestEndpoint</endpointClass>
+        <generateWsdl>true</generateWsdl>
+      </configuration>
+      <executions>
+        <execution>
+          <goals>
+            <goal>wsprovide</goal>
+          </goals>
+        </execution>
+      </executions>
+    </plugin>
+  </plugins>
+</build>
+
+
+
+

The following example does the same, but is meant for use in your own +testsuite:

+
+
+
+
<build>
+  <plugins>
+    <plugin>
+      <groupId>org.jboss.ws.plugins</groupId>
+      <artifactId>jaxws-tools-maven-plugin</artifactId>
+      <version>1.2.0.Beta1</version>
+      <configuration>
+        <verbose>true</verbose>
+        <endpointClass>org.jboss.test.ws.plugins.tools.wsprovide.TestEndpoint2</endpointClass>
+        <generateWsdl>true</generateWsdl>
+      </configuration>
+      <executions>
+        <execution>
+          <goals>
+            <goal>wsprovide-test</goal>
+          </goals>
+        </execution>
+      </executions>
+    </plugin>
+  </plugins>
+</build>
+
+
+
+

Plugin stack dependencyThe plugin itself does not have an explicit +dependency to a JBossWS stack, as it’s meant for being used with +implementations of any supported version of the JBossWS SPI. So the +user is expected to set a dependency in his own pom.xml to the desired +JBossWS stack version. The plugin will rely on the that for using the +proper tooling.

+
+
+
+
<dependencies>
+  <dependency>
+    <groupId>org.jboss.ws.cxf</groupId>
+    <artifactId>jbossws-cxf-client</artifactId>
+    <version>5.0.0.CR1</version>
+  </dependency>
+</dependencies>
+
+
+
+ + + + + +
+ + +Be careful when using this plugin with the Maven War Plugin as that +include any project dependency into the generated application war +archive. You might want to set <scope>provided</scope> for the +JBossWS stack dependency to avoid that. +
+
+
+ + + + + +
+ + +Up to version 1.1.2.Final, the artifactId of the plugin was +maven-jaxws-tools-plugin. +
+
+
+
+
+

17.4.3. Ant Task

+
+

The wsprovide ant task ( org.jboss.ws.tools.ant.WSProvideTask) has the +following attributes:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault

fork

Whether or not to run the generation task in a separate VM.

true

keep

Keep/Enable Java source code generation.

false

destdir

The output directory for generated artifacts.

"output"

resourcedestdir

The output directory for resource artifacts +(WSDL/XSD).

value of destdir

sourcedestdir

The output directory for Java source.

value of destdir

extension

Enable SOAP 1.2 binding extension.

false

genwsdl

Whether or not to generate WSDL.

false

address

The generated port soap:address in wsdl.

 

verbose

Enables more informational output about command progress.

false

sei

Service Endpoint Implementation.

 

classpath

The classpath that contains the service endpoint +implementation.

"."

+
+
Examples
+
+

Executing wsprovide in verbose mode with separate output directories for +source, resources, and classes:

+
+
+
+
<target name="test-wsproivde" depends="init">
+  <taskdef name="wsprovide" classname="org.jboss.ws.tools.ant.WSProvideTask">
+    <classpath refid="core.classpath"/>
+  </taskdef>
+  <wsprovide
+    fork="false"
+    keep="true"
+    destdir="out"
+    resourcedestdir="out-resource"
+    sourcedestdir="out-source"
+    genwsdl="true"
+    verbose="true"
+    sei="org.jboss.test.ws.jaxws.jsr181.soapbinding.DocWrappedServiceImpl">
+    <classpath>
+      <pathelement path="${tests.output.dir}/classes"/>
+    </classpath>
+  </wsprovide>
+</target>
+
+
+
+
+
+
+

17.5. Jakarta XML Web Services Advanced User Guide

+
+

17.5.1. Logging

+
+

Logging of inbound and outbound messages is a common need. Different +approaches are available for achieving that:

+
+
+
Jakarta XML Web Services Handler approach
+
+

A portable way of performing logging is writing a simple Jakarta XML Web Services handler +dumping the messages that are passed in it; the handler can be added to +the desired client/endpoints (programmatically / using @HandlerChain +Jakarta XML Web Services annotation).

+
+
+

The predefined client and endpoint configuration +mechanism allows user to add the logging handler to any client/endpoint +or to some of them only (in which case the @EndpointConfig annotation +/ JBossWS API is required though).

+
+
+
+
Apache CXF approach
+
+

Apache CXF also comes with logging interceptors that can be easily used +to log messages to the console or configured client/server log files. +Those interceptors can be added to client, endpoint and buses in +multiple ways:

+
+
+
System property
+
+

Setting the org.apache.cxf.logging.enabled system property to true +causes the logging interceptors to be added to any Bus instance being +created on the JVM.

+
+
+ + + + + +
+ + +On WildFly, the system property is easily set by adding what follows to +the standalone / domain server configuration just after the extensions +section: +
+
+
+
+
<system-properties>
+  <property name="org.apache.cxf.logging.enabled" value="true"/>
+</system-properties>
+
+
+
+
+
Manual interceptor addition and logging feature
+
+

Logging interceptors can be selectively added to endpoints using the +Apache CXF annotations @org.apache.cxf.interceptor.InInterceptors and +@org.apache.cxf.interceptor.OutInterceptors. The same is achieved on +client side by programmatically adding new instances of the logging +interceptors to the client or the bus.

+
+
+

Alternatively, Apache CXF also comes with a +org.apache.cxf.feature.LoggingFeature that can be used on clients and +endpoints (either annotating them with +@org.apache.cxf.feature.Features or directly with +@org.apache.cxf.annotations.Logging).

+
+
+

Please refer to the +Apache +CXF documentation for more details.

+
+
+
+
+
+

17.5.2. WS-* support

+
+

JBossWS includes most of the WS-* specification functionalities through +the integration with Apache CXF. In particular, the whole WS-Security +Policy framework is fully supported, enabling full contract driven +configuration of complex features like WS-Security.

+
+
+

In details information available further down in this documentation +book.

+
+
+
+

17.5.3. Address rewrite

+
+

JBossWS allows users to configure the soap:address attribute in the +wsdl contract of deployed services.

+
+
+
Server configuration options
+
+

The configuration options are part of the +webservices +subsystem section of the application server domain model.

+
+
+
+
<subsystem xmlns="urn:jboss:domain:webservices:1.1" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
+  xmlns:jaxwsconfig="urn:jboss:jbossws-jaxws-config:4.0">
+  <wsdl-host>localhost</wsdl-host>
+  <modify-wsdl-address>true</modify-wsdl-address>
+<!--
+  <wsdl-port>8080</wsdl-port>
+  <wsdl-secure-port>8443</wsdl-secure-port>
+-->
+</subsystem>
+
+
+
+

If the content of <soap:address> in the wsdl is a valid URL, JBossWS +will not rewrite it unless modify-wsdl-address is true. If the content +of <soap:address> is not a valid URL instead, JBossWS will always +rewrite it using the attribute values given below. Please note that the +variable $\{jboss.bind.address} can be used to set the address which +the application is bound to at each startup.

+
+
+

The wsdl-secure-port and wsdl-port attributes are used to explicitly +define the ports to be used for rewriting the SOAP address. If these +attributes are not set, the ports will be identified by querying the +list of installed connectors. If multiple connectors are found the port +of the first connector is used.

+
+
+
+
Dynamic rewrite
+
+

When the application server is bound to multiple addresses or +non-trivial real-world network architectures cause request for different +external addresses to hit the same endpoint, a static rewrite of the +soap:address may not be enough. JBossWS allows for both the soap:address +in the wsdl and the wsdl address in the console to be rewritten with the +host use in the client request. This way, users always get the right +wsdl address assuming they’re connecting to an instance having the +endpoint they’re looking for. To trigger this behaviour, the +jbossws.undefined.host value has to be specified for the wsdl-host +element.

+
+
+
+
<wsdl-host>jbossws.undefined.host</wsdl-host>
+<modify-wsdl-address>true</modify-wsdl-address>
+
+
+
+

Of course, when a confidential transport address is required, the +addresses are always rewritten using https protocol and the port +currently configured for the https/ssl connector.

+
+
+
+
+

17.5.4. Configuration through deployment descriptor

+
+

The jboss-webservices.xml deployment descriptor can be used to provide +additional configuration for a given deployment. The expected location +of it is:

+
+
+
    +
  • +

    META-INF/jboss-webservices.xml for Jakarta Enterprise Beans webservice deployments

    +
  • +
  • +

    WEB-INF/jboss-webservices.xml for POJO webservice deployments and +Jakarta Enterprise Beans webservice endpoints bundled in war archives

    +
  • +
+
+
+

The structure of file is the following (schemas are available +here):

+
+
+
+
<webservices>
+  <context-root/>?
+  <config-name/>?
+  <config-file/>?
+  <property>*
+    <name/>
+    <value/>
+  </property>
+  <port-component>*
+    <ejb-name/>
+    <port-component-name/>
+    <port-component-uri/>?
+    <auth-method/>?
+    <transport-guarantee/>?
+    <secure-wsdl-access/>?
+  </port-component>
+  <webservice-description>*
+    <webservice-description-name/>
+    <wsdl-publish-location/>?
+  </webservice-description>
+</webservices>
+
+
+
+
context-root element
+
+

Element <context-root> can be used to customize context root of +webservices deployment.

+
+
+
+
<webservices>
+  <context-root>foo</context-root>
+</webservices>
+
+
+
+
+
config-name and config-file elements
+
+

Elements <config-name> and <config-file> can be used to associate +any endpoint provided in the deployment with a given +endpoint configuration. Endpoint configuration are +either specified in the referenced config file or in the WildFly domain +model (webservices subsystem). For further details on the endpoint +configurations and their management in the domain model, please see the +related +documentation.

+
+
+
+
<webservices>
+  <config-name>Standard WSSecurity Endpoint</config-name>
+  <config-file>META-INF/custom.xml</config-file>
+</webservices>
+
+
+
+
+
property element
+
+

<property> elements can be used to setup simple property values to +configure the ws stack behavior. Allowed property names and values are +mentioned in the guide under related topics.

+
+
+
+
<property>
+  <name>prop.name</name>
+  <value>prop.value</value>
+</property>
+
+
+
+
+
port-component element
+
+

Element <port-component> can be used to customize Jakarta Enterprise Beans endpoint target +URI or to configure security related properties.

+
+
+
+
<webservices>
+  <port-component>
+    <ejb-name>TestService</ejb-name>
+    <port-component-name>TestServicePort</port-component-name>
+    <port-component-uri>/*</port-component-uri>
+    <auth-method>BASIC</auth-method>
+    <transport-guarantee>NONE</transport-guarantee>
+    <secure-wsdl-access>true</secure-wsdl-access>
+  </port-component>
+</webservices>
+
+
+
+
+
webservice-description element
+
+

Element <webservice-description> can be used to customize (override) +webservice WSDL publish location.

+
+
+
+
<webservices>
+  <webservice-description>
+    <webservice-description-name>TestService</webservice-description-name>
+    <wsdl-publish-location>file:///bar/foo.wsdl</wsdl-publish-location>
+  </webservice-description>
+</webservices>
+
+
+
+
+
+

17.5.5. Schema validation of SOAP messages

+
+

Apache CXF has a feature for validating incoming and outgoing SOAP +messages on both client and server side. The validation is performed +against the relevant schema in the endpoint wsdl contract (server side) +or the wsdl contract used for building up the service proxy (client +side).

+
+
+

Schema validation can be turned on programmatically on client side

+
+
+
+
((BindingProvider)proxy).getRequestContext().put("schema-validation-enabled", true);
+
+
+
+

or using the @org.apache.cxf.annotations.SchemaValidation annotation +on server side

+
+
+
+
import jakarta.jws.WebService;
+import org.apache.cxf.annotations.SchemaValidation;
+ 
+@WebService(...)
+@SchemaValidation
+public class ValidatingHelloImpl implements Hello {
+   ...
+}
+
+
+
+

Alternatively, any endpoint and client running in-container can be +associated to a JBossWS predefined configuration +having the schema-validation-enabled property set to true in the +referenced config file.

+
+
+

Finally, JBossWS also allows for server-wide (default) setup of schema +validation by using the Standard-Endpoint-Config and +Standard-Client-Config special configurations (which apply to any +client / endpoint unless a different configuration is specified for +them)

+
+
+
+
<subsystem xmlns="urn:jboss:domain:webservices:1.2">
+    ...
+    <endpoint-config name="Standard-Endpoint-Config">
+        <property name="schema-validation-enabled" value="true"/>
+    </endpoint-config>
+    ...
+    <client-config name="Standard-Client-Config">
+        <property name="schema-validation-enabled" value="true"/>
+    </client-config>
+</subsystem>
+
+
+
+
+

17.5.6. Jakarta XML Binding Introductions

+
+

As Kohsuke Kawaguchi wrote on +his +blog, one common complaint from the Jakarta XML Binding users is the lack of support +for binding 3rd party classes. The scenario is this: you are trying to +annotate your classes with Jakarta XML Binding annotations to make it XML bindable, but +some of the classes are coming from libraries and JDK, and thus you +cannot put necessary Jakarta XML Binding annotations on it.

+
+
+

To solve this Jakarta XML Binding has been designed to provide hooks for programmatic +introduction of annotations to the runtime.

+
+
+

This is currently leveraged by the JBoss Jakarta XML Binding Introductions project, +using which users can define annotations in XML and make Jakarta XML Binding see those +as if those were in the class files (perhaps coming from 3rd party +libraries).

+
+
+

Take a look at the JAXB +Introductions page on the wiki and at the examples in the sources.

+
+
+
+

17.5.7. WSDL system properties expansion

+ +
+
+

17.5.8. Predefined client and endpoint configurations

+
+
+JBossWS permits extra setup configuration data to be predefined and +associated with an endpoint or a client. Configurations can include +Jakarta XML Web Services handlers and key/value property declarations that control JBossWS +and Apache CXF internals. Predefined configurations can be used for +Jakarta XML Web Services client and Jakarta XML Web Services endpoint setup. +
+
+
+

Configurations can be defined in the webservice subsystem and in an +application’s deployment descriptor file. There can be many +configuration definitions in the webservice subsystem and in an +application. Each configuration must have a name that is unique within +the server. Configurations defined in an application are local to the +application. Endpoint implementations declare the use of a specific +configuration through the use of the +org.jboss.ws.api.annotation.EndpointConfig annotation. An endpoint +configuration defined in the webservices subsystem is available to all +deployed applications on the server container and can be referenced by +name in the annotation. An endpoint configuration defined in an +application must be referenced by both deployment descriptor file name +and configuration name by the annotation.

+
+
+

Handlers

+
+
+

Each endpoint configuration may be associated with zero or more PRE and +POST handler chains. Each handler chain may include JAXWS handlers. For +outbound messages the PRE handler chains are executed before any handler +that is attached to the endpoint using the standard means, such as with +annotation @HandlerChain, and POST handler chains are executed after +those objects have executed. For inbound messages the POST handler +chains are executed before any handler that is attached to the endpoint +using the standard means and the PRE handler chains are executed after +those objects have executed.

+
+
+
+
* Server inbound messages
+Client --> ... --> POST HANDLER --> ENDPOINT HANDLERS --> PRE HANDLERS --> Endpoint
+
+* Server outbound messages
+Endpoint --> PRE HANDLER --> ENDPOINT HANDLERS --> POST HANDLERS --> ... --> Client
+
+
+
+

The same applies for client configurations.

+
+
+

Properties

+
+
+

Key/value properties are used for controlling both some Apache CXF +internals and some JBossWS options. Specific supported values are +mentioned where relevant in the rest of the documentation.

+
+
+
Assigning configurations
+
+

Endpoints and clients are assigned configuration through different +means. Users can explicitly require a given configuration or rely on +container defaults. The assignment process can be split up as follows:

+
+
+
    +
  • +

    Explicit assignment through annotations (for endpoints) or API +programmatic usage (for clients)

    +
  • +
  • +

    Automatic assignment of configurations from default descriptors

    +
  • +
  • +

    Automatic assignment of configurations from container

    +
  • +
+
+
+
Endpoint configuration assignment
+
+

The explicit configuration assignment is meant for developer that know +in advance their endpoint or client has to be setup according to a +specified configuration. The configuration is either coming from a +descriptor that is included in the application deployment, or is +included in the application server webservices subsystem management +model.

+
+
+
+
Endpoint Configuration Deployment Descriptor
+
+

Jakarta EE archives that can contain Jakarta XML Web Services client and endpoint +implementations can also contain predefined client and endpoint +configuration declarations. All endpoint/client configuration +definitions for a given archive must be provided in a single deployment +descriptor file, which must be an implementation of schema +jbossws-jaxws-config. +Many endpoint/client configurations can be defined in the deployment +descriptor file. Each configuration must have a name that is unique +within the server on which the application is deployed. The +configuration name can’t be referred to by endpoint/client +implementations outside the application. Here is an example of a +descriptor, containing two endpoint configurations:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
+xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
+<endpoint-config>
+<config-name>org.jboss.test.ws.jaxws.jbws3282.Endpoint4Impl</config-name>
+<pre-handler-chains>
+<javaee:handler-chain>
+<javaee:handler>
+<javaee:handler-name>Log Handler</javaee:handler-name>
+<javaee:handler-class>org.jboss.test.ws.jaxws.jbws3282.LogHandler</javaee:handler-class>
+</javaee:handler>
+</javaee:handler-chain>
+</pre-handler-chains>
+<post-handler-chains>
+<javaee:handler-chain>
+<javaee:handler>
+<javaee:handler-name>Routing Handler</javaee:handler-name>
+<javaee:handler-class>org.jboss.test.ws.jaxws.jbws3282.RoutingHandler</javaee:handler-class>
+</javaee:handler>
+</javaee:handler-chain>
+</post-handler-chains>
+</endpoint-config>
+<endpoint-config>
+<config-name>EP6-config</config-name>
+<post-handler-chains>
+<javaee:handler-chain>
+<javaee:handler>
+<javaee:handler-name>Authorization Handler</javaee:handler-name>
+<javaee:handler-class>org.jboss.test.ws.jaxws.jbws3282.AuthorizationHandler</javaee:handler-class>
+</javaee:handler>
+</javaee:handler-chain>
+</post-handler-chains>
+</endpoint-config>
+</jaxws-config>
+
+
+
+

Similarly, client configurations can be specified in descriptors (still +implementing the schema mentioned above):

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
+xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
+<client-config>
+<config-name>Custom Client Config</config-name>
+<pre-handler-chains>
+<javaee:handler-chain>
+<javaee:handler>
+<javaee:handler-name>Routing Handler</javaee:handler-name>
+<javaee:handler-class>org.jboss.test.ws.jaxws.clientConfig.RoutingHandler</javaee:handler-class>
+</javaee:handler>
+<javaee:handler>
+<javaee:handler-name>Custom Handler</javaee:handler-name>
+<javaee:handler-class>org.jboss.test.ws.jaxws.clientConfig.CustomHandler</javaee:handler-class>
+</javaee:handler>
+</javaee:handler-chain>
+</pre-handler-chains>
+</client-config>
+<client-config>
+<config-name>Another Client Config</config-name>
+<post-handler-chains>
+<javaee:handler-chain>
+<javaee:handler>
+<javaee:handler-name>Routing Handler</javaee:handler-name>
+<javaee:handler-class>org.jboss.test.ws.jaxws.clientConfig.RoutingHandler</javaee:handler-class>
+</javaee:handler>
+</javaee:handler-chain>
+</post-handler-chains>
+</client-config>
+</jaxws-config>
+
+
+
+Application server configurations +
+

WildFly allows declaring JBossWS client and server predefined +configurations in the webservices subsystem section of the server +model. As a consequence it is possible to declare server-wide handlers +to be added to the chain of each endpoint or client assigned to a given +configuration.

+
+
+

Please refer to the +WildFly +documentation for details on managing the webservices subsystem such +as adding, removing and modifying handlers and properties.

+
+
+

The allowed contents in the webservices subsystem are defined by the +schema +included in the application server.

+
+
+Standard configurations +
+

Clients running in-container as well as endpoints are assigned standard +configurations by default. The defaults are used unless different +configurations are set as described on this page. This enables +administrators to tune the default handler chains for client and +endpoint configurations. The names of the default client and endpoint +configurations, used in the webservices subsystem are +Standard-Client-Config and Standard-Endpoint-Config respectively.

+
+
+
+Handlers classloading +
+

When setting a server-wide handler, please note the handler class needs +to be available through each ws deployment classloader. As a consequence +proper module dependencies might need to be specified in the deployments +that are going to leverage a given predefined configuration. A shortcut +is to add a dependency to the module containing the handler class in one +of the modules which are already automatically set as dependencies to +any deployment, for instance org.jboss.ws.spi.

+
+
+
+Examples +
+
JBoss AS 7.2 default configurations
+
+
<subsystem xmlns="urn:jboss:domain:webservices:2.0">
+<!-- ... -->
+<endpoint-config name="Standard-Endpoint-Config"/>
+<endpoint-config name="Recording-Endpoint-Config">
+<pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
+<handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
+</pre-handler-chain>
+</endpoint-config>
+<client-config name="Standard-Client-Config"/>
+</subsystem>
+
+
+
+
A configuration file for a deployment specific ws-security endpoint
+

setup

+
+
+
+
<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
+<endpoint-config>
+<config-name>Custom WS-Security Endpoint</config-name>
+<property>
+<property-name>ws-security.signature.properties</property-name>
+<property-value>bob.properties</property-value>
+</property>
+<property>
+<property-name>ws-security.encryption.properties</property-name>
+<property-value>bob.properties</property-value>
+</property>
+<property>
+<property-name>ws-security.signature.username</property-name>
+<property-value>bob</property-value>
+</property>
+<property>
+<property-name>ws-security.encryption.username</property-name>
+<property-value>alice</property-value>
+</property>
+<property>
+<property-name>ws-security.callback-handler</property-name>
+<property-value>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback</property-value>
+</property>
+</endpoint-config>
+</jaxws-config>
+
+
+
+
JBoss AS 7.2 default configurations modified to default to SOAP
+

messages schema-validation on

+
+
+
+
<subsystem xmlns="urn:jboss:domain:webservices:2.0">
+<!-- ... -->
+<endpoint-config name="Standard-Endpoint-Config">
+<property name="schema-validation-enabled" value="true"/>
+</endpoint-config>
+<!-- ... -->
+<client-config name="Standard-Client-Config">
+<property name="schema-validation-enabled" value="true"/>
+</client-config>
+</subsystem>
+
+
+
+
+
+EndpointConfig annotation +
+

Once a configuration is available to a given application, the +org.jboss.ws.api.annotation.EndpointConfig annotation is used to +assign an endpoint configuration to a Jakarta XML Web Services endpoint implementation. +When assigning a configuration that is defined in the webservices +subsystem only the configuration name is specified. When assigning a +configuration that is defined in the application, the relative path to +the deployment descriptor and the configuration name must be specified.

+
+
+
+
@EndpointConfig(configFile = "WEB-INF/my-endpoint-config.xml", configName = "Custom WS-Security Endpoint")
+public class ServiceImpl implements ServiceIface
+{
+public String sayHello()
+{
+return "Secure Hello World!";
+}
+}
+
+
+
+
+JAXWS Feature +
+

The most practical way of setting a configuration is using +org.jboss.ws.api.configuration.ClientConfigFeature, a JAXWS Feature +extension provided by JBossWS:

+
+
+
+
import org.jboss.ws.api.configuration.ClientConfigFeature;
+
+...
+
+Service service = Service.create(wsdlURL, serviceName);
+Endpoint port = service.getPort(Endpoint.class, new ClientConfigFeature("META-INF/my-client-config.xml", "Custom Client Config"));
+port.echo("Kermit");
+
+... or ....
+
+port = service.getPort(Endpoint.class, new ClientConfigFeature("META-INF/my-client-config.xml", "Custom Client Config"), true); //setup properties too from the configuration
+port.echo("Kermit");
+... or ...
+
+port = service.getPort(Endpoint.class, new ClientConfigFeature(null, testConfigName)); //reads from current container configurations if available
+port.echo("Kermit");
+
+
+
+

JBossWS parses the specified configuration file. The configuration file +must be found as a resource by the classloader of the current thread. +The +jbossws-jaxws-config +schema defines the descriptor contents and is included in the +jbossws-spi artifact.

+
+
+
+Explicit setup through API +
+

Alternatively, JBossWS API comes with facility classes that can be used +for assigning configurations when building a client. JAXWS handlers read +from client configurations as follows:

+
+
+
+
import org.jboss.ws.api.configuration.ClientConfigUtil;
+import org.jboss.ws.api.configuration.ClientConfigurer;
+
+...
+
+Service service = Service.create(wsdlURL, serviceName);
+Endpoint port = service.getPort(Endpoint.class);
+BindingProvider bp = (BindingProvider)port;
+ClientConfigUtil.setConfigHandlers(bp, "META-INF/my-client-config.xml", "Custom Client Config 1");
+port.echo("Kermit");
+
+...
+
+ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer();
+configurer.setConfigHandlers(bp, "META-INF/my-client-config.xml", "Custom Client Config 2");
+port.echo("Kermit");
+
+...
+
+configurer.setConfigHandlers(bp, "META-INF/my-client-config.xml", "Custom Client Config 3");
+port.echo("Kermit");
+
+...
+
+configurer.setConfigHandlers(bp, null, "Container Custom Client Config"); //reads from current container configurations if available
+port.echo("Kermit");
+
+
+
+
    +
  1. +

    similarly, properties are read from client configurations as +follows:

    +
  2. +
+
+
+
+
import org.jboss.ws.api.configuration.ClientConfigUtil;
+import org.jboss.ws.api.configuration.ClientConfigurer;
+
+...
+
+Service service = Service.create(wsdlURL, serviceName);
+Endpoint port = service.getPort(Endpoint.class);
+
+ClientConfigUtil.setConfigProperties(port, "META-INF/my-client-config.xml", "Custom Client Config 1");
+port.echo("Kermit");
+
+...
+
+ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer();
+configurer.setConfigProperties(port, "META-INF/my-client-config.xml", "Custom Client Config 2");
+port.echo("Kermit");
+
+...
+
+configurer.setConfigProperties(port, "META-INF/my-client-config.xml", "Custom Client Config 3");
+port.echo("Kermit");
+
+...
+
+configurer.setConfigProperties(port, null, "Container Custom Client Config"); //reads from current container configurations if available
+port.echo("Kermit");
+
+...
+
+configurer.setConfigProperties(port, null, null); //reads from current Elytron client configuration if available
+port.echo("Kermit");
+
+
+
+

The default ClientConfigurer implementation parses the specified +configuration file, if any, after having resolved it as a resources +using the current thread context classloader. The +jbossws-jaxws-config +schema defines the descriptor contents and is included in the +jbossws-spi artifact.

+
+
+

If WildFly Elytron client configuration is present, the client will automatically use SSL context and credentials (for HTTP Basic authentication or Username Token Profile) from this configuration if these were not already configured.

+
+
+
+
+
Automatic configuration from default descriptors
+
+

In some cases, the application developer might not be aware of the +configuration that will need to be used for its client and endpoint +implementation, perhaps because that’s a concern of the application +deployer. In other cases, explicit usage (compile time dependency) of +JBossWS API might not be accepted. To cope with such scenarios, JBossWS +allows including default client ( jaxws-client-config.xml) and +endpoint ( jaxws-endpoint-config.xml) descriptor within the +application (in its root), which are parsed for getting configurations +any time a configuration file name is not specified.

+
+
+

If the configuration name is also not specified, JBossWS automatically +looks for a configuration named the same as

+
+
+
    +
  • +

    the endpoint implementation class (full qualified name), in case of +Jakarta XML Web Services endpoints;

    +
  • +
  • +

    the service endpoint interface (full qualified name), in case of +Jakarta XML Web Services clients.

    +
  • +
+
+
+

No automatic configuration name is selected for Dispatch clients.

+
+
+

So, for instance, an endpoint implementation class +org.foo.bar.EndpointImpl for which no pre-defined configuration is +explicitly set will cause JBossWS to look for a +org.foo.bar.EndpointImpl named configuration within a +jaxws-endpoint-config.xml descriptor in the root of the application +deployment. Similarly, on client side, a client proxy implementing +org.foo.bar.Endpoint interface (SEI) will have the setup read from a +org.foo.bar.Endpoint named configuration in jaxws-client-config.xml +descriptor.

+
+
+
+
Automatic configuration assignment from container setup
+
+

JBossWS fall-backs to getting predefined configurations from the +container setup whenever no explicit configuration has been provided and +the default descriptors are either not available or do not contain +relevant configurations. This gives additional control on the Jakarta XML Web Services +client and endpoint setup to administrators, as the container setup can +be managed independently from the deployed applications.
+JBossWS hence accesses the webservices subsystem the same as explained +above for explicitly named configuration; the default configuration +names used for look are

+
+
+
    +
  • +

    the endpoint implementation class (full qualified name), in case of +Jakarta XML Web Services endpoints;

    +
  • +
  • +

    the service endpoint interface (full qualified name), in case of +Jakarta XML Web Services clients.
    +Dispatch clients are not automatically configured. If no configuration +is found using names computed as above, the Standard-Client-Config and +Standard-Endpoint-Config configurations are used for clients and +endpoints respectively

    +
  • +
+
+
+
+
+
+

17.5.9. Authentication

+
+
Authentication
+
+

Here the simplest way to authenticate a web service user with JBossWS is +explained.

+
+
+

First we secure the access to the SLSB as we would do for normal (non +web service) invocations: this can be easily done through the +@RolesAllowed, @PermitAll, @DenyAll annotation. The allowed user roles +can be set with these annotations both on the bean class and on any of +its business methods.

+
+
+
+
@Stateless
+@RolesAllowed("friend")
+public class EndpointEJB implements EndpointInterface
+{
+  ...
+}
+
+
+
+

Similarly POJO endpoints are secured the same way as we do for normal +web applications in web.xml:

+
+
+
+
<security-constraint>
+  <web-resource-collection>
+    <web-resource-name>All resources</web-resource-name>
+    <url-pattern>/*</url-pattern>
+  </web-resource-collection>
+  <auth-constraint>
+    <role-name>friend</role-name>
+  </auth-constraint>
+</security-constraint>
+ 
+<security-role>
+  <role-name>friend</role-name>
+</security-role>
+
+
+
+
Specify the security domain
+
+

Next, specify the security domain for this deployment. This is performed +using the @SecurityDomain annotation for EJB3 endpoints

+
+
+
+
@Stateless
+@SecurityDomain("JBossWS")
+@RolesAllowed("friend")
+public class EndpointEJB implements EndpointInterface
+{
+  ...
+}
+
+
+
+

or modifying the jboss-web.xml for POJO endpoints

+
+
+
+
<jboss-web>
+<security-domain>JBossWS</security-domain>
+</jboss-web>
+
+
+
+

The security domain as well as its the authentication and authorization +mechanisms are defined differently depending on the application server +version in use.

+
+
+
+
Use BindingProvider to set principal/credential
+
+

A web service client may use the jakarta.xml.ws.BindingProvider +interface to set the username/password combination

+
+
+
+
URL wsdlURL = new File("resources/jaxws/samples/context/WEB-INF/wsdl/TestEndpoint.wsdl").toURL();
+QName qname = new QName("http://org.jboss.ws/jaxws/context", "TestEndpointService");
+Service service = Service.create(wsdlURL, qname);
+port = (TestEndpoint)service.getPort(TestEndpoint.class);
+ 
+BindingProvider bp = (BindingProvider)port;
+bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "kermit");
+bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "thefrog");
+
+
+
+
+
Using HTTP Basic Auth for security
+
+

To enable HTTP Basic authentication you use the @WebContext annotation +on the bean class

+
+
+
+
@Stateless
+@SecurityDomain("JBossWS")
+@RolesAllowed("friend")
+@WebContext(contextRoot="/my-cxt", urlPattern="/*", authMethod="BASIC", transportGuarantee="NONE", secureWSDLAccess=false)
+public class EndpointEJB implements EndpointInterface
+{
+  ...
+}
+
+
+
+

For POJO endpoints, we modify the web.xml adding the auth-method +element:

+
+
+
+
<login-config>
+  <auth-method>BASIC</auth-method>
+  <realm-name>Test Realm</realm-name>
+</login-config>
+
+
+
+
+
+
+

17.5.10. Apache CXF integration

+
+
JBossWS integration layer with Apache CXF
+
+

All Jakarta XML Web Services functionalities provided by JBossWS on top of WildFly are +currently served through a proper integration of the JBoss Web Services +stack with most of the Apache CXF project +modules.

+
+
+

Apache CXF is an open source services framework. It allows building and +developing services using frontend programming APIs (including Jakarta XML Web Services), +with services speaking a variety of protocols such as SOAP and XML/HTTP +over a variety of transports such as HTTP and Jakarta Messaging.

+
+
+

The integration layer ( JBossWS-CXF in short hereafter) is mainly +meant for:

+
+
+
    +
  • +

    allowing using standard webservices APIs (including Jakarta XML Web Services) on +WildFly; this is performed internally leveraging Apache CXF without +requiring the user to deal with it;

    +
  • +
  • +

    allowing using Apache CXF advanced features (including WS-*) on top of +WildFly without requiring the user to deal with / setup / care about the +required integration steps for running in such a container.

    +
  • +
+
+
+

In order for achieving the goals above, the JBossWS-CXF integration +supports the JBoss ws endpoint deployment mechanism and comes with many +internal customizations on top of Apache CXF.

+
+
+

In the next sections a list of technical suggestions and notes on the +integration is provided; please also refer to the +Apache CXF official documentation +for in-depth details on the CXF architecture.

+
+
+
+
Building WS applications the JBoss way
+
+

The Apache CXF client and endpoint configuration as explained in the +Apache CXF official user guide is +heavily based on Spring. Apache CXF basically parses Spring cxf.xml +descriptors; those may contain any basic bean plus specific ws client +and endpoint beans which CXF has custom parsers for. Apache CXF can be +used to deploy webservice endpoints on any servlet container by +including its libraries in the deployment; in such a scenario Spring +basically serves as a convenient configuration option, given direct +Apache CXF API usage won’t be very handy. Similar reasoning applies on +client side, where a Spring based descriptor offers a shortcut for +setting up Apache CXF internals.

+
+
+

This said, nowadays almost any Apache CXF functionality can be +configured and used through direct API usage, without Spring. As a +consequence of that and given the considerations in the sections below, +the JBossWS integration with Apache CXF does not rely on Spring +descriptors.

+
+
+
Portable applications
+
+

WildFly is much more then a servlet container; it actually provides +users with a fully compliant target platform for Jakarta EE applications.

+
+
+

Generally speaking, users are encouraged to write portable +applications by relying only on Jakarta XML Web Services specification whenever +possible. That would by the way ensure easy migrations to and from other +compliant platforms. Being a Jakarta EE container, WildFly already comes +with a Jakarta XML Web Services compliant implementation, which is basically Apache CXF +plus the JBossWS-CXF integration layer. So users just need to write +their Jakarta XML Web Services application; no need for embedding any Apache CXF or any +ws related dependency library in user deployments. Please refer to the +Jakarta XML Web Services User Guide section of the documentation for +getting started.

+
+
+

WS-* usage (including WS-Security, WS-Addressing, WS-ReliableMessaging, +…​) should also be configured in the most portable way; that is by +relying on proper WS-Policy assertions on the endpoint WSDL contracts, +so that client and endpoint configuration is basically a matter of +setting few ws context properties. The WS-* related sections of this +documentation cover all the details on configuring applications making +use of WS-* through policies.

+
+
+

As a consequence of the reasoning above, the JBossWS-CXF integration is +currently built directly on the Apache CXF API and aims at allowing +users to configure webservice clients and endpoints without Spring +descriptors.

+
+
+
+
Direct Apache CXF API usage
+
+

Whenever users can’t really meet their application requirements with +Jakarta XML Web Services plus WS-Policy, it is of course still possible to rely on direct +Apache CXF API usage (given that’s included in the AS), loosing the Java +EE portability of the application. That could be the case of a user +needing specific Apache CXF functionalities, or having to consume WS-* +enabled endpoints advertised through legacy wsdl contracts without +WS-Policy assertions.

+
+
+

On server side, direct Apache CXF API usage might not be always possible +or end up being not very easy. For this reason, the JBossWS integration +comes with a convenient alternative through customization options in the +jboss-webservices.xml descriptor described below on this page. +Properties can be declared in jboss-webservices.xml to control Apache +CXF internals like interceptors, features, etc.

+
+
+
+
+
Bus usage
+
+
Creating a Bus instance
+
+

Most of the Apache CXF features are configurable using the +org.apache.cxf.Bus class. While for basic Jakarta XML Web Services usage the user might +never need to explicitly deal with Bus, using Apache CXF specific +features generally requires getting a handle to a org.apache.cxf.Bus +instance. This can happen on client side as well as in a ws endpoint or +handler business code.

+
+
+

New Bus instances are produced by the currently configured +org.apache.cxf.BusFactory implementation the following way:

+
+
+
+
Bus bus = BusFactory.newInstance().createBus();
+
+
+
+

The algorithm for selecting the actual implementation of BusFactory to +be used leverages the Service API, basically looking for optional +configurations in META-INF/services/…​ location using the current +thread context classloader. JBossWS-CXF integration comes with its own +implementation of BusFactory, +org.jboss.wsf.stack.cxf.client.configuration.JBossWSBusFactory, that +allows for seamless setup of JBossWS customizations on top of Apache +CXF. So, assuming the JBossWS-CXF libraries are available in the current +thread context classloader, the JBossWSBusFactory is automatically +retrieved by the BusFactory.newInstance() call above.

+
+
+

JBossWS users willing to explicitly use functionalities of +org.apache.cxf.bus.CXFBusFactory , get the same API with JBossWS +additions through JBossWSBusFactory:

+
+
+
+
Map<Class, Object> myExtensions = new HashMap<Class, Object>();
+myExtensions.put(...);
+Bus bus = new JBossWSBusFactory().createBus(myExtensions);
+
+
+
+
+
Using existing Bus instances
+
+

Apache CXF keeps reference to a global default Bus instance as well as +to a thread default bus for each thread. That is performed through +static members in org.apache.cxf.BusFactory , which also comes with +the following methods in the public API:

+
+
+
+
public static synchronized Bus getDefaultBus()
+public static synchronized Bus getDefaultBus(boolean createIfNeeded)
+public static synchronized void setDefaultBus(Bus bus)
+public static Bus getThreadDefaultBus()
+public static Bus getThreadDefaultBus(boolean createIfNeeded)
+public static void setThreadDefaultBus(Bus bus)
+
+
+
+

Please note that the default behaviour of getDefaultBus() / +getDefaultBus(true) / getThreadDefaultBus() / +getThreadDefaultBus(true) is to create a new Bus instance if that’s +not set yet. Moreover getThreadDefaultBus() and +getThreadDefaultBus(true) first fallback to retrieving the configured +global default bus before actually trying creating a new instance (and +the created new instance is set as global default bus if that was not +set there yet).

+
+
+

The drawback of this mechanism (which is basically fine in JSE +environment) is that when running in WildFly container you need to be +careful in order not to (mis)use a bus over multiple applications +(assuming the Apache CXF classes are loaded by the same classloader, +which is currently the case with WildFly).

+
+
+

Here is a list of general suggestions to avoid problems when running +in-container:

+
+
+
    +
  • +

    forget about the global default bus; you don’t need that, so don’t do +getDefaultBus() / getDefaultBus(true) / setDefaultBus() in +your code;

    +
  • +
  • +

    avoid getThreadDefaultBus() / getThreadDefaultBus(true) unless +you already know for sure the default bus is already set;

    +
  • +
  • +

    keep in mind thread pooling whenever you customize a thread default +bus instance (for instance adding bus scope interceptors, …​), as that +thread and bus might be later reused; so either shutdown the bus when +you’re done or explicitly remove it from the BusFactory thread +association.

    +
  • +
+
+
+

Finally, remember that each time you explictly create a new Bus instance +(factory.createBus()) that is set as thread default bus and global +default bus if those are not set yet. The JAXWS Provider +implementation also creates Bus instances internally, in particular +the JBossWS version of JAXWS Provider makes sure the default bus is +never internally used and instead a new Bus is created if required +(more details on this in the next paragraph).

+
+
+
+
Bus selection strategies for JAXWS clients
+
+

JAXWS clients require an Apache CXF Bus to be available; the client is +registered within the Bus and the Bus affects the client behavior (e.g. +through the configured CXF interceptors). The way a bus is internally +selected for serving a given JAXWS client is very important, especially +for in-container clients; for this reason, JBossWS users can choose the +preferred Bus selection strategy. The strategy is enforced in the +jakarta.xml.ws.spi.Provider implementation from the JBossWS integration, +being that called whenever a JAXWS Service (client) is requested.

+
+
+Thread bus strategy (THREAD_BUS) +
+

Each time the vanilla JAXWS api is used to create a Bus, the JBossWS-CXF +integration will automatically make sure a Bus is currently associated +to the current thread in the BusFactory. If that’s not the case, a new +Bus is created and linked to the current thread (to prevent the user +from relying on the default Bus). The Apache CXF engine will then create +the client using the current thread Bus.

+
+
+

This is the default strategy, and the most straightforward one in Java +SE environments; it lets users automatically reuse a previously created +Bus instance and allows using customized Bus that can possibly be +created and associated to the thread before building up a JAXWS client.

+
+
+

The drawback of the strategy is that the link between the Bus instance +and the thread needs to be eventually cleaned up (when not needed +anymore). This is really evident in a Jakarta EE environment (hence when +running in-container), as threads from pools (e.g. serving web requests) +are re-used.

+
+
+

When relying on this strategy, the safest approach to be sure of +cleaning up the link is to surround the JAXWS client with a +try/finally block as below:

+
+
+
+
try {
+  Service service = Service.create(wsdlURL, serviceQName);
+  MyEndpoint port = service.getPort(MyEndpoint.class);
+  //...
+} finally {
+  BusFactory.setThreadDefaultBus(null);
+  // OR (if you don't need the bus and the client anymore)
+   Bus bus = BusFactory.getThreadDefaultBus(false);
+  bus.shutdown(true);
+}
+
+
+
+
+New bus strategy (NEW_BUS) +
+

Another strategy is to have the JAXWS Provider from the JBossWS +integration create a new Bus each time a JAXWS client is built. The main +benefit of this approach is that a fresh bus won’t rely on any formerly +cached information (e.g. cached WSDL / schemas) which might have changed +after the previous client creation. The main drawback is of course worse +performance as the Bus creation takes time.

+
+
+

If there’s a bus already associated to the current thread before the +JAXWS client creation, that is automatically restored when returning +control to the user; in other words, the newly created bus will be used +only for the created JAXWS client but won’t stay associated to the +current thread at the end of the process. Similarly, if the thread was +not associated to any bus before the client creation, no bus will be +associated to the thread at the end of the client creation.

+
+
+
+Thread context classloader bus strategy (TCCL_BUS) +
+

The last strategy is to have the bus created for serving the client be +associated to the current thread context classloader (TCCL). That +basically means the same Bus instance is shared by JAXWS clients running +when the same TCCL is set. This is particularly interesting as each web +application deployment usually has its own context classloader, so this +strategy is possibly a way to keep the number of created Bus instances +bound to the application number in WildFly container.

+
+
+

If there’s a bus already associated to the current thread before the +JAXWS client creation, that is automatically restored when returning +control to the user; in other words, the bus corresponding to the +current thread context classloader will be used only for the created +JAXWS client but won’t stay associated to the current thread at the end +of the process. If the thread was not associated to any bus before the +client creation, a new bus will be created (and later user for any other +client built with this strategy and the same TCCL in place); no bus will +be associated to the thread at the end of the client creation.

+
+
+
+Strategy configuration +
+

Users can request a given Bus selection strategy to be used for the +client being built by specifying one of the following JBossWS features +(which extend jakarta . xml . ws . WebServiceFeature):

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
FeatureStrategy

org.jboss.wsf.stack.cxf.client.UseThreadBusFeature

THREAD_BUS

org.jboss.wsf.stack.cxf.client.UseNewBusFeature

NEW_BUS

org.jboss.wsf.stack.cxf.client.UseTCCLBusFeature

TCCL_BUS

+
+

The feature is specified as follows:

+
+
+
+
Service service = Service.create(wsdlURL, serviceQName, new UseThreadBusFeature());
+
+
+
+

If no feature is explicitly specified, the system default strategy is +used, which can be modified through the +org.jboss.ws.cxf.jaxws-client.bus.strategy system property when +starting the JVM. The valid values for the property are THREAD_BUS, +NEW_BUS and TCCL_BUS. The default is THREAD_BUS.

+
+
+
+
+
+
Server Side Integration Customization
+
+

The JBossWS-CXF server side integration takes care of internally +creating proper Apache CXF structures (including a Bus instance, of +course) for the provided ws deployment. Should the deployment include +multiple endpoints, those would all live within the same Apache CXF Bus, +which would of course be completely separated by the other deployments' +bus instances.

+
+
+

While JBossWS sets sensible defaults for most of the Apache CXF +configuration options on server side, users might want to fine tune the +Bus instance that’s created for their deployment; a +jboss-webservices.xml descriptor can be used for deployment level +customizations.

+
+
+
Deployment descriptor properties
+
+

The jboss-webservices.xml descriptor can be used to +provide property values.

+
+
+
+
<webservices xmlns="http://www.jboss.com/xml/ns/javaee" version="1.2">
+  ...
+  <property>
+    <name>...</name>
+    <value>...</value>
+  </property>
+  ...
+</webservices>
+
+
+
+

JBossWS-CXF integration comes with a set of allowed property names to +control Apache CXF internals.

+
+
+WorkQueue configuration +
+

Apache CXF uses WorkQueue instances for dealing with some operations +(e.g. @Oneway requests processing). A +WorkQueueManager +is installed in the Bus as an extension and allows for adding / removing +queues as well as controlling the existing ones.

+
+
+

On server side, queues can be provided by using the +cxf.queue.<queue-name>.* properties in jboss-webservices.xml (e.g. +cxf.queue.default.maxQueueSize for controlling the max queue size of +the default workqueue). At deployment time, the JBossWS integration +can add new instances of +AutomaticWorkQueueImpl +to the currently configured WorkQueueManager; the properties below are +used to fill in parameter into the +AutomaticWorkQueueImpl +constructor:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDefault value

cxf.queue.<queue-name>.maxQueueSize

256

cxf.queue.<queue-name>.initialThreads

0

cxf.queue.<queue-name>.highWaterMark

25

cxf.queue.<queue-name>.lowWaterMark

5

cxf.queue.<queue-name>.dequeueTimeout

120000

+
+
+Policy alternative selector +
+

The Apache CXF policy engine supports different strategies to deal with +policy alternatives. JBossWS-CXF integration currently defaults to the +MaximalAlternativeSelector, +but still allows for setting different selector implementation using the +cxf.policy.alternativeSelector property in jboss-webservices.xml.

+
+
+
+MBean management +
+

Apache CXF allows managing its MBean objects that are installed into the +WildFly MBean server. The feature is enabled on a deployment basis +through the cxf.management.enabled property in +jboss-webservices.xml. The +cxf.management.installResponseTimeInterceptors property can also be +used to control installation of CXF response time interceptors, which +are added by default when enabling MBean management, but might not be +desired in some cases. Here is an example:

+
+
+
+
<webservices xmlns="http://www.jboss.com/xml/ns/javaee" version="1.2">
+  <property>
+    <name>cxf.management.enabled</name>
+    <value>true</value>
+  </property>
+  <property>
+    <name>cxf.management.installResponseTimeInterceptors</name>
+    <value>false</value>
+  </property>
+</webservices>
+
+
+
+
+Schema validation +
+

Schema validation of exchanged messages can also be enabled in +jboss-webservices.xml. Further details available +here.

+
+
+
+Interceptors +
+

The jboss-webservices.xml descriptor also allows specifying the +cxf.interceptors.in and cxf.interceptors.out properties; those +allows declaring interceptors to be attached to the Bus instance that’s +created for serving the deployment.

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+<webservices
+xmlns="http://www.jboss.com/xml/ns/javaee"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+version="1.2"
+xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee">
+ 
+<property>
+<name>cxf.interceptors.in</name>
+<value>org.jboss.test.ws.jaxws.cxf.interceptors.BusInterceptor</value>
+</property>
+<property>
+<name>cxf.interceptors.out</name>
+<value>org.jboss.test.ws.jaxws.cxf.interceptors.BusCounterInterceptor</value>
+</property>
+</webservices>
+
+
+
+
+Features +
+

The jboss-webservices.xml descriptor also allows specifying the +cxf.features property; that allows declaring features to be attached +to any endpoint belonging to the Bus instance that’s created for serving +the deployment.

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+<webservices
+xmlns="http://www.jboss.com/xml/ns/javaee"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+version="1.2"
+xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee">
+ 
+<property>
+<name>cxf.features</name>
+<value>org.apache.cxf.feature.FastInfosetFeature</value>
+</property>
+</webservices>
+
+
+
+
+WS-Discovery enablement +
+

WS-Discovery support can be turned on in jboss-webservices for the +current deployment. Further details available here.

+
+
+
+
+
+
Apache CXF interceptors
+
+

Apache CXF supports declaring interceptors using one of the following +approaches:

+
+
+
    +
  • +

    Annotation usage on endpoint classes ( +@org.apache.cxf.interceptor.InInterceptor, +@org.apache.cxf.interceptor.OutInterceptor)

    +
  • +
  • +

    Direct API usage on client side (through the +org.apache.cxf.interceptor.InterceptorProvider interface)

    +
  • +
  • +

    Spring descriptor usage ( cxf.xml)

    +
  • +
+
+
+

As the Spring descriptor usage is not supported, the JBossWS integration +adds an additional descriptor based approach to avoid requiring +modifications to the actual client/endpoint code. Users can declare +interceptors within predefined client and endpoint +configurations by specifying a list of interceptor class names for the +cxf.interceptors.in and cxf.interceptors.out properties.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
+xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
+<endpoint-config>
+<config-name>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointImpl</config-name>
+<property>
+<property-name>cxf.interceptors.in</property-name>
+<property-value>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointInterceptor,org.jboss.test.ws.jaxws.cxf.interceptors.FooInterceptor</property-value>
+</property>
+<property>
+<property-name>cxf.interceptors.out</property-name>
+<property-value>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointCounterInterceptor</property-value>
+</property>
+</endpoint-config>
+</jaxws-config>
+
+
+
+

A new instance of each specified interceptor class will be added to the +client or endpoint the configuration is assigned to. The interceptor +classes must have a no-argument constructor.

+
+
+
+
Apache CXF features
+
+

Apache CXF supports declaring features using one of the following +approaches:

+
+
+
    +
  • +

    Annotation usage on endpoint classes ( +@org.apache.cxf.feature.Features)

    +
  • +
  • +

    Direct API usage on client side (through extensions of the +org.apache.cxf.feature.AbstractFeature class)

    +
  • +
  • +

    Spring descriptor usage ( cxf.xml)

    +
  • +
+
+
+

As the Spring descriptor usage is not supported, the JBossWS integration +adds an additional descriptor based approach to avoid requiring +modifications to the actual client/endpoint code. Users can declare +features within predefined client and endpoint +configurations by specifying a list of feature class names for the +cxf.features property.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
+xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
+<endpoint-config>
+<config-name>Custom FI Config</config-name>
+<property>
+<property-name>cxf.features</property-name>
+<property-value>org.apache.cxf.feature.FastInfosetFeature</property-value>
+</property>
+</endpoint-config>
+</jaxws-config>
+
+
+
+

A new instance of each specified feature class will be added to the +client or endpoint the configuration is assigned to. The feature classes +must have a no-argument constructor.

+
+
+
+
Properties driven bean creation
+
+

Sections above explain how to declare CXF interceptors and features +through properties either in a client/endpoint predefined configuration +or in a jboss-webservices.xml descriptor. By getting the +feature/interceptor class name only specified, the container simply +tries to create a bean instance using the class default constructor. +This sets a limitation on the feature/interceptor configuration, unless +custom extensions of vanilla CXF classes are provided, with the default +constructor setting properties before eventually using the super +constructor.

+
+
+

To cope with this issue, JBossWS integration comes with a mechanism for +configuring simple bean hierarchies when building them up from +properties. Properties can have bean reference values, that is strings +starting with ##. Property reference keys are used to specify the bean +class name and the value for for each attribute. So for instance the +following properties:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyValue

cxf.features

foo, bar

##foo

org.jboss.Foo

##foo.par

34

##bar

org.jboss.Bar

##bar.color

blue

+
+

would result into the stack installing two feature instances, the same +that would have been created by

+
+
+
+
import org.Bar;
+import org.Foo;
+ 
+...
+ 
+Foo foo = new Foo();
+foo.setPar(34);
+Bar bar = new Bar();
+bar.setColor("blue");
+
+
+
+

The mechanism assumes that the classes are valid beans with proper +getter and setter methods; value objects are cast to the correct +primitive type by inspecting the class definition. Nested beans can of +course be configured.

+
+
+
+
HTTPConduit configuration
+
+

HTTP transport setup in Apache CXF is achieved through +org.apache.cxf.transport.http.HTTPConduit +configurations. +When running on top of the JBossWS integration, conduits can be +programmatically modified using the Apache CXF API as follows:

+
+
+
+
import org.apache.cxf.frontend.ClientProxy;
+import org.apache.cxf.transport.http.HTTPConduit;
+import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
+ 
+//set chunking threshold before using a Jakarta XML Web Services port client
+...
+HTTPConduit conduit = (HTTPConduit)ClientProxy.getClient(port).getConduit();
+HTTPClientPolicy client = conduit.getClient();
+ 
+client.setChunkingThreshold(8192);
+...
+
+
+
+

Users can also control the default values for the most common +HTTPConduit parameters by setting specific system properties; the +provided values will override Apache CXF defaut values.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription

cxf.client.allowChunking

A boolean to tell Apache CXF whether to allow +send messages using chunking.

cxf.client.chunkingThreshold

An integer value to tell Apache CXF the +threshold at which switching from non-chunking to chunking mode.

cxf.client.connectionTimeout

A long value to tell Apache CXF how many +milliseconds to set the connection timeout to

cxf.client.receiveTimeout

A long value to tell Apache CXF how many +milliseconds to set the receive timeout to

cxf.client.connection

A string to tell Apache CXF to use Keep-Alive or +close connection type

cxf.tls-client.disableCNCheck

A boolean to tell Apache CXF whether +disabling CN host name check or not

+
+

The vanilla Apache CXF defaults apply when the system properties above +are not set.

+
+
+
+
+

17.5.11. WS-Addressing

+
+

JBoss Web Services inherits full WS-Addressing capabilities from the +underlying Apache CXF implementation. Apache CXF provides support for +2004-08 and 1.0 versions of +WS-Addressing.

+
+
+
Enabling WS-Addressing
+
+

WS-Addressing can be turned on in multiple standard ways:

+
+
+
    +
  • +

    consuming a WSDL contract that specifies a WS-Addressing assertion / +policy

    +
  • +
  • +

    using the @jakarta.xml.ws.soap.Addressing annotation

    +
  • +
  • +

    using the jakarta.xml.ws.soap.AddressingFeature feature

    +
  • +
+
+
+ + + + + +
+ + +The supported addressing policy elements are: +
+
+
+
+
[http://www.w3.org/2005/02/addressing/wsdl]UsingAddressing
+[http://schemas.xmlsoap.org/ws/2004/08/addressing/policy]UsingAddressing
+[http://www.w3.org/2006/05/addressing/wsdl]UsingAddressing
+[http://www.w3.org/2007/05/addressing/metadata]Addressing
+
+
+
+

Alternatively, Apache CXF proprietary ways are also available:

+
+
+
    +
  • +

    specifying the  [http://cxf.apache.org/ws/addressing]addressing +feature for a given client/endpoint

    +
  • +
  • +

    using the org.apache.cxf.ws.addressing.WSAddressingFeature feature +through the API

    +
  • +
  • +

    manually configuring the Apache CXF addressing interceptors ( +org.apache.cxf.ws.addressing.MAPAggregator and +org.apache.cxf.ws.addressing.soap.MAPCodec)

    +
  • +
  • +

    setting the org.apache.cxf.ws.addressing.using property in the +message context

    +
  • +
+
+
+

Please refer to the the Apache CXF documentation for further information +on the proprietary +WS-Addressing setup and +configuration details.

+
+
+
+
WS-Addressing Policy
+
+

The WS-Addressing support is also perfectly integrated with the Apache +CXF WS-Policy engine.

+
+
+

This basically means that the WSDL contract generation for code-first +endpoint deployment is policy-aware: users can annotate endpoints with +the @ jakarta.xml.ws.soap. Addressing annotation and expect the +published WSDL contract to contain proper WS-Addressing policy (assuming +no wsdlLocation is specified in the endpoint’s @WebService +annotation).

+
+
+

Similarly, on client side users do not need to manually specify the +jakarta.xml.ws.soap.AddressingFeature feature, as the policy engine is +able to properly process the WS-Addressing policy in the consumed WSDL +and turn on addressing as requested.

+
+
+
+
Example
+
+

Here is an example showing how to simply enable WS-Addressing through +WS-Policy.

+
+
+
Endpoint
+
+

A simple Jakarta XML Web Services endpoint is prepared using a java-first approach; +WS-Addressing is enforced through @Addressing annotation and no +wsdlLocation is provided in @WebService:

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsa;
+ 
+import jakarta.jws.WebService;
+import jakarta.xml.ws.soap.Addressing;
+import org.jboss.logging.Logger;
+ 
+@WebService
+(
+   portName = "AddressingServicePort",
+   serviceName = "AddressingService",
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wsaddressing",
+   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsa.ServiceIface"
+)
+@Addressing(enabled=true, required=true)
+public class ServiceImpl implements ServiceIface
+{
+   private Logger log = Logger.getLogger(this.getClass());
+ 
+   public String sayHello(String name)
+   {
+      return "Hello " + name + "!";
+   }
+}
+
+
+
+

The WSDL contract that’s generated at deploy time and published looks +like this:

+
+
+
+
<wsdl:definitions ....>
+...
+  <wsdl:binding name="AddressingServiceSoapBinding" type="tns:ServiceIface">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsaw:UsingAddressing wsdl:required="true"/>
+    <wsp:PolicyReference URI="#AddressingServiceSoapBinding_WSAM_Addressing_Policy"/>
+ 
+    <wsdl:operation name="sayHello">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="sayHello">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="sayHelloResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+ 
+  </wsdl:binding>
+  <wsdl:service name="AddressingService">
+    <wsdl:port binding="tns:AddressingServiceSoapBinding" name="AddressingServicePort">
+      <soap:address location="http://localhost:8080/jaxws-samples-wsa"/>
+    </wsdl:port>
+  </wsdl:service>
+    <wsp:Policy wsu:Id="AddressingServiceSoapBinding_WSAM_Addressing_Policy"
+       xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
+      <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
+        <wsp:Policy/>
+      </wsam:Addressing>
+    </wsp:Policy>
+</wsdl:definitions>
+
+
+
+
+
Client
+
+

Since the WS-Policy engine is on by default, the client side code is +basically a pure Jakarta XML Web Services client app:

+
+
+
+
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wsaddressing", "AddressingService");
+URL wsdlURL = new URL("http://localhost:8080/jaxws-samples-wsa?wsdl");
+Service service = Service.create(wsdlURL, serviceName);
+ServiceIface proxy = (ServiceIface)service.getPort(ServiceIface.class);
+proxy.sayHello("World");
+
+
+
+
+
+
+

17.5.12. WS-Security

+
+
WS-Security overview
+
+

WS-Security provides the means to secure your services beyond transport +level protocols such as HTTPS. Through a number of standards such as +XML-Encryption, and headers defined +in the +WS-Security +standard, it allows you to:

+
+
+
    +
  • +

    Pass authentication tokens between services.

    +
  • +
  • +

    Encrypt messages or parts of messages.

    +
  • +
  • +

    Sign messages.

    +
  • +
  • +

    Timestamp messages.

    +
  • +
+
+
+

WS-Security makes heavy use of public and private key cryptography. It +is helpful to understand these basics to really understand how to +configure WS-Security. With public key cryptography, a user has a pair +of public and private keys. These are generated using a large prime +number and a key function.

+
+
+

Public_key_making.png

+
+
+

The keys are related mathematically, but cannot be derived from one +another. With these keys we can encrypt messages. For example, if Bob +wants to send a message to Alice, he can encrypt a message using her +public key. Alice can then decrypt this message using her private key. +Only Alice can decrypt this message as she is the only one with the +private key.

+
+
+

Public_key_encryption-mod.svg.png

+
+
+

Messages can also be signed. This allows you to ensure the authenticity +of the message. If Alice wants to send a message to Bob, and Bob wants +to be sure that it is from Alice, Alice can sign the message using her +private key. Bob can then verify that the message is from Alice by using +her public key.

+
+
+

250px-Public_key_making.svg.png

+
+
+
+
JBoss WS-Security support
+
+

JBoss Web Services supports many real world scenarios requiring +WS-Security functionalities. This includes signature and encryption +support through X509 certificates, authentication and authorization +through username tokens as well as all ws-security configurations +covered by WS- +SecurityPolicy +specification.

+
+
+

As well as for other WS-* features, the core of +WS-Security functionalities is provided through the Apache CXF engine. +On top of that the JBossWS integration adds few configuration +enhancements to simplify the setup of WS-Security enabled endpoints.

+
+
+
Apache CXF WS-Security implementation
+
+

Apache CXF features a top class WS-Security module supporting multiple +configurations and easily extendible.

+
+
+

The system is based on interceptors that delegate to +Apache WSS4J for the low level security +operations. Interceptors can be configured in different ways, either +through Spring configuration files or directly using Apache CXF client +API. Please refer to the +Apache CXF documentation if +you’re looking for more details.

+
+
+

Recent versions of Apache CXF, however, introduced support for +WS-Security Policy, which aims at moving most of the security +configuration into the service contract (through policies), so that +clients can easily be configured almost completely automatically from +that. This way users do not need to manually deal with configuring / +installing the required interceptors; the Apache CXF WS-Policy engine +internally takes care of that instead.

+
+
+WS-Security Policy support +
+

WS-SecurityPolicy describes the actions that are required to securely +communicate with a service advertised in a given WSDL contract. The WSDL +bindings / operations reference WS-Policy fragments with the security +requirements to interact with the service. The +WS-SecurityPolicy +specification allows for specifying things like asymmetric/symmetric +keys, using transports (https) for encryption, which parts/headers to +encrypt or sign, whether to sign then encrypt or encrypt then sign, +whether to include timestamps, whether to use derived keys, etc.

+
+
+

However some mandatory configuration elements are not covered by +WS-SecurityPolicy, basically because they’re not meant to be public / +part of the published endpoint contract; those include things such as +keystore locations, usernames and passwords, etc. Apache CXF allows +configuring these elements either through Spring xml descriptors or +using the client API / annotations. Below is the list of supported +configuration properties:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ws-security.usernameThe username used for UsernameToken policy +assertions

ws-security.password

The password used for UsernameToken policy +assertions. If not specified, the callback handler will be called.

ws-security.callback-handler

The WSS4J security CallbackHandler that +will be used to retrieve passwords for keystores and UsernameTokens.

ws-security.signature.properties

The properties file/object that +contains the WSS4J properties for configuring the signature keystore and +crypto objects

ws-security.encryption.properties

The properties file/object that +contains the WSS4J properties for configuring the encryption keystore +and crypto objects

ws-security.signature.username

The username or alias for the key in +the signature keystore that will be used. If not specified, it uses the +the default alias set in the properties file. If that’s also not set, +and the keystore only contains a single key, that key will be used.

ws-security.encryption.username

The username or alias for the key in +the encryption keystore that will be used. If not specified, it uses the +the default alias set in the properties file. If that’s also not set, +and the keystore only contains a single key, that key will be used. For +the web service provider, the useReqSigCert keyword can be used to +accept (encrypt to) any client whose public key is in the service’s +truststore (defined in ws-security.encryption.properties.)

ws-security.signature.crypto

Instead of specifying the signature +properties, this can point to the full WSS4J Crypto object. This can +allow easier "programmatic" configuration of the Crypto information."

ws-security.encryption.crypto

Instead of specifying the encryption +properties, this can point to the full WSS4J Crypto object. This can +allow easier "programmatic" configuration of the Crypto information."

ws-security.enable.streaming

Enable streaming (StAX based) processing +of WS-Security messages

+
+

Here is an example of configuration using the client API:

+
+
+
+
Map<String, Object> ctx = ((BindingProvider)port).getRequestContext();
+ctx.put("ws-security.encryption.properties", properties);
+port.echoString("hello");
+
+
+
+

Please refer to the +Apache CXF +documentation for additional configuration details.

+
+
+
+
+
JBossWS configuration additions
+
+

In order for removing the need of Spring on server side for setting up +WS-Security configuration properties not covered by policies, the +JBossWS integration allows for getting those pieces of information from +a defined endpoint configuration. Endpoint +configurationscan include property declarations and endpoint +implementations can be associated with a given endpoint configuration +using the @EndpointConfig annotation.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
+  <endpoint-config>
+    <config-name>Custom WS-Security Endpoint</config-name>
+    <property>
+      <property-name>ws-security.signature.properties</property-name>
+      <property-value>bob.properties</property-value>
+    </property>
+    <property>
+      <property-name>ws-security.encryption.properties</property-name>
+      <property-value>bob.properties</property-value>
+    </property>
+    <property>
+      <property-name>ws-security.signature.username</property-name>
+      <property-value>bob</property-value>
+    </property>
+    <property>
+      <property-name>ws-security.encryption.username</property-name>
+      <property-value>alice</property-value>
+    </property>
+    <property>
+      <property-name>ws-security.callback-handler</property-name>
+      <property-value>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback</property-value>
+    </property>
+  </endpoint-config>
+</jaxws-config>
+
+
+
+
+
import jakarta.jws.WebService;
+import org.jboss.ws.api.annotation.EndpointConfig;
+ 
+@WebService
+(
+   portName = "SecurityServicePort",
+   serviceName = "SecurityService",
+   wsdlLocation = "WEB-INF/wsdl/SecurityService.wsdl",
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy",
+   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.basic.ServiceIface"
+)
+@EndpointConfig(configFile = "WEB-INF/jaxws-endpoint-config.xml", configName = "Custom WS-Security Endpoint")
+public class ServiceImpl implements ServiceIface
+{
+   public String sayHello()
+   {
+      return "Secure Hello World!";
+   }
+}
+
+
+
+
+
Apache CXF annotations
+
+

The JBossWS configuration additions allow for a descriptor approach to +the WS-Security Policy engine configuration. If you prefer to provide +the same information through an annotation approach, you can leverage +the Apache CXF @org.apache.cxf.annotations.EndpointProperties +annotation:

+
+
+
+
@WebService(
+   ...
+)
+@EndpointProperties(value = {
+      @EndpointProperty(key = "ws-security.signature.properties", value = "bob.properties"),
+      @EndpointProperty(key = "ws-security.encryption.properties", value = "bob.properties"),
+      @EndpointProperty(key = "ws-security.signature.username", value = "bob"),
+      @EndpointProperty(key = "ws-security.encryption.username", value = "alice"),
+      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback")
+      }
+)
+public class ServiceImpl implements ServiceIface {
+   ...
+}
+
+
+
+
+
+
Examples
+
+

In this section some sample of WS-Security service endpoints and clients +are provided. Please note they’re only meant as tutorials; you should +really careful isolate the ws-security policies / assertion that best +suite your security needs before going to production environment.

+
+
+ + + + + +
+ + +The following sections provide directions and examples on understanding +some of the configuration options for WS-Security engine. Please note +the implementor remains responsible for assessing the application +requirements and choosing the most suitable security policy for them. +
+
+
+
Signature and encryption
+
+Endpoint +
+

First of all you need to create the web service endpoint using Jakarta XML Web Services. +While this can generally be achieved in different ways, it’s required to +use a contract-first approach when using WS-Security, as the policies +declared in the wsdl are parsed by the Apache CXF engine on both server +and client sides. So, here is an example of WSDL contract enforcing +signature and encryption using X 509 certificates (the referenced schema +is omitted):

+
+
+
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" name="SecurityService"
+  xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+  xmlns="http://schemas.xmlsoap.org/wsdl/"
+  xmlns:wsp="http://www.w3.org/ns/ws-policy"
+        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+        xmlns:wsaws="http://www.w3.org/2005/08/addressing"
+        xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+  <types>
+    <xsd:schema>
+      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" schemaLocation="SecurityService_schema1.xsd"/>
+    </xsd:schema>
+  </types>
+  <message name="sayHello">
+    <part name="parameters" element="tns:sayHello"/>
+  </message>
+  <message name="sayHelloResponse">
+    <part name="parameters" element="tns:sayHelloResponse"/>
+  </message>
+  <portType name="ServiceIface">
+    <operation name="sayHello">
+      <input message="tns:sayHello"/>
+      <output message="tns:sayHelloResponse"/>
+    </operation>
+  </portType>
+  <binding name="SecurityServicePortBinding" type="tns:ServiceIface">
+    <wsp:PolicyReference URI="#SecurityServiceSignThenEncryptPolicy"/>
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <operation name="sayHello">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+  </binding>
+  <service name="SecurityService">
+    <port name="SecurityServicePort" binding="tns:SecurityServicePortBinding">
+      <soap:address location="http://localhost:8080/jaxws-samples-wssePolicy-sign-encrypt"/>
+    </port>
+  </service>
+ 
+  <wsp:Policy wsu:Id="SecurityServiceSignThenEncryptPolicy" xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:AsymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:InitiatorToken>
+              <wsp:Policy>
+                <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:WssX509V1Token11/>
+                  </wsp:Policy>
+                  </sp:X509Token>
+              </wsp:Policy>
+            </sp:InitiatorToken>
+            <sp:RecipientToken>
+              <wsp:Policy>
+                <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
+                  <wsp:Policy>
+                    <sp:WssX509V1Token11/>
+                  </wsp:Policy>
+                </sp:X509Token>
+              </wsp:Policy>
+            </sp:RecipientToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:TripleDesRsa15/>
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Lax/>
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp/>
+            <sp:EncryptSignature/>
+            <sp:OnlySignEntireHeadersAndBody/>
+            <sp:SignBeforeEncrypting/>
+          </wsp:Policy>
+        </sp:AsymmetricBinding>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body/>
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body/>
+        </sp:EncryptedParts>
+        <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportRefIssuerSerial/>
+          </wsp:Policy>
+        </sp:Wss10>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+</definitions>
+
+
+
+

The service endpoint can be generated using the wsconsume tool and +then enriched with a @EndpointConfig annotation:

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.basic;
+ 
+import jakarta.jws.WebService;
+import org.jboss.ws.api.annotation.EndpointConfig;
+ 
+@WebService
+(
+   portName = "SecurityServicePort",
+   serviceName = "SecurityService",
+   wsdlLocation = "WEB-INF/wsdl/SecurityService.wsdl",
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy",
+   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.basic.ServiceIface"
+)
+@EndpointConfig(configFile = "WEB-INF/jaxws-endpoint-config.xml", configName = "Custom WS-Security Endpoint")
+public class ServiceImpl implements ServiceIface
+{
+   public String sayHello()
+   {
+      return "Secure Hello World!";
+   }
+}
+
+
+
+

The referenced jaxws-endpoint-config.xml descriptor is used to provide +a custom endpoint configuration with the required server side +configuration properties; this tells the engine which certificate / key +to use for signature / signature verification and for encryption / +decryption:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
+  <endpoint-config>
+    <config-name>Custom WS-Security Endpoint</config-name>
+    <property>
+      <property-name>ws-security.signature.properties</property-name>
+      <property-value>bob.properties</property-value>
+    </property>
+    <property>
+      <property-name>ws-security.encryption.properties</property-name>
+      <property-value>bob.properties</property-value>
+    </property>
+    <property>
+      <property-name>ws-security.signature.username</property-name>
+      <property-value>bob</property-value>
+    </property>
+    <property>
+      <property-name>ws-security.encryption.username</property-name>
+      <property-value>alice</property-value>
+    </property>
+    <property>
+      <property-name>ws-security.callback-handler</property-name>
+      <property-value>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback</property-value>
+    </property>
+  </endpoint-config>
+</jaxws-config>
+
+
+
+
    +
  1. +

    the bob.properties configuration file is also referenced above; it +includes the WSS4J Crypto properties which in turn link to the keystore +file, type and the alias/password to use for accessing it:

    +
  2. +
+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=PKCS
+org.apache.ws.security.crypto.merlin.keystore.password=password
+org.apache.ws.security.crypto.merlin.keystore.alias=bob
+org.apache.ws.security.crypto.merlin.keystore.file=bob.pkcs12
+
+
+
+

A callback handler for the letting Apache CXF access the keystore is +also provided:

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.basic;
+ 
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import org.apache.ws.security.WSPasswordCallback;
+ 
+public class KeystorePasswordCallback implements CallbackHandler {
+   private Map<String, String> passwords = new HashMap<String, String>();
+ 
+   public KeystorePasswordCallback() {
+      passwords.put("alice", "password");
+      passwords.put("bob", "password");
+   }
+ 
+   /**
+    * It attempts to get the password from the private
+    * alias/passwords map.
+    */
+   public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+      for (int i = 0; i < callbacks.length; i++) {
+         WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
+ 
+         String pass = passwords.get(pc.getIdentifier());
+         if (pass != null) {
+            pc.setPassword(pass);
+            return;
+         }
+      }
+   }
+ 
+   /**
+    * Add an alias/password pair to the callback mechanism.
+    */
+   public void setAliasPassword(String alias, String password) {
+      passwords.put(alias, password);
+   }
+}
+
+
+
+

Assuming the bob.pkcs12 keystore has been properly generated and contains +Bob’s (server) full key (private/certificate + public key) as well as +Alice’s (client) public key, we can proceed to packaging the endpoint. +Here is the expected content (the endpoint is a POJO one in a war +archive, but EJB3 endpoints in jar archives are of course also +supported):

+
+
+
+
alessio@inuyasha /dati/jbossws/stack/cxf/trunk $ jar -tvf ./modules/testsuite/cxf-tests/target/test-libs/jaxws-samples-wsse-policy-sign-encrypt.war
+     0 Thu Jun 16 18:50:48 CEST 2011 META-INF/
+   140 Thu Jun 16 18:50:46 CEST 2011 META-INF/MANIFEST.MF
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/
+   586 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/web.xml
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/
+  1687 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/KeystorePasswordCallback.class
+   383 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/ServiceIface.class
+  1070 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/ServiceImpl.class
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/
+   705 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/SayHello.class
+  1069 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/SayHelloResponse.class
+  1225 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/jaxws-endpoint-config.xml
+     0 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/
+  4086 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/SecurityService.wsdl
+   653 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/SecurityService_schema1.xsd
+  1820 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/classes/bob.pkcs12
+   311 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/classes/bob.properties
+
+
+
+

As you can see, the jaxws classes generated by the tools are of course +also included, as well as a basic web.xml referencing the endpoint +bean:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<web-app
+   version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+   <servlet>
+      <servlet-name>TestService</servlet-name>
+      <servlet-class>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.ServiceImpl</servlet-class>
+   </servlet>
+   <servlet-mapping>
+      <servlet-name>TestService</servlet-name>
+      <url-pattern>/*</url-pattern>
+   </servlet-mapping>
+</web-app>
+
+
+
+ + + + + +
+ + +If you’re deploying the endpoint archive on WildFly, remember to add a +dependency to org.apache.ws.security module in the MANIFEST.MF file. +
+
+
+
+
Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.7.1
+Created-By: 17.0-b16 (Sun Microsystems Inc.)
+Dependencies: org.apache.ws.security
+
+
+
+
+Client +
+

You start by consuming the published WSDL contract using the wsconsume +tool on client side too. Then you simply invoke the the endpoint as a +standard Jakarta XML Web Services one:

+
+
+
+
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
+URL wsdlURL = new URL(serviceURL + "?wsdl");
+Service service = Service.create(wsdlURL, serviceName);
+ServiceIface proxy = (ServiceIface)service.getPort(ServiceIface.class);
+ 
+((BindingProvider)proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, new KeystorePasswordCallback());
+((BindingProvider)proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES,
+     Thread.currentThread().getContextClassLoader().getResource("META-INF/alice.properties"));
+((BindingProvider)proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES,
+     Thread.currentThread().getContextClassLoader().getResource("META-INF/alice.properties"));
+((BindingProvider)proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "alice");
+((BindingProvider)proxy).getRequestContext().put(SecurityConstants.ENCRYPT_USERNAME, "bob");
+ 
+proxy.sayHello();
+
+
+
+

As you can see, the WS-Security properties are set in the request +context. Here the KeystorePasswordCallback is the same as on server +side above, you might want/need different implementation in real world +scenarios, of course.
+The alice.properties file is the client side equivalent of the server +side bob.properties and references the alice.pkcs12 keystore file, +which has been populated with Alice’s (client) full key +(private/certificate + public key) as well as Bob’s (server) public key.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=PKCS12
+org.apache.ws.security.crypto.merlin.keystore.password=password
+org.apache.ws.security.crypto.merlin.keystore.alias=alice
+org.apache.ws.security.crypto.merlin.keystore.file=META-INF/alice.pkcs12
+
+
+
+

The Apache CXF WS-Policy engine will digest the security requirements in +the contract and ensure a valid secure communication is in place for +interacting with the server endpoint.

+
+
+
+Endpoint serving multiple clients +
+

The server side configuration described above implies the endpoint is +configured for serving a given client which a service agreement has been +established for. In some real world scenarios though, the same server +might be expected to be able to deal with (including decrypting and +encrypting) messages coming from and being sent to multiple clients. +Apache CXF supports that through the useReqSigCert value for the +ws-security.encryption.username configuration parameter.

+
+
+

Of course the referenced server side keystore then needs to contain the +public key of all the clients that are expected to be served.

+
+
+
+
+
Authentication and authorization
+
+

The Username Token Profile can be used to provide client’s credentials +to a WS-Security enabled target endpoint.

+
+
+

Apache CXF provides means for setting basic password callback handlers +on both client and server sides to set/check passwords; the +ws-security.username and ws-security.callback-handler properties can +be used similarly as shown in the signature and encryption example. +Things become more interesting when requiring a given user to be +authenticated (and authorized) against a security domain on the target +application server.

+
+
+

On server side, you need to install two additional interceptors that act +as bridges towards the application server authentication layer:

+
+
+
    +
  • +

    an interceptor for performing authentication and populating a valid +SecurityContext; the provided interceptor should extend +org.apache.cxf.ws.interceptor.security.AbstractUsernameTokenInInterceptor, +in particular JBossWS integration comes with +org.jboss.wsf.stack.cxf.security.authentication.SubjectCreatingInterceptor +for this;

    +
  • +
  • +

    an interceptor for performing authorization; CXF requires that to +extend +org.apache.cxf.interceptor.security.AbstractAuthorizingInInterceptor, +for instance the SimpleAuthorizingInterceptor can be used for simply +mapping endpoint operations to allowed roles.

    +
  • +
+
+
+

So, here follows an example of WS-SecurityPolicy endpoint using Username +Token Profile for authenticating through the application server security +domain system.

+
+
+Endpoint +
+

As in the other example, we start with a wsdl contract containing the +proper WS-Security Policy:

+
+
+
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" name="SecurityService"
+  xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+  xmlns="http://schemas.xmlsoap.org/wsdl/"
+  xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+        xmlns:wsaws="http://www.w3.org/2005/08/addressing">
+  <types>
+    <xsd:schema>
+      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" schemaLocation="SecurityService_schema1.xsd"/>
+    </xsd:schema>
+  </types>
+  <message name="sayHello">
+    <part name="parameters" element="tns:sayHello"/>
+  </message>
+  <message name="sayHelloResponse">
+    <part name="parameters" element="tns:sayHelloResponse"/>
+  </message>
+  <message name="greetMe">
+    <part name="parameters" element="tns:greetMe"/>
+  </message>
+  <message name="greetMeResponse">
+    <part name="parameters" element="tns:greetMeResponse"/>
+  </message>
+  <portType name="ServiceIface">
+    <operation name="sayHello">
+      <input message="tns:sayHello"/>
+      <output message="tns:sayHelloResponse"/>
+    </operation>
+    <operation name="greetMe">
+      <input message="tns:greetMe"/>
+      <output message="tns:greetMeResponse"/>
+    </operation>
+  </portType>
+  <binding name="SecurityServicePortBinding" type="tns:ServiceIface">
+    <wsp:PolicyReference URI="#SecurityServiceUsernameUnsecureTransportPolicy"/>
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <operation name="sayHello">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    <operation name="greetMe">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+  </binding>
+  <service name="SecurityService">
+    <port name="SecurityServicePort" binding="tns:SecurityServicePortBinding">
+      <soap:address location="http://localhost:8080/jaxws-samples-wsse-username-jaas"/>
+    </port>
+  </service>
+ 
+  <wsp:Policy wsu:Id="SecurityServiceUsernameUnsecureTransportPolicy">
+        <wsp:ExactlyOne>
+            <wsp:All>
+                <sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+                    <wsp:Policy>
+                        <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+                            <wsp:Policy>
+                                <sp:WssUsernameToken10/>
+                            </wsp:Policy>
+                        </sp:UsernameToken>
+                    </wsp:Policy>
+                </sp:SupportingTokens>
+            </wsp:All>
+        </wsp:ExactlyOne>
+    </wsp:Policy>
+ 
+</definitions>
+
+
+
+ + + + + +
+ + +If you want to send hash / digest passwords, you can use a policy such +as what follows: +
+
+
+
+
<wsp:Policy wsu:Id="SecurityServiceUsernameHashPasswordPolicy">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+                <wsp:Policy>
+                    <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+                        <wsp:Policy>
+                            <sp:HashPassword/>
+                        </wsp:Policy>
+                    </sp:UsernameToken>
+                </wsp:Policy>
+            </sp:SupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
+
+
+
+

Please note the specified JBoss security domain needs to be properly +configured for computing digests.

+
+
+

The service endpoint can be generated using the wsconsume tool and +then enriched with a @EndpointConfig annotation and @InInterceptors +annotation to add the two interceptors mentioned above for JAAS +integration:

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.jaas;
+ 
+import jakarta.jws.WebService;
+import org.apache.cxf.interceptor.InInterceptors;
+import org.jboss.ws.api.annotation.EndpointConfig;
+ 
+@WebService
+(
+   portName = "SecurityServicePort",
+   serviceName = "SecurityService",
+   wsdlLocation = "WEB-INF/wsdl/SecurityService.wsdl",
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy",
+   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.jaas.ServiceIface"
+)
+@EndpointConfig(configFile = "WEB-INF/jaxws-endpoint-config.xml", configName = "Custom WS-Security Endpoint")
+@InInterceptors(interceptors = {
+      "org.jboss.wsf.stack.cxf.security.authentication.SubjectCreatingPolicyInterceptor",
+      "org.jboss.test.ws.jaxws.samples.wsse.policy.jaas.POJOEndpointAuthorizationInterceptor"}
+)
+public class ServiceImpl implements ServiceIface
+{
+   public String sayHello()
+   {
+      return "Secure Hello World!";
+   }
+ 
+   public String greetMe()
+   {
+      return "Greetings!";
+   }
+}
+
+
+
+

The POJOEndpointAuthorizationInterceptor is included into the +deployment and deals with the roles cheks:

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.jaas;
+ 
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.cxf.interceptor.security.SimpleAuthorizingInterceptor;
+ 
+public class POJOEndpointAuthorizationInterceptor extends SimpleAuthorizingInterceptor
+{
+ 
+   public POJOEndpointAuthorizationInterceptor()
+   {
+      super();
+      readRoles();
+   }
+ 
+   private void readRoles()
+   {
+      //just an example, this might read from a configuration file or such
+      Map<String, String> roles = new HashMap<String, String>();
+      roles.put("sayHello", "friend");
+      roles.put("greetMe", "snoopies");
+      setMethodRolesMap(roles);
+   }
+}
+
+
+
+

The jaxws-endpoint-config.xml descriptor is used to provide a custom +endpoint configuration with the required server side configuration +properties; in particular for this Username Token case that’s just a CXF +configuration option for leaving the username token validation to the +configured interceptors:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
+  <endpoint-config>
+    <config-name>Custom WS-Security Endpoint</config-name>
+    <property>
+      <property-name>ws-security.validate.token</property-name>
+      <property-value>false</property-value>
+    </property>
+  </endpoint-config>
+</jaxws-config>
+
+
+
+

In order for requiring a given JBoss security domain to be used to +protect access to the endpoint (a POJO one in this case), we declare +that in a jboss-web.xml descriptor (the JBossWS security domain is +used):

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_4_0.dtd">
+<jboss-web>
+   <security-domain>java:/jaas/JBossWS</security-domain>
+</jboss-web
+
+
+
+

Finally, the web.xml is as simple as usual:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<web-app
+   version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+   <servlet>
+      <servlet-name>TestService</servlet-name>
+      <servlet-class>org.jboss.test.ws.jaxws.samples.wsse.policy.jaas.ServiceImpl</servlet-class>
+   </servlet>
+   <servlet-mapping>
+      <servlet-name>TestService</servlet-name>
+      <url-pattern>/*</url-pattern>
+   </servlet-mapping>
+</web-app>
+
+
+
+

The endpoint is packaged into a war archive, including the JAXWS classes +generated by wsconsume:

+
+
+
+
alessio@inuyasha /dati/jbossws/stack/cxf/trunk $ jar -tvf ./modules/testsuite/cxf-tests/target/test-libs/jaxws-samples-wsse-policy-username-jaas.war
+     0 Thu Jun 16 18:50:48 CEST 2011 META-INF/
+   155 Thu Jun 16 18:50:46 CEST 2011 META-INF/MANIFEST.MF
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/
+   585 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/web.xml
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaas/
+   982 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaas/POJOEndpointAuthorizationInterceptor.class
+   412 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaas/ServiceIface.class
+  1398 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaas/ServiceImpl.class
+     0 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/
+   701 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/GreetMe.class
+  1065 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/GreetMeResponse.class
+   705 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/SayHello.class
+  1069 Thu Jun 16 18:50:48 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/samples/wsse/policy/jaxws/SayHelloResponse.class
+   556 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/jaxws-endpoint-config.xml
+   241 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/jboss-web.xml
+     0 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/
+  3183 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/SecurityService.wsdl
+  1012 Thu Jun 16 18:50:44 CEST 2011 WEB-INF/wsdl/SecurityService_schema1.xsd
+
+
+
+ + + + + +
+ + +If you’re deploying the endpoint archive on WildFly, remember to add a +dependency to org.apache.ws.security and org.apache.cxf module (due +to the @InInterceptor annotation) in the MANIFEST.MF file. +
+
+
+
+
Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.7.1
+Created-By: 17.0-b16 (Sun Microsystems Inc.)
+Dependencies: org.apache.ws.security,org.apache.cxf
+
+
+
+
+Client +
+

Here too you start by consuming the published WSDL contract using the +wsconsume tool. Then you simply invoke the the endpoint as a standard +Jakarta XML Web Services one:

+
+
+
+
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
+URL wsdlURL = new URL(serviceURL + "?wsdl");
+Service service = Service.create(wsdlURL, serviceName);
+ServiceIface proxy = (ServiceIface)service.getPort(ServiceIface.class);
+ 
+((BindingProvider)proxy).getRequestContext().put(SecurityConstants.USERNAME, "kermit");
+((BindingProvider)proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER,
+      "org.jboss.test.ws.jaxws.samples.wsse.policy.jaas.UsernamePasswordCallback");
+ 
+proxy.sayHello();
+
+
+
+

The UsernamePasswordCallback class is shown below and is responsible +for setting the passwords on client side just before performing the +invocations:

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.jaas;
+ 
+import java.io.IOException;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import org.apache.ws.security.WSPasswordCallback;
+ 
+public class UsernamePasswordCallback implements CallbackHandler
+{
+   public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
+   {
+      WSPasswordCallback pc = (WSPasswordCallback)callbacks[0];
+      if ("kermit".equals(pc.getIdentifier()))
+         pc.setPassword("thefrog");
+   }
+}
+
+
+
+

If everything has been done properly, you should expect to calls to +sayHello() fail when done with user "snoopy" and pass with user +"kermit" (and credential "thefrog"); moreover, you should get an +authorization error when trying to call greetMe() with user "kermit", +as that does not have the "snoopies" role.

+
+
+
+
+
Secure transport
+
+

Another quite common use case is using WS-Security Username Token +Profile over a secure transport (HTTPS). A scenario like this is +implemented similarly to what’s described in the previous example, +except for few differences explained below.

+
+
+

First of all, here is an excerpt of a wsdl wth a sample security policy +for Username Token over HTTPS:

+
+
+
+
...
+ 
+<binding name="SecurityServicePortBinding" type="tns:ServiceIface"><wsp:PolicyReference URI="#SecurityServiceBindingPolicy"/><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><operation name="sayHello">
+    <soap:operation soapAction=""/>
+    <input>
+      <soap:body use="literal"/>
+    </input>
+    <output>
+      <soap:body use="literal"/>
+    </output></operation>
+</binding>
+<service name="SecurityService">
+   <port name="SecurityServicePort" binding="tns:SecurityServicePortBinding">
+      <soap:address location="https://localhost:8443/jaxws-samples-wsse-policy-username"/>
+   </port>
+</service>
+ 
+<wsp:Policy wsu:Id="SecurityServiceBindingPolicy">
+   <wsp:ExactlyOne>
+      <wsp:All>
+         <foo:unknownPolicy xmlns:foo="http://cxf.apache.org/not/a/policy"/>
+      </wsp:All>
+      <wsp:All>
+         <wsaws:UsingAddressing xmlns:wsaws="http://www.w3.org/2006/05/addressing/wsdl"/>
+         <sp:TransportBinding>
+            <wsp:Policy>
+               <sp:TransportToken>
+                  <wsp:Policy>
+                     <sp:HttpsToken RequireClientCertificate="false"/>
+                  </wsp:Policy>
+               </sp:TransportToken>
+               <sp:Layout>
+                  <wsp:Policy>
+                     <sp:Lax/>
+                  </wsp:Policy>
+               </sp:Layout>
+               <sp:IncludeTimestamp/>
+               <sp:AlgorithmSuite>
+                  <wsp:Policy>
+                     <sp:Basic128/>
+                  </wsp:Policy>
+               </sp:AlgorithmSuite>
+            </wsp:Policy>
+         </sp:TransportBinding>
+         <sp:Wss10>
+            <wsp:Policy>
+               <sp:MustSupportRefKeyIdentifier/>
+            </wsp:Policy>
+         </sp:Wss10>
+         <sp:SignedSupportingTokens>
+            <wsp:Policy>
+               <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                     <sp:WssUsernameToken10/>
+                  </wsp:Policy>
+               </sp:UsernameToken>
+            </wsp:Policy>
+         </sp:SignedSupportingTokens>
+      </wsp:All>
+   </wsp:ExactlyOne>
+</wsp:Policy>
+
+
+
+

The endpoint then needs of course to be actually available on HTTPS +only, so we have a web.xml setting the transport-guarantee such as +below:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<web-app
+   version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+   <servlet>
+      <servlet-name>TestService</servlet-name>
+      <servlet-class>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.ServiceImpl</servlet-class>
+   </servlet>
+   <servlet-mapping>
+      <servlet-name>TestService</servlet-name>
+      <url-pattern>/*</url-pattern>
+   </servlet-mapping>
+ 
+   <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>TestService</web-resource-name>
+      <url-pattern>/*</url-pattern>
+    </web-resource-collection>
+    <user-data-constraint>
+      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+    </user-data-constraint>
+  </security-constraint>
+</web-app>
+
+
+
+
+
Secure conversation
+
+

Apache CXF supports +WS-SecureConversation +specification, which is about improving performance by allowing client +and server to negotiate initial security keys to be used for later +communication encryption/signature. This is done by having two policies +in the wsdl contract, an outer one setting the security requirements to +actually communicate with the endpoint and a bootstrap one, related to +the communication for establishing the secure conversation keys. The +client will be automatically sending an initial message to the server +for negotiating the keys, then the actual communication to the endpoint +takes place. As a consequence, Apache CXF needs a way to specify which +WS-Security configuration properties are intended for the bootstrap +policy and which are intended for the actual service policy. To +accomplish this, properties intended for the bootstrap policy are +appended with .sct.

+
+
+
+
...
+((BindingProvider)proxy).getRequestContext().put("ws-security.signature.username.sct", "alice");
+((BindingProvider)proxy).getRequestContext().put("ws-security.encryption.username.sct", "bob");
+...
+
+
+
+
+
@WebService(
+   ...
+)
+@EndpointProperties(value = {
+      @EndpointProperty(key = "ws-security.encryption.properties.sct", value = "bob.properties"),
+      @EndpointProperty(key = "ws-security.signature.properties.sct", value = "bob.properties"),
+      ...
+      }
+)
+public class ServiceImpl implements ServiceIface {
+   ...
+}
+
+
+
+
+
+
+

17.5.13. WS-Trust and STS

+
+
WS-Trust overview
+
+

WS-Trust is a Web +service specification that defines extensions to WS-Security. It is a +general framework for implementing security in a distributed system. The +standard is based on a centralized Security Token Service, STS, which is +capable of authenticating clients and issuing tokens containing various +kinds of authentication and authorization data. The specification +describes a protocol used for issuance, exchange, and validation of +security tokens, however the following specifications play an important +role in the WS-Trust architecture: +WS-SecurityPolicy +1.2, +SAML +2.0, +Username +Token Profile, +X.509 +Token Profile, +SAML +Token Profile, and +Kerberos +Token Profile.

+
+
+

The WS-Trust extensions address the needs of applications that span +multiple domains and requires the sharing of security keys by providing +a standards based trusted third party web service (STS) to broker trust +relationships between a Web service requester and a Web service +provider. This architecture also alleviates the pain of service updates +that require credential changes by providing a common location for this +information. The STS is the common access point from which both the +requester and provider retrieves and verifies security tokens.

+
+
+

There are three main components of the WS-Trust specification.

+
+
+
    +
  • +

    The Security Token Service (STS), a web service that issues, renews, +and validates security tokens.

    +
  • +
  • +

    The message formats for security token requests and responses.

    +
  • +
  • +

    The mechanisms for key exchange

    +
  • +
+
+
+
+
Security Token Service
+
+

The Security Token Service, STS, is the core of the WS-Trust +specification. It is a standards based mechanism for authentication and +authorization. The STS is an implementation of the WS-Trust +specification’s protocol for issuing, exchanging, and validating +security tokens, based on token format, namespace, or trust boundaries. +The STS is a web service that acts as a trusted third party to broker +trust relationships between a Web service requester and a Web service +provider. It is a common access point trusted by both requester and +provider to provide interoperable security tokens. It removes the need +for a direct relationship between the two. Because the STS is a +standards based mechanism for authentication, it helps ensure +interoperability across realms and between different platforms.

+
+
+

The STS’s WSDL contract defines how other applications and processes +interact with it. In particular the WSDL defines the WS-Trust and +WS-Security policies that a requester must fulfill in order to +successfully communicate with the STS’s endpoints. A web service +requester consumes the STS’s WSDL and with the aid of an STSClient +utility, generates a message request compliant with the stated security +policies and submits it to the STS endpoint. The STS validates the +request and returns an appropriate response.

+
+
+
+
Apache CXF support
+
+

Apache CXF is an open-source, fully featured Web services framework. The +JBossWS open source project integrates the JBoss Web Services (JBossWS) +stack with the Apache CXF project modules thus providing WS-Trust and +other Jakarta XML Web Services functionality in WildFly. This integration makes it easy to +deploy CXF STS implementations, however WildFly can run any WS-Trust +compliant STS. In addition the Apache CXF API provides a STSClient +utility to facilitate web service requester communication with its STS.

+
+
+

Detailed information about the Apache CXF’s WS-Trust implementation can +be found +here.

+
+
+
+
A Basic WS-Trust Scenario
+
+

Here is an example of a basic WS-Trust scenario. It is comprised of a +Web service requester (ws-requester), a Web service provider +(ws-provider), and a Security Token Service (STS). The ws-provider +requires a SAML 2.0 token issued from a designed STS to be presented by +the ws-requester using asymmetric binding. These communication +requirements are declared in the ws-provider’s WSDL. The STS requires +ws-requester credentials be provided in a WSS UsernameToken format +request using symmetric binding. The STS’s response is provided +containing a SAML 2.0 token. These communication requirements are +declared in the STS’s WSDL.

+
+
+
    +
  1. +

    A ws-requester contacts the ws-provider and consumes its WSDL. Upon +finding the security token issuer requirement, it creates and configures +a STSClient with the information it requires to generate a proper +request.

    +
  2. +
  3. +

    The STSClient contacts the STS and consumes its WSDL. The security +policies are discovered. The STSClient creates and sends an +authentication request, with appropriate credentials.

    +
  4. +
  5. +

    The STS verifies the credentials.

    +
  6. +
  7. +

    In response, the STS issues a security token that provides proof +that the ws-requester has authenticated with the STS.

    +
  8. +
  9. +

    The STClient presents a message with the security token to the +ws-provider.

    +
  10. +
  11. +

    The ws-provider verifies the token was issued by the STS, thus +proving the ws-requester has successfully authenticated with the STS.

    +
  12. +
  13. +

    The ws-provider executes the requested service and returns the +results to the the ws-requester.

    +
  14. +
+
+
+
Web service provider
+
+

This section examines the crucial elements in providing endpoint +security in the web service provider described in the basic WS-Trust +scenario. The components that will be discussed are.

+
+
+
    +
  • +

    web service provider’s WSDL

    +
  • +
  • +

    web service provider’s Interface and Implementation classes.

    +
  • +
  • +

    ServerCallbackHandler class

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
  • +

    MANIFEST.MF

    +
  • +
+
+
+Web service provider WSDL +
+

The web service provider is a contract-first endpoint. All the WS-trust +and security policies for it are declared in the WSDL, +SecurityService.wsdl. For this scenario a ws-requester is required to +present a SAML 2.0 token issued from a designed STS. The address of the +STS is provided in the WSDL. An asymmetric binding policy is used to +encrypt and sign the SOAP body of messages that pass back and forth +between ws-requester and ws-provider. X.509 certificates are use for the +asymmetric binding. The rules for sharing the public and private keys in +the SOAP request and response messages are declared. A detailed +explanation of the security settings are provided in the comments in the +listing below.

+
+
+
+
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" name="SecurityService"
+        xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy"
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+        xmlns="http://schemas.xmlsoap.org/wsdl/"
+        xmlns:wsp="http://www.w3.org/ns/ws-policy"
+        xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
+        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+        xmlns:wsaws="http://www.w3.org/2005/08/addressing"
+        xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
+        xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
+  <types>
+    <xsd:schema>
+      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy" schemaLocation="SecurityService_schema1.xsd"/>
+    </xsd:schema>
+  </types>
+  <message name="sayHello">
+    <part name="parameters" element="tns:sayHello"/>
+  </message>
+  <message name="sayHelloResponse">
+    <part name="parameters" element="tns:sayHelloResponse"/>
+  </message>
+  <portType name="ServiceIface">
+    <operation name="sayHello">
+      <input message="tns:sayHello"/>
+      <output message="tns:sayHelloResponse"/>
+    </operation>
+  </portType>
+  <!--
+        The wsp:PolicyReference binds the security requirments on all the STS endpoints.
+        The wsp:Policy wsu:Id="#AsymmetricSAML2Policy" element is defined later in this file.
+  -->
+  <binding name="SecurityServicePortBinding" type="tns:ServiceIface">
+    <wsp:PolicyReference URI="#AsymmetricSAML2Policy" />
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <operation name="sayHello">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+        <wsp:PolicyReference URI="#Input_Policy" />
+      </input>
+      <output>
+        <soap:body use="literal"/>
+        <wsp:PolicyReference URI="#Output_Policy" />
+      </output>
+    </operation>
+  </binding>
+  <service name="SecurityService">
+    <port name="SecurityServicePort" binding="tns:SecurityServicePortBinding">
+      <soap:address location="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust/SecurityService"/>
+    </port>
+  </service>
+
+  <wsp:Policy wsu:Id="AsymmetricSAML2Policy">
+        <wsp:ExactlyOne>
+            <wsp:All>
+  <!--
+        The wsam:Addressing element, indicates that the endpoints of this
+        web service MUST conform to the WS-Addressing specification.  The
+        attribute wsp:Optional="false" enforces this assertion.
+  -->
+                <wsam:Addressing wsp:Optional="false">
+                    <wsp:Policy />
+                </wsam:Addressing>
+  <!--
+        The sp:AsymmetricBinding element indicates that security is provided
+        at the SOAP layer. A public/private key combinations is required to
+        protect the message.  The initiator will use it's private key to sign
+        the message and the recipient's public key is used to encrypt the message.
+        The recipient of the message will use it's private key to decrypt it and
+        initiator's public key to verify the signature.
+  -->
+                <sp:AsymmetricBinding>
+                    <wsp:Policy>
+  <!--
+        The sp:InitiatorToken element specifies the elements required in
+        generating the initiator request to the ws-provider's service.
+  -->
+                        <sp:InitiatorToken>
+                            <wsp:Policy>
+  <!--
+        The sp:IssuedToken element asserts that a SAML 2.0 security token is
+        expected from the STS using a public key type.  The
+        sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+        attribute instructs the runtime to include the initiator's public key
+        with every message sent to the recipient.
+
+        The sp:RequestSecurityTokenTemplate element directs that all of the
+        children of this element will be copied directly into the body of the
+        RequestSecurityToken (RST) message that is sent to the STS when the
+        initiator asks the STS to issue a token.
+  -->
+                                <sp:IssuedToken
+                                    sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+                                    <sp:RequestSecurityTokenTemplate>
+                                        <t:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</t:TokenType>
+                                        <t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/PublicKey</t:KeyType>
+                                    </sp:RequestSecurityTokenTemplate>
+                                    <wsp:Policy>
+                                        <sp:RequireInternalReference />
+                                    </wsp:Policy>
+  <!--
+        The sp:Issuer element defines the STS's address and endpoint information
+        This information is used by the STSClient.
+  -->
+                                    <sp:Issuer>
+                                        <wsaws:Address>http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts/SecurityTokenService</wsaws:Address>
+                                        <wsaws:Metadata xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
+                                                        wsdli:wsdlLocation="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts/SecurityTokenService?wsdl">
+                                            <wsaw:ServiceName xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
+                                                            xmlns:stsns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+                                                            EndpointName="UT_Port">stsns:SecurityTokenService</wsaw:ServiceName>
+                                        </wsaws:Metadata>
+                                    </sp:Issuer>
+                                </sp:IssuedToken>
+                            </wsp:Policy>
+                        </sp:InitiatorToken>
+  <!--
+        The sp:RecipientToken element asserts the type of public/private key-pair
+        expected from the recipient.  The
+        sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
+        attribute indicates that the initiator's public key will never be included
+        in the reply messages.
+ 
+        The sp:WssX509V3Token10 element indicates that an X509 Version 3 token
+        should be used in the message.
+  -->
+                        <sp:RecipientToken>
+                            <wsp:Policy>
+                                <sp:X509Token
+                                    sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
+                                    <wsp:Policy>
+                                        <sp:WssX509V3Token10 />
+                                        <sp:RequireIssuerSerialReference />
+                                    </wsp:Policy>
+                                </sp:X509Token>
+                            </wsp:Policy>
+                        </sp:RecipientToken>
+<!--
+     The sp:Layout element,  indicates the layout rules to apply when adding
+     items to the security header.  The sp:Lax sub-element indicates items
+     are added to the security header in any order that conforms to
+     WSS: SOAP Message Security.
+-->
+                        <sp:Layout>
+                            <wsp:Policy>
+                                <sp:Lax />
+                            </wsp:Policy>
+                        </sp:Layout>
+                        <sp:IncludeTimestamp />
+                        <sp:OnlySignEntireHeadersAndBody />
+ <!--
+     The sp:AlgorithmSuite element, requires the Basic256 algorithm suite
+     be used in performing cryptographic operations.
+-->
+                        <sp:AlgorithmSuite>
+                            <wsp:Policy>
+                                <sp:Basic256 />
+                            </wsp:Policy>
+                        </sp:AlgorithmSuite>
+                    </wsp:Policy>
+                </sp:AsymmetricBinding>
+<!--
+    The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
+    to be supported by the STS.  These particular elements generally refer
+    to how keys are referenced within the SOAP envelope.  These are normally
+    handled by CXF.
+-->
+                <sp:Wss11>
+                    <wsp:Policy>
+                        <sp:MustSupportRefIssuerSerial />
+                        <sp:MustSupportRefThumbprint />
+                        <sp:MustSupportRefEncryptedKey />
+                    </wsp:Policy>
+                </sp:Wss11>
+<!--
+    The sp:Trust13 element declares controls for WS-Trust 1.3 options.
+    They are policy assertions related to exchanges specifically with
+    client and server challenges and entropy behaviors.  Again these are
+    normally handled by CXF.
+-->
+                <sp:Trust13>
+                    <wsp:Policy>
+                        <sp:MustSupportIssuedTokens />
+                        <sp:RequireClientEntropy />
+                        <sp:RequireServerEntropy />
+                    </wsp:Policy>
+                </sp:Trust13>
+            </wsp:All>
+        </wsp:ExactlyOne>
+    </wsp:Policy>
+
+    <wsp:Policy wsu:Id="Input_Policy">
+        <wsp:ExactlyOne>
+            <wsp:All>
+                <sp:EncryptedParts>
+                    <sp:Body />
+                </sp:EncryptedParts>
+                <sp:SignedParts>
+                    <sp:Body />
+                    <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                </sp:SignedParts>
+            </wsp:All>
+        </wsp:ExactlyOne>
+    </wsp:Policy>
+
+    <wsp:Policy wsu:Id="Output_Policy">
+        <wsp:ExactlyOne>
+            <wsp:All>
+                <sp:EncryptedParts>
+                    <sp:Body />
+                </sp:EncryptedParts>
+                <sp:SignedParts>
+                    <sp:Body />
+                    <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                    <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                </sp:SignedParts>
+            </wsp:All>
+        </wsp:ExactlyOne>
+    </wsp:Policy>
+</definitions>
+
+
+
+
+Web service provider Interface +
+

The web service provider interface class, ServiceIface, is a simple +straight forward web service definition.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service;
+ 
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy"
+)
+public interface ServiceIface
+{
+   @WebMethod
+   String sayHello();
+}
+
+
+
+
+Web service provider Implementation +
+

The web service provider implementation class, ServiceImpl, is a simple +POJO. It uses the standard WebService annotation to define the service +endpoint. In addition there are two Apache CXF annotations, +EndpointProperties and EndpointProperty used for configuring the +endpoint for the CXF runtime. These annotations come from the +Apache WSS4J project, which provides a +Java implementation of the primary WS-Security standards for Web +Services. These annotations are programmatically adding properties to +the endpoint. With plain Apache CXF, these properties are often set via +the <jaxws:properties> element on the <jaxws:endpoint> element in the +Spring config; these annotations allow the properties to be configured +in the code.

+
+
+

WSS4J uses the Crypto interface to get keys and certificates for +encryption/decryption and for signature creation/verification. As is +asserted by the WSDL, X509 keys and certificates are required for this +service. The WSS4J configuration information being provided by +ServiceImpl is for Crypto’s Merlin implementation. More information will +be provided about this in the keystore section.

+
+
+

The first EndpointProperty statement in the listing is declaring the +user’s name to use for the message signature. It is used as the alias +name in the keystore to get the user’s cert and private key for +signature. The next two EndpointProperty statements declares the Java +properties file that contains the (Merlin) crypto configuration +information. In this case both for signing and encrypting the messages. +WSS4J reads this file and extra required information for message +handling. The last EndpointProperty statement declares the +ServerCallbackHandler implementation class. It is used to obtain the +user’s password for the certificates in the keystore file.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service;
+ 
+import jakarta.jws.WebService;
+ 
+import org.apache.cxf.annotations.EndpointProperties;
+import org.apache.cxf.annotations.EndpointProperty;
+ 
+@WebService
+(
+   portName = "SecurityServicePort",
+   serviceName = "SecurityService",
+   wsdlLocation = "WEB-INF/wsdl/SecurityService.wsdl",
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy",
+   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service.ServiceIface"
+)
+@EndpointProperties(value = {
+      @EndpointProperty(key = "ws-security.signature.username", value = "myservicekey"),
+      @EndpointProperty(key = "ws-security.signature.properties", value = "serviceKeystore.properties"),
+      @EndpointProperty(key = "ws-security.encryption.properties", value = "serviceKeystore.properties"),
+      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service.ServerCallbackHandler")
+})
+public class ServiceImpl implements ServiceIface
+{
+   public String sayHello()
+   {
+      return "WS-Trust Hello World!";
+   }
+}
+
+
+
+
+ServerCallbackHandler +
+

ServerCallbackHandler is a callback handler for the WSS4J Crypto API. It +is used to obtain the password for the private key in the keystore. This +class enables CXF to retrieve the password of the user name to use for +the message signature. A certificates' password is not discoverable. The +creator of the certificate must record the password he assigns and +provide it when requested through the CallbackHandler. In this scenario +skpass is the password for user myservicekey.

+
+
+
+
 package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service;
+ 
+import java.util.HashMap;
+import java.util.Map;
+ 
+import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
+ 
+public class ServerCallbackHandler extends PasswordCallbackHandler
+{
+ 
+   public ServerCallbackHandler()
+   {
+      super(getInitMap());
+   }
+ 
+   private static Map<String, String> getInitMap()
+   {
+      Map<String, String> passwords = new HashMap<String, String>();
+      passwords.put("myservicekey", "skpass");
+      return passwords;
+   }
+}
+
+
+
+
+Crypto properties and keystore files +
+

WSS4J’s Crypto implementation is loaded and configured via a Java +properties file that contains Crypto configuration data. The file +contains implementation-specific properties such as a keystore location, +password, default alias and the like. This application is using the +Merlin implementation. File serviceKeystore.properties contains this +information.

+
+
+

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains +self signed certificates for myservicekey and mystskey. Self signed +certificates are not appropriate for production use.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=sspass
+org.apache.ws.security.crypto.merlin.keystore.alias=myservicekey
+org.apache.ws.security.crypto.merlin.keystore.file=servicestore.jks
+
+
+
+
+MANIFEST.MF +
+

When deployed on WildFly this application requires access to the JBossWs +and CXF APIs provided in module org.jboss.ws.cxf.jbossws-cxf-client. The +dependency statement directs the server to provide them at deployment.

+
+
+
+
Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.8.2
+Created-By: 1.7.0_25-b15 (Oracle Corporation)
+Dependencies: org.jboss.ws.cxf.jbossws-cxf-client
+
+
+
+
+
+
Security Token Service (STS)
+
+

This section examines the crucial elements in providing the Security +Token Service functionality described in the basic WS-Trust scenario. +The components that will be discussed are.

+
+
+
    +
  • +

    STS’s WSDL

    +
  • +
  • +

    STS’s implementation class.

    +
  • +
  • +

    STSCallbackHandler class

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
  • +

    MANIFEST.MF

    +
  • +
  • +

    Server configuration files

    +
  • +
+
+
+STS WSDL +
+

The STS is a contract-first endpoint. All the WS-trust and security +policies for it are declared in the WSDL, ws-trust-1.4-service.wsdl. A +symmetric binding policy is used to encrypt and sign the SOAP body of +messages that pass back and forth between ws-requester and the STS. The +ws-requester is required to authenticate itself by providing WSS +UsernameToken credentials. The rules for sharing the public and private +keys in the SOAP request and response messages are declared. A detailed +explanation of the security settings are provided in the comments in the +listing below.

+
+
+
+
 <?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions
+        targetNamespace="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+        xmlns:tns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+        xmlns:wstrust="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+        xmlns:wsap10="http://www.w3.org/2006/05/addressing/wsdl"
+        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+        xmlns:wsp="http://www.w3.org/ns/ws-policy"
+    xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
+ 
+  <wsdl:types>
+    <xs:schema elementFormDefault="qualified" targetNamespace='http://docs.oasis-open.org/ws-sx/ws-trust/200512'>
+ 
+      <xs:element name='RequestSecurityToken' type='wst:AbstractRequestSecurityTokenType' />
+      <xs:element name='RequestSecurityTokenResponse' type='wst:AbstractRequestSecurityTokenType' />
+ 
+      <xs:complexType name='AbstractRequestSecurityTokenType' >
+        <xs:sequence>
+          <xs:any namespace='##any' processContents='lax' minOccurs='0' maxOccurs='unbounded' />
+        </xs:sequence>
+        <xs:attribute name='Context' type='xs:anyURI' use='optional' />
+        <xs:anyAttribute namespace='##other' processContents='lax' />
+      </xs:complexType>
+      <xs:element name='RequestSecurityTokenCollection' type='wst:RequestSecurityTokenCollectionType' />
+      <xs:complexType name='RequestSecurityTokenCollectionType' >
+        <xs:sequence>
+          <xs:element name='RequestSecurityToken' type='wst:AbstractRequestSecurityTokenType' minOccurs='2' maxOccurs='unbounded'/>
+        </xs:sequence>
+      </xs:complexType>
+ 
+      <xs:element name='RequestSecurityTokenResponseCollection' type='wst:RequestSecurityTokenResponseCollectionType' />
+      <xs:complexType name='RequestSecurityTokenResponseCollectionType' >
+        <xs:sequence>
+          <xs:element ref='wst:RequestSecurityTokenResponse' minOccurs='1' maxOccurs='unbounded' />
+        </xs:sequence>
+        <xs:anyAttribute namespace='##other' processContents='lax' />
+      </xs:complexType>
+ 
+    </xs:schema>
+  </wsdl:types>
+ 
+  <!-- WS-Trust defines the following GEDs -->
+  <wsdl:message name="RequestSecurityTokenMsg">
+    <wsdl:part name="request" element="wst:RequestSecurityToken" />
+  </wsdl:message>
+  <wsdl:message name="RequestSecurityTokenResponseMsg">
+    <wsdl:part name="response"
+            element="wst:RequestSecurityTokenResponse" />
+  </wsdl:message>
+  <wsdl:message name="RequestSecurityTokenCollectionMsg">
+    <wsdl:part name="requestCollection"
+            element="wst:RequestSecurityTokenCollection"/>
+  </wsdl:message>
+  <wsdl:message name="RequestSecurityTokenResponseCollectionMsg">
+    <wsdl:part name="responseCollection"
+            element="wst:RequestSecurityTokenResponseCollection"/>
+  </wsdl:message>
+ 
+  <!-- This portType an example of a Requestor (or other) endpoint that
+         Accepts SOAP-based challenges from a Security Token Service -->
+  <wsdl:portType name="WSSecurityRequestor">
+    <wsdl:operation name="Challenge">
+      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
+      <wsdl:output message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+  </wsdl:portType>
+ 
+ 
+  <!-- This portType is an example of an STS supporting full protocol -->
+<!--
+    The wsdl:portType and data types are XML elements defined by the
+    WS_Trust specification.  The wsdl:portType defines the endpoints
+    supported in the STS implementation.  This WSDL defines all operations
+    that an STS implementation can support.
+-->
+  <wsdl:portType name="STS">
+    <wsdl:operation name="Cancel">
+      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel" message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/CancelFinal" message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="Issue">
+      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue" message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal" message="tns:RequestSecurityTokenResponseCollectionMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="Renew">
+      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew" message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/RenewFinal" message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="Validate">
+      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate" message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/ValidateFinal" message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="KeyExchangeToken">
+      <wsdl:input wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KET" message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/KETFinal" message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="RequestCollection">
+      <wsdl:input message="tns:RequestSecurityTokenCollectionMsg"/>
+      <wsdl:output message="tns:RequestSecurityTokenResponseCollectionMsg"/>
+    </wsdl:operation>
+  </wsdl:portType>
+ 
+  <!-- This portType is an example of an endpoint that accepts
+         Unsolicited RequestSecurityTokenResponse messages -->
+  <wsdl:portType name="SecurityTokenResponseService">
+    <wsdl:operation name="RequestSecurityTokenResponse">
+      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+  </wsdl:portType>
+ 
+<!--
+    The wsp:PolicyReference binds the security requirments on all the STS endpoints.
+    The wsp:Policy wsu:Id="UT_policy" element is later in this file.
+-->
+  <wsdl:binding name="UT_Binding" type="wstrust:STS">
+    <wsp:PolicyReference URI="#UT_policy" />
+      <soap:binding style="document"
+          transport="http://schemas.xmlsoap.org/soap/http" />
+      <wsdl:operation name="Issue">
+          <soap:operation
+              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue" />
+          <wsdl:input>
+              <wsp:PolicyReference
+               URI="#Input_policy" />
+              <soap:body use="literal" />
+          </wsdl:input>
+          <wsdl:output>
+              <wsp:PolicyReference
+               URI="#Output_policy" />
+              <soap:body use="literal" />
+          </wsdl:output>
+      </wsdl:operation>
+      <wsdl:operation name="Validate">
+          <soap:operation
+              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate" />
+          <wsdl:input>
+              <wsp:PolicyReference
+               URI="#Input_policy" />
+              <soap:body use="literal" />
+          </wsdl:input>
+          <wsdl:output>
+              <wsp:PolicyReference
+               URI="#Output_policy" />
+              <soap:body use="literal" />
+          </wsdl:output>
+      </wsdl:operation>
+      <wsdl:operation name="Cancel">
+          <soap:operation
+              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel" />
+          <wsdl:input>
+              <soap:body use="literal" />
+          </wsdl:input>
+          <wsdl:output>
+              <soap:body use="literal" />
+          </wsdl:output>
+      </wsdl:operation>
+      <wsdl:operation name="Renew">
+          <soap:operation
+              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew" />
+          <wsdl:input>
+              <soap:body use="literal" />
+          </wsdl:input>
+          <wsdl:output>
+              <soap:body use="literal" />
+          </wsdl:output>
+      </wsdl:operation>
+      <wsdl:operation name="KeyExchangeToken">
+          <soap:operation
+              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KeyExchangeToken" />
+          <wsdl:input>
+              <soap:body use="literal" />
+          </wsdl:input>
+          <wsdl:output>
+              <soap:body use="literal" />
+          </wsdl:output>
+      </wsdl:operation>
+      <wsdl:operation name="RequestCollection">
+          <soap:operation
+              soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/RequestCollection" />
+          <wsdl:input>
+              <soap:body use="literal" />
+          </wsdl:input>
+          <wsdl:output>
+              <soap:body use="literal" />
+          </wsdl:output>
+      </wsdl:operation>
+  </wsdl:binding>
+
+  <wsdl:service name="SecurityTokenService">
+      <wsdl:port name="UT_Port" binding="tns:UT_Binding">
+         <soap:address location="http://localhost:8080/SecurityTokenService/UT" />
+      </wsdl:port>
+  </wsdl:service>
+
+  <wsp:Policy wsu:Id="UT_policy">
+      <wsp:ExactlyOne>
+         <wsp:All>
+<!--
+    The sp:UsingAddressing element, indicates that the endpoints of this
+    web service conforms to the WS-Addressing specification.  More detail
+    can be found here: [http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529]
+-->
+            <wsap10:UsingAddressing/>
+<!--
+    The sp:SymmetricBinding element indicates that security is provided
+    at the SOAP layer and any initiator must authenticate itself by providing
+    WSS UsernameToken credentials.
+-->
+            <sp:SymmetricBinding
+               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+               <wsp:Policy>
+<!--
+    In a symmetric binding, the keys used for encrypting and signing in both
+    directions are derived from a single key, the one specified by the
+    sp:ProtectionToken element.  The sp:X509Token sub-element declares this
+    key to be a X.509 certificate and the
+    IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never"
+    attribute adds the requirement that the token MUST NOT be included in
+    any messages sent between the initiator and the recipient; rather, an
+    external reference to the token should be used.  Lastly the WssX509V3Token10
+    sub-element declares that the Username token presented by the initiator
+    should be compliant with Web Services Security UsernameToken Profile
+    1.0 specification. [ http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf ]
+-->
+                  <sp:ProtectionToken>
+                     <wsp:Policy>
+                        <sp:X509Token
+                           sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
+                           <wsp:Policy>
+                              <sp:RequireDerivedKeys />
+                              <sp:RequireThumbprintReference />
+                              <sp:WssX509V3Token10 />
+                           </wsp:Policy>
+                        </sp:X509Token>
+                     </wsp:Policy>
+                  </sp:ProtectionToken>
+<!--
+    The sp:AlgorithmSuite element, requires the Basic256 algorithm suite
+    be used in performing cryptographic operations.
+-->
+                  <sp:AlgorithmSuite>
+                     <wsp:Policy>
+                        <sp:Basic256 />
+                     </wsp:Policy>
+                  </sp:AlgorithmSuite>
+<!--
+    The sp:Layout element,  indicates the layout rules to apply when adding
+    items to the security header.  The sp:Lax sub-element indicates items
+    are added to the security header in any order that conforms to
+    WSS: SOAP Message Security.
+-->
+                  <sp:Layout>
+                     <wsp:Policy>
+                        <sp:Lax />
+                     </wsp:Policy>
+                  </sp:Layout>
+                  <sp:IncludeTimestamp />
+                  <sp:EncryptSignature />
+                  <sp:OnlySignEntireHeadersAndBody />
+               </wsp:Policy>
+            </sp:SymmetricBinding>
+<!--
+    The sp:SignedSupportingTokens element declares that the security header
+    of messages must contain a sp:UsernameToken and the token must be signed.
+    The attribute IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"
+    on sp:UsernameToken indicates that the token MUST be included in all
+    messages sent from initiator to the recipient and that the token MUST
+    NOT be included in messages sent from the recipient to the initiator.
+    And finally the element sp:WssUsernameToken10 is a policy assertion
+    indicating the Username token should be as defined in  Web Services
+    Security UsernameToken Profile 1.0
+-->
+            <sp:SignedSupportingTokens
+               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+               <wsp:Policy>
+                  <sp:UsernameToken
+                     sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+                     <wsp:Policy>
+                        <sp:WssUsernameToken10 />
+                     </wsp:Policy>
+                  </sp:UsernameToken>
+               </wsp:Policy>
+            </sp:SignedSupportingTokens>
+<!--
+    The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
+    to be supported by the STS.  These particular elements generally refer
+    to how keys are referenced within the SOAP envelope.  These are normally
+    handled by CXF.
+-->
+            <sp:Wss11
+               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+               <wsp:Policy>
+                  <sp:MustSupportRefKeyIdentifier />
+                  <sp:MustSupportRefIssuerSerial />
+                  <sp:MustSupportRefThumbprint />
+                  <sp:MustSupportRefEncryptedKey />
+               </wsp:Policy>
+            </sp:Wss11>
+<!--
+    The sp:Trust13 element declares controls for WS-Trust 1.3 options.
+    They are policy assertions related to exchanges specifically with
+    client and server challenges and entropy behaviors.  Again these are
+    normally handled by CXF.
+-->
+            <sp:Trust13
+               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+               <wsp:Policy>
+                  <sp:MustSupportIssuedTokens />
+                  <sp:RequireClientEntropy />
+                  <sp:RequireServerEntropy />
+               </wsp:Policy>
+            </sp:Trust13>
+         </wsp:All>
+      </wsp:ExactlyOne>
+   </wsp:Policy>
+
+   <wsp:Policy wsu:Id="Input_policy">
+      <wsp:ExactlyOne>
+         <wsp:All>
+            <sp:SignedParts
+               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+               <sp:Body />
+               <sp:Header Name="To"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="From"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="FaultTo"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="ReplyTo"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="MessageID"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="RelatesTo"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="Action"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+            </sp:SignedParts>
+            <sp:EncryptedParts
+               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+               <sp:Body />
+            </sp:EncryptedParts>
+         </wsp:All>
+      </wsp:ExactlyOne>
+   </wsp:Policy>
+
+   <wsp:Policy wsu:Id="Output_policy">
+      <wsp:ExactlyOne>
+         <wsp:All>
+            <sp:SignedParts
+               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+               <sp:Body />
+               <sp:Header Name="To"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="From"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="FaultTo"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="ReplyTo"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="MessageID"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="RelatesTo"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+               <sp:Header Name="Action"
+                  Namespace="http://www.w3.org/2005/08/addressing" />
+            </sp:SignedParts>
+            <sp:EncryptedParts
+               xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+               <sp:Body />
+            </sp:EncryptedParts>
+         </wsp:All>
+      </wsp:ExactlyOne>
+   </wsp:Policy>
+ 
+</wsdl:definitions>
+
+
+
+
+STS Implementation +
+

The Apache CXF’s STS, SecurityTokenServiceProvider, is a web service +provider that is compliant with the protocols and functionality defined +by the WS-Trust specification. It has a modular architecture. Many of +its components are configurable or replaceable and there are many +optional features that are enabled by implementing and configuring +plug-ins. Users can customize their own STS by extending from +SecurityTokenServiceProvider and overriding the default settings. +Extensive information about the CXF’s STS configurable and pluggable +components can be found +here.

+
+
+

This STS implementation class, SimpleSTS, is a POJO that extends from +SecurityTokenServiceProvider. Note that the class is defined with a +WebServiceProvider annotation and not a WebService annotation. This +annotation defines the service as a Provider-based endpoint, meaning it +supports a more messaging-oriented approach to Web services. In +particular, it signals that the exchanged messages will be XML documents +of some type. SecurityTokenServiceProvider is an implementation of the +jakarta.xml.ws.Provider interface. In comparison the WebService annotation +defines a (service endpoint interface) SEI-based endpoint which supports +message exchange via SOAP envelopes.

+
+
+

As was done in the ServiceImpl class, the WSS4J annotations +EndpointProperties and EndpointProperty are providing endpoint +configuration for the CXF runtime. This was previous described +here.

+
+
+

The InInterceptors annotation is used to specify a JBossWS integration +interceptor to be used for authenticating incoming requests; JAAS +integration is used here for authentication, the username/passoword +coming from the UsernameToken in the ws-requester message are used for +authenticating the requester against a security domain on the +application server hosting the STS deployment.

+
+
+

In this implementation we are customizing the operations of token +issuance, token validation and their static properties.

+
+
+

StaticSTSProperties is used to set select properties for configuring +resources in the STS. You may think this is a duplication of the +settings made with the WSS4J annotations. The values are the same but +the underlaying structures being set are different, thus this +information must be declared in both places.

+
+
+

The setIssuer setting is important because it uniquely identifies the +issuing STS. The issuer string is embedded in issued tokens and, when +validating tokens, the STS checks the issuer string value. Consequently, +it is important to use the issuer string in a consistent way, so that +the STS can recognize the tokens that it has issued.

+
+
+

The setEndpoints call allows the declaration of a set of allowed token +recipients by address. The addresses are specified as reg-ex patterns.

+
+
+

TokenIssueOperation and TokenValidateOperation have a modular structure. +This allows custom behaviors to be injected into the processing of +messages. In this case we are overriding the +SecurityTokenServiceProvider’s default behavior and performing SAML +token processing and validation. CXF provides an implementation of a +SAMLTokenProvider and SAMLTokenValidator which we are using rather than +writing our own.

+
+
+

Learn more about the SAMLTokenProvider +here.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import jakarta.xml.ws.WebServiceProvider;
+
+import org.apache.cxf.annotations.EndpointProperties;
+import org.apache.cxf.annotations.EndpointProperty;
+import org.apache.cxf.interceptor.InInterceptors;
+import org.apache.cxf.sts.StaticSTSProperties;
+import org.apache.cxf.sts.operation.TokenIssueOperation;
+import org.apache.cxf.sts.operation.TokenValidateOperation;
+import org.apache.cxf.sts.service.ServiceMBean;
+import org.apache.cxf.sts.service.StaticService;
+import org.apache.cxf.sts.token.provider.SAMLTokenProvider;
+import org.apache.cxf.sts.token.validator.SAMLTokenValidator;
+import org.apache.cxf.ws.security.sts.provider.SecurityTokenServiceProvider;
+
+@WebServiceProvider(serviceName = "SecurityTokenService",
+      portName = "UT_Port",
+      targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/",
+      wsdlLocation = "WEB-INF/wsdl/ws-trust-1.4-service.wsdl")
+@EndpointProperties(value = {
+      @EndpointProperty(key = "ws-security.signature.username", value = "mystskey"),
+      @EndpointProperty(key = "ws-security.signature.properties", value = "stsKeystore.properties"),
+      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.STSCallbackHandler"),
+      //to let the JAAS integration deal with validation through the interceptor below
+      @EndpointProperty(key = "ws-security.validate.token", value = "false")
+
+})
+@InInterceptors(interceptors = {"org.jboss.wsf.stack.cxf.security.authentication.SubjectCreatingPolicyInterceptor"})
+public class SampleSTS extends SecurityTokenServiceProvider
+{
+   public SampleSTS() throws Exception
+   {
+      super();
+
+      StaticSTSProperties props = new StaticSTSProperties();
+      props.setSignaturePropertiesFile("stsKeystore.properties");
+      props.setSignatureUsername("mystskey");
+      props.setCallbackHandlerClass(STSCallbackHandler.class.getName());
+      props.setIssuer("DoubleItSTSIssuer");
+
+      List<ServiceMBean> services = new LinkedList<ServiceMBean>();
+      StaticService service = new StaticService();
+      service.setEndpoints(Arrays.asList(
+              "http://localhost:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
+              "http://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
+              "http://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService"
+              ));
+      services.add(service);
+
+      TokenIssueOperation issueOperation = new TokenIssueOperation();
+      issueOperation.setServices(services);
+      issueOperation.getTokenProviders().add(new SAMLTokenProvider());
+      issueOperation.setStsProperties(props);
+
+      TokenValidateOperation validateOperation = new TokenValidateOperation();
+      validateOperation.getTokenValidators().add(new SAMLTokenValidator());
+      validateOperation.setStsProperties(props);
+
+      this.setIssueOperation(issueOperation);
+      this.setValidateOperation(validateOperation);
+   }
+}
+
+
+
+
+STSCallbackHandler +
+

STSCallbackHandler is a callback handler for the WSS4J Crypto API. It is +used to obtain the password for the private key in the keystore. This +class enables CXF to retrieve the password of the user name to use for +the message signature.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.sts;
+ 
+import java.util.HashMap;
+import java.util.Map;
+ 
+import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
+ 
+public class STSCallbackHandler extends PasswordCallbackHandler
+{
+   public STSCallbackHandler()
+   {
+      super(getInitMap());
+   }
+ 
+   private static Map<String, String> getInitMap()
+   {
+      Map<String, String> passwords = new HashMap<String, String>();
+      passwords.put("mystskey", "stskpass");
+      return passwords;
+   }
+}
+
+
+
+
+Crypto properties and keystore files +
+

WSS4J’s Crypto implementation is loaded and configured via a Java +properties file that contains Crypto configuration data. The file +contains implementation-specific properties such as a keystore location, +password, default alias and the like. This application is using the +Merlin implementation. File stsKeystore.properties contains this +information.

+
+
+

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains +self signed certificates for myservicekey and mystskey. Self signed +certificates are not appropriate for production use.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=stsspass
+org.apache.ws.security.crypto.merlin.keystore.file=stsstore.jks
+
+
+
+
+MANIFEST.MF +
+

When deployed on WildFly, this application requires access to the +JBossWs and CXF APIs provided in modules +org.jboss.ws.cxf.jbossws-cxf-client and org.apache.cxf. The Apache CXF +internals, org.apache.cxf.impl, are needed to build the STS +configuration in the SampleSTS constructor. The dependency statement +directs the server to provide them at deployment.

+
+
+
+
Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.8.2
+Created-By: 1.7.0_25-b15 (Oracle Corporation)
+Dependencies: org.jboss.ws.cxf.jbossws-cxf-client,org.apache.cxf.impl
+
+
+
+
+Security Domain +
+

The STS requires a JBoss security domain be configured. The +jboss-web.xml descriptor declares a named security +domain,"JBossWS-trust-sts" to be used by this service for +authentication. This security domain requires two properties files and +the addition of a security-domain declaration in the JBoss server +configuration file.

+
+
+

For this scenario the domain needs to contain user alice, password +clarinet, and role friend. See the listings below for +jbossws-users.properties and jbossws-roles.properties. In addition the +following XML elements must be added to the Elytron subsystem in the +server configuration file. Replace " SOME_PATH" with appropriate +information and then configure authentication with this security domain.

+
+
+
+
<properties-realm name="JBossWS-trust-sts">
+    <users-properties path="/SOME_PATH/usersProperties"/>
+    <groups-properties path="/SOME_PATH/rolesProperties"/>
+</properties-realm>
+...
+<security-domain name="JBossWS-trust-sts" default-realm="JBossWS-trust-sts" permission-mapper="default-permission-mapper">
+    <realm name="JBossWS-trust-sts" role-decoder="groups-to-roles"/>
+</security-domain>
+
+
+
+

jboss-web.xml

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN" ">
+<jboss-web>
+  <security-domain>java:/jaas/JBossWS-trust-sts</security-domain>
+</jboss-web>
+
+
+
+

jbossws-users.properties

+
+
+
+
# A sample users.properties file for use with the UsersRolesLoginModule
+alice=clarinet
+
+
+
+

jbossws-roles.properties

+
+
+
+
# A sample roles.properties file for use with the UsersRolesLoginModule
+alice=friend
+
+
+
+

WS-MetadataExchange and interoperability

+
+
+ + + + + +
+ + +To achieve better interoperability, you might consider allowing the STS +endpoint to reply to WS-MetadataExchange messages directed to the /mex +URL sub-path (e.g. +http://localhost:8080/jaxws-samples-wsse-policy-trust-sts/SecurityTokenService/mex). +This can be done by tweaking the url-pattern for the underlying +endpoint servlet, for instance by adding a web.xml descriptor as +follows to the deployment:<?xml version="1.0" encoding="UTF-8"?>
+<web-app
+version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://java.sun.com/xml/ns/javaee +http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">;
+<servlet>
+<servlet-name>TestSecurityTokenService</servlet-name>
+<servlet-class>org.jboss.test.ws.jaxws.samples.wsse.policy.trust.SampleSTS</servlet-class>
+</servlet>
+<servlet-mapping>
+<servlet-name>TestSecurityTokenService</servlet-name>
+<url-pattern>/SecurityTokenService/*</url-pattern>
+</servlet-mapping>
+</web-app>
+As a matter of fact, at the time of writing some webservices +implementations (including Metro) assume the /mex URL as the default +choice for directing WS-MetadataExchange requests to and use that to +retrieve STS wsdl contracts. +
+
+
+
+
+
Web service requester
+
+

This section examines the crucial elements in calling a web service that +implements endpoint security as described in the basic WS-Trust +scenario. The components that will be discussed are.

+
+
+
    +
  • +

    web service requester’s implementation

    +
  • +
  • +

    ClientCallbackHandler

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
+
+
+Web service requester Implementation +
+

The ws-requester, the client, uses standard procedures for creating a +reference to the web service in the first four line. To address the +endpoint security requirements, the web service’s "Request Context" is +configured with the information needed in message generation. In +addition, the STSClient that communicates with the STS is configured +with similar values. Note the key strings ending with a ".it" suffix. +This suffix flags these settings as belonging to the STSClient. The +internal CXF code assigns this information to the STSClient that is +auto-generated for this service call.

+
+
+

There is an alternate method of setting up the STSCLient. The user may +provide their own instance of the STSClient. The CXF code will use this +object and not auto-generate one. This is used in the ActAs and +OnBehalfOf examples. When providing the STSClient in this way, the user +must provide a org.apache.cxf.Bus for it and the configuration keys must +not have the ".it" suffix.

+
+
+
+
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
+URL wsdlURL = new URL(serviceURL + "?wsdl");
+Service service = Service.create(wsdlURL, serviceName);
+ServiceIface proxy = (ServiceIface) service.getPort(ServiceIface.class);
+
+// set the security related configuration information for the service "request"
+Map<String, Object> ctx = ((BindingProvider) proxy).getRequestContext();
+ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
+ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
+   Thread.currentThread().getContextClassLoader().getResource(
+   "META-INF/clientKeystore.properties"));
+ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
+   Thread.currentThread().getContextClassLoader().getResource(
+   "META-INF/clientKeystore.properties"));
+ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
+ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
+
+
+//-- Configuration settings that will be transfered to the STSClient
+// "alice" is the name provided for the WSS Username. Her password will
+// be retreived from the ClientCallbackHander by the STSClient.
+ctx.put(SecurityConstants.USERNAME + ".it", "alice");
+ctx.put(SecurityConstants.CALLBACK_HANDLER + ".it", new ClientCallbackHandler());
+ctx.put(SecurityConstants.ENCRYPT_PROPERTIES + ".it",
+   Thread.currentThread().getContextClassLoader().getResource(
+   "META-INF/clientKeystore.properties"));
+ctx.put(SecurityConstants.ENCRYPT_USERNAME + ".it", "mystskey");
+// alias name in the keystore to get the user's public key to send to the STS
+ctx.put(SecurityConstants.STS_TOKEN_USERNAME + ".it", "myclientkey");
+// Crypto property configuration to use for the STS
+ctx.put(SecurityConstants.STS_TOKEN_PROPERTIES + ".it",
+   Thread.currentThread().getContextClassLoader().getResource(
+   "META-INF/clientKeystore.properties"));
+// write out an X509Certificate structure in UseKey/KeyInfo
+ctx.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO + ".it", "true");
+// Setting indicates the  STSclient should not try using the WS-MetadataExchange
+// call using STS EPR WSA address when the endpoint contract does not contain
+// WS-MetadataExchange info.
+ctx.put("ws-security.sts.disable-wsmex-call-using-epr-address", "true");
+
+proxy.sayHello();
+
+
+
+
+ClientCallbackHandler +
+

ClientCallbackHandler is a callback handler for the WSS4J Crypto API. It +is used to obtain the password for the private key in the keystore. This +class enables CXF to retrieve the password of the user name to use for +the message signature. Note that "alice" and her password have been +provided here. This information is not in the (JKS) keystore but +provided in the WildFly security domain. It was declared in file +jbossws-users.properties.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared;
+
+import java.io.IOException;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import org.apache.ws.security.WSPasswordCallback;
+
+public class ClientCallbackHandler implements CallbackHandler {
+
+    public void handle(Callback[] callbacks) throws IOException,
+            UnsupportedCallbackException {
+        for (int i = 0; i < callbacks.length; i++) {
+            if (callbacks[i] instanceof WSPasswordCallback) {
+                WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
+                if ("myclientkey".equals(pc.getIdentifier())) {
+                    pc.setPassword("ckpass");
+                    break;
+                } else if ("alice".equals(pc.getIdentifier())) {
+                    pc.setPassword("clarinet");
+                    break;
+                }
+            }
+        }
+    }
+}
+
+
+
+
+Requester Crypto properties and keystore files +
+

WSS4J’s Crypto implementation is loaded and configured via a Java +properties file that contains Crypto configuration data. The file +contains implementation-specific properties such as a keystore location, +password, default alias and the like. This application is using the +Merlin implementation. File clientKeystore.properties contains this +information.

+
+
+

File clientstore.jks, is a Java KeyStore (JKS) repository. It contains +self signed certificates for myservicekey and mystskey. Self signed +certificates are not appropriate for production use.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=cspass
+org.apache.ws.security.crypto.merlin.keystore.alias=myclientkey
+org.apache.ws.security.crypto.merlin.keystore.file=META-INF/clientstore.jks
+
+
+
+
+
+
+
ActAs WS-Trust Scenario
+
+

The ActAs feature is used in scenarios that require composite +delegation. It is commonly used in multi-tiered systems where an +application calls a service on behalf of a logged in user or a service +calls another service on behalf of the original caller.

+
+
+

ActAs is nothing more than a new sub-element in the RequestSecurityToken +(RST). It provides additional information about the original caller when +a token is negotiated with the STS. The ActAs element usually takes the +form of a token with identity claims such as name, role, and +authorization code, for the client to access the service.

+
+
+

The ActAs scenario is an extension of +the basic +WS-Trust scenario. In this example the ActAs service calls the +ws-service on behalf of a user. There are only a couple of additions to +the basic scenario’s code. An ActAs web service provider and callback +handler have been added. The ActAs web services' WSDL imposes the same +security policies as the ws-provider. UsernameTokenCallbackHandler is +new. It is a utility that generates the content for the ActAs element. +And lastly there are a couple of code additions in the STS to support +the ActAs request.

+
+
+
Web service provider
+
+

This section examines the web service elements from the basic WS-Trust +scenario that have been changed to address the needs of the ActAs +example. The components are

+
+
+
    +
  • +

    ActAs web service provider’s WSDL

    +
  • +
  • +

    ActAs web service provider’s Interface and Implementation classes.

    +
  • +
  • +

    ActAsCallbackHandler class

    +
  • +
  • +

    UsernameTokenCallbackHandler

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
  • +

    MANIFEST.MF

    +
  • +
+
+
+Web service provider WSDL +
+

The ActAs web service provider’s WSDL is a clone of the ws-provider’s +WSDL. The wsp:Policy section is the same. There are changes to the +service endpoint, targetNamespace, portType, binding name, and service.

+
+
+
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy" name="ActAsService"
+             xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:wsp="http://www.w3.org/ns/ws-policy"
+             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
+             xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+             xmlns:wsaws="http://www.w3.org/2005/08/addressing"
+             xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
+             xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
+    <types>
+        <xsd:schema>
+            <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy"
+                    schemaLocation="ActAsService_schema1.xsd"/>
+        </xsd:schema>
+    </types>
+    <message name="sayHello">
+        <part name="parameters" element="tns:sayHello"/>
+    </message>
+    <message name="sayHelloResponse">
+        <part name="parameters" element="tns:sayHelloResponse"/>
+    </message>
+    <portType name="ActAsServiceIface">
+        <operation name="sayHello">
+            <input message="tns:sayHello"/>
+            <output message="tns:sayHelloResponse"/>
+        </operation>
+    </portType>
+    <binding name="ActAsServicePortBinding" type="tns:ActAsServiceIface">
+        <wsp:PolicyReference URI="#AsymmetricSAML2Policy" />
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="sayHello">
+            <soap:operation soapAction=""/>
+            <input>
+                <soap:body use="literal"/>
+                <wsp:PolicyReference URI="#Input_Policy" />
+            </input>
+            <output>
+                <soap:body use="literal"/>
+                <wsp:PolicyReference URI="#Output_Policy" />
+            </output>
+        </operation>
+    </binding>
+    <service name="ActAsService">
+        <port name="ActAsServicePort" binding="tns:ActAsServicePortBinding">
+            <soap:address location="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-actas/ActAsService"/>
+        </port>
+    </service>
+ 
+</definitions>
+
+
+
+
+Web Service Interface +
+

The web service provider interface class, ActAsServiceIface, is a simple +web service definition.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas;
+ 
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy"
+)
+public interface ActAsServiceIface
+{
+   @WebMethod
+   String sayHello();
+}
+
+
+
+
+Web Service Implementation +
+

The web service provider implementation class, ActAsServiceImpl, is a +simple POJO. It uses the standard WebService annotation to define the +service endpoint and two Apache WSS4J annotations, EndpointProperties +and EndpointProperty used for configuring the endpoint for the CXF +runtime. The WSS4J configuration information provided is for WSS4J’s +Crypto Merlin implementation.

+
+
+

ActAsServiceImpl is calling ServiceImpl acting on behalf of the user. +Method setupService performs the requisite configuration setup.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas;
+ 
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.annotations.EndpointProperties;
+import org.apache.cxf.annotations.EndpointProperty;
+import org.apache.cxf.ws.security.SecurityConstants;
+import org.apache.cxf.ws.security.trust.STSClient;
+import org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service.ServiceIface;
+import org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared.WSTrustAppUtils;
+ 
+import jakarta.jws.WebService;
+import javax.xml.namespace.QName;
+import jakarta.xml.ws.BindingProvider;
+import jakarta.xml.ws.Service;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+ 
+@WebService
+(
+   portName = "ActAsServicePort",
+   serviceName = "ActAsService",
+   wsdlLocation = "WEB-INF/wsdl/ActAsService.wsdl",
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy",
+   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas.ActAsServiceIface"
+)
+ 
+@EndpointProperties(value = {
+      @EndpointProperty(key = "ws-security.signature.username", value = "myactaskey"),
+      @EndpointProperty(key = "ws-security.signature.properties", value =  "actasKeystore.properties"),
+      @EndpointProperty(key = "ws-security.encryption.properties", value = "actasKeystore.properties"),
+      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas.ActAsCallbackHandler")
+})
+ 
+public class ActAsServiceImpl implements ActAsServiceIface
+{
+   public String sayHello() {
+      try {
+         ServiceIface proxy = setupService();
+         return "ActAs " + proxy.sayHello();
+      } catch (MalformedURLException e) {
+         e.printStackTrace();
+      }
+      return null;
+   }
+ 
+   private  ServiceIface setupService()throws MalformedURLException {
+      ServiceIface proxy = null;
+      Bus bus = BusFactory.newInstance().createBus();
+ 
+      try {
+         BusFactory.setThreadDefaultBus(bus);
+ 
+         final String serviceURL = "http://" + WSTrustAppUtils.getServerHost() + ":8080/jaxws-samples-wsse-policy-trust/SecurityService";
+         final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
+         final URL wsdlURL = new URL(serviceURL + "?wsdl");
+         Service service = Service.create(wsdlURL, serviceName);
+         proxy = (ServiceIface) service.getPort(ServiceIface.class);
+ 
+         Map<String, Object> ctx = ((BindingProvider) proxy).getRequestContext();
+         ctx.put(SecurityConstants.CALLBACK_HANDLER, new ActAsCallbackHandler());
+ 
+         ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
+            Thread.currentThread().getContextClassLoader().getResource("actasKeystore.properties" ));
+         ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myactaskey" );
+         ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
+            Thread.currentThread().getContextClassLoader().getResource("../../META-INF/clientKeystore.properties" ));
+         ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
+ 
+         STSClient stsClient = new STSClient(bus);
+         Map<String, Object> props = stsClient.getProperties();
+         props.put(SecurityConstants.USERNAME, "alice");
+         props.put(SecurityConstants.ENCRYPT_USERNAME, "mystskey");
+         props.put(SecurityConstants.STS_TOKEN_USERNAME, "myactaskey" );
+         props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
+            Thread.currentThread().getContextClassLoader().getResource("actasKeystore.properties" ));
+         props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
+ 
+         ctx.put(SecurityConstants.STS_CLIENT, stsClient);
+ 
+      } finally {
+         bus.shutdown(true);
+      }
+ 
+      return proxy;
+   }
+ 
+}
+
+
+
+
+ActAsCallbackHandler +
+

ActAsCallbackHandler is a callback handler for the WSS4J Crypto API. It +is used to obtain the password for the private key in the keystore. This +class enables CXF to retrieve the password of the user name to use for +the message signature. This class has been revised to return the +passwords for this service, myactaskey and the "actas" user, alice.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.actas;
+ 
+import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
+import java.util.HashMap;
+import java.util.Map;
+ 
+public class ActAsCallbackHandler extends PasswordCallbackHandler {
+ 
+   public ActAsCallbackHandler()
+   {
+      super(getInitMap());
+   }
+ 
+   private static Map<String, String> getInitMap()
+   {
+      Map<String, String> passwords = new HashMap<String, String>();
+      passwords.put("myactaskey", "aspass");
+      passwords.put("alice", "clarinet");
+      return passwords;
+   }
+}
+
+
+
+
+UsernameTokenCallbackHandler +
+

The ActAs and OnBeholdOf sub-elements of the RequestSecurityToken are +required to be defined as WSSE Username Tokens. This utility generates +the properly formated element.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared;
+ 
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.ws.security.SecurityConstants;
+import org.apache.cxf.ws.security.trust.delegation.DelegationCallback;
+import org.apache.ws.security.WSConstants;
+import org.apache.ws.security.message.token.UsernameToken;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.Element;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSSerializer;
+ 
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import java.io.IOException;
+import java.util.Map;
+ 
+/**
+* A utility to provide the 3 different input parameter types for jaxws property
+* "ws-security.sts.token.act-as" and "ws-security.sts.token.on-behalf-of".
+* This implementation obtains a username and password via the jaxws property
+* "ws-security.username" and "ws-security.password" respectively, as defined
+* in SecurityConstants.  It creates a wss UsernameToken to be used as the
+* delegation token.
+*/
+ 
+public class UsernameTokenCallbackHandler implements CallbackHandler {
+ 
+   public void handle(Callback[] callbacks)
+      throws IOException, UnsupportedCallbackException {
+      for (int i = 0; i < callbacks.length; i++) {
+         if (callbacks[i] instanceof DelegationCallback) {
+            DelegationCallback callback = (DelegationCallback) callbacks[i];
+            Message message = callback.getCurrentMessage();
+ 
+            String username =
+               (String)message.getContextualProperty(SecurityConstants.USERNAME);
+            String password =
+               (String)message.getContextualProperty(SecurityConstants.PASSWORD);
+            if (username != null) {
+               Node contentNode = message.getContent(Node.class);
+               Document doc = null;
+               if (contentNode != null) {
+                  doc = contentNode.getOwnerDocument();
+               } else {
+                  doc = DOMUtils.createDocument();
+               }
+               UsernameToken usernameToken = createWSSEUsernameToken(username,password, doc);
+               callback.setToken(usernameToken.getElement());
+            }
+         } else {
+            throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback");
+         }
+      }
+   }
+ 
+   /**
+    * Provide UsernameToken as a string.
+    * @param ctx
+    * @return
+    */
+   public String getUsernameTokenString(Map<String, Object> ctx){
+      Document doc = DOMUtils.createDocument();
+      String result = null;
+      String username = (String)ctx.get(SecurityConstants.USERNAME);
+      String password = (String)ctx.get(SecurityConstants.PASSWORD);
+      if (username != null) {
+         UsernameToken usernameToken = createWSSEUsernameToken(username,password, doc);
+         result = toString(usernameToken.getElement().getFirstChild().getParentNode());
+      }
+      return result;
+   }
+ 
+   /**
+    *
+    * @param username
+    * @param password
+    * @return
+    */
+   public String getUsernameTokenString(String username, String password){
+      Document doc = DOMUtils.createDocument();
+      String result = null;
+      if (username != null) {
+         UsernameToken usernameToken = createWSSEUsernameToken(username,password, doc);
+         result = toString(usernameToken.getElement().getFirstChild().getParentNode());
+      }
+      return result;
+   }
+ 
+   /**
+    * Provide UsernameToken as a DOM Element.
+    * @param ctx
+    * @return
+    */
+   public Element getUsernameTokenElement(Map<String, Object> ctx){
+      Document doc = DOMUtils.createDocument();
+      Element result = null;
+      UsernameToken usernameToken = null;
+         String username = (String)ctx.get(SecurityConstants.USERNAME);
+      String password = (String)ctx.get(SecurityConstants.PASSWORD);
+      if (username != null) {
+         usernameToken = createWSSEUsernameToken(username,password, doc);
+         result = usernameToken.getElement();
+      }
+      return result;
+   }
+ 
+   /**
+    *
+    * @param username
+    * @param password
+    * @return
+    */
+   public Element getUsernameTokenElement(String username, String password){
+      Document doc = DOMUtils.createDocument();
+      Element result = null;
+      UsernameToken usernameToken = null;
+      if (username != null) {
+         usernameToken = createWSSEUsernameToken(username,password, doc);
+         result = usernameToken.getElement();
+      }
+      return result;
+   }
+ 
+   private UsernameToken createWSSEUsernameToken(String username, String password, Document doc) {
+ 
+      UsernameToken usernameToken = new UsernameToken(true, doc,
+         (password == null)? null: WSConstants.PASSWORD_TEXT);
+      usernameToken.setName(username);
+      usernameToken.addWSUNamespace();
+      usernameToken.addWSSENamespace();
+      usernameToken.setID("id-" + username);
+ 
+      if (password != null){
+         usernameToken.setPassword(password);
+      }
+ 
+      return usernameToken;
+   }
+ 
+ 
+   private String toString(Node node) {
+      String str = null;
+ 
+      if (node != null) {
+         DOMImplementationLS lsImpl = (DOMImplementationLS)
+            node.getOwnerDocument().getImplementation().getFeature("LS", "3.0");
+         LSSerializer serializer = lsImpl.createLSSerializer();
+         serializer.getDomConfig().setParameter("xml-declaration", false); //by default its true, so set it to false to get String without xml-declaration
+         str = serializer.writeToString(node);
+      }
+      return str;
+   }
+ 
+}
+
+
+
+
+Crypto properties and keystore files +
+

The ActAs service must provide its own credentials. The requisite +properties file, actasKeystore.properties, and keystore, actasstore.jks, +were created.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=aapass
+org.apache.ws.security.crypto.merlin.keystore.alias=myactaskey
+org.apache.ws.security.crypto.merlin.keystore.file=actasstore.jks
+
+
+
+
+MANIFEST.MF +
+

When deployed on WildFly this application requires access to the JBossWs +and CXF APIs provided in modules org.jboss.ws.cxf.jbossws-cxf-client and +org.apache.cxf. The Apache CXF internals, org.apache.cxf.impl, are +needed in handling the ActAs and OnBehalfOf extensions. The dependency +statement directs the server to provide them at deployment.

+
+
+
+
Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.8.2
+Created-By: 1.7.0_25-b15 (Oracle Corporation)
+Dependencies: org.jboss.ws.cxf.jbossws-cxf-client, org.apache.cxf.impl
+
+
+
+
+
+
Security Token Service
+
+

This section examines the STS elements from the basic WS-Trust scenario +that have been changed to address the needs of the ActAs example. The +components are.

+
+
+
    +
  • +

    STS’s implementation class.

    +
  • +
  • +

    STSCallbackHandler class

    +
  • +
+
+
+STS Implementation class +
+

The initial description of SampleSTS can be found +here.

+
+
+

The declaration of the set of allowed token recipients by address has +been extended to accept ActAs addresses and OnBehalfOf addresses. The +addresses are specified as reg-ex patterns.

+
+
+

The TokenIssueOperation requires class, UsernameTokenValidator be +provided in order to validate the contents of the OnBehalfOf claims and +class, UsernameTokenDelegationHandler to be provided in order to process +the token delegation request of the ActAs on OnBehalfOf user.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.sts;
+ 
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+ 
+import jakarta.xml.ws.WebServiceProvider;
+ 
+import org.apache.cxf.annotations.EndpointProperties;
+import org.apache.cxf.annotations.EndpointProperty;
+import org.apache.cxf.interceptor.InInterceptors;
+import org.apache.cxf.sts.StaticSTSProperties;
+import org.apache.cxf.sts.operation.TokenIssueOperation;
+import org.apache.cxf.sts.operation.TokenValidateOperation;
+import org.apache.cxf.sts.service.ServiceMBean;
+import org.apache.cxf.sts.service.StaticService;
+import org.apache.cxf.sts.token.delegation.UsernameTokenDelegationHandler;
+import org.apache.cxf.sts.token.provider.SAMLTokenProvider;
+import org.apache.cxf.sts.token.validator.SAMLTokenValidator;
+import org.apache.cxf.sts.token.validator.UsernameTokenValidator;
+import org.apache.cxf.ws.security.sts.provider.SecurityTokenServiceProvider;
+ 
+@WebServiceProvider(serviceName = "SecurityTokenService",
+      portName = "UT_Port",
+      targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/",
+      wsdlLocation = "WEB-INF/wsdl/ws-trust-1.4-service.wsdl")
+//be sure to have dependency on org.apache.cxf module when on AS7, otherwise Apache CXF annotations are ignored
+@EndpointProperties(value = {
+      @EndpointProperty(key = "ws-security.signature.username", value = "mystskey"),
+      @EndpointProperty(key = "ws-security.signature.properties", value = "stsKeystore.properties"),
+      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.sts.STSCallbackHandler"),
+      @EndpointProperty(key = "ws-security.validate.token", value = "false") //to let the JAAS integration deal with validation through the interceptor below
+})
+@InInterceptors(interceptors = {"org.jboss.wsf.stack.cxf.security.authentication.SubjectCreatingPolicyInterceptor"})
+public class SampleSTS extends SecurityTokenServiceProvider
+{
+   public SampleSTS() throws Exception
+   {
+      super();
+ 
+      StaticSTSProperties props = new StaticSTSProperties();
+      props.setSignatureCryptoProperties("stsKeystore.properties");
+      props.setSignatureUsername("mystskey");
+      props.setCallbackHandlerClass(STSCallbackHandler.class.getName());
+      props.setIssuer("DoubleItSTSIssuer");
+ 
+      List<ServiceMBean> services = new LinkedList<ServiceMBean>();
+      StaticService service = new StaticService();
+      service.setEndpoints(Arrays.asList(
+         "http://localhost:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
+         "http://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
+         "http://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust/SecurityService",
+ 
+         "http://localhost:(\\d)*/jaxws-samples-wsse-policy-trust-actas/ActAsService",
+         "http://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-actas/ActAsService",
+         "http://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-actas/ActAsService",
+ 
+         "http://localhost:(\\d)*/jaxws-samples-wsse-policy-trust-onbehalfof/OnBehalfOfService",
+         "http://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-onbehalfof/OnBehalfOfService",
+         "http://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-onbehalfof/OnBehalfOfService"
+      ));
+      services.add(service);
+ 
+      TokenIssueOperation issueOperation = new TokenIssueOperation();
+      issueOperation.setServices(services);
+      issueOperation.getTokenProviders().add(new SAMLTokenProvider());
+      // required for OnBehalfOf
+      issueOperation.getTokenValidators().add(new UsernameTokenValidator());
+      // added for OnBehalfOf and ActAs
+      issueOperation.getDelegationHandlers().add(new UsernameTokenDelegationHandler());
+      issueOperation.setStsProperties(props);
+ 
+      TokenValidateOperation validateOperation = new TokenValidateOperation();
+      validateOperation.getTokenValidators().add(new SAMLTokenValidator());
+      validateOperation.setStsProperties(props);
+ 
+      this.setIssueOperation(issueOperation);
+      this.setValidateOperation(validateOperation);
+   }
+}
+
+
+
+
+STSCallbackHandler +
+

The user, alice, and corresponding password was required to be added for +the ActAs example.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.sts;
+ 
+import java.util.HashMap;
+import java.util.Map;
+ 
+import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
+ 
+public class STSCallbackHandler extends PasswordCallbackHandler
+{
+   public STSCallbackHandler()
+   {
+      super(getInitMap());
+   }
+ 
+   private static Map<String, String> getInitMap()
+   {
+      Map<String, String> passwords = new HashMap<String, String>();
+      passwords.put("mystskey", "stskpass");
+      passwords.put("alice", "clarinet");
+      return passwords;
+   }
+}
+
+
+
+
+
+
Web service requester
+
+

This section examines the ws-requester elements from the basic WS-Trust +scenario that have been changed to address the needs of the ActAs +example. The component is

+
+
+
    +
  • +

    ActAs web service requester implementation class

    +
  • +
+
+
+Web service requester Implementation +
+

The ActAs ws-requester, the client, uses standard procedures for +creating a reference to the web service in the first four lines. To +address the endpoint security requirements, the web service’s "Request +Context" is configured via the BindingProvider. Information needed in +the message generation is provided through it. The ActAs user, +myactaskey, is declared in this section and UsernameTokenCallbackHandler +is used to provide the contents of the ActAs element to the STSClient. +In this example a STSClient object is created and provided to the +proxy’s request context. The alternative is to provide keys tagged with +the ".it" suffix as was done in +the +Basic Scenario client. The use of ActAs is configured through the props +map using the SecurityConstants.STS_TOKEN_ACT_AS key. The alternative is +to use the STSClient.setActAs method.

+
+
+
+
final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/actaswssecuritypolicy", "ActAsService");
+final URL wsdlURL = new URL(serviceURL + "?wsdl");
+Service service = Service.create(wsdlURL, serviceName);
+ActAsServiceIface proxy = (ActAsServiceIface) service.getPort(ActAsServiceIface.class);
+ 
+Bus bus = BusFactory.newInstance().createBus();
+try {
+    BusFactory.setThreadDefaultBus(bus);
+ 
+    Map<String, Object> ctx = proxy.getRequestContext();
+ 
+    ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
+    ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
+        Thread.currentThread().getContextClassLoader().getResource(
+        "META-INF/clientKeystore.properties"));
+    ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myactaskey");
+    ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
+        Thread.currentThread().getContextClassLoader().getResource(
+        "META-INF/clientKeystore.properties"));
+    ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
+ 
+    // Generate the ActAs element contents and pass to the STSClient as a string
+    UsernameTokenCallbackHandler ch = new UsernameTokenCallbackHandler();
+    String str = ch.getUsernameTokenString("alice","clarinet");
+    ctx.put(SecurityConstants.STS_TOKEN_ACT_AS, str);
+ 
+    STSClient stsClient = new STSClient(bus);
+    Map<String, Object> props = stsClient.getProperties();
+    props.put(SecurityConstants.USERNAME, "bob");
+    props.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
+    props.put(SecurityConstants.ENCRYPT_PROPERTIES,
+        Thread.currentThread().getContextClassLoader().getResource(
+        "META-INF/clientKeystore.properties"));
+    props.put(SecurityConstants.ENCRYPT_USERNAME, "mystskey");
+    props.put(SecurityConstants.STS_TOKEN_USERNAME, "myclientkey");
+    props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
+        Thread.currentThread().getContextClassLoader().getResource(
+        "META-INF/clientKeystore.properties"));
+    props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
+ 
+    ctx.put(SecurityConstants.STS_CLIENT, stsClient);
+} finally {
+    bus.shutdown(true);
+}
+proxy.sayHello();
+
+
+
+
+
+
+
OnBehalfOf WS-Trust Scenario
+
+

The OnBehalfOf feature is used in scenarios that use the proxy pattern. +In such scenarios, the client cannot access the STS directly, instead it +communicates through a proxy gateway. The proxy gateway authenticates +the caller and puts information about the caller into the OnBehalfOf +element of the RequestSecurityToken (RST) sent to the real STS for +processing. The resulting token contains only claims related to the +client of the proxy, making the proxy completely transparent to the +receiver of the issued token.

+
+
+

OnBehalfOf is nothing more than a new sub-element in the RST. It +provides additional information about the original caller when a token +is negotiated with the STS. The OnBehalfOf element usually takes the +form of a token with identity claims such as name, role, and +authorization code, for the client to access the service.

+
+
+

The OnBehalfOf scenario is an extension of +the +basic WS-Trust scenario. In this example the OnBehalfOf service calls +the ws-service on behalf of a user. There are only a couple of additions +to the basic scenario’s code. An OnBehalfOf web service provider and +callback handler have been added. The OnBehalfOf web services' WSDL +imposes the same security policies as the ws-provider. +UsernameTokenCallbackHandler is a utility shared with ActAs. It +generates the content for the OnBehalfOf element. And lastly there are +code additions in the STS that both OnBehalfOf and ActAs share in +common.

+
+ +
+
Web service provider
+
+

This section examines the web service elements from the basic WS-Trust +scenario that have been changed to address the needs of the OnBehalfOf +example. The components are.

+
+
+
    +
  • +

    web service provider’s WSDL

    +
  • +
  • +

    web service provider’s Interface and Implementation classes.

    +
  • +
  • +

    OnBehalfOfCallbackHandler class

    +
  • +
+
+
+Web service provider WSDL +
+

The OnBehalfOf web service provider’s WSDL is a clone of the +ws-provider’s WSDL. The wsp:Policy section is the same. There are +changes to the service endpoint, targetNamespace, portType, binding +name, and service.

+
+
+
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy" name="OnBehalfOfService"
+             xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:wsp="http://www.w3.org/ns/ws-policy"
+             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
+             xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+             xmlns:wsaws="http://www.w3.org/2005/08/addressing"
+             xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
+             xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
+    <types>
+        <xsd:schema>
+            <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy"
+                  schemaLocation="OnBehalfOfService_schema1.xsd"/>
+        </xsd:schema>
+    </types>
+    <message name="sayHello">
+        <part name="parameters" element="tns:sayHello"/>
+    </message>
+    <message name="sayHelloResponse">
+        <part name="parameters" element="tns:sayHelloResponse"/>
+    </message>
+    <portType name="OnBehalfOfServiceIface">
+        <operation name="sayHello">
+            <input message="tns:sayHello"/>
+            <output message="tns:sayHelloResponse"/>
+        </operation>
+    </portType>
+    <binding name="OnBehalfOfServicePortBinding" type="tns:OnBehalfOfServiceIface">
+        <wsp:PolicyReference URI="#AsymmetricSAML2Policy" />
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="sayHello">
+            <soap:operation soapAction=""/>
+            <input>
+                <soap:body use="literal"/>
+                <wsp:PolicyReference URI="#Input_Policy" />
+            </input>
+            <output>
+                <soap:body use="literal"/>
+                <wsp:PolicyReference URI="#Output_Policy" />
+            </output>
+        </operation>
+    </binding>
+    <service name="OnBehalfOfService">
+        <port name="OnBehalfOfServicePort" binding="tns:OnBehalfOfServicePortBinding">
+            <soap:address location="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-onbehalfof/OnBehalfOfService"/>
+        </port>
+    </service>
+</definitions>
+
+
+
+
+Web Service Interface +
+

The web service provider interface class, OnBehalfOfServiceIface, is a +simple web service definition.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof;
+ 
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy"
+)
+public interface OnBehalfOfServiceIface
+{
+   @WebMethod
+   String sayHello();
+}
+
+
+
+
+Web Service Implementation +
+

The web service provider implementation class, OnBehalfOfServiceImpl, is +a simple POJO. It uses the standard WebService annotation to define the +service endpoint and two Apache WSS4J annotations, EndpointProperties +and EndpointProperty used for configuring the endpoint for the CXF +runtime. The WSS4J configuration information provided is for WSS4J’s +Crypto Merlin implementation.

+
+
+

OnBehalfOfServiceImpl is calling the ServiceImpl acting on behalf of the +user. Method setupService performs the requisite configuration setup.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof;
+ 
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.annotations.EndpointProperties;
+import org.apache.cxf.annotations.EndpointProperty;
+import org.apache.cxf.ws.security.SecurityConstants;
+import org.apache.cxf.ws.security.trust.STSClient;
+import org.jboss.test.ws.jaxws.samples.wsse.policy.trust.service.ServiceIface;
+import org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared.WSTrustAppUtils;
+ 
+import jakarta.jws.WebService;
+import jakarta.xml.ws.BindingProvider;
+import jakarta.xml.ws.Service;
+import java.net.*;
+import java.util.Map;
+import javax.xml.namespace.QName;
+ 
+@WebService
+(
+   portName = "OnBehalfOfServicePort",
+   serviceName = "OnBehalfOfService",
+   wsdlLocation = "WEB-INF/wsdl/OnBehalfOfService.wsdl",
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy",
+   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof.OnBehalfOfServiceIface"
+)
+ 
+@EndpointProperties(value = {
+      @EndpointProperty(key = "ws-security.signature.username", value = "myactaskey"),
+      @EndpointProperty(key = "ws-security.signature.properties", value =  "actasKeystore.properties"),
+      @EndpointProperty(key = "ws-security.encryption.properties", value = "actasKeystore.properties"),
+      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof.OnBehalfOfCallbackHandler")
+})
+ 
+public class OnBehalfOfServiceImpl implements OnBehalfOfServiceIface
+{
+   public String sayHello() {
+      try {
+ 
+         ServiceIface proxy = setupService();
+         return "OnBehalfOf " + proxy.sayHello();
+ 
+      } catch (MalformedURLException e) {
+         e.printStackTrace();
+      }
+      return null;
+   }
+ 
+   /**
+    *
+    * @return
+    * @throws MalformedURLException
+    */
+   private  ServiceIface setupService()throws MalformedURLException {
+      ServiceIface proxy = null;
+      Bus bus = BusFactory.newInstance().createBus();
+ 
+      try {
+         BusFactory.setThreadDefaultBus(bus);
+ 
+         final String serviceURL = "http://" + WSTrustAppUtils.getServerHost() + ":8080/jaxws-samples-wsse-policy-trust/SecurityService";
+         final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "SecurityService");
+         final URL wsdlURL = new URL(serviceURL + "?wsdl");
+         Service service = Service.create(wsdlURL, serviceName);
+         proxy = (ServiceIface) service.getPort(ServiceIface.class);
+ 
+         Map<String, Object> ctx = ((BindingProvider) proxy).getRequestContext();
+         ctx.put(SecurityConstants.CALLBACK_HANDLER, new OnBehalfOfCallbackHandler());
+ 
+         ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
+            Thread.currentThread().getContextClassLoader().getResource(
+            "actasKeystore.properties" ));
+         ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myactaskey" );
+         ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
+            Thread.currentThread().getContextClassLoader().getResource(
+            "../../META-INF/clientKeystore.properties" ));
+         ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
+ 
+         STSClient stsClient = new STSClient(bus);
+         Map<String, Object> props = stsClient.getProperties();
+         props.put(SecurityConstants.USERNAME, "bob");
+         props.put(SecurityConstants.ENCRYPT_USERNAME, "mystskey");
+         props.put(SecurityConstants.STS_TOKEN_USERNAME, "myactaskey" );
+         props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
+            Thread.currentThread().getContextClassLoader().getResource(
+            "actasKeystore.properties" ));
+         props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
+ 
+         ctx.put(SecurityConstants.STS_CLIENT, stsClient);
+ 
+      } finally {
+         bus.shutdown(true);
+      }
+ 
+      return proxy;
+   }
+ 
+}
+
+
+
+
+OnBehalfOfCallbackHandler +
+

OnBehalfOfCallbackHandler is a callback handler for the WSS4J Crypto +API. It is used to obtain the password for the private key in the +keystore. This class enables CXF to retrieve the password of the user +name to use for the message signature. This class has been revised to +return the passwords for this service, myactaskey and the "OnBehalfOf" +user, alice.

+
+
+
+
 package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.onbehalfof;
+ 
+import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
+import java.util.HashMap;
+import java.util.Map;
+ 
+public class OnBehalfOfCallbackHandler extends PasswordCallbackHandler {
+ 
+   public OnBehalfOfCallbackHandler()
+   {
+      super(getInitMap());
+   }
+ 
+   private static Map<String, String> getInitMap()
+   {
+      Map<String, String> passwords = new HashMap<String, String>();
+      passwords.put("myactaskey", "aspass");
+      passwords.put("alice", "clarinet");
+      passwords.put("bob", "trombone");
+      return passwords;
+   }
+ 
+}
+
+
+
+
+
+
Web service requester
+
+

This section examines the ws-requester elements from the basic WS-Trust +scenario that have been changed to address the needs of the OnBehalfOf +example. The component is

+
+
+
    +
  • +

    OnBehalfOf web service requester implementation class

    +
  • +
+
+
+Web service requester Implementation +
+

The OnBehalfOf ws-requester, the client, uses standard procedures for +creating a reference to the web service in the first four lines. To +address the endpoint security requirements, the web service’s "Request +Context" is configured via the BindingProvider. Information needed in +the message generation is provided through it. The OnBehalfOf user, +alice, is declared in this section and the callbackHandler, +UsernameTokenCallbackHandler is provided to the STSClient for generation +of the contents for the OnBehalfOf message element. In this example a +STSClient object is created and provided to the proxy’s request context. +The alternative is to provide keys tagged with the ".it" suffix as was +done in +the +Basic Scenario client. The use of OnBehalfOf is configured by the +method call stsClient.setOnBehalfOf. The alternative is to use the key +SecurityConstants.STS_TOKEN_ON_BEHALF_OF and a value in the props map.

+
+
+
+
final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/onbehalfofwssecuritypolicy", "OnBehalfOfService");
+final URL wsdlURL = new URL(serviceURL + "?wsdl");
+Service service = Service.create(wsdlURL, serviceName);
+OnBehalfOfServiceIface proxy = (OnBehalfOfServiceIface) service.getPort(OnBehalfOfServiceIface.class);
+ 
+ 
+Bus bus = BusFactory.newInstance().createBus();
+try {
+ 
+    BusFactory.setThreadDefaultBus(bus);
+ 
+    Map<String, Object> ctx = proxy.getRequestContext();
+ 
+    ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
+    ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
+        Thread.currentThread().getContextClassLoader().getResource(
+        "META-INF/clientKeystore.properties"));
+    ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myactaskey");
+    ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
+        Thread.currentThread().getContextClassLoader().getResource(
+        "META-INF/clientKeystore.properties"));
+    ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
+ 
+    // user and password OnBehalfOf user
+    // UsernameTokenCallbackHandler will extract this information when called
+    ctx.put(SecurityConstants.USERNAME,"alice");
+    ctx.put(SecurityConstants.PASSWORD, "clarinet");
+ 
+    STSClient stsClient = new STSClient(bus);
+ 
+    // Providing the STSClient the mechanism to create the claims contents for OnBehalfOf
+    stsClient.setOnBehalfOf(new UsernameTokenCallbackHandler());
+ 
+    Map<String, Object> props = stsClient.getProperties();
+    props.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
+    props.put(SecurityConstants.ENCRYPT_PROPERTIES,
+        Thread.currentThread().getContextClassLoader().getResource(
+        "META-INF/clientKeystore.properties"));
+    props.put(SecurityConstants.ENCRYPT_USERNAME, "mystskey");
+    props.put(SecurityConstants.STS_TOKEN_USERNAME, "myclientkey");
+    props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
+        Thread.currentThread().getContextClassLoader().getResource(
+        "META-INF/clientKeystore.properties"));
+    props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
+ 
+    ctx.put(SecurityConstants.STS_CLIENT, stsClient);
+ 
+} finally {
+    bus.shutdown(true);
+}
+proxy.sayHello();
+
+
+
+
+
+
+
SAML Bearer Assertion Scenario
+
+

WS-Trust deals with managing software security tokens. A SAML assertion +is a type of security token. In the SAML Bearer scenario, the service +provider automatically trusts that the incoming SOAP request came from +the subject defined in the SAML token after the service verifies the +tokens signature.

+
+
+

Implementation of this scenario has the following requirements.

+
+
+
    +
  • +

    SAML tokens with a Bearer subject confirmation method must be +protected so the token can not be snooped. In most cases, a bearer token +combined with HTTPS is sufficient to prevent "a man in the middle" +getting possession of the token. This means a security policy that uses +a sp:TransportBinding and sp:HttpsToken.

    +
  • +
  • +

    A bearer token has no encryption or signing keys associated with it, +therefore a sp:IssuedToken of bearer keyType should be used with a +sp:SupportingToken or a sp:SignedSupportingTokens.

    +
  • +
+
+
+
Web service Provider
+
+

This section examines the web service elements for the SAML Bearer +scenario. The components are

+
+
+
    +
  • +

    Bearer web service provider’s WSDL

    +
  • +
  • +

    SSL configuration

    +
  • +
  • +

    Bearer web service provider’s Interface and Implementation classes.

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
  • +

    MANIFEST.MF

    +
  • +
+
+
+Web service provider WSDL +
+

The web service provider is a contract-first endpoint. All the WS-trust +and security policies for it are declared in WSDL, BearerService.wsdl. +For this scenario a ws-requester is required to present a SAML 2.0 +Bearer token issued from a designed STS. The address of the STS is +provided in the WSDL. HTTPS, a TransportBinding and HttpsToken policy +are used to protect the SOAP body of messages that pass back and forth +between ws-requester and ws-provider. A detailed explanation of the +security settings are provided in the comments in the listing below.

+
+
+
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy"
+             name="BearerService"
+             xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:wsp="http://www.w3.org/ns/ws-policy"
+             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
+             xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+             xmlns:wsaws="http://www.w3.org/2005/08/addressing"
+             xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"
+             xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
+             xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
+ 
+  <types>
+    <xsd:schema>
+      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy"
+                  schemaLocation="BearerService_schema1.xsd"/>
+    </xsd:schema>
+  </types>
+  <message name="sayHello">
+    <part name="parameters" element="tns:sayHello"/>
+  </message>
+  <message name="sayHelloResponse">
+    <part name="parameters" element="tns:sayHelloResponse"/>
+  </message>
+  <portType name="BearerIface">
+    <operation name="sayHello">
+      <input message="tns:sayHello"/>
+      <output message="tns:sayHelloResponse"/>
+    </operation>
+  </portType>
+ 
+<!--
+        The wsp:PolicyReference binds the security requirments on all the endpoints.
+        The wsp:Policy wsu:Id="#TransportSAML2BearerPolicy" element is defined later in this file.
+-->
+  <binding name="BearerServicePortBinding" type="tns:BearerIface">
+    <wsp:PolicyReference URI="#TransportSAML2BearerPolicy" />
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <operation name="sayHello">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+  </binding>
+ 
+<!--
+  The soap:address has been defined to use JBoss's https port, 8443.  This is
+  set in conjunction with the sp:TransportBinding policy for https.
+-->
+  <service name="BearerService">
+    <port name="BearerServicePort" binding="tns:BearerServicePortBinding">
+      <soap:address location="https://@jboss.bind.address@:8443/jaxws-samples-wsse-policy-trust-bearer/BearerService"/>
+    </port>
+  </service>
+ 
+ 
+  <wsp:Policy wsu:Id="TransportSAML2BearerPolicy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+  <!--
+        The wsam:Addressing element, indicates that the endpoints of this
+        web service MUST conform to the WS-Addressing specification.  The
+        attribute wsp:Optional="false" enforces this assertion.
+  -->
+        <wsam:Addressing wsp:Optional="false">
+          <wsp:Policy />
+        </wsam:Addressing>
+ 
+<!--
+  The sp:TransportBinding element indicates that security is provided by the
+  message exchange transport medium, https.  WS-Security policy specification
+  defines the sp:HttpsToken for use in exchanging messages transmitted over HTTPS.
+-->
+        <sp:TransportBinding
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+            <sp:TransportToken>
+              <wsp:Policy>
+                <sp:HttpsToken>
+                  <wsp:Policy/>
+                </sp:HttpsToken>
+              </wsp:Policy>
+            </sp:TransportToken>
+<!--
+     The sp:AlgorithmSuite element, requires the TripleDes algorithm suite
+     be used in performing cryptographic operations.
+-->
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:TripleDes />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+<!--
+     The sp:Layout element,  indicates the layout rules to apply when adding
+     items to the security header.  The sp:Lax sub-element indicates items
+     are added to the security header in any order that conforms to
+     WSS: SOAP Message Security.
+-->
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Lax />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+          </wsp:Policy>
+        </sp:TransportBinding>
+ 
+<!--
+  The sp:SignedSupportingTokens element causes the supporting tokens
+  to be signed using the primary token that is used to sign the message.
+-->
+        <sp:SignedSupportingTokens
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+<!--
+  The sp:IssuedToken element asserts that a SAML 2.0 security token of type
+  Bearer is expected from the STS.  The
+  sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+  attribute instructs the runtime to include the initiator's public key
+  with every message sent to the recipient.
+ 
+  The sp:RequestSecurityTokenTemplate element directs that all of the
+  children of this element will be copied directly into the body of the
+  RequestSecurityToken (RST) message that is sent to the STS when the
+  initiator asks the STS to issue a token.
+-->
+            <sp:IssuedToken
+              sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+              <sp:RequestSecurityTokenTemplate>
+                <t:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</t:TokenType>
+                <t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</t:KeyType>
+              </sp:RequestSecurityTokenTemplate>
+              <wsp:Policy>
+                <sp:RequireInternalReference />
+              </wsp:Policy>
+<!--
+  The sp:Issuer element defines the STS's address and endpoint information
+  This information is used by the STSClient.
+-->
+              <sp:Issuer>
+                <wsaws:Address>http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts-bearer/SecurityTokenService</wsaws:Address>
+                <wsaws:Metadata
+                  xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
+                  wsdli:wsdlLocation="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts-bearer/SecurityTokenService?wsdl">
+                  <wsaw:ServiceName
+                    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
+                    xmlns:stsns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+                    EndpointName="UT_Port">stsns:SecurityTokenService</wsaw:ServiceName>
+                </wsaws:Metadata>
+              </sp:Issuer>
+ 
+            </sp:IssuedToken>
+          </wsp:Policy>
+        </sp:SignedSupportingTokens>
+<!--
+    The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
+    to be supported by the STS.  These particular elements generally refer
+    to how keys are referenced within the SOAP envelope.  These are normally
+    handled by CXF.
+-->
+        <sp:Wss11>
+          <wsp:Policy>
+            <sp:MustSupportRefIssuerSerial />
+            <sp:MustSupportRefThumbprint />
+            <sp:MustSupportRefEncryptedKey />
+          </wsp:Policy>
+        </sp:Wss11>
+<!--
+    The sp:Trust13 element declares controls for WS-Trust 1.3 options.
+    They are policy assertions related to exchanges specifically with
+    client and server challenges and entropy behaviors.  Again these are
+    normally handled by CXF.
+-->
+        <sp:Trust13>
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust13>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+ 
+</definitions>
+
+
+
+
+SSL configuration +
+

This web service is using https, therefore the JBoss server must be +configured to provide SSL support in the Web subsystem. There are 2 +components to SSL configuration.

+
+
+
    +
  • +

    create a certificate keystore

    +
  • +
  • +

    declare an SSL connector in the Web subsystem of the JBoss server +configuration file.

    +
  • +
+
+
+

Follow the directions for setting up TLS in the WildFly Elytron Security Guide.

+
+
+
+Web service Interface +
+

The web service provider interface class, BearerIface, is a simple +straight forward web service definition.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.bearer;
+ 
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy"
+)
+public interface BearerIface
+{
+   @WebMethod
+   String sayHello();
+}
+
+
+
+
+Web service Implementation +
+

The web service provider implementation class, BearerImpl, is a simple +POJO. It uses the standard WebService annotation to define the service +endpoint. In addition there are two Apache CXF annotations, +EndpointProperties and EndpointProperty used for configuring the +endpoint for the CXF runtime. These annotations come from the +Apache WSS4J project, which provides a +Java implementation of the primary WS-Security standards for Web +Services. These annotations are programmatically adding properties to +the endpoint. With plain Apache CXF, these properties are often set via +the <jaxws:properties> element on the <jaxws:endpoint> element in the +Spring config; these annotations allow the properties to be configured +in the code.

+
+
+

WSS4J uses the Crypto interface to get keys and certificates for +signature creation/verification, as is asserted by the WSDL for this +service. The WSS4J configuration information being provided by +BearerImpl is for Crypto’s Merlin implementation. More information will +be provided about this in the keystore section.

+
+
+

Because the web service provider automatically trusts that the incoming +SOAP request came from the subject defined in the SAML token there is no +need for a Crypto callbackHandler class or a signature username, unlike +in prior examples, however in order to verify the message signature, the +Java properties file that contains the (Merlin) crypto configuration +information is still required.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.bearer;
+ 
+import org.apache.cxf.annotations.EndpointProperties;
+import org.apache.cxf.annotations.EndpointProperty;
+ 
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   portName = "BearerServicePort",
+   serviceName = "BearerService",
+   wsdlLocation = "WEB-INF/wsdl/BearerService.wsdl",
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy",
+   endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.bearer.BearerIface"
+)
+@EndpointProperties(value = {
+   @EndpointProperty(key = "ws-security.signature.properties", value = "serviceKeystore.properties")
+})
+public class BearerImpl implements BearerIface
+{
+   public String sayHello()
+   {
+      return "Bearer WS-Trust Hello World!";
+   }
+}
+
+
+
+
+Crypto properties and keystore files +
+

WSS4J’s Crypto implementation is loaded and configured via a Java +properties file that contains Crypto configuration data. The file +contains implementation-specific properties such as a keystore location, +password, default alias and the like. This application is using the +Merlin implementation. File serviceKeystore.properties contains this +information.

+
+
+

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains +self signed certificates for myservicekey and mystskey. Self signed +certificates are not appropriate for production use.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=sspass
+org.apache.ws.security.crypto.merlin.keystore.alias=myservicekey
+org.apache.ws.security.crypto.merlin.keystore.file=servicestore.jks
+
+
+
+
+MANIFEST.MF +
+

When deployed on WildFly this application requires access to the JBossWs +and CXF APIs provided in module org.jboss.ws.cxf.jbossws-cxf-client. The +dependency statement directs the server to provide them at deployment.

+
+
+
+
Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.8.2
+Created-By: 1.7.0_25-b15 (Oracle Corporation)
+Dependencies: org.jboss.ws.cxf.jbossws-cxf-client
+
+
+
+
+
+
Bearer Security Token Service
+
+

This section examines the crucial elements in providing the Security +Token Service functionality for providing a SAML Bearer token. The +components that will be discussed are.

+
+
+
    +
  • +

    Security Domain

    +
  • +
  • +

    STS’s WSDL

    +
  • +
  • +

    STS’s implementation class

    +
  • +
  • +

    STSBearerCallbackHandler

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
  • +

    MANIFEST.MF

    +
  • +
+
+
+Security Domain +
+

The STS requires a JBoss security domain be configured. The +jboss-web.xml descriptor declares a named security +domain,"JBossWS-trust-sts" to be used by this service for +authentication. This security domain requires two properties files and +the addition of a security-domain declaration in the JBoss server +configuration file.

+
+
+

For this scenario the domain needs to contain user alice, password +clarinet, and role friend. See the listings below for +jbossws-users.properties and jbossws-roles.properties. In addition the +following XML elements must be added to the Elytron subsystem in the +server configuration file. Replace " SOME_PATH" with appropriate +information and then configure authentication with this security domain.

+
+
+
+
<properties-realm name="JBossWS-trust-sts">
+    <users-properties path="/SOME_PATH/usersProperties"/>
+    <groups-properties path="/SOME_PATH/rolesProperties"/>
+</properties-realm>
+...
+<security-domain name="JBossWS-trust-sts" default-realm="JBossWS-trust-sts" permission-mapper="default-permission-mapper">
+    <realm name="JBossWS-trust-sts" role-decoder="groups-to-roles"/>
+</security-domain>
+
+
+
+

jboss-web.xml

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN" ">
+<jboss-web>
+  <security-domain>java:/jaas/JBossWS-trust-sts</security-domain>
+</jboss-web>
+
+
+
+

jbossws-users.properties

+
+
+
+
# A sample users.properties file for use with the UsersRolesLoginModule
+alice=clarinet
+
+
+
+

jbossws-roles.properties

+
+
+
+
# A sample roles.properties file for use with the UsersRolesLoginModule
+alice=friend
+
+
+
+
+STS’s WSDL +
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions
+  targetNamespace="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+  xmlns:tns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+  xmlns:wstrust="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+  xmlns:wsap10="http://www.w3.org/2006/05/addressing/wsdl"
+  xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+  xmlns:wsp="http://www.w3.org/ns/ws-policy"
+  xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
+ 
+  <wsdl:types>
+    <xs:schema elementFormDefault="qualified"
+               targetNamespace='http://docs.oasis-open.org/ws-sx/ws-trust/200512'>
+ 
+      <xs:element name='RequestSecurityToken'
+                  type='wst:AbstractRequestSecurityTokenType'/>
+      <xs:element name='RequestSecurityTokenResponse'
+                  type='wst:AbstractRequestSecurityTokenType'/>
+ 
+      <xs:complexType name='AbstractRequestSecurityTokenType'>
+        <xs:sequence>
+          <xs:any namespace='##any' processContents='lax' minOccurs='0'
+                  maxOccurs='unbounded'/>
+        </xs:sequence>
+        <xs:attribute name='Context' type='xs:anyURI' use='optional'/>
+        <xs:anyAttribute namespace='##other' processContents='lax'/>
+      </xs:complexType>
+      <xs:element name='RequestSecurityTokenCollection'
+                  type='wst:RequestSecurityTokenCollectionType'/>
+      <xs:complexType name='RequestSecurityTokenCollectionType'>
+        <xs:sequence>
+          <xs:element name='RequestSecurityToken'
+                      type='wst:AbstractRequestSecurityTokenType' minOccurs='2'
+                      maxOccurs='unbounded'/>
+        </xs:sequence>
+      </xs:complexType>
+ 
+      <xs:element name='RequestSecurityTokenResponseCollection'
+                  type='wst:RequestSecurityTokenResponseCollectionType'/>
+      <xs:complexType name='RequestSecurityTokenResponseCollectionType'>
+        <xs:sequence>
+          <xs:element ref='wst:RequestSecurityTokenResponse' minOccurs='1'
+                      maxOccurs='unbounded'/>
+        </xs:sequence>
+        <xs:anyAttribute namespace='##other' processContents='lax'/>
+      </xs:complexType>
+ 
+    </xs:schema>
+  </wsdl:types>
+ 
+  <!-- WS-Trust defines the following GEDs -->
+  <wsdl:message name="RequestSecurityTokenMsg">
+    <wsdl:part name="request" element="wst:RequestSecurityToken"/>
+  </wsdl:message>
+  <wsdl:message name="RequestSecurityTokenResponseMsg">
+    <wsdl:part name="response"
+               element="wst:RequestSecurityTokenResponse"/>
+  </wsdl:message>
+  <wsdl:message name="RequestSecurityTokenCollectionMsg">
+    <wsdl:part name="requestCollection"
+               element="wst:RequestSecurityTokenCollection"/>
+  </wsdl:message>
+  <wsdl:message name="RequestSecurityTokenResponseCollectionMsg">
+    <wsdl:part name="responseCollection"
+               element="wst:RequestSecurityTokenResponseCollection"/>
+  </wsdl:message>
+ 
+  <!-- This portType an example of a Requestor (or other) endpoint that
+  Accepts SOAP-based challenges from a Security Token Service -->
+  <wsdl:portType name="WSSecurityRequestor">
+    <wsdl:operation name="Challenge">
+      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
+      <wsdl:output message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+  </wsdl:portType>
+ 
+  <!-- This portType is an example of an STS supporting full protocol -->
+  <!--
+      The wsdl:portType and data types are XML elements defined by the
+      WS_Trust specification.  The wsdl:portType defines the endpoints
+      supported in the STS implementation.  This WSDL defines all operations
+      that an STS implementation can support.
+  -->
+  <wsdl:portType name="STS">
+    <wsdl:operation name="Cancel">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/CancelFinal"
+        message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="Issue">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal"
+        message="tns:RequestSecurityTokenResponseCollectionMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="Renew">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/RenewFinal"
+        message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="Validate">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/ValidateFinal"
+        message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="KeyExchangeToken">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KET"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/KETFinal"
+        message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="RequestCollection">
+      <wsdl:input message="tns:RequestSecurityTokenCollectionMsg"/>
+      <wsdl:output message="tns:RequestSecurityTokenResponseCollectionMsg"/>
+    </wsdl:operation>
+  </wsdl:portType>
+ 
+  <!-- This portType is an example of an endpoint that accepts
+  Unsolicited RequestSecurityTokenResponse messages -->
+  <wsdl:portType name="SecurityTokenResponseService">
+    <wsdl:operation name="RequestSecurityTokenResponse">
+      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+  </wsdl:portType>
+ 
+  <!--
+      The wsp:PolicyReference binds the security requirments on all the STS endpoints.
+      The wsp:Policy wsu:Id="UT_policy" element is later in this file.
+  -->
+  <wsdl:binding name="UT_Binding" type="wstrust:STS">
+    <wsp:PolicyReference URI="#UT_policy"/>
+    <soap:binding style="document"
+                  transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="Issue">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"/>
+      <wsdl:input>
+        <wsp:PolicyReference
+          URI="#Input_policy"/>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference
+          URI="#Output_policy"/>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Validate">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate"/>
+      <wsdl:input>
+        <wsp:PolicyReference
+          URI="#Input_policy"/>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference
+          URI="#Output_policy"/>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Cancel">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Renew">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="KeyExchangeToken">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KeyExchangeToken"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="RequestCollection">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/RequestCollection"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+ 
+  <wsdl:service name="SecurityTokenService">
+    <wsdl:port name="UT_Port" binding="tns:UT_Binding">
+      <soap:address location="http://localhost:8080/SecurityTokenService/UT"/>
+    </wsdl:port>
+  </wsdl:service>
+ 
+ 
+  <wsp:Policy wsu:Id="UT_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <!--
+            The sp:UsingAddressing element, indicates that the endpoints of this
+            web service conforms to the WS-Addressing specification.  More detail
+            can be found here: [http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529]
+        -->
+        <wsap10:UsingAddressing/>
+        <!--
+            The sp:SymmetricBinding element indicates that security is provided
+            at the SOAP layer and any initiator must authenticate itself by providing
+            WSS UsernameToken credentials.
+        -->
+        <sp:SymmetricBinding
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+            <!--
+                In a symmetric binding, the keys used for encrypting and signing in both
+                directions are derived from a single key, the one specified by the
+                sp:ProtectionToken element.  The sp:X509Token sub-element declares this
+                key to be a X.509 certificate and the
+                IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never"
+                attribute adds the requirement that the token MUST NOT be included in
+                any messages sent between the initiator and the recipient; rather, an
+                external reference to the token should be used.  Lastly the WssX509V3Token10
+                sub-element declares that the Username token presented by the initiator
+                should be compliant with Web Services Security UsernameToken Profile
+                1.0 specification. [ http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf ]
+            -->
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:X509Token
+                  sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys/>
+                    <sp:RequireThumbprintReference/>
+                    <sp:WssX509V3Token10/>
+                  </wsp:Policy>
+                </sp:X509Token>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <!--
+                The sp:AlgorithmSuite element, requires the Basic256 algorithm suite
+                be used in performing cryptographic operations.
+            -->
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256/>
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <!--
+                The sp:Layout element,  indicates the layout rules to apply when adding
+                items to the security header.  The sp:Lax sub-element indicates items
+                are added to the security header in any order that conforms to
+                WSS: SOAP Message Security.
+            -->
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Lax/>
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp/>
+            <sp:EncryptSignature/>
+            <sp:OnlySignEntireHeadersAndBody/>
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+ 
+        <!--
+            The sp:SignedSupportingTokens element declares that the security header
+            of messages must contain a sp:UsernameToken and the token must be signed.
+            The attribute IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"
+            on sp:UsernameToken indicates that the token MUST be included in all
+            messages sent from initiator to the recipient and that the token MUST
+            NOT be included in messages sent from the recipient to the initiator.
+            And finally the element sp:WssUsernameToken10 is a policy assertion
+            indicating the Username token should be as defined in  Web Services
+            Security UsernameToken Profile 1.0
+        -->
+        <sp:SignedSupportingTokens
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+            <sp:UsernameToken
+              sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+              <wsp:Policy>
+                <sp:WssUsernameToken10/>
+              </wsp:Policy>
+            </sp:UsernameToken>
+          </wsp:Policy>
+        </sp:SignedSupportingTokens>
+        <!--
+            The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
+            to be supported by the STS.  These particular elements generally refer
+            to how keys are referenced within the SOAP envelope.  These are normally
+            handled by CXF.
+        -->
+        <sp:Wss11
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+            <sp:MustSupportRefKeyIdentifier/>
+            <sp:MustSupportRefIssuerSerial/>
+            <sp:MustSupportRefThumbprint/>
+            <sp:MustSupportRefEncryptedKey/>
+          </wsp:Policy>
+        </sp:Wss11>
+        <!--
+            The sp:Trust13 element declares controls for WS-Trust 1.3 options.
+            They are policy assertions related to exchanges specifically with
+            client and server challenges and entropy behaviors.  Again these are
+            normally handled by CXF.
+        -->
+        <sp:Trust13
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens/>
+            <sp:RequireClientEntropy/>
+            <sp:RequireServerEntropy/>
+          </wsp:Policy>
+        </sp:Trust13>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+ 
+  <wsp:Policy wsu:Id="Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <sp:Body/>
+          <sp:Header Name="To"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="From"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="FaultTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="ReplyTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="MessageID"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="RelatesTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="Action"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+        </sp:SignedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+ 
+  <wsp:Policy wsu:Id="Output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <sp:Body/>
+          <sp:Header Name="To"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="From"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="FaultTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="ReplyTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="MessageID"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="RelatesTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="Action"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+        </sp:SignedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+ 
+</wsdl:definitions>
+
+
+
+
+STS’s implementation class +
+

The Apache CXF’s STS, SecurityTokenServiceProvider, is a web service +provider that is compliant with the protocols and functionality defined +by the WS-Trust specification. It has a modular architecture. Many of +its components are configurable or replaceable and there are many +optional features that are enabled by implementing and configuring +plug-ins. Users can customize their own STS by extending from +SecurityTokenServiceProvider and overriding the default settings. +Extensive information about the CXF’s STS configurable and pluggable +components can be found +here.

+
+
+

This STS implementation class, SampleSTSBearer, is a POJO that extends +from SecurityTokenServiceProvider. Note that the class is defined with a +WebServiceProvider annotation and not a WebService annotation. This +annotation defines the service as a Provider-based endpoint, meaning it +supports a more messaging-oriented approach to Web services. In +particular, it signals that the exchanged messages will be XML documents +of some type. SecurityTokenServiceProvider is an implementation of the +jakarta.xml.ws.Provider interface. In comparison the WebService annotation +defines a (service endpoint interface) SEI-based endpoint which supports +message exchange via SOAP envelopes.

+
+
+

As was done in the BearerImpl class, the WSS4J annotations +EndpointProperties and EndpointProperty are providing endpoint +configuration for the CXF runtime. The first EndpointProperty statement +in the listing is declaring the user’s name to use for the message +signature. It is used as the alias name in the keystore to get the +user’s cert and private key for signature. The next two EndpointProperty +statements declares the Java properties file that contains the (Merlin) +crypto configuration information. In this case both for signing and +encrypting the messages. WSS4J reads this file and extra required +information for message handling. The last EndpointProperty statement +declares the STSBearerCallbackHandler implementation class. It is used +to obtain the user’s password for the certificates in the keystore file.

+
+
+

In this implementation we are customizing the operations of token +issuance, token validation and their static properties.

+
+
+

StaticSTSProperties is used to set select properties for configuring +resources in the STS. You may think this is a duplication of the +settings made with the WSS4J annotations. The values are the same but +the underlaying structures being set are different, thus this +information must be declared in both places.

+
+
+

The setIssuer setting is important because it uniquely identifies the +issuing STS. The issuer string is embedded in issued tokens and, when +validating tokens, the STS checks the issuer string value. Consequently, +it is important to use the issuer string in a consistent way, so that +the STS can recognize the tokens that it has issued.

+
+
+

The setEndpoints call allows the declaration of a set of allowed token +recipients by address. The addresses are specified as reg-ex patterns.

+
+
+

TokenIssueOperation has a modular structure. This allows custom +behaviors to be injected into the processing of messages. In this case +we are overriding the SecurityTokenServiceProvider’s default behavior +and performing SAML token processing. CXF provides an implementation of +a SAMLTokenProvider which we are using rather than writing our own.

+
+
+

Learn more about the SAMLTokenProvider +here.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsbearer;
+ 
+import org.apache.cxf.annotations.EndpointProperties;
+import org.apache.cxf.annotations.EndpointProperty;
+import org.apache.cxf.sts.StaticSTSProperties;
+import org.apache.cxf.sts.operation.TokenIssueOperation;
+import org.apache.cxf.sts.service.ServiceMBean;
+import org.apache.cxf.sts.service.StaticService;
+import org.apache.cxf.sts.token.provider.SAMLTokenProvider;
+import org.apache.cxf.ws.security.sts.provider.SecurityTokenServiceProvider;
+ 
+import jakarta.xml.ws.WebServiceProvider;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+ 
+@WebServiceProvider(serviceName = "SecurityTokenService",
+      portName = "UT_Port",
+      targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/",
+      wsdlLocation = "WEB-INF/wsdl/bearer-ws-trust-1.4-service.wsdl")
+//be sure to have dependency on org.apache.cxf module when on AS7, otherwise Apache CXF annotations are ignored
+@EndpointProperties(value = {
+      @EndpointProperty(key = "ws-security.signature.username", value = "mystskey"),
+      @EndpointProperty(key = "ws-security.signature.properties", value = "stsKeystore.properties"),
+      @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsbearer.STSBearerCallbackHandler")
+})
+public class SampleSTSBearer extends SecurityTokenServiceProvider
+{
+ 
+   public SampleSTSBearer() throws Exception
+   {
+      super();
+ 
+      StaticSTSProperties props = new StaticSTSProperties();
+      props.setSignatureCryptoProperties("stsKeystore.properties");
+      props.setSignatureUsername("mystskey");
+      props.setCallbackHandlerClass(STSBearerCallbackHandler.class.getName());
+      props.setEncryptionCryptoProperties("stsKeystore.properties");
+      props.setEncryptionUsername("myservicekey");
+      props.setIssuer("DoubleItSTSIssuer");
+ 
+      List<ServiceMBean> services = new LinkedList<ServiceMBean>();
+      StaticService service = new StaticService();
+      service.setEndpoints(Arrays.asList(
+         "https://localhost:(\\d)*/jaxws-samples-wsse-policy-trust-bearer/BearerService",
+         "https://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-bearer/BearerService",
+         "https://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-bearer/BearerService"
+      ));
+      services.add(service);
+ 
+      TokenIssueOperation issueOperation = new TokenIssueOperation();
+      issueOperation.getTokenProviders().add(new SAMLTokenProvider());
+      issueOperation.setServices(services);
+      issueOperation.setStsProperties(props);
+      this.setIssueOperation(issueOperation);
+   }
+}
+
+
+
+
+STSBearerCallbackHandler +
+

STSBearerCallbackHandler is a callback handler for the WSS4J Crypto API. +It is used to obtain the password for the private key in the keystore. +This class enables CXF to retrieve the password of the user name to use +for the message signature.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsbearer;
+ 
+import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
+ 
+import java.util.HashMap;
+import java.util.Map;
+ 
+public class STSBearerCallbackHandler extends PasswordCallbackHandler
+{
+   public STSBearerCallbackHandler()
+   {
+      super(getInitMap());
+   }
+ 
+   private static Map<String, String> getInitMap()
+   {
+      Map<String, String> passwords = new HashMap<String, String>();
+      passwords.put("mystskey", "stskpass");
+      passwords.put("alice", "clarinet");
+      return passwords;
+   }
+}
+
+
+
+
+Crypto properties and keystore files +
+

WSS4J’s Crypto implementation is loaded and configured via a Java +properties file that contains Crypto configuration data. The file +contains implementation-specific properties such as a keystore location, +password, default alias and the like. This application is using the +Merlin implementation. File stsKeystore.properties contains this +information.

+
+
+

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains +self signed certificates for myservicekey and mystskey. Self signed +certificates are not appropriate for production use.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=stsspass
+org.apache.ws.security.crypto.merlin.keystore.file=stsstore.jks
+
+
+
+
+MANIFEST.MF +
+

When deployed on WildFly, this application requires access to the +JBossWs and CXF APIs provided in modules +org.jboss.ws.cxf.jbossws-cxf-client and org.apache.cxf. The Apache CXF +internals, org.apache.cxf.impl, are needed to build the STS +configuration in the SampleSTS constructor. The dependency statement +directs the server to provide them at deployment.

+
+
+
+
Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.8.2
+Created-By: 1.7.0_25-b15 (Oracle Corporation)
+Dependencies: org.jboss.ws.cxf.jbossws-cxf-client,org.apache.cxf.impl
+
+
+
+
+
+
Web service requester
+
+

This section examines the crucial elements in calling a web service that +implements endpoint security as described in the SAML Bearer scenario. +The components that will be discussed are.

+
+
+
    +
  • +

    Web service requester’s implementation

    +
  • +
  • +

    ClientCallbackHandler

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
+
+
+Web service requester Implementation +
+

The ws-requester, the client, uses standard procedures for creating a +reference to the web service. To address the endpoint security +requirements, the web service’s "Request Context" is configured with the +information needed in message generation. In addition, the STSClient +that communicates with the STS is configured with similar values. Note +the key strings ending with a ".it" suffix. This suffix flags these +settings as belonging to the STSClient. The internal CXF code assigns +this information to the STSClient that is auto-generated for this +service call.

+
+
+

There is an alternate method of setting up the STSCLient. The user may +provide their own instance of the STSClient. The CXF code will use this +object and not auto-generate one. When providing the STSClient in this +way, the user must provide a org.apache.cxf.Bus for it and the +configuration keys must not have the ".it" suffix. This is used in the +ActAs and OnBehalfOf examples.

+
+
+
+
  String serviceURL = "https://" + getServerHost() + ":8443/jaxws-samples-wsse-policy-trust-bearer/BearerService";
+ 
+  final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/bearerwssecuritypolicy", "BearerService");
+  Service service = Service.create(new URL(serviceURL + "?wsdl"), serviceName);
+  BearerIface proxy = (BearerIface) service.getPort(BearerIface.class);
+ 
+  Map<String, Object> ctx = ((BindingProvider)proxy).getRequestContext();
+ 
+  // set the security related configuration information for the service "request"
+  ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
+  ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
+    Thread.currentThread().getContextClassLoader().getResource(
+    "META-INF/clientKeystore.properties"));
+  ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
+    Thread.currentThread().getContextClassLoader().getResource(
+    "META-INF/clientKeystore.properties"));
+  ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
+  ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
+ 
+  //-- Configuration settings that will be transfered to the STSClient
+  // "alice" is the name provided for the WSS Username. Her password will
+  // be retreived from the ClientCallbackHander by the STSClient.
+  ctx.put(SecurityConstants.USERNAME + ".it", "alice");
+  ctx.put(SecurityConstants.CALLBACK_HANDLER + ".it", new ClientCallbackHandler());
+  ctx.put(SecurityConstants.ENCRYPT_PROPERTIES + ".it",
+    Thread.currentThread().getContextClassLoader().getResource(
+    "META-INF/clientKeystore.properties"));
+  ctx.put(SecurityConstants.ENCRYPT_USERNAME + ".it", "mystskey");
+  ctx.put(SecurityConstants.STS_TOKEN_USERNAME + ".it", "myclientkey");
+  ctx.put(SecurityConstants.STS_TOKEN_PROPERTIES + ".it",
+    Thread.currentThread().getContextClassLoader().getResource(
+    "META-INF/clientKeystore.properties"));
+  ctx.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO + ".it", "true");
+ 
+  proxy.sayHello();
+
+
+
+
+ClientCallbackHandler + +
+

ClientCallbackHandler is a callback handler for the WSS4J Crypto API. It +is used to obtain the password for the private key in the keystore. This +class enables CXF to retrieve the password of the user name to use for +the message signature. Note that "alice" and her password have been +provided here. This information is not in the (JKS) keystore but +provided in the WildFly security domain. It was declared in file +jbossws-users.properties.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared;
+ 
+import java.io.IOException;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import org.apache.ws.security.WSPasswordCallback;
+ 
+public class ClientCallbackHandler implements CallbackHandler {
+ 
+    public void handle(Callback[] callbacks) throws IOException,
+            UnsupportedCallbackException {
+        for (int i = 0; i < callbacks.length; i++) {
+            if (callbacks[i] instanceof WSPasswordCallback) {
+                WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
+                if ("myclientkey".equals(pc.getIdentifier())) {
+                    pc.setPassword("ckpass");
+                    break;
+                } else if ("alice".equals(pc.getIdentifier())) {
+                    pc.setPassword("clarinet");
+                    break;
+                } else if ("bob".equals(pc.getIdentifier())) {
+                    pc.setPassword("trombone");
+                    break;
+                } else if ("myservicekey".equals(pc.getIdentifier())) {  // rls test  added for bearer test
+                   pc.setPassword("skpass");
+                   break;
+                }
+            }
+        }
+    }
+}
+
+
+
+
+Crypto properties and keystore files + +
+

WSS4J’s Crypto implementation is loaded and configured via a Java +properties file that contains Crypto configuration data. The file +contains implementation-specific properties such as a keystore location, +password, default alias and the like. This application is using the +Merlin implementation. File clientKeystore.properties contains this +information.

+
+
+

File clientstore.jks, is a Java KeyStore (JKS) repository. It contains +self signed certificates for myservicekey and mystskey. Self signed +certificates are not appropriate for production use.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=cspass
+org.apache.ws.security.crypto.merlin.keystore.alias=myclientkey
+org.apache.ws.security.crypto.merlin.keystore.file=META-INF/clientstore.jks
+
+
+
+
+
+
+
SAML Holder-Of-Key Assertion Scenario
+
+

WS-Trust deals with managing software security tokens. A SAML assertion +is a type of security token. In the Holder-Of-Key method, the STS +creates a SAML token containing the client’s public key and signs the +SAML token with its private key. The client includes the SAML token and +signs the outgoing soap envelope to the web service with its private +key. The web service validates the SOAP message and the SAML token.

+
+
+

Implementation of this scenario has the following requirements.

+
+
+
    +
  • +

    SAML tokens with a Holder-Of-Key subject confirmation method must be +protected so the token can not be snooped. In most cases, a +Holder-Of-Key token combined with HTTPS is sufficient to prevent "a man +in the middle" getting possession of the token. This means a security +policy that uses a sp:TransportBinding and sp:HttpsToken.

    +
  • +
  • +

    A Holder-Of-Key token has no encryption or signing keys associated +with it, therefore a sp:IssuedToken of SymmetricKey or PublicKey keyType +should be used with a sp:SignedEndorsingSupportingTokens.

    +
  • +
+
+
+
Web service Provider
+
+

This section examines the web service elements for the SAML +Holder-Of-Key scenario. The components are

+
+
+
    +
  • +

    Web service provider’s WSDL

    +
  • +
  • +

    SSL configuration

    +
  • +
  • +

    Web service provider’s Interface and Implementation classes.

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
  • +

    MANIFEST.MF

    +
  • +
+
+
+Web service provider WSDL +
+

The web service provider is a contract-first endpoint. All the WS-trust +and security policies for it are declared in the WSDL, +HolderOfKeyService.wsdl. For this scenario a ws-requester is required to +present a SAML 2.0 token of SymmetricKey keyType, issued from a designed +STS. The address of the STS is provided in the WSDL. A transport binding +policy is used. The token is declared to be signed and endorsed, +sp:SignedEndorsingSupportingTokens. A detailed explanation of the +security settings are provided in the comments in the listing below.

+
+
+
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions targetNamespace="http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy"
+             name="HolderOfKeyService"
+        xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy"
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+        xmlns="http://schemas.xmlsoap.org/wsdl/"
+        xmlns:wsp="http://www.w3.org/ns/ws-policy"
+        xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
+    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+    xmlns:wsaws="http://www.w3.org/2005/08/addressing"
+    xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"
+    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
+    xmlns:t="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
+ 
+  <types>
+    <xsd:schema>
+      <xsd:import namespace="http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy"
+                  schemaLocation="HolderOfKeyService_schema1.xsd"/>
+    </xsd:schema>
+  </types>
+  <message name="sayHello">
+    <part name="parameters" element="tns:sayHello"/>
+  </message>
+  <message name="sayHelloResponse">
+    <part name="parameters" element="tns:sayHelloResponse"/>
+  </message>
+  <portType name="HolderOfKeyIface">
+    <operation name="sayHello">
+      <input message="tns:sayHello"/>
+      <output message="tns:sayHelloResponse"/>
+    </operation>
+  </portType>
+<!--
+        The wsp:PolicyReference binds the security requirments on all the endpoints.
+        The wsp:Policy wsu:Id="#TransportSAML2HolderOfKeyPolicy" element is defined later in this file.
+-->
+  <binding name="HolderOfKeyServicePortBinding" type="tns:HolderOfKeyIface">
+    <wsp:PolicyReference URI="#TransportSAML2HolderOfKeyPolicy" />
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <operation name="sayHello">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+  </binding>
+<!--
+  The soap:address has been defined to use JBoss's https port, 8443.  This is
+  set in conjunction with the sp:TransportBinding policy for https.
+-->
+  <service name="HolderOfKeyService">
+    <port name="HolderOfKeyServicePort" binding="tns:HolderOfKeyServicePortBinding">
+      <soap:address location="https://@jboss.bind.address@:8443/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService"/>
+    </port>
+  </service>
+ 
+ 
+  <wsp:Policy wsu:Id="TransportSAML2HolderOfKeyPolicy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+  <!--
+        The wsam:Addressing element, indicates that the endpoints of this
+        web service MUST conform to the WS-Addressing specification.  The
+        attribute wsp:Optional="false" enforces this assertion.
+  -->
+        <wsam:Addressing wsp:Optional="false">
+          <wsp:Policy />
+        </wsam:Addressing>
+<!--
+  The sp:TransportBinding element indicates that security is provided by the
+  message exchange transport medium, https.  WS-Security policy specification
+  defines the sp:HttpsToken for use in exchanging messages transmitted over HTTPS.
+-->
+          <sp:TransportBinding
+            xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+            <wsp:Policy>
+              <sp:TransportToken>
+                <wsp:Policy>
+                  <sp:HttpsToken>
+                    <wsp:Policy/>
+                  </sp:HttpsToken>
+                </wsp:Policy>
+              </sp:TransportToken>
+<!--
+     The sp:AlgorithmSuite element, requires the TripleDes algorithm suite
+     be used in performing cryptographic operations.
+-->
+              <sp:AlgorithmSuite>
+                <wsp:Policy>
+                  <sp:TripleDes />
+                </wsp:Policy>
+              </sp:AlgorithmSuite>
+<!--
+     The sp:Layout element,  indicates the layout rules to apply when adding
+     items to the security header.  The sp:Lax sub-element indicates items
+     are added to the security header in any order that conforms to
+     WSS: SOAP Message Security.
+-->
+              <sp:Layout>
+                <wsp:Policy>
+                  <sp:Lax />
+                </wsp:Policy>
+              </sp:Layout>
+              <sp:IncludeTimestamp />
+            </wsp:Policy>
+          </sp:TransportBinding>
+ 
+<!--
+  The sp:SignedEndorsingSupportingTokens, when transport level security level is
+  used there will be no message signature and the signature generated by the
+  supporting token will sign the Timestamp.
+-->
+        <sp:SignedEndorsingSupportingTokens
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+<!--
+  The sp:IssuedToken element asserts that a SAML 2.0 security token of type
+  Bearer is expected from the STS.  The
+  sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+  attribute instructs the runtime to include the initiator's public key
+  with every message sent to the recipient.
+ 
+  The sp:RequestSecurityTokenTemplate element directs that all of the
+  children of this element will be copied directly into the body of the
+  RequestSecurityToken (RST) message that is sent to the STS when the
+  initiator asks the STS to issue a token.
+-->
+            <sp:IssuedToken
+              sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+              <sp:RequestSecurityTokenTemplate>
+                <t:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</t:TokenType>
+ <!--
+   KeyType of "SymmetricKey", the client must prove to the WS service that it
+   possesses a particular symmetric session key.
+ -->
+                <t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey</t:KeyType>
+              </sp:RequestSecurityTokenTemplate>
+              <wsp:Policy>
+                <sp:RequireInternalReference />
+              </wsp:Policy>
+<!--
+  The sp:Issuer element defines the STS's address and endpoint information
+  This information is used by the STSClient.
+-->
+              <sp:Issuer>
+                <wsaws:Address>http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts-holderofkey/SecurityTokenService</wsaws:Address>
+                <wsaws:Metadata
+                  xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
+                  wsdli:wsdlLocation="http://@jboss.bind.address@:8080/jaxws-samples-wsse-policy-trust-sts-holderofkey/SecurityTokenService?wsdl">
+                  <wsaw:ServiceName
+                    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
+                    xmlns:stsns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+                    EndpointName="UT_Port">stsns:SecurityTokenService</wsaw:ServiceName>
+                </wsaws:Metadata>
+              </sp:Issuer>
+ 
+            </sp:IssuedToken>
+          </wsp:Policy>
+        </sp:SignedEndorsingSupportingTokens>
+<!--
+    The sp:Wss11 element declares WSS: SOAP Message Security 1.1 options
+    to be supported by the STS.  These particular elements generally refer
+    to how keys are referenced within the SOAP envelope.  These are normally
+    handled by CXF.
+-->
+        <sp:Wss11>
+          <wsp:Policy>
+            <sp:MustSupportRefIssuerSerial />
+            <sp:MustSupportRefThumbprint />
+            <sp:MustSupportRefEncryptedKey />
+          </wsp:Policy>
+        </sp:Wss11>
+<!--
+    The sp:Trust13 element declares controls for WS-Trust 1.3 options.
+    They are policy assertions related to exchanges specifically with
+    client and server challenges and entropy behaviors.  Again these are
+    normally handled by CXF.
+-->
+        <sp:Trust13>
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust13>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+ 
+</definitions>
+
+
+
+
+SSL configuration + +
+

This web service is using https, therefore the JBoss server must be +configured to provide SSL support in the Web subsystem. There are 2 +components to SSL configuration.

+
+
+
    +
  • +

    create a certificate keystore

    +
  • +
  • +

    declare an SSL connector in the Web subsystem of the JBoss server +configuration file.

    +
  • +
+
+
+

Follow the directions for setting up TLS in the WildFly Elytron Security Guide.

+
+
+
+Web service Interface +
+

The web service provider interface class, HolderOfKeyIface, is a simple +straight forward web service definition.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.holderofkey;
+ 
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy"
+)
+public interface HolderOfKeyIface {
+   @WebMethod
+   String sayHello();
+}
+
+
+
+
+Web service Implementation +
+

The web service provider implementation class, HolderOfKeyImpl, is a +simple POJO. It uses the standard WebService annotation to define the +service endpoint. In addition there are two Apache CXF annotations, +EndpointProperties and EndpointProperty used for configuring the +endpoint for the CXF runtime. These annotations come from the +Apache WSS4J project, which provides a +Java implementation of the primary WS-Security standards for Web +Services. These annotations are programmatically adding properties to +the endpoint. With plain Apache CXF, these properties are often set via +the <jaxws:properties> element on the <jaxws:endpoint> element in the +Spring config; these annotations allow the properties to be configured +in the code.

+
+
+

WSS4J uses the Crypto interface to get keys and certificates for +signature creation/verification, as is asserted by the WSDL for this +service. The WSS4J configuration information being provided by +HolderOfKeyImpl is for Crypto’s Merlin implementation. More information +will be provided about this in the keystore section.

+
+
+

The first EndpointProperty statement in the listing disables ensurance +of compliance with the Basic Security Profile 1.1. The next +EndpointProperty statements declares the Java properties file that +contains the (Merlin) crypto configuration information. The last +EndpointProperty statement declares the STSHolderOfKeyCallbackHandler +implementation class. It is used to obtain the user’s password for the +certificates in the keystore file.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.holderofkey;
+ 
+import org.apache.cxf.annotations.EndpointProperties;
+import org.apache.cxf.annotations.EndpointProperty;
+ 
+import jakarta.jws.WebService;
+ 
+@WebService
+   (
+      portName = "HolderOfKeyServicePort",
+      serviceName = "HolderOfKeyService",
+      wsdlLocation = "WEB-INF/wsdl/HolderOfKeyService.wsdl",
+      targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy",
+      endpointInterface = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.holderofkey.HolderOfKeyIface"
+   )
+@EndpointProperties(value = {
+   @EndpointProperty(key = "ws-security.is-bsp-compliant", value = "false"),
+   @EndpointProperty(key = "ws-security.signature.properties", value = "serviceKeystore.properties"),
+   @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.holderofkey.HolderOfKeyCallbackHandler")
+})
+public class HolderOfKeyImpl implements HolderOfKeyIface
+{
+   public String sayHello()
+   {
+      return "Holder-Of-Key WS-Trust Hello World!";
+   }
+}
+
+
+
+
+Crypto properties and keystore files +
+

WSS4J’s Crypto implementation is loaded and configured via a Java +properties file that contains Crypto configuration data. The file +contains implementation-specific properties such as a keystore location, +password, default alias and the like. This application is using the +Merlin implementation. File serviceKeystore.properties contains this +information.

+
+
+

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains +self signed certificates for myservicekey and mystskey. Self signed +certificates are not appropriate for production use.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=sspass
+org.apache.ws.security.crypto.merlin.keystore.alias=myservicekey
+org.apache.ws.security.crypto.merlin.keystore.file=servicestore.jks
+
+
+
+
+MANIFEST.MF + +
+

When deployed on WildFly this application requires access to the JBossWs +and CXF APIs provided in module org.jboss.ws.cxf.jbossws-cxf-client. The +dependency statement directs the server to provide them at deployment.

+
+
+
+
Manifest-Version:1.0
+Ant-Version: Apache Ant1.8.2
+Created-By:1.7.0_25-b15 (Oracle Corporation)
+Dependencies: org.jboss.ws.cxf.jbossws-cxf-client
+
+
+
+
+
+
Security Token Service
+
+

This section examines the crucial elements in providing the Security +Token Service functionality for providing a SAML Holder-Of-Key token. +The components that will be discussed are.

+
+
+
    +
  • +

    Security Domain

    +
  • +
  • +

    STS’s WSDL

    +
  • +
  • +

    STS’s implementation class

    +
  • +
  • +

    STSBearerCallbackHandler

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
  • +

    MANIFEST.MF

    +
  • +
+
+
+Security Domain +
+

The STS requires a JBoss security domain be configured. The +jboss-web.xml descriptor declares a named security +domain,"JBossWS-trust-sts" to be used by this service for +authentication. This security domain requires two properties files and +the addition of a security-domain declaration in the JBoss server +configuration file.

+
+
+

For this scenario the domain needs to contain user alice, password +clarinet, and role friend. See the listings below for +jbossws-users.properties and jbossws-roles.properties. In addition the +following XML elements must be added to the Elytron subsystem in the +server configuration file. Replace " SOME_PATH" with appropriate +information and then configure authentication with this security domain.

+
+
+
+
<properties-realm name="JBossWS-trust-sts">
+    <users-properties path="/SOME_PATH/usersProperties"/>
+    <groups-properties path="/SOME_PATH/rolesProperties"/>
+</properties-realm>
+...
+<security-domain name="JBossWS-trust-sts" default-realm="JBossWS-trust-sts" permission-mapper="default-permission-mapper">
+    <realm name="JBossWS-trust-sts" role-decoder="groups-to-roles"/>
+</security-domain>
+
+
+
+

jboss-web.xml

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jboss-web PUBLIC"-//JBoss//DTD Web Application 2.4//EN" ">
+<jboss-web>
+  <security-domain>java:/jaas/JBossWS-trust-sts</security-domain>
+</jboss-web>
+
+
+ +++ + + + + + +
 
+
+

jbossws-users.properties

+
+
+
+
# A sample users.properties filefor use with the UsersRolesLoginModule
+alice=clarinet
+
+
+ +++ + + + + + +
 
+
+

jbossws-roles.properties

+
+
+
+
# A sample roles.properties filefor use with the UsersRolesLoginModule
+alice=friend
+
+
+
+
+STS’s WSDL +
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions
+  targetNamespace="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+  xmlns:tns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+  xmlns:wstrust="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
+  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+  xmlns:wsap10="http://www.w3.org/2006/05/addressing/wsdl"
+  xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+  xmlns:wsp="http://www.w3.org/ns/ws-policy"
+  xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
+ 
+  <wsdl:types>
+    <xs:schema elementFormDefault="qualified"
+               targetNamespace='http://docs.oasis-open.org/ws-sx/ws-trust/200512'>
+ 
+      <xs:element name='RequestSecurityToken'
+                  type='wst:AbstractRequestSecurityTokenType'/>
+      <xs:element name='RequestSecurityTokenResponse'
+                  type='wst:AbstractRequestSecurityTokenType'/>
+ 
+      <xs:complexType name='AbstractRequestSecurityTokenType'>
+        <xs:sequence>
+          <xs:any namespace='##any' processContents='lax' minOccurs='0'
+                  maxOccurs='unbounded'/>
+        </xs:sequence>
+        <xs:attribute name='Context' type='xs:anyURI' use='optional'/>
+        <xs:anyAttribute namespace='##other' processContents='lax'/>
+      </xs:complexType>
+      <xs:element name='RequestSecurityTokenCollection'
+                  type='wst:RequestSecurityTokenCollectionType'/>
+      <xs:complexType name='RequestSecurityTokenCollectionType'>
+        <xs:sequence>
+          <xs:element name='RequestSecurityToken'
+                      type='wst:AbstractRequestSecurityTokenType' minOccurs='2'
+                      maxOccurs='unbounded'/>
+        </xs:sequence>
+      </xs:complexType>
+ 
+      <xs:element name='RequestSecurityTokenResponseCollection'
+                  type='wst:RequestSecurityTokenResponseCollectionType'/>
+      <xs:complexType name='RequestSecurityTokenResponseCollectionType'>
+        <xs:sequence>
+          <xs:element ref='wst:RequestSecurityTokenResponse' minOccurs='1'
+                      maxOccurs='unbounded'/>
+        </xs:sequence>
+        <xs:anyAttribute namespace='##other' processContents='lax'/>
+      </xs:complexType>
+ 
+    </xs:schema>
+  </wsdl:types>
+ 
+  <!-- WS-Trust defines the following GEDs -->
+  <wsdl:message name="RequestSecurityTokenMsg">
+    <wsdl:part name="request" element="wst:RequestSecurityToken"/>
+  </wsdl:message>
+  <wsdl:message name="RequestSecurityTokenResponseMsg">
+    <wsdl:part name="response"
+               element="wst:RequestSecurityTokenResponse"/>
+  </wsdl:message>
+  <wsdl:message name="RequestSecurityTokenCollectionMsg">
+    <wsdl:part name="requestCollection"
+               element="wst:RequestSecurityTokenCollection"/>
+  </wsdl:message>
+  <wsdl:message name="RequestSecurityTokenResponseCollectionMsg">
+    <wsdl:part name="responseCollection"
+               element="wst:RequestSecurityTokenResponseCollection"/>
+  </wsdl:message>
+ 
+  <!-- This portType an example of a Requestor (or other) endpoint that
+         Accepts SOAP-based challenges from a Security Token Service -->
+  <wsdl:portType name="WSSecurityRequestor">
+    <wsdl:operation name="Challenge">
+      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
+      <wsdl:output message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+  </wsdl:portType>
+ 
+  <!-- This portType is an example of an STS supporting full protocol -->
+  <wsdl:portType name="STS">
+    <wsdl:operation name="Cancel">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/CancelFinal"
+        message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="Issue">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal"
+        message="tns:RequestSecurityTokenResponseCollectionMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="Renew">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/RenewFinal"
+        message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="Validate">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/ValidateFinal"
+        message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="KeyExchangeToken">
+      <wsdl:input
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KET"
+        message="tns:RequestSecurityTokenMsg"/>
+      <wsdl:output
+        wsam:Action="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/KETFinal"
+        message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+    <wsdl:operation name="RequestCollection">
+      <wsdl:input message="tns:RequestSecurityTokenCollectionMsg"/>
+      <wsdl:output message="tns:RequestSecurityTokenResponseCollectionMsg"/>
+    </wsdl:operation>
+  </wsdl:portType>
+ 
+  <!-- This portType is an example of an endpoint that accepts
+         Unsolicited RequestSecurityTokenResponse messages -->
+  <wsdl:portType name="SecurityTokenResponseService">
+    <wsdl:operation name="RequestSecurityTokenResponse">
+      <wsdl:input message="tns:RequestSecurityTokenResponseMsg"/>
+    </wsdl:operation>
+  </wsdl:portType>
+ 
+  <wsdl:binding name="UT_Binding" type="wstrust:STS">
+    <wsp:PolicyReference URI="#UT_policy"/>
+    <soap:binding style="document"
+                  transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="Issue">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"/>
+      <wsdl:input>
+        <wsp:PolicyReference
+          URI="#Input_policy"/>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference
+          URI="#Output_policy"/>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Validate">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate"/>
+      <wsdl:input>
+        <wsp:PolicyReference
+          URI="#Input_policy"/>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference
+          URI="#Output_policy"/>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Cancel">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Cancel"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Renew">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Renew"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="KeyExchangeToken">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/KeyExchangeToken"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="RequestCollection">
+      <soap:operation
+        soapAction="http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/RequestCollection"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+ 
+  <wsdl:service name="SecurityTokenService">
+    <wsdl:port name="UT_Port" binding="tns:UT_Binding">
+      <soap:address location="http://localhost:8080/SecurityTokenService/UT"/>
+    </wsdl:port>
+  </wsdl:service>
+ 
+  <wsp:Policy wsu:Id="UT_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <wsap10:UsingAddressing/>
+        <sp:SymmetricBinding
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:X509Token
+                  sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys/>
+                    <sp:RequireThumbprintReference/>
+                    <sp:WssX509V3Token10/>
+                  </wsp:Policy>
+                </sp:X509Token>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256/>
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Lax/>
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp/>
+            <sp:EncryptSignature/>
+            <sp:OnlySignEntireHeadersAndBody/>
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:SignedSupportingTokens
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+            <sp:UsernameToken
+              sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+              <wsp:Policy>
+                <sp:WssUsernameToken10/>
+              </wsp:Policy>
+            </sp:UsernameToken>
+          </wsp:Policy>
+        </sp:SignedSupportingTokens>
+        <sp:Wss11
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+            <sp:MustSupportRefKeyIdentifier/>
+            <sp:MustSupportRefIssuerSerial/>
+            <sp:MustSupportRefThumbprint/>
+            <sp:MustSupportRefEncryptedKey/>
+          </wsp:Policy>
+        </sp:Wss11>
+        <sp:Trust13
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens/>
+            <sp:RequireClientEntropy/>
+            <sp:RequireServerEntropy/>
+          </wsp:Policy>
+        </sp:Trust13>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+ 
+  <wsp:Policy wsu:Id="Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <sp:Body/>
+          <sp:Header Name="To"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="From"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="FaultTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="ReplyTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="MessageID"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="RelatesTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="Action"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+        </sp:SignedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+ 
+  <wsp:Policy wsu:Id="Output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts
+          xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+          <sp:Body/>
+          <sp:Header Name="To"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="From"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="FaultTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="ReplyTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="MessageID"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="RelatesTo"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+          <sp:Header Name="Action"
+                     Namespace="http://www.w3.org/2005/08/addressing"/>
+        </sp:SignedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+ 
+</wsdl:definitions>
+
+
+
+
+STS’s implementation class +
+

The Apache CXF’s STS, SecurityTokenServiceProvider, is a web service +provider that is compliant with the protocols and functionality defined +by the WS-Trust specification. It has a modular architecture. Many of +its components are configurable or replaceable and there are many +optional features that are enabled by implementing and configuring +plug-ins. Users can customize their own STS by extending from +SecurityTokenServiceProvider and overriding the default settings. +Extensive information about the CXF’s STS configurable and pluggable +components can be found +here.

+
+
+

This STS implementation class, SampleSTSHolderOfKey, is a POJO that +extends from SecurityTokenServiceProvider. Note that the class is +defined with a WebServiceProvider annotation and not a WebService +annotation. This annotation defines the service as a Provider-based +endpoint, meaning it supports a more messaging-oriented approach to Web +services. In particular, it signals that the exchanged messages will be +XML documents of some type. SecurityTokenServiceProvider is an +implementation of the jakarta.xml.ws.Provider interface. In comparison the +WebService annotation defines a (service endpoint interface) SEI-based +endpoint which supports message exchange via SOAP envelopes.

+
+
+

As was done in the HolderOfKeyImpl class, the WSS4J annotations +EndpointProperties and EndpointProperty are providing endpoint +configuration for the CXF runtime. The first EndpointProperty statements +declares the Java properties file that contains the (Merlin) crypto +configuration information. WSS4J reads this file and extra required +information for message handling. The last EndpointProperty statement +declares the STSHolderOfKeyCallbackHandler implementation class. It is +used to obtain the user’s password for the certificates in the keystore +file.

+
+
+

In this implementation we are customizing the operations of token +issuance and their static properties.

+
+
+

StaticSTSProperties is used to set select properties for configuring +resources in the STS. You may think this is a duplication of the +settings made with the WSS4J annotations. The values are the same but +the underlaying structures being set are different, thus this +information must be declared in both places.

+
+
+

The setIssuer setting is important because it uniquely identifies the +issuing STS. The issuer string is embedded in issued tokens and, when +validating tokens, the STS checks the issuer string value. Consequently, +it is important to use the issuer string in a consistent way, so that +the STS can recognize the tokens that it has issued.

+
+
+

The setEndpoints call allows the declaration of a set of allowed token +recipients by address. The addresses are specified as reg-ex patterns.

+
+
+

TokenIssueOperation has a modular structure. This allows custom +behaviors to be injected into the processing of messages. In this case +we are overriding the SecurityTokenServiceProvider’s default behavior +and performing SAML token processing. CXF provides an implementation of +a SAMLTokenProvider which we are using rather than writing our own.

+
+
+

Learn more about the SAMLTokenProvider +here.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsholderofkey;
+ 
+import org.apache.cxf.annotations.EndpointProperties;
+import org.apache.cxf.annotations.EndpointProperty;
+import org.apache.cxf.sts.StaticSTSProperties;
+import org.apache.cxf.sts.operation.TokenIssueOperation;
+import org.apache.cxf.sts.service.ServiceMBean;
+import org.apache.cxf.sts.service.StaticService;
+import org.apache.cxf.sts.token.provider.SAMLTokenProvider;
+import org.apache.cxf.ws.security.sts.provider.SecurityTokenServiceProvider;
+ 
+import jakarta.xml.ws.WebServiceProvider;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+ 
+/**
+ * User: rsearls
+ * Date: 3/14/14
+ */
+@WebServiceProvider(serviceName = "SecurityTokenService",
+   portName = "UT_Port",
+   targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/",
+   wsdlLocation = "WEB-INF/wsdl/holderofkey-ws-trust-1.4-service.wsdl")
+//be sure to have dependency on org.apache.cxf module when on AS7, otherwise Apache CXF annotations are ignored
+@EndpointProperties(value = {
+   @EndpointProperty(key = "ws-security.signature.properties", value = "stsKeystore.properties"),
+   @EndpointProperty(key = "ws-security.callback-handler", value = "org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsholderofkey.STSHolderOfKeyCallbackHandler")
+})
+public class SampleSTSHolderOfKey extends SecurityTokenServiceProvider
+{
+ 
+   public SampleSTSHolderOfKey() throws Exception
+   {
+      super();
+ 
+      StaticSTSProperties props = new StaticSTSProperties();
+      props.setSignatureCryptoProperties("stsKeystore.properties");
+      props.setSignatureUsername("mystskey");
+      props.setCallbackHandlerClass(STSHolderOfKeyCallbackHandler.class.getName());
+      props.setEncryptionCryptoProperties("stsKeystore.properties");
+      props.setEncryptionUsername("myservicekey");
+      props.setIssuer("DoubleItSTSIssuer");
+ 
+      List<ServiceMBean> services = new LinkedList<ServiceMBean>();
+      StaticService service = new StaticService();
+      service.setEndpoints(Arrays.asList(
+         "https://localhost:(\\d)*/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService",
+         "https://\\[::1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService",
+         "https://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService"
+      ));
+ 
+      services.add(service);
+ 
+      TokenIssueOperation issueOperation = new TokenIssueOperation();
+      issueOperation.getTokenProviders().add(new SAMLTokenProvider());
+      issueOperation.setServices(services);
+      issueOperation.setStsProperties(props);
+      this.setIssueOperation(issueOperation);
+ 
+   }
+}
+
+
+
+
+HolderOfKeyCallbackHandler +
+

STSHolderOfKeyCallbackHandler is a callback handler for the WSS4J Crypto +API. It is used to obtain the password for the private key in the +keystore. This class enables CXF to retrieve the password of the user +name to use for the message signature.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.stsholderofkey;
+ 
+import org.jboss.wsf.stack.cxf.extensions.security.PasswordCallbackHandler;
+ 
+import java.util.HashMap;
+import java.util.Map;
+ 
+/**
+ * User: rsearls
+ * Date: 3/19/14
+ */
+public class STSHolderOfKeyCallbackHandler extends PasswordCallbackHandler
+{
+   public STSHolderOfKeyCallbackHandler()
+   {
+      super(getInitMap());
+   }
+ 
+   private static Map<String, String> getInitMap()
+   {
+      Map<String, String> passwords = new HashMap<String, String>();
+      passwords.put("mystskey", "stskpass");
+      passwords.put("alice", "clarinet");
+      return passwords;
+   }
+}
+
+
+
+
+Crypto properties and keystore files +
+

WSS4J’s Crypto implementation is loaded and configured via a Java +properties file that contains Crypto configuration data. The file +contains implementation-specific properties such as a keystore location, +password, default alias and the like. This application is using the +Merlin implementation. File stsKeystore.properties contains this +information.

+
+
+

File servicestore.jks, is a Java KeyStore (JKS) repository. It contains +self signed certificates for myservicekey and mystskey. Self signed +certificates are not appropriate for production use.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=stsspass
+org.apache.ws.security.crypto.merlin.keystore.file=stsstore.jks
+
+
+
+
+MANIFEST.MF +
+

When deployed on WildFly, this application requires access to the +JBossWs and CXF APIs provided in modules +org.jboss.ws.cxf.jbossws-cxf-client and org.apache.cxf. The Apache CXF +internals, org.apache.cxf.impl, are needed to build the STS +configuration in the SampleSTSHolderOfKey constructor. The dependency +statement directs the server to provide them at deployment.

+
+
+
+
Manifest-Version:1.0
+Ant-Version: Apache Ant1.8.2
+Created-By:1.7.0_25-b15 (Oracle Corporation)
+Dependencies: org.jboss.ws.cxf.jbossws-cxf-client,org.apache.cxf.impl
+
+
+
+
+
+
Web service requester
+
+

This section examines the crucial elements in calling a web service that +implements endpoint security as described in the SAML Holder-Of-Key +scenario. The components that will be discussed are.

+
+
+
    +
  • +

    web service requester’s implementation

    +
  • +
  • +

    ClientCallbackHandler

    +
  • +
  • +

    Crypto properties and keystore files

    +
  • +
+
+
+Web service requester Implementation +
+

The ws-requester, the client, uses standard procedures for creating a +reference to the web service. To address the endpoint security +requirements, the web service’s "Request Context" is configured with the +information needed in message generation. In addition, the STSClient +that communicates with the STS is configured with similar values. Note +the key strings ending with a ".it" suffix. This suffix flags these +settings as belonging to the STSClient. The internal CXF code assigns +this information to the STSClient that is auto-generated for this +service call.

+
+
+

There is an alternate method of setting up the STSCLient. The user may +provide their own instance of the STSClient. The CXF code will use this +object and not auto-generate one. When providing the STSClient in this +way, the user must provide a org.apache.cxf.Bus for it and the +configuration keys must not have the ".it" suffix. This is used in the +ActAs and OnBehalfOf examples.

+
+
+
+
String serviceURL = "https://" + getServerHost() + ":8443/jaxws-samples-wsse-policy-trust-holderofkey/HolderOfKeyService";
+ 
+final QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/holderofkeywssecuritypolicy", "HolderOfKeyService");
+final URL wsdlURL = new URL(serviceURL + "?wsdl");
+Service service = Service.create(wsdlURL, serviceName);
+HolderOfKeyIface proxy = (HolderOfKeyIface) service.getPort(HolderOfKeyIface.class);
+ 
+Map<String, Object> ctx = ((BindingProvider)proxy).getRequestContext();
+ 
+// set the security related configuration information for the service "request"
+ctx.put(SecurityConstants.CALLBACK_HANDLER, new ClientCallbackHandler());
+ctx.put(SecurityConstants.SIGNATURE_PROPERTIES,
+  Thread.currentThread().getContextClassLoader().getResource(
+  "META-INF/clientKeystore.properties"));
+ctx.put(SecurityConstants.ENCRYPT_PROPERTIES,
+  Thread.currentThread().getContextClassLoader().getResource(
+  "META-INF/clientKeystore.properties"));
+ctx.put(SecurityConstants.SIGNATURE_USERNAME, "myclientkey");
+ctx.put(SecurityConstants.ENCRYPT_USERNAME, "myservicekey");
+ 
+//-- Configuration settings that will be transfered to the STSClient
+// "alice" is the name provided for the WSS Username. Her password will
+// be retreived from the ClientCallbackHander by the STSClient.
+ctx.put(SecurityConstants.USERNAME + ".it", "alice");
+ctx.put(SecurityConstants.CALLBACK_HANDLER + ".it", new ClientCallbackHandler());
+ctx.put(SecurityConstants.ENCRYPT_PROPERTIES + ".it",
+  Thread.currentThread().getContextClassLoader().getResource(
+  "META-INF/clientKeystore.properties"));
+ctx.put(SecurityConstants.ENCRYPT_USERNAME + ".it", "mystskey");
+ctx.put(SecurityConstants.STS_TOKEN_USERNAME + ".it", "myclientkey");
+ctx.put(SecurityConstants.STS_TOKEN_PROPERTIES + ".it",
+  Thread.currentThread().getContextClassLoader().getResource(
+  "META-INF/clientKeystore.properties"));
+ctx.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO + ".it", "true");
+ 
+proxy.sayHello();
+
+
+
+
+ClientCallbackHandler +
+

ClientCallbackHandler is a callback handler for the WSS4J Crypto API. It +is used to obtain the password for the private key in the keystore. This +class enables CXF to retrieve the password of the user name to use for +the message signature. Note that "alice" and her password have been +provided here. This information is not in the (JKS) keystore but +provided in the WildFly security domain. It was declared in file +jbossws-users.properties.

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsse.policy.trust.shared;
+ 
+import java.io.IOException;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import org.apache.ws.security.WSPasswordCallback;
+ 
+public class ClientCallbackHandler implements CallbackHandler {
+ 
+    public void handle(Callback[] callbacks) throws IOException,
+            UnsupportedCallbackException {
+        for (int i = 0; i < callbacks.length; i++) {
+            if (callbacks[i] instanceof WSPasswordCallback) {
+                WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
+                if ("myclientkey".equals(pc.getIdentifier())) {
+                    pc.setPassword("ckpass");
+                    break;
+                } else if ("alice".equals(pc.getIdentifier())) {
+                    pc.setPassword("clarinet");
+                    break;
+                } else if ("bob".equals(pc.getIdentifier())) {
+                    pc.setPassword("trombone");
+                    break;
+                } else if ("myservicekey".equals(pc.getIdentifier())) {  // rls test  added for bearer test
+                   pc.setPassword("skpass");
+                   break;
+                }
+            }
+        }
+    }
+}
+
+
+
+
+Crypto properties and keystore files +
+

WSS4J’s Crypto implementation is loaded and configured via a Java +properties file that contains Crypto configuration data. The file +contains implementation-specific properties such as a keystore location, +password, default alias and the like. This application is using the +Merlin implementation. File clientKeystore.properties contains this +information.

+
+
+

File clientstore.jks, is a Java KeyStore (JKS) repository. It contains +self signed certificates for myservicekey and mystskey. Self signed +certificates are not appropriate for production use.

+
+
+
+
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=cspass
+org.apache.ws.security.crypto.merlin.keystore.alias=myclientkey
+org.apache.ws.security.crypto.merlin.keystore.file=META-INF/clientstore.jks
+
+
+
+
+
+
+
+

17.5.14. WS-Reliable Messaging

+
+

JBoss Web Services inherits full WS-Reliable Messaging capabilities from +the underlying Apache CXF implementation. At the time of writing, Apache +CXF provides support for the +WS-Reliable Messaging 1.0 +(February 2005) version of the specification.

+
+
+
Enabling WS-Reliable Messaging
+
+

WS-Reliable Messaging is implemented internally in Apache CXF through a +set of interceptors that deal with the low level requirements of the +reliable messaging protocol. In order for enabling WS-Reliable +Messaging, users need to either:

+
+
+
    +
  • +

    consume a WSDL contract that specifies proper WS-Reliable Messaging +policies / assertions

    +
  • +
  • +

    manually add / configure the reliable messaging interceptors

    +
  • +
  • +

    specify the reliable messaging policies in an optional CXF Spring XML +descriptor

    +
  • +
  • +

    specify the Apache CXF reliable messaging feature in an optional CXF +Spring XML descriptor

    +
  • +
+
+
+

The former approach relies on the Apache CXF WS-Policy engine and is the +only portable one. The other approaches are Apache CXF proprietary ones, +however they allow for fine-grained configuration of protocol aspects +that are not covered by the WS-Reliable Messaging Policy. More details +are available in the +Apache CXF +documentation.

+
+
+
+
Example
+
+

In this example we configure WS-Reliable Messaging endpoint and client +through the WS-Policy support.

+
+
+
Endpoint
+
+

We go with a contract-first approach, so we start by creating a proper +WSDL contract, containing the WS-Reliable Messaging and WS-Addressing +policies (the latter is a requirement of the former):

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions name="SimpleService" targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wsrm"
+  xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wsrm" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+  xmlns:wsp="http://www.w3.org/2006/07/ws-policy">
+ 
+  <wsdl:types>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.jboss.org/jbossws/ws-extensions/wsrm"
+  attributeFormDefault="unqualified" elementFormDefault="unqualified"
+  targetNamespace="http://www.jboss.org/jbossws/ws-extensions/wsrm">
+<xsd:element name="ping" type="tns:ping"/>
+<xsd:complexType name="ping">
+<xsd:sequence/>
+</xsd:complexType>
+<xsd:element name="echo" type="tns:echo"/>
+<xsd:complexType name="echo">
+<xsd:sequence>
+<xsd:element minOccurs="0" name="arg0" type="xsd:string"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="echoResponse" type="tns:echoResponse"/>
+<xsd:complexType name="echoResponse">
+<xsd:sequence>
+<xsd:element minOccurs="0" name="return" type="xsd:string"/>
+</xsd:sequence>
+</xsd:complexType>
+</xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="echoResponse">
+    <wsdl:part name="parameters" element="tns:echoResponse">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="echo">
+    <wsdl:part name="parameters" element="tns:echo">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="ping">
+    <wsdl:part name="parameters" element="tns:ping">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:portType name="SimpleService">
+    <wsdl:operation name="ping">
+      <wsdl:input name="ping" message="tns:ping">
+    </wsdl:input>
+    </wsdl:operation>
+    <wsdl:operation name="echo">
+      <wsdl:input name="echo" message="tns:echo">
+    </wsdl:input>
+      <wsdl:output name="echoResponse" message="tns:echoResponse">
+    </wsdl:output>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="SimpleServiceSoapBinding" type="tns:SimpleService">
+    <wsp:Policy>
+      <!-- WS-Addressing and basic WS-Reliable Messaging policy assertions -->
+      <wswa:UsingAddressing xmlns:wswa="http://www.w3.org/2006/05/addressing/wsdl"/>
+      <wsrmp:RMAssertion xmlns:wsrmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"/>
+      <!-- --------------------------------------------------------------- -->
+    </wsp:Policy>
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="ping">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="ping">
+        <soap:body use="literal"/>
+      </wsdl:input>
+    </wsdl:operation>
+    <wsdl:operation name="echo">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="echo">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="echoResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="SimpleService">
+    <wsdl:port name="SimpleServicePort" binding="tns:SimpleServiceSoapBinding">
+      <soap:address location="http://localhost:8080/jaxws-samples-wsrm-api"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
+
+
+
+

Then we use the wsconsume tool to generate both standard Jakarta XML Web Services client +and endpoint.

+
+
+

We provide a basic Jakarta XML Web Services implementation for the endpoint, nothing +special in it:

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsrm.service;
+ 
+import jakarta.jws.Oneway;
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   name = "SimpleService",
+   serviceName = "SimpleService",
+   wsdlLocation = "WEB-INF/wsdl/SimpleService.wsdl",
+   targetNamespace = "http://www.jboss.org/jbossws/ws-extensions/wsrm"
+)
+public class SimpleServiceImpl
+{
+   @Oneway
+   @WebMethod
+   public void ping()
+   {
+      System.out.println("ping()");
+   }
+ 
+   @WebMethod
+   public String echo(String s)
+   {
+      System.out.println("echo(" + s + ")");
+      return s;
+   }
+}
+
+
+
+

Finally we package the generated POJO endpoint together with a basic +web.xml the usual way and deploy to the application server. The +webservices stack automatically detects the policies and enables +WS-Reliable Messaging.

+
+
+
+
Client
+
+

The endpoint advertises his RM capabilities (and requirements) through +the published WSDL and the client is required to also enable WS-RM for +successfully exchanging messages with the server.

+
+
+

So a regular JAX WS client is enough if the user does not need to tune +any specific detail of the RM subsystem.

+
+
+
+
QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wsrm", "SimpleService");
+URL wsdlURL = new URL("http://localhost:8080/jaxws-samples-wsrm-api?wsdl");
+Service service = Service.create(wsdlURL, serviceName);
+proxy = (SimpleService)service.getPort(SimpleService.class);
+proxy.echo("Hello World!");
+
+
+
+
+
Additional configuration
+
+

Fine-grained tuning of WS-Reliable Messaging engine requires setting up +proper RM features and attach them for instance to the client proxy. +Here is an example:

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsrm.client;
+ 
+//...
+import jakarta.xml.ws.Service;
+import org.apache.cxf.ws.rm.feature.RMFeature;
+import org.apache.cxf.ws.rm.manager.AcksPolicyType;
+import org.apache.cxf.ws.rm.manager.DestinationPolicyType;
+import org.jboss.test.ws.jaxws.samples.wsrm.generated.SimpleService;
+ 
+// ...
+Service service = Service.create(wsdlURL, serviceName);
+ 
+RMFeature feature = new RMFeature();
+RMAssertion rma = new RMAssertion();
+RMAssertion.BaseRetransmissionInterval bri = new RMAssertion.BaseRetransmissionInterval();
+bri.setMilliseconds(4000L);
+rma.setBaseRetransmissionInterval(bri);
+AcknowledgementInterval ai = new AcknowledgementInterval();
+ai.setMilliseconds(2000L);
+rma.setAcknowledgementInterval(ai);
+feature.setRMAssertion(rma);
+DestinationPolicyType dp = new DestinationPolicyType();
+AcksPolicyType ap = new AcksPolicyType();
+ap.setIntraMessageThreshold(0);
+dp.setAcksPolicy(ap);
+feature.setDestinationPolicy(dp);
+ 
+SimpleService proxy = (SimpleService)service.getPort(SimpleService.class, feature);
+proxy.echo("Hello World");
+
+
+
+

The same can of course be achieved by factoring the feature into a +custom pojo extending org.apache.cxf.ws.rm.feature.RMFeature and +setting the obtained property in a client configuration:

+
+
+
+
package org.jboss.test.ws.jaxws.samples.wsrm.client;
+ 
+import org.apache.cxf.ws.rm.feature.RMFeature;
+import org.apache.cxf.ws.rm.manager.AcksPolicyType;
+import org.apache.cxf.ws.rm.manager.DestinationPolicyType;
+import org.apache.cxf.ws.rmp.v200502.RMAssertion;
+import org.apache.cxf.ws.rmp.v200502.RMAssertion.AcknowledgementInterval;
+ 
+public class CustomRMFeature extends RMFeature
+{
+  public CustomRMFeature() {
+    super();
+    RMAssertion rma = new RMAssertion();
+    RMAssertion.BaseRetransmissionInterval bri = new RMAssertion.BaseRetransmissionInterval();
+    bri.setMilliseconds(4000L);
+    rma.setBaseRetransmissionInterval(bri);
+    AcknowledgementInterval ai = new AcknowledgementInterval();
+    ai.setMilliseconds(2000L);
+    rma.setAcknowledgementInterval(ai);
+    super.setRMAssertion(rma);
+    DestinationPolicyType dp = new DestinationPolicyType();
+    AcksPolicyType ap = new AcksPolicyType();
+    ap.setIntraMessageThreshold(0);
+    dp.setAcksPolicy(ap);
+    super.setDestinationPolicy(dp);
+  }
+}
+
+
+
+
    +
  1. +

    this is how the jaxws-client-config.xml descriptor would look:

    +
  2. +
+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+ 
+<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
+xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
+ 
+<client-config>
+<config-name>Custom Client Config</config-name>
+<property>
+<property-name>cxf.features</property-name>
+<property-value>org.jboss.test.ws.jaxws.samples.wsrm.client.CustomRMFeature</property-value>
+</property>
+</client-config>
+ 
+</jaxws-config>
+
+
+
+
    +
  1. +

    and this is how the client would set the configuration:

    +
  2. +
+
+
+
+
import org.jboss.ws.api.configuration.ClientConfigUtil;
+import org.jboss.ws.api.configuration.ClientConfigurer;
+ 
+//...
+Service service = Service.create(wsdlURL, serviceName);
+SimpleService proxy = (SimpleService)service.getPort(SimpleService.class);
+ 
+ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer();
+configurer.setConfigProperties(proxy, "META-INF/jaxws-client-config.xml", "Custom Client Config");
+proxy.echo("Hello World!");
+
+
+
+
+
+
+

17.5.15. SOAP over Jakarta Messaging

+
+

JBoss Web Services allows communication over the Jakarta Messaging transport. The +functionality comes from Apache CXF support for the +SOAP over Java Message Service 1.0 +specification, which is aimed at a set of standards for interoperable +transport of SOAP messages over Jakarta Messaging.

+
+
+

On top of Apache CXF functionalities, the JBossWS integration allows +users to deploy WS archives containing both Jakarta Messaging and HTTP endpoints +the same way as they do for basic HTTP WS endpoints (in war +archives). The webservices layer of WildFly takes care of looking for +Jakarta Messaging enpdoints in the deployed archive and starts them delegating to +the Apache CXF core similarly as with HTTP endpoints.

+
+
+
Configuring SOAP over Jakarta Messaging
+
+

As per specification, the SOAP over Jakarta Messaging transport configuration is +controlled by proper elements and attributes in the binding and +service elements of the WSDL contract. So a Jakarta Messaging endpoint is usually +developed using a contract-first approach.

+
+
+

The Apache CXF +documentation covers all the details of the supported configurations. +The minimum configuration implies:

+
+
+
    +
  • +

    setting a proper Jakarta Messaging URI in the soap:address location [1]

    +
  • +
  • +

    providing a JNDI connection factory name to be used for connecting to +the queues [2]

    +
  • +
  • +

    setting the transport binding [3]

    +
  • +
+
+
+
+
<wsdl:definitions name="HelloWorldService" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms"
+  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+  xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms"
+  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+  xmlns:soapjms="http://www.w3.org/2010/soapjms/"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+...
+ 
+<wsdl:binding name="HelloWorldServiceSoapBinding" type="tns:HelloWorld">
+  <soap:binding style="document" transport="http://www.w3.org/2010/soapjms/"/> <!-- 3 -->
+  <wsdl:operation name="echo">
+    <soap:operation soapAction="" style="document"/>
+    <wsdl:input name="echo">
+      <soap:body use="literal"/>
+    </wsdl:input>
+    <wsdl:output name="echoResponse">
+      <soap:body use="literal"/>
+    </wsdl:output>
+  </wsdl:operation>
+</wsdl:binding>
+<wsdl:service name="HelloWorldService">
+  <soapjms:jndiConnectionFactoryName>java:/ConnectionFactory</soapjms:jndiConnectionFactoryName> <!-- 2 -->
+  <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
+    <soap:address location="jms:queue:testQueue"/> <!-- 1 -->
+  </wsdl:port>
+</wsdl:service>
+
+
+
+

Apache CXF takes care of setting up the Jakarta Messaging transport for endpoint +implementations whose @WebService annotation points to a port declared +for Jakarta Messaging transport as explained above.

+
+
+ + + + + +
+ + +JBossWS currently supports POJO endpoints only for Jakarta Messaging transport use. +The endpoint classes can be deployed as part of jar or war archives. +
+
+
+

The web.xml descriptor in war archives doesn’t need any entry for +Jakarta Messaging endpoints.

+
+
+
+
Examples
+
+
Jakarta Messaging endpoint only deployment
+
+

In this example we create a simple endpoint relying on SOAP over Jakarta Messaging +and deploy it as part of a jar archive.

+
+
+

The endpoint is created using wsconsume tool from a WSDL contract such +as:

+
+
+
+
<?xml version='1.0' encoding='UTF-8'?>
+<wsdl:definitions name="HelloWorldService" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms"
+  xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
+  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+  xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms"
+  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+  xmlns:soapjms="http://www.w3.org/2010/soapjms/"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <wsdl:types>
+<xs:schema elementFormDefault="unqualified" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms" version="1.0" xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+<xs:element name="echo" type="tns:echo"/>
+<xs:element name="echoResponse" type="tns:echoResponse"/>
+<xs:complexType name="echo">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="arg0" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+<xs:complexType name="echoResponse">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="return" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
+  </wsdl:types>
+  <wsdl:message name="echoResponse">
+    <wsdl:part element="tns:echoResponse" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="echo">
+    <wsdl:part element="tns:echo" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:portType name="HelloWorld">
+    <wsdl:operation name="echo">
+      <wsdl:input message="tns:echo" name="echo">
+    </wsdl:input>
+      <wsdl:output message="tns:echoResponse" name="echoResponse">
+    </wsdl:output>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="HelloWorldServiceSoapBinding" type="tns:HelloWorld">
+    <soap:binding style="document" transport="http://www.w3.org/2010/soapjms/"/>
+    <wsdl:operation name="echo">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="echo">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="echoResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="HelloWorldService">
+    <soapjms:jndiConnectionFactoryName>java:jms/RemoteConnectionFactory</soapjms:jndiConnectionFactoryName>
+    <soapjms:jndiInitialContextFactory>org.wildfly.naming.client.WildFlyInitialContextFactory</soapjms:jndiInitialContextFactory>
+    <soapjms:jndiURL>http-remoting://myhost:8080</soapjms:jndiURL>
+    <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
+      <soap:address location="jms:queue:testQueue"/>
+    </wsdl:port>
+  </wsdl:service>
+  <wsdl:service name="HelloWorldServiceLocal">
+    <soapjms:jndiConnectionFactoryName>java:/ConnectionFactory</soapjms:jndiConnectionFactoryName>
+    <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
+      <soap:address location="jms:queue:testQueue"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
+
+
+
+ + + + + +
+ + +The HelloWorldImplPort here is meant for using the testQueue that +has to be created before deploying the endpoint. +
+
+
+

At the time of writing, java:/ConnectionFactory is the default +connection factory JNDI location on WildFly

+
+
+

For allowing remote JNDI lookup of the connection factory, a specific +service ( HelloWorldService) for remote clients is added to the WSDL. +The java:jms/RemoteConnectionFactory is the JNDI location of the same +connection factory mentioned above, except it’s exposed for remote +lookup. The soapjms:jndiInitialContextFactory and soap:jmsjndiURL +complete the remote connection configuration, specifying the initial +context factory class to use and the JNDI registry address.

+
+
+ + + + + +
+ + +Have a look at the application server domain for finding out the +configured connection factory JNDI locations. +
+
+
+

The endpoint implementation is a basic Jakarta XML Web Services POJO using @WebService +annotation to refer to the consumed contract:

+
+
+
+
package org.jboss.test.ws.jaxws.cxf.jms;
+ 
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   portName = "HelloWorldImplPort",
+   serviceName = "HelloWorldServiceLocal",
+   wsdlLocation = "META-INF/wsdl/HelloWorldService.wsdl",
+   endpointInterface = "org.jboss.test.ws.jaxws.cxf.jms.HelloWorld",
+   targetNamespace = "http://org.jboss.ws/jaxws/cxf/jms"
+)
+public class HelloWorldImpl implements HelloWorld
+{
+   public String echo(String input)
+   {
+      return input;
+   }
+}
+
+
+
+ + + + + +
+ + +The endpoint implementation references the HelloWorldServiceLocal wsdl +service, so that the local JNDI connection factory location is used for +starting the endpoint on server side. +
+
+
+

That’s pretty much all. We just need to package the generated service +endpoint interface, the endpoint implementation and the WSDL file in a +jar archive and deploy it:

+
+
+
+
alessio@inuyasha /dati/jbossws/stack/cxf/trunk $ jar -tvf ./modules/testsuite/cxf-tests/target/test-libs/jaxws-cxf-jms-only-deployment.jar
+     0 Thu Jun 23 15:18:44 CEST 2011 META-INF/
+   129 Thu Jun 23 15:18:42 CEST 2011 META-INF/MANIFEST.MF
+     0 Thu Jun 23 15:18:42 CEST 2011 org/
+     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/
+     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/
+     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/
+     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/
+     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/cxf/
+     0 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/cxf/jms/
+   313 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/cxf/jms/HelloWorld.class
+  1173 Thu Jun 23 15:18:42 CEST 2011 org/jboss/test/ws/jaxws/cxf/jms/HelloWorldImpl.class
+     0 Thu Jun 23 15:18:40 CEST 2011 META-INF/wsdl/
+  3074 Thu Jun 23 15:18:40 CEST 2011 META-INF/wsdl/HelloWorldService.wsdl
+
+
+
+ + + + + +
+ + +A dependency on org.hornetq module needs to be added in MANIFEST.MF +when deploying to WildFly. +
+
+
+
+
Manifest-Version: 1.0
+
+Ant-Version: Apache Ant 1.7.1
+
+Created-By: 17.0-b16 (Sun Microsystems Inc.)
+
+Dependencies: org.hornetq
+
+
+
+

A Jakarta XML Web Services client can interact with the Jakarta Messaging endpoint the usual way:

+
+
+
+
URL wsdlUrl = ...
+//start another bus to avoid affecting the one that could already be assigned to the current thread - optional but highly suggested
+Bus bus = BusFactory.newInstance().createBus();
+BusFactory.setThreadDefaultBus(bus);
+try
+{
+   QName serviceName = new QName("http://org.jboss.ws/jaxws/cxf/jms", "HelloWorldService");
+   Service service = Service.create(wsdlUrl, serviceName);
+   HelloWorld proxy = (HelloWorld) service.getPort(new QName("http://org.jboss.ws/jaxws/cxf/jms", "HelloWorldImplPort"), HelloWorld.class);
+   setupProxy(proxy);
+   proxy.echo("Hi");
+}
+finally
+{
+   bus.shutdown(true);
+}
+
+
+
+ + + + + +
+ + +The WSDL location URL needs to be retrieved in a custom way, depending +on the client application. Given the endpoint is Jakarta Messaging only, there’s no +automatically published WSDL contract. +
+
+
+

in order for performing the remote invocation (which internally goes +through remote JNDI lookup of the connection factory), the calling user +credentials need to be set into the Apache CXF JMSConduit:

+
+
+
+
private void setupProxy(HelloWorld proxy) {
+   JMSConduit conduit = (JMSConduit)ClientProxy.getClient(proxy).getConduit();
+   JNDIConfiguration jndiConfig = conduit.getJmsConfig().getJndiConfig();
+   jndiConfig.setConnectionUserName("user");
+   jndiConfig.setConnectionPassword("password");
+   Properties props = conduit.getJmsConfig().getJndiTemplate().getEnvironment();
+   props.put(Context.SECURITY_PRINCIPAL, "user");
+   props.put(Context.SECURITY_CREDENTIALS, "password");
+}
+
+
+
+ + + + + +
+ + +Have a look at the WildFly domain and messaging configuration for +finding out the actual security requirements. At the time of writing, a +user with guest role is required and that’s internally checked using +the other security domain. +
+
+
+

Of course once the endpoint is exposed over Jakarta Messaging transport, any plain Jakarta Messaging +client can also be used to send messages to the webservice endpoint. You +can have a look at the SOAP over Jakarta Messaging spec details and code the client +similarly to

+
+
+
+
Properties env = new Properties();
+env.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
+env.put(Context.PROVIDER_URL, "http-remoting://myhost:8080");
+env.put(Context.SECURITY_PRINCIPAL, "user");
+env.put(Context.SECURITY_CREDENTIALS, "password");
+InitialContext context = new InitialContext(env);
+QueueConnectionFactory connectionFactory = (QueueConnectionFactory)context.lookup("jms/RemoteConnectionFactory");
+Queue reqQueue = (Queue)context.lookup("jms/queue/test");
+Queue resQueue = (Queue)context.lookup("jms/queue/test");
+QueueConnection con = connectionFactory.createQueueConnection("user", "password");
+QueueSession session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
+QueueReceiver receiver = session.createReceiver(resQueue);
+ResponseListener responseListener = new ResponseListener(); //a custom response listener...
+receiver.setMessageListener(responseListener);
+con.start();
+TextMessage message = session.createTextMessage(reqMessage);
+message.setJMSReplyTo(resQueue);
+ 
+//setup SOAP-over-JMS properties...
+message.setStringProperty("SOAPJMS_contentType", "text/xml");
+message.setStringProperty("SOAPJMS_requestURI", "jms:queue:testQueue");
+ 
+QueueSender sender = session.createSender(reqQueue);
+sender.send(message);
+sender.close();
+ 
+...
+
+
+
+
+
Jakarta Messaging and HTTP endpoints deployment
+
+

In this example we create a deployment containing an endpoint that +serves over both HTTP and Jakarta Messaging transports.

+
+
+

We from a WSDL contract such as below (please note we’ve two binding / +portType for the same service):

+
+
+
+
<?xml version='1.0' encoding='UTF-8'?>
+<wsdl:definitions name="HelloWorldService" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms"
+  xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
+  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+  xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms"
+  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+  xmlns:soapjms="http://www.w3.org/2010/soapjms/"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <wsdl:types>
+<xs:schema elementFormDefault="unqualified" targetNamespace="http://org.jboss.ws/jaxws/cxf/jms" version="1.0"
+  xmlns:tns="http://org.jboss.ws/jaxws/cxf/jms" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+<xs:element name="echo" type="tns:echo"/>
+<xs:element name="echoResponse" type="tns:echoResponse"/>
+<xs:complexType name="echo">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="arg0" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+<xs:complexType name="echoResponse">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="return" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
+  </wsdl:types>
+  <wsdl:message name="echoResponse">
+    <wsdl:part element="tns:echoResponse" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="echo">
+    <wsdl:part element="tns:echo" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:portType name="HelloWorld">
+    <wsdl:operation name="echo">
+      <wsdl:input message="tns:echo" name="echo">
+    </wsdl:input>
+      <wsdl:output message="tns:echoResponse" name="echoResponse">
+    </wsdl:output>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="HelloWorldServiceSoapBinding" type="tns:HelloWorld">
+    <soap:binding style="document" transport="http://www.w3.org/2010/soapjms/"/>
+    <wsdl:operation name="echo">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="echo">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="echoResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:binding name="HttpHelloWorldServiceSoapBinding" type="tns:HelloWorld">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="echo">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="echo">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="echoResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="HelloWorldService">
+    <soapjms:jndiConnectionFactoryName>java:jms/RemoteConnectionFactory</soapjms:jndiConnectionFactoryName>
+    <soapjms:jndiInitialContextFactory>org.wildfly.naming.client.WildFlyInitialContextFactory</soapjms:jndiInitialContextFactory>
+    <soapjms:jndiURL>http-remoting://localhost:8080</soapjms:jndiURL>
+    <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
+      <soap:address location="jms:queue:testQueue"/>
+    </wsdl:port>
+    <wsdl:port binding="tns:HttpHelloWorldServiceSoapBinding" name="HttpHelloWorldImplPort">
+      <soap:address location="http://localhost:8080/jaxws-cxf-jms-http-deployment"/>
+    </wsdl:port>
+  </wsdl:service>
+  <wsdl:service name="HelloWorldServiceLocal">
+    <soapjms:jndiConnectionFactoryName>java:/ConnectionFactory</soapjms:jndiConnectionFactoryName>
+    <wsdl:port binding="tns:HelloWorldServiceSoapBinding" name="HelloWorldImplPort">
+      <soap:address location="jms:queue:testQueue"/>
+    </wsdl:port>
+</wsdl:definitions>
+
+
+
+

The same considerations of the previous example regarding the Jakarta Messaging queue +and JNDI connection factory still apply.
+Here we can implement the endpoint in multiple ways, either with a +common implementation class that’s extended by the Jakarta Messaging and HTTP ones, or +keep the two implementation classes independent and just have them +implement the same service endpoint interface:

+
+
+
+
package org.jboss.test.ws.jaxws.cxf.jms_http;
+ 
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   portName = "HelloWorldImplPort",
+   serviceName = "HelloWorldServiceLocal",
+   wsdlLocation = "WEB-INF/wsdl/HelloWorldService.wsdl",
+   endpointInterface = "org.jboss.test.ws.jaxws.cxf.jms_http.HelloWorld",
+   targetNamespace = "http://org.jboss.ws/jaxws/cxf/jms"
+)
+public class HelloWorldImpl implements HelloWorld
+{
+   public String echo(String input)
+   {
+      System.out.println("input: " + input);
+      return input;
+   }
+}
+
+
+
+
+
package org.jboss.test.ws.jaxws.cxf.jms_http;
+ 
+import jakarta.jws.WebService;
+ 
+@WebService
+(
+   portName = "HttpHelloWorldImplPort",
+   serviceName = "HelloWorldService",
+   wsdlLocation = "WEB-INF/wsdl/HelloWorldService.wsdl",
+   endpointInterface = "org.jboss.test.ws.jaxws.cxf.jms_http.HelloWorld",
+   targetNamespace = "http://org.jboss.ws/jaxws/cxf/jms"
+)
+public class HttpHelloWorldImpl implements HelloWorld
+{
+   public String echo(String input)
+   {
+      System.out.println("input (http): " + input);
+      return "(http) " + input;
+   }
+}
+
+
+
+

Both classes are packaged together the service endpoint interface and +the WSDL file in a war archive:

+
+
+
+
alessio@inuyasha /dati/jbossws/stack/cxf/trunk $ jar -tvf ./modules/testsuite/cxf-spring-tests/target/test-libs/jaxws-cxf-jms-http-deployment.war
+     0 Thu Jun 23 15:18:44 CEST 2011 META-INF/
+   129 Thu Jun 23 15:18:42 CEST 2011 META-INF/MANIFEST.MF
+     0 Thu Jun 23 15:18:44 CEST 2011 WEB-INF/
+   569 Thu Jun 23 15:18:40 CEST 2011 WEB-INF/web.xml
+     0 Thu Jun 23 15:18:44 CEST 2011 WEB-INF/classes/
+     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/
+     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/
+     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/
+     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/
+     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/
+     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/
+     0 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/jms_http/
+   318 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/jms_http/HelloWorld.class
+  1192 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/jms_http/HelloWorldImpl.class
+  1246 Thu Jun 23 15:18:42 CEST 2011 WEB-INF/classes/org/jboss/test/ws/jaxws/cxf/jms_http/HttpHelloWorldImpl.class
+     0 Thu Jun 23 15:18:40 CEST 2011 WEB-INF/wsdl/
+  3068 Thu Jun 23 15:18:40 CEST 2011 WEB-INF/wsdl/HelloWorldService.wsdl
+
+
+
+

A trivial web.xml descriptor is also included to trigger the HTTP +endpoint publish:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+  version="2.4">
+  <servlet>
+    <servlet-name>EndpointServlet</servlet-name>
+    <servlet-class>org.jboss.test.ws.jaxws.cxf.jms_http.HttpHelloWorldImpl</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>EndpointServlet</servlet-name>
+    <url-pattern>/*</url-pattern>
+  </servlet-mapping>
+</web-app>
+
+
+
+ + + + + +
+ + +Here too the MANIFEST.MF needs to declare a dependency on org.hornetq +module when deploying to WildFly. +
+
+
+

Finally, the Jakarta XML Web Services client can ineract with both Jakarta Messaging and HTTP endpoints +as usual:

+
+
+
+
//start another bus to avoid affecting the one that could already be assigned to current thread - optional but highly suggested
+Bus bus = BusFactory.newInstance().createBus();
+BusFactory.setThreadDefaultBus(bus);
+try
+{
+   QName serviceName = new QName("http://org.jboss.ws/jaxws/cxf/jms", "HelloWorldService");
+   Service service = Service.create(wsdlUrl, serviceName);
+ 
+   //JMS test
+   HelloWorld proxy = (HelloWorld) service.getPort(new QName("http://org.jboss.ws/jaxws/cxf/jms", "HelloWorldImplPort"), HelloWorld.class);
+   setupProxy(proxy);
+   proxy.echo("Hi");
+   //HTTP test
+   HelloWorld httpProxy = (HelloWorld) service.getPort(new QName("http://org.jboss.ws/jaxws/cxf/jms", "HttpHelloWorldImplPort"), HelloWorld.class);
+   httpProxy.echo("Hi");
+}
+finally
+{
+   bus.shutdown(true);
+}
+
+
+
+
+
Use of Endpoint.publish() API
+
+

An alternative to deploying an archive containing Jakarta Messaging endpoints is in +starting them directly using the Jakarta XML Web Services Endpoint.publish(..) API.

+
+
+

That’s as easy as doing:

+
+
+
+
Object implementor = new HelloWorldImpl();
+Endpoint ep = Endpoint.publish("jms:queue:testQueue", implementor);
+try
+{
+   //use or let others use the endpoint
+}
+finally
+{
+   ep.stop();
+}
+
+
+
+

where HelloWorldImpl is a POJO endpoint implementation referencing a +Jakarta Messaging port in a given WSDL contract, as explained in the previous +examples.

+
+
+

The main difference among the deployment approach is in the direct +control and responsibility over the endpoint lifecycle ( start/publish +and stop).

+
+
+
+
+
+

17.5.16. HTTP Proxy

+
+

The HTTP Proxy related functionalities of JBoss Web Services are +provided by the Apache CXF http transport layer.

+
+
+

The suggested configuration mechanism when running JBoss Web Services is +explained below; for further information please refer to the +Apache +CXF documentation.

+
+
+
Configuration
+
+

The HTTP proxy configuration for a given Jakarta XML Web Services client can be set in the +following ways:

+
+
+
    +
  • +

    through the http.proxyHost and http.proxyPort system properties, +or

    +
  • +
  • +

    leveraging the org.apache.cxf.transport.http.HTTPConduit options

    +
  • +
+
+
+

The former is a JVM level configuration; for instance, assuming the http +proxy is currently running at http://localhost:9934, here is the setup:

+
+
+
+
System.getProperties().setProperty("http.proxyHost", "localhost");
+System.getProperties().setProperty("http.proxyPort", 9934);
+
+
+
+

The latter is a client stub/port level configuration: the setup is +performed on the HTTPConduit object that’s part of the Apache CXF +Client abstraction.

+
+
+
+
import org.apache.cxf.configuration.security.ProxyAuthorizationPolicy;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.frontend.ClientProxy;
+import org.apache.cxf.transport.http.HTTPConduit;
+import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
+import org.apache.cxf.transports.http.configuration.ProxyServerType;
+...
+ 
+Service service = Service.create(wsdlURL, new QName("http://org.jboss.ws/jaxws/cxf/httpproxy", "HelloWorldService"));
+HelloWorld port = (HelloWorld) service.getPort(new QName("http://org.jboss.ws/jaxws/cxf/httpproxy", "HelloWorldImplPort"), HelloWorld.class);
+ 
+Client client = ClientProxy.getClient(port);
+HTTPConduit conduit = (HTTPConduit)client.getConduit();
+ProxyAuthorizationPolicy policy = new ProxyAuthorizationPolicy();
+policy.setAuthorizationType("Basic");
+policy.setUserName(PROXY_USER);
+policy.setPassword(PROXY_PWD);
+conduit.setProxyAuthorization(policy);
+ 
+port.echo("Foo");
+
+
+
+

The ProxyAuthorizationPolicy also allows for setting the authotization +type as well as the username / password to be used.

+
+
+

Speaking of authorization and authentication, please note that the JDK +already features the java.net.Authenticator facility, which is used +whenever opening a connection to a given URL requiring a http proxy. +Users might want to set a custom Authenticator for instance when needing +to read WSDL contracts before actually calling into the JBoss Web +Services / Apache CXF code; here is an example:

+
+
+
+
import java.net.Authenticator;
+import java.net.PasswordAuthentication;
+...
+public class ProxyAuthenticator extends Authenticator
+{
+   private String user, password;
+ 
+   public ProxyAuthenticator(String user, String password)
+   {
+      this.user = user;
+      this.password = password;
+   }
+ 
+   protected PasswordAuthentication getPasswordAuthentication()
+   {
+      return new PasswordAuthentication(user, password.toCharArray());
+   }
+}
+ 
+...
+ 
+Authenticator.setDefault(new ProxyAuthenticator(PROXY_USER, PROXY_PWD));
+
+
+
+
+
+

17.5.17. WS-Discovery

+
+

Apache CXF includes support for Web Services Dynamic Discovery ( +WS-Discovery), +which is a protocol to enable dynamic discovery of services available on +the local network. The protocol implies using a UDP based multicast +transport to announce new services and probe for existing services. A +managed mode where a discovery proxy is used to reduce the amount of +required multicast traffic is also covered by the protocol.

+
+
+

JBossWS integrates the WS-Discovery +functionalities provided +by Apache CXF into the application server.

+
+
+
Enabling WS-Discovery
+
+

Apache CXF enables WS-Discovery depending on the availability of its +runtime component; given that’s always shipped in the application +server, JBossWS integration requires using the +cxf.ws-discovery.enabled +property +usage for enabling WS-Discovery for a given deployment. By default +WS-Discovery is disabled on the application server. Below is an +example of jboss-webservices.xml descriptor to be used for enabling +WS-Discovery:

+
+
+
+
<webservices xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  version="1.2" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee">
+ 
+  <property>
+    <name>cxf.ws-discovery.enabled</name>
+    <value>true</value>
+  </property>
+ 
+</webservices>
+
+
+
+

By default, a WS-Discovery service endpoint (SOAP-over-UDP bound) will +be started the first time a WS-Discovery enabled deployment is processed +on the application server. Every ws endpoint belonging to WS-Discovery +enabled deployments will be automatically registered into such a +WS-Discovery service endpoint ( Hello messages). The service will +reply to Probe and Resolve messages received on UDP port 3702 +(including multicast messages sent to IPv4 address 239.255.255.250, +as per +specification). +Endpoints will eventually be automatically unregistered using Bye +messages upon undeployment.

+
+
+
+
Probing services
+
+

Apache CXF comes with a WS-Discovery API that can be used to probe / +resolve services. When running in-container, a JBoss module +dependency to the org.apache.cxf.impl module is to +be set to have access to WS-Discovery client functionalities.

+
+
+

The +org.apache.cxf.ws.discovery.WSDiscoveryClient +class provides the probe and resolve methods which also accepts +filters on scopes. Users can rely on them for locating available +endpoints on the network. Please have a look at the JBossWS testsuite +which includes a +sample +on CXF WS-Discovery usage.

+
+
+
+
+

17.5.18. WS-Policy

+
+
Apache CXF WS-Policy support
+
+

JBossWS policy support rely on the Apache CXF WS-Policy framework, which +is compliant with the +Web Services Policy +1.5 - Framework and +Web Services +Policy 1.5 - Attachment specifications.
+Users can work with policies in different ways:

+
+
+
    +
  • +

    by adding policy assertions to wsdl contracts and letting the runtime +consume them and behave accordingly;

    +
  • +
  • +

    by specifying endpoint policy attachments using either CXF annotations +or features.

    +
  • +
+
+
+

Of course users can also make direct use of the Apache CXF policy +framework, +defining custom +assertions, etc.

+
+
+

Finally, JBossWS provides some additional annotations for simplified +policy attachment.

+
+
+
Contract-first approach
+
+

WS-Policies can be attached and referenced in wsdl elements (the +specifications describe all possible alternatives). Apache CXF +automatically recognizes, reads and uses policies defined in the wsdl.

+
+
+

Users should hence develop endpoints using the contract-first +approach, that is explicitly providing the contract for their services. +Here is a excerpt taken from a wsdl including a WS-Addressing policy:

+
+
+
+
<wsdl:definitions name="Foo" targetNamespace="http://ws.jboss.org/foo"
+...
+<wsdl:service name="FooService">
+    <wsdl:port binding="tns:FooBinding" name="FooPort">
+        <soap:address location="http://localhost:80800/foo"/>
+        <wsp:Policy xmlns:wsp="http://www.w3.org/ns/ws-policy">
+             <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
+                 <wsp:Policy/>
+              </wsam:Addressing>
+         </wsp:Policy>
+    </wsdl:port>
+</wsdl:service>
+</wsdl:definitions>
+
+
+
+

Of course, CXF also acts upon policies specified in wsdl documents +consumed on client side.

+
+
+
+
Code-first approach
+
+

For those preferring code-first (java-first) endpoint development, +Apache CXF comes with org.apache.cxf.annotations.Policy and +org.apache.cxf.annotations.Policies annotations to be used for +attaching policy fragments to the wsdl generated at deploy time.

+
+
+

Here is an example of a code-first endpoint including @Policy +annotation:

+
+
+
+
import jakarta.jws.WebService;
+import org.apache.cxf.annotations.Policy;
+ 
+@WebService(portName = "MyServicePort",
+            serviceName = "MyService",
+            name = "MyServiceIface",
+            targetNamespace = "http://www.jboss.org/jbossws/foo")
+@Policy(placement = Policy.Placement.BINDING, uri = "JavaFirstPolicy.xml")
+public class MyServiceImpl {
+   public String sayHello() {
+      return "Hello World!";
+   }
+}
+
+
+
+

The referenced descriptor is to be added to the deployment and will +include the policy to be attached; the attachment position in the +contracts is defined through the placement attribute. Here is a +descriptor example:

+
+
+
+
<?xml version="1.0" encoding="UTF-8" ?>
+<wsp:Policy wsu:Id="MyPolicy" xmlns:wsp="http://www.w3.org/ns/ws-policy"
+    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:SupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <wsp:Policy>
+                    <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                        <wsp:Policy>
+                            <sp:WssUsernameToken10/>
+                        </wsp:Policy>
+                    </sp:UsernameToken>
+                </wsp:Policy>
+            </sp:SupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
+
+
+
+
+
+
JBossWS additions
+
+
Policy sets
+
+

Both approaches above require users to actually write their policies' +assertions; while this offer great flexibility and control of the actual +contract, providing the assertions might end up being quite a +challenging task for complex policies. For this reason, the JBossWS +integration provides policy sets, which are basically pre-defined +groups of policy assertions corresponding to well known / common needs. +Each set has a label allowing users to specify it in the +@org.jboss.ws.api.annotation.PolicySets annotation to have the policy +assertions for that set attached to the annotated endpoint. Multiple +labels can also be specified. Here is an example of the @PolicySets +annotation on a service endpoint interface:

+
+
+
+
import jakarta.jws.WebService;
+import org.jboss.ws.api.annotation.PolicySets;
+ 
+@WebService(name = "EndpointTwo", targetNamespace = "http://org.jboss.ws.jaxws.cxf/jbws3648")
+@PolicySets({"WS-RM_Policy_spec_example", "WS-SP-EX223_WSS11_Anonymous_X509_Sign_Encrypt", "WS-Addressing"})
+public interface EndpointTwo
+{
+   String echo(String input);
+}
+
+
+
+

The three sets specified in @PolicySets will cause the wsdl generated +for the endpoint having this interface to be enriched with some policy +assertions for WS-RM, WS-Security and WS-Addressing.

+
+
+

The labels' list of known sets is stored in the +META-INF/policies/org.jboss.wsf.stack.cxf.extensions.policy.PolicyAttachmentStore +file within the jbossws-cxf-client.jar ( +org.jboss.ws.cxf:jbossws-cxf-client maven artifact). Actual policy +fragments for each set are also stored in the same artifact at +META-INF/policies/<set-label>-<attachment-position>.xml.

+
+
+

Here is a list of the available policy sets:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LabelDescription

WS-Addressing

Basic WS-Addressing policy

WS-RM_Policy_spec_example

The basic WS-RM policy example in the WS-RM +specification

WS-SP-EX2121_SSL_UT_Supporting_Token

The group of policy assertions +used in the section 2.1.2.1 example of the WS-Security Policy Examples +1.0 specification

WS-SP-EX213_WSS10_UT_Mutual_Auth_X509_Sign_Encrypt

The group of policy +assertions used in the section 2.1.3 example of the WS-Security Policy +Examples 1.0 specification

WS-SP-EX214_WSS11_User_Name_Cert_Sign_Encrypt

The group of policy +assertions used in the section 2.1.4 example of the WS-Security Policy +Examples 1.0 specification

WS-SP-EX221_WSS10_Mutual_Auth_X509_Sign_Encrypt

The group of policy +assertions used in the section 2.2.1 example of the WS-Security Policy +Examples 1.0 specification

WS-SP-EX222_WSS10_Mutual_Auth_X509_Sign_Encrypt

The group of policy +assertions used in the section 2.2.2 example of the WS-Security Policy +Examples 1.0 specification

WS-SP-EX223_WSS11_Anonymous_X509_Sign_Encrypt

The group of policy +assertions used in the section 2.2.3 example of the WS-Security Policy +Examples 1.0 specification

WS-SP-EX224_WSS11_Mutual_Auth_X509_Sign_Encrypt

The group of policy +assertions used in the section 2.2.4 example of the WS-Security Policy +Examples 1.0 specification

AsymmetricBinding_X509v1_TripleDesRsa15_EncryptBeforeSigning_ProtectTokens

A WS-Security policy for asymmetric binding (encrypt before signing) +using X.509v1 tokens, 3DES + RSA 1.5 algorithms and with token +protections enabled

AsymmetricBinding_X509v1_GCM256OAEP_ProtectTokens

The same as before, +but using custom Apache CXF algorithm suite including GCM 256 + RSA OAEP +algorithms

+
+ + + + + +
+ + +Always verify the contents of the generated wsdl contract, as policy +sets are potentially subject to updates between JBossWS releases. This +is especially important when dealing with security related policies; the +provided sets are to be considered as convenient configuration options +only; users remain responsible for the policies in their contracts. +
+
+
+ + + + + +
+ + +The org.jboss.wsf.stack.cxf.extensions.policy.Constants interface has +convenient String constants for the available policy set labels. +
+
+
+ + + + + +
+ + +If you feel a new set should be added, just propose it by writing the +user forum! +
+
+
+
+
+
+

17.5.19. Published WSDL customization

+
+
Endpoint address rewrite
+
+

JBossWS supports the rewrite of the <soap:address> element of +endpoints published in WSDL contracts. This feature is useful for +controlling the server address that is advertised to clients for each +endpoint. The rewrite mechanism is configured at server level through a +set of elements in the webservices subsystem of the WildFly management +model. Please refer to the container documentation for details on the +options supported in the selected container version. Below is a list of +the elements available in the latest WildFly sources:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription

modify-wsdl-address

boolean

This boolean enables and disables the +address rewrite functionality.When modify-wsdl-address is set to true +and the content of <soap:address> is a valid URL, JBossWS will rewrite +the URL using the values of wsdl-host and wsdl-port or +wsdl-secure-port.When modify-wsdl-address is set to false and the +content of <soap:address> is a valid URL, JBossWS will not rewrite the +URL. The <soap:address> URL will be used.When the content of +<soap:address> is not a valid URL, JBossWS will rewrite it no matter +what the setting of modify-wsdl-address.If modify-wsdl-address is set to +true and wsdl-host is not defined or explicitly set to +'jbossws.undefined.host' the content of <soap:address> URL is use. +JBossWS uses the requester’s host when rewriting the <soap:address>When +modify-wsdl-address is not defined JBossWS uses a default value of true.

wsdl-host

string

The hostname / IP address to be used for rewriting +<soap:address>.If wsdl-host is set to jbossws.undefined.host, JBossWS +uses the requester’s host when rewriting the <soap:address>When +wsdl-host is not defined JBossWS uses a default value of +'jbossws.undefined.host'.

wsdl-port

int

Set this property to explicitly define the HTTP port +that will be used for rewriting the SOAP address.Otherwise the HTTP port +will be identified by querying the list of installed HTTP connectors.

wsdl-secure-port

int

Set this property to explicitly define the HTTPS +port that will be used for rewriting the SOAP address.Otherwise the +HTTPS port will be identified by querying the list of installed HTTPS +connectors.

wsdl-uri-scheme

string

This property explicitly sets the URI scheme +to use for rewriting <soap:address> . Valid values are http and https. +This configuration overrides scheme computed by processing the endpoint +(even if a transport guaranteeis specified). The provided values for +wsdl-port and wsdl-secure-port (or their default values) are used +depending on specified scheme.

wsdl-path-rewrite-rule

string

This string defines a SED substitution +command (e.g., 's/regexp/replacement/g') that JBossWS executes against +the path component of each <soap:address> URL published from the +server.When wsdl-path-rewrite-rule is not defined, JBossWS retains the +original path component of each <soap:address> URL.When +'modify-wsdl-address' is set to "false" this element is ignored.

+
+

Additionally, users can override the server level configuration by +requesting a specific rewrite behavior for a given endpoint deployment. +That is achieved by setting one of the following properties within a +jboss-webservices.xml descriptor:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyCorresponding server option

wsdl.soapAddress.rewrite.modify-wsdl-address

modify-wsdl-address

wsdl.soapAddress.rewrite.wsdl-host

wsdl-host

wsdl.soapAddress.rewrite.wsdl-port

wsdl-port

wsdl.soapAddress.rewrite.wsdl-secure-port

wsdl-secure-port

wsdl.soapAddress.rewrite.wsdl-path-rewrite-rule

wsdl-path-rewrite-rule

wsdl.soapAddress.rewrite.wsdl-uri-scheme

wsdl-uri-scheme

+
+

Here is an example of partial overriding of the default configuration +for a specific deployment:

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+<webservices version="1.2"
+  xmlns="http://www.jboss.com/xml/ns/javaee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee">
+  <property>
+    <name>wsdl.soapAddress.rewrite.wsdl-uri-scheme</name>
+    <value>https</value>
+  </property>
+  <property>
+    <name>wsdl.soapAddress.rewrite.wsdl-host</name>
+    <value>foo</value>
+  </property>
+</webservices>
+
+
+
+
+
System property references
+
+

System property references wrapped within "@" characters are expanded +when found in WSDL attribute and element values. This allows for +instance including multiple WS-Policy declarations in the contract and +selecting the policy to use depending on a server wide system property; +here is an example:

+
+
+
+
<wsdl:definitions ...>
+  ...
+  <wsdl:binding name="ServiceOneSoapBinding" type="tns:EndpointOne">
+    ...
+    <wsp:PolicyReference URI="#@org.jboss.wsf.test.JBWS3628TestCase.policy@"/>
+    <wsdl:operation name="echo">
+      ...
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="ServiceOne">
+    <wsdl:port binding="tns:ServiceOneSoapBinding" name="EndpointOnePort">
+      <soap:address location="http://localhost:8080/jaxws-cxf-jbws3628/ServiceOne"/>
+    </wsdl:port>
+  </wsdl:service>
+ 
+  <wsp:Policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" wsu:Id="WS-RM_Policy">
+ <wsrmp:RMAssertion xmlns:wsrmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
+          ...
+   </wsrmp:RMAssertion>
+  </wsp:Policy>
+ 
+  <wsp:Policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy"
+      xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" wsu:Id="WS-Addressing_policy">
+    <wsam:Addressing>
+      <wsp:Policy/>
+    </wsam:Addressing>
+  </wsp:Policy>
+</wsdl:definitions>
+
+
+
+

If the org.jboss.wsf.test.JBWS3628TestCase.policy system property is +defined and set to " WS-Addressing_policy ", WS-Addressing will be +enabled for the endpoint defined by the contract above.

+
+
+
+
+
+

17.6. JBoss Modules and WS applications

+
+

The JBoss Web Services functionalities are provided by a given set of +modules / libraries installed on WildFly, which are organized into JBoss +Modules modules. In particular the org.jboss.as.webservices.* and +org.jboss.ws.* modules belong to the JBossWS - WildFly integration. +Users should not need to change anything in them.

+
+
+

While users are of course allowed to provide their own modules for their +custom needs, below is a brief collection of suggestions and hints +around modules and webservices development on WildFly.

+
+
+

17.6.1. Setting module dependencies

+
+

On WildFly the user deployment classloader does not have any visibility +over JBoss internals; so for instance you can’t directly use JBossWS +implementation classes unless you explicitly set a dependency to the +corresponding module. As a consequence, users need to declare the module +dependencies they want to be added to their deployment.

+
+
+ + + + + +
+ + +The JBoss Web Services APIs are always available by default whenever the +webservices subsystem is available on AS7. So users just use them, no +need for explicit dependencies declaration for those modules. +
+
+
+
Using MANIFEST.MF
+
+

The convenient method for configuring deployment dependencies is adding +them into the MANIFEST.MF file:

+
+
+
+
Manifest-Version: 1.0
+Dependencies: org.jboss.ws.cxf.jbossws-cxf-client services export,foo.bar
+
+
+
+

Here above org.jboss.ws.cxf.jbossws-cxf-client and foo.bar are the +modules you want to set dependencies to; services tells the modules +framework that you want to also import META-INF/services/.. +declarations from the dependency, while export exports the classes +from the module to any other module that might be depending on the +module implicitly created for your deployment.

+
+
+ + + + + +
+ + +When using annotations on your endpoints / handlers such as the Apache +CXF ones (@InInterceptor, @GZIP, …​) remember to add the proper module +dependency in your manifest. Otherwise your annotations are not picked +up and added to the annotation index by WildFly, resulting in them being +completely and silently ignored. +
+
+
+
Using Jakarta XML Binding
+
+

In order for successfully directly using Jakarta XML Binding contexts, etc. in your +client or endpoint running in-container, you need to properly setup a +Jakarta XML Binding implementation; that is performed setting the following dependency:

+
+
+
+
Dependencies: com.sun.xml.bind services export
+
+
+
+
+
Using Apache CXF
+
+

In order for using Apache CXF APIs and implementation classes you need +to add a dependency to the org.apache.cxf (API) module and / or +org.apache.cxf.impl (implementation) module:

+
+
+
+
Dependencies: org.apache.cxf services
+
+
+
+

However, please note that would not come with any JBossWS-CXF +customizations nor additional extensions. For this reason, and generally +speaking for simplifying user configuration, a client side aggregation +module is available with all the WS dependencies users might need.

+
+
+
+
Client side WS aggregation module
+
+

Whenever you simply want to use all the JBoss Web Services +feature/functionalities, you can set a dependency to the convenient +client module.

+
+
+
+
Dependencies: org.jboss.ws.cxf.jbossws-cxf-client services
+
+
+
+

Please note the services option above: that’s strictly required in +order for you to get the JBossWS-CXF version of classes that are +retrieved using the Service API, the org.apache.cxf.Bus for +instance.

+
+
+ + + + + +
+ + +Be careful as issues because of misconfiguration here can be quite hard +to track down, because the Apache CXF behaviour would be sensibly +different. +
+
+
+ + + + + +
+ + +The services option is almost always needed when declaring +dependencies on org.jboss.ws.cxf.jbossws-cxf-client and +org.apache.cxf modules. The reason for this is in it affecting the +loading of classes through the Service API, which is what is used to +wire most of the JBossWS components as well as all Apache CXF Bus +extensions. +
+
+
+
+
Annotation scanning
+
+

The application server uses an annotation index for detecting Jakarta XML Web Services +endpoints in user deployments. When declaring WS endpoints whose class +belongs to a different module (for instance referring that in the +web.xml descriptor), be sure to have an annotations type dependency +in place. Without that, your endpoints would simply be ignored as they +won’t appear as annotated classes to the webservices subsystem.

+
+
+
+
Dependencies: org.foo annotations
+
+
+
+
+
+
Using jboss-deployment-descriptor.xml
+
+

In some circumstances, the convenient approach of setting module +dependencies in MANIFEST.MF might not work. An example is the need for +importing/exporting specific resources from a given module dependency. +Users should hence add a jboss-deployment-structure.xml descriptor to +their deployment and set module dependencies in it.

+
+
+
+
+
+
+
+

18. Scoped EJB client contexts

+
+
+
+WildFly 29 introduced the EJB client API for managing remote EJB +invocations. The EJB client API works off EJBClientContext(s). An +EJBClientContext can potentially contain any number of EJB receivers. An +EJB receiver is a component which knows how to communicate with a server +which is capable of handling the EJB invocation. Typically EJB remote +applications can be classified into: +
+
+
+
    +
  • +

    A remote client which runs as a standalone Java application

    +
  • +
  • +

    A remote client which runs within another WildFly 29 instance

    +
  • +
+
+
+

Depending on the kind of remote client, from an EJB client API point of +view, there can potentially be more than 1 EJBClientContext(s) within a +JVM.

+
+
+

In case of standalone applications, typically a single EJBClientContext +(backed by any number of EJB receivers) exists. However this isn’t +mandatory. Certain standalone applications can potentially have more +than one EJBClientContext(s) and an EJB client context selector will be +responsible for returning the appropriate context.

+
+
+

In case of remote clients which run within another WildFly 29 instance, +each deployed application will have a corresponding EJB client context. +Whenever that application invokes on another EJB, the corresponding EJB +client context will be used for finding the right EJB receiver and +letting it handle the invocation.

+
+
+

18.1. Potential shortcomings of a single EJB client context

+
+

In the Overview section we briefly looked at the different types of +remote clients. Let’s focus on the standalone remote clients (the ones +that don’t run within another WildFly 29 instance) for some of the next +sections. Like mentioned earlier, typically a remote standalone client +has just one EJB client context backed by any number of EJB receivers. +Consider this example:

+
+
+
+
public class MyApplication {
+ 
+    public static void main(String args[]) {
+ 
+        final javax.naming.Context ctxOne = new javax.naming.InitialContext();
+        final MyBeanInterface beanOne = ctxOne.lookup("ejb:app/module/distinct/bean!interface");
+        beanOne.doSomething();
+        ...
+    }
+}
+
+
+
+

Now, we have seen in this other chapter +EJB +invocations from a remote client using JNDI that the JNDI lookups are +(typically) backed by jboss-ejb-client.properties file which is used to +setup the EJB client context and the EJB receivers. Let’s assume we have +a jboss-ejb-client.properties with the relevant receivers +configurations. These configurations include the security credentials +that will be used to create an EJB receiver which connects to the AS7 +server. Now when the above code is invoked, the EJB client API looks for +the EJB client context to pick an EJB receiver, to pass on the EJB +invocation request. Since we just have a single EJB client context, that +context is used by the above code to invoke the bean.

+
+
+

Now let’s consider a case where the user application wants to invoke on +the bean more than once, but wants to connect to the WildFly 29 server +using different security credentials. Let’s take a look at the following +code:

+
+
+
+
public class MyApplication {
+ 
+    public static void main(String args[]) {
+ 
+        // let's say we want to use "foo" security credential while connecting to the AS7 server for invoking on this bean instance
+        final javax.naming.Context ctxOne = new javax.naming.InitialContext();
+        final MyBeanInterface beanOne = ctxOne.lookup("ejb:app/module/distinct/bean!interface");
+        beanOne.doSomething();
+        ...
+ 
+        // let's say we want to use "bar" security credential while connecting to the AS7 server for invoking on this bean instance
+        final javax.naming.Context ctxTwo = new javax.naming.InitialContext();
+        final MyBeanInterface beanTwo = ctxTwo.lookup("ejb:app/module/distinct/bean!interface");
+        beanTwo.doSomething();
+        ...
+ 
+    }
+}
+
+
+
+

So we have the same application, which wants to connect to the same +server instance for invoking the EJB(s) hosted on that server, but wants +to use two different credentials while connecting to the server. +Remember, the client application has a single EJB client context which +can have atmost 1 EJB receiver for each server instance. Which +effectively means that the above code will end up using just one +credential to connect to the server. So there was no easy way to have +the above code working.

+
+
+

That was one of the use cases which prompted the +https://issues.redhat.com/browse/EJBCLIENT-34 feature request. The +proposal was to introduce a way, where you can have more control over +the EJB client contexts and their association with JNDI contexts which +are typically used for EJB invocations.

+
+
+
+

18.2. Scoped EJB client contexts

+
+

Developers familiar with earlier versions of JBoss AS would remember +that for invoking an EJB, you would typically create a JNDI context +passing it the PROVIDER_URL which would point to the target server. That +way any invocation is done on EJB proxies looked up using that JNDI +context, would end up on that server. If we look back at the example +above, we’ll realize that, we are ultimately aiming for a similar +functionality through https://issues.redhat.com/browse/EJBCLIENT-34. We +want the user applications to have more control over which EJB receiver +gets used for a specific invocation.

+
+
+

Before we introduced https://issues.redhat.com/browse/EJBCLIENT-34 +feature, the EJB client context was typically scoped to the client +application. As part of https://issues.redhat.com/browse/EJBCLIENT-34 we +now allow the EJB client contexts to be scoped with the JNDI contexts. +Consider the following example:

+
+
+
+
public class MyApplication {
+ 
+    public static void main(String args[]) {
+ 
+        // let's say we want to use "foo" security credential while connecting to the AS7 server for invoking on this bean instance
+        final Properties ejbClientContextPropsOne = getPropsForEJBClientContextOne():
+        final javax.naming.Context ctxOne = new javax.naming.InitialContext(ejbClientContextPropsOne);
+        final MyBeanInterface beanOne = ctxOne.lookup("ejb:app/module/distinct/bean!interface");
+        beanOne.doSomething();
+        ...
+        closeContext(ctxOne); // read on the entire article to understand more about closing scoped EJB client contexts
+ 
+        // let's say we want to use "bar" security credential while connecting to the AS7 server for invoking on this bean instance
+        final Properties ejbClientContextPropsTwo = getPropsForEJBClientContextTwo():
+        final javax.naming.Context ctxTwo = new javax.naming.InitialContext(ejbClientContextPropsTwo);
+        final MyBeanInterface beanTwo = ctxTwo.lookup("ejb:app/module/distinct/bean!interface");
+        beanTwo.doSomething();
+        ...
+        closeContext(ctxTwo); // read on the entire article to understand more about closing scoped EJB client contexts
+    }
+}
+
+
+
+

Notice any difference between this code and the earlier one? We now +create and pass EJB client context specific properties to the JNDI +context. So what do the EJB client context properties look like? The +properties are the same that you would pass through the +jboss-ejb-client.properties file, except for one additional property +which is required to scope the EJB client context to the JNDI context. +The name of the property is:

+
+
+

org.jboss.ejb.client.scoped.context

+
+
+

which is expected to have a value true. This property lets the EJB +client API know that it has to created an EJB client context (backed by +EJB receiver(s)) and that created context is then scoped/visible to only +that JNDI context which created it. Lookup and invocation on any EJB +proxies looked up using this JNDI context will only know of the EJB +client context associated with this JNDI context. This effectively means +that the other JNDI contexts which the application uses to lookup and +invoke on EJBs will not know about the other scoped EJB client +contexts at all.

+
+
+

JNDI contexts which aren’t scoped to a EJB client context (for example, +not passing the org.jboss.ejb.client.scoped.context property) will +fallback to the default behaviour of using the "current" EJB client +context which typically is the one tied to the entire application.

+
+
+

This scoping of the EJB client context helps the user applications to +have more control over which JNDI context "talks to" which server and +connects to that server in "what way". This gives the user applications +the flexibility that was associated with the JNP based JNDI invocations +prior to WildFly 29 versions.

+
+
+ + + + + +
+ + +IMPORTANT: It is very important to remember that scoped EJB client +contexts which are scoped to the JNDI contexts are NOT fire and forget +kind of contexts. What that means is the application program which is +using these contexts is solely responsible for managing their lifecycle +and the application itself is responsible for closing the context at the +right moment. After closing the context the proxies which are bound to +this context are no longer valid and any invocation will throw an +Exception. Not closing the context will end in resource problems as the +underlying physical connection will stay open. +
+
+
+

Read the rest of the sections in this article to understand more about +the lifecycle management of such scoped contexts.

+
+
+
+

18.3. Lifecycle management of scoped EJB client contexts

+
+

Like you saw in the previous sections, in case of scoped EJB client +contexts, the EJB client context is tied to the JNDI context. It’s very +important to understand how the lifecycle of the EJB client context +works in such cases. Especially since any EJB client context is almost +always backed by connections to the server. Not managing the EJB client +context lifecycle correctly can lead to connection leaks in some cases.

+
+
+

When you create a scoped EJB client context, the EJB client context +connects to the server(s) listed in the JNDI properties. An internal +implementation detail of this logic includes the ability of the EJB +client context to cache connections based on certain internal algorithm +it uses. The algorithm itself isn’t publicly documented (yet) since the +chances of it changing or even removal shouldn’t really affect the +client application and instead it’s supposed to be transparent to the +client application.

+
+
+

The connections thus created for an EJB client context are kept open as +long as the EJB client context is open. This allows the EJB client +context to be usable for EJB invocations. The connections associated +with the EJB client context are closed when the EJB client context +itself is closed.

+
+
+ + + + + +
+ + +The connections that were manually added by the application to the EJB +client context are not managed by the EJB client context. i.e. they +won’t be opened (obviously) nor closed by the EJB client API when the +EJB client context is closed. +
+
+
+

18.3.1. How to close EJB client contexts?

+
+

The answer to that is simple. Use the close() method on the appropriate +EJB client context.

+
+
+
+

18.3.2. How to close scoped EJB client contexts?

+
+

The answer is the same, use the close() method on the EJB client +context. But the real question is how do you get the relevant scoped EJB +client context which is associated with a JNDI context. Before we get to +that, it’s important to understand how the ejb: JNDI namespace that’s +used for EJB lookups and how the JNDI context (typically the +InitialContext that you see in the client code) are related. The JNDI +API provided by Java language allows "URL context factory" to be +registered in the JNDI framework (see this for details +http://docs.oracle.com/javase/jndi/tutorial/provider/url/factory.html). +Like that documentation states, the URL context factory can be used to +resolve URL strings during JNDI lookup. That’s what the ejb: prefix is +when you do a remote EJB lookup. The ejb: URL string is backed by a URL +context factory.

+
+
+

Internally, when a lookup happens for a ejb: URL string, a relevant +javax.naming.Context is created for that ejb: lookup. Let’s see some +code for better understanding:

+
+
+
+
// JNDI context "A"
+Context jndiCtx = new InitialContext(props);
+// Now let's lookup a EJB
+MyBean bean = jndiCtx.lookup("ejb:app/module/distinct/bean!interface");
+
+
+
+

So we first create a JNDI context and then use it to lookup an EJB. The +bean lookup using the ejb: JNDI name, although, is just one statement, +involves a few more things under the hood. What’s actually happening +when you lookup that string is that a separate javax.naming.Context gets +created for the ejb: URL string. This new javax.naming.Context is then +used to lookup the rest of the string in that JNDI name.

+
+
+

Let’s break up that one line into multiple statements to understand +better:

+
+
+
+
// Remember, the ejb: is backed by a URL context factory which returns a Context for the ejb: URL (that's why it's called a context factory)
+final Context ejbNamingContext = (Context) jndiCtx.lookup("ejb:");
+// Use the returned EJB naming context to lookup the rest of the JNDI string for EJB
+final MyBean bean = ejbNamingContext.lookup("app/module/distinct/bean!interface");
+
+
+
+

As you see above, we split up that single statement into a couple of +statements for explaining the details better. So as you can see when the +ejb: URL string is parsed in a JNDI name, it gets hold of a +javax.naming.Context instance. This instance is different from the one +which was used to do the lookup (jndiCtx in this example). This is an +important detail to understand (for reasons explained later). Now this +returned instance is used to lookup the rest of the JNDI string +("app/module/distinct/bean!interface"), which then returns the EJB +proxy. Irrespective of whether the lookup is done in a single statement +or multiple parts, the code works the same. i.e. an instance of +javax.naming.Context gets created for the ejb: URL string.

+
+
+

So why am I explaining all this when the section is titled +"How to close scoped EJB client contexts"? The reason is because +client applications dealing with scoped EJB client contexts which are +associated with a JNDI context would expect the following code to close +the associated EJB client context, but will be surprised that it won’t:

+
+
+
+
final Properties props = new Properties();
+// mark it for scoped EJB client context
+props.put("org.jboss.ejb.client.scoped.context","true");
+// add other properties
+props.put(....);
+...
+Context jndiCtx = new InitialContext(props);
+try {
+      final MyBean bean = jndiCtx.lookup("ejb:app/module/distinct/bean!interface");
+      bean.doSomething();
+} finally {
+  jndiCtx.close();
+}
+
+
+
+

Applications expect that the call to jndiCtx.close() will effectively +close the EJB client context associated with the JNDI context. That +doesn’t happen because as explained previously, the javax.naming.Context +backing the ejb: URL string is a different instance than the one the +code is closing. The JNDI implementation in Java, only just closes the +context on which the close was called. As a result, the other +javax.naming.Context that backs the ejb: URL string is still not closed, +which effectively means that the scoped EJB client context is not closed +too which then ultimately means that the connection to the server(s) in +the EJB client context are not closed too.

+
+
+

So now let’s see how this can be done properly. We know that the ejb: +URL string lookup returns us a javax.naming.Context. All we have to do +is keep a reference to this instance and close it when we are done with +the EJB invocations. So here’s how it’s going to look:

+
+
+
+
final Properties props = new Properties();
+// mark it for scoped EJB client context
+props.put("org.jboss.ejb.client.scoped.context","true");
+// add other properties
+props.put(....);
+...
+Context jndiCtx = new InitialContext(props);
+Context ejbRootNamingContext = (Context) jndiCtx.lookup("ejb:");
+try {
+    final MyBean bean = ejbRootNamingContext.lookup("app/module/distinct/bean!interface"); // the rest of the EJB jndi string
+    bean.doSomething();
+} finally {
+    try {
+        // close the EJB naming JNDI context
+        ejbRootNamingContext.close();
+    } catch (Throwable t) {
+        // log and ignore
+    }
+    try {
+        // also close our other JNDI context since we are done with it too
+        jndiCtx.close();
+    } catch (Throwable t) {
+        // log and ignore
+    }
+ 
+}
+
+
+
+

As you see, we changed the code to first do a lookup on just the "ejb:" +string to get hold of the EJB naming context and then used that +ejbRootNamingContext instance to lookup the rest of the EJB JNDI name to +get hold of the EJB proxy. Then when it was time to close the context, +we closed the ejbRootNamingContext (as well as the other JNDI context). +Closing the ejbRootNamingContext ensures that the scoped EJB client +context associated with that JNDI context is closed too. Effectively, +this closes the connection(s) to the server(s) within that EJB client +context.

+
+
+
Can that code be simplified a bit?
+
+

If you are using that JNDI context only for EJB invocations, then yes +you can get rid of some instances and code from the above code. You can +change that code to:

+
+
+
+
final Properties props = new Properties();
+// mark it for scoped EJB client context
+props.put("org.jboss.ejb.client.scoped.context","true");
+// add other properties
+props.put(....);
+...
+Context ejbRootNamingContext = (Context) new InitialContext(props).lookup("ejb:");
+try {
+    final MyBean bean = ejbRootNamingContext.lookup("app/module/distinct/bean!interface"); // the rest of the EJB jndi string
+    bean.doSomething();
+} finally {
+    try {
+        // close the EJB naming JNDI context
+        ejbRootNamingContext.close();
+    } catch (Throwable t) {
+        // log and ignore
+    }
+}
+
+
+
+

Notice that we no longer hold a reference to 2 JNDI contexts and instead +just keep track of the ejbRootNamingContext which is actually the root +JNDI context for our "ejb:" URL string. Of course, this means that you +can only use this context for EJB lookups or any other EJB related JNDI +lookups. So it depends on your application and how it’s coded.

+
+
+
+
+

18.3.3. Can’t the scoped EJB client context be automatically closed by the

+
+

EJB client API when the JNDI context is no longer in scope (i.e. on GC)?

+
+
+

That’s one of the common questions that gets asked. No, the EJB client +API can’t take that decision. i.e. it cannot automatically go ahead and +close the scoped EJB client context by itself when the associated JNDI +context is eligible for GC. The reason is simple as illustrated by the +following code:

+
+
+
+
void doEJBInvocation() {
+    final MyBean bean = lookupEJB();
+    bean.doSomething();
+    bean.doSomeOtherThing();
+    ... // do some other work
+    bean.keepDoingSomething();
+}
+ 
+MyBean lookupEJB() {
+    final Properties props = new Properties();
+    // mark it for scoped EJB client context
+    props.put("org.jboss.ejb.client.scoped.context","true");
+    // add other properties
+    props.put(....);
+    ...
+    Context ejbRootNamingContext = (Context) new InitialContext(props).lookup("ejb:");
+    final MyBean bean = ejbRootNamingContext.lookup("app/module/distinct/bean!interface"); // rest of the EJB jndi string
+    return bean;
+}
+
+
+
+

As you can see, the doEJBInvocation() method first calls a lookupEJB() +method which does a lookup of the bean using a JNDI context and then +returns the bean (proxy). The doEJBInvocation() then uses that returned +proxy and keeps doing the invocations on the bean. As you might have +noticed, the JNDI context that was used for lookup (i.e. the +ejbRootNamingContext) is eligible for GC. If the EJB client API had +closed the scoped EJB client context associated with that JNDI context, +when that JNDI context was garbage collected, then the subsequent EJB +invocations on the returned EJB (proxy) would start failing in +doEJBInvocation() since the EJB client context is no longer available.

+
+
+

That’s the reason why the EJB client API doesn’t automatically close the +EJB client context.

+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+
+

19. EJB invocations from a remote client using JNDI

+
+
+

This chapter explains how to invoke EJBs from a remote client by using +the JNDI API to first lookup the bean proxy and then invoke on that +proxy.

+
+
+ + + + + +
+ + +After you have read this article, do remember to take a look at +Remote +EJB invocations via JNDI - EJB client API or remote-naming project +
+
+
+

Before getting into the details, we would like the users to know that we +have introduced a new EJB client API, which is a WildFly-specific API +and allows invocation on remote EJBs. This client API isn’t based on +JNDI. So remote clients need not rely on JNDI API to invoke on EJBs. A +separate document covering the EJB remote client API will be made +available. For now, you can refer to the javadocs of the EJB client +project at http://docs.jboss.org/ejbclient/. In this document, we’ll +just concentrate on the traditional JNDI based invocation on EJBs. So +let’s get started:

+
+
+

19.1. Deploying your EJBs on the server side:

+
+ + + + + +
+ + +Users who already have EJBs deployed on the server side can just skip to +the next section. +
+
+
+

As a first step, you’ll have to deploy your application containing the +EJBs on the WildFly server. If you want those EJBs to be remotely +invocable, then you’ll have to expose at least one remote view for that +bean. In this example, let’s consider a simple Calculator stateless bean +which exposes a RemoteCalculator remote business interface. We’ll also +have a simple stateful CounterBean which exposes a RemoteCounter remote +business interface. Here’s the code:

+
+
+
+
package org.jboss.as.quickstarts.ejb.remote.stateless;
+ 
+/**
+ * @author Jaikiran Pai
+ */
+public interface RemoteCalculator {
+ 
+    int add(int a, int b);
+ 
+    int subtract(int a, int b);
+}
+
+
+
+
+
package org.jboss.as.quickstarts.ejb.remote.stateless;
+ 
+import jakarta.ejb.Remote;
+import jakarta.ejb.Stateless;
+ 
+/**
+ * @author Jaikiran Pai
+ */
+@Stateless
+@Remote(RemoteCalculator.class)
+public class CalculatorBean implements RemoteCalculator {
+ 
+    @Override
+    public int add(int a, int b) {
+        return a + b;
+    }
+ 
+    @Override
+    public int subtract(int a, int b) {
+        return a - b;
+    }
+}
+
+
+
+
+
package org.jboss.as.quickstarts.ejb.remote.stateful;
+ 
+/**
+ * @author Jaikiran Pai
+ */
+public interface RemoteCounter {
+ 
+    void increment();
+ 
+    void decrement();
+ 
+    int getCount();
+}
+
+
+
+
+
package org.jboss.as.quickstarts.ejb.remote.stateful;
+ 
+import jakarta.ejb.Remote;
+import jakarta.ejb.Stateful;
+ 
+/**
+ * @author Jaikiran Pai
+ */
+@Stateful
+@Remote(RemoteCounter.class)
+public class CounterBean implements RemoteCounter {
+ 
+    private int count = 0;
+ 
+    @Override
+    public void increment() {
+        this.count++;
+    }
+ 
+    @Override
+    public void decrement() {
+        this.count--;
+    }
+ 
+    @Override
+    public int getCount() {
+        return this.count;
+    }
+}
+
+
+
+

Let’s package this in a jar (how you package it in a jar is out of scope +of this chapter) named "jboss-as-ejb-remote-app.jar" and deploy it to +the server. Make sure that your deployment has been processed +successfully and there aren’t any errors.

+
+
+
+

19.2. Writing a remote client application for accessing and invoking the

+
+

EJBs deployed on the server

+
+
+

The next step is to write an application which will invoke the EJBs that +you deployed on the server. In WildFly, you can either choose to use the +WildFly specific EJB client API to do the invocation or use JNDI to +lookup a proxy for your bean and invoke on that returned proxy. In this +chapter we will concentrate on the JNDI lookup and invocation and will +leave the EJB client API for a separate chapter.

+
+
+

So let’s take a look at what the client code looks like for looking up +the JNDI proxy and invoking on it. Here’s the entire client code which +invokes on a stateless bean:

+
+
+
+
package org.jboss.as.quickstarts.ejb.remote.client;
+ 
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.security.Security;
+import java.util.Hashtable;
+ 
+import org.jboss.as.quickstarts.ejb.remote.stateful.CounterBean;
+import org.jboss.as.quickstarts.ejb.remote.stateful.RemoteCounter;
+import org.jboss.as.quickstarts.ejb.remote.stateless.CalculatorBean;
+import org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator;
+import org.jboss.sasl.JBossSaslProvider;
+ 
+/**
+ * A sample program which acts a remote client for a EJB deployed on WildFly 10 server.
+ * This program shows how to lookup stateful and stateless beans via JNDI and then invoke on them
+ *
+ * @author Jaikiran Pai
+ */
+public class RemoteEJBClient {
+ 
+    public static void main(String[] args) throws Exception {
+        // Invoke a stateless bean
+        invokeStatelessBean();
+ 
+        // Invoke a stateful bean
+        invokeStatefulBean();
+    }
+ 
+    /**
+     * Looks up a stateless bean and invokes on it
+     *
+     * @throws NamingException
+     */
+    private static void invokeStatelessBean() throws NamingException {
+        // Let's lookup the remote stateless calculator
+        final RemoteCalculator statelessRemoteCalculator = lookupRemoteStatelessCalculator();
+        System.out.println("Obtained a remote stateless calculator for invocation");
+        // invoke on the remote calculator
+        int a = 204;
+        int b = 340;
+        System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server");
+        int sum = statelessRemoteCalculator.add(a, b);
+        System.out.println("Remote calculator returned sum = " + sum);
+        if (sum != a + b) {
+            throw new RuntimeException("Remote stateless calculator returned an incorrect sum " + sum + " ,expected sum was " + (a + b));
+        }
+        // try one more invocation, this time for subtraction
+        int num1 = 3434;
+        int num2 = 2332;
+        System.out.println("Subtracting " + num2 + " from " + num1 + " via the remote stateless calculator deployed on the server");
+        int difference = statelessRemoteCalculator.subtract(num1, num2);
+        System.out.println("Remote calculator returned difference = " + difference);
+        if (difference != num1 - num2) {
+            throw new RuntimeException("Remote stateless calculator returned an incorrect difference " + difference + " ,expected difference was " + (num1 - num2));
+        }
+    }
+ 
+    /**
+     * Looks up a stateful bean and invokes on it
+     *
+     * @throws NamingException
+     */
+    private static void invokeStatefulBean() throws NamingException {
+        // Let's lookup the remote stateful counter
+        final RemoteCounter statefulRemoteCounter = lookupRemoteStatefulCounter();
+        System.out.println("Obtained a remote stateful counter for invocation");
+        // invoke on the remote counter bean
+        final int NUM_TIMES = 20;
+        System.out.println("Counter will now be incremented " + NUM_TIMES + " times");
+        for (int i = 0; i < NUM_TIMES; i++) {
+            System.out.println("Incrementing counter");
+            statefulRemoteCounter.increment();
+            System.out.println("Count after increment is " + statefulRemoteCounter.getCount());
+        }
+        // now decrementing
+        System.out.println("Counter will now be decremented " + NUM_TIMES + " times");
+        for (int i = NUM_TIMES; i > 0; i--) {
+            System.out.println("Decrementing counter");
+            statefulRemoteCounter.decrement();
+            System.out.println("Count after decrement is " + statefulRemoteCounter.getCount());
+        }
+    }
+ 
+    /**
+     * Looks up and returns the proxy to remote stateless calculator bean
+     *
+     * @return
+     * @throws NamingException
+     */
+    private static RemoteCalculator lookupRemoteStatelessCalculator() throws NamingException {
+        final Hashtable jndiProperties = new Hashtable();
+        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
+        final Context context = new InitialContext(jndiProperties);
+        // The app name is the application name of the deployed EJBs. This is typically the ear name
+        // without the .ear suffix. However, the application name could be overridden in the application.xml of the
+        // EJB deployment on the server.
+        // Since we haven't deployed the application as a .ear, the app name for us will be an empty string
+        final String appName = "";
+        // This is the module name of the deployed EJBs on the server. This is typically the jar name of the
+        // EJB deployment, without the .jar suffix, but can be overridden via the ejb-jar.xml
+        // In this example, we have deployed the EJBs in a jboss-as-ejb-remote-app.jar, so the module name is
+        // jboss-as-ejb-remote-app
+        final String moduleName = "jboss-as-ejb-remote-app";
+        // AS7 allows each deployment to have an (optional) distinct name. We haven't specified a distinct name for
+        // our EJB deployment, so this is an empty string
+        final String distinctName = "";
+        // The EJB name which by default is the simple class name of the bean implementation class
+        final String beanName = CalculatorBean.class.getSimpleName();
+        // the remote view fully qualified class name
+        final String viewClassName = RemoteCalculator.class.getName();
+        // let's do the lookup
+        return (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
+    }
+ 
+    /**
+     * Looks up and returns the proxy to remote stateful counter bean
+     *
+     * @return
+     * @throws NamingException
+     */
+    private static RemoteCounter lookupRemoteStatefulCounter() throws NamingException {
+        final Hashtable jndiProperties = new Hashtable();
+        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
+        final Context context = new InitialContext(jndiProperties);
+        // The app name is the application name of the deployed EJBs. This is typically the ear name
+        // without the .ear suffix. However, the application name could be overridden in the application.xml of the
+        // EJB deployment on the server.
+        // Since we haven't deployed the application as a .ear, the app name for us will be an empty string
+        final String appName = "";
+        // This is the module name of the deployed EJBs on the server. This is typically the jar name of the
+        // EJB deployment, without the .jar suffix, but can be overridden via the ejb-jar.xml
+        // In this example, we have deployed the EJBs in a jboss-as-ejb-remote-app.jar, so the module name is
+        // jboss-as-ejb-remote-app
+        final String moduleName = "jboss-as-ejb-remote-app";
+        // AS7 allows each deployment to have an (optional) distinct name. We haven't specified a distinct name for
+        // our EJB deployment, so this is an empty string
+        final String distinctName = "";
+        // The EJB name which by default is the simple class name of the bean implementation class
+        final String beanName = CounterBean.class.getSimpleName();
+        // the remote view fully qualified class name
+        final String viewClassName = RemoteCounter.class.getName();
+        // let's do the lookup (notice the ?stateful string as the last part of the jndi name for stateful bean lookup)
+        return (RemoteCounter) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful");
+    }
+}
+
+
+
+ + + + + +
+ + +The entire server side and client side code is hosted at the github repo +here +ejb-remote +
+
+
+

The code has some comments which will help you understand each of those +lines. But we’ll explain here in more detail what the code does. As a +first step in the client code, we’ll do a lookup of the EJB using a JNDI +name. In AS7, for remote access to EJBs, you use the ejb: namespace with +the following syntax:

+
+
+

For stateless beans:

+
+
+
+
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
+
+
+
+

For stateful beans:

+
+
+
+
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
+
+
+
+

The ejb: namespace identifies it as a EJB lookup and is a constant (i.e. +doesn’t change) for doing EJB lookups. The rest of the parts in the jndi +name are as follows:

+
+
+

app-name : This is the name of the .ear (without the .ear suffix) that +you have deployed on the server and contains your EJBs.

+
+
+
    +
  • +

    Jakarta EE allows you to override the application name, to a name of +your choice by setting it in the application.xml. If the deployment uses +uses such an override then the app-name used in the JNDI name should +match that name.

    +
  • +
  • +

    EJBs can also be deployed in a .war or a plain .jar (like we did in +step 1). In such cases where the deployment isn’t an .ear file, then the +app-name must be an empty string, while doing the lookup.

    +
  • +
+
+
+

module-name : This is the name of the .jar (without the .jar suffix) +that you have deployed on the server and the contains your EJBs. If the +EJBs are deployed in a .war then the module name is the .war name +(without the .war suffix).

+
+
+
    +
  • +

    Jakarta EE allows you to override the module name, by setting it in the +ejb-jar.xml/web.xml of your deployment. If the deployment uses such an +override then the module-name used in the JNDI name should match that +name.

    +
  • +
  • +

    Module name part cannot be an empty string in the JNDI name

    +
  • +
+
+
+

distinct-name : This is a WildFly-specific name which can be +optionally assigned to the deployments that are deployed on the server. +More about the purpose and usage of this will be explained in a separate +chapter. If a deployment doesn’t use distinct-name then, use an empty +string in the JNDI name, for distinct-name

+
+
+

bean-name : This is the name of the bean for which you are doing the +lookup. The bean name is typically the unqualified classname of the bean +implementation class, but can be overriden through either ejb-jar.xml or +via annotations. The bean name part cannot be an empty string in the +JNDI name.

+
+
+

fully-qualified-classname-of-the-remote-interface : This is the fully +qualified class name of the interface for which you are doing the +lookup. The interface should be one of the remote interfaces exposed by +the bean on the server. The fully qualified class name part cannot be an +empty string in the JNDI name.

+
+
+

For stateful beans, the JNDI name expects an additional "?stateful" to +be appended after the fully qualified interface name part. This is +because for stateful beans, a new session gets created on JNDI lookup +and the EJB client API implementation doesn’t contact the server during +the JNDI lookup to know what kind of a bean the JNDI name represents +(we’ll come to this in a while). So the JNDI name itself is expected to +indicate that the client is looking up a stateful bean, so that an +appropriate session can be created.

+
+
+

Now that we know the syntax, let’s see our code and check what JNDI name +it uses. Since our stateless EJB named CalculatorBean is deployed in a +jboss-as-ejb-remote-app.jar (without any ear) and since we are looking +up the org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator +remote interface, our JNDI name will be:

+
+
+
+
ejb:/jboss-as-ejb-remote-app//CalculatorBean!org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator
+
+
+
+

That’s what the lookupRemoteStatelessCalculator() method in the above +client code uses.

+
+
+

For the stateful EJB named CounterBean which is deployed in hte same +jboss-as-ejb-remote-app.jar and which exposes the +org.jboss.as.quickstarts.ejb.remote.stateful.RemoteCounter, the JNDI +name will be:

+
+
+
+
ejb:/jboss-as-ejb-remote-app//CounterBean!org.jboss.as.quickstarts.ejb.remote.stateful.RemoteCounter?stateful
+
+
+
+

That’s what the lookupRemoteStatefulCounter() method in the above client +code uses.

+
+
+

Now that we know of the JNDI name, let’s take a look at the following +piece of code in the lookupRemoteStatelessCalculator():

+
+
+
+
final Hashtable jndiProperties = new Hashtable();
+jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
+final Context context = new InitialContext(jndiProperties);
+
+
+
+

Here we are creating a JNDI InitialContext object by passing it some +JNDI properties. The Context.URL_PKG_PREFIXES is set to +org.jboss.ejb.client.naming. This is necessary because we should let the +JNDI API know what handles the ejb: namespace that we use in our JNDI +names for lookup. The "org.jboss.ejb.client.naming" has a +URLContextFactory implementation which will be used by the JNDI APIs to +parse and return an object for ejb: namespace lookups. You can either +pass these properties to the constructor of the InitialContext class or +have a jndi.properites file in the classpath of the client application, +which (atleast) contains the following property:

+
+
+
+
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming
+
+
+
+

So at this point, we have setup the InitialContext and also have the +JNDI name ready to do the lookup. You can now do the lookup and the +appropriate proxy which will be castable to the remote interface that +you used as the fully qualified class name in the JNDI name, will be +returned. Some of you might be wondering, how the JNDI implementation +knew which server address to look, for your deployed EJBs. The answer is +in AS7, the proxies returned via JNDI name lookup for ejb: namespace do +not connect to the server unless an invocation on those proxies is done.

+
+
+

Now let’s get to the point where we invoke on this returned proxy:

+
+
+
+
// Let's lookup the remote stateless calculator
+        final RemoteCalculator statelessRemoteCalculator = lookupRemoteStatelessCalculator();
+        System.out.println("Obtained a remote stateless calculator for invocation");
+        // invoke on the remote calculator
+        int a = 204;
+        int b = 340;
+        System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server");
+        int sum = statelessRemoteCalculator.add(a, b);
+
+
+
+

We can see here that the proxy returned after the lookup is used to +invoke the add(…​) method of the bean. It’s at this point that the JNDI +implementation (which is backed by the EJB client API) needs to know the +server details. So let’s now get to the important part of setting up the +EJB client context properties.

+
+
+
+

19.3. Setting up EJB client context properties

+
+

A EJB client context is a context which contains contextual information +for carrying out remote invocations on EJBs. This is a WildFly-specific +API. The EJB client context can be associated with multiple EJB +receivers. Each EJB receiver is capable of handling invocations on +different EJBs. For example, an EJB receiver "Foo" might be able to +handle invocation on a bean identified by +app-A/module-A/distinctinctName-A/Bar!RemoteBar, whereas a EJB receiver +named "Blah" might be able to handle invocation on a bean identified by +app-B/module-B/distinctName-B/BeanB!RemoteBean. Each such EJB receiver +knows about what set of EJBs it can handle and each of the EJB receiver +knows which server target to use for handling the invocations on the +bean. For example, if you have a AS7 server at 10.20.30.40 IP address +which has its remoting port opened at 4447 and if that’s the server on +which you deployed that CalculatorBean, then you can setup a EJB +receiver which knows its target address is 10.20.30.40:4447. Such an EJB +receiver will be capable enough to communicate to the server via the +JBoss specific EJB remote client protocol (details of which will be +explained in-depth in a separate chapter).

+
+
+

Now that we know what a EJB client context is and what a EJB receiver +is, let’s see how we can setup a client context with 1 EJB receiver +which can connect to 10.20.30.40 IP address at port 4447. That EJB +client context will then be used (internally) by the JNDI implementation +to handle invocations on the bean proxy.

+
+
+

The client will have to place a jboss-ejb-client.properties file in the +classpath of the application. The jboss-ejb-client.properties can +contain the following properties:

+
+
+
+
endpoint.name=client-endpoint
+remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
+ 
+remote.connections=default
+ 
+remote.connection.default.host=10.20.30.40
+remote.connection.default.port = 8080
+remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
+ 
+remote.connection.default.username=appuser
+remote.connection.default.password=apppassword
+
+
+
+ + + + + +
+ + +This file includes a reference to a default password. Be sure to change +this as soon as possible. +
+
+
+ + + + + +
+ + +We’ll see what each of it means. +
+
+
+

First the endpoint.name property. We mentioned earlier that the EJB +receivers will communicate with the server for EJB invocations. +Internally, they use JBoss Remoting project to carry out the +communication. The endpoint.name property represents the name that will +be used to create the client side of the enpdoint. The endpoint.name +property is optional and if not specified in the +jboss-ejb-client.properties file, it will default to +"config-based-ejb-client-endpoint" name.

+
+
+

Next is the remote.connectionprovider.create.options.<…​.> properties:

+
+
+
+
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
+
+
+
+

The "remote.connectionprovider.create.options." property prefix can be +used to pass the options that will be used while create the connection +provider which will handle the "remote:" protocol. In this example we +use the "remote.connectionprovider.create.options." property prefix to +pass the "org.xnio.Options.SSL_ENABLED" property value as false. That +property will then be used during the connection provider creation. +Similarly other properties can be passed too, just append it to the +"remote.connectionprovider.create.options." prefix

+
+
+

Next we’ll see:

+
+
+
+
remote.connections=default
+
+
+
+

This is where you define the connections that you want to setup for +communication with the remote server. The "remote.connections" property +uses a comma separated value of connection "names". The connection names +are just logical and are used grouping together the connection +configuration properties later on in the properties file. The example +above sets up a single remote connection named "default". There can be +more than one connections that are configured. For example:

+
+
+
+
remote.connections=one, two
+
+
+
+

Here we are listing 2 connections named "one" and "two". Ultimately, +each of the connections will map to a EJB receiver. So if you have 2 +connections, that will setup 2 EJB receivers that will be added to the +EJB client context. Each of these connections will be configured with +the connection specific properties as follows:

+
+
+
+
remote.connection.default.host=10.20.30.40
+remote.connection.default.port = 8080
+remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
+
+
+
+

As you can see we are using the "remote.connection.<connection-name>." +prefix for specifying the connection specific property. The connection +name here is "default" and we are setting the "host" property of that +connection to point to 10.20.30.40. Similarly we set the "port" for that +connection to 4447.

+
+
+

By default WildFly uses 8080 as the remoting port. The EJB client API +uses the http port, with the http-upgrade functionality, for +communicating with the server for remote invocations, so that’s the port +we use in our client programs (unless the server is configured for some +other http port)

+
+
+
+
remote.connection.default.username=appuser
+remote.connection.default.password=apppassword
+
+
+
+

The given user/password must be set by using the command bin/add-user.sh +(or.bat).
+The user and password must be set because the security-realm is enabled +for the subsystem remoting (see standalone*.xml or domain.xml) by +default.
+If you do not need the security for remoting you might remove the +attribute security-realm in the configuration.

+
+
+

security-realm is enabled by default.

+
+
+ + + + + +
+ + +We then use the "remote.connection.<connection-name>.connect.options." +property prefix to setup options that will be used during the connection +creation. +
+
+
+

Here’s an example of setting up multiple connections with different +properties for each of those:

+
+
+
+
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
+ 
+remote.connections=one, two
+ 
+remote.connection.one.host=localhost
+remote.connection.one.port=6999
+remote.connection.one.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
+ 
+remote.connection.two.host=localhost
+remote.connection.two.port=7999
+remote.connection.two.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
+
+
+
+

As you can see we setup 2 connections "one" and "two" which both point +to "localhost" as the "host" but different ports. Each of these +connections will internally be used to create the EJB receivers in the +EJB client context.

+
+
+

So that’s how the jboss-ejb-client.properties file can be setup and +placed in the classpath.

+
+
+
+
+

The EJB client code will by default look for jboss-ejb-client.properties +in the classpath. However, you can specify a different file of your +choice by setting the "jboss.ejb.client.properties.file.path" system +property which points to a properties file on your filesystem, +containing the client context configurations. An example for that would +be +"-Djboss.ejb.client.properties.file.path=/home/me/my-client/custom-jboss-ejb-client.properties"

+
+
+
+
+

A jboss-client jar is shipped in the distribution. It’s available at +WILDFLY_HOME/bin/client/jboss-client.jar. Place this jar in the +classpath of your client application.

+
+
+

If you are using Maven to build the client application, then please +follow the instructions in the WILDFLY_HOME/bin/client/README.txt to add +this jar as a Maven dependency.

+
+
+
+

Summary

+
+

In the above examples, we saw what it takes to invoke a EJB from a +remote client. To summarize:

+
+
+
    +
  • +

    On the server side you need to deploy EJBs which expose the remote +views.

    +
  • +
  • +

    On the client side you need a client program which:

    +
    +
      +
    • +

      Has a jboss-ejb-client.properties in its classpath to setup the +server connection information

      +
    • +
    • +

      Either has a jndi.properties to specify the +java.naming.factory.url.pkgs property or passes that as a property to +the InitialContext constructor

      +
    • +
    • +

      Setup the client classpath to include the jboss-client jar that’s +required for remote invocation of the EJBs. The location of the jar is +mentioned above. You’ll also need to have your application’s bean +interface jars and other jars that are required by your application, in +the client classpath

      +
    • +
    +
    +
  • +
+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+

20. EJB invocations from a remote server instance

+
+
+

The purpose of this chapter is to demonstrate how to lookup and invoke +on EJBs deployed on an WildFly server instance from another WildFly +server instance. This is different from invoking the EJBs +from +a remote standalone client

+
+
+

Let’s call the server, from which the invocation happens to the EJB, as +"Client Server" and the server on which the bean is deployed as the +"Destination Server".

+
+
+ + + + + +
+ + +Note that this chapter deals with the case where the bean is deployed on +the "Destination Server" but not on the "Client Server". +
+
+
+

20.1. Application packaging

+
+

In this example, we’ll consider a EJB which is packaged in a myejb.jar +which is within a myapp.ear. Here’s how it would look like:

+
+
+
+
myapp.ear
+|
+|---- myejb.jar
+|        |
+|        |---- <org.myapp.ejb.*> // EJB classes
+
+
+
+ + + + + +
+ + +Note that packaging itself isn’t really important in the context of this +article. You can deploy the EJBs in any standard way (.ear, .war or +.jar). +
+
+
+
+

20.2. Beans

+
+

In our example, we’ll consider a simple stateless session bean which is +as follows:

+
+
+
+
package org.myapp.ejb;
+ 
+public interface Greeter {
+    
+    String greet(String user);
+}
+
+
+
+
+
package org.myapp.ejb;
+ 
+import jakarta.ejb.Remote;
+import jakarta.ejb.Stateless;
+ 
+@Stateless
+@Remote (Greeter.class)
+public class GreeterBean implements Greeter {
+ 
+    @Override
+    public String greet(String user) {
+        return "Hello " + user + ", have a pleasant day!";
+    }
+}
+
+
+
+
+

20.3. Security

+
+

WildFly 29 is secure by default. What this means is that no communication +can happen with an WildFly instance from a remote client (irrespective +of whether it is a standalone client or another server instance) without +passing the appropriate credentials. Remember that in this example, our +"client server" will be communicating with the "destination server". So +in order to allow this communication to happen successfully, we’ll have +to configure user credentials which we will be using during this +communication. So let’s start with the necessary configurations for +this.

+
+
+
+

20.4. Configuring a user on the "Destination Server"

+
+

As a first step we’ll configure a user on the destination server who +will be allowed to access the destination server. We create the user +using the add-user script that’s available in the JBOSS_HOME/bin +folder. In this example, we’ll be configuring a Application User named +ejb and with a password test in the ApplicationRealm. Running the +add-user script is an interactive process and you will see +questions/output as follows:

+
+
+
add-user
+
+
jpai@jpai-laptop:bin$ ./add-user.sh
+ 
+What type of user do you wish to add?
+&nbsp;a) Management User (mgmt-users.properties)
+&nbsp;b) Application User (application-users.properties)
+(a): b
+ 
+Enter the details of the new user to add.
+Realm (ApplicationRealm) :
+Username : ejb
+Password :
+Re-enter Password :
+What roles do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)\[&nbsp; \]:
+About to add user 'ejb' for realm 'ApplicationRealm'
+Is this correct yes/no? yes
+Added user 'ejb' to file '/jboss-as-7.1.1.Final/standalone/configuration/application-users.properties'
+Added user 'ejb' to file '/jboss-as-7.1.1.Final/domain/configuration/application-users.properties'
+Added user 'ejb' with roles to file '/jboss-as-7.1.1.Final/standalone/configuration/application-roles.properties'
+Added user 'ejb' with roles to file '/jboss-as-7.1.1.Final/domain/configuration/application-roles.properties'
+
+
+
+

As you can see in the output above we have now configured a user on the +destination server who’ll be allowed to access this server. We’ll use +this user credentials later on in the client server for communicating +with this server. The important bits to remember are the user we have +created in this example is ejb and the password is test.

+
+
+ + + + + +
+ + +Note that you can use any username and password combination you want to. +
+
+
+ + + + + +
+ + +You do not require the server to be started to add a user using the +add-user script. +
+
+
+
+

20.5. Start the "Destination Server"

+
+

As a next step towards running this example, we’ll start the +"Destination Server". In this example, we’ll use the standalone server +and use the standalone-full.xml configuration. The startup command +will look like:

+
+
+
+
./standalone.sh -server-config=standalone-full.xml
+
+
+
+

Ensure that the server has started without any errors.

+
+
+ + + + + +
+ + +It’s very important to note that if you are starting both the server +instances on the same machine, then each of those server instances +must have a unique jboss.node.name system property. You can do that +by passing an appropriate value for -Djboss.node.name system property +to the startup script: +
+
+
+
+
./standalone.sh -server-config=standalone-full.xml -Djboss.node.name=<add appropriate value here>
+
+
+
+
+

20.6. Deploying the application

+
+

The application ( myapp.ear in our case) will be deployed to +"Destination Server". The process of deploying the application is out of +scope of this chapter. You can either use the Command Line Interface or +the Admin console or any IDE or manually copy it to +JBOSS_HOME/standalone/deployments folder (for standalone server). Just +ensure that the application has been deployed successfully.

+
+
+

So far, we have built a EJB application and deployed it on the +"Destination Server". Now let’s move to the "Client Server" which acts +as the client for the deployed EJBs on the "Destination Server".

+
+
+
+

20.7. Configuring the "Client Server" to point to the EJB remoting connector

+
+

on the "Destination Server"

+
+
+

As a first step on the "Client Server", we need to let the server know +about the "Destination Server"'s EJB remoting connector, over which it +can communicate during the EJB invocations. To do that, we’ll have to +add a " remote-outbound-connection" to the remoting subsystem on the +"Client Server". The " remote-outbound-connection" configuration +indicates that a outbound connection will be created to a remote server +instance from that server. The " remote-outbound-connection" will be +backed by a " outbound-socket-binding" which will point to a remote +host and a remote port (of the "Destination Server"). So let’s see how +we create these configurations.

+
+
+
+

20.8. Start the "Client Server"

+
+

In this example, we’ll start the "Client Server" on the same machine as +the "Destination Server". We have copied the entire server installation +to a different folder and while starting the "Client Server" we’ll use a +port-offset (of 100 in this example) to avoid port conflicts:

+
+
+
+
./standalone.sh -server-config=standalone-full.xml -Djboss.socket.binding.port-offset=100
+
+
+
+
+

20.9. Creating an Authentication Context on the Client Server

+
+

The following CLI operations will create a configured authentication context.

+
+
+
+
/subsystem=elytron/authentication-configuration=ejb-user:add(authentication-name=ejb, credential-reference={clear-text=test})
+/subsystem=elytron/authentication-context=ejb-context:add(match-rules=[{authentication-configuration=ejb-user}])
+
+
+
+

Upon successful invocation of this command, the following configuration +will be created in the elytron subsystem:

+
+
+
standalone-full.xml
+
+
<authentication-client>
+    <authentication-configuration name="ejb-user" authentication-name="ejb">
+        <credential-reference clear-text="test"/>
+    </authentication-configuration>
+    <authentication-context name="ejb-context">
+        <match-rule authentication-configuration="ejb-user"/>
+    </authentication-context>
+</authentication-client>
+
+
+
+
+

20.10. Create a outbound-socket-binding on the "Client Server"

+
+

Let’s first create a outbound-socket-binding which points the +"Destination Server"'s host and port. We’ll use the CLI to create this +configuration:

+
+
+
+
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-ejb:add(host=localhost, port=8080)
+
+
+
+

The above command will create a outbound-socket-binding named " +remote-ejb" (we can name it anything) which points to "localhost" as +the host and port 8080 as the destination port. Note that the host +information should match the host/IP of the "Destination Server" (in +this example we are running on the same machine so we use "localhost") +and the port information should match the http-remoting connector port +used by the EJB subsystem (by default it’s 8080). When this command is +run successfully, we’ll see that the standalone-full.xml (the file which +we used to start the server) was updated with the following +outbound-socket-binding in the socket-binding-group:

+
+
+
+
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
+        ...
+        <outbound-socket-binding name="remote-ejb">
+            <remote-destination host="localhost" port="8080"/>
+        </outbound-socket-binding>
+    </socket-binding-group>
+
+
+
+
+

20.11. Create a "remote-outbound-connection" which uses this newly created

+
+

"outbound-socket-binding"

+
+
+

Now let’s create a " remote-outbound-connection" which will use the +newly created outbound-socket-binding (pointing to the EJB remoting +connector of the "Destination Server"). We’ll continue to use the CLI to +create this configuration:

+
+
+
+
/subsystem=remoting/remote-outbound-connection=remote-ejb-connection:add(outbound-socket-binding-ref=remote-ejb, authentication-context=ejb-context)
+
+
+
+

The above command creates a remote-outbound-connection, named " +remote-ejb-connection" (we can name it anything), in the remoting +subsystem and uses the previously created " remote-ejb" +outbound-socket-binding (notice the outbound-socket-binding-ref in that +command) with the http-remoting protocol. Furthermore, we also set the +authentication-context attribute to point to the authentication-context that we created +in the previous step.

+
+
+

What this step does is, it creates a outbound connection, on the client +server, to the remote destination server and sets up the authentication-context which +will be used for authentication. This way when a connection has to be established +from the client server to the destination server, the connection creation logic will +have the necessary security credentials to pass along and setup a successful +secured connection.

+
+
+

Now let’s run the following two operations to set some default +connection creation options for the outbound connection:

+
+
+
+
/subsystem=remoting/remote-outbound-connection=remote-ejb-connection/property=SASL_POLICY_NOANONYMOUS:add(value=false)
+
+
+
+
+
/subsystem=remoting/remote-outbound-connection=remote-ejb-connection/property=SSL_ENABLED:add(value=false)
+
+
+
+

Ultimately, upon successful invocation of this command, the following +configuration will be created in the remoting subsystem:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:remoting:1.1">
+....
+            <outbound-connections>
+                <remote-outbound-connection name="remote-ejb-connection" outbound-socket-binding-ref="remote-ejb" authentication-context="ejb-context">
+                    <properties>
+                        <property name="SASL_POLICY_NOANONYMOUS" value="false"/>
+                        <property name="SSL_ENABLED" value="false"/>
+                    </properties>
+                </remote-outbound-connection>
+            </outbound-connections>
+        </subsystem>
+
+
+
+

From a server configuration point of view, that’s all we need on the +"Client Server". Our next step is to deploy an application on the +"Client Server" which will invoke on the bean deployed on the +"Destination Server".

+
+
+
+

20.12. Packaging the client application on the "Client Server"

+
+

Like on the "Destination Server", we’ll use .ear packaging for the +client application too. But like previously mentioned, that’s not +mandatory. You can even use a .war or .jar deployments. Here’s how our +client application packaging will look like:

+
+
+
+
client-app.ear
+|
+|--- META-INF
+|        |
+|        |--- jboss-ejb-client.xml
+|
+|--- web.war
+|        |
+|        |--- WEB-INF/classes
+|        |        |
+|        |        |---- <org.myapp.FooServlet> // classes in the web app
+
+
+
+

In the client application we’ll use a servlet which invokes on the bean +deployed on the "Destination Server". We can even invoke the bean on the +"Destination Server" from a EJB on the "Client Server". The code remains +the same (JNDI lookup, followed by invocation on the proxy). The +important part to notice in this client application is the file +jboss-ejb-client.xml which is packaged in the META-INF folder of a top +level deployment (in this case our client-app.ear). This +jboss-ejb-client.xml contains the EJB client configurations which will +be used during the EJB invocations for finding the appropriate +destinations (also known as, EJB receivers). The contents of the +jboss-ejb-client.xml are explained next.

+
+
+ + + + + +
+ + +If your application is deployed as a top level .war deployment, then the +jboss-ejb-client.xml is expected to be placed in .war/WEB-INF/ folder +(i.e. the same location where you place any web.xml file). +
+
+
+
+

20.13. Contents on jboss-ejb-client.xml

+
+

The jboss-ejb-client.xml will look like:

+
+
+
+
<jboss-ejb-client xmlns="urn:jboss:ejb-client:1.0">
+    <client-context>
+        <ejb-receivers>
+            <remoting-ejb-receiver outbound-connection-ref="remote-ejb-connection"/>
+        </ejb-receivers>
+    </client-context>
+</jboss-ejb-client>
+
+
+
+

You’ll notice that we have configured the EJB client context (for this +application) to use a remoting-ejb-receiver which points to our earlier +created " remote-outbound-connection" named " +remote-ejb-connection". This links the EJB client context to use the " +remote-ejb-connection" which ultimately points to the EJB remoting +connector on the "Destination Server".

+
+
+
+

20.14. Deploy the client application

+
+

Let’s deploy the client application on the "Client Server". The process +of deploying the application is out of scope, of this chapter. You can +use either the CLI or the admin console or a IDE or deploy manually to +JBOSS_HOME/standalone/deployments folder. Just ensure that the +application is deployed successfully.

+
+
+
+

20.15. Client code invoking the bean

+
+

We mentioned that we’ll be using a servlet to invoke on the bean, but +the code to invoke the bean isn’t servlet specific and can be used in +other components (like EJB) too. So let’s see how it looks like:

+
+
+
+
import javax.naming.Context;
+import java.util.Hashtable;
+import javax.naming.InitialContext;
+ 
+...
+public void invokeOnBean() {
+        try {
+            final Hashtable props = new Hashtable();
+            // setup the ejb: namespace URL factory
+            props.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
+            // create the InitialContext
+            final Context context = new javax.naming.InitialContext(props);
+ 
+            // Lookup the Greeter bean using the ejb: namespace syntax which is explained here https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
+            final Greeter bean = (Greeter) context.lookup("ejb:" + "myapp" + "/" + "myejb" + "/" + "" + "/" + "GreeterBean" + "!" + org.myapp.ejb.Greeter.class.getName());
+ 
+   // invoke on the bean
+   final String greeting = bean.greet("Tom");
+ 
+            System.out.println("Received greeting: " + greeting);
+ 
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+}
+
+
+
+

That’s it! The above code will invoke on the bean deployed on the +"Destination Server" and return the result.

+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+

21. Remote Jakarta Enterprise Beans invocations via JNDI - Jakarta Enterprise Beans client API or wildfly-naming-client project

+
+
+

21.1. Purpose

+
+

WildFly provides EJB client API project as well as wildfly-naming-client project(https://github.com/wildfly/wildfly-naming-client) +for invoking on remote objects exposed via JNDI. This article explains +which approach to use when and what the differences and scope of each of +these projects is.

+
+
+
+

21.2. Overview

+
+

Now that we know that for remote client JNDI communication with WildFly +requires wildfly-naming-client project, let’s quickly see what the code +looks like.

+
+
+

21.2.1. Client code relying on jndi.properties in classpath

+
+
+
// Create an InitialContext using the javax.naming.* API
+InitialContext ctx = new InitialContext();
+Blah blah = (Blah) ctx.lookup("foo:blah");
+
+
+
+

As you can see, there’s not much here in terms of code. We first create +a InitialContext which as per the API will look for a jndi.properties in +the classpath of the application. We’ll see what our jndi.properties looks like, later. +Once the InitialContext is created, we just use it to do a lookup on a +JNDI name which we know is bound on the server side. We’ll come back to +the details of this lookup string in a while.

+
+
+

Let’s now see what the jndi.properties in our client classpath looks +like:

+
+
+
+
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory
+java.naming.provider.url=remote+http://localhost:8080
+
+
+
+

Those two properties are important for wildfly-naming-client project to be +used for communicating with the WildFly server. The first property tells +the JNDI API which initial context factory to use. In this case we are +pointing it to the WildFlyInitailContextFactory class supplied by the +wildfly-naming-client project. The other property is the PROVIDER_URL. +which is remote+http:// for wildfly-naming-client. The rest +of the PROVIDER_URL part is the server hostname or IP and the port on +which the remoting connector is exposed on the server side. By default +the http-remoting connector port in WildFly 29 is 8080. That’s what we +have used in our example. The hostname we have used is localhost but +that should point to the server IP or hostname where the server is +running.

+
+
+

So we saw how to setup the JNDI properties in the jndi.properties file. +The JNDI API also allows you to pass these properties to the constructor +of the InitialContext class (please check the javadoc of that class for +more details). Let’s quickly see what the code would look like:

+
+
+
+
Properties props = new Properties();
+props.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
+props.put(Context.PROVIDER_URL, "remote+https://localhost:8080");
+InitialContext ctx = new InitialContext(props);
+Blah blah = (Blah) ctx.lookup("foo:blah");
+
+
+
+

That’s it! You can see that the values that we pass to those properties +are the same as what we did via the jndi.properties. It’s upto the +client application to decide which approach they want to follow.

+
+
+
+

21.2.2. Using the wildfly-config.xml

+
+

The wildfly-config.xml can be used to specify a static configuration for a +standalone client to use. Below is a simple example specifying plaintext +username / password and the remote server connection (host/port). +The wildfly-config.xml goes in the META-INF directory.

+
+
+
+
<configuration>
+  <authentication-client xmlns="urn:elytron:1.0.1">
+    <authentication-rules>
+      <rule use-configuration="default"/>
+    </authentication-rules>
+    <authentication-configurations>
+      <configuration name="default">
+        <set-user-name name="ranabir"/>
+        <credentials>
+          <clear-password password="redhat1!"/>
+        </credentials>
+      </configuration>
+    </authentication-configurations>
+  </authentication-client>
+  <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
+      <connections>
+          <connection uri="remote+http://127.0.0.1:8080" />
+      </connections>
+</jboss-ejb-client>
+</configuration>
+
+
+
+

Using the wildfly-config.xml, the InitialContext creation does not specify +the host/port/user/pass since it is already defined in the wildfly-config.xml. +The EJB lookup

+
+
+
+
public static Context getInitialContext(String host, Integer port, String username, String password) throws NamingException {
+   Properties props = new Properties();
+   props.put(Context.INITIAL_CONTEXT_FACTORY,  "org.wildfly.naming.client.WildFlyInitialContextFactory");
+   return new InitialContext(props);
+}
+public void callRemoteEjb() {
+   HelloRemote remote = getInitialContext(host, port, user, pass).lookup("ejb:helloWorld/helloWorld-ejb/HelloWorldSLSB!org.jboss.examples.ejb.HelloRemote");
+      remote.helloWorld();
+}
+
+
+
+
+

21.2.3. How does wildfly naming client work

+
+

We have so far had an overview of how the client code looks like when +using the wildfly-naming-client project. Let’s now have a brief look at how the wildfly-naming-client project +internally establishes the communication with the server and allows JNDI +operations from the client side.

+
+
+

When the client code creates an InitialContext backed by the +org.wildfly.naming.client.WildFlyInitialContextFactory class, the +org.wildfly.naming.client.WildFlyInitialContextFactory internally looks +for the PROVIDER_URL (and other) properties that are applicable for that +context ( doesn’t matter whether it comes from the jndi.properties +file or whether passed explicitly to the constructor of the +InitialContext). Once it identifies the server and port to connect to, +the wildfly-naming-client project internally sets up a connection using the +remoting APIs with the remoting connector which is exposed on that +port.

+
+
+

It has also increased its support for security configurations. +Every service including the http+remote connector (which +listens by default on port 8080), is secured. +This means that when trying to do JNDI operations like a +lookup, the client has to pass appropriate user credentials. In our +examples so far we haven’t passed any username/pass or any other +credentials while creating the InitialContext. That was just to keep the +examples simple. But let’s now check and use one +of the ways how we pass the user credentials. Let’s at the moment just +assume that the remoting connector on port 8080 is accessible to a user +named " `ranabir`" whose password is expected to be " `redhat1!`".

+
+
+
+
void doLookup() {
+  Properties props = new Properties();
+  props.put(Context.INITIAL_CONTEXT_FACTORY,  "org.wildfly.naming.client.WildFlyInitialContextFactory");
+  props.put(Context.PROVIDER_URL, "remote+https://localhost:8080");
+  // provide an username
+  props.put(Context.SECURITY_PRINCIPAL, "ranabir");
+  // provide a password
+  props.put(Context.SECURITY_CREDENTIALS, "redhat1!");
+  // create a context passing these properties
+  InitialContext ctx = new InitialContext(props);
+  Blah blah = (Blah) ctx.lookup("foo:blah");
+  ...
+}
+
+
+
+

The code is similar to our previous example, except that we now have +added 2 additional properties that are passed to the InitialContext +constructor. The first is Context.SECURITY_PRINCIPAL +which passes the username (ranabir in this case) +and the second is Context.SECURITY_CREDENTIALS +which passes the password (redhat1! in this case). Of course the same +properties can be configured in the jndi.properties file (read the +javadoc of the Context class for appropriate properties to be used in +the jndi.properties) and as well as in wildfly-config.xml. +This is one way of passing the security credentials for JNDI communication with WildFly. +There are some other ways to do this too.

+
+
+

Moreover In order to manage Lookup High Availability, you can provide a list of remote servers +that will be checked for the Initial Lookup of the remote+http call. Here is the updated +PROVIDER_URL format, supposing you were to contact two servers located at localhost:8080 and localhost:8180

+
+
+
+
props.put(Context.PROVIDER_URL, "remote+http://localhost:8080,remote+http://localhost:8180");
+
+
+
+
+

21.2.4. JNDI operations allowed using wildfly-naming-client project

+
+

So far we have mainly concentrated on how the naming context is created +and what it internally does when an instance is created. Let’s now take +this one step further and see what kind of operations are allowed for a +JNDI context backed by the wildfly-naming-client project.

+
+
+

The JNDI Context has various methods that +are exposed for JNDI operations. One important thing to note in case of +wildfly-naming-client project is that, the project’s scope is to allow a client +to communicate with the JNDI backend exposed by the server. As such, the +wildfly-naming-client project does not support many of the methods that are +exposed by the javax.naming.Context class. The wildfly-naming-client project +only supports the read-only kind of methods (like the lookup() method) +and does not support any write kind of methods (like the bind() method). +The client applications are expected to use the wildfly-naming-client project +mainly for lookups of JNDI objects. Neither WildFly nor wildfly-naming-client +project allows writing/binding to the JNDI server from a remote +application.

+
+
+
+

21.2.5. Pre-requisites of remotely accessible JNDI objects

+
+

On the server side, the JNDI can contain numerous objects that are bound +to it. However, not all of those are exposed remotely. The two +conditions that are to be satisfied by the objects bound to JNDI, to be +remotely accessible are:

+
+
+

1) Such objects should be bound under the java:jboss/exported/ +namespace. For example, java:jboss/exported/foo/bar
+2) Objects bound to the java:jboss/exported/ namespace are expected to +be serializable. This allows the objects to be sent over the wire to the +remote clients

+
+
+

Both these conditions are important and are required for the objects to +be remotely accessible via JNDI.

+
+
+
+

21.2.6. JNDI lookup strings for remote clients backed by the wildfly-naming-client project

+
+

In our examples, so far, we have been consistently using " `foo/bar`" as +the JNDI name to lookup from a remote client using the wildfly-naming-client +project. There’s a bit more to understand about the JNDI name and how it +maps to the JNDI name that’s bound on the server side.

+
+
+

First of all, the JNDI names used while using the wildfly-naming-client project +are always relative to the java:jboss/exported/ namespace. So in our +examples, we are using " `foo/bar`" JNDI name for the lookup, that +actually is (internally) " `java:jboss/exported/foo/bar`". The +wildfly-naming-client project expects it to always be relative to the " +`java:jboss/exported/`" namespace. Once connected with the server side, +the wildfly-naming-client project will lookup for "foo/bar" JNDI name under the +" `java:jboss/exported/`" namespace of the server.

+
+
+ + + + + +
+ + +Note: Since the JNDI name that you use on the client side is always +relative to java:jboss/exported namespace, you shouldn’t be prefixing +the java:jboss/exported/ string to the JNDI name. For example, if you +use the following JNDI name: +
+
+
+

ctx.lookup("java:jboss/exported/helloworld");

+
+
+

then wildfly-naming-client will translate it to

+
+
+

ctx.lookup("java:jboss/exported/java:jboss/exported/helloworld");

+
+
+

and as a result, will fail during lookup.

+
+
+

The wildfly-naming-client implementation perhaps should be smart enough to strip +off the java:jboss/exported/ namespace prefix if supplied. But let’s not +go into that here.

+
+
+
+

21.2.7. How does wildfly-naming-client project implementation transfer the JNDI

+
+

objects to the clients

+
+
+

When a lookup is done on a JNDI string, the wildfly-naming-client implementation +internally uses the connection to the remoting connector (which it has +established based on the properties that were passed to the +InitialContext) to communicate with the server. On the server side, the +implementation then looks for the JNDI name under the +java:jboss/exported/ namespace. Assuming that the JNDI name is +available, under that namespace, the wildfly-naming-client implementation then +passes over the object bound at that address to the client. This is +where the requirement about the JNDI object being serializable comes +into picture. wildfly-naming-client project internally uses jboss-marshalling +project to marshal the JNDI object over to the client. On the client +side the wildfly-naming-client implementation then unmarshalles the object and +returns it to the client application.

+
+
+

So literally, each lookup backed by the wildfly-naming-client project entails a +server side communication/interaction and then marshalling/unmarshalling +of the object graph. This is very important to remember. We’ll come back +to this later, to see why this is important when it comes to using EJB +client API project for doing EJB lookups ( EJB +invocations from a remote client using JNDI) as against using +wildfly-naming-client project for doing the same thing.

+
+
+
+

21.2.8. Few more things

+
+

Unlike the previous jboss-remote-naming project, the connection to +the peer is not requested. Until an operation is performed on the connection, +and all consumers of the same remote URL will share a connection. +The connection lifecycle is independent of any Context instances which reference it.

+
+
+

Multiple services can be looked up via the same context. To register providers, +implement the org.wildfly.naming.client.NamingProvider interface and register the +implementation using the approach described in the java.util.ServiceLoader documentation.

+
+
+ + + + + +
+ + +Note: One important thing is that jndi.properties should not be packaged in an +app running in Wildfly though you can put it in a standalone java app. +The reason is, when you run in Wildfly , if you do new InitialContext() and +you have jndi.properties in your classpath, it will read those settings +and change the default configuration for the whole wildfly JVM. +
+
+
+
+
+

21.3. Summary

+
+

That pretty much covers whatever is important to know, in the +wildfly-naming-client project, for a typical client application. +This simple JNDI/naming client library abstracts away some of the +pain of JNDI by providing the following features: +Federation support, Class loader based provider extensibility, +A replacement implementation of the jboss-remote-naming protocol, +Abstract context implementations for supporting relative contexts and +federation in custom naming providers.

+
+
+

Those of you who don’t have client applications doing remote EJB +invocations, can just skip the rest of this article if you aren’t +interested in those details.

+
+
+
+

21.4. Remote EJB invocations backed by the wildfly-naming-client project

+
+

In previous sections of this article we saw that whatever is exposed in +the java:jboss/exported/ namespace is accessible remotely to the client +applications under the relative JNDI name. Some of you might already +have started thinking about exposing remote views of EJBs under that +namespace.

+
+
+

It’s important to note that WildFly server side already by default +exposes the remote views of a EJB under the java:jboss/exported/ +namespace (although it isn’t logged in the server logs). So assuming +your server side application has the following stateless bean:

+
+
+
+
package org.myapp.ejb;
+
+@Stateless
+@Remote(Foo.class)
+public class FooBean implements Foo {
+...
+ public String sayBar() {
+     return "Baaaaaaaar";
+ }
+}
+
+
+
+

Then the " Foo`" remote view is exposed under the +`java:jboss/exported/ namespace under the following JNDI name scheme +(which is similar to that mandated by Jakarta Enterprise Beans 3.2 spec for java:global/ +namespace)

+
+
+

app-name/module-name/bean-name!bean-interface

+
+
+

where,

+
+
+

app-name = the name of the .ear (without the .ear suffix) or the +application name configured via application.xml deployment descriptor. +If the application isn’t packaged in a .ear then there will be no +app-name part to the JNDI string.
+module-name = the name of the .jar or .war (without the .jar/.war +suffix) in which the bean is deployed or the module-name configured in +web.xml/ejb-jar.xml of the deployment. The module name is mandatory part +in the JNDI string.
+bean-name = the name of the bean which by default is the simple name +of the bean implementation class. Of course it can be overridden either +by using the "name" attribute of the bean definining annotation +(@Stateless(name="blah") in this case) or even the ejb-jar.xml +deployment descriptor.
+bean-interface = the fully qualified class name of the interface being +exposed by the bean.

+
+
+

So in our example above, let’s assume the bean is packaged in a +myejbmodule.jar which is within a myapp.ear. So the JNDI name for the +Foo remote view under the java:jboss/exported/ namespace would be:

+
+
+

java:jboss/exported/myapp/myejbmodule/FooBean!org.myapp.ejb.Foo

+
+
+

That’s where WildFly will automatically expose the remote views of the +EJBs under the java:jboss/exported/ namespace, in addition to the +java:global/ java:app/ java:module/ namespaces mandated by the EJB 3.1 +spec.

+
+
+ + + + + +
+ + +Note that only the java:jboss/exported/ namespace is available to remote +clients. +
+
+
+

So the next logical question would be, are these remote views of EJBs +accessible and invokable using the wildfly-naming-client project on the client +application. The answer is yes! Let’s quickly see the client code for +invoking our FooBean. Again, let’s just use " `ranabir`" and " `redhat1!`" +as username/password for connecting to the remoting connector.

+
+
+
+
void doBeanLookup() {
+  ...
+  Properties props = new Properties();
+  props.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
+  props.put(Context.PROVIDER_URL,"remote+https://localhost:8080");
+  // username
+  props.put(Context.SECURITY_PRINCIPAL, "ranabir");
+  // password
+  props.put(Context.SECURITY_CREDENTIALS, "redhat1!");
+  // This is an important property to set if you want to do EJB invocations via the wildfly-naming-client project
+  props.put("wildfly.naming.client.ejb.context", true);
+  // create a context passing these properties
+  InitialContext ctx = new InitialContext(props);
+  // lookup the bean     Foo
+  beanRemoteInterface = (Foo) ctx.lookup("myapp/myejbmodule/FooBean!org.myapp.ejb.Foo");
+  String bar = beanRemoteInterface.sayBar();
+  System.out.println("Remote Foo bean returned " + bar);
+  ctx.close();
+  // after this point the beanRemoteInterface is not longer valid!
+}
+
+
+
+

As you can see, most of the code is similar to what we have been seeing +so far for setting up a JNDI context backed by the wildfly-naming-client +project. The only parts that change are:

+
+
+

\1) An additional " `wildfly.naming.client.ejb.context`" property that is +added to the properties passed to the InitialContext constructor.
+2) The JNDI name used for the lookup
+3) And subsequently the invocation on the bean interface returned by the +lookup.

+
+
+

Let’s see what the " wildfly.naming.client.ejb.context`" does. In +WildFly, remote access/invocations on EJBs is facilitated by the JBoss +specific EJB client API, which is a project on its own +https://github.com/wildfly/jboss-ejb-client. So no matter, what +mechanism you use (wildfly-naming-client or core EJB client API), the +invocations are ultimately routed through the EJB client API project. In +this case too, the wildfly-naming-client internally uses EJB client API to +handle EJB invocations. From a EJB client API project perspective, for +successful communication with the server, the project expects a +`EJBClientContext backed by (atleast one) EJBReceiver(s). The +EJBReceiver is responsible for handling the EJB invocations. One type +of a EJBReceiver is a RemotingConnectionEJBReceiver which internally +uses jboss-remoting project to communicate with the remote server to +handle the EJB invocations. Such a EJBReceiver expects a connection +backed by the jboss-remoting project. Of course to be able to connect to +the server, such a EJBReceiver would have to know the server address, +port, security credentials and other similar parameters. If you were +using the core EJB client API, then you would have configured all these +properties via the jboss-ejb-client.properties or via programatic API +usage as explained here EJB invocations from a remote +client using JNDI. But in the example above, we are using wildfly-naming-client +project and are not directly interacting with the EJB client API +project.

+
+
+

If you look closely at what’s being passed, via the JNDI properties, to +the wildfly-naming-client project and if you remember the details that we +explained in a previous section about how the wildfly-naming-client project +establishes a connection to the remote server, you’ll realize that these +properties are indeed the same as what the +RemotingConnectionEJBReceiver would expect to be able to establish the +connection to the server. Now this is where the " +wildfly.naming.client.ejb.context`" property comes into picture. When +this is set to true and passed to the InitialContext creation (either +via jndi.properties or via the constructor of that class), the +wildfly-naming-client project internally will do whatever is necessary to setup +a `EJBClientContext, containing a RemotingConnectionEJBReceiver which +is created using the same remoting connection that is created by and +being used by wildfly-naming-client project for its own JNDI communication +usage. So effectively, the InitialContext creation via the wildfly-naming-client +project has now internally triggered the creation of a +EJBClientContext containing a EJBReceiver capable of handling the +EJB invocations (remember, no remote EJB invocations are possible +without the presence of a EJBClientContext containing a EJBReceiver +which can handle the EJB).

+
+
+

So we now know the importance of the " +wildfly.naming.client.ejb.context`" property and its usage. Let’s move on +the next part in that code, the JNDI name. Notice that we have used the +JNDI name relative to the `java:jboss/exported/ namespace while doing +the lookup. And since we know that the Foo view is exposed on that JNDI +name, we cast the returned object back to the Foo interface. Remember +that we earlier explained how each lookup via wildfly-naming-client triggers a +server side communication and a marshalling/unmarshalling process. This +applies for EJB views too. In fact, the wildfly-naming-client project has no +clue (since that’s not in the scope of that project to know) whether +it’s an EJB or some random object.

+
+
+

Once the unmarshalled object is returned (which actually is a proxy to +the bean), the rest is straightforward, we just invoke on that returned +object. Now since the wildfly-naming-client implementation has done the +necessary setup for the EJBClientContext (due to the presence of " +wildfly.naming.client.ejb.context`" property), the invocation on that +proxy will internally use the `EJBClientContext (the proxy is smart +enough to do that) to interact with the server and return back the +result. We won’t go into the details of how the EJB client API handles +the communication/invocation.

+
+
+

Long story short, using the wildfly-naming-client project for doing remote EJB +invocations against WildFly is possible!

+
+
+
+

21.5. Why use the EJB client API approach then?

+
+

I can guess that some of you might already question why/when would one +use the EJB client API style lookups as explained in the +EJB invocations from a remote client using JNDI +article instead of just using (what appears to be a simpler) +wildfly-naming-client style lookups.

+
+
+

Before we answer that, let’s understand a bit about the EJB client +project. The EJB client project was implemented keeping in mind various +optimizations and features that would be possible for handling remote +invocations. One such optimization was to avoid doing unnecessary server +side communication(s) which would typically involve network calls, +marshalling/unmarshalling etc…​ The easiest place where this +optimization can be applied, is to the EJB lookup. Consider the +following code (let’s ignore how the context is created):

+
+
+
+
ctx.lookup("foo/bar");
+
+
+
+

Now foo/bar JNDI name could potentially point to any type of object +on the server side. The jndi name itself won’t have the type/semantic +information of the object bound to that name on the server side. If the +context was setup using the wildfly-naming-client project (like we have seen +earlier in our examples), then the only way for wildfly-naming-client to return +an object for that lookup operation is to communicate with the server +and marshal/unmarshal the object bound on the server side. And that’s +exactly what it does (remember, we explained this earlier).

+
+
+

21.5.1. Is the lookup optimization applicable for all bean types?

+
+

In the previous section we have mentioned that the lookup +optimization by the EJB client API project happens for stateless beans. +This kind of optimization is not possible for stateful beans because +in case of stateful beans, a lookup is expected to create a session for +that stateful bean and for session creation we do have to communicate +with the server since the server is responsible for creating that +session.

+
+
+

That’s exactly why the EJB client API project expects the JNDI name +lookup string for stateful beans to include the " `?stateful`" string at +the end of the JNDI name:

+
+
+
+
context.lookup("ejb:myapp/myejbmodule//StatefulBean!org.myapp.ejb.Counter?stateful");
+
+
+
+

Notice the use of `"?stateful`" in that JNDI name. See +EJB invocations from a remote client using JNDI for +more details about such lookup.

+
+
+

The presence of " ?stateful`" in the JNDI name lookup string is a +directive to the EJB client API to let it know that a stateful bean is +being looked up and it’s necessary to communicate with the server and +create a session during that lookup. Though `?stateful is optional now.

+
+
+

So as you can see, we have managed to optimize certain operations by +using the EJB client API for EJB lookup/invocation as against using the +wildfly-naming-client project. There are other EJB client API implementation +details (and probably more might be added) which are superior when it is +used for remote EJB invocations in client applications as against +wildfly-naming-client project which doesn’t have the intelligence to carry out +such optimizations for EJB invocations. That’s why the wildfly-naming-client +project for remote EJB invocations is considered " deprecated +". Note that if you want to use wildfly-naming-client for looking up and +invoking on non-EJB remote objects then you are free to do so. In fact, +that’s why that project has been provided. You can even use the +wildfly-naming-client project for EJB invocations (like we just saw), if you are +fine with not wanting the optimizations that the EJB client API can do +for you or if you have other restrictions that force you to use that +project.

+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+
+

22. H2 Web Console Integration

+
+
+

The H2 database library provided by WildFly’s com.h2database.h2 module includes an implementation of the Jakarta Servlet HttpServlet interface (org.h2.server.web.JakartaWebServlet) that can be used to expose the H2 project’s web console tool. WildFly users could utilize this servlet in their own application by adding a dependency on the com.h2database.h2 module to their application’s deployment and then adding the servlet to the application’s web.xml. This is certainly not recommended for production use — no use of H2 is recommended in production applications — but developers may find use of the H2 console useful.

+
+
+

WildFly has historically integrated H2 in such a way that this is possible. But beginning with the 26 release, this no longer works out of the box, as the com.h2database.h2 module no longer has out-of-the-box access to the module that exposes the Jakarta Servlet API.

+
+
+

However it is possible for users of WildFly to restore this integration by adding a JBoss Modules module named javax.servlet.api.h2 to their server installation. The steps to do this are as follows:

+
+
+
    +
  • +

    cd $WILDFLY_HOME

    +
  • +
  • +

    mkdir -p modules/javax/servlet/api/h2

    +
  • +
  • +

    In that dir create a module.xml file with the following content:

    +
  • +
+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<module-alias xmlns="urn:jboss:module:1.9"
+              name="javax.servlet.api:h2"
+              target-name="jakarta.servlet.api"/>
+
+
+
+

The com.h2database.h2 module optionally depends on the javax.servlet.api.h2 module, so if one exists and it exposes the Jakarta Servlet API, then H2 JakartaWebServlet integration will work.

+
+
+ + + + + +
+ + +The relevant servlet implementation class is org.h2.server.web.JakartaWebServlet, and not org.h2.server.web.WebServlet. The latter relies on older versions of the Servlet API no longer provided by WildFly. +
+
+
+
+
+

23. Example Applications - Migrated to WildFly

+
+
+

23.1. Example Applications Migrated from Previous Releases

+
+

The applications in this section were written for a previous version of +the server but have been modified to run on WildFly or JBoss AS 7, +which was based on the same core architecture WildFly uses. Changes were made +to resolve issues that arose during deployment and runtime or to fix +problems with application behaviour. Each example below documents the +changes that were made to get the application to run successfully.

+
+
+

23.1.1. Seam 2 DVD Store example

+
+

For details on how to migrate this demo application, see +Seam +2 DVD Store example on JBoss AS 7 on Marek Novotny’s Blog.

+
+
+
+

23.1.2. Seam 2 Booking example

+
+

For details on how to migrate this demo application, see +Seam +2 Booking example on JBoss AS 7 on Marek Novotny’s Blog.

+
+
+
+

23.1.3. jBPM-Console application

+
+

Kris Verlaenen migrated this application from JBoss AS 5 to JBoss AS 7. For +details about this migration, see jBPM5 on JBoss AS 7 on his Kris’s Blog.

+
+
+
+

23.1.4. Order application used for performance testing

+
+

Andy Miller migrated this application from JBoss AS 5 to JBoss AS 7. For details +about this migration, see Order Application Migration from EAP5.1 to JBoss AS 7.

+
+
+
+

23.1.5. Migrate example application

+
+

A step by step work through of issues, and their solutions, that might +crop up when migrating applications to WildFly 29. See the following +github project for details.

+
+
+
+
+

23.2. Example Applications Based on EE6

+
+

Applications in this section were designed and written specifically to +use the features and functions of EE6.

+
+
+
    +
  • +

    Quickstarts: A number of quickstart applications were written to +demonstrate Jakarta EE and a few additional technologies. They provide +small, specific, working examples that can be used as a reference for +your own project. For more information about the quickstarts, see +Get Started Developing Applications

    +
  • +
+
+
+
+
+
+

24. Porting the Order Application from EAP 5.1 to JBoss AS 7

+
+
+

Andy Miller ported an example Order application that was used for +performance testing from EAP 5.1 to JBoss AS 7. These are the notes he +made during the migration process.

+
+
+

24.1. Overview of the application

+
+

The application is relatively simple. it contains three servlets, some +stateless session beans, a stateful session bean, and some entities.

+
+
+

In addition to application code changes, modifications were made to the +way the EAR was packaged. This is because WildFly removed support of +some proprietary features that were available in EAP 5.1.

+
+
+
+

24.2. Summary of changes

+
+

24.2.1. Code Changes

+
+
Modify JNDI lookup code
+
+

Since this application was first written for EAP 4.2/4.3, which did not +support EJB reference injection, the servlets were using pre-EE 5 +methods for looking up stateless and stateful session bean interfaces. +While migrating to WildFly, it seemed a good time to change the code to +use the @EJB annotation, although this was not a required change.

+
+
+

The real difference is in the lookup name. WildFly only supports the new +EE 6 portable JNDI names rather than the old EAR structure based names. +The JNDI lookup code changed as follows:

+
+
+

Example of code in the EAP 5.1 version:

+
+
+
+
try {
+    context = new InitialContext();
+    distributionCenterManager = (DistributionCenterManager) context.lookup("OrderManagerApp/DistributionCenterManagerBean/local");
+} catch(Exception lookupError) {
+    throw new ServletException("Couldn't find DistributionCenterManager bean", lookupError);
+}
+try {
+    customerManager = (CustomerManager) context.lookup("OrderManagerApp/CustomerManagerBean/local");
+} catch(Exception lookupError) {
+    throw new ServletException("Couldn't find CustomerManager bean", lookupError);
+}
+ 
+try {
+    productManager = (ProductManager) context.lookup("OrderManagerApp/ProductManagerBean/local");
+} catch(Exception lookupError) {
+    throw new ServletException("Couldn't find the ProductManager bean", lookupError);
+}
+
+
+
+

Example of how this is now coded in WildFly:

+
+
+
+
@EJB(lookup="java:app/OrderManagerEJB/DistributionCenterManagerBean!services.ejb.DistributionCenterManager")
+private DistributionCenterManager distributionCenterManager;
+ 
+@EJB(lookup="java:app/OrderManagerEJB/CustomerManagerBean!services.ejb.CustomerManager")
+private CustomerManager customerManager;
+ 
+@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager")
+private ProductManager productManager;
+
+
+
+

In addition to the change to injection, which was supported in EAP +5.1.0, the lookup name changed from:

+
+
+
+
OrderManagerApp/DistributionCenterManagerBean/local
+
+
+
+

to:

+
+
+
+
java:app/OrderManagerEJB/DistributionCenterManagerBean!services.ejb.DistributionCenterManager
+
+
+
+

All the other beans were changed in a similar manner. They are now based +on the portable JNDI names described in EE 6.

+
+
+
+
+

24.2.2. Modify logging code

+
+

The next major change was to logging within the application. The old +version was using the commons logging infrastructure and Log4J that is +bundled in the application server. Rather than bundling third-party +logging, the application was modified to use the new WildFly Logging +infrastructure.

+
+
+

The code changes themselves are rather trivial, as this example +illustrates:

+
+
+

Old JBoss Commons Logging/Log4J:

+
+
+
+
private static Log log = LogFactory.getLog(CustomerManagerBean.class);
+
+
+
+

New WildFly Logging

+
+
+
+
private static Logger logger = Logger.getLogger(CustomerManagerBean.class);
+
+
+
+

Old JBoss Commons Logging/Log4J:

+
+
+
+
if(log.isTraceEnabled()) {
+    log.trace("Just flushed " + batchSize + " rows to the database.");
+    log.trace("Total rows flushed is " + (i+1));
+}
+
+
+
+

New WildFly Logging:

+
+
+
+
if(logger.isLoggable(Level.TRACE)) {
+    logger.log(Level.TRACE, "Just flushed " + batchSize + " rows to the database.");
+    logger.log(Level.TRACE, "Total rows flushed is " + (i+1));
+}
+
+
+
+

In addition to the code changes made to use the WildFly log +manager module, you must add this dependency to the MANIFEST.MF file +as follows:

+
+
+
+
Manifest-Version: 1.0
+Dependencies: org.jboss.logmanager
+
+
+
+
+

24.2.3. Modify the code to use Infinispan for 2nd level cache

+
+

Jboss Cache has been replaced by Infinispan for 2nd level cache. This +requires modification of the persistence.xml file.

+
+
+

This is what the file looked like in EAP 5.1:

+
+
+
+
<properties>
+<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/>
+<property name="hibernate.cache.region.jbc2.cachefactory" value="java:CacheManager"/>
+<property name="hibernate.cache.use_second_level_cache" value="true"/>
+<property name="hibernate.cache.use_query_cache" value="false"/>
+<property name="hibernate.cache.use_minimal_puts" value="true"/>
+<property name="hibernate.cache.region.jbc2.cfg.entity" value="mvcc-entity"/>
+<property name="hibernate.cache.region_prefix" value="services"/>
+</properties>
+
+
+
+

This is how it was modified to use Infinispan for the same +configuration:

+
+
+
+
<properties>
+<property name="hibernate.cache.use_second_level_cache" value="true"/>
+<property name="hibernate.cache.use_minimal_puts" value="true"/>
+</properties>
+<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
+
+
+
+

Most of the properties are removed since they will default to the +correct values for the second level cache. See +"Using +the Infinispan second level cache" for more details.

+
+
+

That was the extent of the code changes required to migrate the +application to AS7.

+
+
+
+

24.2.4. EAR Packaging Changes

+
+

Due to modular class loading changes, the structure of the existing EAR +failed to deploy successfully in WildFly.

+
+
+

The old structure of the EAR was as follows:

+
+
+
+
$ jar tf OrderManagerApp.ear
+META-INF/MANIFEST.MF
+META-INF/application.xml
+OrderManagerWeb.war
+OrderManagerEntities.jar
+OrderManagerEJB.jar
+META-INF/
+
+
+
+

In this structure, the entities and the persistence.xml were in one +jar file, OrderManagerEntities.jar, and the stateless and stateful +session beans were in another jar file, OrderManagerEJB.jar. This did +not work due to modular class loading changes in WildFly. There are a +couple of ways to resolve this issue:

+
+
+
    +
  1. +

    Modify the class path in the MANIFEST.MF

    +
  2. +
  3. +

    Flatten the code and put all the beans in one JAR file.

    +
  4. +
+
+
+

The second approach was selected because it simplified the EAR +structure:

+
+
+
+
$ jar tf OrderManagerApp.ear
+META-INF/application.xml
+OrderManagerWeb.war
+OrderManagerEJB.jar
+META-INF/
+
+
+
+

Since there is no longer an OrderManagerEntities.jar file, the +applcation.xml file was modified to remove the entry.

+
+
+

An entry was added to the MANIFEST.MF file in the +OrderManagerWeb.war to resolve another class loading issue resulting +from the modification to use EJB reference injection in the servlets.

+
+
+
+
Manifest-Version: 1.0
+Dependencies: org.jboss.logmanager
+Class-Path: OrderManagerEJB.jar
+
+
+
+

The Class-Path entry tells the application to look in the +OrderManagerEJB.jar file for the injected beans.

+
+
+
+

24.2.5. Summary

+
+

Although the existing EAR structure could have worked with additional +modifications to the MANIFEST.MF file, this approach seemed more +appealing because it simplified the structure while maintaining the web +tier in its own WAR.

+
+
+

The source files for both versions is attached so you can view the +changes that were made to the application.

+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+
+

25. Spring applications development and migration guide

+
+
+

This document details the main points that need to be considered by +Spring developers that wish to develop new applications or to migrate +existing applications to be run into WildFly 29.

+
+
+

25.1. Dependencies and Modularity

+
+

WildFly 29 has a modular class loading strategy, different from previous +versions of JBoss AS, which enforces a better class loading isolation +between deployments and the application server itself. A detailed +description can be found in the documentation dedicated to +class +loading in WildFly 29.

+
+
+

This reduces significantly the risk of running into a class loading +conflict and allows applications to package their own dependencies if +they choose to do so. This makes it easier for Spring applications that +package their own dependencies - such as logging frameworks or +persistence providers to run on WildFly 29.

+
+
+

At the same time, this does not mean that duplications and conflicts +cannot exist on the classpath. Some module dependencies are implicit, +depending on the type of deployment as shown +here.

+
+
+
+

25.2. Persistence usage guide

+
+

Depending on the strategy being used, Spring applications can be:

+
+
+
    +
  • +

    native Hibernate applications;

    +
  • +
  • +

    Jakarta Persistence based applications;

    +
  • +
  • +

    native JDBC applications;

    +
  • +
+
+
+
+

25.3. Native Spring/Hibernate applications

+
+

Applications that use the Hibernate API directly with Spring (i.e. +through either one of LocalSessionFactoryBean or +AnnotationSessionFactoryBean) may need to use a different version of Hibernate than is provided by WildFly.

+
+
+
+

25.4. Jakarta Persistence based applications

+
+

Spring applications using Jakarta Persistence may choose between:

+
+
+
    +
  • +

    using a server-deployed persistence unit;

    +
  • +
  • +

    using a Spring-managed persistence unit.

    +
  • +
+
+
+

25.4.1. Using server-deployed persistence units

+
+

Applications that use a server-deployed persistence unit must observe +the typical Jakarta EE rules in what concerns dependency management, i.e. +the jakarta.persistence classes and persistence provider (Hibernate) are +contained in modules which are added automatically by the application +when the persistence unit is deployed.

+
+
+

In order to use the server-deployed persistence units from within +Spring, either the persistence context or the persistence unit need to +be registered in JNDI via web.xml as follows:

+
+
+
+
<persistence-context-ref>
+    <persistence-context-ref-name>persistence/petclinic-em</persistence-unit-ref-name>
+    <persistence-unit-name>petclinic</persistence-unit-name>
+</persistence-context-ref>
+
+
+
+

or, respectively:

+
+
+
+
<persistence-unit-ref>
+    <persistence-unit-ref-name>persistence/petclinic-emf</persistence-unit-ref-name>
+    <persistence-unit-name>petclinic</persistence-unit-name>
+</persistence-unit-ref>
+
+
+
+

When doing so, the persistence context or persistence unit are available +to be looked up in JNDI, as follows:

+
+
+
+
<jee:jndi-lookup id="entityManager" jndi-name="java:comp/env/persistence/petclinic-em" 
+            expected-type="jakarta.persistence.EntityManager"/>
+
+
+
+

or

+
+
+
+
<jee:jndi-lookup id="entityManagerFactory" jndi-name="java:comp/env/persistence/petclinic-emf" 
+            expected-type="jakarta.persistence.EntityManagerFactory"/>
+
+
+
+

JNDI binding

+
+
+ + + + + +
+ + +JNDI binding via persistence.xml properties is not supported in WildFly +8. +
+
+
+
+

25.4.2. Using Spring-managed persistence units

+
+

Spring applications running in WildFly 29 may also create persistence +units on their own, using the LocalContainerEntityManagerFactoryBean. +This is what these applications need to consider:

+
+
+
Placement of the persistence unit definitions
+
+

When the application server encounters a deployment that has a file +named META-INF/persistence.xml (or, for that matter, +WEB-INF/classes/META-INF/persistence.xml), it will attempt to create a +persistence unit based on what is provided in the file. In most cases, +such definition files are not compliant with the Jakarta EE requirements, +mostly because required elements such as the datasource of the +persistence unit are supposed to be provided by the Spring context +definitions, which will fail the deployment of the persistence unit, and +consequently of the entire deployment.

+
+
+

Spring applications can easily avoid this type of conflict, by using a +feature of the LocalContainerEntityManagerFactoryBean which is designed +for this purpose. Persistence unit definition files can exist in other +locations than META-INF/persistence.xml and the location can be +indicated through the persistenceXmlLocation property of the factory +bean class.

+
+
+

Assuming that the persistence unit is in the +META-INF/jpa-persistence.xml, the corresponding definition can be:

+
+
+
+
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
+       <property name="persistenceXmlLocation" value="classpath*:META-INF/jpa-persistence.xml"/> 
+       <!-- other definitions -->
+</bean>
+
+
+
+
+
+

25.4.3. Managing dependencies

+
+

To ensure that Spring applications can use a specific version of Hibernate ORM, exclude the WildFly provided Hibernate ORM version, +instruct the server to exclude the module from +the deployment’s list of dependencies. In order to do so, include a +META-INF/jboss-deployment-structure.xml or, for web applications, +WEB-INF/jboss-deployment-structure.xml with the following content:

+
+
+
+
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
+  <deployment>
+    <exclusions>
+       <module name="org.hibernate"/>
+    </exclusions>
+  </deployment>
+</jboss-deployment-structure>
+
+
+
+
+
+
+
+

26. How do I migrate my application from JBoss AS 7 to WildFly 10

+
+
+

26.1. About this Document

+
+

The purpose of this guide is to document changes that are needed to successfully run and deploy JBoss AS 7 applications on WildFly 10. It provides information on to resolve deployment and runtime problems and how to prevent changes in application behavior. This is the first step in moving to the new platform. Once the application is successfully deployed and running on the new platform, plans can be made to upgrade individual components to use the new functions and features of WildFly.

+
+
+
+

26.2. Overview of WildFly

+
+

The list of WildFly new functionality is extensive, being the most relevant, with respect to server and application migrations:

+
+
+
    +
  • +

    Jakarta EE - WildFly is a certified implementation of Jakarta EE, meeting both the Web and the Full Platform, and already includes support for the latest iterations of CDI (1.2) and Web Sockets (1.1).

    +
  • +
  • +

    Undertow - A new cutting-edge web server in WildFly, designed for maximum throughput and scalability, including environments with over a million connections. And the latest web technologies, such as the new HTTP/2 standard, are already onboard.

    +
  • +
  • +

    Apache ActiveMQ Artemis - WildFly’s new Jakarta Messaging broker. Based on an code donation from HornetQ, this Apache subproject provides outstanding performance based on a proven non-blocking architecture.

    +
  • +
  • +

    IronJacamar 1.2 - The latest IronJacamar provides a stable and feature rich Jakarta Connectors & Datasources support.

    +
  • +
  • +

    JBossWS 5 - The fifth generation of JBossWS, a major leap forward, brings new features and performances improvements to WildFly Web Services

    +
  • +
  • +

    RESTEasy - WildFly which goes beyond the standard Jakarta EE REST APIs (Jakarta RESTful Web Services 2.1), by also providing a number of useful extensions, such as JSON Web Encryption, Jackson, Yaml, Jakarta JSON Processing, and reactive facilities.

    +
  • +
  • +

    OpenJDK ORB - WildFly switched the IIOP implementation from JacORB, to a downstream branch of the OpenJDK Orb, leading to better interoperability with the JVM ORB and the Jakarta EE RI.

    +
  • +
  • +

    Feature Rich Clustering - Clustering support was heavily refactored in WildFly, and includes several APIs for applications

    +
  • +
  • +

    Port Reduction - By utilizing HTTP upgrade, WildFly has moved nearly all of its protocols to be multiplexed over just two HTTP ports: a management port (9990), and an application port (8080).

    +
  • +
  • +

    Enhanced Logging - The management API now supports the ability to list and view the available log files on a server, or even define custom formatters other than the default pattern formatter. Deployment’s logging setup is also greatly enhanced.

    +
  • +
+
+
+

The support for some technologies was removed, due to the high maintenance cost, low community interest, and much better alternative solutions:

+
+
+
    +
  • +

    CMP EJB - Jakarta Persistence offers a much more performant and flexible API

    +
  • +
  • +

    Jakarta XML RPC - Jakarta XML Web Services offer a much more accurate and complete solution

    +
  • +
  • +

    JSR-88 - With very little adoption, the more complete deployment APIs provided by vendors are preferred

    +
  • +
+
+
+
+

26.3. Server Migration

+
+

Migrating a JBoss AS 7 server to WildFly consists of migrating custom configuration files, and some persisted data that may exist.

+
+
+

26.3.1. JacORB Subsystem

+
+

WildFly ORB support is provided by the JDK itself, instead of relying on JacORB. A subsystem configuration migration is required.

+
+
+
JacORB Subsystem Configuration
+
+

The extension’s module org.jboss.as.jacorb is replaced by module org.wildfly.iiop-openjdk, while the subsystem configuration namespace urn:jboss:domain:jacorb:2.0 is replaced by +urn:jboss:domain:iiop-openjdk:1.0.

+
+
+

The XML configuration of the new subsystem accepts only a subset of the legacy elements and attributes. Consider the following example of the JacORB subsystem configuration, containing all valid elements and attributes:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:jacorb:1.3">
+   <orb name="JBoss" print-version="off" use-imr="off" use-bom="off"  cache-typecodes="off"
+       cache-poa-names="off" giop-minor-version ="2" socket-binding="jacorb" ssl-socket-binding="jacorb-ssl">
+       <connection retries="5" retry-interval="500" client-timeout="0" server-timeout="0"
+           max-server-connections="500" max-managed-buf-size="24" outbuf-size="2048"
+           outbuf-cache-timeout="-1"/>
+       <initializers security="off" transactions="spec"/>
+   </orb>
+   <poa monitoring="off" queue-wait="on" queue-min="10" queue-max="100">
+       <request-processors pool-size="10" max-threads="32"/>
+   </poa>
+   <naming root-context="JBoss/Naming/root" export-corbaloc="on"/>
+   <interop sun="on" comet="off" iona="off" chunk-custom-rmi-valuetypes="on"
+       lax-boolean-encoding="off" indirection-encoding-disable="off" strict-check-on-tc-creation="off"/>
+   <security support-ssl="off" add-component-via-interceptor="on" client-supports="MutualAuth"
+       client-requires="None" server-supports="MutualAuth" server-requires="None"/>
+   <properties>
+       <property name="some_property" value="some_value"/>
+   </properties>
+</subsystem>
+
+
+
+

Properties that are not supported and have to be removed:

+
+
+
    +
  • +

    <orb/>: client-timeout, max-managed-buf-size, max-server-connections, outbuf-cache-timeout, outbuf-size, connection-retries, retry-interval, name,server-timeout

    +
  • +
  • +

    <poa/>: queue-min, queue-max, pool-size, max-threads

    +
  • +
+
+
+

On-off properties: have to either be removed or in off mode:

+
+
+
    +
  • +

    <orb/>: cache-poa-names, cache-typecodes, print-version, use-bom, use-imr

    +
  • +
  • +

    <interop/>: all except sun

    +
  • +
  • +

    <poa/>: monitoring, queue-wait

    +
  • +
+
+
+

In case the legacy subsystem configuration is available, such configuration may be migrated to the new subsystem by invoking its migrate operation, using the management CLI:

+
+
+
+
/subsystem=jacorb:migrate
+
+
+
+

There is also a describe-migration operation that returns a list of all the management operations that are performed to migrate from the legacy subsystem to the new one:

+
+
+
+
/subsystem=jacorb:describe-migration
+
+
+
+

Both migrate and describe-migration will also display a list of migration-warnings if there are some resource or attributes that can not be migrated automatically. The following is a list of these warnings:

+
+
+
    +
  • +

    Properties X cannot be emulated using OpenJDK ORB and are not supported

    +
    +

    This warning means that mentioned properties are not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those properties would be nonexistent. Admin has to check whether subsystem is able to operate +correctly without that behavior on the new server.Unsupported properties: cache-poa-names, cache-typecodes, chunk-custom-rmi-valuetypes, client-timeout, comet, indirection-encoding-disable, iona, lax-boolean-encoding, max-managed-buf-size, max-server-connections, max-threads, outbuf-cache-timeout, outbuf-size, queue-max, queue-min, poa-monitoring, print-version, retries, retry-interval, queue-wait, server-timeout, strict-check-on-tc-creation, use-bom, use-imr.

    +
    +
  • +
  • +

    The properties X use expressions. Configuration properties that are used to resolve those expressions should be transformed manually to the new iiop-openjdk subsystem format.

    +
    +

    Admin has to transform all the configuration files to work correctly with the jacorb subsystem. For example, jacorb has a property giop-minor-version whereas iiop-openjdk uses the property giop-version. Let’s suppose we use 1 minor version in jacorb and have it configured in standalone.conf file as system variable: -Diiop-giop-minor-version=1. Admin is responsible for changing this variable to 1.1 after the migration to make sure that the new subsystem will work correctly.

    +
    +
  • +
+
+
+
+
+

26.3.2. JBoss Web Subsystem

+
+

JBoss Web is replaced by Undertow in WildFly, which means that the legacy subsystem configuration should be migrated to WildFly’s Undertow subsystem configuration.

+
+
+
JBoss Web Subsystem Configuration
+
+

The extension’s module org.jboss.as.web is replaced by module org.wildfly.extension.undertow, while the subsystem configuration namespace urn:jboss:domain:web: is replaced by +urn:jboss:domain:undertow:.

+
+
+

The XML configuration of the new subsystem is relatively different. Consider the following example of the JBoss Web subsystem configuration, containing all valid elements and attributes:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="true" default-session-timeout="30" instance-id="foo">
+    <configuration>
+        <static-resources listings="true"
+                          sendfile="1000"
+                          file-encoding="utf-8"
+                          read-only="true"
+                          webdav="false"
+                          secret="secret"
+                          max-depth="5"
+                          disabled="false"
+                />
+        <jsp-configuration development="true"
+                           disabled="false"
+                           keep-generated="true"
+                           trim-spaces="true"
+                           tag-pooling="true"
+                           mapped-file="true"
+                           check-interval="20"
+                           modification-test-interval="1000"
+                           recompile-on-fail="true"
+                           smap="true"
+                           dump-smap="true"
+                           generate-strings-as-char-arrays="true"
+                           error-on-use-bean-invalid-class-attribute="true"
+                           scratch-dir="/some/dir"
+                           source-vm="1.7"
+                           target-vm="1.7"
+                           java-encoding="utf-8"
+                           x-powered-by="true"
+                           display-source-fragment="true" />
+        <mime-mapping name="ogx" value="application/ogg" />
+        <welcome-file>titi</welcome-file>
+    </configuration>
+    <connector name="http" scheme="http"
+               protocol="HTTP/1.1"
+               socket-binding="http"
+               enabled="true"
+               enable-lookups="false"
+               proxy-binding="reverse-proxy"
+               max-post-size="2097153"
+               max-save-post-size="512"
+               redirect-binding="https"
+               max-connections="300"
+               secure="false"
+               executor="some-executor"
+            />
+    <connector name="https" scheme="https" protocol="HTTP/1.1" secure="true" socket-binding="https">
+        <ssl certificate-key-file="${file-base}/server.keystore"
+             ca-certificate-file="${file-base}/jsse.keystore"
+             key-alias="test"
+             password="changeit"
+             cipher-suite="SSL_RSA_WITH_3DES_EDE_CBC_SHA"
+             protocol="SSLv3"
+             verify-client="true"
+             verify-depth="3"
+             certificate-file="certificate-file.ext"
+             ca-revocation-url="https://example.org/some/url"
+             ca-certificate-password="changeit"
+             keystore-type="JKS"
+             truststore-type="JKS"
+             session-cache-size="512"
+             session-timeout="3000"
+             ssl-protocol="RFC4279"
+                />
+    </connector>
+    <connector name="http-vs" scheme="http" protocol="HTTP/1.1" socket-binding="http" >
+        <virtual-server name="vs1" />
+        <virtual-server name="vs2" />
+    </connector>
+    <virtual-server name="default-host" enable-welcome-root="true" default-web-module="foo.war">
+        <alias name="localhost" />
+        <alias name="example.com" />
+        <access-log resolve-hosts="true" extended="true" pattern="extended" prefix="prefix" rotate="true" >
+            <directory relative-to="jboss.server.base.dir" path="toto" />
+        </access-log>
+        <rewrite name="myrewrite" pattern="^/helloworld(.*)" substitution="/helloworld/test.jsp" flags="L" />
+        <rewrite name="with-conditions" pattern="^/helloworld(.*)" substitution="/helloworld/test.jsp" flags="L" >
+            <condition name="https" pattern="off" test="%{HTTPS}" flags="NC"/>
+            <condition name="user" test="%{USER}" pattern="toto" flags="NC"/>
+            <condition name="no-flags" test="%{USER}" pattern="toto"/>
+        </rewrite>
+        <sso reauthenticate="true" domain="myDomain" cache-name="myCache"
+             cache-container="cache-container" http-only="true"/>
+    </virtual-server>
+    <virtual-server name="vs1" />
+    <virtual-server name="vs2" />
+    <valve name="myvalve" module="org.jboss.some.module" class-name="org.jboss.some.class" enabled="true">
+        <param param-name="param-name" param-value="some-value"/>
+    </valve>
+    <valve name="accessLog" module="org.jboss.as.web" class-name="org.apache.catalina.valves.AccessLogValve">
+        <param param-name="prefix" param-value="myapp_access_log." />
+        <param param-name="suffix" param-value=".log" />
+        <param param-name="rotatable" param-value="true" />
+        <param param-name="fileDateFormat" param-value="yyyy-MM-dd" />
+        <param param-name="pattern" param-value="common" />
+        <param param-name="directory" param-value="${jboss.server.log.dir}" />
+        <param param-name="resolveHosts" param-value="false"/>
+        <param param-name="conditionIf" param-value="log-enabled"/>
+    </valve>
+    <valve name="request-dumper" module="org.jboss.as.web" class-name="org.apache.catalina.valves.RequestDumperValve"/>
+    <valve name="remote-addr" module="org.jboss.as.web" class-name="org.apache.catalina.valves.RemoteAddrValve">
+        <param param-name="allow" param-value="127.0.0.1,127.0.0.2" />
+        <param param-name="deny" param-value="192.168.1.20" />
+    </valve>
+    <valve name="crawler" class-name="org.apache.catalina.valves.CrawlerSessionManagerValve" module="org.jboss.as.web" >
+        <param param-name="sessionInactiveInterval" param-value="1" />
+        <param param-name="crawlerUserAgents" param-value="Google" />
+    </valve>
+    <valve name="proxy" class-name="org.apache.catalina.valves.RemoteIpValve" module="org.jboss.as.web" >
+        <param param-name="internalProxies" param-value="192\.168\.0\.10|192\.168\.0\.11" />
+        <param param-name="remoteIpHeader" param-value="x-forwarded-for" />
+        <param param-name="proxiesHeader" param-value="x-forwarded-by" />
+        <param param-name="trustedProxies" param-value="proxy1|proxy2" />
+    </valve>
+</subsystem>
+
+
+
+

It is possible to do a migration of the legacy subsystem configuration and related persisted data by invoking the legacy subsystem’s migrate operation, using the management CLI:

+
+
+
+
/subsystem=web:migrate
+
+
+
+

There is also a describe-migration operation that returns a list of all the management operations that are performed to migrate from the legacy subsystem to the new one:

+
+
+
+
/subsystem=web:describe-migration
+
+
+
+

Both migrate and describe-migration will also display a list of migration-warnings if there are some resource or attributes that can not be migrated automatically. The following is a list of these warnings:

+
+
+
    +
  • +

    Could not migrate resource X

    +
    +

    This warning means that mentioned resource configuration is not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those resources would be nonexistent. Admin has to check whether subsystem is able to operate correctly without that behavior on the new server.

    +
    +
  • +
  • +

    Could not migrate attribute X from resource Y.

    +
    +

    This warning means that mentioned resource configuration property is not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those properties would be nonexistent. Admin has to check whether subsystem is +able to operate correctly without that behavior on the new server.

    +
    +
  • +
  • +

    Could not migrate SSL connector as no SSL config is defined

    +
  • +
  • +

    Could not migrate verify-client attribute %s to the Undertow equivalent

    +
  • +
  • +

    Could not migrate verify-client expression %s

    +
  • +
  • +

    Could not migrate valve X

    +
    +

    This warning means that mentioned valve configuration is not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those resources would be nonexistent. Admin has to check whether subsystem is able to operate correctly without that behavior on the new server. This warning may happen for:

    +
    +
    +
      +
    • +

      org.apache.catalina.valves.RemoteAddrValve : must have at least one +allowed or denied value.

      +
    • +
    • +

      org.apache.catalina.valves.RemoteHostValve : must have at least one +allowed or denied value.

      +
    • +
    • +

      org.apache.catalina.authenticator.BasicAuthenticator

      +
    • +
    • +

      org.apache.catalina.authenticator.DigestAuthenticator

      +
    • +
    • +

      org.apache.catalina.authenticator.FormAuthenticator

      +
    • +
    • +

      org.apache.catalina.authenticator.SSLAuthenticator

      +
    • +
    • +

      org.apache.catalina.authenticator.SpnegoAuthenticator

      +
    • +
    • +

      custom valves

      +
    • +
    +
    +
  • +
  • +

    Could not migrate attribute X from valve Y

    +
    +

    This warning means that mentioned valve configuration property is not supported and won’t be included in the new subsystem configuration. As a result of that admin must be aware that any behavior implied by those properties would be nonexistent. Admin has to check whether subsystem is +able to operate correctly without that behavior on the new server. This warning may happen for :

    +
    +
    +
      +
    • +

      org.apache.catalina.valves.AccessLogValve : if you use the following parameters resolveHosts, fileDateFormat, renameOnRotate, +encoding, locale, requestAttributesEnabled, buffered.

      +
    • +
    • +

      org.apache.catalina.valves.ExtendedAccessLogValve : if you use the following parameters resolveHosts, fileDateFormat, renameOnRotate, encoding, locale, requestAttributesEnabled, buffered.

      +
    • +
    • +

      org.apache.catalina.valves.RemoteIpValve:

      +
      +
        +
      • +

        if remoteIpHeader is defined and isn’t set to "x-forwarded-for".

        +
      • +
      • +

        if protocolHeader is defined and isn’t set to "x-forwarded-proto".

        +
      • +
      • +

        if you use the following parameters httpServerPort and httpsServerPort .

        +
      • +
      +
      +
    • +
    +
    +
  • +
+
+
+

Also, note that Undertow doesn’t support JBoss Web valves, but some of these may be migrated to Undertow handlers, and JBoss Web subsystem’s migrate operation do that too.

+
+
+

Here is a list of those valves and their corresponding Undertow handler:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValveHandler

org.apache.catalina.valves.AccessLogValve

io.undertow.server.handlers.accesslog.AccessLogHandler

org.apache.catalina.valves.ExtendedAccessLogValve

io.undertow.server.handlers.accesslog.AccessLogHandler

org.apache.catalina.valves.RequestDumperValve

io.undertow.server.handlers.RequestDumpingHandler

org.apache.catalina.valves.RewriteValve

io.undertow.server.handlers.SetAttributeHandler

org.apache.catalina.valves.RemoteHostValve

io.undertow.server.handlers.AccessControlListHandler

org.apache.catalina.valves.RemoteAddrValve

io.undertow.server.handlers.IPAddressAccessControlHandler

org.apache.catalina.valves.RemoteIpValve

io.undertow.server.handlers.ProxyPeerAddressHandler

org.apache.catalina.valves.StuckThreadDetectionValve

io.undertow.server.handlers.StuckThreadDetectionHandler

org.apache.catalina.valves.CrawlerSessionManagerValve

io.undertow.servlet.handlers.CrawlerSessionManagerHandler

+
+

The org.apache.catalina.valves.JDBCAccessLogValve can’t be automatically migrated to io.undertow.server.handlers.JDBCLogHandler as the expectations differ.

+
+
+

The migration can be done manually though :

+
+
+
    +
  1. +

    Create the driver module and add the driver to the list of available drivers

    +
  2. +
  3. +

    Create a datasource pointing to the database where the log entries are going to be stored

    +
  4. +
  5. +

    Add an expression-filter definition with the following expression: "jdbc-access-log(datasource='datasource-jndi-name")

    +
    +
    +
    <valve name="jdbc" module="org.jboss.as.web" class-name="org.apache.catalina.valves.JDBCAccessLogValve">
    +    <param param-name="driverName" param-value="com.mysql.jdbc.Driver" />
    +    <param param-name="connectionName" param-value="root" />
    +    <param param-name="connectionPassword" param-value="password" />
    +    <param param-name="connectionURL" param-value="jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull" />
    +    <param param-name="format" param-value="combined" />
    +</valve>
    +
    +
    +
    +

    should become:

    +
    +
    +
    +
    <subsystem xmlns="urn:jboss:domain:datasources:1.2">
    +    <datasources>
    +        <datasource jndi-name="java:jboss/datasources/accessLogDS" pool-name="ccessLogDS" enabled="true" use-java-context="true">
    +            <connection-url>jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull</connection-url>
    +            <driver>mysql</driver>
    +            <security>
    +               <user-name>root</user-name>
    +               <password>password</password>
    +            </security>
    +        </datasource>
    +        ...
    +        <drivers>
    +            <driver name="mysql" module="com.mysql">
    +                <driver-class>com.mysql.jdbc.Driver</driver-class>
    +            </driver>
    +        ...
    +        </drivers>
    +    </datasources>
    +</subsystem>
    +...
    +<subsystem xmlns="urn:jboss:domain:undertow:3.1" default-virtual-host="default-virtual-host" default-servlet-container="myContainer"
    +           default-server="some-server" instance-id="some-id" statistics-enabled="true">
    +    ...
    +    <server name="some-server" default-host="other-host" servlet-container="myContainer">
    +    ...
    +        <host name="other-host" alias="www.mysite.com, ${prop.value:default-alias}" default-web-module="something.war" disable-console-redirect="true">
    +            <location name="/" handler="welcome-content" />
    +            <filter-ref name="jdbc-access"/>
    +        </host>
    +    </server>
    +    ...
    +    <filters>
    +        <expression-filter name="jdbc-access" expression="jdbc-access-log(datasource='java:jboss/datasources/accessLogDS')" />
    +    ...
    +    </filters>
    + 
    +</subsystem>
    +
    +
    +
  6. +
+
+
+

Note that any custom valve won’t be migrated at all and will just be removed from the configuration.

+
+
+

Also the authentication related valves are to be replaced by Undertow authentication mechanisms, and this have to be done manually.

+
+
+
+
WebSockets
+
+

In JBoss AS 7, to use WebSockets, you had to configure the 'http' connector in the web subsystem of the server configuration file to use the NIO2 protocol. The following is an example of the management CLI command to configure WebSockets in the previous releases.

+
+
+
+
/subsystem=web/connector=http/:write-attribute(name=protocol,value=org.apache.coyote.http11.Http11NioProtocol)
+
+
+
+

WebSockets are a requirement of the Jakarta EE specification and the default configuration is included in WildFly. More complex WebSocket configuration is done in the servlet-container of the undertow subsystem of the server configuration file.

+
+
+

You no longer need to configure the server for default WebSocket support.

+
+
+
+
+

26.3.3. Messaging Subsystem

+
+

WildFly JMS support is provided by ActiveMQ Artemis, instead of HornetQ. It’s possible to do a migration of the legacy subsystem configuration, and related persisted data.

+
+
+
Messaging Subsystem Configuration
+
+

The extension’s module org.jboss.as.messaging is replaced by module org.wildfly.extension.messaging-activemq, while the subsystem configuration namespace urn:jboss:domain:messaging:3.0 is replaced by urn:jboss:domain:messaging-activemq:1.0.

+
+
+
Management model
+
+

In most cases, an effort was made to keep resource and attribute names as similar as possible to those used in previous releases. The following table lists some of the changes.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
HornetQ nameActiveMQ name

hornetq-server

server

hornetq-serverType

serverType

connectors

connector

discovery-group-name

discovery-group

+
+

The management operations invoked on the new messaging-subsystem starts with /subsystem=messaging-activemq/server=X while the legacy messaging subsystem was at /subsystem=messaging/hornetq-server=X.

+
+
+

In case the legacy subsystem configuration is available, such configuration may be migrated to the new subsystem by invoking its migrate operation, using the management CLI:

+
+
+
+
/subsystem=messaging:migrate
+
+
+
+

There is also a describe-migration operation that returns a list of all the management operations that are performed to migrate from the legacy subsystem to the new one:

+
+
+
+
/subsystem=messaging:describe-migration
+
+
+
+

Both migrate and describe-migration will also display a list of migration-warnings if there are some resource or attributes that can not be migrated automatically. The following is a list of these warnings:

+
+
+
    +
  • +

    The migrate operation can not be performed: the server must be in admin-only mode

    +
    +

    The migrate operation requires starting the server in admin-only mode, which is done by adding parameter --admin-only to the server start command, e.g.

    +
    +
    +
    +
    ./standalone.sh --admin-only
    +
    +
    +
  • +
  • +

    Can not migrate attribute local-bind-address from resource X. Use instead the socket-attribute to configure this broadcast-group.

    +
  • +
  • +

    Can not migrate attribute local-bind-port from resource X. Use instead the socket-binding attribute to configure this broadcast-group.

    +
  • +
  • +

    Can not migrate attribute group-address from resource X. Use instead the socket-binding attribute to configure this broadcast-group.

    +
  • +
  • +

    Can not migrate attribute group-port from resource X. Use instead the socket-binding attribute to configure this broadcast-group.

    +
    +

    Broadcast-group resources no longer accept local-bind-address, local-bind-port, group-address, group-port attributes. It only accepts a socket-binding. The warning notifies that resource X has an unsupported attribute. The user will have to set the socket-binding attribute on the resource and ensures it corresponds to a defined socket-binding +resource.

    +
    +
  • +
  • +

    Classes providing the %s are discarded during the migration. To use them in the new messaging-activemq subsystem, you will have to extend the Artemis-based Interceptor.

    +
    +

    Messaging interceptors support is significantly different in WildFly 10, any interceptors configured in the legacy subsystem are discarded during migration. See the Messaging Interceptors section to learn how to migrate legacy Messaging interceptors.

    +
    +
  • +
  • +

    Can not migrate the HA configuration of X. Its shared-store and backup attributes holds expressions and it is not possible to determine unambiguously how to create the corresponding ha-policy for the messaging-activemq server.

    +
    +

    If the hornetq-server X’s shared-store or backup attributes hold an expression, such as ${xxx}, then it’s not possible to determine the actual ha-policy of the migrated server. In that case, we discard it and the user will have to add the correct ha-policy afterwards. The ha-policy is a single resource underneath the messaging-activemq server resource.

    +
    +
  • +
  • +

    Can not migrate attribute local-bind-address from resource X. Use instead the socket-binding attribute to configure this discovery-group.Can not migrate attribute local-bind-port from resource X. Use instead the socket-binding attribute to configure this discovery-group.

    +
  • +
  • +

    Can not migrate attribute group-address from resource X. Use instead the socket-binding attribute to configure this discovery-group.

    +
  • +
  • +

    Can not migrate attribute group-port from resource X. Use instead the socket-binding attribute to configure this discovery-group.

    +
    +

    The discovery-group resources no longer accept local-bind-address, local-bind-port, group-address, group-port attributes. It only accepts a socket-binding. The warning notifies that resource X has an unsupported attribute.

    +
    +
    +

    The user will have to set the socket-binding attribute on the resource and ensures it corresponds to a defined socket-binding resource.

    +
    +
  • +
  • +

    Can not create a legacy-connection-factory based on connection-factory X. It uses a HornetQ in-vm connector that is not compatible with Artemis in-vm connector

    +
    +

    Legacy subsystem’s remote connection-factory resources are migrated into legacy-connection-factory resources, to allow old EAP6 clients to connect to EAP7. However a connection-factory using in-vm will not be migrated, because a in-vm client will be based on EAP7, not EAP 6. In other words, legacy-connection-factory are created only when the CF is using remote connectors, and this warning notifies about in-vm connection-factory X not migrated.

    +
    +
  • +
  • +

    Can not migrate attribute X from resource Y. The attribute uses an expression that can be resolved differently depending on system properties. After migration, this attribute must be added back with an actual value instead of the expression.

    +
    +

    This warning appears when the migration logic needs to know the concrete value of attribute X during migration, but instead such value includes an expression that’s can’t be resolved, so the actual value can not be determined, and the attribute is discarded. It happens in several cases, +for instance:

    +
    +
    +
      +
    • +

      cluster-connection forward-when-no-consumers. This boolean attribute has been replaced by the message-load-balancing-type attribute (which is an enum of OFF, STRICT, ON_DEMAND)

      +
    • +
    • +

      broadcast-group and discovery-group’s jgroups-stack and jgroups-channel attributes. They reference other resources and we no longer accept expressions for them.

      +
    • +
    +
    +
  • +
  • +

    Can not migrate attribute X from resource Y. This attribute is not supported by the new messaging-activemq subsystem.

    +
    +

    Some attributes are no longer supported in the new messaging-activemq subsystem and are simply discarded:

    +
    +
    +
      +
    • +

      hornetq-server’s failback-delay

      +
    • +
    • +

      http-connector’s use-nio attribute

      +
    • +
    • +

      http-acceptor’s use-nio attribute

      +
    • +
    • +

      remote-connector’s use-nio attribute

      +
    • +
    • +

      remote-acceptor’s use-nio attribute

      +
    • +
    +
    +
  • +
+
+
+
+
XML Configuration
+
+

The XML configuration has changed significantly with the new messaging-activemq subsystem to provide a XML scheme more consistent with other WildFly subsystems.

+
+
+

It is not advised to change the XML configuration of the legacy messaging subsystem to conform to the new messaging-activemq subsystem. Instead, invoke the legacy subsystem migrate operation. This operation will write the XML configuration of the new messaging-activemq subsystem as a part of its execution.

+
+
+
+
Messaging Interceptors
+
+

Messaging Interceptors are significantly different in WildFly 10, requiring both code and configuration changes by the user. In concrete the interceptor base Java class is now org.apache.artemis.activemq.api.core.interceptor.Interceptor, and the user interceptor implementation classes may now be loaded by any server module. Note that prior to WildFly 10 the interceptor classes could only be installed by adding these to the HornetQ module, thus requiring the user to change such module XML descriptor, its module.xml.

+
+
+

With respect to the server XML configuration, the user must now specify the module to load its interceptors in the new messaging-activemq subsystem XML config, e.g:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
+    <server name="default">
+       ...
+        <incoming-interceptors>
+            <class name="org.foo.incoming.myInterceptor" module="org.foo" />
+            <class name="org.bar.incoming.myOtherInterceptor" module="org.bar" />
+        </incoming-interceptors>
+        <outgoing-interceptors>
+            <class name="org.foo.outgoing.myInterceptor" module="org.foo" />
+            <class name="org.bar.outgoing.myOtherInterceptor" module="org.bar" />
+        </outgoing-interceptors>
+   </server>
+</subsystem>
+
+
+
+
+
Jakarta Messaging Destinations
+
+

In previous releases, Jakarta Messaging destination queues were configured in the <jms-destinations> element under the hornetq-server section of the messaging subsystem.

+
+
+
+
<jms-destinations>
+    <jms-queue name="testQueue">
+        <entry name="queue/test"/>
+        <entry name="java:jboss/exported/jms/queue/test"/>
+    </jms-queue>
+</jms-destinations>
+
+
+
+

In WildFly, the Jakarta Messaging destination queue is configured in the default server of the messaging-activemq subsystem.

+
+
+
+
<jms-queue name="testQueue" entries="queue/test java:jboss/exported/jms/queue/test"/>
+
+
+
+
+
+
Messaging Logging
+
+

The prefix of messaging log messages in WildFly is WFLYMSGAMQ, instead of WFLYMSG.

+
+
+
+
Messaging Data
+
+

The location of the messaging data has been changed in the new messaging-activemq subsystem:

+
+
+
    +
  • +

    messagingbindings/ → activemq/bindings/

    +
  • +
  • +

    messagingjournal/ → activemq/journal/

    +
  • +
  • +

    messaginglargemessages/ → activemq/largemessages/

    +
  • +
  • +

    messagingpaging/ → activemq/paging/

    +
  • +
+
+
+

To migrate legacy messaging data, you will have to export the directories used by the legacy messaging subsystem and import them into the new subsystem’s server by using its import-journal operation:

+
+
+
+
/subsystem=messaging-activemq/server=default:import-journal(file=<path to XML dump>)
+
+
+
+

The XML dump is a XML file generated by HornetQ XmlDataExporter util class.

+
+
+
+
+
+

26.4. Application Migration

+
+

Before you migrate your application, you should be aware that some features that were available in previous releases are now deprecated or missing.

+
+
+

26.4.1. EJBs

+
+
CMP Entity EJBs
+
+

Container-Managed Persistence entity beans support is optional in Jakarta EE, and WildFly does not provide support for these.

+
+
+

CMP entity beans are defined in the ejb-jar.xml descriptor, in concrete an entity bean is CMP only if the <entity/> child element named persistence-type is included and has a value of Container. An example:

+
+
+
+
<?xml version="1.1" encoding="UTF-8"?>
+<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
+         version="3.1">
+    <enterprise-beans>
+        <entity>
+            <ejb-name>SimpleBMP</ejb-name>
+            <local-home>org.jboss.as.test.integration.ejb.entity.bmp.BMPLocalHome</local-home>
+            <local>org.jboss.as.test.integration.ejb.entity.bmp.BMPLocalInterface</local>
+            <ejb-class>org.jboss.as.test.integration.ejb.entity.bmp.SimpleBMPBean</ejb-class>
+            <persistence-type>Container</persistence-type>
+            <prim-key-class>java.lang.Integer</prim-key-class>
+            <reentrant>true</reentrant>
+        </entity>
+    </enterprise-beans>
+</ejb-jar> 
+
+
+
+

CMP entity beans should be replaced by Jakarta Persistence entities.

+
+
+
+
EJB Client
+
+
Default Remote Connection Port
+
+

The default remote connection port has changed from 4447 to 8080.

+
+
+

In JBoss AS 7, the jboss-ejb-client.properties file looked similar to +the following:

+
+
+
+
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
+remote.connections=default
+remote.connection.default.host=localhost
+remote.connection.default.port=4447
+remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
+
+
+
+

In WildFly, the properties file looks like this:

+
+
+
+
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
+remote.connections=default
+remote.connection.default.host=localhost
+remote.connection.default.port=8080
+remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
+
+
+
+
+
Default Connector
+
+

In WildFly, the default connector has changed from remoting to http-remoting. This change impacts clients that use libraries from one release of JBoss and to connect to server in a different release.

+
+
+
    +
  • +

    If a client application uses the EJB client library from JBoss AS 7 and wants to connect to WildFly 10 server, the server must be configured to expose a remoting connector on a port other than 8080. The client must then connect using that newly configured connector.

    +
  • +
  • +

    A client application that uses the EJB client library from WildFly 10 and wants to connect to a JBoss AS 7 server must be aware that the server instance does not use the http-remoting connector and instead uses a remoting connector. This is achieved by defining a new client-side connection property.

    +
    +
    +
    remote.connection.default.protocol=remote
    +
    +
    +
  • +
+
+
+

External applications using JNDI, to remotely lookup up EJBs in a WildFly 10 server, may also need to be migrated, see #Remote JNDI Clients section for further information.

+
+
+
+
+
+

26.4.2. Jakarta Messaging

+
+
Proprietary Jakarta Messaging Resource Definitions
+
+

The proprietary XML descriptors, previously used to setup Jakarta Messaging resources, are deprecated in WildFly. Jakarta EE (section EE.5.18) standardized such functionality.

+
+
+

The deprecated descriptors are files bundled in the application package, which name ends with -jms.xml. Their namespace has been changed to urn:jboss:messaging-activemq-deployment:1.0.

+
+
+
+
External Jakarta Messaging Clients
+
+

Jakarta Messaging Resources are remotely looked up using JNDI, and looking up resources in a WildFly 10 server may require changes in the application code, see #Remote JNDI Clients section for further information.

+
+
+
+
+

26.4.3. Jakarta Persistence (and Hibernate)

+
+
Applications That Plan to Use Hibernate ORM 5.3.x
+
+

WildFly ships with Hibernate ORM 5.3.x and those libraries are implicitly added to the application classpath when a persistence.xml is detected during deployment. If your application uses Jakarta Persistence, it will default to using the Hibernate ORM 5.3.x libraries.

+
+
+

Hibernate ORM 5.3.x introduces:

+
+
+
    +
  • +

    Jakarta Persistence 2.2 support

    +
  • +
  • +

    Redesigned metamodel - Complete replacement for the current org.hibernate.mapping code

    +
  • +
  • +

    Query parser - Improved query parser based on Antlr 3/4

    +
  • +
  • +

    Multi-tenancy improvements - Discriminator-based multi-tenancy

    +
  • +
  • +

    Follow-on fetches - Two-phase loading via LoadPlans/EntityGraphs

    +
  • +
+
+
+
+
Applications that currently use Hibernate ORM 4.0 - 4.3
+
+

You should migrate to Hibernate ORM 5.3.x.

+
+
+

For information about the changes implemented between Hibernate 4 and Hibernate 5, see +https://github.com/hibernate/hibernate-orm/blob/main/migration-guide.adoc

+
+
+
+
Applications that currently use Hibernate 3
+
+

You should migrate to Hibernate ORM 5.3.x.

+
+
+
+
+

26.4.4. Web Applications

+
+
JBoss Web Valves
+
+

Undertow does not support the JBoss Web Valve functionality. This can be replaced by Undertow Handlers. See the Undertow Handler Authors Guide for more information.

+
+
+

List of valves that were provided with JBoss Web, together with a corresponding Undertow handler, is provided above, in the section on the JBoss Web subsystem.

+
+
+

JBoss Web Valves are specified in the proprietary jboss-web.xml descriptor, through <valve /> element(s). These can be replaced using the <http-handler /> element(s). For example:

+
+
+
+
<jboss-web>
+    <valve>
+        <class-name>org.apache.catalina.valves.RequestDumperValve</class-name>
+        <module>org.jboss.as.web</module></valve>
+</jboss-web>
+
+
+
+

can be replaced by

+
+
+
+
<jboss-web>
+    <http-handler>
+        <class-name>io.undertow.server.handlers.RequestDumpingHandler</class-name>
+        <module>io.undertow.core</module>
+    </http-handler>
+</jboss-web>
+
+
+
+
+
+

26.4.5. Web Services

+
+
CXF Spring Webservices
+
+

The setup of web service’s endpoints and clients, through a Spring XML descriptor, driving a CXF bus creation, is no longer supported in WildFly.

+
+
+

Any application containing a jbossws-cxf.xml must migrate all functionality specified in such XML descriptor, mostly already supported by the Jakarta XML Web Services specification, included in Jakarta EE. It is still possible to rely on direct Apache CXF API usage, loosing the Jakarta EE portability of the application, for instance when specific Apache CXF functionalities are needed. See the Apache CXF Integration document for further information.

+
+
+
+
Jakarta XML RPC
+
+

Jakarta XML RPC is an API for building Web services and clients that used remote procedure calls (RPC) and XML, which was deprecated in Jakarta EE, and is no longer supported by WildFly.

+
+
+

Jakarta XML RPC Web Services may be identified by the presence of the XML descriptor named webservices.xml, containing a <webservice-description/> element that includes a child element named <jaxrpc-mapping-file/>. An example:

+
+
+
+
<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd" version="1.1">
+    <webservice-description>
+        <webservice-description-name>HelloService</webservice-description-name>
+        <wsdl-file>WEB-INF/wsdl/HelloService.wsdl</wsdl-file>
+        <jaxrpc-mapping-file>WEB-INF/mapping.xml</jaxrpc-mapping-file>
+        <port-component>
+            <port-component-name>Hello</port-component-name>
+            <wsdl-port>HelloPort</wsdl-port>
+            <service-endpoint-interface>org.jboss.chap12.hello.Hello</service-endpoint-interface>
+            <service-impl-bean>
+                <servlet-link>HelloWorldServlet</servlet-link>
+            </service-impl-bean>
+        </port-component>
+    </webservice-description>
+</webservices>
+
+
+
+

Applications using Jakarta XML RPC should be migrated to use Jakarta XML Web Services, the current Jakarta EE standard web service framework.

+
+
+
+
Jakarta RESTful Web Services 2.1
+
+

Jakarta RESTful Web Services 2.1: The Java API for RESTful Web Services specification is located at https://jakarta.ee/specifications/restful-ws/2.1/

+
+
+

Some changes to the MessageBodyWriter interface may represent a backward incompatible change with respect to JAX-RS 1.X.

+
+
+

Be sure to define a @Produces or @Consumes for your endpoints. Failure to do so may result in an error similar to the following.

+
+
+
+
org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: <OBJECT> of media type: <CONTENT_TYPE>
+
+
+
+
+
REST Client API
+
+

Some REST Client API classes and methods are deprecated or removed, for example: org.jboss.resteasy.client.ClientRequest and org.jboss.resteasy.client.ClientResponse have been removed. Instead, use +jakarta.ws.rs.client.Client and jakarta.ws.rs.core.Response. See the resteasy-jaxrs-client quickstart for an example of an external Jakarta RESTful Web Services RESTEasy client that interacts with a Jakarta RESTful Web Services.

+
+
+
+
+

26.4.6. Application Clustering

+
+
HA Singleton
+
+

JBoss AS 7 introduced singleton services - a mechanism for installing an service such that it would only start on one node in the cluster at a time, a HA Singleton. Such mechanism required usage of a private WildFly Clustering API, designed around the class org.jboss.as.clustering.singleton.SingletonService, and was documented in detail at +https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Development_Guide/Implement_an_HA_Singleton.html, and while not difficult to implement, the installation process suffered from a couple shortcomings:

+
+
+
    +
  • +

    Installing multiple singleton services within a single deployment caused the deployer to hang.

    +
  • +
  • +

    Installing a singleton service required the user to specify several private module dependencies in /META-INF/MANIFEST.MF

    +
  • +
+
+
+

WildFly 10 introduces a new public API for building such services, which significantly simplifies the process, and solves the issues found in the legacy solution. The WildFly 10 Quickstart application named cluster-ha-singleton examples a HA Singleton implementation using the new API, and may be found at https://github.com/jboss-developer/jboss-eap-quickstarts/tree/7.0.x-develop/cluster-ha-singleton +.

+
+
+
+
Stateful Session EJB Clustering
+
+

WildFly 10 no longer requires Stateful Session EJBs to use the org.jboss.ejb3.annotation.Clustered annotation to enable clustering behavior. By default, if the server is started using an HA profile, the state of your SFSBs will be replicated automatically. Disabling this behavior is achievable on a per-EJB basis, by annotating your bean using @Stateful(passivationCapable=false), which is new to the EJB 3.2 specification; or globally through the configuration of the EJB3 subsystem, in the server configuration.

+
+
+

Note that the @Clustered annotation, if used by an application, is simply ignored, the application deployment will not fail.

+
+
+
+
Web Session Clustering
+
+

WildFly 10 introduces a new web session clustering implementation, replacing the one found in JBoss AS 7, which has been around for ages (since JBoss AS 3.2!), and was tightly coupled to the legacy JBoss Web subsystem source code. The most relevant changes in the new implementation are:

+
+
+
    +
  • +

    Introduction of a proper session manager SPI, and an Infinispan implementation of it, decoupled from the web subsystem implementation

    +
  • +
  • +

    Sessions are implemented as a facade over one or more cache entries, which means that the container’s session manager itself does not retain a separate reference to each HttpSession

    +
  • +
  • +

    Pessimistic locking of cache entries effectively ensures that only a single client on a single node ever accesses a given session at any given time

    +
  • +
  • +

    Usage of cache entry grouping, instead of atomic maps, to ensure that multiple cache entries belonging to the same session are co-located.

    +
  • +
  • +

    Session operations within a request only ever use a single batch/transaction. This results in fewer RPCs per request.

    +
  • +
  • +

    Support for write-through cache stores, as well as passivation-only cache stores.

    +
  • +
+
+
+

With respect to applications, the new web session clustering implementation deprecates/reinterprets much of the related configuration, which is included in JBoss’s proprietary web application +XML descriptor, jboss-web.xml:

+
+
+
    +
  • +

    <max-active-sessions/>

    +
    +

    Previously, session creation would fail if an additional session would cause the number of active sessions to exceed the value specified by <max-active-sessions/>.

    +
    +
    +

    In the new implementation, <max-active-sessions/> is used to enable session passivation. If session creation would cause the number of active sessions to exceed <max-active-sessions/>, then the oldest session known to the session manager will passivate to make room for the new session.

    +
    +
  • +
  • +

    <passivation-config/>

    +
    +

    This configuration element and its sub-elements are no longer used in WildFly.

    +
    +
  • +
  • +

    <use-session-passivation/>

    +
    +

    Previously, passivation was enabled via this attribute, yet in the new implementation, passivation is enabled by specifying a non-negative value for <max-active-sessions/>.

    +
    +
  • +
  • +

    <passivation-min-idle-time/>

    +
    +

    Previously, sessions needed to be active for at least a specific amount of time before becoming a candidate for passivation. This could cause session creation to fail, even when passivation was enabled.

    +
    +
    +

    The new implementation does not support this logic and thus avoids this DoS vulnerability.

    +
    +
  • +
  • +

    <passivation-max-idle-time/>

    +
    +

    Previously, a session would be passivated after it was idle for a specific amount of time.

    +
    +
    +

    The new implementation does not support eager passivation - only lazy passivation. Sessions are only passivated when necessary to comply with <max-active-sessions/>.

    +
    +
  • +
  • +

    <replication-config/>

    +
    +

    The new implementation deprecates a number of sub-elements.

    +
    +
  • +
  • +

    <replication-trigger/>

    +
    +

    Previously, session attributes could be treated as either mutable or immutable depending on the values specified by <replication-trigger/>:

    +
    +
    +
      +
    • +

      SET treated all attributes as immutable, requiring a separate HttpSession.setAttribute(…​) to indicate that the value changed.

      +
    • +
    • +

      SET_AND_GET treated all session attributes as mutable.

      +
    • +
    • +

      SET_AND_NON_PRIMITIVE_GET recognized a small set of types, for example strings and boxed primitives, as immutable, and assumed that any other attribute was mutable.

      +
      +

      The new implementation replaces this configuration option with a single, robust strategy. Session attributes are assumed to be mutable unless one of the following is true:

      +
      +
    • +
    • +

      The value is a known immutable value:

      +
      +
        +
      • +

        null

        +
      • +
      • +

        java.util.Collections.EMPTY_LIST, EMPTY_MAP, EMPTY_SET

        +
      • +
      +
      +
    • +
    • +

      The value type is or implements a known immutable type:

      +
      +
        +
      • +

        Boolean, Byte, Character, Double, Float, Integer, Long, Short

        +
      • +
      • +

        java.lang.Enum, StackTraceElement, String

        +
      • +
      • +

        java.io.File, java.nio.file.Path

        +
      • +
      • +

        java.math.BigDecimal, BigInteger, MathContext

        +
      • +
      • +

        java.net.InetAddress, InetSocketAddress, URI, URL

        +
      • +
      • +

        java.security.Permission

        +
      • +
      • +

        java.util.Currency, Locale, TimeZone, UUID

        +
      • +
      +
      +
    • +
    • +

      The value type is annotated with @org.wildfly.clustering.web.annotation.Immutable

      +
    • +
    +
    +
  • +
  • +

    <use-jk/>

    +
    +

    Previously, the instance-id of the node handling a given request was appended to the jsessionid, for use by load balancers such as mod_jk, mod_proxy_balancer, mod_cluster, etc., depending on the value specified for <use-jk/>. In the new implementation, the instance-id, if defined, is always appended to the jsessionid.

    +
    +
  • +
  • +

    <max-unreplicated-interval/>

    +
    +

    Previously, this configuration option was an optimization that would prevent the replicate of a session’s timestamp if no session attribute was changed. While this sounds nice, in practice it doesn’t prevent any RPCs, since session access requires cache transaction RPCs regardless of +whether any session attributes changed. In the new implementation, the timestamp of a session is replicated on every request. This prevents stale session meta data following failover.

    +
    +
  • +
  • +

    <snapshot-mode/>

    +
    +

    Previously, one could configure <snapshot-mode/> as INSTANT or INTERVAL. Infinispan’s replication queue renders this configuration option obsolete.

    +
    +
  • +
  • +

    <snapshot-interval/>

    +
    +

    Only relevant for <snapshot-mode>INTERVAL</snapshot-mode>. See above.

    +
    +
  • +
  • +

    <session-notification-policy/>

    +
    +

    Previously, the value defined by this attribute defined a policy for triggering session events. In the new implementation, this behavior is spec-driven and not configurable.

    +
    +
  • +
+
+
+
+
+

26.4.7. Other Specifications and Frameworks

+
+
Remote JNDI Clients
+
+

WildFly 10’s default JNDI Provider URL has changed, which means that external applications, using JNDI to lookup remote resources, for instance an EJB or a Jakarta Messaging Queue, may need to change the value for the JNDI InitialContext environment’s property named +java.naming.provider.url. The default URL scheme is now +http-remoting, and the default URL port is now 8080.

+
+
+

As an example, considering the application server host is localhost, +then clients previously accessing WildFly 10 would use

+
+
+
+
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory
+java.naming.provider.url=remote://localhost:4447
+
+
+
+

while clients now accessing WildFly should use instead

+
+
+
+
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory
+java.naming.provider.url=http-remoting://localhost:8080
+
+
+
+
+
JSR-88
+
+

The specification which aimed to standardize deployment tasks got very little adoption, due to much more "feature rich" proprietary solutions already included in every vendor application server. It was no surprise that JSR-88 support was dropped from Jakarta EE, and WildFly followed that and dropped support too.

+
+
+

A JSR-88 deployment plan is identified by a XML descriptor named deployment-plan.xml, bundled in a zip/jar archive.

+
+
+
+
Module Dependencies
+
+

Applications defining dependencies to WildFly modules, through the application’s package MANIFEST.MF or jboss-deployment-structure.xml, may be referencing missing modules. When migrating an application, relying on such functionality, the presence of the referenced modules should be validated in advance.

+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+
+
+

27. How do I migrate my application from WebLogic to WildFly

+
+
+

The purpose of this guide is to document the application changes that +are needed to successfully run and deploy WebLogic applications on +WildFly.

+
+
+ + + + + +
+ + +Feel free to add content in any way you prefer. You do not need to +follow the template below. This is a work in progress. +
+
+
+

27.1. Introduction

+
+

27.1.1. About this Guide

+
+

The purpose of this document is to guide you through the planning +process and migration of fairly simple and standard Oracle WebLogic +applications to WildFly. O

+
+
+
+
+
+
+

28. How do I migrate my application from WebSphere to WildFly

+
+
+

The purpose of this guide is to document the application changes that +are needed to successfully run and deploy WebLogic applications on +WildFly.

+
+
+ + + + + +
+ + +Feel free to add content in any way you prefer. You do not need to +follow the template below. This is a work in progress. +
+
+
+

28.1. Introduction

+
+

28.1.1. About this Guide

+
+

The purpose of this document is to guide you through the planning +process and migration of fairly simple and standard Oracle WebLogic +applications to WildFly.

+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Extending_WildFly.html b/latest/Extending_WildFly.html new file mode 100644 index 000000000..023d5e471 --- /dev/null +++ b/latest/Extending_WildFly.html @@ -0,0 +1,8758 @@ + + + + + + + + +Extending WildFly + + + + + + + +
+
+
+
+

In this document we provide an example of how to extend the kernel +functionality of WildFly via an extension and the subsystem it installs. +The WildFly kernel is very simple and lightweight; most of the +capabilities people associate with an application server are provided +via extensions and their subsystems. The WildFly distribution includes +many extensions and subsystems; the webserver integration is via a +subsystem; the transaction manager integration is via a subsystem, the +Jakarta Enterprise Beans container integration is via a subsystem, etc.

+
+
+

This document is divided into two main sections. The +first is focused on learning by doing. This +section will walk you through the steps needed to create your own +subsystem, and will touch on most of the concepts discussed elsewhere in +this guide. The +second +focuses on a conceptual overview of the key interfaces and classes +described in the example. Readers should feel free to start with the +second section if that better fits their learning style. Jumping back +and forth between the sections is also a good strategy.

+
+ +
+
+
+

1. Target Audience

+
+
+

1.1. Prerequisites

+
+

You should know how to download, install and run WildFly. If not please +consult the Getting Started Guide. You +should also be familiar with the management concepts from the +Admin Guide, particularly the +Core management concepts section and +you need Java development experience to follow the example in this +guide.

+
+
+
+

1.2. Examples in this guide

+
+

Most of the examples in this guide are being expressed as excerpts of +the XML configuration files or by using a representation of the de-typed +management model.

+
+
+
+
+
+

2. Example subsystem

+
+
+

Our example subsystem will keep track of all deployments of certain +types containing a special marker file, and expose operations to see how +long these deployments have been deployed.

+
+
+

2.1. Create the skeleton project

+
+

To make your life easier we have provided a maven archetype which will +create a skeleton project for implementing subsystems.

+
+
+
+
mvn archetype:generate \
+    -DarchetypeArtifactId=wildfly-subsystem \
+    -DarchetypeGroupId=org.wildfly.archetype \
+    -DarchetypeVersion=26.1.0.Final \
+    -DarchetypeRepository=https://repository.jboss.org/nexus/content/groups/public
+
+
+
+

Maven will download the archetype and it’s dependencies, and ask you +some questions:

+
+
+
+
$ mvn archetype:generate \
+    -DarchetypeArtifactId=wildfly-subsystem \
+    -DarchetypeGroupId=org.wildfly.archetype \
+    -DarchetypeVersion=26.1.0.Final \
+    -DarchetypeRepository=https://repository.jboss.org/nexus/content/groups/public
+[INFO] Scanning for projects...
+[INFO]
+[INFO] ------------------------------------------------------------------------
+[INFO] Building Maven Stub Project (No POM) 1
+[INFO] ------------------------------------------------------------------------
+[INFO]
+ 
+.........
+ 
+Define value for property 'module': com.acme.corp.tracker
+Define value for property 'groupId': com.acme.corp
+Define value for property 'artifactId': acme-subsystem
+Define value for property 'version':  1.0-SNAPSHOT: :
+Define value for property 'package':  com.acme.corp: : com.acme.corp.tracker
+[INFO] Using property: name = WildFly subsystem project
+Confirm properties configuration:
+groupId: com.acme.corp
+artifactId: acme-subsystem
+version: 1.0-SNAPSHOT
+package: com.acme.corp.tracker
+module: com.acme.corp.tracker
+name: WildFly subsystem project
+ Y: : Y
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 1:42.563s
+[INFO] Finished at: Fri Jul 08 14:30:09 BST 2011
+[INFO] Final Memory: 7M/81M
+[INFO] ------------------------------------------------------------------------
+$
+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Instruction

1

Enter the module name you wish to use for your extension.

2

Enter the groupId you wish to use

3

Enter the artifactId you wish to use

4

Enter the version you wish to use, or just hit Enter if you wish to +accept the default 1.0-SNAPSHOT

5

Enter the java package you wish to use, or just hit Enter if you +wish to accept the default (which is copied from groupId ).

6

Finally, if you are happy with your choices, hit Enter and Maven +will generate the project for you.

+
+

We now have a skeleton project that you can use to +implement a subsystem. Import the  acme-subsystem project into your +favourite IDE. A nice side-effect of running this in the IDE is that you +can see the javadoc of WildFly classes and interfaces imported by the +skeleton code. If you do a mvn install in the project it will work if +we plug it into WildFly, but before doing that we will change it to do +something more useful.

+
+
+

The rest of this section modifies the skeleton project created by the +archetype to do something more useful, and the full code can be found in +acme-subsystem.zip.

+
+
+

If you do a mvn install in the created project, you will see some +tests being run

+
+
+
+
$mvn install
+[INFO] Scanning for projects...
+[...]
+[INFO] Surefire report directory: /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/surefire-reports
+ 
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running com.acme.corp.tracker.extension.SubsystemBaseParsingTestCase
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.424 sec
+Running com.acme.corp.tracker.extension.SubsystemParsingTestCase
+Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.074 sec
+ 
+Results :
+ 
+Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
+[...]
+
+
+
+

We will talk about these later in the +#Testing the +parsers section.

+
+
+
+

2.2. Create the schema

+
+

First, let us define the schema for our subsystem. Rename +src/main/resources/schema/mysubsystem.xsd to +src/main/resources/schema/acme.xsd. Then open acme.xsd and modify it +to the following

+
+
+
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="urn:com.acme.corp.tracker:1.0"
+            xmlns="urn:com.acme.corp.tracker:1.0"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="1.0">
+ 
+   <!-- The subsystem root element -->
+   <xs:element name="subsystem" type="subsystemType"/>
+   <xs:complexType name="subsystemType">
+      <xs:all>
+         <xs:element name="deployment-types" type="deployment-typesType"/>
+      </xs:all>
+   </xs:complexType>
+   <xs:complexType name="deployment-typesType">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+         <xs:element name="deployment-type" type="deployment-typeType"/>
+      </xs:choice>
+   </xs:complexType>
+   <xs:complexType name="deployment-typeType">
+      <xs:attribute name="suffix" use="required"/>
+      <xs:attribute name="tick" type="xs:long" use="optional" default="10000"/>
+   </xs:complexType>
+</xs:schema>
+
+
+
+

Note that we modified the xmlns and targetNamespace values to  +urn.com.acme.corp.tracker:1.0. Our new subsystem element has a child +called deployment-types, which in turn can have zero or more children +called deployment-type. Each deployment-type has a required suffix +attribute, and a tick attribute which defaults to true.

+
+
+

Now modify the  com.acme.corp.tracker.extension.SubsystemExtension +class to contain the new namespace.

+
+
+
+
public class SubsystemExtension implements Extension {
+ 
+    /** The name space used for the {@code substystem} element */
+    public static final String NAMESPACE = "urn:com.acme.corp.tracker:1.0";
+    ...
+
+
+
+
+

2.3. Design and define the model structure

+
+

The following example xml contains a valid subsystem configuration, we +will see how to plug this in to WildFly later in this tutorial.

+
+
+
+
<subsystem xmlns="urn:com.acme.corp.tracker:1.0">
+   <deployment-types>
+      <deployment-type suffix="sar" tick="10000"/>
+      <deployment-type suffix="war" tick="10000"/>
+   </deployment-types>
+</subsystem>
+
+
+
+

Now when designing our model, we can either do a one to one mapping +between the schema and the model or come up with something slightly or +very different. To keep things simple, let us stay pretty true to the +schema so that when executing a :read-resource(recursive=true) against +our subsystem we’ll see something like:

+
+
+
+
{
+    "outcome" => "success",
+    "result" => {"type" => {
+        "sar" => {"tick" => "10000"},
+        "war" => {"tick" => "10000"}
+    }}
+}
+
+
+
+

Each deployment-type in the xml becomes in the model a child resource +of the subsystem’s root resource. The child resource’s child-type is +type, and it is indexed by its suffix. Each type resource then +contains the tick attribute.

+
+
+

We also need a name for our subsystem, to do that change +com.acme.corp.tracker.extension.SubsystemExtension:

+
+
+
+
public class SubsystemExtension implements Extension {
+    ...
+    /** The name of our subsystem within the model. */
+    public static final String SUBSYSTEM_NAME = "tracker";
+    ...
+
+
+
+

Modify the src/main/resources/com/acme/corp/tracker/LocalDescriptions.properties +with the new extension name, too

+
+
+
+
tracker=My Tracker subsystem
+tracker.add=Operation Adds subsystem
+tracker.remove=Operation Removes subsystem
+tracker.type=The type of file
+tracker.type.add=Operation Adds type child
+tracker.type.remove=Operation Removes type child
+tracker.type.tick=The tick time in millis
+
+
+
+

Once we are finished our subsystem will be available under +/subsystem=tracker.

+
+
+

The SubsystemExtension.initialize() method defines the model, +currently it sets up the basics to add our subsystem to the model:

+
+
+
+
@Override
+public void initialize(ExtensionContext context) {
+    //register subsystem with its model version
+        final SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, ModelVersion.create(1, 0));
+    //register subsystem model with subsystem definition that defines all attributes and operations
+        final ManagementResourceRegistration registration = subsystem.registerSubsystemModel(SubsystemDefinition.INSTANCE);
+    //register describe operation, note that this can be also registered in SubsystemDefinition
+    registration.registerOperationHandler(GenericSubsystemDescribeHandler.DEFINITION, GenericSubsystemDescribeHandler.INSTANCE);
+        //we can register additional submodels here
+    //
+    subsystem.registerXMLElementWriter(parser);
+}
+
+
+
+

The registerSubsystem() call registers our subsystem with the +extension context. At the end of the method we register our parser with +the returned SubsystemRegistration to be able to marshal our +subsystem’s model back to the main configuration file when it is +modified. We will add more functionality to this method later.

+
+
+

2.3.1. Registering the core subsystem model

+
+

Next we obtain a ManagementResourceRegistration by registering the +subsystem model. This is a compulsory step for every new subsystem.

+
+
+
+
final ManagementResourceRegistration registration = subsystem.registerSubsystemModel(SubsystemDefinition.INSTANCE);
+
+
+
+

Its parameter is an implementation of the ResourceDefinition +interface, which means that when you call +/subsystem=tracker:read-resource-description the information you see +comes from model that is defined by SubsystemDefinition.INSTANCE.

+
+
+
+
public class SubsystemDefinition extends PersistentResourceDefinition {
+
+    static final AttributeDefinition[] ATTRIBUTES = { /* you can include attributes here */ };
+
+    static final SubsystemDefinition INSTANCE = new SubsystemDefinition();
+
+    private SubsystemDefinition() {
+        super(SubsystemExtension.SUBSYSTEM_PATH,
+                SubsystemExtension.getResourceDescriptionResolver(null),
+                //We always need to add an 'add' operation
+                SubsystemAdd.INSTANCE,
+                //Every resource that is added, normally needs a remove operation
+                SubsystemRemove.INSTANCE);
+    }
+
+    @Override
+    public void registerOperations(ManagementResourceRegistration resourceRegistration) {
+        super.registerOperations(resourceRegistration);
+        //you can register additional operations here
+    }
+
+    @Override
+    public Collection<AttributeDefinition> getAttributes() {
+        return Arrays.asList(ATTRIBUTES);
+    }
+}
+
+
+
+

Since we need child resource type we need to add new +ResourceDefinition,

+
+
+

The ManagementResourceRegistration obtained in +SubsystemExtension.initialize() is then used to add additional +operations or to register submodels to the /subsystem=tracker address. +Every subsystem and resource must have an ADD method which can be +achieved by providing it in constructor of your ResourceDefinition +just as we did in example above.

+
+
+

Let us first look at the description provider which is quite simple, +it provides information (description, list of attributes, list of children) +describing the structure of an addressable model node or operation.

+
+
+

There are three way to define DescriptionProvider, one is by defining it +by hand using ModelNode, but as this has show to be very error prone +there are lots of helper methods to help you automatically describe the +model. Following example is done by manually defining Description +provider for ADD operation handler

+
+
+
+
/**
+     * Used to create the description of the subsystem add method
+     */
+    public static DescriptionProvider SUBSYSTEM_ADD = new DescriptionProvider() {
+        public ModelNode getModelDescription(Locale locale) {
+            //The locale is passed in so you can internationalize the strings used in the descriptions
+ 
+            final ModelNode subsystem = new ModelNode();
+            subsystem.get(OPERATION_NAME).set(ADD);
+            subsystem.get(DESCRIPTION).set("Adds the tracker subsystem");
+ 
+            return subsystem;
+        }
+    };
+
+
+
+

You can also use API that helps you do that for you. SimpleOperationDefinitionBuilder +is the class for the case. With a set of fields to build operation’s definitions. +In case you use PersistentResourceDefinition even that part is hidden from you.

+
+
+
+
// Registration of an add operation
+resourceRegistration.registerOperationHandler(new SimpleOperationDefinitionBuilder(ModelDescriptionConstants.ADD, SubsystemExtension.getResourceDescriptionResolver(null)).build(), SubsystemAdd.INSTANCE);
+// Registration of a remove operation
+resourceRegistration.registerOperationHandler(new SimpleOperationDefinitionBuilder(ModelDescriptionConstants.REMOVE, SubsystemExtension.getResourceDescriptionResolver(null)).build(), SubsystemAdd.INSTANCE);
+// Registration of a custom operation
+resourceRegistration.registerOperationHandler(new SimpleOperationDefinitionBuilder("mime-type", SubsystemExtension.getResourceDescriptionResolver("container.mime-mapping")).build(), new MimeTypeStepOperationHandler());
+
+
+
+

The last one is implicit used when you pass the operation handler through the +SimpleResourceDefinition class constructor. A DefaultResourceAddDescriptionProvider +will be create under the hood. For this reason, you don’t need to add a description +provider explicit in this example

+
+
+
+
// The framework will take care to handle a default `DescriptionProvider`
+private SubsystemDefinition() {
+    super(SubsystemExtension.SUBSYSTEM_PATH,
+            SubsystemExtension.getResourceDescriptionResolver(null),
+            //We always need to add an 'add' operation
+            SubsystemAdd.INSTANCE,
+            //Every resource that is added, normally needs a remove operation
+            SubsystemRemove.INSTANCE);
+}
+
+
+
+

Next we have the actual operation handler instance, note that we have +changed its populateModel() method to initialize the type child of +the model.

+
+
+
+
class SubsystemAdd extends AbstractBoottimeAddStepHandler {
+ 
+    static final SubsystemAdd INSTANCE = new SubsystemAdd();
+
+    private final Logger log = Logger.getLogger(SubsystemAdd.class); 
+
+    private SubsystemAdd() {
+        super(SubsystemDefinition.ATTRIBUTES);
+    }
+ 
+    /** {@inheritDoc} */
+    @Override
+    protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
+        log.info("Populating the model");
+        //Initialize the 'type' child node
+        model.get("type").setEmptyObject();
+    }
+    ....
+
+
+
+

SubsystemAdd also has a performBoottime() method which is used for +initializing the deployer chain associated with this subsystem. We will +talk about the deployers later on. However, the basic idea for all +operation handlers is that we do any model updates before changing the +actual runtime state.

+
+
+

SubsystemRemove extends AbstractRemoveStepHandler which takes care +of removing the resource from the model so we don’t need to override its +performRemove() operation, also the add handler did not install any +services (services will be discussed later) so we can delete the methods +performRuntime() and recoverServices() generated by the archetype.

+
+
+
+
class SubsystemRemove extends AbstractRemoveStepHandler {
+ 
+    static final SubsystemRemove INSTANCE = new SubsystemRemove();
+ 
+    private final Logger log = Logger.getLogger(SubsystemRemove.class);
+ 
+    private SubsystemRemove() {
+    }
+}
+
+
+
+

The description provider for the remove operation is simple and quite +similar to that of the add handler where just name of the method +changes.

+
+
+
+

2.3.2. Registering the subsystem child

+
+

The type child does not exist in our skeleton project so we need to +implement the operations to add and remove them from the model.

+
+
+

Create two constant in SubsystemExtension with the the name and property of +the new child, and mount child path

+
+
+
+
class SubsystemExtension extends Extension {
+    ...
+    protected static final String TICK = "tick";
+    protected static final String TYPE = "type";
+    protected static final PathElement TYPE_PATH = PathElement.pathElement(TYPE);
+    ...
+
+
+
+

Now, we need an add operation to add the type child. Create a class +called com.acme.corp.tracker.extension.TypeAddHandler. In this case we +extend the org.jboss.as.controller.AbstractAddStepHandler. +org.jboss.as.controller.OperationStepHandler is the main +interface for the operation handlers, and AbstractAddStepHandler is an +implementation of that which does the plumbing work for adding a +resource to the model.

+
+
+
+
class TypeAddHandler extends AbstractAddStepHandler {
+ 
+    public static final TypeAddHandler INSTANCE = new TypeAddHandler();
+ 
+    private TypeAddHandler() {
+    }
+
+
+
+

Then we define subsystem model. Lets call it TypeDefinition and for +ease of use let declare just the tick attribute.

+
+
+
+
public class TypeDefinition {
+ 
+    public static final TypeDefinition INSTANCE = new TypeDefinition();
+ 
+ //we define attribute named tick
+    protected static final SimpleAttributeDefinition TICK =
+        new SimpleAttributeDefinitionBuilder(SubsystemExtension.TICK, ModelType.LONG)
+          .setAllowExpression(true)
+          .setXmlName(SubsystemExtension.TICK)
+          .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES)
+          .setDefaultValue(new ModelNode(1000))
+          .setRequired(true)
+          .build();
+ 
+}
+
+
+
+

Which will take care of describing the model for us. As you can see in +example above we define SimpleAttributeDefinition named TICK, this +is a mechanism to define Attributes in more type safe way and to add +more common API to manipulate attributes. As you can see here we define +default value of 1000 as also other constraints and capabilities. There +could be other properties set such as validators, alternate names, xml +name, flags for marking it attribute allows expressions and more.

+
+
+

Then we do the work of updating the model by implementing the +populateModel() method from the AbstractAddStepHandler, which +populates the model’s attribute from the operation parameters. First we +get hold of the model relative to the address of this operation (we will +see later that we will register it against /subsystem=tracker/type=*), +so we just specify an empty relative address, and we then populate our +model with the parameters from the operation. There is operation +validateAndSet on AttributeDefinition that helps us validate and set +the model based on definition of the attribute.

+
+
+
+
public class TypeAddHandler extends AbstractAddStepHandler {
+    ...
+    @Override
+    protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
+        TypeDefinition.TICK.validateAndSet(operation,model);
+    }
+    ...
+
+
+
+

We then override the performRuntime() method to perform our runtime +changes, which in this case involves installing a service into the +controller at the heart of WildFly. ( +AbstractAddStepHandler.performRuntime() is similar to +AbstractBoottimeAddStepHandler.performBoottime() in that the model is +updated before runtime changes are made.

+
+
+
+
public class TypeAddHandler extends AbstractAddStepHandler {
+    ...
+    @Override
+    protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
+        String suffix = PathAddress.pathAddress(operation.get(ModelDescriptionConstants.ADDRESS)).getLastElement().getValue();
+        long tick = TypeDefinition.TICK.resolveModelAttribute(context,model).asLong();
+        TrackerService service = new TrackerService(suffix, tick);
+        ServiceName serviceName = TrackerService.createServiceName(suffix);
+
+        context.getServiceTarget()
+                .addService(serviceName)
+                .setInstance(service)
+                .setInitialMode(Mode.ACTIVE)
+                .install();
+    }
+    ...
+}
+
+
+
+

Since the add methods will be of the format +/subsystem=tracker/suffix=war:add(tick=1234), we look for the last +element of the operation address, which is war in the example just +given and use that as our suffix. We then create an instance of +TrackerService and install that into the service target of the context +and add the created service controller to the newControllers list.

+
+
+

The tracker service is quite simple. All services installed into WildFly +must implement the org.jboss.msc.Service interface.

+
+
+
+
public class TrackerService implements Service {
+
+
+
+

We then have some fields to keep the tick count and a thread which when +run outputs all the deployments registered with our service.

+
+
+
+
private AtomicLong tick = new AtomicLong(10000);
+ 
+private Set<String> deployments = Collections.synchronizedSet(new HashSet<String>());
+private Set<String> coolDeployments = Collections.synchronizedSet(new HashSet<String>());
+private final String suffix;
+ 
+private Thread OUTPUT = new Thread() {
+    @Override
+    public void run() {
+        while (true) {
+            try {
+                Thread.sleep(tick.get());
+                System.out.println("Current deployments deployed while " + suffix + " tracking active:\n" + deployments
+                   + "\nCool: " + coolDeployments.size());
+            } catch (InterruptedException e) {
+                interrupted();
+                break;
+            }
+        }
+    }
+};
+ 
+public TrackerService(String suffix, long tick) {
+    this.suffix = suffix;
+    this.tick.set(tick);
+}
+
+
+
+

Next we have three methods which come from the Service interface. +getValue() returns this service, start() is called when the service +is started by the controller, stop is called when the service is +stopped by the controller, and they start and stop the thread outputting +the deployments.

+
+
+
+
@Override
+public TrackerService getValue() throws IllegalStateException, IllegalArgumentException {
+    return this;
+}
+ 
+@Override
+public void start(StartContext context) throws StartException {
+    OUTPUT.start();
+}
+ 
+@Override
+public void stop(StopContext context) {
+    OUTPUT.interrupt();
+}
+
+
+
+

Next we have a utility method to create the ServiceName which is used +to register the service in the controller.

+
+
+
+
public static ServiceName createServiceName(String suffix) {
+        return ServiceName.JBOSS.append("tracker", suffix);
+}
+
+
+
+

Finally we have some methods to add and remove deployments, and to set +and read the tick. The 'cool' deployments will be explained later.

+
+
+
+
public void addDeployment(String name) {
+    deployments.add(name);
+}
+ 
+public void addCoolDeployment(String name) {
+    coolDeployments.add(name);
+}
+ 
+public void removeDeployment(String name) {
+    deployments.remove(name);
+    coolDeployments.remove(name);
+}
+ 
+void setTick(long tick) {
+    this.tick.set(tick);
+}
+ 
+public long getTick() {
+    return this.tick.get();
+}
+}//TrackerService - end
+
+
+
+

Since we are able to add type children, we need a way to be able to +remove them, so we create a +com.acme.corp.tracker.extension.TypeRemoveHandler. In this case we +extend AbstractRemoveStepHandler which takes care of removing the +resource from the model so we don’t need to override its +performRemove() operation. Once the add handler installs the TrackerService, +we need to remove that in the performRuntime() method.

+
+
+
+
public class TypeRemoveHandler extends AbstractRemoveStepHandler {
+ 
+    public static final TypeRemoveHandler INSTANCE = new TypeRemoveHandler();
+ 
+    private TypeRemoveHandler() {
+    }
+ 
+ 
+    @Override
+    protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
+        String suffix = PathAddress.pathAddress(operation.get(ModelDescriptionConstants.ADDRESS)).getLastElement().getValue();
+        ServiceName name = TrackerService.createServiceName(suffix);
+        context.removeService(name);
+    }
+ 
+}
+
+
+
+

So far TypeDefinition is just a simple Java class, however, it must be an +addressable management resource. Modify this class to extend SimpleResourceDefinition, +register the Add and Remove handlers created before and register the TICK attribute:

+
+
+
+
public class TypeDefinition extends SimpleResourceDefinition {
+
+    public static final TypeDefinition INSTANCE = new TypeDefinition();
+
+    protected static final SimpleAttributeDefinition TICK =
+            new SimpleAttributeDefinitionBuilder(SubsystemExtension.TICK, ModelType.LONG)
+              .setAllowExpression(true)
+              .setXmlName(SubsystemExtension.TICK)
+              .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES)
+              .setDefaultValue(new ModelNode(1000))
+              .setRequired(true)
+              .build();
+
+    public TypeDefinition() {
+        super(
+                SubsystemExtension.TYPE_PATH,
+                SubsystemExtension.getResourceDescriptionResolver(SubsystemExtension.TYPE),
+                TypeAddHandler.INSTANCE,
+                TypeRemoveHandler.INSTANCE
+        );
+    }
+
+    @Override
+    public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
+        resourceRegistration.registerReadWriteAttribute(TICK, null, TrackerTickHandler.INSTANCE);
+    }
+
+}
+
+
+
+

Then finally we need to specify that our new type child and associated +handlers go under /subsystem=tracker/type=* in the model by adding +registering it with the model in SubsystemExtension.initialize(). So +we add the following just before the end of the method.

+
+
+
+
@Override
+public void initialize(ExtensionContext context){
+    final SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, ModelVersion.create(1, 0));
+    final ManagementResourceRegistration registration = subsystem.registerSubsystemModel(SubsystemExtension.INSTANCE);
+    registration.registerOperationHandler(GenericSubsystemDescribeHandler.DEFINITION, GenericSubsystemDescribeHandler.INSTANCE);
+    //Add the type child
+    ManagementResourceRegistration typeChild = registration.registerSubModel(TypeDefinition.INSTANCE);
+    subsystem.registerXMLElementWriter(parser);
+}
+
+
+
+

The above first creates a child of our main subsystem registration for +the relative address type=*, and gets the typeChild registration.
+To this we add the TypeAddHandler and TypeRemoveHandler.
+The add variety is added under the name add and the remove handler +under the name remove, and for each registered operation handler we +use the handler singleton instance as both the handler parameter and as +the DescriptionProvider.

+
+
+

Finally, we register tick as a read/write attribute, the null +parameter means we don’t do anything special with regards to reading it, +for the write handler we supply it with an operation handler called +TrackerTickHandler.
+Registering it as a read/write attribute means we can use the +:write-attribute operation to modify the value of the parameter, and +it will be handled by TrackerTickHandler.

+
+
+

Not registering a write attribute handler makes the attribute read only.

+
+
+

TrackerTickHandler extends AbstractWriteAttributeHandler
+directly, and so must implement its applyUpdateToRuntime and +revertUpdateToRuntime method.
+This takes care of model manipulation (validation, setting) but leaves +us to do just to deal with what we need to do.

+
+
+
+
class TrackerTickHandler extends AbstractWriteAttributeHandler<Void> {
+ 
+    public static final TrackerTickHandler INSTANCE = new TrackerTickHandler();
+ 
+    private TrackerTickHandler() {
+        super(TypeDefinition.TICK);
+    }
+ 
+    protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName,
+              ModelNode resolvedValue, ModelNode currentValue, HandbackHolder<Void> handbackHolder) throws OperationFailedException {
+ 
+        modifyTick(context, operation, resolvedValue.asLong());
+ 
+        return false;
+    }
+ 
+    protected void revertUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode valueToRestore, ModelNode valueToRevert, Void handback){
+        modifyTick(context, operation, valueToRestore.asLong());
+    }
+ 
+    private void modifyTick(OperationContext context, ModelNode operation, long value) throws OperationFailedException {
+ 
+        final String suffix = PathAddress.pathAddress(operation.get(ModelDescriptionConstants.ADDRESS)).getLastElement().getValue();
+        TrackerService service = (TrackerService) context.getServiceRegistry(true).getRequiredService(TrackerService.createServiceName(suffix)).getValue();
+        service.setTick(value);
+    }
+ 
+}
+
+
+
+

The operation used to execute this will be of the form +/subsystem=tracker/type=war:write-attribute(name=tick,value=12345) so +we first get the suffix from the operation address, and the tick +value from the operation parameter’s resolvedValue parameter, and use +that to update the model.

+
+
+
+
+

2.4. Parsing and marshalling of the subsystem xml

+
+

WildFly uses the Stax API to parse the xml files. This is initialized in +SubsystemExtension by mapping our parser onto our namespace:

+
+
+
+
public class SubsystemExtension implements Extension {
+ 
+    /** The name space used for the {@code subsystem} element */
+    public static final String NAMESPACE = "urn:com.acme.corp.tracker:1.0";
+    ...
+    protected static final PathElement SUBSYSTEM_PATH = PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME);
+    protected static final PathElement TYPE_PATH = PathElement.pathElement(TYPE);
+ 
+   /** The parser used for parsing our subsystem */
+    private final SubsystemParser parser = new SubsystemParser();
+ 
+   @Override
+    public void initializeParsers(ExtensionParsingContext context) {
+        context.setSubsystemXmlMapping(NAMESPACE, parser);
+    }
+    ...
+
+
+
+

We then need to write the parser. The contract is that we read our +subsystem’s xml and create the operations that will populate the model +with the state contained in the xml. These operations will then be +executed on our behalf as part of the parsing process. The entry point +is the readElement() method.

+
+
+
+
public class SubsystemExtension implements Extension {
+ 
+    /**
+     * The subsystem parser, which uses stax to read and write to and from xml
+     */
+    private static class SubsystemParser implements XMLStreamConstants, XMLElementReader<List<ModelNode>>, XMLElementWriter<SubsystemMarshallingContext> {
+ 
+        /** {@inheritDoc} */
+        @Override
+        public void readElement(XMLExtendedStreamReader reader, List<ModelNode> list) throws XMLStreamException {
+            // Require no attributes
+            ParseUtils.requireNoAttributes(reader);
+ 
+            //Add the main subsystem 'add' operation
+            final ModelNode subsystem = new ModelNode();
+            subsystem.get(OP).set(ADD);
+            subsystem.get(OP_ADDR).set(PathAddress.pathAddress(SUBSYSTEM_PATH).toModelNode());
+            list.add(subsystem);
+ 
+            //Read the children
+            while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
+                if (!reader.getLocalName().equals("deployment-types")) {
+                    throw ParseUtils.unexpectedElement(reader);
+                }
+                while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
+                    if (reader.isStartElement()) {
+                        readDeploymentType(reader, list);
+                    }
+                }
+            }
+        }
+ 
+        private void readDeploymentType(XMLExtendedStreamReader reader, List<ModelNode> list) throws XMLStreamException {
+            if (!reader.getLocalName().equals("deployment-type")) {
+                throw ParseUtils.unexpectedElement(reader);
+            }
+            ModelNode addTypeOperation = new ModelNode();
+            addTypeOperation.get(OP).set(ModelDescriptionConstants.ADD);
+ 
+            String suffix = null;
+            for (int i = 0; i < reader.getAttributeCount(); i++) {
+                String attr = reader.getAttributeLocalName(i);
+                String value = reader.getAttributeValue(i);
+                if (attr.equals("tick")) {
+                    TypeDefinition.TICK.parseAndSetParameter(value, addTypeOperation, reader);
+                } else if (attr.equals("suffix")) {
+                    suffix = value;
+                } else {
+                    throw ParseUtils.unexpectedAttribute(reader, i);
+                }
+            }
+            ParseUtils.requireNoContent(reader);
+            if (suffix == null) {
+                throw ParseUtils.missingRequiredElement(reader, Collections.singleton("suffix"));
+            }
+ 
+            //Add the 'add' operation for each 'type' child
+            PathAddress addr = PathAddress.pathAddress(SUBSYSTEM_PATH, PathElement.pathElement(TYPE, suffix));
+            addTypeOperation.get(OP_ADDR).set(addr.toModelNode());
+            list.add(addTypeOperation);
+        }
+        ...
+
+
+
+

So in the above we always create the add operation for our subsystem. +Due to its address /subsystem=tracker defined by SUBSYSTEM_PATH this +will trigger the SubsystemAdd we created earlier when we invoke +/subsystem=tracker:add. We then parse the child elements and create an +add operation for the child address for each type child. Since the +address will for example be /subsystem=tracker/type=sar (defined by +TYPE_PATH ) and TypeAddHandler is registered for all type +subaddresses the TypeAddHandler will get invoked for those operations. +Note that when we are parsing attribute tick we are using definition +of attribute that we defined in TypeDefintion to parse attribute value +and apply all rules that we specified for this attribute, this also +enables us to property support expressions on attributes.

+
+
+

The parser is also used to marshal the model to xml whenever something +modifies the model, for which the entry point is the writeContent() +method:

+
+
+
+
private static class SubsystemParser implements XMLStreamConstants, XMLElementReader<List<ModelNode>>, XMLElementWriter<SubsystemMarshallingContext> {
+        ...
+        /** {@inheritDoc} */
+        @Override
+        public void writeContent(final XMLExtendedStreamWriter writer, final SubsystemMarshallingContext context) throws XMLStreamException {
+            //Write out the main subsystem element
+            context.startSubsystemElement(SubsystemExtension.NAMESPACE, false);
+            writer.writeStartElement("deployment-types");
+            ModelNode node = context.getModelNode();
+            ModelNode type = node.get(TYPE);
+            for (Property property : type.asPropertyList()) {
+ 
+                //write each child element to xml
+                writer.writeStartElement("deployment-type");
+                writer.writeAttribute("suffix", property.getName());
+                ModelNode entry = property.getValue();
+                TypeDefinition.TICK.marshallAsAttribute(entry, true, writer);
+                writer.writeEndElement();
+            }
+            //End deployment-types
+            writer.writeEndElement();
+            //End subsystem
+            writer.writeEndElement();
+        }
+    }
+
+
+
+

Then we have to implement the SubsystemDescribeHandler which +translates the current state of the model into operations similar to the +ones created by the parser. The SubsystemDescribeHandler is only used +when running in a managed domain, and is used when the host controller +queries the domain controller for the configuration of the profile used +to start up each server. In our case the SubsystemDescribeHandler adds +the operation to add the subsystem and then adds the operation to add +each type child. Since we are using ResourceDefinitinon for defining +subsystem all that is generated for us, but if you want to customize +that you can do it by implementing it like this.

+
+
+
+
private static class SubsystemDescribeHandler implements OperationStepHandler, DescriptionProvider {
+        static final SubsystemDescribeHandler INSTANCE = new SubsystemDescribeHandler();
+ 
+        public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
+            //Add the main operation
+            context.getResult().add(createAddSubsystemOperation());
+ 
+            //Add the operations to create each child
+ 
+            ModelNode node = context.readModel(PathAddress.EMPTY_ADDRESS);
+            for (Property property : node.get("type").asPropertyList()) {
+ 
+                ModelNode addType = new ModelNode();
+                addType.get(OP).set(ModelDescriptionConstants.ADD);
+                PathAddress addr = PathAddress.pathAddress(SUBSYSTEM_PATH, PathElement.pathElement("type", property.getName()));
+                addType.get(OP_ADDR).set(addr.toModelNode());
+                if (property.getValue().hasDefined("tick")) {
+                   TypeDefinition.TICK.validateAndSet(property,addType);
+                }
+                context.getResult().add(addType);
+            }
+            context.completeStep();
+        }
+ 
+ 
+}
+
+
+
+

2.4.1. Testing the parsers

+
+

From 7.0.1 the testing framework is now brought in via the +org.jboss.as:jboss-as-subsystem-test maven artifact, and the test’s +superclass is org.jboss.as.subsystem.test.AbstractSubsystemTest. The +concepts are the same but more and more functionality will be available +as JBoss AS 7 is developed.

+
+
+

Now that we have modified our parsers we need to update our tests to +reflect the new model. There are currently three tests testing the basic +functionality, something which is a lot easier to debug from your IDE +before you plug it into the application server. We will talk about these +tests in turn and they all live in +com.acme.corp.tracker.extension.SubsystemParsingTestCase. +SubsystemParsingTestCase extends AbstractSubsystemTest which does a +lot of the setup for you and contains utility methods for verifying +things from your test. See the javadoc of that class for more +information about the functionality available to you. And by all means +feel free to add more tests for your subsystem, here we are only testing +for the best case scenario while you will probably want to throw in a +few tests for edge cases.

+
+
+

The first test we need to modify is testParseSubsystem(). It tests +that the parsed xml becomes the expected operations that will be parsed +into the server, so let us tweak this test to match our subsystem. First +we tell the test to parse the xml into operations

+
+
+
+
@Test
+public void testParseSubsystem() throws Exception {
+    //Parse the subsystem xml into operations
+    String subsystemXml =
+            "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
+            "   <deployment-types>" +
+            "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
+            "   </deployment-types>" +
+            "</subsystem>";
+    List<ModelNode> operations = super.parse(subsystemXml);
+
+
+
+

There should be one operation for adding the subsystem itself and an +operation for adding the deployment-type, so check we got two +operations

+
+
+
+
///Check that we have the expected number of operations
+Assert.assertEquals(2, operations.size());
+
+
+
+

Now check that the first operation is add for the address +/subsystem=tracker:

+
+
+
+
//Check that each operation has the correct content
+//The add subsystem operation will happen first
+ModelNode addSubsystem = operations.get(0);
+Assert.assertEquals(ADD, addSubsystem.get(OP).asString());
+PathAddress addr = PathAddress.pathAddress(addSubsystem.get(OP_ADDR));
+Assert.assertEquals(1, addr.size());
+PathElement element = addr.getElement(0);
+Assert.assertEquals(SUBSYSTEM, element.getKey());
+Assert.assertEquals(SubsystemExtension.SUBSYSTEM_NAME, element.getValue());
+
+
+
+

Then check that the second operation is add for the address +/subsystem=tracker, and that 12345 was picked up for the value of +the tick parameter:

+
+
+
+
//Then we will get the add type operation
+    ModelNode addType = operations.get(1);
+    Assert.assertEquals(ADD, addType.get(OP).asString());
+    Assert.assertEquals(12345, addType.get("tick").asLong());
+    addr = PathAddress.pathAddress(addType.get(OP_ADDR));
+    Assert.assertEquals(2, addr.size());
+    element = addr.getElement(0);
+    Assert.assertEquals(SUBSYSTEM, element.getKey());
+    Assert.assertEquals(SubsystemExtension.SUBSYSTEM_NAME, element.getValue());
+    element = addr.getElement(1);
+    Assert.assertEquals("type", element.getKey());
+    Assert.assertEquals("tst", element.getValue());
+}
+
+
+
+

The second test we need to modify is testInstallIntoController() which +tests that the xml installs properly into the controller. In other words +we are making sure that the add operations we created earlier work +properly. First we create the xml and install it into the controller. +Behind the scenes this will parse the xml into operations as we saw in +the last test, but it will also create a new controller and boot that up +using the created operations

+
+
+
+
@Test
+public void testInstallIntoController() throws Exception {
+    //Parse the subsystem xml and install into the controller
+    String subsystemXml =
+            "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
+            "   <deployment-types>" +
+            "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
+            "   </deployment-types>" +
+            "</subsystem>";
+    KernelServices services = super.createKernelServicesBuilder(null).setSubsystemXml(subsystemXml).build();
+
+
+
+

The returned KernelServices allow us to execute operations on the +controller, and to read the whole model.

+
+
+
+
//Read the whole model and make sure it looks as expected
+ModelNode model = services.readWholeModel();
+//Useful for debugging :-)
+//System.out.println(model);
+
+
+
+

Now we make sure that the structure of the model within the controller +has the expected format and values

+
+
+
+
    Assert.assertTrue(model.get(SUBSYSTEM).hasDefined(SubsystemExtension.SUBSYSTEM_NAME));
+    Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME).hasDefined("type"));
+    Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type").hasDefined("tst"));
+    Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "tst").hasDefined("tick"));
+    Assert.assertEquals(12345, model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "tst", "tick").asLong());
+}
+
+
+
+

The last test provided is called testParseAndMarshalModel(). It’s main +purpose is to make sure that our SubsystemParser.writeContent() works +as expected. This is achieved by starting a controller in the same way +as before

+
+
+
+
@Test
+public void testParseAndMarshalModel() throws Exception {
+    //Parse the subsystem xml and install into the first controller
+    String subsystemXml =
+            "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
+            "   <deployment-types>" +
+            "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
+            "   </deployment-types>" +
+            "</subsystem>";
+    KernelServices servicesA = super.createKernelServicesBuilder(null).setSubsystemXml(subsystemXml).build();
+
+
+
+

Now we read the model and the xml that was persisted from the first +controller, and use that xml to start a second controller

+
+
+
+
//Get the model and the persisted xml from the first controller
+ModelNode modelA = servicesA.readWholeModel();
+String marshalled = servicesA.getPersistedSubsystemXml();
+ 
+//Install the persisted xml from the first controller into a second controller
+KernelServices servicesB = super.createKernelServicesBuilder(null).setSubsystemXml(marshalled).build();
+
+
+
+

Finally we read the model from the second controller, and make sure that +the models are identical by calling compare() on the test superclass.

+
+
+
+
    ModelNode modelB = servicesB.readWholeModel();
+ 
+    //Make sure the models from the two controllers are identical
+    super.compare(modelA, modelB);
+}
+
+
+
+

To test the removal of the the subsystem and child resources we modify +the testSubsystemRemoval() test provided by the archetype:

+
+
+
+
/**
+     * Tests that the subsystem can be removed
+     */
+    @Test
+    public void testSubsystemRemoval() throws Exception {
+        //Parse the subsystem xml and install into the first controller
+
+
+
+

We provide xml for the subsystem installing a child, which in turn +installs a TrackerService

+
+
+
+
String subsystemXml =
+                "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
+                "   <deployment-types>" +
+                "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
+                "   </deployment-types>" +
+                "</subsystem>";
+KernelServices services = super.createKernelServicesBuilder(null).setSubsystemXml(subsystemXml).build();
+
+
+
+

Having installed the xml into the controller we make sure the +TrackerService is there

+
+
+
+
//Sanity check to test the service for 'tst' was there
+services.getContainer().getRequiredService(TrackerService.createServiceName("tst"));
+
+
+
+

This call from the subsystem test harness will call remove for each +level in our subsystem, children first and validate
+that the subsystem model is empty at the end.

+
+
+
+
//Checks that the subsystem was removed from the model
+super.assertRemoveSubsystemResources(services);
+
+
+
+

Finally we check that all the services were removed by the remove +handlers

+
+
+
+
//Check that any services that were installed were removed here
+    try {
+        services.getContainer().getRequiredService(TrackerService.createServiceName("tst"));
+        Assert.fail("Should have removed services");
+    } catch (Exception expected) {
+    }
+}
+
+
+
+

For good measure let us throw in another test which adds a +deployment-type and also changes its attribute at runtime. So first of +all boot up the controller with the same xml we have been using so far

+
+
+
+
@Test
+public void testExecuteOperations() throws Exception {
+    String subsystemXml =
+            "<subsystem xmlns=\"" + SubsystemExtension.NAMESPACE + "\">" +
+            "   <deployment-types>" +
+            "       <deployment-type suffix=\"tst\" tick=\"12345\"/>" +
+            "   </deployment-types>" +
+            "</subsystem>";
+    KernelServices services = super.createKernelServicesBuilder(null).setSubsystemXml(subsystemXml).build();
+
+
+
+

Now create an operation which does the same as the following CLI command +/subsystem=tracker/type=foo:add(tick=1000)

+
+
+
+
//Add another type
+PathAddress fooTypeAddr = PathAddress.pathAddress(
+        PathElement.pathElement(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME),
+        PathElement.pathElement("type", "foo"));
+ModelNode addOp = new ModelNode();
+addOp.get(OP).set(ADD);
+addOp.get(OP_ADDR).set(fooTypeAddr.toModelNode());
+addOp.get("tick").set(1000);
+
+
+
+

Execute the operation and make sure it was successful

+
+
+
+
ModelNode result = services.executeOperation(addOp);
+Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
+
+
+
+

Read the whole model and make sure that the original data is still there +(i.e. the same as what was done by testInstallIntoController()

+
+
+
+
ModelNode model = services.readWholeModel();
+Assert.assertTrue(model.get(SUBSYSTEM).hasDefined(SubsystemExtension.SUBSYSTEM_NAME));
+Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME).hasDefined("type"));
+Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type").hasDefined("tst"));
+Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "tst").hasDefined("tick"));
+Assert.assertEquals(12345, model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "tst", "tick").asLong());
+
+
+
+

Then make sure our new type has been added:

+
+
+
+
Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type").hasDefined("foo"));
+Assert.assertTrue(model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "foo").hasDefined("tick"));
+Assert.assertEquals(1000, model.get(SUBSYSTEM, SubsystemExtension.SUBSYSTEM_NAME, "type", "foo", "tick").asLong());
+
+
+
+

Then we call write-attribute to change the tick value of +/subsystem=tracker/type=foo:

+
+
+
+
//Call write-attribute
+ModelNode writeOp = new ModelNode();
+writeOp.get(OP).set(WRITE_ATTRIBUTE_OPERATION);
+writeOp.get(OP_ADDR).set(fooTypeAddr.toModelNode());
+writeOp.get(NAME).set("tick");
+writeOp.get(VALUE).set(3456);
+result = services.executeOperation(writeOp);
+Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
+
+
+
+

To give you exposure to other ways of doing things, now instead of +reading the whole model to check the attribute, we call read-attribute +instead, and make sure it has the value we set it to.

+
+
+
+
//Check that write attribute took effect, this time by calling read-attribute instead of reading the whole model
+ModelNode readOp = new ModelNode();
+readOp.get(OP).set(READ_ATTRIBUTE_OPERATION);
+readOp.get(OP_ADDR).set(fooTypeAddr.toModelNode());
+readOp.get(NAME).set("tick");
+result = services.executeOperation(readOp);
+Assert.assertEquals(3456, checkResultAndGetContents(result).asLong());
+
+
+
+

Since each type installs its own copy of TrackerService, we get the +TrackerService for type=foo from the service container exposed by +the kernel services and make sure it has the right value

+
+
+
+
    TrackerService service = (TrackerService)services.getContainer().getService(TrackerService.createServiceName("foo")).getValue();
+    Assert.assertEquals(3456, service.getTick());
+}
+
+
+
+

TypeDefinition.TICK.

+
+
+
+
+

2.5. Add the deployers

+
+

When discussing SubsystemAdd we did not mention the work done +to install the deployers, which is done in the following method:

+
+
+
+
    @Override
+    public void performBoottime(OperationContext context, ModelNode operation, ModelNode model,
+            ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers)
+            throws OperationFailedException {
+ 
+        log.info("Populating the model");
+ 
+        //Add deployment processors here
+        //Remove this if you don't need to hook into the deployers, or you can add as many as you like
+        //see SubDeploymentProcessor for explanation of the phases
+        context.addStep(new AbstractDeploymentChainStep() {
+            public void execute(DeploymentProcessorTarget processorTarget) {
+                processorTarget.addDeploymentProcessor(SubsystemExtension.SUBSYSTEM_NAME, SubsystemDeploymentProcessor.PHASE, SubsystemDeploymentProcessor.PRIORITY, new SubsystemDeploymentProcessor());
+ 
+            }
+        }, OperationContext.Stage.RUNTIME);
+ 
+    }
+
+
+
+

This adds an extra step which is responsible for installing deployment +processors. You can add as many as you like, or avoid adding any all +together depending on your needs. Each processor has a Phase and a +priority. Phases are sequential, and a deployment passes through each +phases deployment processors. The priority specifies where within a +phase the processor appears. See org.jboss.as.server.deployment.Phase +for more information about phases.

+
+
+

In our case we are keeping it simple and staying with one deployment +processor with the phase and priority created for us by the maven +archetype. The phases will be explained in the next section. The +deployment processor is as follows:

+
+
+
+
public class SubsystemDeploymentProcessor implements DeploymentUnitProcessor {
+    ...
+ 
+    @Override
+    public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
+        String name = phaseContext.getDeploymentUnit().getName();
+        TrackerService service = getTrackerService(phaseContext.getServiceRegistry(), name);
+        if (service != null) {
+            ResourceRoot root = phaseContext.getDeploymentUnit().getAttachment(Attachments.DEPLOYMENT_ROOT);
+            VirtualFile cool = root.getRoot().getChild("META-INF/cool.txt");
+            service.addDeployment(name);
+            if (cool.exists()) {
+                service.addCoolDeployment(name);
+            }
+        }
+    }
+ 
+    @Override
+    public void undeploy(DeploymentUnit context) {
+        context.getServiceRegistry();
+        String name = context.getName();
+        TrackerService service = getTrackerService(context.getServiceRegistry(), name);
+        if (service != null) {
+            service.removeDeployment(name);
+        }
+    }
+ 
+    private TrackerService getTrackerService(ServiceRegistry registry, String name) {
+        int last = name.lastIndexOf(".");
+        String suffix = name.substring(last + 1);
+        ServiceController<?> container = registry.getService(TrackerService.createServiceName(suffix));
+        if (container != null) {
+            TrackerService service = (TrackerService)container.getValue();
+            return service;
+        }
+        return null;
+    }
+}
+
+
+
+

The deploy() method is called when a deployment is being deployed. In +this case we look for the TrackerService instance for the service name +created from the deployment’s suffix. If there is one it means that we +are meant to be tracking deployments with this suffix (i.e. +TypeAddHandler was called for this suffix), and if we find one we add +the deployment’s name to it. Similarly undeploy() is called when a +deployment is being undeployed, and if there is a TrackerService +instance for the deployment’s suffix, we remove the deployment’s name +from it.

+
+
+

2.5.1. Deployment phases and attachments

+
+

The code in the SubsystemDeploymentProcessor uses an attachment, which +is the means of communication between the individual deployment +processors. A deployment processor belonging to a phase may create an +attachment which is then read further along the chain of deployment unit +processors. In the above example we look for the +Attachments.DEPLOYMENT_ROOT attachment, which is a view of the file +structure of the deployment unit put in place before the chain of +deployment unit processors is invoked.

+
+
+

As mentioned above, the deployment unit processors are organized in +phases, and have a relative order within each phase. A deployment unit +passes through all the deployment unit processors in that order. A +deployment unit processor may choose to take action or not depending on +what attachments are available. Let’s take a quick look at what the +deployment unit processors for in the phases described in +org.jboss.as.server.deployment.Phase.

+
+
+
STRUCTURE
+
+

The deployment unit processors in this phase determine the structure of +a deployment, and looks for sub deployments and metadata files.

+
+
+
+
PARSE
+
+

In this phase the deployment unit processors parse the deployment +descriptors and build up the annotation index. Class-Path entries from +the META-INF/MANIFEST.MF are added.

+
+
+
+
DEPENDENCIES
+
+

Extra class path dependencies are added. For example if deploying a +war file, the commonly needed dependencies for a web application are +added.

+
+
+
+
CONFIGURE_MODULE
+
+

In this phase the modular class loader for the deployment is created. No +attempt should be made loading classes from the deployment until after +this phase.

+
+
+
+
POST_MODULE
+
+

Now that our class loader has been constructed we have access to the +classes. In this stage deployment processors may use the +Attachments.REFLECTION_INDEX attachment which is a deployment index +used to obtain members of classes in the deployment, and to invoke upon +them, bypassing the inefficiencies of using java.lang.reflect +directly.

+
+
+
+
INSTALL
+
+

Install new services coming from the deployment.

+
+
+
+
CLEANUP
+
+

Attachments put in place earlier in the deployment unit processor chain +may be removed here.

+
+
+
+
+
+

2.6. Integrate with WildFly

+
+

Now that we have all the code needed for our subsystem, we can build our +project by running mvn install

+
+
+
+
[kabir ~/sourcecontrol/temp/archetype-test/acme-subsystem]
+$mvn install
+[INFO] Scanning for projects...
+[...]
+main:
+   [delete] Deleting: /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/null1004283288
+   [delete] Deleting directory /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/module
+     [copy] Copying 1 file to /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/module/com/acme/corp/tracker/main
+     [copy] Copying 1 file to /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/module/com/acme/corp/tracker/main
+     [echo] Module com.acme.corp.tracker has been created in the target/module directory. Copy to your JBoss AS 7 installation.
+[INFO] Executed tasks
+[INFO]
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ acme-subsystem ---
+[INFO] Installing /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/target/acme-subsystem.jar to /Users/kabir/.m2/repository/com/acme/corp/acme-subsystem/1.0-SNAPSHOT/acme-subsystem-1.0-SNAPSHOT.jar
+[INFO] Installing /Users/kabir/sourcecontrol/temp/archetype-test/acme-subsystem/pom.xml to /Users/kabir/.m2/repository/com/acme/corp/acme-subsystem/1.0-SNAPSHOT/acme-subsystem-1.0-SNAPSHOT.pom
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 5.851s
+[INFO] Finished at: Mon Jul 11 23:24:58 BST 2011
+[INFO] Final Memory: 7M/81M
+[INFO] ------------------------------------------------------------------------
+
+
+
+

This will have built our project and assembled a module for us that can +be used for installing it into WildFly. If you go to the target/module +folder where you built the project you will see the module

+
+
+
+
$ls target/module/com/acme/corp/tracker/main/
+acme-subsystem.jar  module.xml
+
+
+
+

The module.xml comes from src/main/resources/module/main/module.xml +and is used to define your module. It says that it contains the +acme-subsystem.jar:

+
+
+
+
<module xmlns="urn:jboss:module:1.9" name="com.acme.corp.tracker">
+    <resources>
+        <resource-root path="acme-subsystem.jar"/>
+    </resources>
+
+
+
+

And has a default set of dependencies needed by every subsystem created. +If your subsystem requires additional module dependencies you can add +them here before building and installing.

+
+
+
+
    <dependencies>
+        <module name="java.se"/>
+        <module name="org.jboss.staxmapper"/>
+        <module name="org.jboss.as.controller"/>
+        <module name="org.jboss.as.server"/>
+        <module name="org.jboss.modules"/>
+        <module name="org.jboss.msc"/>
+        <module name="org.jboss.logging"/>
+        <module name="org.jboss.vfs"/>
+    </dependencies>
+</module>
+
+
+
+

Note that the name of the module corresponds to the directory structure +containing it. Now copy the target/module/com/acme/corp/tracker/main/ +directory and its contents to +$WFLY/modules/com/acme/corp/tracker/main/ (where $WFLY is the root +of your WildFly install).

+
+
+

Next we need to modify $WFLY/standalone/configuration/standalone.xml. +First we need to add our new module to the <extensions> section:

+
+
+
+
    <extensions>
+        ...
+        <extension module="org.jboss.as.weld"/>
+        <extension module="com.acme.corp.tracker"/>
+    </extensions>
+
+
+
+

And then we have to add our subsystem to the <profile> section:

+
+
+
+
    <profile>
+    ...
+ 
+        <subsystem xmlns="urn:com.acme.corp.tracker:1.0">
+            <deployment-types>
+                <deployment-type suffix="sar" tick="10000"/>
+                <deployment-type suffix="war" tick="10000"/>
+            </deployment-types>
+        </subsystem>
+    ...
+    </profile>
+
+
+
+

Adding this to a managed domain works exactly the same apart from in +this case you need to modify $WFLY/domain/configuration/domain.xml.

+
+
+

Now start up WildFly by running $WFLY/bin/standalone.sh and you should +see messages like these after the server has started, which means our +subsystem has been added and our TrackerService is working:

+
+
+
+
15:27:33,838 INFO  [org.jboss.as] (Controller Boot Thread) JBoss AS 7.0.0.Final "Lightning" started in 2861ms - Started 94 of 149 services (55 services are passive or on-demand)
+15:27:42,966 INFO  [stdout] (Thread-8) Current deployments deployed while sar tracking active:
+15:27:42,966 INFO  [stdout] (Thread-8) []
+15:27:42,967 INFO  [stdout] (Thread-8) Cool: 0
+15:27:42,967 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
+15:27:42,967 INFO  [stdout] (Thread-9) []
+15:27:42,967 INFO  [stdout] (Thread-9) Cool: 0
+15:27:52,967 INFO  [stdout] (Thread-8) Current deployments deployed while sar tracking active:
+15:27:52,967 INFO  [stdout] (Thread-8) []
+15:27:52,967 INFO  [stdout] (Thread-8) Cool: 0
+
+
+
+

If you run the command line interface you can execute some commands to +see more about the subsystem. For example

+
+
+
+
[standalone@localhost:9999 /] /subsystem=tracker/:read-resource-description(recursive=true, operations=true)
+
+
+
+

will return a lot of information, including a description of our subsystem +generated automatically by a DescriptionProvider

+
+
+

To see the current subsystem state you can execute

+
+
+
+
[standalone@localhost:9999 /] /subsystem=tracker/:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {"type" => {
+        "war" => {"tick" => 10000L},
+        "sar" => {"tick" => 10000L}
+    }}
+}
+
+
+
+

We can remove both the deployment types which removes them from the +model:

+
+
+
+
[standalone@localhost:9999 /] /subsystem=tracker/type=sar:remove
+{"outcome" => "success"}
+[standalone@localhost:9999 /] /subsystem=tracker/type=war:remove
+{"outcome" => "success"}
+[standalone@localhost:9999 /] /subsystem=tracker/:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {"type" => undefined}
+}
+
+
+
+

You should now see the output from the TrackerService instances having +stopped.

+
+
+

Now, let’s add the war tracker again:

+
+
+
+
[standalone@localhost:9999 /] /subsystem=tracker/type=war:add
+{"outcome" => "success"}
+[standalone@localhost:9999 /] /subsystem=tracker/:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {"type" => {"war" => {"tick" => 10000L}}}
+}
+
+
+
+

and the WildFly console should show the messages coming from the war +TrackerService again.

+
+
+

Now let us deploy something. You can find two maven projects for test +wars already built at test1.zip and +test2.zip. If you download them and +extract them to /Downloads/test1 and /Downloads/test2, you can see +that /Downloads/test1/target/test1.war contains a META-INF/cool.txt +while /Downloads/test2/target/test2.war does not contain that file. +From CLI deploy test1.war first:

+
+
+
+
[standalone@localhost:9999 /] deploy ~/Downloads/test1/target/test1.war
+'test1.war' deployed successfully.
+
+
+
+

And you should now see the output from the war TrackerService list the +deployments:

+
+
+
+
15:35:03,712 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) Starting deployment of "test1.war"
+15:35:03,988 INFO  [org.jboss.web] (MSC service thread 1-1) registering web context: /test1
+15:35:03,996 INFO  [org.jboss.as.server.controller] (pool-2-thread-9) Deployed "test1.war"
+15:35:13,056 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
+15:35:13,056 INFO  [stdout] (Thread-9) [test1.war]
+15:35:13,057 INFO  [stdout] (Thread-9) Cool: 1
+
+
+
+

So our test1.war got picked up as a 'cool' deployment. Now if we +deploy test2.war

+
+
+
+
[standalone@localhost:9999 /] deploy ~/sourcecontrol/temp/archetype-test/test2/target/test2.war
+'test2.war' deployed successfully.
+
+
+
+

You will see that deployment get picked up as well but since there is no +META-INF/cool.txt it is not marked as a 'cool' deployment:

+
+
+
+
15:37:05,634 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-4) Starting deployment of "test2.war"
+15:37:05,699 INFO  [org.jboss.web] (MSC service thread 1-1) registering web context: /test2
+15:37:05,982 INFO  [org.jboss.as.server.controller] (pool-2-thread-15) Deployed "test2.war"
+15:37:13,075 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
+15:37:13,075 INFO  [stdout] (Thread-9) [test1.war, test2.war]
+15:37:13,076 INFO  [stdout] (Thread-9) Cool: 1
+
+
+
+

An undeploy

+
+
+
+
[standalone@localhost:9999 /] undeploy test1.war
+Successfully undeployed test1.war.
+
+
+
+

is also reflected in the TrackerService output:

+
+
+
+
15:38:47,901 INFO  [org.jboss.as.server.controller] (pool-2-thread-21) Undeployed "test1.war"
+15:38:47,934 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) Stopped deployment test1.war in 40ms
+15:38:53,091 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
+15:38:53,092 INFO  [stdout] (Thread-9) [test2.war]
+15:38:53,092 INFO  [stdout] (Thread-9) Cool: 0
+
+
+
+

Finally, we registered a write attribute handler for the tick property +of the type so we can change the frequency

+
+
+
+
[standalone@localhost:9999 /] /subsystem=tracker/type=war:write-attribute(name=tick,value=1000)
+{"outcome" => "success"}
+
+
+
+

You should now see the output from the TrackerService happen every +second

+
+
+
+
15:39:43,100 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
+15:39:43,100 INFO  [stdout] (Thread-9) [test2.war]
+15:39:43,101 INFO  [stdout] (Thread-9) Cool: 0
+15:39:44,101 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
+15:39:44,102 INFO  [stdout] (Thread-9) [test2.war]
+15:39:44,105 INFO  [stdout] (Thread-9) Cool: 0
+15:39:45,106 INFO  [stdout] (Thread-9) Current deployments deployed while war tracking active:
+15:39:45,106 INFO  [stdout] (Thread-9) [test2.war]
+
+
+
+

If you open $WFLY/standalone/configuration/standalone.xml you can see +that our subsystem entry reflects the current state of the subsystem:

+
+
+
+
        <subsystem xmlns="urn:com.acme.corp.tracker:1.0">
+            <deployment-types>
+                <deployment-type suffix="war" tick="1000"/>
+            </deployment-types>
+        </subsystem>
+
+
+
+
+

2.7. Expressions

+
+

Expressions are mechanism that enables you to support variables in your +attributes, for instance when you want the value of attribute to be +resolved using system / environment properties.

+
+
+

An example expression is

+
+
+
+
${jboss.bind.address.management:127.0.0.1}
+
+
+
+

which means that the value should be taken from a system property named +jboss.bind.address.management and if it is not defined use +127.0.0.1.

+
+
+

2.7.1. What expression types are supported

+
+
    +
  • +

    System properties, which are resolved using +java.lang.System.getProperty(String key)

    +
  • +
  • +

    Environment properties, which are resolved using +java.lang.System.getEnv(String name).

    +
  • +
  • +

    Encrypted expressions, resolved against the expression +resolver in the elytron subsystem.

    +
  • +
+
+
+

In all cases, the syntax for the expression is

+
+
+
+
${expression_to_resolve}
+
+
+
+

For an expression meant to be resolved against environment properties, +the expression_to_resolve must be prefixed with env.. The portion +after env. will be the name passed to +java.lang.System.getEnv(String name).

+
+
+

Encrypted expressions do not support default values (i.e. the +127.0.0.1 in the jboss.bind.address.management:127.0.0.1 example +above.)

+
+
+
+

2.7.2. How to support expressions in subsystems

+
+

The easiest way is by using AttributeDefinition, which provides support +for expressions just by using it correctly.

+
+
+

When we create an AttributeDefinition all we need to do is mark that is +allows expressions. Here is an example how to define an attribute that +allows expressions to be used.

+
+
+
+
SimpleAttributeDefinition MY_ATTRIBUTE =
+            new SimpleAttributeDefinitionBuilder("my-attribute", ModelType.INT, true)
+                    .setAllowExpression(true)
+                    .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES)
+                    .setDefaultValue(new ModelNode(1))
+                    .build();
+
+
+
+

Then later when you are parsing the xml configuration you should use the +MY_ATTRIBUTE attribute definition to set the value to the management +operation ModelNode you are creating.

+
+
+
+
....
+      String attr = reader.getAttributeLocalName(i);
+      String value = reader.getAttributeValue(i);
+      if (attr.equals("my-attribute")) {
+          MY_ATTRIBUTE.parseAndSetParameter(value, operation, reader);
+      } else if (attr.equals("suffix")) {
+.....
+
+
+
+

Note that this just helps you to properly set the value to the model +node you are working on, so no need to additionally set anything to the +model for this attribute. Method parseAndSetParameter parses the value +that was read from xml for possible expressions in it and if it finds +any it creates special model node that defines that node is of type +ModelType.EXPRESSION.

+
+
+

Later in your operation handlers where you implement populateModel and +have to store the value from the operation to the configuration model +you also use this MY_ATTRIBUTE attribute definition.

+
+
+
+
 @Override
+ protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
+        MY_ATTRIBUTE.validateAndSet(operation,model);
+ }
+
+
+
+

This will make sure that the attribute that is stored from the operation +to the model is valid and nothing is lost. It also checks the value +stored in the operation ModelNode, and if it isn’t already +ModelType.EXPRESSION, it checks if the value is a string that contains +the expression syntax. If so, the value stored in the model will be of +type ModelType.EXPRESSION. Doing this ensures that expressions are +properly handled when they appear in operations that weren’t created by +the subsystem parser, but are instead passed in from CLI or admin +console users.

+
+
+

As last step we need to use the value of the attribute. This is usually +needed inside of the performRuntime method

+
+
+
+
 protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) throws OperationFailedException {
+       ....
+        final int attributeValue = MY_ATTRIBUTE.resolveModelAttribute(context, model).asInt();     
+        ...
+ 
+    }
+
+
+
+

As you can see resolving of attribute’s value is not done until it is +needed for use in the subsystem’s runtime services. The resolved value +is not stored in the configuration model, the unresolved expression is. +That way we do not lose any information in the model and can assure that +also marshalling is done properly, where we must marshall back the +unresolved value.

+
+
+

Attribute definitinon also helps you with that:

+
+
+
+
 public void writeContent(XMLExtendedStreamWriter writer, SubsystemMarshallingContext context) throws XMLStreamException {
+    ....
+      MY_ATTRIBUTE.marshallAsAttribute(sessionData, writer);
+      MY_OTHER_ATTRIBUTE.marshallAsElement(sessionData, false, writer);
+    ...
+}
+
+
+
+
+
+
+
+

3. Working with WildFly Capabilities

+
+
+

An extension to WildFly will likely want to make use of services +provided by the WildFly kernel, may want to make use of services +provided by other subsystems, and may wish to make functionality +available to other extensions. Each of these cases involves integration +between different parts of the system. In releases prior to WildFly 10, +this kind of integration was done on an ad-hoc basis, resulting in +overly tight coupling between different parts of the system and overly +weak integration contracts. For example, a service installed by +subsystem A might depend on a service installed by subsystem B, and to +record that dependency A’s authors copy a ServiceName from B’s code, or +even refer to a constant or static method from B’s code. The result is +B’s code cannot evolve without risking breaking A. And the authors of B +may not even intend for other subsystems to use its services. There is +no proper integration contract between the two subsystems.

+
+
+

Beginning with WildFly Core 2 and WildFly 10 the WildFly kernel’s +management layer provides a mechanism for allowing different parts of +the system to integrate with each other in a loosely coupled manner. +This is done via WildFly Capabilities. Use of capabilities provides the +following benefits:

+
+
+
    +
  1. +

    A standard way for system components to define integration contracts +for their use by other system components.

    +
  2. +
  3. +

    A standard way for system components to access integration contracts +provided by other system components.

    +
  4. +
  5. +

    A mechanism for configuration model referential integrity checking, +such that if one component’s configuration has an attribute that refers +to an other component (e.g. a socket-binding attribute in a subsystem +that opens a socket referring to that socket’s configuration), the +validity of that reference can be checked when validating the +configuration model.

    +
  6. +
+
+
+

3.1. Capabilities

+
+

A capability is a piece of functionality used in a WildFly Core based +process that is exposed via the WildFly Core management layer. +Capabilities may depend on other capabilities, and this interaction +between capabilities is mediated by the WildFly Core management layer.

+
+
+

Some capabilities are automatically part of a WildFly Core based +process, but in most cases the configuration provided by the end user +(i.e. in standalone.xml, domain.xml and host.xml) determines what +capabilities are present at runtime. It is the responsibility of the +handlers for management operations to register capabilities and to +register any requirements those capabilities may have for the presence +of other capabilities. This registration is done during the MODEL stage +of operation execution

+
+
+

A capability has the following basic characteristics:

+
+
+
    +
  1. +

    It has a name.

    +
  2. +
  3. +

    It may install an MSC service that can be depended upon by services +installed by other capabilities. If it does, it provides a mechanism for +discovering the name of that service.

    +
  4. +
  5. +

    It may expose some other API not based on service dependencies +allowing other capabilities to integrate with it at runtime.

    +
  6. +
  7. +

    It may depend on, or require other capabilities.

    +
  8. +
+
+
+

During boot of the process, and thereafter whenever a management +operation makes a change to the process' configuration, at the end of +the MODEL stage of operation execution the kernel management layer will +validate that all capabilities required by other capabilities are +present, and will fail any management operation step that introduced an +unresolvable requirement. This will be done before execution of the +management operation proceeds to the RUNTIME stage, where interaction +with the process' MSC Service Container is done. As a result, in the +RUNTIME stage the handler for an operation can safely assume that the +runtime services provided by a capability for which it has registered a +requirement are available.

+
+
+

3.1.1. Comparison to other concepts

+
+
Capabilities vs modules
+
+

A JBoss Modules module is the means of making resources available to the +classloading system of a WildFly Core based process. To make a +capability available, you must package its resources in one or more +modules and make them available to the classloading system. But a module +is not a capability in and of itself, and simply copying a module to a +WildFly installation does not mean a capability is available. Modules +can include resources completely unrelated to management capabilities.

+
+
+
+
Capabilities vs Extensions
+
+

An extension is the means by which the WildFly Core management layer is +made aware of manageable functionality that is not part of the WildFly +Core kernel. The extension registers with the kernel new management +resource types and handlers for operations on those resources. One of +the things a handler can do is register or unregister a capability and +its requirements. An extension may register a single capability, +multiple capabilities, or possibly none at all. Further, not all +capabilities are registered by extensions; the WildFly Core kernel +itself may register a number of different capabilities.

+
+
+
+
+

3.1.2. Capability Names

+
+

Capability names are simple strings, with the dot character serving as a +separator to allow namespacing.

+
+
+

The 'org.wildfly' namespace is reserved for projects associated with the +WildFly organization on github ( https://github.com/wildfly).

+
+
+
+

3.1.3. Statically vs Dynamically Named Capabilities

+
+

The full name of a capability is either statically known, or it may +include a statically known base element and then a dynamic element. The +dynamic part of the name is determined at runtime based on the address +of the management resource that registers the capability. For example, +the management resource at the address +'/socket-binding-group=standard-sockets/socket-binding=web' will +register a dynamically named capability named +'org.wildfly.network.socket-binding.web'. The +'org.wildfly.network.socket-binding' portion is the static part of the +name.

+
+
+

All dynamically named capabilities that have the same static portion of +their name should provide a consistent feature set and set of +requirements.

+
+
+
+

3.1.4. Service provided by a capability

+
+

Typically a capability functions by registering a service with the +WildFly process' MSC ServiceContainer, and then dependent capabilities +depend on that service. The WildFly Core management layer orchestrates +registration of those services and service dependencies by providing a +means to discover service names.

+
+
+
+

3.1.5. Custom integration APIs provided by a capability

+
+

Instead of or in addition to providing MSC services, a capability may +expose some other API to dependent capabilities. This API must be +encapsulated in a single class (although that class can use other +non-JRE classes as method parameters or return types).

+
+
+
+

3.1.6. Capability Requirements

+
+

A capability may rely on other capabilities in order to provide its +functionality at runtime. The management operation handlers that +register capabilities are also required to register their requirements.

+
+
+

There are three basic types of requirements a capability may have:

+
+
+
    +
  • +

    Hard requirements. The required capability must always be present for +the dependent capability to function.

    +
  • +
  • +

    Optional requirements. Some aspect of the configuration of the +dependent capability controls whether the depended on capability is +actually necessary. So the requirement cannot be known until the running +configuration is analyzed.

    +
  • +
  • +

    Runtime-only requirements. The dependent capability will check for the +presence of the depended upon capability at runtime, and if present it +will utilize it, but if it is not present it will function properly +without the capability. There is nothing in the dependent capability’s +configuration that controls whether the depended on capability must be +present. Only capabilities that declare themselves as being suitable for +use as a runtime-only requirement should be depended upon in this +manner.

    +
  • +
+
+
+

Hard and optional requirements may be for either statically named or +dynamically named capabilities. Runtime-only requirements can only be +for statically named capabilities, as such a requirement cannot be +specified via configuration, and without configuration the dynamic part +of the required capability name is unknown.

+
+
+
Supporting runtime-only requirements
+
+

Not all capabilities are usable as a runtime-only requirement.

+
+
+

Any dynamically named capability is not usable as a runtime-only +requirement.

+
+
+

For a capability to support use as a runtime-only requirement, it must +guarantee that a configuration change to a running process that removes +the capability will not impact currently running capabilities that have +a runtime-only requirement for it. This means:

+
+
+
    +
  • +

    A capability that supports runtime-only usage must ensure that it +never removes its runtime service except via a full process reload.

    +
  • +
  • +

    A capability that exposes a custom integration API generally is not +usable as a runtime-only requirement. If such a capability does support +use as a runtime-only requirement, it must ensure that any functionality +provided via its integration API remains available as long as a full +process reload has not occurred.

    +
  • +
+
+
+
+
+
+

3.2. Capability Contract

+
+

A capability provides a stable contract to users of the capability. The +contract includes the following:

+
+
+
    +
  • +

    The name of the capability (including whether it is dynamically +named).

    +
  • +
  • +

    Whether it installs an MSC Service, and if it does, the value type of +the service. That value type then becomes a stable API users of the +capability can rely upon.

    +
  • +
  • +

    Whether it provides a custom integration API, and if it does, the type +that represents that API. That type then becomes a stable API users of +the capability can rely upon.

    +
  • +
  • +

    Whether the capability supports use as a runtime-only requirement.

    +
  • +
+
+
+

Developers can learn about available capabilities and the contracts they +provide by reading the WildFly capabilty registry.

+
+
+
+

3.3. Capability Registry

+
+

The WildFly organization on github maintains a git repo where +information about available capabilities is published.

+
+ +
+

Developers can learn about available capabilities and the contracts they +provide by reading the WildFly capabilty registry.

+
+
+

The README.md file at the root of that repo explains the how to find out +information about the registry.

+
+
+

Developers of new capabilities are strongly encouraged to document and +register their capability by submitting a pull request to the +wildfly-capabilities github repo. This both allows others to learn about +your capability and helps prevent capability name collisions. +Capabilities that are used in the WildFly or WildFly Core code base +itself must have a registry entry before the code referencing them +will be merged.

+
+
+

External organizations that create capabilities should include an +organization-specific namespace as part their capability names to avoid +name collisions.

+
+
+
+

3.4. Using Capabilities

+
+

Now that all the background information is presented, here are some +specifics about how to use WildFly capabilities in your code.

+
+
+

3.4.1. Basics of Using Your Own Capability

+
+
Creating your capability
+
+

A capability is an instance of the immutable +org.jboss.as.controller.capability.RuntimeCapability class. A +capability is usually registered by a resource, so the usual way to use +one is to store it in constant in the resource’s ResourceDefinition. +Use a RuntimeCapability.Builder to create one.

+
+
+
+
class MyResourceDefinition extends SimpleResourceDefinition {
+
+    static final RuntimeCapability<Void> FOO_CAPABILITY = RuntimeCapability.Builder.of("com.example.foo").build();
+ 
+    . . .
+}
+
+
+
+

That creates a statically named capability named com.example.foo.

+
+
+

If the capability is dynamically named, add the dynamic parameter to +state this:

+
+
+
+
    static final RuntimeCapability<Void> FOO_CAPABILITY =
+            RuntimeCapability.Builder.of("com.example.foo", true).build();
+
+
+
+

Most capabilities install a service that requiring capabilities can +depend on. If your capability does this, you need to declare the +service’s value type (the type of the object returned by +org.jboss.msc.Service.getValue()). For example, if FOO_CAPABILITY +provides a Service<javax.sql.DataSource>:

+
+
+
+
    static final RuntimeCapability<Void> FOO_CAPABILITY =
+            RuntimeCapability.Builder.of("com.example.foo", DataSource.class).build();
+
+
+
+

For a dynamic capability:

+
+
+
+
    static final RuntimeCapability<Void> FOO_CAPABILITY =
+           RuntimeCapability.Builder.of("com.example.foo", true, DataSource.class).build();
+
+
+
+

If the capability provides a custom integration API, you need to +instantiate an instance of that API:

+
+
+
+
public class JTSCapability {
+ 
+    static final JTSCapability INSTANCE = new JTSCapability();
+ 
+    private JTSCapability() {}
+ 
+    /**
+     * Gets the names of the {@link org.omg.PortableInterceptor.ORBInitializer} implementations that should be included
+     * as part of the {@link org.omg.CORBA.ORB#init(String[], java.util.Properties) initialization of an ORB}.
+     *
+     * @return the names of the classes implementing {@code ORBInitializer}. Will not be {@code null}.
+     */
+    public List<String> getORBInitializerClasses() {
+        return Collections.unmodifiableList(Arrays.asList(
+            "com.arjuna.ats.jts.orbspecific.jacorb.interceptors.interposition.InterpositionORBInitializerImpl",
+            "com.arjuna.ats.jbossatx.jts.InboundTransactionCurrentInitializer"));
+    }
+}
+
+
+
+

and provide it to the builder:

+
+
+
+
    static final RuntimeCapability<JTSCapability> FOO_CAPABILITY =
+            RuntimeCapability.Builder.of("com.example.foo", JTSCapability.INSTANCE).build();
+
+
+
+

For a dynamic capability:

+
+
+
+
    static final RuntimeCapability<JTSCapability> FOO_CAPABILITY = RuntimeCapability.Builder.of("com.example.foo", true, JTSCapability.INSTANCE).build();
+
+
+
+

A capability can provide both a custom integration API and install a +service:

+
+
+
+
    static final RuntimeCapability<JTSCapability> FOO_CAPABILITY =
+            RuntimeCapability.Builder.of("com.example.foo", JTSCapability.INSTANCE)
+                .setServiceType(DataSource.class)
+                .build();
+
+
+
+
+
Registering and unregistering your capability
+
+

Once you have your capability, you need to ensure it gets registered +with the WildFly Core kernel when your resource is added. This is easily +done simply by providing a reference to the capability to the resource’s +ResourceDefinition. This assumes your resource definition is a +subclass of the standard +org.jboss.as.controller.SimpleResourceDefinition. +SimpleResourceDefinition provides a Parameters class that provides a +builder-style API for setting up all the data needed by your definition. +This includes a setCapabilities method that can be used to declare the +capabilities provided by resources of this type.

+
+
+
+
class MyResourceDefinition extends SimpleResourceDefinition {
+
+    . . .
+ 
+    MyResourceDefinition() {
+        super(new SimpleResourceDefinition.Parameters(PATH, RESOLVER)
+            .setAddHandler(MyAddHandler.INSTANCE)
+            .setRemoveHandler(MyRemoveHandler.INSTANCE)
+            .setCapabilities(FOO_CAPABILITY)
+            );
+    }
+}
+
+
+
+

Your add handler needs to extend the standard +org.jboss.as.controller.AbstractAddStepHandler class or one of its +subclasses:

+
+
+
+
class MyAddHandler extends AbstractAddStepHandler() {
+
+
+
+

`AbstractAddStepHandler’s logic will register the capability when it +executes.

+
+
+

Your remove handler must also extend of the standard +org.jboss.as.controller.AbstractRemoveStepHandler or one of its +subclasses.

+
+
+
+
class MyRemoveHandler extends AbstractRemoveStepHandler() {
+
+
+
+

`AbstractRemoveStepHandler’s logic will deregister the capability when +it executes.

+
+
+

If for some reason you cannot base your ResourceDefinition on +SimpleResourceDefinition or your handlers on AbstractAddStepHandler +and AbstractRemoveStepHandler then you will need to take +responsibility for registering the capability yourself. This is not +expected to be a common situation. See the implementation of those +classes to see how to do it.

+
+
+
+
Installing, accessing and removing the service provided by your
+
+

capability

+
+
+

If your capability installs a service, you should use the +RuntimeCapability when you need to determine the service’s name. For +example in the Stage.RUNTIME handling of your "add" step handler. +Here’s an example for a statically named capability:

+
+
+
+
class MyAddHandler extends AbstractAddStepHandler() {
+ 
+    . . .
+ 
+    @Override
+    protected void performRuntime(final OperationContext context, final ModelNode operation,
+                                  final Resource resource) throws OperationFailedException {
+
+        ServiceName serviceName = FOO_CAPABILITY.getCapabilityServiceName();
+        Service<DataSource> service = createDataSourceService(context, resource);
+        context.getServiceTarget().addService(serviceName, service).install();
+
+    }
+
+
+
+

If the capability is dynamically named, get the dynamic part of the name +from the OperationContext and use that when getting the service name:

+
+
+
+
class MyAddHandler extends AbstractAddStepHandler() {
+ 
+    . . .
+ 
+    @Override
+    protected void performRuntime(final OperationContext context, final ModelNode operation,
+                                  final Resource resource) throws OperationFailedException {
+
+        String myName = context.getCurrentAddressValue();
+        ServiceName serviceName = FOO_CAPABILITY.getCapabilityServiceName(myName);
+        Service<DataSource> service = createDataSourceService(context, resource);
+        context.getServiceTarget().addService(serviceName, service).install();
+
+    }
+
+
+
+

The same patterns should be used when accessing or removing the service +in handlers for remove, write-attribute and custom operations.

+
+
+

If you use ServiceRemoveStepHandler for the remove operation, simply +provide your RuntimeCapability to the ServiceRemoveStepHandler +constructor and it will automatically remove your capability’s service +when it executes.

+
+
+
+
+

3.4.2. Basics of Using Other Capabilities

+
+

When a capability needs another capability, it only refers to it by its +string name. A capability should not reference the RuntimeCapability +object of another capability.

+
+
+

Before a capability can look up the service name for a required +capability’s service, or access its custom integration API, it must +first register a requirement for the capability. This must be done in +Stage.MODEL, while service name lookups and accessing the custom +integration API is done in Stage.RUNTIME.

+
+
+

Registering a requirement for a capability is simple.

+
+
+
Registering a hard requirement for a static capability
+
+

If your capability has a hard requirement for a statically named +capability, simply declare that to the builder for your +RuntimeCapability. For example, WildFly’s JTS capability requires both +a basic transaction support capability and IIOP capabilities:

+
+
+
+
    static final RuntimeCapability<JTSCapability> JTS_CAPABILITY =
+            RuntimeCapability.Builder.of("org.wildfly.transactions.jts", new JTSCapability())
+                .addRequirements("org.wildfly.transactions", "org.wildfly.iiop.orb", "org.wildfly.iiop.corba-naming")
+                .build();
+
+
+
+

When your capability is registered with the system, the WildFly Core +kernel will automatically register any static hard requirements declared +this way.

+
+
+
+
Registering a requirement for a dynamically named capability
+
+

If the capability you require is dynamically named, usually your +capability’s resource will include an attribute whose value is the +dynamic part of the required capability’s name. You should declare this +fact in the AttributeDefinition for the attribute using the +SimpleAttributeDefinitionBuilder.setCapabilityReference method.

+
+
+

For example, the WildFly "remoting" subsystem’s +"org.wildfly.remoting.connector" capability has a requirement for a +dynamically named socket-binding capability:

+
+
+
+
public class ConnectorResource extends SimpleResourceDefinition {
+ 
+    . . .
+ 
+    static final String SOCKET_CAPABILITY_NAME = "org.wildfly.network.socket-binding";
+    static final RuntimeCapability<Void> CONNECTOR_CAPABILITY =
+            RuntimeCapability.Builder.of("org.wildfly.remoting.connector", true)
+                    .build();
+ 
+    . . .
+ 
+    static final SimpleAttributeDefinition SOCKET_BINDING =
+            new SimpleAttributeDefinitionBuilder(CommonAttributes.SOCKET_BINDING, ModelType.STRING, false)
+                .addAccessConstraint(SensitiveTargetAccessConstraintDefinition.SOCKET_BINDING_REF)
+                .setCapabilityReference(SOCKET_CAPABILITY_NAME, CONNECTOR_CAPABILITY)
+                .build();
+
+
+
+

If the "add" operation handler for your resource extends +AbstractAddStepHandler and the handler for write-attribute extends +AbstractWriteAttributeHandler, the declaration above is sufficient to +ensure that the appropriate capability requirement will be registered +when the attribute is modified.

+
+
+
+
Depending upon a service provided by another capability
+
+

Once the requirement for the capability is registered, your +OperationStepHandler can use the OperationContext to discover the +name of the service provided by the required capability.

+
+
+

For example, the "add" handler for a remoting connector uses the +OperationContext to find the name of the needed \{{SocketBinding} +service:

+
+
+
+
        final String socketName = ConnectorResource.SOCKET_BINDING.resolveModelAttribute(context, fullModel).asString();
+        final ServiceName socketBindingName = context.getCapabilityServiceName(ConnectorResource.SOCKET_CAPABILITY_NAME, socketName, SocketBinding.class);
+
+
+
+

That service name is then used to add a dependency on the +SocketBinding service to the remoting connector service.

+
+
+

If the required capability isn’t dynamically named, OperationContext +exposes an overloaded getCapabilityServiceName variant. For example, +if a capability requires a remoting Endpoint:

+
+
+
+
        ServiceName endpointService = context.getCapabilityServiceName("org.wildfly.remoting.endpoint", Endpoint.class);
+
+
+
+
+
Using a custom integration API provided by another capability
+
+

In your Stage.RUNTIME handler, use +OperationContext.getCapabilityRuntimeAPI to get a reference to the +required capability’s custom integration API. Then use it as necessary.

+
+
+
+
        List<String> orbInitializers = new ArrayList<String>();
+        . . .
+        JTSCapability jtsCapability = context.getCapabilityRuntimeAPI(IIOPExtension.JTS_CAPABILITY, JTSCapability.class);
+        orbInitializers.addAll(jtsCapability.getORBInitializerClasses());
+
+
+
+
+
Runtime-only requirements
+
+

If your capability has a runtime-only requirement for another +capability, that means that if that capability is present in +Stage.RUNTIME you’ll use it, and if not you won’t. There is nothing +about the configuration of your capability that triggers the need for +the other capability; you’ll just use it if it’s there.

+
+
+

In this case, use OperationContext.hasOptionalCapability in your +Stage.RUNTIME handler to check if the capability is present:

+
+
+
+
    protected void performRuntime(final OperationContext context, final ModelNode operation, final ModelNode model) throws OperationFailedException {
+ 
+        ServiceName myServiceName = MyResource.FOO_CAPABILITY.getCapabilityServiceName();
+        Service<DataSource> myService = createService(context, model);
+        ServiceBuilder<DataSource> builder = context.getTarget().addService(myServiceName, myService);
+ 
+        // Inject a "Bar" into our "Foo" if bar capability is present
+        if (context.hasOptionalCapability("com.example.bar", MyResource.FOO_CAPABILITY.getName(), null) {
+            ServiceName barServiceName = context.getCapabilityServiceName("com.example.bar", Bar.class);
+            builder.addDependency(barServiceName, Bar.class, myService.getBarInjector());
+        }
+ 
+        builder.install();
+    }
+
+
+
+

The WildFly Core kernel will not register a requirement for the +"com.example.bar" capability, so if a configuration change occurs that +means that capability will no longer be present, that change will not be +rolled back. Because of this, runtime-only requirements can only be used +with capabilities that declare in their contract that they support such +use.

+
+
+
+
Using a capability in a DeploymentUnitProcessor
+
+

A DeploymentUnitProcessor is likely to have a need to interact with +capabilities, in order to create service dependencies from a deployment +service to a capability provided service or to access some aspect of a +capability’s custom integration API that relates to deployments.

+
+
+

If a DeploymentUnitProcessor associated with a capability +implementation needs to utilize its own capability object, the +DeploymentUnitProcessor authors should simply provide it with a +reference to the RuntimeCapability instance. Service name lookups or +access to the capabilities custom integration API can then be performed +by invoking the methods on the RuntimeCapability.

+
+
+

If you need to access service names or a custom integration API +associated with a different capability, you will need to use the +org.jboss.as.controller.capability.CapabilityServiceSupport object +associated with the deployment unit. This can be found as an attachment +to the DeploymentPhaseContext:

+
+
+
+
class MyDUP implements DeploymentUntiProcessor {
+ 
+    public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
+ 
+        AttachmentKey<CapabilityServiceSupport> key = org.jboss.as.server.deployment.Attachments.DEPLOYMENT_COMPLETE_SERVICES;
+        CapabilityServiceSupport capSvcSupport = phaseContext.getAttachment(key);
+
+
+
+

Once you have the CapabilityServiceSupport you can use it to look up +service names:

+
+
+
+
        ServiceName barSvcName = capSvcSupport.getCapabilityServiceName("com.example.bar");
+        // Determine what 'baz' the user specified in the deployment descriptor
+        String bazDynamicName = getSelectedBaz(phaseContext);
+        ServiceName bazSvcName = capSvcSupport.getCapabilityServiceName("com.example.baz", bazDynamicName);
+
+
+
+ + + + + +
+ + +It’s important to note that when you request a service name associated +with a capability, the CapabilityServiceSupport will give you one +regardless of whether the capability is actually registered with the +kernel. If the capability isn’t present, any service dependency your DUP +creates using that service name will eventually result in a service +start failure, due to the missing dependency. This behavior of not +failing immediately when the capability service name is requested is +deliberate. It allows deployment operations that use the +rollback-on-runtime-failure=false header to successfully install (but +not start) all of the services related to a deployment. If a subsequent +operation adds the missing capability, the missing service dependency +problem will then be resolved and the MSC service container will +automatically start the deployment services. +
+
+
+

You can also use the CapabilityServiceSupport to obtain a reference to +the capability’s custom integration API:

+
+
+
+
        // We need custom integration with the baz capability beyond service injection
+        BazIntegrator bazIntegrator;
+        try {
+            bazIntegrator = capSvcSupport.getCapabilityRuntimeAPI("com.example.baz", bazDynamicName, BazIntegrator.class);
+        } catch (NoSuchCapabilityException e) {
+            //
+            String msg = String.format("Deployment %s requires use of the 'bar' capability but it is not currently registered",
+                                       phaseContext.getDeploymentUnit().getName());
+            throw new DeploymentUnitProcessingException(msg);
+        }
+
+
+
+

Note that here, unlike the case with service name lookups, the +CapabilityServiceSupport will throw a checked exception if the desired +capability is not installed. This is because the kernel has no way to +satisfy the request for a custom integration API if the capability is +not installed. The DeploymentUnitProcessor will need to catch and +handle the exception.

+
+
+
+
+

3.4.3. Detailed API

+
+

The WildFly Core kernel’s API for using capabilities is covered in +detail in the javadoc for the +RuntimeCapability +and RuntimeCapability.Builder classes and the +OperationContext +and +CapabilityServiceSupport +interfaces.

+
+
+

Many of the methods in OperationContext related to capabilities have +to do with registering capabilities or registering requirements for +capabilities. Typically non-kernel developers won’t need to worry about +these, as the abstract OperationStepHandler implementations provided +by the kernel take care of this for you, as described in the preceding +sections. If you do find yourself in a situation where you need to use +these in an extension, please read the javadoc thoroughly.

+
+
+
+
+
+
+

4. Domain Mode Subsystem Transformers

+
+
+
+A WildFly domain may consist of a new Domain Controller (DC) controlling +secondary Host Controllers (HC) running older versions. Each secondary HC +maintains a copy of the centralized domain configuration, which they use +for controlling their own servers. In order for the secondary HCs to +understand the configuration from the DC, transformation is needed, +whereby the DC translates the configuration and operations into +something the secondary HCs can understand. +
+
+
+

4.1. Background

+
+

WildFly comes with a domain mode which allows +you to have one Host Controller acting as the Domain Controller. The +Domain Controller’s job is to maintain the centralized domain +configuration. Another term for the DC is 'Primary Host Controller'. +Before explaining why transformers are important and when they should be +used, we will revisit how the domain configuration is used in domain +mode.

+
+
+

The centralized domain configuration is stored in domain.xml. This is +only ever parsed on the DC, and it has the following structure:

+
+
+
    +
  • +

    extensions - contains:

    +
    +
      +
    • +

      extension - a references to a module that bootstraps the +org.jboss.as.controller.Extension implementation used to bootstrap +your subsystem parsers and initialize the resource definitions for your +subsystems.

      +
    • +
    +
    +
  • +
  • +

    profiles - contains:

    +
    +
      +
    • +

      profile - a named set of:

      +
      +
        +
      • +

        subsystem - contains the configuration for a subsystem, using the +parser initialized by the subsystem’s extension.

        +
      • +
      +
      +
    • +
    +
    +
  • +
  • +

    socket-binding-groups - contains:

    +
    +
      +
    • +

      socket-binding-group - a named set of:

      +
      +
        +
      • +

        socket-binding - A named port on an interface which can be +referenced from the subsystem configurations for subsystems opening +sockets.

        +
      • +
      +
      +
    • +
    +
    +
  • +
  • +

    server-groups - contains

    +
    +
      +
    • +

      server-group - this has a name and references a profile and a +socket-binding-group. The HCs then reference the server-group name +from their <servers> section in host.xml.

      +
    • +
    +
    +
  • +
+
+
+

When the DC parses domain.xml, it is transformed into add (and in +some cases write-attribute) operations just as explained in +Parsing and +marshalling of the subsystem xml. These operations build up the model +on the DC.

+
+
+

A HC wishing to join the domain and use the DC’s centralized +configuration is known as a 'secondary HC'. A secondary HC maintains a copy of +the DC’s centralized domain configuration. This copy of the domain +configuration is used to start its servers. This is done by asking the +domain model to describe itself, which in turn asks the subsystems to +describe themselves. The describe operation for a subsystem looks at +the state of the subsystem model and produces the add operations +necessary to create the subsystem on the server. The same mechanism also +takes place on the DC (bear in mind that the DC is also a HC, which can +have its own servers), although of course its copy of the domain +configuration is the centralized one.

+
+
+

There are two steps involved in keeping the secondary HC’s +domain configuration in sync with the centralized domain configuration.

+
+
+
    +
  • +

    getting the initial domain model

    +
  • +
  • +

    an operation changes something in the domain configuration

    +
  • +
+
+
+

Let’s look a bit closer at what happens in each of these steps.

+
+
+

4.1.1. Getting the initial domain model

+
+

When a secondary HC connects to the DC it obtains a copy of the domain model +from the DC. This is done in a simpler serialized format, different from +the operations that built up the model on the DC, or the operations +resulting from the describe step used to bootstrap the servers. They +describe each address that exists in the DC’s model, and contain the +attributes set for the resource at that address. This serialized form +looks like this:

+
+
+
+
[{
+    "domain-resource-address" => [],
+    "domain-resource-model" => {
+        "management-major-version" => 2,
+        "management-minor-version" => 0,
+        "management-micro-version" => 0,
+        "release-version" => "8.0.0.Beta1-SNAPSHOT",
+        "release-codename" => "WildFly"
+    }
+},
+{
+    "domain-resource-address" => [("extension" => "org.jboss.as.clustering.infinispan")],
+    "domain-resource-model" => {"module" => "org.jboss.as.clustering.infinispan"}
+},
+--SNIP - the rest of the extensions --
+{
+    "domain-resource-address" => [("extension" => "org.jboss.as.weld")],
+    "domain-resource-model" => {"module" => "org.jboss.as.weld"}
+},
+{
+    "domain-resource-address" => [("system-property" => "java.net.preferIPv4Stack")],
+    "domain-resource-model" => {
+        "value" => "true",
+        "boot-time" => undefined
+    }
+},
+{
+    "domain-resource-address" => [("profile" => "full-ha")],
+    "domain-resource-model" => undefined
+},
+{
+    "domain-resource-address" => [
+        ("profile" => "full-ha"),
+        ("subsystem" => "logging")
+    ],
+    "domain-resource-model" => {}
+},
+{
+    "domain-resource-address" => [sss|WFLY8:Example subsystem],
+    "domain-resource-model" => {
+        "level" => "INFO",
+        "enabled" => undefined,
+        "encoding" => undefined,
+        "formatter" => "%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n",
+        "filter-spec" => undefined,
+        "autoflush" => undefined,
+        "target" => undefined,
+        "named-formatter" => undefined
+    }
+},
+--SNIP---
+
+
+
+

The secondary HC then applies these one at a time and builds up the initial +domain model. It needs to do this before it can start any of its +servers.

+
+
+
+

4.1.2. An operation changes something in the domain configuration

+
+

Once a domain is up and running we can still change things in the domain +configuration. These changes must happen when connected to the DC, and +are then propagated to the secondary HCs, which then in turn propagate the +changes to any servers running in a server group affected by the changes +made. In this example:

+
+
+
+
[disconnected /] connect
+[domain@localhost:9990 /] /profile=full/subsystem=datasources/data-source=ExampleDS:write-attribute(name=enabled,value=false)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => {"main-server-group" => {"host" => {
+        "secondary" => {"server-one" => {"response" => {
+            "outcome" => "success",
+            "result" => undefined,
+            "response-headers" => {
+                "operation-requires-restart" => true,
+                "process-state" => "restart-required"
+            }
+        }}},
+        "primary" => {
+            "server-one" => {"response" => {
+                "outcome" => "success",
+                "response-headers" => {
+                    "operation-requires-restart" => true,
+                    "process-state" => "restart-required"
+                }
+            }},
+            "server-two" => {"response" => {
+                "outcome" => "success",
+                "response-headers" => {
+                    "operation-requires-restart" => true,
+                    "process-state" => "restart-required"
+                }
+            }}
+        }
+    }}}
+}
+
+
+
+

the DC propagates the changes to itself host=primary, which in turn +propagates it to its two servers belonging to main-server-group which +uses the full profile. More interestingly, it also propagates it to +host=secondary which updates its local copy of the domain model, and then +propagates the change to its server-one which belongs to +main-server-group which uses the full profile.

+
+
+
+
+

4.2. Versions and backward compatibility

+
+

A HC and its servers will always be the same version of WildFly (they +use the same module path and jars). However, the DC and the secondary HCs do +not necessarily need to be the same version. One of the points in the +original specification for WildFly is that

+
+
+

Important

+
+
+ + + + + +
+ + +A Domain Controller should be able to manage secondary Host Controllers +older than itself. +
+
+
+

This means that for example a WildFly 10.1 DC should be able to work +with secondary HCs running WildFly 10. The opposite is not true, the DC must +be the same or the newest version in the domain.

+
+
+

4.2.1. Versioning of subsystems

+
+

To help with being able to know what is compatible we have versions +within the subsystems, this is stored in the subsystem’s extension. When +registering the subsystem you will typically see something like:

+
+
+
+
public class SomeExtension implements Extension {
+ 
+    private static final String SUBSYSTEM_NAME = "my-subsystem"'
+ 
+    private static final int MANAGEMENT_API_MAJOR_VERSION = 2;
+    private static final int MANAGEMENT_API_MINOR_VERSION = 0;
+    private static final int MANAGEMENT_API_MICRO_VERSION = 0;
+ 
+    /**
+     * {@inheritDoc}
+     * @see org.jboss.as.controller.Extension#initialize(org.jboss.as.controller.ExtensionContext)
+     */
+    @Override
+    public void initialize(ExtensionContext context) {
+ 
+        // IMPORTANT: Management API version != xsd version! Not all Management API changes result in XSD changes
+        SubsystemRegistration registration = context.registerSubsystem(SUBSYSTEM_NAME, MANAGEMENT_API_MAJOR_VERSION,
+                MANAGEMENT_API_MINOR_VERSION, MANAGEMENT_API_MICRO_VERSION);
+ 
+        //Register the resource definitions
+        ....
+    }
+    ....
+}
+
+
+
+

Which sets the ModelVersion of the subsystem.

+
+
+

Important

+
+
+ + + + + +
+ + +Whenever something changes in the subsystem, such as: +
+
+
+
    +
  • +

    an attribute is added or removed from a resource

    +
  • +
  • +

    a attribute is renamed in a resource

    +
  • +
  • +

    an attribute has its type changed

    +
  • +
  • +

    an attribute or operation parameter’s nillable or allows expressions +is changed

    +
  • +
  • +

    an attribute or operation parameter’s default value changes

    +
  • +
  • +

    a child resource type is added or removed

    +
  • +
  • +

    an operation is added or removed

    +
  • +
  • +

    an operation has its parameters changed

    +
  • +
+
+
+

and the current version of the subsystem has been part of a Final +release of WildFly, we must bump the version of the subsystem.

+
+
+

Once it has been increased you can of course make more changes until the +next Final release without more version bumps. It is also worth noting +that a new WildFly release does not automatically mean a new version for +the subsystem, the new version is only needed if something was changed. +For example the jaxrs subsystem remained on 1.0.0 for all versions +of WildFly and JBoss AS 7 through Wildfly 18.

+
+
+

You can find the ModelVersion of a subsystem by querying its +extension:

+
+
+
+
domain@localhost:9990 /] /extension=org.jboss.as.clustering.infinispan:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "module" => "org.jboss.as.clustering.infinispan",
+        "subsystem" => {"infinispan" => {
+            "management-major-version" => 2,
+            "management-micro-version" => 0,
+            "management-minor-version" => 0,
+            "xml-namespaces" => [jboss:domain:infinispan:1.0",
+                "urn:jboss:domain:infinispan:1.1",
+                "urn:jboss:domain:infinispan:1.2",
+                "urn:jboss:domain:infinispan:1.3",
+                "urn:jboss:domain:infinispan:1.4",
+                "urn:jboss:domain:infinispan:2.0"]
+        }}
+    }
+}
+
+
+
+
+
+

4.3. The role of transformers

+
+

Now that we have mentioned the secondary HCs registration process with the +DC, and know about ModelVersions, it is time to mention that when +registering with the DC, the secondary HC will send across a list of all its +subsystem ModelVersions. The DC maintains this information in a registry +for each secondary HC, so that it knows which transformers (if any) to +invoke for a legacy secondary. We will see how to write and register +transformers later on in +#How +do I write a transformer. secondary HCs from version 7.2.0 onwards will +also include a list of resources that they ignore (see +#Ignoring +resources on legacy hosts), and the DC will maintain this information +in its registry. The DC will not send across any resources that it knows +a secondary ignores during the initial domain model transfer. When +forwarding operations onto the secondary HCs, the DC will skip forwarding +those to secondary HCs ignoring those resources.

+
+
+

There are two kinds of transformers:

+
+
+
    +
  • +

    resource transformers

    +
  • +
  • +

    operation transformers

    +
  • +
+
+
+

The main function of transformers is to transform a subsystem to +something that the legacy secondary HC can understand, or to aggressively +reject things that the legacy secondary HC will not understand. Rejection, +in this context, essentially means, that the resource or operation +cannot safely be transformed to something valid on the secondary HC, so the +transformation fails. We will see later how to reject attributes in +#Rejecting +attributes, and child resources in +#Reject +child resource.

+
+
+

Both resource and operation transformers are needed, but take effect at +different times. Let us use the weld subsystem, which is relatively +simple, as an example. In JBoss AS 7.2.0 and lower it had a ModelVersion +of 1.0.0, and its resource description was as follows:

+
+
+
+
                {
+                    "description" => "The configuration of the weld subsystem.",
+                    "attributes" => {},
+                    "operations" => {
+                        "remove" => {
+                            "operation-name" => "remove",
+                            "description" => "Operation removing the weld subsystem.",
+                            "request-properties" => {},
+                            "reply-properties" => {}
+                        },
+                        "add" => {
+                            "operation-name" => "add",
+                            "description" => "Operation creating the weld subsystem.",
+                            "request-properties" => {},
+                            "reply-properties" => {}
+                        }
+                    },
+                    "children" => {}
+                },
+
+
+
+

In WildFly 29, it has a ModelVersion of 2.0.0 and has added two +attributes, require-bean-descriptor and non-portable mode:

+
+
+
+
{
+        "description" => "The configuration of the weld subsystem.",
+        "attributes" => {
+            "require-bean-descriptor" => {
+                "type" => BOOLEAN,
+                "description" => "If true then implicit bean archives without bean descriptor file (beans.xml) are ignored by Weld",
+                "expressions-allowed" => true,
+                "nillable" => true,
+                "default" => false,
+                "access-type" => "read-write",
+                "storage" => "configuration",
+                "restart-required" => "no-services"
+            },
+            "non-portable-mode" => {
+                "type" => BOOLEAN,
+                "description" => "If true then the non-portable mode is enabled. The non-portable mode is suggested by the specification to overcome problems with legacy applications that do not use CDI SPI properly and may be rejected by more strict validation in CDI 1.1.",
+                "expressions-allowed" => true,
+                "nillable" => true,
+                "default" => false,
+                "access-type" => "read-write",
+                "storage" => "configuration",
+                "restart-required" => "no-services"
+            }
+        },
+        "operations" => {
+            "remove" => {
+                "operation-name" => "remove",
+                "description" => "Operation removing the weld subsystem.",
+                "request-properties" => {},
+                "reply-properties" => {}
+            },
+            "add" => {
+                "operation-name" => "add",
+                "description" => "Operation creating the weld subsystem.",
+                "request-properties" => {
+                    "require-bean-descriptor" => {
+                        "type" => BOOLEAN,
+                        "description" => "If true then implicit bean archives without bean descriptor file (beans.xml) are ignored by Weld",
+                        "expressions-allowed" => true,
+                        "required" => false,
+                        "nillable" => true,
+                        "default" => false
+                    },
+                    "non-portable-mode" => {
+                        "type" => BOOLEAN,
+                        "description" => "If true then the non-portable mode is enabled. The non-portable mode is suggested by the specification to overcome problems with legacy applications that do not use CDI SPI properly and may be rejected by more strict validation in CDI 1.1.",
+                        "expressions-allowed" => true,
+                        "required" => false,
+                        "nillable" => true,
+                        "default" => false
+                    }
+                },
+                "reply-properties" => {}
+            }
+        },
+        "children" => {}
+    }
+
+
+
+

In the rest of this section we will assume that we are running a DC +running WildFly 29 so it will have ModelVersion 2.0.0 of the weld +subsystem, and that we are running a secondary HC using ModelVersion 1.0.0 of +the weld subsystem.

+
+
+

Important

+
+
+ + + + + +
+ + +Transformation always takes place on the Domain Controller, and is done +when sending across the initial domain model AND forwarding on +operations to legacy secondary HCs. +
+
+
+

4.3.1. Resource transformers

+
+

When copying over the centralized domain configuration as mentioned in +#Getting +the initial domain model, we need to make sure that the copy of the +domain model is something that the servers running on the legacy secondary +HC understand. So if the centralized domain configuration had any of the +two new attributes set, we would need to reject the transformation in +the transformers. One reason for this is to keep things consistent, it +doesn’t look good if you connect to the secondary HC and find attributes +and/or child resources when doing :read-resource which are not there +when you do :read-resource-description. Also, to make life easier for +subsystem writers, most instances of the describe operation use a +standard implementation which would include these attributes when +creating the add operation for the server, which could cause problems +there.

+
+
+

Another, more concrete example from the logging subsystem is that it +allows a ' %K{…​}' in the pattern formatter which makes the formatter +use color:

+
+
+
+
            <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
+
+
+
+

This ' %K{…​}' however was introduced in JBoss AS < 7.1.3 +(ModelVersion 1.2.0), so if that makes it across to a secondary HC running +an older version, the servers will fail to start up. So the logging +extension registers transformers to strip out the ' %K{…​}' from the +attribute value (leaving ' %-5p %c `(%t) %s%E%n"’) so that the old +secondary HC’s servers can understand it.

+
+
+
Rejection in resource transformers
+
+

Only secondary HCs from JBoss AS 7.2.0 and newer inform the DC about their +ignored resources (see +#Ignoring +resources on legacy hosts). This means that if a transformer on the DC +rejects transformation for a legacy secondary HC, exactly what happens to +the secondary HC depends on the version of the secondary HC. If the secondary HC is:

+
+
+
    +
  • +

    older than 7.2.0 - the DC has no means of knowing if the secondary HC +has ignored the resource being rejected or not. So we log a warning on +the DC, and send over the serialized part of that model anyway. If the +secondary HC has ignored the resource in question, it does not apply it. If +the secondary HC has not ignored the resource in question, it will apply it, +but no failure will happen until it tries to start a server which +references this bad configuration.

    +
  • +
  • +

    7.2.0 or newer - If a resource is ignored on the secondary HC, the DC +knows about this, and will not attempt to transform or send the resource +across to the secondary HC. If the resource transformation is rejected, we +know the resource was not ignored on the secondary HC and so we can +aggressively fail the transformation, which in turn will cause the secondary +HC to fail to start up.

    +
  • +
+
+
+
+
+

4.3.2. Operation transformers

+
+

When +#An +operation changes something in the domain configuration the operation +gets sent across to the secondary HCs to update their copies of the domain +model. The secondary HCs then forward this operation onto the affected +servers. The same considerations as in +#Resource +transformers are true, although operation transformers give you quicker +'feedback' if something is not valid. If you try to execute:

+
+
+
+
/profile=full/subsystem=weld:write-attribute(name=require-bean-descriptor, value=false)
+
+
+
+

This will fail on the legacy secondary HC since its version of the subsystem +does not contain any such attribute. However, it is best to aggressively +reject in such cases.

+
+
+
Rejection in operation transformers
+
+

For transformed operations we can always know if the operation is on an +ignored resource in the legacy secondary HC. In 7.2.0 onwards, we know this +through the DC’s registry of ignored resources on the secondary HC. In older +versions of secondary HCs, we send the operation across to the secondary HC, which +tries to invoke the operation. If the operation is against an ignored +resource we inform the DC about this fact. So as part of the +transformation process, if something gets rejected we can (and do!) fail +the transformation aggressively. If the operation invoked on the DC +results in the operation being sent across to 10 secondary HCs and one of +them has a legacy version which ends up rejecting the transformation, we +rollback the operation across the whole domain.

+
+
+
+
+

4.3.3. Different profiles for different versions

+
+

Now for the weld example we have been using there is a slight twist. +We have the new require-bean-descriptor and non-portable-mode +attributes. These have been added in WildFly 29 which supports Jakarta EE, +and thus CDI. +In CDI 1.1 the values of these attributes are tweakable, so they can be set +to either true or false. The default behaviour for these in CDI 1.1, +if not set, is that they are false. However, for CDI 1.0 these were +not tweakable, and with the way the subsystem in JBoss AS 7.x worked is +similar to if they are set to true.

+
+
+

The above discussion implies that to use the weld subsystem on a legacy +secondary HC, the domain.xml configuration for it must look like:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:weld:2.0"
+      require-bean-descriptor="true"
+      non-portable-mode="true"/>
+
+
+
+

We will see the exact mechanics for how this is actually done later but +in short when pushing this to a legacy secondary HC we register transformers +which reject the transformation if these attributes are not set to +true since that implies some behavior not supported on the legacy +secondary HC. If they are true, all is well, and the transformers discard, +or remove, these attributes since they don’t exist in the legacy model. +This removal is fine since they have the values which would result in +the behavior assumed on the legacy secondary HC.

+
+
+

That way the older secondary HCs will work fine. However, we might also have +WildFly 29 secondary HCs in our domain, and they are missing out on the new +features introduced by the attributes introduced in ModelVersion 2.0.0. +If we do

+
+
+
+
<subsystem xmlns="urn:jboss:domain:weld:2.0"
+      require-bean-descriptor="false"
+      non-portable-mode="false"/>
+
+
+
+

then it will fail when doing transformation for the legacy controller. +The solution is to put these in two different profiles in domain.xml

+
+
+
+
<domain>
+....
+  <profiles>
+    <profile name="full">
+      <subsystem xmlns="urn:jboss:domain:weld:2.0"
+        require-bean-descriptor="false"
+        non-portable-mode="false"/>
+      ...
+    </profile>
+    <profile name="full-legacy">
+      <subsystem xmlns="urn:jboss:domain:weld:2.0"
+        require-bean-descriptor="true"
+        non-portable-mode="true"/>
+      ...
+    </profile>
+  </profiles>
+  ...
+  <server-groups>
+    <server-group name="main-server-group" profile="full">
+      ....
+    <server-group>
+    <server-group name="main-server-group-legacy" profile="full-legacy">
+      ....
+    <server-group>
+  </server-groups>
+</domain>
+
+
+
+

Then have the HCs using WildFly 29 make their servers reference the +main-server-group server group, and the HCs using older versions of +WildFly 29 make their servers reference the main-server-group-legacy +server group.

+
+
+
Ignoring resources on legacy hosts
+
+

Booting the above configuration will still cause problems on legacy +secondary HCs, especially if they are JBoss AS 7.2.0 or later. The reason +for this is that when they register themselves with the DC it lets the +DC know which ignored resources they have. If the DC comes to +transform something it should reject for a secondary HC and it is not part +of its ignored resources it will aggressively fail the transformation. +Versions of JBoss AS older than 7.2.0 still have this ignored resources +mechanism, but don’t let the DC know about what they have ignored so the +DC cannot reject aggressively - instead it will log some warnings. +However, it is still good practice to ignore resources you are not +interested in regardless of which legacy version the secondary HC is +running.

+
+
+

To ignore the profile we cannot understand we do the following in the +legacy secondary HC’s host.xml

+
+
+
+
<host xmlns="urn:jboss:domain:1.3" name="secondary">
+...
+    <domain-controller>
+       <remote host="${jboss.test.host.primary.address}" port="${jboss.domain.primary.port:9999}" authentication-context="primary-context">
+            <ignored-resources type="profile">
+                <instance name="full-legacy"/>
+            </ignored-resources>
+       </remote>
+    </domain-controller>
+....
+</host>
+
+
+
+

Important

+
+
+ + + + + +
+ + +Any top-level resource type can be ignored profile, extension, +server-group etc. Ignoring a resource instance ignores that resource, +and all its children. +
+
+
+
+
+
+

4.4. How do I know what needs to be transformed?

+
+

There is a set of related classes in the org.wildfly.legacy.util +package to help you determine this. These now live at +https://github.com/wildfly/wildfly-legacy-test/tree/main/tools/src/main/java/org/wildfly/legacy/util.
+They are all runnable in your IDE, just start the WildFly or JBoss AS 7 +instances as described below.

+
+
+

4.4.1. Getting data for a previous version

+
+

https://github.com/wildfly/wildfly-legacy-test/tree/main/tools/src/main/resources/legacy-models +contains the output for the previous WildFly/JBoss AS 7 versions, so +check if the files for the version you want to check backwards +compatibility are there yet. If not, then you need to do the following +to get the subsystem definitions:

+
+
+
    +
  1. +

    Start the old version of WildFly/JBoss AS 7 using +--server-config=standalone-full-ha.xml

    +
  2. +
  3. +

    Run org.wildfly.legacy.util.GrabModelVersionsUtil, which will +output the subsystem versions to +target/standalone-model-versions-running.dmr

    +
  4. +
  5. +

    Run org.wildfly.legacy.util.DumpStandaloneResourceDefinitionUtil +which will output the full resource definition to +target/standalone-resource-definition-running.dmr

    +
  6. +
  7. +

    Stop the running version of WildFly/JBoss AS 7

    +
  8. +
+
+
+
+

4.4.2. See what changed

+
+

To do this follow the following steps

+
+
+
    +
  1. +

    Start the new version of WildFly using +--server-config=standalone-full-ha.xml

    +
  2. +
  3. +

    Run org.wildfly.legacy.util.CompareModelVersionsUtil and answer +the following questions"

    +
    +
      +
    1. +

      Enter Legacy AS version:

      +
      +
        +
      • +

        If it is known version in the tools/src/test/resources/legacy-models +folder, enter the version number.

        +
      • +
      • +

        If it is a not known version, and you got the data yourself in the +last step, enter ' `running’

        +
      • +
      +
      +
    2. +
    3. +

      Enter type:

      +
      +
        +
      • +

        Answer ' `S’

        +
      • +
      +
      +
    4. +
    +
    +
  4. +
  5. +

    Read from target directory or from the legacy-models directory:

    +
    +
      +
    • +

      If it is known version in the +controller/src/test/resources/legacy-models folder, enter ' `l’.

      +
    • +
    • +

      If it is a not known version, and you got the data yourself in the +last step, enter ' `t’

      +
    • +
    +
    +
  6. +
  7. +

    Report on differences in the model when the management versions are +different?:

    +
    +
      +
    • +

      Answer ' `y’

      +
    • +
    +
    +
  8. +
+
+
+

Here is some example output, as a subsystem developer you can ignore +everything down to ======= Comparing subsystem models ======:

+
+
+
+
Enter legacy AS version: 7.2.0.Final
+Using target model: 7.2.0.Final
+Enter type [S](standalone)/H(host)/D(domain)/F(domain + host):S
+Read from target directory or from the legacy-models directory - t/[l]:
+Report on differences in the model when the management versions are different? y/[n]: y
+Reporting on differences in the model when the management versions are different
+Loading legacy model versions for 7.2.0.Final....
+Loaded legacy model versions
+Loading model versions for currently running server...
+Oct 01, 2013 6:26:03 PM org.xnio.Xnio <clinit>
+INFO: XNIO version 3.1.0.CR7
+Oct 01, 2013 6:26:03 PM org.xnio.nio.NioXnio <clinit>
+INFO: XNIO NIO Implementation Version 3.1.0.CR7
+Oct 01, 2013 6:26:03 PM org.jboss.remoting3.EndpointImpl <clinit>
+INFO: JBoss Remoting version 4.0.0.Beta1
+Loaded current model versions
+Loading legacy resource descriptions for 7.2.0.Final....
+Loaded legacy resource descriptions
+Loading resource descriptions for currently running STANDALONE...
+Loaded current resource descriptions
+Starting comparison of the current....
+ 
+======= Comparing core models ======
+-- SNIP --
+ 
+======= Comparing subsystem models ======
+-- SNIP --
+======= Resource root address: ["subsystem" => "remoting"] - Current version: 2.0.0; legacy version: 1.2.0 =======
+--- Problems for relative address to root []:
+Missing child types in current: []; missing in legacy [http-connector]
+--- Problems for relative address to root ["remote-outbound-connection" => "*"]:
+Missing attributes in current: []; missing in legacy [protocol]
+Missing parameters for operation 'add' in current: []; missing in legacy [protocol]
+-- SNIP --
+======= Resource root address: ["subsystem" => "weld"] - Current version: 2.0.0; legacy version: 1.0.0 =======
+--- Problems for relative address to root []:
+Missing attributes in current: []; missing in legacy [require-bean-descriptor, non-portable-mode]
+Missing parameters for operation 'add' in current: []; missing in legacy [require-bean-descriptor, non-portable-mode]
+ 
+Done comparison of STANDALONE!
+
+
+
+

So we can see that for the remoting subsystem, we have added a child +type called http-connector, and we have added an attribute called +protocol (they are missing in legacy).
+in the weld subsystem, we have added the require-bean-descriptor and +non-portable-mode attributes in the current version. It will also +point out other issues like changed attribute types, changed defaults +etc.

+
+
+

Warning

+
+
+ + + + + +
+ + +Note that CompareModelVersionsUtil simply inspects the raw resource +descriptions of the specified legacy and current models. Its results +show the differences between the two. They do not take into account +whether one or more transformers have already been written for those +versions differences. You will need to check that transformers are not +already in place for those versions. +
+
+
+

One final point to consider are that some subsystems register +runtime-only resources and operations. For example the modcluster +subsystem has a stop method. These do not get registered on the DC, +e.g. there is no /profile=full-ha/subsystem=modcluster:stop operation, +it only exists on the servers, for example +/host=xxx/server=server-one/subsystem=modcluster:stop. What this means +is that you don’t have to transform such operations and resources. The +reason is they are not callable on the DC, and so do not need +propagation to the servers in the domain, which in turn means no +transformation is needed.

+
+
+
+
+

4.5. How do I write a transformer?

+
+

There are two APIs available to write transformers for a resource. There +is the original low-level API where you register transformers directly, +the general idea is that you get hold of a TransformersSubRegistration +for each level and implement the ResourceTransformer, +OperationTransformer and PathAddressTransformer interfaces directly. +It is, however, a pretty complex thing to do, so we recommend the other +approach. For completeness here is the entry point to handling +transformation in this way.

+
+
+
+
public class SomeExtension implements Extension {
+ 
+    private static final String SUBSYSTEM_NAME = "my-subsystem"'
+ 
+    private static final int MANAGEMENT_API_MAJOR_VERSION = 2;
+    private static final int MANAGEMENT_API_MINOR_VERSION = 0;
+    private static final int MANAGEMENT_API_MICRO_VERSION = 0;
+ 
+    @Override
+    public void initialize(ExtensionContext context) {
+        SubsystemRegistration registration = context.registerSubsystem(SUBSYSTEM_NAME, MANAGEMENT_API_MAJOR_VERSION,
+                MANAGEMENT_API_MINOR_VERSION, MANAGEMENT_API_MICRO_VERSION);
+        //Register the resource definitions
+        ....
+    }
+ 
+    static void registerTransformers(final SubsystemRegistration subsystem) {
+        registerTransformers_1_1_0(subsystem);
+        registerTransformers_1_2_0(subsystem);
+    }
+ 
+    /**
+     * Registers transformers from the current version to ModelVersion 1.1.0
+     */
+    private static void registerTransformers_1_1_0(final SubsystemRegistration subsystem) {
+        final ModelVersion version = ModelVersion.create(1, 1, 0);
+ 
+        //The default resource transformer forwards all operations
+        final TransformersSubRegistration registration = subsystem.registerModelTransformers(version, ResourceTransformer.DEFAULT);
+        final TransformersSubRegistration child = registration.registerSubResource(PathElement.pathElement("child"));
+        //We can do more things on the TransformersSubRegistation instances
+ 
+ 
+        registerRelayTransformers(stack);
+    }
+
+
+
+

Having implemented a number of transformers using the above approach, we +decided to simplify things, so we introduced the +org.jboss.as.controller.transform.description.ResourceTransformationDescriptionBuilder +API. It is a lot simpler and avoids a lot of the duplication of +functionality required by the low-level API approach. While it doesn’t +give you the full power that the low-level API does, we found that there +are very few places in the WildFly codebase where this does not work, so +we will focus on the ResourceTransformationDescriptionBuilder API +here. (If you come across a problem where this does not work, get in +touch with someone from the WildFly Domain Management Team and we should +be able to help). The builder API makes all the nasty calls to +TransformersSubRegistration for you under the hood. It also allows you +to fall back to the low-level API in places, although that will not be +covered in the current version of this guide. The entry point for using +the builder API here is taken from the WeldExtension (in current WildFly +this has ModelVersion 2.0.0).

+
+
+
+
    private void registerTransformers(SubsystemRegistration subsystem) {
+        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
+        //These new attributes are assumed to be 'true' in the old version but default to false in the current version. So discard if 'true' and reject if 'undefined'.
+        builder.getAttributeBuilder()
+                .setDiscard(new DiscardAttributeChecker.DiscardAttributeValueChecker(false, false, new ModelNode(true)),
+                        WeldResourceDefinition.NON_PORTABLE_MODE_ATTRIBUTE, WeldResourceDefinition.REQUIRE_BEAN_DESCRIPTOR_ATTRIBUTE)
+                .addRejectCheck(new RejectAttributeChecker.DefaultRejectAttributeChecker() {
+ 
+                    @Override
+                    public String getRejectionLogMessage(Map<String, ModelNode> attributes) {
+                        return WeldMessages.MESSAGES.rejectAttributesMustBeTrue(attributes.keySet());
+                    }
+ 
+                    @Override
+                    protected boolean rejectAttribute(PathAddress address, String attributeName, ModelNode attributeValue,
+                            TransformationContext context) {
+                        //This will not get called if it was discarded, so reject if it is undefined (default==false) or if defined and != 'true'
+                        return !attributeValue.isDefined() || !attributeValue.asString().equals("true");
+                    }
+                }, WeldResourceDefinition.NON_PORTABLE_MODE_ATTRIBUTE, WeldResourceDefinition.REQUIRE_BEAN_DESCRIPTOR_ATTRIBUTE)
+                .end();
+        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 0, 0));
+    }
+
+
+
+

Here we register a discard check and a reject check. As mentioned in +#Attribute +transformation lifecycle all attributes are inspected for whether they +should be discarded first. Then all attributes which were not discarded +are checked for if they should be rejected. We will dig more into what +this code means in the next few sections, but in short it means that we +discard the require-bean-descriptor and non-portable attributes on +the weld subsystem resource if they have the value true. If they +have any other value, they will not get discarded and so reach the +reject check, which will reject the transformation of the attributes if +they have any other value.

+
+
+

Here we are saying that we should discard the require-bean-descriptor +and non-portable-mode attributes on the weld subsystem resource if +they are undefined, and reject them if they are defined. So that means +that if the weld subsystem looks like

+
+
+
+
    {
+        "non-portable-mode" => false,
+        "require-bean-descriptor" => false
+    }
+
+
+
+

or

+
+
+
+
    {
+        "non-portable-mode" => undefined,
+        "require-bean-descriptor" => undefined
+    }
+
+
+
+

or any other combination (the default values for these attributes if +undefined is false) we will reject the transformation for the secondary +legacy HC.

+
+
+

If the resource has true for these attributes:

+
+
+
+
    {
+        "non-portable-mode" => true,
+        "require-bean-descriptor" => true
+    }
+
+
+
+

they both get discarded (i.e. removed), so they will not get inspected +for rejection, and an empty model not containing these attributes gets +sent to the legacy HC.

+
+
+

Here we will discuss this API a bit more, to outline the most important +features/most commonly needed tasks.

+
+
+

4.5.1. ResourceTransformationDescriptionBuilder

+
+

The ResourceTransformationDescriptionBuilder contains transformations +for a resource type. The initial one is for the subsystem, obtained by +the following call:

+
+
+
+
        ResourceTransformationDescriptionBuilder subsystemBuilder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
+
+
+
+

The ResourceTransformationDescriptionBuilder contains functionality +for how to handle child resources, which we will look at in this +section. It is also the entry point to how to handle transformation of +attributes as we will see in +#AttributeTransformationDescriptionBuilder. +Also, it allows you to further override operation transformation as +discussed in +#OperationTransformationOverrideBuilder. +When we have finished with our builder, we register it with the +SubsystemRegistration against the target ModelVersion.

+
+
+
+
        TransformationDescription.Tools.register(subsystemBuilder.build(), subsystem, ModelVersion.create(1, 0, 0));
+
+
+
+

Important

+
+
+ + + + + +
+ + +If you have several old ModelVersions you could be transforming to, you +need a separate builder for each of those. +
+
+
+
Silently discard child resources
+
+

To make the ResourceTransformationDescriptionBuilder do something, we +need to call some of its methods. For example, if we want to silently +discard a child resource, we can do

+
+
+
+
    subsystemBuilder.discardChildResource(PathElement.pathElement("child", "discarded"));
+
+
+
+

This means that any usage of /subsystem=my-subsystem/child=discarded +never make it to the legacy secondary HC running ModelVersion 1.0.0. During +the initial domain model transfer, that part of the serialized domain +model is stripped out, and any operations on this address are not +forwarded on to the legacy secondary HCs running that version of the +subsystem. (For brevity this section will leave out the leading +/profile=xxx part used in domain mode, and use +/subsystem=my-subsystem as the 'top-level' address).

+
+
+

Warning

+
+
+ + + + + +
+ + +Note that discarding, although the simplest option in theory, is rarely +the right thing to do. +
+
+
+

The presence of the defined child normally implies some behaviour on the +DC, and that behaviour is not available on the legacy secondary HC, so +normally rejection is a better policy for those cases. Remember we can +have different profiles targeting different groups of versions of legacy +secondary HCs.

+
+
+
+
Reject child resource
+
+

If we want to reject transformation if a child resource exists, we can +do

+
+
+
+
    subsystemBuilder.rejectChildResource(PathElement.pathElement("child", "reject"));
+
+
+
+

Now, if there are any legacy secondary HCs running ModelVersion 1.0.0, any +usage of /subsystem=my-subsystem/child=reject will get rejected for +those secondary HCs. Both during the initial domain model transfer, and if any +operations are invoked on that address. For example the remoting +subsystem did not have a http-connector=* child until ModelVersion +2.0.0, so it is set up to reject that child when transforming to legacy +HCs for all previous ModelVersions (1.1.0, 1.2.0 and 1.3.0). (See +#Rejection +in resource transformers and +#Rejection +in operation transformers for exactly what happens when something is +rejected).

+
+
+
+
Redirect address for child resource
+
+

Sometimes we rename the addresses for a child resource between model +versions. To do that we use one of the addChildRedirection() methods, +note that these also return a builder for the child resource (since we +are not rejecting or discarding it), we can do this for all children of +a given type:

+
+
+
+
    ResourceTransformationDescriptionBuilder childBuilder =
+       subsystemBuilder.addChildRedirection(PathElement.pathElement("newChild"), PathElement.pathElement("oldChild");
+
+
+
+

Now, in the initial domain transfer +/subsystem=my-subsystem/newChild=test becomes +/subsystem=my-subsystem/oldChild=test. Similarly all operations +against the former address get mapped to the latter when executing +operations on the DC before sending them to the legacy secondary HC running +ModelVersion 1.1.0 of the subsystem.

+
+
+

We can also rename a specific named child:

+
+
+
+
    ResourceTransformationDescriptionBuilder childBuilder =
+       subsystemBuilder.addChildRedirection(PathElement.pathElement("newChild", "newName"), PathElement.pathElement("oldChild", "oldName");
+
+
+
+

Now, /subsystem=my-subsystem/newChild=newName becomes +/subsystem=my-subsystem/oldChild=oldName both in the initial domain +transfer, and when mapping operations to the legacy secondary HC. For example, +under the web subsystem ssl=configuration got renamed to +configuration=ssl in later versions, meaning we need a redirect from +configuration=ssl to ssl=configuration in its transformers.

+
+
+
+
Getting a child resource builder
+
+

Sometimes we don’t want to transform the subsystem resource, but we want +to transform something in one of its child resources. Again, since we +are not discarding or rejecting, we get a reference to the builder for +the child resource.

+
+
+
+
    ResourceTransformationDescriptionBuilder childBuilder =
+       subsystemBuilder.addChildResource(PathElement.pathElement("some-child"));
+    //We don't actually want to transform anything in /subsystem-my-subsystem/some-child=* either :-)
+    //We are interested in /subsystem-my-subsystem/some-child=*/another-level
+    ResourceTransformationDescriptionBuilder anotherBuilder =
+       childBuilder.addChildResource(PathElement.pathElement("another-level"));
+ 
+    //Use anotherBuilder to add child-resource and/or attribute transformation
+    ....
+
+
+
+
+
+

4.5.2. AttributeTransformationDescriptionBuilder

+
+

To transform attributes you call +ResourceTransformationDescriptionBuilder.getAttributeBuilder() which +returns you a AttributeTransformationDescriptionBuilder which is used +to define transformation for the resource’s attributes. For example this +gets the attribute builder for the subsystem resource:

+
+
+
+
    AttributeTransformationDescriptionBuilder attributeBuilder = subSystemBuilder.getAttributeBuilder();
+
+
+
+

or we could get it for one of the child resources:

+
+
+
+
    ResourceTransformationDescriptionBuilder childBuilder =
+       subsystemBuilder.addChildResource(PathElement.pathElement("some-child"));
+    AttributeTransformationDescriptionBuilder attributeBuilder = childBuilder.getAttributeBuilder();
+
+
+
+

The attribute transformations defined by the +AttributeTransformationDescriptionBuilder will also impact the +parameters to all operations defined on the resource. This means that if +you have defined the example attribute of +/subsystem=my-subsystem/some-child=* to reject transformation if its +value is true, the inital domain transfer will reject if it is true, +also the transformation of the following operations will reject:

+
+
+
+
    /subsystem=my-subsystem/some-child=test:add(example=true)
+    /subsystem=my-subsystem:write-attribute(name=example, value=true)
+    /subsystem=my-subsystem:custom-operation(example=true)
+
+
+
+

The following operations will pass in this example, since the example +attribute is not getting set to true

+
+
+
+
    /subsystem=my-subsystem/some-child=test:add(example=false)
+    /subsystem=my-subsystem/some-child=test:add()             //Here it 'example' is simply left undefined
+    /subsystem=my-subsystem:write-attribute(name=example, value=false)
+    /subsystem=my-subsystem:undefine-attribute(name=example)  //Again this makes 'example' undefined
+    /subsystem=my-subsystem:custom-operation(example=false)
+
+
+
+

For the rest of the examples in this section we assume that the +attributeBuilder is for /subsystem=my-subsystem

+
+
+
Attribute transformation lifecycle
+
+

There is a well defined lifecycle used for attribute transformation that +is worth explaining before jumping into specifics. Transformation is +done in the following phases, in the following order:

+
+
+
    +
  1. +

    discard - All attributes in the domain model transfer or invoked +operation that have been registered for a discard check, are checked to +see if the attribute should be discarded. If an attribute should be +discarded, it is removed from the resource’s attributes/operation’s +parameters and it does not get passed to the next phases. Once discarded +it does not get sent to the legacy secondary HC.

    +
  2. +
  3. +

    reject - All attributes that have been registered for a reject +check (and which not have been discarded) are checked to see if the +attribute should be rejected. As explained in +#Rejection +in resource transformers and +#Rejection +in operation transformers exactly what happens when something is +rejected varies depending on whether we are transforming a resource or +an operation, and the version of the legacy secondary HC we are transforming +for. If a transformer rejects an attribute, all other reject +transformers still get invoked, and the next phases also get invoked. +This is because we don’t know in all cases what will happen if a reject +happens. Although this might sound cumbersome, in practice it actually +makes it easier to write transformers since you only need one kind +regardless of if it is a resource, an operation, and legacy secondary HC +version. However, as we will see in +Common +transformation use-cases, it means some extra checks are needed when +writing reject and convert transformers.

    +
  4. +
  5. +

    convert - All attributes that have been registered for conversion +are checked to see if the attribute should be converted. If the +attribute does not exist in the original operation/resource it may be +introduced. This is useful for setting default values for the target +legacy secondary HC.

    +
  6. +
  7. +

    rename - All attributes registered for renaming are renamed.

    +
  8. +
+
+
+

Next, let us have a look at how to register attributes for each of these +phases.

+
+
+
+
Discarding attributes
+
+

The general idea behind a discard is that we remove attributes which do +not exist in the legacy secondary HC’s model. However, as hopefully +described below, we normally can’t simply discard everything, we need to +check the values first.

+
+
+

To discard an attribute we need an instance of +org.jboss.as.controller.transform.description.DiscardAttributeChecker, +and call the following method on the +AttributeTransformationDescriptionBuilder:

+
+
+
+
     DiscardAttributeChecker discardCheckerA = ....;
+     attributeBuilder.setDiscard(discardCheckerA, "attr1", "attr2");
+
+
+
+

As shown, you can register the DiscardAttributeChecker for several +attributes at once, in the above example both attr1 and attr2 get +checked for if they should be discarded. You can also register different +DiscardAttributeChecker instances for different attributes:

+
+
+
+
     DiscardAttributeChecker discardCheckerA = ....;
+     DiscardAttributeChecker discardCheckerB = ....;
+     attributeBuilder.setDiscard(discardCheckerA, "attr1");
+     attributeBuilder.setDiscard(discardCheckerA, "attr2");
+
+
+
+

Note that you can only have one DiscardAttributeChecker per attribute, +so the following would cause an error (if running with assertions +enabled, otherwise discardCheckerB will overwrite discardCheckerA):

+
+
+
+
     DiscardAttributeChecker discardCheckerA = ....;
+     DiscardAttributeChecker discardCheckerB = ....;
+     attributeBuilder.setDiscard(discardCheckerA, "attr1");
+     attributeBuilder.setDiscard(discardCheckerB, "attr1");
+
+
+
+
The DiscardAttributeChecker interface
+
+

org.jboss.as.controller.transform.description.DiscardAttributeChecker +contains both the DiscardAttributeChecker and some helper +implementations. The implementations of this interface get called for +each attribute they are registered against. The interface itself is +quite simple:

+
+
+
+
public interface DiscardAttributeChecker {
+ 
+    /**
+     * Returns {@code true} if the attribute should be discarded if expressions are used
+     *
+     * @return whether to discard if expressions are used
+     */
+    boolean isDiscardExpressions();
+
+
+
+

Return true here to discard the attribute if it is an expression. If +it is an expression, and this method returns true, the +isOperationParameterDiscardable and isResourceAttributeDiscardable +methods will not get called.

+
+
+
+
    /**
+     * Returns {@code true} if the attribute should be discarded if it is undefined
+     *
+     * @return whether to discard if the attribute is undefined
+     */
+    boolean isDiscardUndefined();
+
+
+
+

Return true here to discard the attribute if it is undefined. If it +is undefined, and this method returns true, the +isDiscardExpressions, isOperationParameterDiscardable and +isResourceAttributeDiscardable methods will not get called.

+
+
+
+
    /**
+     * Gets whether the given operation parameter can be discarded
+     *
+     * @param address the address of the operation
+     * @param attributeName the name of the operation parameter.
+     * @param attributeValue the value of the operation parameter.
+     * @param operation the operation executed. This is unmodifiable.
+     * @param context the context of the transformation
+     *
+     * @return {@code true} if the operation parameter value should be discarded, {@code false} otherwise.
+     */
+    boolean isOperationParameterDiscardable(PathAddress address, String attributeName, ModelNode attributeValue, ModelNode operation, TransformationContext context);
+
+
+
+

If we are transforming an operation, this method gets called for each +operation parameter. We have access to the address of the operation, the +name and value of the operation parameter, an unmodifiable copy of the +original operation and the TransformationContext. The +TransformationContext allows you access to the original resource the +operation is working on before any transformation happened, which is +useful if you want to check other values in the resource if this is, say +a write-attribute operation. Return true to discard the operation.

+
+
+
+
    /**
+     * Gets whether the given attribute can be discarded
+     *
+     * @param address the address of the resource
+     * @param attributeName the name of the attribute
+     * @param attributeValue the value of the attribute
+     * @param context the context of the transformation
+     *
+     * @return {@code true} if the attribute value should be discarded, {@code false} otherwise.
+     */
+    boolean isResourceAttributeDiscardable(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
+
+
+
+

If we are transforming a resource, this method gets called for each +attribute in the resource. We have access to the address of the +resource, the name and value of the attribute, and the +TransformationContext. Return true to discard the operation.

+
+
+
+
}
+
+
+
+
+
DiscardAttributeChecker helper classes/implementations
+
+

DiscardAttributeChecker contains a few helper implementations for the +most common cases to save you writing the same stuff again and again.

+
+
+DiscardAttributeChecker.DefaultDiscardAttributeChecker +
+

DiscardAttributeChecker.DefaultDiscardAttributeChecker is an abstract +convenience class. In most cases you don’t need a separate check for if +an operation or a resource is being transformed, so it makes both the +isResourceAttributeDiscardable() and +isOperationParameterDiscardable() methods call the following method.

+
+
+
+
protected abstract boolean isValueDiscardable(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
+
+
+
+

All you lose, in the case of an operation transformation, is the name of +the transformed operation. The constructor of +DiscardAttributeChecker.DefaultDiscardAttributeChecker also allows you +to define values for isDiscardExpressions() and +isDiscardUndefined().

+
+
+
+DiscardAttributeChecker.DiscardAttributeValueChecker +
+

This is another convenience class, which allows you to discard an +attribute if it has one or more values. Here is a real-world example +from the jpa subsystem:

+
+
+
+
    private void initializeTransformers_1_1_0(SubsystemRegistration subsystemRegistration) {
+        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
+        builder.getAttributeBuilder()
+            .setDiscard(
+                   new DiscardAttributeChecker.DiscardAttributeValueChecker(new ModelNode(ExtendedPersistenceInheritance.DEEP.toString())),
+                   JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE)
+            .addRejectCheck(RejectAttributeChecker.DEFINED, JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE)
+            .end();
+        TransformationDescription.Tools.register(builder.build(), subsystemRegistration, ModelVersion.create(1, 1, 0));
+    }
+
+
+
+

We will come back to the reject checks in the +#Rejecting +attributes section. We are saying that we should discard the +JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE attribute if it +has the value deep. The reasoning here is that this attribute did not +exist in the old model, but the legacy secondary HCs implied behaviour is +that this was deep. In the current version we added the possibility to +toggle this setting, but only deep is consistent with what is +available in the legacy secondary HC. In this case we are using the +constructor for DiscardAttributeChecker.DiscardAttributeValueChecker +which says don’t discard if it uses expressions, and discard if it is +undefined. If it is undefined in the current model, looking at the +default value of +JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE, it is deep, +so a discard is in line with the implied legacy behaviour. If an +expression is used, we cannot discard since we have no idea what the +expression will resolve to on the secondary HC.

+
+
+
+DiscardAttributeChecker.ALWAYS +
+

DiscardAttributeChecker.ALWAYS will always discard an attribute. Use +this sparingly, since normally the presence of an attribute in the +current model implies some behaviour should be turned on, and if that +does not exist in the legacy model it implies that that behaviour does +not exist in the legacy secondary HC and its servers. Normally the legacy +secondary HC’s subsystem has some implied behaviour which is better checked +for by using a DiscardAttributeChecker.DiscardAttributeValueChecker. +One valid use for DiscardAttributeChecker.ALWAYS can be found in the +ejb3 subsystem:

+
+
+
+
    private static void registerTransformers_1_1_0(SubsystemRegistration subsystemRegistration) {
+        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance()
+                .getAttributeBuilder()
+                 ...
+                // We can always discard this attribute, because it's meaningless without the security-manager subsystem, and
+                // a legacy secondary HC can't have that subsystem in its profile.
+                .setDiscard(DiscardAttributeChecker.ALWAYS, EJB3SubsystemRootResourceDefinition.DISABLE_DEFAULT_EJB_PERMISSIONS)
+   ...
+
+
+
+

As the comment says, this attribute only makes sense with the +security-manager susbsystem, which does not exist on legacy secondary HCs +running ModelVersion 1.1.0 of the ejb3 subsystem.

+
+
+
+DiscardAttributeChecker.UNDEFINED +
+

DiscardAttributeChecker.UNDEFINED will discard an attribute if it is +undefined. This is normally safer than +DiscardAttributeChecker.ALWAYS since the attribute is not set in the +current model, we don’t need to send it to the legacy model. However, +you should check that this attribute not existing in the legacy secondary +HC, implies the same functionality as being undefined in the current DC.

+
+
+
+
+
+
Rejecting attributes
+
+

The next step is to check attributes and values which we know for sure +will not work on the target legacy secondary HC.

+
+
+

To reject an attribute we need an instance of +org.jboss.as.controller.transform.description.RejectAttributeChecker, +and call the following method on the +AttributeTransformationDescriptionBuilder:

+
+
+
+
     RejectAttributeChecker rejectCheckerA = ....;
+     attributeBuilder.addRejectCheck(rejectCheckerA, "attr1", "attr2");
+
+
+
+

As shown you can register the RejectAttributeChecker for several +attributes at once, in the above example both attr1 and attr2 get +checked for if they should be discarded. You can also register different +RejectAttributeChecker instances for different attributes:

+
+
+
+
     RejectAttributeChecker rejectCheckerA = ....;
+     RejectAttributeChecker rejectCheckerB = ....;
+     attributeBuilder.addRejectCheck(rejectCheckerA, "attr1");
+     attributeBuilder.addRejectCheck(rejectCheckerB, "attr2");
+
+
+
+

You can also register several RejectAttributeChecker instances per +attribute

+
+
+
+
     RejectAttributeChecker rejectCheckerA = ....;
+     RejectAttributeChecker rejectCheckerB = ....;
+     attributeBuilder.addRejectCheck(rejectCheckerA, "attr1");
+     attributeBuilder.addRejectCheck(rejectCheckerB, "attr1, "attr2");
+
+
+
+

In this case attr1 gets both rejectCheckerA and rejectCheckerB. +For attributes with several RejectAttributeChecker registered, they +get processed in the order that they have been added. So when checking +attr1 for rejection, rejectCheckerA gets run before +rejectCheckerB. As mentioned in +#Attribute +transformation lifecycle, if an attribute is rejected, we still invoke +the rest of the reject checkers.

+
+
+
The RejectAttributeChecker interface
+
+

org.jboss.as.controller.transform.description.RejectAttributeChecker +contains both the RejectAttributeChecker and some helper +implementations. The implementations of this interface get called for +each attribute they are registered against. The interface itself is +quite simple, and its main methods are similar to +DiscardAttributeChecker:

+
+
+
+
public interface RejectAttributeChecker {
+    /**
+     * Determines whether the given operation parameter value is not understandable by the target process and needs
+     * to be rejected.
+     *
+     * @param address        the address of the operation
+     * @param attributeName  the name of the attribute
+     * @param attributeValue the value of the attribute
+     * @param operation      the operation executed. This is unmodifiable.
+     * @param context        the context of the transformation
+     * @return {@code true} if the parameter value is not understandable by the target process and so needs to be rejected, {@code false} otherwise.
+     */
+    boolean rejectOperationParameter(PathAddress address, String attributeName, ModelNode attributeValue, ModelNode operation, TransformationContext context);
+
+
+
+

If we are transforming an operation, this method gets called for each +operation parameter. We have access to the address of the operation, the +name and value of the operation parameter, an unmodifiable copy of the +original operation and the TransformationContext. The +TransformationContext allows you access to the original resource the +operation is working on before any transformation happened, which is +useful if you want to check other values in the resource if this is, say +a write-attribute operation. Return true to reject the operation.

+
+
+
+
    /**
+     * Gets whether the given resource attribute value is not understandable by the target process and needs
+     * to be rejected.
+     *
+     * @param address        the address of the resource
+     * @param attributeName  the name of the attribute
+     * @param attributeValue the value of the attribute
+     * @param context        the context of the transformation
+     * @return {@code true} if the attribute value is not understandable by the target process and so needs to be rejected, {@code false} otherwise.
+     */
+    boolean rejectResourceAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
+
+
+
+

If we are transforming a resource, this method gets called for each +attribute in the resource. We have access to the address of the +resource, the name and value of the attribute, and the +TransformationContext. Return true to discard the operation.

+
+
+
+
    /**
+     * Returns the log message id used by this checker. This is used to group it so that all attributes failing a type of rejection
+     * end up in the same error message
+     *
+     * @return the log message id
+     */
+    String getRejectionLogMessageId();
+
+
+
+

Here we need a unique id for the log message from the +RejectAttributeChecker. It is used to group rejected attributes by +their log message. A typical implementation will contain \{\{return +getRejectionLogMessage(Collections.<String, ModelNode>emptyMap());}

+
+
+
+
    /**
+     * Gets the log message if the attribute failed rejection
+     *
+     * @param attributes a map of all attributes failed in this checker and their values
+     * @return the formatted log message
+     */
+    String getRejectionLogMessage(Map<String, ModelNode> attributes);
+
+
+
+

Here we return a message saying why the attributes were rejected, with +the possibility to format the message to include the names of all the +rejected attributes and the values they had.

+
+
+
+
}
+
+
+
+
+
RejectAttributeChecker helper classes/implementations
+
+

RejectAttributeChecker contains a few helper classes for the most +common scenarios to save you from writing the same stuff again and +again.

+
+
+RejectAttributeChecker.DefaultRejectAttributeChecker +
+

RejectAttributeChecker.DefaultRejectAttributeChecker is an abstract +convenience class. In most cases you don’t need a separate check for if +an operation or a resource is being transformed, so it makes both the +rejectOperationParameter() and rejectResourceAttribute() methods +call the following method.

+
+
+
+
protected abstract boolean rejectAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
+
+
+
+

Like DefaultDiscardAttributeChecker, all you loose is the name of the +transformed operation, in the case of operation transformation.

+
+
+
+RejectAttributeChecker.DEFINED +
+

RejectAttributeChecker.DEFINED is used to reject any attribute that +has a defined value. Normally this is because the attribute does not +exist on the target legacy secondary HC. A typical use case for these is for +the implied behavior example we looked at in the jpa subsystem in +#DiscardAttributeChecker.DiscardAttributeValueChecker

+
+
+
+
    private void initializeTransformers_1_1_0(SubsystemRegistration subsystemRegistration) {
+        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
+        builder.getAttributeBuilder()
+            .setDiscard(
+                   new DiscardAttributeChecker.DiscardAttributeValueChecker(new ModelNode(ExtendedPersistenceInheritance.DEEP.toString())),
+                   JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE)
+            .addRejectCheck(RejectAttributeChecker.DEFINED, JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE)
+            .end();
+        TransformationDescription.Tools.register(builder.build(), subsystemRegistration, ModelVersion.create(1, 1, 0));
+    }
+
+
+
+

So we discard the +JPADefinition.DEFAULT_EXTENDEDPERSISTENCE_INHERITANCE value if it is +not an expression, and also has the value deep. Now if it was not +discarded, it would will still be defined so we reject it.

+
+
+

Important

+
+
+ + + + + +
+ + +Reject and discard often work in pairs. +
+
+
+
+RejectAttributeChecker.SIMPLE_EXPRESSIONS +
+

RejectAttributeChecker.SIMPLE_EXPRESSIONS can be used to reject an +attribute that contains expressions. This was used a lot for +transformations to subsystems in JBoss AS 7.1.x, since we had not fully +realized the importance of where to support expressions until JBoss AS +7.2.0 was released, so a lot of attributes in earlier versions were +missing expressions support.

+
+
+
+RejectAttributeChecker.ListRejectAttributeChecker +
+

The +RejectAttributeChecker}}s we have seen so far work on simple attributes, i.e. where the attribute has a ModelType which is one of the primitives. We also have a {{RejectAttributeChecker.ListRejectAttributeChecker +which allows you to define a checker for the elements of a list, when +the type of an attribute is ModelType.LIST.

+
+
+
+
    attributeBuilder
+            .addRejectCheck(new ListRejectAttributeChecker(RejectAttributeChecker.EXPRESSIONS), "attr1");
+
+
+
+

For attr1 it will check each element of the list and run +RejectAttributeChecker.EXPRESSIONS to check that each element is not +an expression. You can of course pass in another kind of +RejectAttributeChecker to check the elements as well.

+
+
+
+RejectAttributeChecker.ObjectFieldsRejectAttributeChecker +
+

For attributes where the type is ModelType.OBJECT we have +RejectAttributeChecker.ObjectFieldsRejectAttributeChecker which allows +you to register different reject checkers for the different fields of +the registered object.

+
+
+
+
    Map<String, RejectAttributeChecker> fieldRejectCheckers = new HashMap<String, RejectAttributeChecker>();
+    fieldRejectCheckers.put("time", RejectAttributeChecker.SIMPLE_EXPRESSIONS);
+    fieldRejectCheckers.put("unit", "Lunar Month");
+    attributeBuilder
+            .addRejectCheck(new ObjectFieldsRejectAttributeChecker(fieldRejectCheckers), "attr1");
+
+
+
+

Now if attr1 is a complex type where +attr1.get("time").getType() == ModelType.EXPRESSION or +attr1.get("unit").asString().equals("Lunar Month") we reject the +attribute.

+
+
+
+
+
+
Converting attributes
+
+

To convert an attribute you register an +org.jboss.as.controller.transform.description.AttributeConverter +instance against the attributes you want to convert:

+
+
+
+
    AttributeConverter converterA = ...;
+    AttributeConverter converterB = ...;
+    attributeBuilder
+            .setValueConverter(converterA, "attr1", "attr2");
+    attributeBuilder
+            .setValueConverter(converterB, "attr3");
+
+
+
+

Now if attr1 and attr2 get converted with converterA, while +attr3 gets converted with converterB.

+
+
+
The AttributeConverter interface
+
+

The AttributeConverter interface gets called for each attribute for +which the AttributeConverter has been registered

+
+
+
+
public interface AttributeConverter {
+ 
+    /**
+     * Converts an operation parameter
+     *
+     * @param address the address of the operation
+     * @param attributeName the name of the operation parameter
+     * @param attributeValue the value of the operation parameter to be converted
+     * @param operation the operation executed. This is unmodifiable.
+     * @param context the context of the transformation
+     */
+    void convertOperationParameter(PathAddress address, String attributeName, ModelNode attributeValue, ModelNode operation, TransformationContext context);
+
+
+
+

If we are transforming an operation, this method gets called for each +operation parameter for which the con. We have access to the address of +the operation, the name and value of the operation parameter, an +unmodifiable copy of the original operation and the +TransformationContext. The TransformationContext allows you access +to the original resource the operation is working on before any +transformation happened, which is useful if you want to check other +values in the resource if this is, say a write-attribute operation. To +change the attribute value, you modify the attributeValue.

+
+
+
+
    /**
+     * Converts a resource attribute
+     *
+     * @param address the address of the operation
+     * @param attributeName the name of the attribute
+     * @param attributeValue the value of the attribute to be converted
+     * @param context the context of the transformation
+     */
+    void convertResourceAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
+
+
+
+

If we are transforming a resource, this method gets called for each +attribute in the resource. We have access to the address of the +resource, the name and value of the attribute, and the +TransformationContext. To change the attribute value, you modify the +attributeValue.

+
+
+
+
}
+
+
+
+

A hypothetical example is if the current and legacy subsystems both +contain an attribute called timeout. In the legacy model this was +specified to be milliseconds, however in the current model it has been +changed to be seconds, hence we need to convert the value when sending +it to secondary HCs using the legacy model:

+
+
+
+
     AttributeConverter secondsToMs = new AttributeConverter.DefaultAttributeConverter() {
+                  @Override
+                  protected void convertAttribute(PathAddress address, String attributeName, ModelNode attributeValue,
+                           TransformationContext context) {
+                      if (attributeValue.isDefined()) {
+                           int seconds = attributeValue.asInt();
+                           int milliseconds = seconds * 1000;
+                           attributeValue.set(milliseconds);
+                      }
+                  }
+          };
+ 
+     attributeBuilder.
+          .setValueConverter(secondsToMs , "timeout")
+
+
+
+

We need to be a bit careful here. If the timeout attribute is an +expression our nice conversion will not work, so we need to add a reject +check to make sure it is not an expression as well:

+
+
+
+
     attributeBuilder.
+          .addRejectCheck(SIMPLE_EXPRESSIONS, "timeout")
+          .setValueConverter(secondsToMs , "timeout")
+
+
+
+

Now it should be fine.

+
+
+

AttributeConverter.DefaultAttributeConverter is is an abstract +convenience class. In most cases you don’t need a separate check for if +an operation or a resource is being transformed, so it makes both the +convertOperationParameter() and convertResourceAttribute() methods call +the following method.

+
+
+
+
protected abstract void convertAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context);
+
+
+
+

Like DefaultDiscardAttributeChecker and +DefaultRejectAttributeChecker, all you loose is the name of the +transformed operation, in the case of operation transformation.

+
+
+Introducing attributes during transformation +
+

Say both the current and the legacy models have an attribute called +port. In the legacy version this attribute had to be specified, and +the default xml configuration had 1234 for its value. In the current +version this attribute has been made optional with a default value of +1234 so that it does not need to be specified. When transforming to a +secondary HC using the old version we will need to introduce this attribute +if the new model does not contain it:

+
+
+
+
     attributeBuilder.
+         setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode(1234) true), "port");
+
+
+
+

So what this factory method does is to create an implementation of +AttributeConverter.DefaultAttributeConverter where in +convertAttribute() we set attributeValue to have the value 1234 if +it is undefined. As long as attributeValue gets set in that method +it will get set in the model, regardless of if it existed already or +not.

+
+
+
+
+
+
Renaming attributes
+
+

To rename an attribute, you simply do

+
+
+
+
    attributeBuilder.addRename("my-name", "legacy-name");
+
+
+
+

Now, in the initial domain transfer to the legacy secondary HC, we rename +/subsystem=my-subsystem’s `my-name attribute to legacy-name. Also, +the operations involving this attribute are affected, so

+
+
+
+
    /subsystem=my-subsystem/:add(my-name=true)  ->
+         /subsystem=my-subsystem/:add(legacy-name=true)
+    /subsystem=my-subsystem:write-attribute(name=my-name, value=true) ->
+         /subsystem=my-subsystem:write-attribute(name=legacy-name, value=true)
+    /subsystem=my-subsystem:undefine-attribute(name=my-name) ->
+         /subsystem=my-subsystem:undefine-attribute(name=legacy-name)
+
+
+
+
+
+

4.5.3. OperationTransformationOverrideBuilder

+
+

All operations on a resource automatically get the same transformations +on their parameters as set up by the +AttributeTransformationDescriptionBuilder. In some cases you might +want to change this, so you can use the +OperationTransformationOverrideBuilder, which is got from:

+
+
+
+
OperationTransformationOverrideBuilder operationBuilder = subSystemBuilder.addOperationTransformationOverride("some-operation");
+
+
+
+

In this case the operation will now no longer inherit the +attribute/operation parameter transformations, so they are effectively +turned off. In other cases you might want to include them by calling +inheritResourceAttributeDefinitions(), and to include some more checks +(the OperationTransformationBuilder interface has all the methods +found in AttributeTransformationBuilder:

+
+
+
+
    OperationTransformationOverrideBuilder operationBuilder = subSystemBuilder.addOperationTransformationOverride("some-operation");
+    operationBuilder.inheritResourceAttributeDefinitions();
+    operationBuilder.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode(1234) true), "port");
+
+
+
+

You can also rename operations, in this case the operation +some-operation gets renamed to legacy-operation before getting sent +to the legacy secondary HC.

+
+
+
+
    OperationTransformationOverrideBuilder operationBuilder = subSystemBuilder.addOperationTransformationOverride("some-operation");
+    operationBuilder.rename("legacy-operation");
+
+
+
+
+
+

4.6. Evolving transformers with subsystem ModelVersions

+
+

Say you have a subsystem with ModelVersions 1.0.0 and 1.1.0. There will +(hopefully!) already be transformers in place for 1.1.0 to 1.0.0 +transformations. Let’s say that the transformers registration looks +like:

+
+
+
+
public class SomeExtension implements Extension {
+ 
+    private static final String SUBSYSTEM_NAME = "my-subsystem"'
+ 
+    private static final int MANAGEMENT_API_MAJOR_VERSION = 1;
+    private static final int MANAGEMENT_API_MINOR_VERSION = 1;
+    private static final int MANAGEMENT_API_MICRO_VERSION = 0;
+ 
+    @Override
+    public void initialize(ExtensionContext context) {
+        SubsystemRegistration registration = context.registerSubsystem(SUBSYSTEM_NAME, MANAGEMENT_API_MAJOR_VERSION,
+                MANAGEMENT_API_MINOR_VERSION, MANAGEMENT_API_MICRO_VERSION);
+        //Register the resource definitions
+        ....
+    }
+ 
+    private void registerTransformers(final SubsystemRegistration subsystem) {
+        registerTransformers_1_0_0(subsystem);
+    }
+ 
+    /**
+     * Registers transformers from the current version to ModelVersion 1.0.0
+     */
+    private void registerTransformers_1_0_0(SubsystemRegistration subsystem) {
+        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
+        builder.getAttributeBuilder()
+            .addRejectCheck(RejectAttributeChecker.DEFINED, "attr1")
+            .end();
+        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 0, 0));
+    }
+}
+
+
+
+

Now say we want to do a new version of the model. This new version +contains a new attribute called 'new-attr' which cannot be defined when +transforming to 1.1.0, we bump the model version to 2.0.0:

+
+
+
+
public class SomeExtension implements Extension {
+ 
+    private static final String SUBSYSTEM_NAME = "my-subsystem"'
+ 
+    private static final int MANAGEMENT_API_MAJOR_VERSION = 2;
+    private static final int MANAGEMENT_API_MINOR_VERSION = 0;
+    private static final int MANAGEMENT_API_MICRO_VERSION = 0;
+ 
+    @Override
+    public void initialize(ExtensionContext context) {
+        SubsystemRegistration registration = context.registerSubsystem(SUBSYSTEM_NAME, MANAGEMENT_API_MAJOR_VERSION,
+                MANAGEMENT_API_MINOR_VERSION, MANAGEMENT_API_MICRO_VERSION);
+        //Register the resource definitions
+        ....
+    }
+
+
+
+

There are a few ways to evolve your transformers:

+
+ +
+

4.6.1. The old way

+
+

This is the way that has been used up to WildFly 29.x. However, in +WildFly 9 and later, it is strongly recommended to migrate to what is +mentioned in +#Chained +transformers

+
+
+

Now we need some new transformers from the current ModelVersion to 1.1.0 +where we reject any defined occurrances of our new attribute new-attr:

+
+
+
+
    private void registerTransformers(final SubsystemRegistration subsystem) {
+        registerTransformers_1_0_0(subsystem);
+        registerTransformers_1_1_0(subsystem);
+    }
+ 
+    /**
+     * Registers transformers from the current version to ModelVersion 1.1.0
+     */
+    private void registerTransformers_1_1_0(SubsystemRegistration subsystem) {
+        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
+        builder.getAttributeBuilder()
+            .addRejectCheck(RejectAttributeChecker.DEFINED, "new-attr")
+            .end();
+        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 1, 0));
+    }
+
+
+
+

So that is all well and good, however we also need to take into account +that new-attr does not exist in ModelVersion 1.0.0 either, so we +need to extend our transformer for 1.0.0 to reject it there as well. As +you can see 1.0.0 also rejects a defined 'attr1' in addition to the +'new-attr'(which is rejected in both versions).

+
+
+
+
    /**
+     * Registers transformers from the current version to ModelVersion 1.0.0
+     */
+    private void registerTransformers_1_0_0(SubsystemRegistration subsystem) {
+        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
+        builder.getAttributeBuilder()
+            .addRejectCheck(RejectAttributeChecker.DEFINED, "attr1", "new-attr")
+            .end();
+        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 0, 0));
+    }
+}
+
+
+
+

Now new-attr will be rejected if defined for all previous model +versions.

+
+
+
+

4.6.2. Chained transformers

+
+

Since 'The old way' had a lot of duplication of code, since WildFly 9 we +now have chained transformers. You obtain a +ChainedTransformationDescriptionBuilder which is a different entry +point to the ResourceTransformationDescriptionBuilder we have seen +earlier. Each ResourceTransformationDescriptionBuilder deals with +transformation across one version delta.

+
+
+
+
    private void registerTransformers(SubsystemRegistration subsystem) {
+        ModelVersion version1_1_0 = ModelVersion.create(1, 1, 0);
+        ModelVersion version1_0_0 = ModelVersion.create(1, 0, 0);
+ 
+        ChainedTransformationDescriptionBuilder chainedBuilder =
+              TransformationDescriptionBuilder.Factory.createChainedSubystemInstance(subsystem.getSubsystemVersion());
+ 
+        //Differences between the current version and 1.1.0
+        ResourceTransformationDescriptionBuilder builder110 =
+            chainedBuilder.create(subsystem.getSubsystemVersion(), version1_1_0);
+        builder110.getAttributeBuilder()
+            .addRejectCheck(RejectAttributeChecker.DEFINED, "new-attr")
+            .end();
+ 
+        //Differences between the 1.1.0 and 1.0.0
+        ResourceTransformationDescriptionBuilder builder100 =
+            chainedBuilder.create(subsystem.getSubsystemVersion(), version1_0_0);
+        builder110.getAttributeBuilder()
+            .addRejectCheck(RejectAttributeChecker.DEFINED, "attr1")
+            .end();
+ 
+        chainedBuilder.buildAndRegister(subsystem, new ModelVersion[]{version1_0_0, version1_1_0});
+
+
+
+

The buildAndRegister(ModelVersion[]…​ chains) method registers a +chain consisting of the built builder110 and builder100 for +transformation to 1.0.0, and a chain consisting of the built +builder110 for transformation to 1.1.0. It allows you to specify more +than one chain.

+
+
+

Now when transforming from the current version to 1.0.0, the resource is +first transformed from the current version to 1.1.0 (which rejects a +defined new-attr) and then it is transformed from 1.1.0 to 1.0.0 +(which rejects a defined attr1). So when evolving transformers you +should normally only need to add things to the last version delta. The +full current-to-1.1.0 transformation is run before the 1.1.0-to-1.0.0 +transformation is run.

+
+
+

One thing worth pointing out that the value returned by +TransformationContext.readResource(PathAddress address) and +TransformationContext.readResourceFromRoot(PathAddress address) which +you can use from your custom RejectAttributeChecker, +DiscardAttributeChecker and AttributeConverter behaves slightly +differently depending on if you are transforming an operation or a +resource.

+
+
+

During resource transformation this will be the latest model, so in +our above example, in the current-to-1.1.0 transformation it will be the +original model. In the 1.1.0-to-1.0.0 transformation, it will be the +result of the current-to-1.1.0 transformation.

+
+
+

During operation transformation these methods will always return the +original model (we are transforming operations, not resources!).

+
+
+

In WildFly 9 we are now less aggressive about transforming to all +previous versions of WildFly, however we still have a lot of good tests +for running against 7.1.x, 8. Also, for Red Hat employees we have tests +against EAP versions. These tests no longer get run by default, to run +them you need to specify some system properties when invoking maven. +They are:

+
+
+
    +
  • +

    -Djboss.test.transformers.subsystem.old - enables the non-default +subsystem tests.

    +
  • +
  • +

    -Djboss.test.transformers.eap - (Red Hat developers only), enables the +eap tests, but only the ones run by default. If run in conjunction with +-Djboss.test.transformers.subsystem.old you get all the possible +subsystem tests run.

    +
  • +
  • +

    -Djboss.test.transformers.core.old - enables the non-default core +model tests.

    +
  • +
+
+
+
+
+

4.7. Testing transformers

+
+

To test transformation you need to extend +org.jboss.as.subsystem.test.AbstractSubsystemTest or +org.jboss.as.subsystem.test.AbstractSubsystemBaseTest. Then, in order +to have the best test coverage possible, you should test the fullest +configuration that will work, and you should also test configurations +that don’t work if you have rejecting transformers registered. The +following example is from the threads subsystem, and I have only +included the tests against 7.1.2 - there are more! First we need to set +up our test:

+
+
+
+
public class ThreadsSubsystemTestCase extends AbstractSubsystemBaseTest {
+    public ThreadsSubsystemTestCase() {
+        super(ThreadsExtension.SUBSYSTEM_NAME, new ThreadsExtension());
+    }
+ 
+    @Override
+    protected String getSubsystemXml() throws IOException {
+        return readResource("threads-subsystem-1_1.xml");
+    }
+
+
+
+

So we say that this test is for the threads subsystem, and that it is +implemented by ThreadsExtension. This is the same test framework as we +use in +Example +subsystem#Testing the parsers, but we will only talk about the parts +relevant to transformers here.

+
+
+

4.7.1. Testing a configuration that works

+
+

To test a configuration xxx

+
+
+
+
    @Test
+    public void testTransformerAS712() throws Exception {
+        testTransformer_1_0(ModelTestControllerVersion.V7_1_2_FINAL);
+    }
+    /**
+     * Tests transformation of model from 1.1.0 version into 1.0.0 version.
+     *
+     * @throws Exception
+     */
+    private void testTransformer_1_0(ModelTestControllerVersion controllerVersion) throws Exception {
+        String subsystemXml = "threads-transform-1_0.xml";   //This has no expressions not understood by 1.0
+        ModelVersion modelVersion = ModelVersion.create(1, 0, 0); //The old model version
+        //Use the non-runtime version of the extension which will happen on the HC
+        KernelServicesBuilder builder = createKernelServicesBuilder(AdditionalInitialization.MANAGEMENT)
+                .setSubsystemXmlResource(subsystemXml);
+ 
+        final PathAddress subsystemAddress = PathAddress.pathAddress(PathElement.pathElement(SUBSYSTEM, mainSubsystemName));
+ 
+        // Add legacy subsystems
+        builder.createLegacyKernelServicesBuilder(null, controllerVersion, modelVersion)
+                .addOperationValidationResolve("add", subsystemAddress.append(PathElement.pathElement("thread-factory")))
+                .addMavenResourceURL("org.jboss.as:jboss-as-threads:" + controllerVersion.getMavenGavVersion())
+                .excludeFromParent(SingleClassFilter.createFilter(ThreadsLogger.class));
+ 
+        KernelServices mainServices = builder.build();
+        KernelServices legacyServices = mainServices.getLegacyServices(modelVersion);
+        Assert.assertNotNull(legacyServices);
+        checkSubsystemModelTransformation(mainServices, modelVersion);
+    }
+
+
+
+

What this test does is get the builder to configure the test controller +using threads-transform-1_0.xml. This main builder works with the +current subsystem version, and the jars in the WildFly checkout.

+
+
+

Next we configure a 'legacy' controller. This will run the version of +the core libraries (e.g the controller module) as found in the +targeted legacy version of JBoss AS/WildFly), and the subsystem. We need +to pass in that it is using the core AS version 7.1.2.Final (i.e. the +ModelTestControllerVersion.V7_1_2_FINAL part) and that that version is +ModelVersion 1.0.0. Next we have some addMavenResourceURL() calls +passing in the Maven GAVs of the old version of the subsystem and any +dependencies it has needed to boot up. Normally, specifying just the +Maven GAV of the old version of the subsystem is enough, but that +depends on your subsystem. In this case the old subsystem GAV is enough. +When booting up the legacy controller the framework uses the parsed +operations from the main controller and transforms them using the 1.0.0 +transformer in the threads subsystem. The +addOperationValidationResolve() and excludeFromParent() calls are +not normally necessary, see the javadoc for more examples.

+
+
+

The call to KernelServicesBuilder.build() will build both the main +controller and the legacy controller. As part of that it also boots up a +second copy of the main controller using the transformed operations to +make sure that the 'old' ops to boot our subsystem will still work on +the current controller, which is important for backwards compatibility +of CLI scripts. To tweak how that is done if you see failures there, see +LegacyKernelServicesInitializer.skipReverseControllerCheck() and +LegacyKernelServicesInitializer.configureReverseControllerCheck(). The +LegacyKernelServicesInitializer is what gets returned by +KernelServicesBuilder.createLegacyKernelServicesBuilder().

+
+
+

Finally we call checkSubsystemModelTransformation() which reads the +full legacy subsystem model. The legacy subsystem model will have been +built up from the transformed boot operations from the parsed xml. The +operations get transformed by the operation transformers. Then it takes +the model of the current subsystem and transforms that using the +resource transformers. Then it compares the two models, which should be +the same. In some rare cases it is not possible to get those two models +exactly the same, so there is a version of this method that takes a +ModelFixer to make adjustments. The +checkSubsystemModelTransformation() method also makes sure that the +legacy model is valid according to the legacy subsystem’s resource +definition.

+
+
+

The legacy subsystem resource definitions are read on demand from the +legacy controller when the tests run. In some older versions of +subsystems (before we converted everything to use ResourceDefinition, +and DescriptionProvider implementations were coded by hand) there were +occasional problems with the resource definitions and they needed to be +touched up. In this case you can generate a new one, touch it up and +store the result in a file in the test resources under +/same/package/as/the/test/class/{{subsystem-name- model-version. +This will then prefer the file read from the file system to the one read +at runtime. To generate the .dmr file, you need to generate it by adding +a temporary test (make sure that you adjust controllerVersion and +modelVersion to what you want to generate):

+
+
+
+
    @Test
+    public void deleteMeWhenDone() throws Exception {
+        ModelTestControllerVersion controllerVersion = ModelTestControllerVersion.V7_1_2_FINAL;
+        ModelVersion modelVersion = ModelVersion.create(1, 0, 0);
+        KernelServicesBuilder builder = createKernelServicesBuilder(null);
+ 
+        builder.createLegacyKernelServicesBuilder(null, controllerVersion, modelVersion)
+            .addMavenResourceURL("org.jboss.as:jboss-as-threads:" + controllerVersion.getMavenGavVersion());
+        KernelServices services = builder.build();
+ 
+        generateLegacySubsystemResourceRegistrationDmr(services, modelVersion);
+    }
+
+
+
+

Now run the test and delete it. The legacy .dmr file should be in +target/test-classes/org/jboss/as/subsystem/test/<your-subsystem-name>-<your-version>.dmr. +Copy this .dmr file to the correct location in your project’s test +resources.

+
+
+
+

4.7.2. Testing a configuration that does not work

+
+

The threads subsystem (like several others) did not support the use of +expression values in the version that came with JBoss AS 7.1.2.Final. So +we have a test that attempts to use expressions, and then fixes each +resource and attribute where expressions were not allowed.

+
+
+
+
    @Test
+    public void testRejectExpressionsAS712() throws Exception {
+        testRejectExpressions_1_0_0(ModelTestControllerVersion.V7_1_2_FINAL);
+    }
+ 
+    private void testRejectExpressions_1_0_0(ModelTestControllerVersion controllerVersion) throws Exception {
+        // create builder for current subsystem version
+        KernelServicesBuilder builder = createKernelServicesBuilder(createAdditionalInitialization());
+ 
+        // create builder for legacy subsystem version
+        ModelVersion version_1_0_0 = ModelVersion.create(1, 0, 0);
+        builder.createLegacyKernelServicesBuilder(null, controllerVersion, version_1_0_0)
+                .addMavenResourceURL("org.jboss.as:jboss-as-threads:" + controllerVersion.getMavenGavVersion())
+                .excludeFromParent(SingleClassFilter.createFilter(ThreadsLogger.class));
+ 
+        KernelServices mainServices = builder.build();
+        KernelServices legacyServices = mainServices.getLegacyServices(version_1_0_0);
+ 
+        Assert.assertNotNull(legacyServices);
+        Assert.assertTrue("main services did not boot", mainServices.isSuccessfulBoot());
+        Assert.assertTrue(legacyServices.isSuccessfulBoot());
+ 
+        List<ModelNode> xmlOps = builder.parseXmlResource("expressions.xml");
+ 
+        ModelTestUtils.checkFailedTransformedBootOperations(mainServices, version_1_0_0, xmlOps, getConfig());
+    }
+
+
+
+

Again we boot up a current and a legacy controller. However, note in +this case that they are both empty, no xml was parsed on boot so there +are no operations to boot up the model. Instead once the controllers +have been booted, we call KernelServicesBuilder.parseXmlResource() +which gets the operations from expressions.xml. expressions.xml uses +expressions in all the places they were not allowed in 7.1.2.Final. For +each resource ModelTestUtils.checkFailedTransformedBootOperations() +will check that the add operation gets rejected, and then correct one +attribute at a time until the resource has been totally corrected. Once +the add operation is totally correct, it will check that the add +operation no longer is rejected. The configuration for this is the +FailedOperationTransformationConfig returned by the getConfig() +method:

+
+
+
+
    private FailedOperationTransformationConfig getConfig() {
+        PathAddress subsystemAddress = PathAddress.pathAddress(ThreadsExtension.SUBSYSTEM_PATH);
+        FailedOperationTransformationConfig.RejectExpressionsConfig allowedAndKeepalive =
+                new FailedOperationTransformationConfig.RejectExpressionsConfig(PoolAttributeDefinitions.ALLOW_CORE_TIMEOUT, PoolAttributeDefinitions.KEEPALIVE_TIME);
+...
+        return new FailedOperationTransformationConfig()
+                .addFailedAttribute(subsystemAddress.append(PathElement.pathElement(CommonAttributes.BLOCKING_BOUNDED_QUEUE_THREAD_POOL)),
+                        allowedAndKeepalive)
+                .addFailedAttribute(subsystemAddress.append(PathElement.pathElement(CommonAttributes.BOUNDED_QUEUE_THREAD_POOL)),
+                        allowedAndKeepalive)
+    }
+
+
+
+

So what this means is that we expect the allow-core-timeout and +keepalive-time attributes for the +blocking-bounded-queue-thread-pool= and bounded-queue-thread-pool= +add operations to use expressions in the parsed xml. We then expect them +to fail since there should be transformers in place to reject +expressions, and correct them one at a time until the add operation +should pass. As well as doing the add operations the +ModelTestUtils.checkFailedTransformedBootOperations() method will also +try calling write-attribute for each attribute, correcting as it goes +along. As well as allowing you to test rejection of expressions +FailedOperationTransformationConfig also has some helper classes to +help testing rejection of other scenarios.

+
+
+
+
+

4.8. Common transformation use-cases

+
+

Most transformations are quite similar, so this section covers some of +the actual transformation patterns found in the WildFly codebase. We +will look at the output of CompareModelVersionsUtil, and see what can be +done to transform for the older secondary HCs. The examples come from the +WildFly codebase but are stripped down to focus solely on the use-case +being explained in an attempt to keep things as clear/simple as +possible.

+
+
+

4.8.1. Child resource type does not exist in legacy model

+
+

Looking at the model comparison between WildFly and JBoss AS 7.2.0, +there is a change to the remoting subsystem. The relevant part of the +output is:

+
+
+
+
======= Resource root address: ["subsystem" => "remoting"] - Current version: 2.0.0; legacy version: 1.2.0 =======
+--- Problems for relative address to root []:
+Missing child types in current: []; missing in legacy [http-connector]
+
+
+
+

So our current model has added a child type called http-connector +which was not there in 7.2.0. This is configurable, and adds new +behavior, so it can not be part of a configuration sent across to a +legacy secondary HC running version 1.2.0. So we add the following to +RemotingExtension to reject all instances of that child type against +ModelVersion 1.2.0.

+
+
+
+
    @Override
+    public void initialize(ExtensionContext context) {
+        ....
+        if (context.isRegisterTransformers()) {
+            registerTransformers_1_1(registration);
+            registerTransformers_1_2(registration);
+        }
+    }
+
+    private void registerTransformers_1_2(SubsystemRegistration registration) {
+        TransformationDescription.Tools.register(get1_2_0_1_3_0Description(), registration, VERSION_1_2);
+    }
+
+    private static TransformationDescription get1_2_0_1_3_0Description() {
+        ResourceTransformationDescriptionBuilder builder = ResourceTransformationDescriptionBuilder.Factory.createSubsystemInstance();
+        builder.rejectChildResource(HttpConnectorResource.PATH);
+
+        return builder.build();
+    }
+
+
+
+

Since this child resource type also does not exist in ModelVersion 1.1.0 +we need to reject it there as well using a similar mechanism.

+
+
+
+

4.8.2. Attribute does not exist in the legacy subsystem

+
+
Default value of the attribute is the same as legacy implied
+
+

behavior

+
+
+

This example also comes from the remoting subsystem, and is probably +the most common type of transformation. The comparison tells us that +there is now an attribute under +/subsystem=remoting/remote-outbound-connection=* called protocol +which did not exist in the older version:

+
+
+
+
======= Resource root address: ["subsystem" => "remoting"] - Current version: 2.0.0; legacy version: 1.2.0 =======
+--- Problems for relative address to root []:
+....
+--- Problems for relative address to root ["remote-outbound-connection" => "*"]:
+Missing attributes in current: []; missing in legacy [protocol]
+Missing parameters for operation 'add' in current: []; missing in legacy [protocol]
+
+
+
+

This difference also affects the add operation. Looking at the current +model the valid values for the protocol attribute are remote, +http-remoting and https-remoting. The last two are new protocols +introduced in WildFly 29, meaning that the implied behaviour in JBoss +7.2.0 and earlier is the remote protocol. Since this attribute does +not exist in the legacy model we want to discard this attribute if it is +undefined or if it has the value remote, both of which are in line +with what the legacy secondary HC is hardwired to use. Also we want to +reject it if it has a value different from remote. So what we need to +do when registering transformers against ModelVersion 1.2.0 to handle +this attribute:

+
+
+
+
    private void registerTransformers_1_2(SubsystemRegistration registration) {
+        TransformationDescription.Tools.register(get1_2_0_1_3_0Description(), registration, VERSION_1_2);
+    }
+ 
+    private static TransformationDescription get1_2_0_1_3_0Description() {
+        ResourceTransformationDescriptionBuilder builder = ResourceTransformationDescriptionBuilder.Factory.createSubsystemInstance();
+        protocolTransform(builder.addChildResource(RemoteOutboundConnectionResourceDefinition.ADDRESS)
+                .getAttributeBuilder());
+        return builder.build();
+    }
+ 
+    private static AttributeTransformationDescriptionBuilder protocolTransform(AttributeTransformationDescriptionBuilder builder) {
+        builder.setDiscard(new DiscardAttributeChecker.DiscardAttributeValueChecker(new ModelNode(Protocol.REMOTE.toString())), RemoteOutboundConnectionResourceDefinition.PROTOCOL)
+                .addRejectCheck(RejectAttributeChecker.DEFINED, RemoteOutboundConnectionResourceDefinition.PROTOCOL);
+        return builder;
+    }
+
+
+
+

So the first thing to happens is that we register a +DiscardAttributeChecker.DiscardAttributeValueChecker which discards +the attribute if it is either undefined (the default value in the +current model is remote), or defined and has the value remote. +Remembering that the discard phase always happens before the reject +phase, the reject checker checks that the protocol attribute is +defined, and rejects it if it is. The only reason it would be defined +in the reject check, is if it was not discarded by the discard check. +Hopefully this example shows that the discard and reject checkers often +work in pairs.

+
+
+

An alternative way to write the protocolTransform() method would be:

+
+
+
+
     private static AttributeTransformationDescriptionBuilder protocolTransform(AttributeTransformationDescriptionBuilder builder) {
+        builder.setDiscard(new DiscardAttributeChecker.DefaultDiscardAttributeChecker() {
+                    @Override
+                    protected boolean isValueDiscardable(final PathAddress address, final String attributeName, final ModelNode attributeValue, final TransformationCon
+                        return !attributeValue.isDefined() || attributeValue.asString().equals(Protocol.REMOTE.toString());
+                    }
+                }, RemoteOutboundConnectionResourceDefinition.PROTOCOL)
+         .addRejectCheck(RejectAttributeChecker.DEFINED, RemoteOutboundConnectionResourceDefinition.PROTOCOL);
+         return builder;
+
+
+
+

The reject check remains the same, but we have implemented the discard +check by using DiscardAttributeChecker.DefaultDiscardAttributeChecker +instead. However, the effect of the discard check is exactly the same as +when we used DiscardAttributeChecker.DiscardAttributeValueChecker.

+
+
+
+
Default value of the attribute is different from legacy implied
+
+

behaviour

+
+
+

We touched on this in the weld subsystem example we used earlier in this +guide, but let’s take a more thorough look. Our comparison tells us that +we have two new attributes require-bean-descriptor and +non-portable-mode:

+
+
+
+
====== Resource root address: ["subsystem" => "weld"] - Current version: 2.0.0; legacy version: 1.0.0 =======
+--- Problems for relative address to root []:
+Missing attributes in current: []; missing in legacy [require-bean-descriptor, non-portable-mode]
+Missing parameters for operation 'add' in current: []; missing in legacy [require-bean-descriptor, non-portable-mode]
+
+
+
+

Now when we look at this we see that the default value for both of the +attributes in the current model is false, which allows us more +flexible behavior introduced in CDI 1.1 (which was introduced with this +version of the subsystem). The old model does not have these attributes, +and implements CDI 1.0, which under the hood (using our weld subsystem +expertise knowledge) implies the values true for both of these. So our +transformer must reject anything that is not true for these +attributes. Let us look at the transformer registered by the +WeldExtension:

+
+
+
+
    private void registerTransformers(SubsystemRegistration subsystem) {
+        ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
+        //These new attributes are assumed to be 'true' in the old version but default to false in the current version. So discard if 'true' and reject if 'undefined'.
+        builder.getAttributeBuilder()
+                .setDiscard(new DiscardAttributeChecker.DiscardAttributeValueChecker(false, false, new ModelNode(true)),
+                        WeldResourceDefinition.NON_PORTABLE_MODE_ATTRIBUTE, WeldResourceDefinition.REQUIRE_BEAN_DESCRIPTOR_ATTRIBUTE)
+                .addRejectCheck(new RejectAttributeChecker.DefaultRejectAttributeChecker() {
+ 
+                    @Override
+                    public String getRejectionLogMessage(Map<String, ModelNode> attributes) {
+                        return WeldMessages.MESSAGES.rejectAttributesMustBeTrue(attributes.keySet());
+                    }
+ 
+                    @Override
+                    protected boolean rejectAttribute(PathAddress address, String attributeName, ModelNode attributeValue,
+                            TransformationContext context) {
+                        //This will not get called if it was discarded, so reject if it is undefined (default==false) or if defined and != 'true'
+                        return !attributeValue.isDefined() || !attributeValue.asString().equals("true");
+                    }
+                }, WeldResourceDefinition.NON_PORTABLE_MODE_ATTRIBUTE, WeldResourceDefinition.REQUIRE_BEAN_DESCRIPTOR_ATTRIBUTE)
+                .end();
+        TransformationDescription.Tools.register(builder.build(), subsystem, ModelVersion.create(1, 0, 0));
+    }
+
+
+
+

This looks a bit more scary than the previous transformer we have seen, +but isn’t actually too bad. The first thing we do is register a +DiscardAttributeChecker.DiscardAttributeValueChecker which will +discard the attribute if it has the value true. It will not discard if +it is undefined since that defaults to false. This is registered for +both attributes.

+
+
+

If the attributes had the value true they will get discarded we will +not hit the reject checker since discarded attributes never get checked +for rejection. If on the other hand they were an expression (since we +are interested in the actual value, but cannot evaluate what value an +expression will resolve to on the target from the DC running the +transformers), false, or undefined (which will then default to +false) they will not get discarded and will need to be rejected. So +our +RejectAttributeChecker.DefaultRejectAttributeChecker.rejectAttribute() +method will return true (i.e. reject) if the attribute value is +undefined (since that defaults to false) or if it is defined and +'not equal to `true’. It is better to check for 'not equal to `true’ +than to check for 'equal to `false’ since if an expression was used we +still want to reject, and only the 'not equal to `true’ check would +actually kick in in that case.

+
+
+

The other thing we need in our +DiscardAttributeChecker.DiscardAttributeValueChecker is to override +the getRejectionLogMessage() method to get the message to be displayed +when rejecting the transformation. In this case it says something along +the lines "These attributes must be 'true' for use with CDI 1.0 '%s'", +with the names of the attributes having been rejected substituting the +%s.

+
+
+
+
+

4.8.3. Attribute has a different default value

+
+

– TODO

+
+
+

(The gist of this is to use a value converter, such that if the +attribute is undefined, and hence the default value will take effect, +then the value gets converted to the current version’s default value. +This ensures that the legacy HC will use the same effective setting as +current version HCs.

+
+
+

Note however that a change in default values is a form of incompatible +API change, since CLI scripts written assuming the old defaults will now +produce a configuration that behaves differently. Transformers make it +possible to have a consistently configured domain even in the presence +of this kind of incompatible change, but that doesn’t mean such changes +are good practice. They are generally unacceptable in WildFly’s own +subsystems.

+
+
+

One trick to ameliorate the impact of a default value change is to +modify the xml parser for the old schema version such that if the xml +attribute is not configured, the parser sets the old default value for +the attribute, instead of undefined. This approach allows the parsing +of old config documents to produce results consistent with what happened +when they were created. It does not help with CLI scripts though.)

+
+
+
+

4.8.4. Attribute has a different type

+
+

Here the example comes from the capacity parameter some way into the +modcluster subsystem, and the legacy version is AS 7.1.2.Final. There +are quite a few differences, so I am only showing the ones relevant for +this example:

+
+
+
+
====== Resource root address: ["subsystem" => "modcluster"] - Current version: 2.0.0; legacy version: 1.2.0 =======
+...
+--- Problems for relative address to root ["mod-cluster-config" => "configuration","dynamic-load-provider" => "configuration","custom-load-m
+etric" => "*"]:
+Different 'type' for attribute 'capacity'. Current: DOUBLE; legacy: INT
+Different 'expressions-allowed' for attribute 'capacity'. Current: true; legacy: false
+...
+Different 'type' for parameter 'capacity' of operation 'add'. Current: DOUBLE; legacy: INT
+Different 'expressions-allowed' for parameter 'capacity' of operation 'add'. Current: true; legacy: false
+
+
+
+

So as we can see expressions are not allowed for the capacity +attribute, and the current type is double while the legacy subsystem +is int. So this means that if the value is for example 2.0 we can +convert this to 2, but 2.5 cannot be converted. The way this is +solved in the ModClusterExtension is to register the following some +other attributes are registered here, but hopefully it is clear anyway:

+
+
+
+
        dynamicLoadProvider.addChildResource(LOAD_METRIC_PATH)
+                    .getAttributeBuilder()
+                        .addRejectCheck(RejectAttributeChecker.SIMPLE_EXPRESSIONS, TYPE, WEIGHT, CAPACITY, PROPERTY)
+                        .addRejectCheck(CapacityCheckerAndConverter.INSTANCE, CAPACITY)
+                        .setValueConverter(CapacityCheckerAndConverter.INSTANCE, CAPACITY)
+                        ...
+                        .end();
+
+
+
+

So we register that we should reject expressions, and we also register +the CapacityCheckerAndConverter for capacity. +CapacityCheckerAndConverter extends the convenience class +DefaultCheckersAndConverter which implements the +DiscardAttributeChecker, RejectAttributeChecker, and +AttributeConverter interfaces. We have seen DiscardAttributeChecker +and RejectAttributeChecker in previous examples. Since we now need to +convert a value we need an instance of AttributeConverter.

+
+
+
+
    static class CapacityCheckerAndConverter extends DefaultCheckersAndConverter {
+ 
+        static final CapacityCheckerAndConverter INSTANCE = new CapacityCheckerAndConverter();
+
+
+
+

We should not discard so isValueDiscardable() from +DiscardAttributeChecker always returns false:

+
+
+
+
        @Override
+        protected boolean isValueDiscardable(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context) {
+            //Not used for discard
+            return false;
+        }
+ 
+        @Override
+        public String getRejectionLogMessage(Map<String, ModelNode> attributes) {
+            return ModClusterMessages.MESSAGES.capacityIsExpressionOrGreaterThanIntegerMaxValue(attributes.get(CAPACITY.getName()));
+        }
+
+
+
+

Now we check to see if we can convert the attribute to an int and +reject if not. Note that if it is an expression, we have no idea what +its value will resolve to on the target host, so we need to reject it. +Then we try to change it into an int, and reject if that was not +possible:

+
+
+
+
        @Override
+        protected boolean rejectAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context) {
+            if (checkForExpression(attributeValue)
+                    || (attributeValue.isDefined() && !isIntegerValue(attributeValue.asDouble()))) {
+                return true;
+            }
+            Long converted = convert(attributeValue);
+            return (converted != null && (converted > Integer.MAX_VALUE || converted < Integer.MIN_VALUE));
+        }
+
+
+
+

And then finally we do the conversion:

+
+
+
+
        @Override
+        protected void convertAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context) {
+            Long converted = convert(attributeValue);
+            if (converted != null && converted <= Integer.MAX_VALUE && converted >= Integer.MIN_VALUE) {
+                attributeValue.set((int)converted.longValue());
+            }
+        }
+ 
+ 
+        private Long convert(ModelNode attributeValue) {
+            if (attributeValue.isDefined() && !checkForExpression(attributeValue)) {
+                double raw = attributeValue.asDouble();
+                if (isIntegerValue(raw)) {
+                    return Math.round(raw);
+                }
+            }
+            return null;
+        }
+ 
+        private boolean isIntegerValue(double raw) {
+            return raw == Double.valueOf(Math.round(raw)).doubleValue();
+        }
+ 
+    }
+
+
+
+ + + + + +
+ + +References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. +
+
+
+
+
+
+
+

5. Key Interfaces and Classes Relevant to Extension Developers

+
+
+

In the first major section of this guide, we provided an example of how +to implement an extension to the AS. The emphasis there was learning by +doing. In this section, we’ll focus a bit more on the major WildFly +interfaces and classes that most are relevant to extension developers. +The best way to learn about these interfaces and classes in detail is to +look at their javadoc. What we’ll try to do here is provide a brief +introduction of the key items and how they relate to each other.

+
+
+

Before digging into this section, readers are encouraged to read the +"Core Management Concepts" section of the Admin Guide.

+
+
+

5.1. Extension Interface

+
+

The org.jboss.as.controller.Extension interface is the hook by which +your extension to the AS kernel is able to integrate with the AS. During +boot of the AS, when the <extension> element in the AS’s xml +configuration file naming your extension is parsed, the JBoss Modules +module named in the element’s name attribute is loaded. The standard JDK +java.lang.ServiceLoader mechanism is then used to load your module’s +implementation of this interface.

+
+
+

The function of an Extension implementation is to register with the +core AS the management API, xml parsers and xml marshallers associated +with the extension module’s subsystems. An Extension can register +multiple subsystems, although the usual practice is to register just one +per extension.

+
+
+

Once the Extension is loaded, the core AS will make two invocations +upon it:

+
+
+
    +
  • +

    void initializeParsers(ExtensionParsingContext context)

    +
  • +
+
+
+

When this is invoked, it is the Extension implementation’s +responsibility to initialize the XML parsers for this extension’s +subsystems and register them with the given ExtensionParsingContext. +The parser’s job when it is later called is to create +org.jboss.dmr.ModelNode objects representing WildFly management API +operations needed make the AS’s running configuration match what is +described in the xml. Those management operation ModelNode s are added +to a list passed in to the parser.

+
+
+

A parser for each version of the xml schema used by a subsystem should +be registered. A well behaved subsystem should be able to parse any +version of its schema that it has ever published in a final release.

+
+
+
    +
  • +

    void initialize(ExtensionContext context)

    +
  • +
+
+
+

When this is invoked, it is the Extension implementation’s +responsibility to register with the core AS the management API for its +subsystems, and to register the object that is capable of marshalling +the subsystem’s in-memory configuration back to XML. Only one XML +marshaller is registered per subsystem, even though multiple XML parsers +can be registered. The subsystem should always write documents that +conform to the latest version of its XML schema.

+
+
+

The registration of a subsystem’s management API is done via the +ManagementResourceRegistration interface. Before discussing that +interface in detail, let’s describe how it (and the related Resource +interface) relate to the notion of managed resources in the AS.

+
+
+
+

5.2. WildFly Managed Resources

+
+

Each subsystem is responsible for managing one or more management +resources. The conceptual characteristics of a management resource are +covered in some detail in the Admin +Guide; here we’ll just summarize the main points. A management resource +has

+
+
+
    +
  • +

    An address consisting of a list of key/value pairs that uniquely +identifies a resource

    +
  • +
  • +

    Zero or more attributes , the value of which is some sort of +org.jboss.dmr.ModelNode

    +
  • +
  • +

    Zero or more supported operations . An operation has a string name +and zero or more parameters, each of which is a key/value pair where the +key is a string naming the parameter and the value is some sort of +ModelNode

    +
  • +
  • +

    Zero or more children , each of which in turn is a managed +resource

    +
  • +
+
+
+

The implementation of a managed resource is somewhat analogous to the +implementation of a Java object. A managed resource will have a "type", +which encapsulates API information about that resource and logic used to +implement that API. And then there are actual instances of the resource, +which primarily store data representing the current state of a +particular resource. This is somewhat analogous to the "class" and +"object" notions in Java.

+
+
+

A managed resource’s type is encapsulated by the +org.jboss.as.controller.registry.ManagementResourceRegistration the +core AS creates when the type is registered. The data for a particular +instance is encapsulated in an implementation of the +org.jboss.as.controller.registry.Resource interface.

+
+
+
+

5.3. ManagementResourceRegistration Interface

+
+

In the Java analogy used above, the ManagementResourceRegistration is +analogous to the "class", while the Resource discussed below is +analogous to an instance of that class.

+
+
+

A ManagementResourceRegistration represents the specification for a +particular managed resource type. All resources whose address matches +the same pattern will be of the same type, specified by the type’s +ManagementResourceRegistration. The MRR encapsulates:

+
+
+
    +
  • +

    A PathAddress showing the address pattern that matches resources of +that type. This PathAddress can and typically does involve wildcards +in the value of one or more elements of the address. In this case there +can be more than one instance of the type, i.e. different Resource +instances.

    +
  • +
  • +

    Definition of the various attributes exposed by resources of this +type, including the OperationStepHandler implementations used for +reading and writing the attribute values.

    +
  • +
  • +

    Definition of the various operations exposed by resources of this +type, including the OperationStepHandler implementations used for +handling user invocations of those operations.

    +
  • +
  • +

    Definition of child resource types. ManagementResourceRegistration +instances form a tree.

    +
  • +
  • +

    Definition of management notifications emitted by resources of this +type.

    +
  • +
  • +

    Definition of +capabilities provided by +resources of this type.

    +
  • +
  • +

    Definition of RBAC access constraints that should be +applied by the management kernel when authorizing operations against +resources of this type.

    +
  • +
  • +

    Whether the resource type is an alias to another resource type, and if +so information about that relationship. Aliases are primarily used to +preserve backwards compatibility of the management API when the location +of a given type of resources is moved in a newer release.

    +
  • +
+
+
+

The ManagementResourceRegistration interface is a subinterface of +ImmutableManagementResourceRegistration, which provides a read-only +view of the information encapsulated by the MRR. The MRR subinterface +adds the methods needed for registering the attributes, operations, +children, etc.

+
+
+

Extension developers do not directly instantiate an MRR. Instead they +create a ResourceDefinition for the root resource type for each +subsystem, and register it with the ExtensionContext passed in to +their Extension implementation’s initialize method:

+
+
+
+
    public void initialize(ExtensionContext context) {
+        SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, CURRENT_VERSION);
+        subsystem.registerXMLElementWriter(getOurXmlWriter());
+        ResourceDefinition rd = getOurSubsystemDefinition();
+        ManagementResourceRegistration mrr = subsystem.registerSubsystemModel(rd));
+    }
+
+
+
+

The kernel uses the provided ResourceDefinition to construct a +ManagementResourceRegistration and then passes that MRR to the various +registerXXX methods implemented by the ResourceDefinition, giving it +the change to record the resource type’s attributes, operations and +children.

+
+
+
+

5.4. ResourceDefinition Interface

+
+

An implementation of ResourceDefinition is the primary class used by +an extension developer when defining a managed resource type. It +provides basic information about the type, exposes a +DescriptionProvider used to generate a DMR description of the type, +and implements callbacks the kernel can invoke when building up the +ManagementResourceRegistration to ask for registration of definitions +of attributes, operations, children, notifications and capabilities.

+
+
+

Almost always an extension author will create their ResourceDefinition +by creating a subclass of the +org.jboss.as.controller.SimpleResourceDefinition class or of its +PersistentResourceDefinition subclass. Both of these classes have +constructors that take a Parameters object, which is a simple builder +class to use to provide most of the key information about the resource +type. The extension-specific subclass would then take responsibility for +any additional behavior needed by overriding the registerAttributes, +registerOperations, registerNotifications and registerChildren +callbacks to do whatever is needed beyond what is provided by the +superclasses.

+
+
+

For example, to add a writable attribute:

+
+
+
+
    @Override
+    public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
+        super.registerAttributes(resourceRegistration);
+        // Now we register the 'foo' attribute
+        AttributeDefinition ad = FOO; // constant declared elsewhere
+        OperationStepHandler writeHandler = new FooWriteAttributeHandler();
+        resourceRegistration.registerReadWriteHandler(ad, null, writeHandler); // null read handler means use default read handling
+    }
+
+
+
+

To register a custom operation:

+
+
+
+
    @Override
+    public void registerOperations(ManagementResourceRegistration resourceRegistration) {
+        super.registerOperations(resourceRegistration);
+        // Now we register the 'foo-bar' custom operation
+        OperationDefinition od = FooBarOperationStepHandler.getDefinition();
+        OperationStepHandler osh = new FooBarOperationStepHandler();
+        resourceRegistration.registerOperationHandler(od, osh);
+    }
+
+
+
+

To register a child resource type:

+
+
+
+
    @Override
+    public void registerChildren(ManagementResourceRegistration resourceRegistration) {
+        super.registerChildren(resourceRegistration);
+        // Now we register the 'baz=*' child type
+        ResourceDefinition rd = new BazResourceDefinition();
+        resourceRegistration.registerSubmodel(rd);
+    }
+
+
+
+

5.4.1. ResourceDescriptionResolver

+
+

One of the things a ResourceDefinition must be able to do is provide a +DescriptionProvider that provides a proper DMR description of the +resource to use as the output for the standard +read-resource-description management operation. Since you are almost +certainly going to be using one of the standard ResourceDefinition +implementations like SimpleResourceDefinition, the creation of this +DescriptionProvider is largely handled for you. The one thing that is +not handled for you is providing the localized free form text +descriptions of the various attributes, operations, operation +parameters, child types, etc used in creating the resource description.

+
+
+

For this you must provide an implementation of the +ResourceDescriptionResolver interface, typically passed to the +Parameters object provided to the SimpleResourceDefinition +constructor. This interface has various methods that are invoked when a +piece of localized text description is needed.

+
+
+

Almost certainly you’ll satisfy this requirement by providing an +instance of the StandardResourceDescriptionResolver class.

+
+
+

StandardResourceDescriptionResolver uses a ResourceBundle to load +text from a properties file available on the classpath. The keys in the +properties file must follow patterns expected by +StandardResourceDescriptionResolver. See the +StandardResourceDescriptionResolver javadoc for further details.

+
+
+

The biggest task here is to create the properties file and add the text +descriptions. A text description must be provided for everything. The +typical thing to do is to store this properties file in the same package +as your Extension implementation, in a file named +LocalDescriptions.properties.

+
+
+
+
+

5.5. AttributeDefinition Class

+
+

The AttributeDefinition class is used to create the static definition +of one of a managed resource’s attributes. It’s a bit poorly named +though, because the same interface is used to define the details of +parameters to operations, and to define fields in the result of of +operations.

+
+
+

The definition includes all the static information about the +attribute/operation parameter/result field, e.g. the DMR ModelType of +its value, whether its presence is required, whether it supports +expressions, etc. See +Description of the +Management Model for a description of the metadata available. Almost +all of this comes from the AttributeDefinition.

+
+
+

Besides basic metadata, the AttributeDefinition can also hold custom +logic the kernel should use when dealing with the attribute/operation +parameter/result field. For example, a ParameterValidator to use to +perform special validation of values (beyond basic things like DMR type +checks and defined/undefined checks), or an AttributeParser or +AttributeMarshaller to use to perform customized parsing from and +marshaling to XML.

+
+
+

WildFly Core’s controller module provides a number of subclasses of +AttributeDefinition used for the usual kinds of attributes. For each +there is an associated builder class which you should use to build the +AttributeDefinition. Most commonly used are +SimpleAttributeDefinition, built by the associated +SimpleAttributeDefinitionBuilder. This is used for attributes whose +values are analogous to java primitives, String or byte[]. For +collections, there are various subclasses of ListAttributeDefinition +and MapAttributeDefinition. All have a Builder inner class. For +complex attributes, i.e. those with a fixed set of fully defined fields, +use ObjectTypeAttributeDefinition. (Each field in the complex type is +itself specified by an AttributeDefinition.) Finally there’s +ObjectListAttributeDefinition and ObjectMapAttributeDefinition for +lists whose elements are complex types and maps whose values are complex +types respectively.

+
+
+

Here’s an example of creating a simple attribute definition with extra +validation of the range of allowed values:

+
+
+
+
static final AttributeDefinition QUEUE_LENGTH = new SimpleAttributeDefinitionBuilder("queue-length", ModelType.INT)
+                .setRequired(true)
+                .setAllowExpression(true)
+                .setValidator(new IntRangeValidator(1, Integer.MAX_VALUE))
+                .setRestartAllServices() // means modification after resource add puts the server in reload-required
+                .build();
+
+
+
+

Via a bit of dark magic, the kernel knows that the IntRangeValidator +defined here is a reliable source of information on min and max values +for the attribute, so when creating the read-resource-description +output for the attribute it will use it and output min and max +metadata. For STRING attributes, StringLengthValidator can also be +used, and the kernel will see this and provide min-length and +max-length metadata. In both cases the kernel is checking for the +presence of a MinMaxValidator and if found it provides the appropriate +metadata based on the type of the attribute.

+
+
+

Use EnumValidator to restrict a STRING attribute’s values to a set of +legal values:

+
+
+
+
    static final SimpleAttributeDefinition TIME_UNIT = new SimpleAttributeDefinitionBuilder("unit", ModelType.STRING)
+            .setRequired(true)
+            .setAllowExpression(true)
+            .setValidator(new EnumValidator<TimeUnit>(TimeUnit.class))
+            .build();
+
+
+
+

EnumValidator is an implementation of AllowedValuesValidator that +works with Java enums. You can use other implementations or write your +own to do other types of restriction to certain values.

+
+
+

Via a bit of dark magic similar to what is done with MinMaxValidator, +the kernel recognizes the presence of an AllowedValuesValidator and +uses it to seed the allowed-values metadata in +read-resource-description output.

+
+
+

5.5.1. Key Uses of AttributeDefinition

+
+

Your AttributeDefinition instances will be some of the most commonly +used objects in your extension code. Following are the most typical +uses. In each of these examples assume there is a +SimpleAttributeDefinition stored in a constant FOO_AD that is +available to the code. Typically FOO_AD would be a constant in the +relevant ResourceDefinition implementation class. Assume FOO_AD +represents an INT attribute.

+
+
+

Note that for all of these cases except for "Use in Extracting Data from +the Configuration Model for Use in Runtime Services" there may be +utility code that handles this for you. For example +PersistentResourceXMLParser can handle the XML cases, and +AbstractAddStepHandler can handle the "Use in Storing Data Provided by +the User to the Configuration Model" case.

+
+
+
Use in XML Parsing
+
+

Here we have your extension’s implementation of +XMLElementReader<List<ModelNode>> that is being used to parse the xml +for your subsystem and add ModelNode operations to the list that will +be used to boot the server.

+
+
+
+
    @Override
+    public void readElement(final XMLExtendedStreamReader reader, final List<ModelNode> operationList) throws XMLStreamException {
+        // Create a node for the op to add our subsystem
+        ModelNode addOp = new ModelNode();
+        addOp.get("address").add("subsystem", "mysubsystem");
+        addOp.get("operation").set("add");
+        operationList.add(addOp);
+ 
+        for (int i = 0; i < reader.getAttributeCount(); i++) {
+            final String value = reader.getAttributeValue(i);
+            final String attribute = reader.getAttributeLocalName(i);
+            if (FOO_AD.getXmlName().equals(attribute) {
+                FOO_AD.parseAndSetParameter(value, addOp, reader);
+            } else ....
+        }
+ 
+        ... more parsing
+    }
+
+
+
+

Note that the parsing code has deliberately been abbreviated. The key +point is the parseAndSetParameter call. FOO_AD will validate the +value read from XML, throwing an XMLStreamException with a useful +message if invalid, including a reference to the current location of the +reader. If valid, value will be converted to a DMR ModelNode of +the appropriate type and stored as a parameter field of addOp. The +name of the parameter will be what FOO_AD.getName() returns.

+
+
+

If you use PersistentResourceXMLParser this parsing logic is handled +for you and you don’t need to write it yourself.

+
+
+
+
Use in Storing Data Provided by the User to the Configuration Model
+
+

Here we illustrate code in an OperationStepHandler that extracts a +value from a user-provided operation and stores it in the internal +model:

+
+
+
+
    @Override
+    public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
+        // Get the Resource targeted by this operation
+        Resource resource = context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS);
+        ModelNode model = resource.getModel();
+        // Store the value of any 'foo' param to the model's 'foo' attribute
+        FOO_AD.validateAndSet(operation, model);
+ 
+        ... do other stuff
+    }
+
+
+
+

As the name implies validateAndSet will validate the value in +operation before setting it. A validation failure will result in an +OperationFailedException with an appropriate message, which the kernel +will use to provide a failure response to the user.

+
+
+

Note that validateAndSet will not perform expression resolution. +Expression resolution is not appropriate at this stage, when we are just +trying to store data to the persistent configuration model. However, it +will check for expressions and fail validation if found and FOO_AD +wasn’t built with setAllowExpressions(true).

+
+
+

This work of storing data to the configuration model is usually done in +handlers for the add and write-attribute operations. If you base +your handler implementations on the standard classes provided by WildFly +Core, this part of the work will be handled for you.

+
+
+
+
Use in Extracting Data from the Configuration Model for Use in
+
+

Runtime Services

+
+
+

This is the example you are most likely to use in your code, as this is +where data needs to be extracted from the configuration model and passed +to your runtime services. What your services need is custom, so there’s +no utility code we provide.

+
+
+

Assume as part of …​ do other stuff in the last example that your +handler adds a step to do further work once operation execution proceeds +to RUNTIME state (see Operation Execution and the OperationContext for +more on what this means):

+
+
+
+
        context.addStep(new OperationStepHandler() {
+            @Override
+            public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
+ 
+                // Get the Resource targetted by this operation
+                Resource resource = context.readResource(PathAddress.EMPTY_ADDRESS);
+                ModelNode model = resource.getModel();
+                // Extract the value of the 'foo' attribute from the model
+                int foo = FOO_AD.resolveModelAttribute(context, model).asInt();
+
+                Service<XyZ> service = new MyService(foo);
+ 
+                ... do other stuff, like install 'service' with MSC
+    }
+        }, Stage.RUNTIME);
+
+
+
+

Use resolveModelAttribute to extract data from the model. It does a +number of things:

+
+
+
    +
  • +

    reads the value from the model

    +
  • +
  • +

    if it’s an expression and expressions are supported, resolves it

    +
  • +
  • +

    if it’s undefined and undefined is allowed but FOO_AD was configured +with a default value, uses the default value

    +
  • +
  • +

    validates the result of that (which is how we check that expressions +resolve to legal values), throwing OperationFailedException with a +useful message if invalid

    +
  • +
  • +

    returns that as a ModelNode

    +
  • +
+
+
+

If when you built FOO_AD you configured it such that the user must +provide a value, or if you configured it with a default value, then you +know the return value of resolveModelAttribute will be a defined +ModelNode. Hence you can safely perform type conversions with it, as +we do in the example above with the call to asInt(). If FOO_AD was +configured such that it’s possible that the attribute won’t have a +defined value, you need to guard against that, e.g.:

+
+
+
+
    ModelNode node = FOO_AD.resolveModelAttribute(context, model);
+    Integer foo = node.isDefined() ? node.asInt() : null;
+
+
+
+
+
Use in Marshaling Configuration Model Data to XML
+
+

Your Extension must register an +XMLElementWriter<SubsystemMarshallingContext> for each subsystem. This +is used to marshal the subsystem’s configuration to XML. If you don’t +use PersistentResourceXMLParser for this you’ll need to write your own +marshaling code, and AttributeDefinition will be used.

+
+
+
+
    @Override
+    public void writeContent(XMLExtendedStreamWriter writer, SubsystemMarshallingContext context) throws XMLStreamException {
+        context.startSubsystemElement(Namespace.CURRENT.getUriString(), false);
+ 
+        ModelNode subsystemModel = context.getModelNode();
+        // we persist foo as an xml attribute
+        FOO_AD.marshalAsAttribute(subsystemModel, writer);
+        // We also have a different attribute that we marshal as an element
+        BAR_AD.marshalAsElement(subsystemModel, writer);
+    }
+
+
+
+

The SubsystemMarshallingContext provides a ModelNode that represents +the entire resource tree for the subsystem (including child resources). +Your XMLElementWriter should walk through that model, using +marshalAsAttribute or marshalAsElement to write the attributes in +each resource. If the model includes child node trees that represent +child resources, create child xml elements for those and continue down +the tree.

+
+
+
+
+
+

5.6. OperationDefinition and OperationStepHandler Interfaces

+
+

OperationDefinition defines an operation, particularly its name, its +parameters and the details of any result value, with +AttributeDefinition instances used to define the parameters and result +details. The OperationDefinition is used to generate the +read-operation-description output for the operation, and in some cases +is also used by the kernel to decide details as to how to execute the +operation.

+
+
+

Typically SimpleOperationDefinitionBuilder is used to create an +OperationDefinition. Usually you only need to create an +OperationDefinition for custom operations. For the common add and +remove operations, if you provide minimal information about your +handlers to your SimpleResourceDefinition implementation via the +Parameters object passed to its constructor, then +SimpleResourceDefinition can generate a correct OperationDefinition +for those operations.

+
+
+

The OperationStepHandler is what contains the actual logic for doing +what the user requests when they invoke an operation. As its name +implies, each OSH is responsible for doing one step in the overall +sequence of things necessary to give effect to what the user requested. +One of the things an OSH can do is add other steps, with the result that +an overall operation can involve a great number of OSHs executing. (See +Operation Execution and the OperationContext for more on this.)

+
+
+

Each OSH is provided in its execute method with a reference to the +OperationContext that is controlling the overall operation, plus an +operation ModelNode that represents the operation that particular +OSH is being asked to deal with. The operation node will be of +ModelType.OBJECT with the following key/value pairs:

+
+
+
    +
  • +

    a key named operation with a value of ModelType.STRING that +represents the name of the operation. Typically an OSH doesn’t care +about this information as it is written for an operation with a +particular name and will only be invoked for that operation.

    +
  • +
  • +

    a key named address with a value of ModelType.LIST with list +elements of ModelType.PROPERTY. This value represents the address of +the resource the operation targets. If this key is not present or the +value is undefined or an empty list, the target is the root resource. +Typically an OSH doesn’t care about this information as it can more +efficiently get the address from the OperationContext via its +getCurrentAddress() method.

    +
  • +
  • +

    other key/value pairs that represent parameters to the operation, with +the key the name of the parameter. This is the main information an OSH +would want from the operation node.

    +
  • +
+
+
+

There are a variety of situations where extension code will instantiate +an OperationStepHandler

+
+
+
    +
  • +

    When registering a writable attribute with a +ManagementResourceRegistration (typically in an implementation of +ResourceDefinition.registerAttributes), an OSH must be provided to +handle the write-attribute operation.

    +
  • +
  • +

    When registering a read-only or read-write attribute that needs +special handling of the read-attribute operation, an OSH must be +provided.

    +
  • +
  • +

    When registering a metric attribute, an OSH must be provided to handle +the read-attribute operation.

    +
  • +
  • +

    Most resources need OSHs created for the add and remove +operations. These are passed to the Parameters object given to the +SimpleResourceDefinition constructor, for use by the +SimpleResourceDefinition in its implementation of the +registerOperations method.

    +
  • +
  • +

    If your resource has custom operations, you will instantiate them to +register with a ManagementResourceRegistration, typically in an +implementation of ResourceDefinition.registerOperations

    +
  • +
  • +

    If an OSH needs to tell the OperationContext to add additional steps +to do further handling, the OSH will create another OSH to execute that +step. This second OSH is typically an inner class of the first OSH.

    +
  • +
+
+
+
+

5.7. Operation Execution and the OperationContext

+
+

When the ModelController at the heart of the WildFly Core management +layer handles a request to execute an operation, it instantiates an +implementation of the OperationContext interface to do the work. The +OperationContext is configured with an initial list of operation steps +it must execute. This is done in one of two ways:

+
+
+
    +
  • +

    During boot, multiple steps are configured, one for each operation in +the list generated by the parser of the xml configuration file. For each +operation, the ModelController finds the +ManagementResourceRegistration that matches the address of the +operation and finds the OperationStepHandler registered with that MRR +for the operation’s name. A step is added to the OperationContext for +each operation by providing the operation ModelNode itself, plus the +OperationStepHandler.

    +
  • +
  • +

    After boot, any management request involves only a single operation, +so only a single step is added. (Note that a composite operation is +still a single operation; it’s just one that internally executes via +multiple steps.)

    +
  • +
+
+
+

The ModelController then asks the OperationContext to execute the +operation.

+
+
+

The OperationContext acts as both the engine for operation execution, +and as the interface provided to OperationStepHandler implementations +to let them interact with the rest of the system.

+
+
+

5.7.1. Execution Process

+
+

Operation execution proceeds via execution by the OperationContext of +a series of "steps" with an OperationStepHandler doing the key work +for each step. As mentioned above, during boot the OC is initially +configured with a number of steps, but post boot operations involve only +a single step initially. But even a post-boot operation can end up +involving numerous steps before completion. In the case of a +/:read-resource(recursive=true) operation, thousands of steps might +execute. This is possible because one of the key things an +OperationStepHandler can do is ask the OperationContext to add +additional steps to execute later.

+
+
+

Execution proceeds via a series of "stages", with a queue of steps +maintained for each stage. An OperationStepHandler can tell the +OperationContext to add a step for any stage equal to or later than +the currently executing stage. The instruction can either be to add the +step to the head of the queue for the stage or to place it at the end of +the stage’s queue.

+
+
+

Execution of a stage continues until there are no longer any steps in +the stage’s queue. Then an internal transition task can execute, and the +processing of the next stage’s steps begins.

+
+
+

Here is some brief information about each stage:

+
+
+
Stage.MODEL
+
+

This stage is concerned with interacting with the persistent +configuration model, either making changes to it or reading information +from it. Handlers for this stage should not make changes to the runtime, +and handlers running after this stage should not make changes to the +persistent configuration model.

+
+
+

If any step fails during this stage, the operation will automatically +roll back. Rollback of MODEL stage failures cannot be turned off. +Rollback during boot results in abort of the process start.

+
+
+

The initial step or steps added to the OperationContext by the +ModelController all execute in Stage.MODEL. This means that all +OperationStepHandler instances your extension registers with a +ManagementResourceRegistration must be designed for execution in +Stage.MODEL. If you need work done in later stages your Stage.MODEL +handler must add a step for that work.

+
+
+

When this stage completes, the OperationContext internally performs +model validation work before proceeding on to the next stage. Validation +failures will result in rollback.

+
+
+
+
Stage.RUNTIME
+
+

This stage is concerned with interacting with the server runtime, either +reading from it or modifying it (e.g. installing or removing services or +updating their configuration.) By the time this stage begins, all model +changes are complete and model validity has been checked. So typically +handlers in this stage read their inputs from the model, not from the +original operation ModelNode provided by the user.

+
+
+

Most OperationStepHandler logic written by extension authors will be +for Stage.RUNTIME. The vast majority of Stage.MODEL handling can best be +performed by the base handler classes WildFly Core provides in its +controller module. (See below for more on those.)

+
+
+

During boot failures in Stage.RUNTIME will not trigger rollback and +abort of the server boot. After boot, by default failures here will +trigger rollback, but users can prevent that by using the +rollback-on-runtime-failure header. However, a RuntimeException thrown +by a handler will trigger rollback.

+
+
+

At the end of Stage.RUNTIME, the OperationContext blocks waiting for +the MSC service container to stabilize (i.e. for all services to have +reached a rest state) before moving on to the next stage.

+
+
+
+
Stage.VERIFY
+
+

Service container verification work is performed in this stage, checking +that any MSC changes made in Stage.RUNTIME had the expected effect. +Typically extension authors do not add any steps in this stage, as the +steps automatically added by the OperationContext itself are all that +are needed. You can add a step here though if you have an unusual use +case where you need to verify something after MSC has stabilized.

+
+
+

Handlers in this stage should not make any further runtime changes; +their purpose is simply to do verification work and fail the operation +if verification is unsuccessful.

+
+
+

During boot failures in Stage.VERIFY will not trigger rollback and +abort of the server boot. After boot, by default failures here will +trigger rollback, but users can prevent that by using the +rollback-on-runtime-failure header. However, a RuntimeException thrown +by a handler will trigger rollback.

+
+
+

There is no special transition work at the end of this stage.

+
+
+
+
Stage.DOMAIN
+
+

Extension authors should not add steps in this stage; it is only for use +by the kernel.

+
+
+

Steps needed to execute rollout across the domain of an operation that +affects multiple processes in a managed domain run here. This stage is +only run on Host Contoller processes, never on servers.

+
+
+
+
Stage.DONE and ResultHandler / RollbackHandler Execution
+
+

This stage doesn’t maintain a queue of steps; no OperationStepHandler +executes here. What does happen here is persistence of any configuration +changes to the xml file and commit or rollback of changes affecting +multiple processes in a managed domain.

+
+
+

While no OperationStepHandler executes in this stage, following +persistence and transaction commit all ResultHandler or +RollbackHandler callbacks registered with the OperationContext by +the steps that executed are invoked. This is done in the reverse order +of step execution, so the callback for the last step to run is the first +to be executed. The most common thing for a callback to do is to respond +to a rollback by doing whatever is necessary to reverse changes made in +Stage.RUNTIME. (No reversal of Stage.MODEL changes is needed, +because if an operation rolls back the updated model produced by the +operation is simply never published and is discarded.)

+
+
+
+
Tips About Adding Steps
+
+

Here are some useful tips about how to add steps:

+
+
+
    +
  • +

    Add a step to the head of the current stage’s queue if you want it to +execute next, prior to any other steps. Typically you would use this +technique if you are trying to decompose some complex work into pieces, +with reusable logic handling each piece. There would be an +OperationStepHandler for each part of the work, added to the head of +the queue in the correct sequence. This would be a pretty advanced use +case for an extension author but is quite common in the handlers +provided by the kernel.

    +
  • +
  • +

    Add a step to the end of the queue if either you don’t care when it +executes or if you do care and want to be sure it executes after any +already registered steps.

    +
    +
      +
    • +

      A very common example of this is a Stage.MODEL handler adding a +step for its associated Stage.RUNTIME work. If there are multiple +model steps that will execute (e.g. at boot or as part of handling a +composite), each will want to add a runtime step, and likely the best +order for those runtime steps is the same as the order of the model +steps. So if each adds its runtime step at the end, the desired result +will be achieved.

      +
    • +
    • +

      A more sophisticated but important scenario is when a step may or may +not be executing as part of a larger set of steps, i.e. it may be one +step in a composite or it may not. There is no way for the handler to +know. But it can assume that if it is part of a composite, the steps for +the other operations in the composite are already registered in the +queue. (The handler for the composite op guarantees this.) So, if it +wants to do some work (say validation of the relationship between +different attributes or resources) the input to which may be affected by +possible other already registered steps, instead of doing that work +itself, it should register a different step at the end of the queue +and have that step do the work. This will ensure that when the +validation step runs, the other steps in the composite will have had a +chance to do their work. Rule of thumb: always doing any extra +validation work in an added step.

      +
    • +
    +
    +
  • +
+
+
+
Passing Data to an Added Step
+
+

Often a handler author will want to share state between the handler for +a step it adds and the handler that added it. There are a number of ways +this can be done:

+
+
+
    +
  • +

    Very often the OperationStepHandler for the added class is an inner +class of the handler that adds it. So here sharing state is easily done +using final variables in the outer class.

    +
  • +
  • +

    The handler for the added step can accept values passed to its +constructor which can serve as shared state.

    +
  • +
  • +

    The OperationContext includes an Attachment API which allows +arbitary data to be attached to the context and retrieved by any handler +that has access to the attachment key.

    +
  • +
  • +

    The OperationContext.addStep methods include overloaded variants +where the caller can pass in an operation ModelNode that will in +turn be passed to the execute method of the handler for the added +step. So, state can be passed via this ModelNode. It’s important to +remember though that the address field of the operation will govern +what the OperationContext sees as the target of operation when that +added step’s handler executes.

    +
  • +
+
+
+
+
Controlling Output from an Added Step
+
+

When an OperationStepHandler wants to report an operation result, it +calls the OperationContext.getResult() method and manipulates the +returned ModelNode. Similarly for failure messages it can call +OperationContext.getFailureDescription(). The usual assumption when +such a call is made is that the result or failure description being +modified is the one at the root of the response to the end user. But +this is not necessarily the case.

+
+
+

When an OperationStepHandler adds a step it can use one of the +overloaded OperationContext.addStep variants that takes a response +ModelNode parameter. If it does, whatever ModelNode it passes in +will be what is updated as a result of OperationContext.getResult() +and OperationContext.getFailureDescription() calls by the step’s +handler. This node does not need to be one that is directly associated +with the response to the user.

+
+
+

How then does the handler that adds a step in this manner make use of +whatever results the added step produces, since the added step will not +run until the adding step completes execution? There are a couple of +ways this can be done.

+
+
+

The first is to add yet another step, and provide it a reference to the +response node used by the second step. It will execute after the +second step and can read its response and use it in formulating its own +response.

+
+
+

The second way involves using a ResultHandler. The ResultHandler for +a step will execute after any step that it adds executes. And, it is +legal for a ResultHandler to manipulate the "result" value for an +operation, or its "failure-description" in case of failure. So, the +handler that adds a step can provide to its ResultHandler a reference +to the response node it passed to addStep, and the ResultHandler +can in turn and use its contents to manipulate its own response.

+
+
+

This kind of handling wouldn’t commonly be done by extension authors and +great care needs to be taken if it is done. It is often done in some of +the kernel handlers.

+
+
+
+
+
+

5.7.2. OperationStepHandler use of the OperationContext

+
+

All useful work an OperationStepHandler performs is done by invoking +methods on the OperationContext. The OperationContext interface is +extensively javadoced, so this section will just provide a brief partial +overview. The OSH can use the OperationContext to:

+
+
+
    +
  • +

    Learn about the environment in which it is executing ( +getProcessType, getRunningMode, isBooting, getCurrentStage, +getCallEnvironment, getSecurityIdentity, isDefaultRequiresRuntime, +isNormalServer)

    +
  • +
  • +

    Learn about the operation ( getCurrentAddress, +getCurrentAddressValue, getAttachmentStream, +getAttachmentStreamCount)

    +
  • +
  • +

    Read the Resource tree ( readResource, readResourceFromRoot, +getOriginalRootResource)

    +
  • +
  • +

    Manipulate the Resource tree ( createResource, addResource, +readResourceForUpdate, removeResource)

    +
  • +
  • +

    Read the resource type information ( getResourceRegistration, +getRootResourceRegistration)

    +
  • +
  • +

    Manipulate the resource type information ( +getResourceRegistrationForUpdate)

    +
  • +
  • +

    Read the MSC service container ( getServiceRegistry(false))

    +
  • +
  • +

    Manipulate the MSC service container ( getServiceTarget, +getServiceRegistry(true), removeService)

    +
  • +
  • +

    Manipulate the process state ( reloadRequired, +revertReloadRequired, restartRequired, revertRestartRequired

    +
  • +
  • +

    Resolve expressions ( resolveExpressions)

    +
  • +
  • +

    Manipulate the operation response ( getResult, +getFailureDescription, attachResultStream, runtimeUpdateSkipped)

    +
  • +
  • +

    Force operation rollback ( setRollbackOnly)

    +
  • +
  • +

    Add other steps ( addStep)

    +
  • +
  • +

    Share data with other steps ( attach, attachIfAbsent, +getAttachment, detach)

    +
  • +
  • +

    Work with capabilities (numerous methods)

    +
  • +
  • +

    Emit notifications ( emit)

    +
  • +
  • +

    Request a callback to a ResultHandler or RollbackHandler ( +completeStep)

    +
  • +
+
+
+
+

5.7.3. Locking and Change Visibility

+
+

The ModelController and OperationContext work together to ensure +that only one operation at a time is modifying the state of the system. +This is done via an exclusive lock maintained by the ModelController. +Any operation that does not need to write never requests the lock and is +able to proceed without being blocked by an operation that holds the +lock (i.e. writes do not block reads.) If two operations wish to +concurrently write, one or the other will get the lock and the loser +will block waiting for the winner to complete and release the lock.

+
+
+

The OperationContext requests the exclusive lock the first time any of +the following occur:

+
+
+
    +
  • +

    A step calls one of its methods that indicates a wish to modify the +resource tree ( createResource, addResource, +readResourceForUpdate, removeResource)

    +
  • +
  • +

    A step calls one of its methods that indicates a wish to modify the +ManagementResourceRegistration tree ( +getResourceRegistrationForUpdate)

    +
  • +
  • +

    A step calls one of its methods that indicates a desire to change MSC +services ( getServiceTarget, removeService or getServiceRegistry +with the modify param set to true)

    +
  • +
  • +

    A step calls one of its methods that manipulates the capability +registry (various)

    +
  • +
  • +

    A step explicitly requests the lock by calling the +acquireControllerLock method (doing this is discouraged)

    +
  • +
+
+
+

The step that acquired the lock is tracked, and the lock is released +when the ResultHandler added by that step has executed. (If the step +doesn’t add a result handler, a default no-op one is automatically +added).

+
+
+

When an operation first expresses a desire to manipulate the Resource +tree or the capability registry, a private copy of the tree or registry +is created and thereafter the OperationContext works with that copy. +The copy is published back to the ModelController in Stage.DONE if +the operation commits. Until that happens any changes to the tree or +capability registry made by the operation are invisible to other +threads. If the operation does not commit, the private copies are simply +discarded.

+
+
+

However, the OperationContext does not make a private copy of the +ManagementResourceRegistration tree before manipulating it, nor is +there a private copy of the MSC service container. So, any changes made +by an operation to either of those are immediately visible to other +threads.

+
+
+
+
+

5.8. Resource Interface

+
+

An instance of the Resource interface holds the state for a particular +instance of a type defined by a ManagementResourceRegistration. +Referring back to the analogy mentioned earlier the +ManagementResourceRegistration is analogous to a Java class while the +Resource is analogous to an instance of that class.

+
+
+

The Resource makes available state information, primarily

+
+
+
    +
  • +

    Some descriptive metadata, such as its address, whether it is +runtime-only and whether it represents a proxy to a another primary +resource that resides on another process in a managed domain

    +
  • +
  • +

    A ModelNode of ModelType.OBJECT whose keys are the resource’s +attributes and whose values are the attribute values

    +
  • +
  • +

    Links to child resources such that the resources form a tree

    +
  • +
+
+
+

5.8.1. Creating Resources

+
+

Typically extensions create resources via OperationStepHandler calls +to the OperationContext.createResource method. However it is allowed +for handlers to use their own Resource implementations by +instantiating the resource and invoking OperationContext.addResource. +The AbstractModelResource class can be used as a base class.

+
+
+
+

5.8.2. Runtime-Only and Synthetic Resources and the PlaceholderResourceEntry Class

+
+

A runtime-only resource is one whose state is not persisted to the xml +configuration file. Many runtime-only resources are also "synthetic" +meaning they are not added or removed as a result of user initiated +management operations. Rather these resources are "synthesized" in order +to allow users to use the management API to examine some aspect of the +internal state of the process. A good example of synthetic resources are +the resources in the /core-service=platform-mbeans branch of the +resource tree. There are resources there that represent various aspects +of the JVM (classloaders, memory pools, etc) but which resources are +present entirely depends on what the JVM is doing, not on any management +action. Another example are resources representing "core queues" in the +WildFly messaging and messaging-artemismq subsystems. Queues are created +as a result of activity in the message broker which may not involve +calls to the management API. But for each such queue a management +resource is available to allow management users to perform management +operations against the queue.

+
+
+

It is a requirement of execution of a management operation that the +OperationContext can navigate through the resource tree to a +Resource object located at the address specified. This requirement +holds true even for synthetic resources. How can this be handled, given +the fact these resources are not created in response to management +operations?

+
+
+

The trick involves using special implementations of Resource. Let’s +imagine a simple case where we have a parent resource which is fairly +normal (i.e. it holds persistent configuration and is added via a user’s +add operation) except for the fact that one of its child types +represents synthetic resources (e.g. message queues). How would this be +handled?

+
+
+

First, the parent resource would require a custom implementation of the +Resource interface. The OperationStepHandler for the add operation +would instantiate it, providing it with access to whatever API is needed +for it to work out what items exist for which a synthetic resource +should be made available (e.g. an API provided by the message broker +that provides access to its queues). The add handler would use the +OperationContext.addResource method to tie this custom resource into +the overall resource tree.

+
+
+

The custom Resource implementation would use special implementations +of the various methods that relate to accessing children. For all calls +that relate to the synthetic child type (e.g. core-queue) the custom +implementation would use whatever API call is needed to provide the +correct data for that child type (e.g. ask the message broker for the +names of queues).

+
+
+

A nice strategy for creating such a custom resource is to use +delegation. Use Resource.Factory.create}() to create a standard +resource. Then pass it to the constructor of your custom resource type +for use as a delegate. The custom resource type’s logic is focused on +the synthetic children; all other work it passes on to the delegate.

+
+
+

What about the synthetic resources themselves, i.e. the leaf nodes in +this part of the tree? These are created on the fly by the parent +resource in response to getChild, requireChild, getChildren and +navigate calls that target the synthetic resource type. These +created-on-the-fly resources can be very lightweight, since they store +no configuration model and have no children. The +PlaceholderResourceEntry class is perfect for this. It’s a very +lightweight Resource implementation with minimal logic that only +stores the final element of the resource’s address as state.

+
+
+

See LoggingResource in the WildFly Core logging subsystem for an +example of this kind of thing. Searching for other uses of +PlaceholderResourceEntry will show other examples.

+
+
+
+
+

5.9. DeploymentUnitProcessor Interface

+
+

TODO

+
+
+
+

5.10. Useful classes for implementing OperationStepHandler

+
+

The WildFly Core controller module includes a number of +OperationStepHandler implementations that in some cases you can use +directly, and that in other cases can serve as the base class for your +own handler implementation. In all of these a general goal is to +eliminate the need for your code to do anything in Stage.MODEL while +providing support for whatever is appropriate for Stage.RUNTIME.

+
+
+

5.10.1. Add Handlers

+
+

AbstractAddStepHandler is a base class for handlers for add +operations. There are a number of ways you can configure its behavior, +the most commonly used of which are to:

+
+
+
    +
  • +

    Configure its behavior in Stage.MODEL by passing to its constructor +AttributeDefinition and RuntimeCapability instances for the +attributes and capabilities provided by the resource. The handler will +automatically validate the operation parameters whose names match the +provided attributes and store their values in the model of the newly +added Resource. It will also record the presence of the given +capabilities.

    +
  • +
  • +

    Control whether a Stage.RUNTIME step for the operation needs to be +added, by overriding the +protected boolean requiresRuntime(OperationContext context) method. +Doing this is atypical; the standard behavior in the base class is +appropriate for most cases.

    +
  • +
  • +

    Implement the primary logic of the Stage.RUNTIME step by overriding +the +protected void performRuntime(final OperationContext context, final ModelNode operation, final Resource resource) +method. This is typically the bulk of the code in an +AbstractAddStepHandler subclass. This is where you read data from the +Resource model and use it to do things like configure and install MSC +services.

    +
  • +
  • +

    Handle any unusual needs of any rollback of the Stage.RUNTIME step +by overriding +protected void rollbackRuntime(OperationContext context, final ModelNode operation, final Resource resource). +Doing this is not typically needed, since if the rollback behavior +needed is simply to remove any MSC services installed in +performRuntime, the OperationContext will do this for you +automatically.

    +
  • +
+
+
+

AbstractBoottimeAddStepHandler is a subclass of +AbstractAddStepHandler meant for use by add operations that should +only do their normal Stage.RUNTIME work in server, boot, with the +server being put in reload-required if executed later. Primarily this +is used for add operations that register DeploymentUnitProcessor +implementations, as this can only be done at boot.

+
+
+

Usage of AbstractBoottimeAddStepHandler is the same as for +AbstractAddStepHandler except that instead of overriding +performRuntime you override +protected void performBoottime(OperationContext context, ModelNode operation, Resource resource).

+
+
+

A typical thing to do in performBoottime is to add a special step that +registers one or more DeploymentUnitProcessor s.

+
+
+
+
    @Override
+    public void performBoottime(OperationContext context, ModelNode operation, final Resource resource)
+            throws OperationFailedException {
+ 
+        context.addStep(new AbstractDeploymentChainStep() {
+            @Override
+            protected void execute(DeploymentProcessorTarget processorTarget) {
+ 
+                processorTarget.addDeploymentProcessor(RequestControllerExtension.SUBSYSTEM_NAME, Phase.STRUCTURE, Phase.STRUCTURE_GLOBAL_REQUEST_CONTROLLER, new RequestControllerDeploymentUnitProcessor());
+            }
+        }, OperationContext.Stage.RUNTIME);
+
+        ... do other things
+
+
+
+
+

5.10.2. Remove Handlers

+
+

TODO AbstractRemoveStepHandler ServiceRemoveStepHandler

+
+
+
+

5.10.3. Write attribute handlers

+
+

TODO AbstractWriteAttributeHandler

+
+
+
+

5.10.4. Reload-required handlers

+
+

ReloadRequiredAddStepHandler ReloadRequiredRemoveStepHandler +ReloadRequiredWriteAttributeHandler

+
+
+

Use these for cases where, post-boot, the change to the configuration +model made by the operation cannot be reflected in the runtime until the +process is reloaded. These handle the mechanics of recording the need +for reload and reverting it if the operation rolls back.

+
+
+
+

5.10.5. Restart Parent Resource Handlers

+
+

RestartParentResourceAddHandler RestartParentResourceRemoveHandler +RestartParentWriteAttributeHandler

+
+
+

Use these in cases where a management resource doesn’t directly control +any runtime services, but instead simply represents a chunk of +configuration that a parent resource uses to configure services it +installs. (Really, this kind of situation is now considered to be a poor +management API design and is discouraged. Instead of using child +resources for configuration chunks, complex attributes on the parent +resource should be used.)

+
+
+

These handlers help you deal with the mechanics of the fact that, +post-boot, any change to the child resource likely requires a restart of +the service provided by the parent.

+
+
+
+

5.10.6. Model Only Handlers

+
+

ModelOnlyAddStepHandler ModelOnlyRemoveStepHandler +ModelOnlyWriteAttributeHandler

+
+
+

Use these for cases where the operation never affects the runtime, even +at boot. All it does is update the configuration model. In most cases +such a thing would be odd. These are primarily useful for legacy +subsystems that are no longer usable on current version servers and thus +will never do anything in the runtime. However, current version Domain +Controllers must be able to understand the subsystem’s configuration +model to allow them to manage older Host Controllers running previous +versions where the subsystem is still usable by servers. So these +handlers allow the DC to maintain the configuration model for the +subsystem.

+
+
+
+

5.10.7. Misc

+
+

AbstractRuntimeOnlyHandler is used for custom operations that don’t +involve the configuration model. Create a subclass and implement the +protected abstract void executeRuntimeStep(OperationContext context, ModelNode operation) +method. The superclass takes care of adding a Stage.RUNTIME step that +calls your method.

+
+
+

ReadResourceNameOperationStepHandler is for cases where a resource +type includes a 'name' attribute whose value is simply the value of the +last element in the resource’s address. There is no need to store the +value of such an attribute in the resource’s model, since it can always +be determined from the resource address. But, if the value is not stored +in the resource model, when the attribute is registered with +ManagementResourceRegistration.registerReadAttribute an +OperationStepHandler to handle the read-attribute operation must be +provided. Use ReadResourceNameOperationStepHandler for this. (Note +that including such an attribute in your management API is considered to +be poor practice as it’s just redundant data.)

+
+
+
+
+
+
+

6. WildFly JNDI Implementation

+
+
+

6.1. Introduction

+
+

This page proposes a reworked WildFly JNDI implementation, and +new/updated APIs for WildFly subsystem and EE deployment processors +developers to bind new resources easier.

+
+
+

To support discussion in the community, the content includes a big focus +on comparing WildFly 29 JNDI implementation with the new proposal, and +should later evolve to the prime guide for WildFly developers needing to +interact with JNDI at subsystem level.

+
+
+
+

6.2. Architecture

+
+

WildFly relies on MSC to provide the data source for the JNDI tree. Each +resource bound in JNDI is stored in a MSC service (BinderService), and +such services are installed as children of subsystem/deployment +services, for an automatically unbound as consequence of uninstall of +the parent services.

+
+
+

Since there is the need to know what entries are bound, and MSC does not +provides that, there is also the (ServiceBased)NamingStore concept, +which internally manage the set of service names bound. There are +multiple naming stores in every WildFly instance, serving different JNDI +namespaces:

+
+
+
    +
  • +

    java:comp - the standard EE namespace for entries scoped to a specific +component, such as an Jakarta Enterprise Beans

    +
  • +
  • +

    java:module - the standard EE namespace for entries scoped to specific +module, such as an Jakarta Enterprise Beans jar, and shared by all components in it

    +
  • +
  • +

    java:app - the standard EE namespace for entries scoped to a specific +application, i.e. EAR, and shared by all modules in it

    +
  • +
  • +

    java:global - the standard EE namespace for entries shared by all +deployments

    +
  • +
  • +

    java:jboss - a proprietary namespace "global" namespace

    +
  • +
  • +

    java:jboss/exported - a proprietary "global" namespace which entries +are exposed to remote JNDI

    +
  • +
  • +

    java: - any entries not in the other namespaces

    +
  • +
+
+
+

One particular implementation choice, to save resources, is that JNDI +contexts by default are not bound, the naming stores will search for any +entry bound with a name that is a child of the context name, if found +then its assumed the context exists.

+
+
+

The reworked implementation introduces shared/global java:comp, +java:module and java:app namespaces. Any entry bound on these will +automatically be available to every EE deployment scoped instance of +these namespaces, what should result in a significant reduction of +binder services, and also of EE deployment processors. Also, the Naming +subsystem may now configure bind on these shared contexts, and these +contexts will be available when there is no EE component in the +invocation, which means that entries such as java:comp/DefaultDatasource +will always be available.

+
+
+
+

6.3. Binding APIs

+
+

WildFly Naming subsystem exposes high level APIs to bind new JNDI +resources, there is no need to deal with the low level BinderService +type anymore.

+
+
+

6.3.1. Subsystem

+
+

At the lowest level a JNDI entry is bound by installing a BinderService +to a ServiceTarget:

+
+
+
+
 
+   /**
+     * Binds a new entry to JNDI.
+     * @param serviceTarget the binder service's target
+     * @param name the new JNDI entry's name
+     * @param value the new JNDI entry's value
+     */
+    private ServiceController<?> bind(ServiceTarget serviceTarget, String name, Object value) {
+        
+ // the bind info object provides MSC service names to use when creating the binder service
+        final ContextNames.BindInfo bindInfo = ContextNames.bindInfoFor(name);
+        final BinderService binderService = new BinderService(bindInfo.getBindName());
+        
+ // the entry's value is provided by a managed reference factory,
+        // since the value may need to be obtained on lookup (e.g. EJB reference)
+        final ManagedReferenceFactory managedReferenceFactory = new ImmediateManagedReferenceFactory(value);
+        
+ return serviceTarget
+                // add binder service to specified target
+                .addService(bindInfo.getBinderServiceName(), binderService)
+                // when started the service will be injected with the factory
+                .addInjection(binderService.getManagedObjectInjector(), managedReferenceFactory)
+                // the binder service depends on the related naming store service,
+                // and on start/stop will add/remove its service name
+                .addDependency(bindInfo.getParentContextServiceName(),
+                        ServiceBasedNamingStore.class,
+                        binderService.getNamingStoreInjector())
+                .install();
+    }
+
+
+
+

But the example above is the simplest usage possible, it may become +quite complicated if the entry’s value is not immediately available, for +instance it is a value in another MSC service, or is a value in another +JNDI entry. It’s also quite easy to introduce bugs when working with the +service names, or incorrectly assume that other MSC functionality, such +as alias names, may be used.

+
+
+

Using the new high level API, it’s as simple as:

+
+
+
+
// bind an immediate value
+ContextNames.bindInfoFor("java:comp/ORB").bind(serviceTarget, this.orb);
+ 
+ 
+// bind value from another JNDI entry (an alias/linkref)
+ContextNames.bindInfoFor("java:global/x").bind(serviceTarget, new JndiName("java:jboss/x"));
+ 
+ 
+// bind value obtained from a MSC service
+ContextNames.bindInfoFor("java:global/z").bind(serviceTarget, serviceName);
+
+
+
+

If there is the need to access the binder’s service builder, perhaps to +add a service verification handler or simply not install the binder +service right away:

+
+
+
+
ContextNames.bindInfoFor("java:comp/ORB").builder(serviceTarget, verificationHandler, ServiceController.Mode.ON_DEMAND).installService(this.orb);
+
+
+
+
+

6.3.2. EE Deployment

+
+

With respect to EE deployments, the subsystem API should not be used, +since bindings may need to be discarded/overridden, thus a EE deployment +processor should add a new binding in the form of a +BindingConfiguration, to the EeModuleDescription or +ComponentDescription, depending if the bind is specific to a component +or not. An example of a deployment processor adding a binding:

+
+
+
+
public class ModuleNameBindingProcessor implements DeploymentUnitProcessor {
+ 
+    // jndi name objects are immutable
+    private static final JndiName JNDI_NAME_java_module_ModuleName = new JndiName("java:module/ModuleName");
+ 
+    @Override
+    public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
+        
+ final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
+        // skip deployment unit if it's the top level EAR
+        if (DeploymentTypeMarker.isType(DeploymentType.EAR, deploymentUnit)) {
+            return;
+        }
+        
+ // the module's description is in the DUs attachments
+        final EEModuleDescription moduleDescription = deploymentUnit
+                .getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION);
+        if (moduleDescription == null) {
+            return;
+        }
+        
+ // add the java:module/ModuleName binding
+        // the value's injection source for an immediate available value
+        final InjectionSource injectionSource = new ImmediateInjectionSource(moduleDescription.getModuleName());
+        
+ // add the binding configuration to the module's description bindings configurations
+        moduleDescription.getBindingConfigurations()
+                .addDeploymentBinding(new BindingConfiguration(JNDI_NAME_java_module_ModuleName, injectionSource));
+    }
+ 
+    //...
+}
+
+
+
+ + + + + +
+ + +When adding the binding configuration use: +
+
+
+
    +
  • +

    addDeploymentBinding() for a binding that may not be overriden, such +as the ones found in xml descriptors

    +
  • +
  • +

    addPlatformBinding() for a binding which may be overriden by a +deployment descriptor bind or annotation, for instance +java:comp/DefaultDatasource

    +
  • +
+
+
+

A deployment processor may now also add a binding configuration to all +components in a module:

+
+
+
+
     
+moduleDescription.getBindingConfigurations().addPlatformBindingToAllComponents(bindingConfiguration);
+
+
+
+ + + + + +
+ + +In the reworked implementation there is now no need to behave +differently considering the deployment type, for instance if deployment +is a WAR or app client, the Module/Component BindingConfigurations +objects handle all of that. The processor should simply go for the 3 use +cases: module binding, component binding or binding shared by all +components. +
+
+
+ + + + + +
+ + +All deployment binding configurations MUST be added before INSTALL +phase, this is needed because on such phase, when the bindings are +actually done, there must be a final set of deployment binding names +known, such information is need to understand if a resource injection +targets entries in the global or scoped EE namespaces. +
+
+
+

Most cases for adding bindings to EE deployments are in the context of a +processor deploying a XML descriptor, or scanning deployment classes for +annotations, and there abstract types, such as the +AbstractDeploymentDescriptorBindingsProcessor, which simplifies greatly +the processor code for such use cases.

+
+
+

One particular use case is the parsing of EE Resource Definitions, and +the reworked implementation provides high level abstract deployment +processors for both XML descriptor and annotations, an example for each:

+
+
+
+
/**
+ * Deployment processor responsible for processing administered-object deployment descriptor elements
+ *
+ * @author Eduardo Martins
+ */
+public class AdministeredObjectDefinitionDescriptorProcessor extends ResourceDefinitionDescriptorProcessor {
+ 
+    @Override
+    protected void processEnvironment(RemoteEnvironment environment, ResourceDefinitionInjectionSources injectionSources) throws DeploymentUnitProcessingException {
+        final AdministeredObjectsMetaData metaDatas = environment.getAdministeredObjects();
+        if (metaDatas != null) {
+            for(AdministeredObjectMetaData metaData : metaDatas) {
+                injectionSources.addResourceDefinitionInjectionSource(getResourceDefinitionInjectionSource(metaData));
+            }
+        }
+    }
+ 
+    private ResourceDefinitionInjectionSource getResourceDefinitionInjectionSource(final AdministeredObjectMetaData metaData) {
+        final String name = metaData.getName();
+        final String className = metaData.getClassName();
+        final String resourceAdapter = metaData.getResourceAdapter();
+        final AdministeredObjectDefinitionInjectionSource resourceDefinitionInjectionSource = new AdministeredObjectDefinitionInjectionSource(name, className, resourceAdapter);
+        resourceDefinitionInjectionSource.setInterface(metaData.getInterfaceName());
+        if (metaData.getDescriptions() != null) {
+            resourceDefinitionInjectionSource.setDescription(metaData.getDescriptions().toString());
+        }
+        resourceDefinitionInjectionSource.addProperties(metaData.getProperties());
+        return resourceDefinitionInjectionSource;
+    }
+ 
+}
+
+
+
+

and

+
+
+
+
/**
+ * Deployment processor responsible for processing {@link jakarta.resource.AdministeredObjectDefinition} and {@link jakarta.resource.AdministeredObjectDefinitions}.
+ *
+ * @author Jesper Pedersen
+ * @author Eduardo Martins
+ */
+public class AdministeredObjectDefinitionAnnotationProcessor extends ResourceDefinitionAnnotationProcessor {
+ 
+    private static final DotName ANNOTATION_NAME = DotName.createSimple(AdministeredObjectDefinition.class.getName());
+    private static final DotName COLLECTION_ANNOTATION_NAME = DotName.createSimple(AdministeredObjectDefinitions.class.getName());
+ 
+    @Override
+    protected DotName getAnnotationDotName() {
+        return ANNOTATION_NAME;
+    }
+ 
+    @Override
+    protected DotName getAnnotationCollectionDotName() {
+        return COLLECTION_ANNOTATION_NAME;
+    }
+ 
+    @Override
+    protected ResourceDefinitionInjectionSource processAnnotation(AnnotationInstance annotationInstance) throws DeploymentUnitProcessingException {
+        final String name = AnnotationElement.asRequiredString(annotationInstance, AnnotationElement.NAME);
+        final String className = AnnotationElement.asRequiredString(annotationInstance, "className");
+        final String ra = AnnotationElement.asRequiredString(annotationInstance, "resourceAdapter");
+        final AdministeredObjectDefinitionInjectionSource directAdministeredObjectInjectionSource =
+                new AdministeredObjectDefinitionInjectionSource(name, className, ra);
+        directAdministeredObjectInjectionSource.setDescription(AnnotationElement.asOptionalString(annotationInstance,
+                AdministeredObjectDefinitionInjectionSource.DESCRIPTION));
+        directAdministeredObjectInjectionSource.setInterface(AnnotationElement.asOptionalString(annotationInstance,
+                AdministeredObjectDefinitionInjectionSource.INTERFACE));
+        directAdministeredObjectInjectionSource.addProperties(AnnotationElement.asOptionalStringArray(annotationInstance,
+                AdministeredObjectDefinitionInjectionSource.PROPERTIES));
+        return directAdministeredObjectInjectionSource;
+    }
+ 
+}
+
+
+
+ + + + + +
+ + +The abstract processors with respect to Resource Definitions are already +submitted through WFLY-3292’s PR. +
+
+
+
+
+

6.4. Resource Ref Processing

+
+

TODO for now no changes on this in the reworked WildFly Naming.

+
+
+
+
+
+

7. CLI extensibility for layered products

+
+
+

In addition to supporting the ServiceLoader extension mechanism to load +command handlers coming from outside of the CLI codebase, starting from +the wildfly-core-1.0.0.Beta1 release the CLI running in a modular +classloading environment can be extended with commands exposed in server +extension modules. The CLI will look for and register extension commands +when it (re-)connects to the controller by iterating through the +registered by that time extensions and using the ServiceLoader mechanism +on the extension modules. (Note, that this mechanism will work only for +extensions available in the server installation the CLI is launched +from.)

+
+
+

Here is an example of a simple command handler and its integration.

+
+
+
+
package org.jboss.as.test.cli.extensions;public class ExtCommandHandler extends org.jboss.as.cli.handlers.CommandHandlerWithHelp {     
+ 
+package org.jboss.as.test.cli.extensions;
+public class ExtCommandHandler extends org.jboss.as.cli.handlers.CommandHandlerWithHelp {
+ 
+ 
+    public static final String NAME = "ext-command";
+    public static final String OUTPUT = "hello world!";
+ 
+ 
+    public CliExtCommandHandler() {
+        super(NAME, false);
+    }
+ 
+ 
+    @Override
+    protected void doHandle(CommandContext ctx) throws CommandLineException {
+        ctx.printLine(OUTPUT);
+    }
+}
+
+
+
+

The command will simply print a message to the terminal. The next step +is to implement the CLI CommandHandlerProvider interface.

+
+
+
+
package org.jboss.as.test.cli.extensions;
+public class ExtCommandHandlerProvider implements org.jboss.as.cli.CommandHandlerProvider {
+ 
+ 
+    @Override
+    public CommandHandler createCommandHandler(CommandContext ctx) {
+        return new ExtCommandHandler();
+    }
+ 
+ 
+    /**
+     * Whether the command should be available in tab-completion.
+     */
+    @Override
+    public boolean isTabComplete() {
+        return true;
+    }
+ 
+ 
+    /**
+     * Command name(s).
+     */
+    @Override
+    public String[] getNames() {
+        return new String[]{ExtCommandHandler.NAME};
+    }
+}
+
+
+
+

The final step is to include +META-INF/services/org.jboss.as.cli.CommandHandlerProvider entry into +the JAR file containing the classes above with value +org.jboss.as.test.cli.extensions.ExtCommandHandlerProvider.

+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Galleon_Guide.html b/latest/Galleon_Guide.html new file mode 100644 index 000000000..d5705c14a --- /dev/null +++ b/latest/Galleon_Guide.html @@ -0,0 +1,1485 @@ + + + + + + + + +Galleon Provisioning Guide + + + + + + + +
+
+
+
+

© 2020 The original authors.

+
+ +
+
+
+

1. Provisioning WildFly with Galleon

+
+
+

As opposed to a using traditional WildFly zip installation that installs it all (all default +server configurations and all JBoss modules), using Galleon tooling +you can choose to install a complete or customized WildFly server.

+
+
+

More information on Galleon features and tooling can be found in the Galleon docs.

+
+
+

1.1. Download and Installation of the Galleon Command Line Tool

+
+

Releases of the Galleon command line tool are available on the Galleon releases page.

+
+
+

Download and unzip the release zip and add the bin dir to your system path. Use galleon.sh or galleon.bat to launch the tool.

+
+
+
+

1.2. WildFly Galleon feature-packs

+
+

WildFly provides a Galleon feature-pack maven artifact (a zipped file that contains +everything needed to dynamically provision a server). +This feature-pack, as well as the feature-packs on which its depends, +are deployed in public maven repositories.

+
+
+

When Galleon is used to install WildFly, WildFly feature-packs are retrieved and +their content is assembled to create an installation.

+
+
+
+

1.3. Installing WildFly using Galleon

+
+

The Galleon maven plugin or Galleon CLI are used to install WildFly. The latest CLI and documentation can be downloaded +from the Galleon releases page.

+
+
+

To install the latest final version of WildFly into the directory my-wildfly-server call:

+
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server
+
+
+
+

Once installed, the directory my-wildfly-server contains all that is expected to run a complete WildFly server. +By default, all standalone and domain configurations are installed.

+
+
+ + + + + +
+ + +
+

Append the release version to install an identified release, for example:

+
+
+
+
galleon.sh install wildfly:current#21.0.0.Final --dir=my-wildfly-server
+
+
+
+
+
+ + + + + +
+ + +
+

If your project is using WildFly Preview, the feature-pack-location to use +is wildfly-preview@maven(org.jboss.universe:community-universe).

+
+
+
+
+
+

1.4. Selecting the configurations to install

+
+

Galleon allows you to specify only a subset of the default configurations to be installed.

+
+
+

To only install the standalone.xml configuration call:

+
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --default-configs=standalone/standalone.xml
+
+
+
+

To install multiple configurations, a comma separated list of default configurations can be provided, +for example:

+
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --default-configs=standalone/standalone.xml,domain/domain.xml
+
+
+
+ + + + + +
+ + +
+

A default configuration is identified by <configuration model>/<configuration name>. WildFly defines standalone and domain models. +The configuration name is the XML configuration file name (e.g.: standalone.xml, domain.xml, standalone-ha.xml).

+
+
+
+
+
+

1.5. WildFly Galleon layers

+
+

WildFly Galleon feature-packs expose some Galleon layers. +A layer identifies one or more server capabilities that can be installed on its own or +in combination with other layers. For example, if your application (e.g. a microservice) +is only making use of Jakarta-RESTful-Web-Services, MicroProfile Config and CDI server capabilities, you can choose to only install +the jaxrs, microprofile-config and cdi layers. The standalone.xml configuration would then only contain the +required subsystems and their dependencies.

+
+
+

The benefit to installing WildFly using Galleon layers, in addition to configuration +trim down, is that Galleon only installs the needed content (JBoss Modules modules, scripts, etc.)

+
+
+

To install a server only configured with the Jakarta-RESTful-Web-Services and CDI capabilities call:

+
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cdi,jaxrs
+
+
+
+

Once installed, the directory my-wildfly-server contains all that is expected to deploy an application +that depends on Jakarta-RESTful-Web-Services and CDI.

+
+
+

Some layers optionally depend on other layers; i.e. the features provided by layer can and by default do make use +of those from another layer, but if those are not present things will still work fine. In such a case if you do not +want the optional capabilities you can exclude the optional layer by prefixing its name with a '-'. For example +to exclude the optional CDI dependency on Jakarta Bean Validation:

+
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cdi,jaxrs,-bean-validation
+
+
+
+ + + + + +
+ + +
+
    +
  • +

    Tools (jboss-cli, add-user, …​) are not always installed when installing WildFly using layers. +In some cases, depending on what layers you use, only server launcher scripts are installed into the bin directory. +To include these tools include the core-tools layer.

    +
  • +
+
+
+
+
+

1.5.1. WildFly Layers

+
+

A Galleon layer is a name that identifies a server capability (e.g.: jaxrs, +ejb, microprofile-config, jpa) or an aggregation of such capabilities. A layer captures a server capability in the form of:

+
+
+
    +
  • +

    A piece of server XML configuration (e.g.: extension, configured subsystem, interfaces) that describes the capability.

    +
  • +
  • +

    A set of modules and other filesystem content that implements the capability.

    +
  • +
+
+
+

When you are using a layer, it delivers these pieces of information in order for +Galleon to assemble a server containing only the required configuration and modules.

+
+
+

In the tables below we provide basic information about all of the layers WildFly provides.

+
+
+

Besides the layer names and a brief description of each, the tables below detail the various dependency relationships +between layers. If the capabilities provided by a layer A require capabilities provided by another layer B, then layer A will depend on layer B. +If you ask for layer A, then Galleon will automatically provide B as well. In some cases A’s dependency on B can be optional; that +is A typically comes with B, but can function without it. In this case if you ask for A by default Galleon will provide B as well, +but you can tell Galleon to exclude B.

+
+
+

Some layers are logical alternatives to other layers. If two layers are alternatives to each other they both provide the same general +capabilities, but with different implementation characteristics. For example a number of layers provide the capability to cache different +types of objects. These layers typically come in pairs of alternatives, where one alternative provides local caching, while the other provides +distributed caching. If a layer you want has an optional dependency on a layer that has an alternative, you can exclude that dependency +and instead specify the alternative. If a layer has an alternative the Description column in the tables below will identify it.

+
+
+ + + + + +
+ + +
+

If the elytron layer is present, security will be handled by the elytron subsystem. +The undertow and ejb subsystems are configured with an other application-security-domain that references the Elytron ApplicationDomain security domain.

+
+
+
+
+
Foundational Galleon layers
+
+

A single Galleon layer can provide a relatively small set of capabilities, but most users will want to start with a broader set +of capabilities without having to spell out all the details. To help with this WildFly provides a few foundational layers +all of which provide typical core WildFly capabilities like the logging subsystem and a secure remote management interface.

+
+
+

You don’t have to base your WildFly installation on one of these foundational layers, but doing so may be more convenient.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionDependencies

datasources-web-server

A servlet container with support for datasources.

core-server
+core-tools (optional)
+datasources (optional)
+elytron
+web-server

jaxrs-server

An extension of datasources-web-server with support for Jakarta RESTful Web Services, CDI and JPA.

bean-validation (optional)
+cdi (optional)
+datasources-web-server
+jaxrs (optional)
+jpa (optional)
+microprofile-rest-client (optional)

cloud-server

An extension of jaxrs-server to address common cloud requirements.

ee-security (optional)
+jaxrs-server
+jms-activemq (optional)
+observability (optional)
+resource-adapters (optional)

core-server

A typical manageable server core. This layer could serve as a base for a more +specialized WildFly that doesn’t need the capabilities provided by the other foundational layers.

core-management (optional)
+jmx-remoting (optional)
+logging (optional)
+management (optional)
+request-controller (optional)
+security-manager (optional)

ee-core-profile-server

A Jakarta EE Core Profile server.

core-server
+cdi
+ee-integration
+elytron
+jaxrs-core
+jsonp
+jsonb

+
+
+
Basic Galleon Layers
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

Dependencies

base-server

Empty runnable server.

git-history (optional)

batch-jberet

Support for Jakarta Batch.

cdi
+ee
+elytron
+transactions

bean-validation

Support for Jakarta Bean Validation.

base-server
+cdi (optional)

cdi

Support for Jakarta Contexts and Dependency Injection.

base-server
+bean-validation (optional)

cloud-profile

An aggregation of some basic layers to address cloud use cases.

bean-validation (optional)
+cdi (optional)
+ee-security (optional)
+jaxrs (optional)
+jms-activemq (optional)
+jpa (optional)
+observability (optional)
+resource-adapters (optional)
+web-server

core-management

Support for server management services.

base-server

core-tools

Support for jboss-cli, add-user and elytron-tool launch scripts and configuration files.

management (optional)

datasources

Support for datasources.

transactions

deployment-scanner

Support for deployment directory scanning.

base-server

discovery

Support for discovery.

base-server

ee

Support for common functionality in the Jakarta EE platform and for Jakarta Concurrency.

ee-concurrency (optional)
+ee-integration

ee-concurrency

Support for Jakarta Concurrency.

naming

ee-integration

Support for common functionality in the Jakarta EE platform.

jsonb (optional)
+naming

ee-security

Support for EE Security.

cdi
+elytron

ejb-http-invoker

Support for invoking Jakarta Enterprise Beans over HTTP.

ejb-lite
+elytron
+undertow

ejb

Support for Jakarta Enterprise Beans, excluding the IIOP protocol.

ejb-lite
+messaging-activemq
+remoting
+resource-adapters
+undertow

ejb-dist-cache

Infinispan-based distributed cache for stateful session beans.
+Alternative: ejb-local-cache

transactions

ejb-lite

Support for Jakarta Enterprise Beans Lite.

ejb-local-cache (optional)
+naming
+transactions

ejb-local-cache

Infinispan-based local cache for stateful session beans.
+Alternative: ejb-dist-cache

transactions

elytron

Support for Elytron security.

base-server

embedded-activemq

Support for an embedded Apache Activemq Artemis Jakarta Messaging broker.
+Alternative: remote-activemq

cdi
+ee
+elytron
+naming
+remoting
+messaging-activemq
+undertow

git-history

Support for using git for configuration management.

hibernate-search

Support for Hibernate Search. The jpa dependency can be excluded and jpa-distributed used instead.

jpa (optional)

h2-datasource

Support for an H2 datasource

h2-driver

h2-default-datasource

Support for an H2 datasource set as the ee subsystem default datasource.

h2-datasource

h2-driver

Support for the H2 JDBC driver.

base-server

iiop-openjdk

Support for IIOP

naming

io

Support for XNIO workers and buffer pools.

base-server

jaxrs-core

Support for Jakarta RESTful Web Services.

ee-integration
+servlet

jaxrs

Support for Jakarta RESTful Web Services with optional ee-concurrency and deployment scanner layers.

deployment-scanner (optional)
+ee-concurrency (optional)
+jaxrs-core

jdr

Support for the JBoss Diagnostic Reporting (JDR) subsystem.

base-server
+management (optional)

jms-activemq

Deprecated - use messaging-activemq.

messaging-activemq

jmx

Support for registration of Management Model MBeans.

base-server

jmx-remoting

Support for a JMX remoting connector.

jmx
+management

jpa

Support for JPA (using the latest WildFly supported Hibernate release).
+Alternative: jpa-distributed

bean-validation (optional)
+datasources

jpa-distributed

Support for JPA with a distributed second level cache.
+Alternative: jpa

bean-validation (optional)
+datasources

jsf

Support for Jakarta Faces.

bean-validation (optional)
+cdi
+web-server

jsonb

Support for JSON Binding (Jakarta JSON Binding) provisioning the Jakarta JSON Binding API and Implementation modules.

base-server

jsonp

Support for JSON Processing (Jakarta JSON Processing) provisioning the Jakarta JSON Processing API and Implementation modules.

base-server

logging

Support for the logging subsystem.

base-server

mail

Support for Jakarta Mail.

base-server
+naming

management

Support for remote access to management interfaces secured using Elytron.

elytron

messaging-activemq

Support for connections to a remote Jakarta Messaging broker.

resource-adapters

micrometer

Support for Micrometer

cdi

microprofile-config

Support for MicroProfile Config.

cdi

microprofile-fault-tolerance

Support for MicroProfile Fault Tolerance.

cdi
+microprofile-config

microprofile-health

Support for MicroProfile Health.

management
+microprofile-config

microprofile-jwt

Support for MicroProfile JWT.

ee-security
+microprofile-config

microprofile-openapi

Support for MicroProfile OpenAPI.

jaxrs
+microprofile-config

microprofile-platform

Support for available MicroProfile platform specifications.

microprofile-config (optional)
+microprofile-fault-tolerance (optional)
+microprofile-health (optional)
+microprofile-jwt (optional)
+microprofile-openapi (optional)
+microprofile-rest-client (optional)

microprofile-rest-client

Support for MicroProfile REST client.

microprofile-config

microprofile-reactive-messaging

Support for MicroProfile Reactive Messaging

cdi
+reactive-streams-operators

microprofile-reactive-messaging-kafka

Support for MicroProfile Reactive Messaging Kafka connector

reactive-messaging

microprofile-reactive-streams-operators

Support for MicroProfile Reactive Streams Operators

cdi

microprofile-lra-coordinator

Support for MicroProfile LRA Coordinator

cdi
+jaxrs
+transactions

microprofile-lra-participant

Support for MicroProfile LRA Participant

cdi
+jaxrs

microprofile-telemetry

Support for MicroProfile Telemetry

cdi
+microprofile-config
+opentelemetry

mod_cluster

Support for mod_cluster subsystem.

web-server

naming

Support for JNDI.

base-server

observability

Support for MicroProfile monitoring features.

microprofile-config (optional)
+microprofile-health (optional)

opentelemetry

Support for OpenTelemetry

cdi

pojo

Support for legacy JBoss Microcontainer applications.

base-server

remote-activemq

Support for connections to a remote Apache Activemq Artemis Jakarta Messaging broker.
+Alternative: embedded-activemq

messaging-activemq

remoting

Support for inbound and outbound JBoss Remoting connections, secured using Elytron.

elytron
+io

request-controller

Support for request management

base-server

resource-adapters

Support for deployment of Jakarta Connectors resource adapters.

transactions

sar

Support for SAR archives to deploy MBeans.

base-server
+jmx

security-manager

Support for applying security manager permissions to applications.

base-server

servlet

A servlet container.

ee-integration
+naming
+undertow

transactions

Support for transactions.

ee
+elytron

undertow

Support for the Undertow HTTP server. Provides servlet support but does not provide typical EE integration like resource injection. +Use web-server for a servlet container with EE integration.

base-server
+io

undertow-https

Support for the Undertow HTTPS server secured using the applicationSSC SSLContext.

elytron
+undertow

undertow-load-balancer

Support for Undertow configured as a load balancer.

base-server
+io

web-clustering

Support for distributable web applications. Configures a non-local Infinispan-based container web cache for data session handling suitable to clustering environments.

transactions
+web-server

web-console

Support for loading the HAL web console from the /console context on the HTTP +management interface. Not required to use a HAL console obtained independently +and configured to connect to the server.

management

web-passivation

Support for distributable web applications. Configures a local Infinispan-based container web cache for data session handling suitable to single node environments.

transactions
+web-server

web-server

A servlet container.

deployment-scanner (optional)
+ee
+ee-concurrency (optional)
+naming
+servlet

webservices

Support for Jakarta XML Web Services

ejb-lite (optional)
+messaging-activemq (optional)
+web-server

+
+ + + + + +
+ + +References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. + References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+

1.5.2. Galleon CLI recipes

+
+

Using the Galleon CLI tool, you can provision WildFly installations based on a set of layers.

+
+
+ + + + + +
+ + +
+

In order to exclude an optional layer prefix its name with '-', for example: '-jpa' to exclude the jpa layer.

+
+
+
+
+
Installation of a cloud-server
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cloud-server
+
+
+
+
+
Installation of a cloud-server with support for https
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cloud-server,undertow-https
+
+
+
+
+
Installation of a cloud-server and Jakarta Enterprise Beans with ejb-dist-cache as an alternative to ejb-local-cache
+
+

This is done by excluding the ejb layer’s optional ejb-local-cache dependency and specifying its ejb-dist-cache +alternative:

+
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=cloud-server,ejb,-ejb-local-cache,ejb-dist-cache
+
+
+
+
+
Installation of a jaxrs-server with jpa-distributed as an alternative to jpa
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=jaxrs-server,-jpa,jpa-distributed
+
+
+
+
+
Installation of jaxrs, cdi, elytron and logging
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=jaxrs,cdi,elytron,logging
+
+
+
+
+
Installation of a servlet container with main core functionalities
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=web-server,core-server
+
+
+
+
+
Installation of a servlet container with support for https
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=web-server,undertow-https
+
+
+
+
+
Installation of a core server
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --layers=core-server
+
+
+
+ + + + + +
+ + +References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted. +
+
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Getting_Started_Developing_Applications_Guide.html b/latest/Getting_Started_Developing_Applications_Guide.html new file mode 100644 index 000000000..432ab53d5 --- /dev/null +++ b/latest/Getting_Started_Developing_Applications_Guide.html @@ -0,0 +1,4176 @@ + + + + + + + + +Getting Started Developing Applications Guide + + + + + + +
+
+
+
+

© 2017 The original authors.

+
+ + +
+
+
+

1. Introduction

+
+
+

This guide will walk you through installing and starting up JBoss WildFly. It will then introduce key features of the Jakarta EE (Web Profile) programming model, of which JBoss WildFly is a certified implementation.

+
+
+ + + + + +
+ + +
Jakarta EE
+
+

The Jakarta EE platform offers developers the ability to write +distributed, transactional and portable applications quickly and easily. +We class applications that require these capabilities "enterprise +applications". These applications must be fast, secure and reliable.

+
+
+

Jakarta EE has always offered strong messaging (JMS), transactional (JTA) +and resource (JCA) capabilities as well as exposing web services via +SOAP (JAX-WS).

+
+
+
+
+

JBoss WildFly depart from the familiar structure of previous JBoss AS versions, so we recommend all developers follow the steps in Getting Started with JBoss WildFly to install and start up the application server for the first time.

+
+
+

JBoss WildFly come with a series of quickstarts aimed to get you up to writing applications with minimal fuss. We recommend to start by working through the quickstarts in this guide, in the order they are presented. If you have previous experience with Jakarta EE 6, you may wish to skip some or all of the quickstarts.

+
+
+

Core

+
+
+
    +
  1. +

    Helloworld Quickstart. If you have previously developed applications using technologies such as JSF or Wicket, and EJB or Spring, you may wish to skip this quickstart.

    +
  2. +
  3. +

    Numberguess Quickstart. If you have previously developed applications using technologies such as JSF or Wicket, EJB or Spring, and JPA or Hibernate you may wish to skip this quickstart.

    +
  4. +
  5. +

    Greeter Quickstart. If you are a Jakarta EE wizard you may wish to skip this quickstart.

    +
  6. +
  7. +

    Kitchensink Quickstart. A great starting point for your project.

    +
  8. +
+
+
+

1.1. Downloading the quickstarts

+
+

The quickstarts are are available for download from JBoss Developer Framework. Make sure you download the latest zip!

+
+
+
+
+
+

2. Getting started with WildFly

+
+
+

To run the quickstarts with the provided build scripts, you’ll need:

+
+
+ + + + + +
+ + +
+

If you already have any of these pieces of software, there is no need to +install them again!

+
+
+
+
+
+
Java 8, to run WildFly and Maven
+
+

Choose your Java runtime, and follow their installation instructions. For example, you could choose one of:

+
+ +
+
+
Maven 3, to build and deploy the quickstarts
+
+

Follow the official Maven installation guide if you don’t already have Maven 3 installed. You can check which version of Maven you have installed (if any) by running mvn --version . If you see a version newer than 3.0.0, you are ready to go.

+
+
The JBoss WildFly runtime
+
+

Download JBoss WildFly from the WildFly download page

+
+
The WildFly quickstarts
+
+

Available from WildFly Quickstarts

+
+
+
+
+

If you wish to use the examples from an IDE, we recommend using CodeReady Studio, or Eclipse with JBoss Tools.

+
+
+
+
Red Hat CodeReady Studio
+
+

Download CodeReady Studio from https://developers.redhat.com/products/codeready-studio/download.

+
+
Eclipse, with JBoss Tools
+
+

Download JBoss Tools from http://jboss.org/tools. Make sure you install m2eclipse as well.

+
+
+
+
+ + + + + +
+ + +
+

JBoss WildFly offer the +ability to manage multiple AS instances from a single control point. +A collection of such servers are referred to as members of a "domain", +with a single Domain Controller process acting as the management control +point. Domains can span multiple physical (or virtual) machines, with +all AS instances on a given host under the control of a Host Controller +process. The Host Controllers interact with the Domain Controller to +control the lifecycle of the AS instances running on that host and to +assist the Domain Controller in managing them.

+
+
+

JBoss WildFly also offers a standalone mode, which is perfect for a single +server. We use this throughout the quickstarts.

+
+
+
+
+

2.1. Installing and starting the JBoss server on Linux, Unix or Mac OS X

+
+

First, let’s verify that both Java and Maven are correctly +installed. In a console, type:

+
+
+
+
java -version
+
+
+
+

You should see a version string (at least 1.8.0) printed. If not, contact your provider of Java for assistance. Next, type:

+
+
+
+
mvn --version
+
+
+
+

You should see a version string (at least 3.3.0) printed. If not, contact the Maven community for assistance.

+
+
+

Next, we need to choose a location for WildFly to live. By default, WildFly will be extracted into wildfly-11.x.x.x (where 11.x.x.x matches the version you downloaded):

+
+
+
+
unzip wildfly-11.x.x.x.zip
+
+
+
+

Now, let’s start WildFly in standalone mode:

+
+
+
+
wildfly-11.x.x.x/bin/standalone.sh
+
+
+
+ + + + + +
+ + +
+

If you want to stop WildFly, simply press Crtl-C whilst the terminal +has focus.

+
+
+
+
+

That’s it, WildFly is installed and running! Visit http://localhost:8080/ to check the server has started properly.

+
+
+ + + + + +
+ + +
+

You can find the server log for standalone instances in +wildfly-11.x.x.x/standalone/log/server.log. The +Administration and Configuration Guide for JBoss Enterprise Application Platform 7 or the +Getting Started Guide for JBoss WildFly +covers more on configuring logging.

+
+
+
+
+
+

2.2. Installing and starting the JBoss server on Windows

+
+

First, let’s verify that both Java and Maven are correctly installed. In a Command Prompt, type:

+
+
+
+
java -version
+
+
+
+

You should see a version string (at least 1.8.0) printed. If not, contact your provider of Java for assistance. Next, type:

+
+
+
+
mvn --version
+
+
+
+

You should see a version string (at least 3.3.0) printed. If not, contact the Maven community for assistance.

+
+
+

Next, we need to choose a location for JBoss WildFly to live. By default, JBoss WildFly will be extracted into wildfly-11.x.x.x (where 11.x.x.x matches the version you downloaded). Unzip JBoss Enterprise Application Platform or JBoss WildFly using your tool of choice.

+
+
+

Finally, let’s start JBoss WildFly in standalone mode. Locate your installation and run standalone.bat located in bin.

+
+
+ + + + + +
+ + +
+

If you want to stop the server, simply press Crtl-C whilst the terminal +has focus.

+
+
+
+
+

That’s it, JBoss WildFly is installed and running! Visit http://localhost:8080/ to check the server has started properly.

+
+
+ + + + + +
+ + +
+

You can find the server log for standalone instances in +wildfly-11.x.x.x/standalone/log/server.log. The +Administration and Configuration Guide for JBoss Enterprise Application Platform 7 or the +Getting Started Guide for JBoss WildFly +covers more on configuring logging.

+
+
+
+
+
+

2.3. Starting the JBoss server from CodeReady Studio or Eclipse with JBoss Tools

+
+

You may choose to use CodeReady Studio, or Eclipse with JBoss Tools, rather than the command line to run JBoss WildFly, and to deploy the quickstarts. If you don’t wish to use Eclipse, you should skip this section.

+
+
+

Make sure you have installed and started CodeReady Studio or Eclipse. First, we need to add our WildFly instance to it. First, navigate to Preferences:

+
+
+

Eclipse Detect Servers 1

+
+
+

Now, locate the JBoss Tools Runtime Detection preferences:

+
+
+

Eclipse Detect Servers 2

+
+
+

Click Add and locate where you put servers on your disk:

+
+
+

Eclipse Detect Servers 3

+
+
+

Any available servers will be located, now all you need to do is click OK, and then OK on the preferences dialog:

+
+
+

Eclipse Detect Servers 4

+
+
+

Now, let’s start the server from Eclipse. If you previously started a server from the command line, you should stop it there first.

+
+
+

First, we need to make sure the Server tab is on view. Open the Window → Show View → Other…​ dialog:

+
+
+

Eclipse Server Tab 1

+
+
+

And select the Server view:

+
+
+

Eclipse Server Tab 2

+
+
+

You should see the Server View appear with the detected servers:

+
+
+

Eclipse Server Tab 3

+
+
+

Now, we can start the server. Right click on the server in the Server view, and select Start :

+
+
+

Eclipse Server Start 1

+
+
+ + + + + +
+ + +
+

If you want to debug your application, you can simply select Debug +rather than Start . This will start the server in debug mode, and +automatically attach the Eclipse debugger.

+
+
+
+
+

You’ll see the server output in the Console :

+
+
+

Eclipse Server Start 2

+
+
+

That’s it, we now have the server up and running in Eclipse!

+
+
+
+

2.4. Importing the quickstarts into Eclipse

+
+

In order to import the quickstarts into Eclipse, you will need m2eclipse installed. If you have CodeReady Studio, then m2eclipse is already installed.

+
+
+

First, choose File → Import…​:

+
+
+

Import Quickstarts 1

+
+
+

Select Existing Maven Projects:

+
+
+

Import Quickstarts 2

+
+
+

Click on Browse, and navigate to the quickstarts/ directory:

+
+
+

Import Quickstarts 3

+
+
+

Finally, make sure all 4 quickstarts are found and selected, and click Finish:

+
+
+

Import Quickstarts 4

+
+
+

Eclipse should now successfully import 4 projects:

+
+
+

Import Quickstarts 5

+
+
+

It will take a short time to import the projects, as Maven needs to download the project’s dependencies from remote repositories.

+
+
+
+

2.5. Managing JBoss WildFly

+
+

Here we will quickly outline how you can access both the command line interface and the web management interface for managing JBoss WildFly. Detailed information for both can be found in the Administration and Configuration Guide for JBoss Enterprise Application Platform 6 or the Admin Guide for JBoss WildFly.

+
+
+

When the server is running, the web management interface can be accessed at http://localhost:9990/console. You can use the web management interface to create datasources, manage deployments and configure the server.

+
+
+

JBoss WildFly also comes with a command line interface. To run it on Linux, Unix or Mac, execute:

+
+
+
+
wildfly-11.x.x.x/bin/jboss-admin.sh --connect
+
+
+
+

Or, on Windows:

+
+
+
+
wildfly-11.x.x.x/bin/jboss-admin.bat --connect
+
+
+
+

Once started, type help to discover the commands available to you.

+
+
+

Throughout this guide we use the wildfly maven plugin to deploy and undeploy applications. This plugin uses the Native Java Detyped Management API to communicate with the server. The Detyped API is used by management tools to control an entire domain of servers, and exposes only a small number of types, allowing for backwards and forwards compatibility.

+
+
+
+
+
+

3. CDI + Servlet: Helloworld quickstart

+
+
+

This quickstart shows you how to deploy a simple servlet to JBoss WildFly. The business logic is encapsulated in a service, which is provided as a CDI bean, and injected into the Servlet.

+
+
+ + + + + +
+ + +
Contexts and Dependency Injection for Jakarta EE
+
+

CDI is a specification in Jakarta EE, inspired by JBoss Seam and +Google Guice, and also drawing on lessons learned from frameworks such +as Spring. It allows application developers to concentrate on developing +their application logic by providing the ability to wire services +together, and abstract out orthogonal concerns, all in a type safe +manner.

+
+
+
+
+

Switch to the quickstarts/helloworld directory and instruct Maven to build and deploy the application:

+
+
+
+
mvn package wildfly:deploy
+
+
+
+

The quickstart uses a Maven plugin to deploy the application. The plugin requires JBoss WildFly to be running (you can find out how to start the server in Installing and starting the JBoss server on Linux, Unix or Mac OS X or Installing and starting the JBoss server on Windows).

+
+
+

Now, check if the application has deployed properly by clicking http://localhost:8080/wildfly-helloworld/HelloWorld. If you see a "Hello World" message it’s all working!

+
+
+ + + + + +
+ + +
+

Should you wish to undeploy the quickstart, or redeploy after making +some changes, it’s pretty easy:

+
+
+
    +
  • +

    mvn wildfly:deploy - deploy any changes to the application to the +application server

    +
  • +
  • +

    mvn wildfly:undeploy - undeploy the quickstart

    +
  • +
+
+
+
+
+

It’s time to pull the covers back and dive into the internals of the quickstart.

+
+
+

Deploying the Helloworld quickstart using CodeReady Studio, or Eclipse with JBoss Tools

+
+
+
+
You may choose to deploy the quickstart using CodeReady Studio, or Eclipse with JBoss Tools. You'll need to have JBoss WildFly started in the IDE (as described  in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and to have imported the quickstarts into Eclipse (as described in <<GettingStarted-importing_quickstarts_into_eclipse,Importing the quickstarts into Eclipse>>).
+
+With the quickstarts imported, you can deploy the quickstart by right clicking on the `wildfly-helloworld` project, and choosing _Run As -> Run On Server_:
+
+image:gfx/Eclipse_Helloworld_Deploy_1.jpg[]
+
+Make sure the correct server is selected, and hit Finish:
+
+image:gfx/Eclipse_Deploy_2.jpg[]
+
+You should see the server start up (unless you already started it in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and the application deploy in the Console log
+
+image:gfx/Eclipse_Helloworld_Deploy_3.jpg[]
+
+
+The helloworld quickstart in depth
+----------------------------------
+
+The quickstart is very simple - all it does is print "Hello World" onto a web page.
+
+The helloworld quickstart is comprised of a servlet and a CDI bean. We also include an empty `beans.xml` file, which tells JBoss WildFly to look for beans in this application and to activate the CDI. `beans.xml` is located in `WEB-INF/`, which can be found in the `src/main/webapp` directory. Also in this directory we include `index.html` which uses a simple meta refresh to send the users browser to the Servlet, which is located at http://localhost:8080/wildfly-helloworld/HelloWorld.
+
+All the configuration files for this quickstart are located in `WEB-INF/`, which can be found in the `src/main/webapp` directory.
+
+Notice that we don't even need a `web.xml`!
+
+Let's start by taking a look at the servlet:
+
+.src/main/java/org/jboss/as/quickstarts/helloworld/HelloWorldServlet.java
+[source,java]
+------------------------------------------------------------------------
+@SuppressWarnings("serial")
+@WebServlet("/HelloWorld")                                           (1)
+public class HelloWorldServlet extends HttpServlet {
+
+   static String PAGE_HEADER =
+       "<html><head><title>helloworld</title></head><body>";                (2)
+
+   static String PAGE_FOOTER = "</body></html>";
+
+   @Inject
+   HelloService helloService;                                        (3)
+
+   @Override
+   protected void doGet(HttpServletRequest req,
+                        HttpServletResponse resp)
+                        throws ServletException, IOException {
+      resp.setContentType("text/html");
+      PrintWriter writer = resp.getWriter();
+      writer.println(PAGE_HEADER);
+      writer.println("<h1>" +
+                     helloService.createHelloMessage("World") +      (4)
+                     "</h1>");
+      writer.println(PAGE_FOOTER);
+      writer.close();
+   }
+
+}
+------------------------------------------------------------------------
+<1> If you've used Servlet before, then you'll remember having to use xml to register your servlets. Fortunately, this is a thing of the past. Now all you need to do is add the @WebServlet annotation, and provide a mapping to a URL used to access the servlet. Much cleaner!
+<2> Every web page needs to be correctly formed HTML. We've created static Strings to hold the minimum header and footer to write out.
+<3> We inject the HelloService (a CDI bean) which generates the actual message. This allows to alter the implementation of HelloService at a later date without changing the view layer at all (assuming we don't alter the API of HelloService ).
+<4> We call into the service to generate the message "Hello World", and write it out to the HTTP request.
+
+[TIP]
+========================================================================
+The package declaration and imports have been excluded from these
+listings. The complete listing is available in the quickstart source.
+========================================================================
+
+Now we understand how the information is sent to the browser, let's take a look at the service.
+
+.src/main/java/org/jboss/as/quickstarts/helloworld/HelloService.java
+------------------------------------------------------------------------
+public class HelloService {
+
+   String createHelloMessage(String name) {
+      return "Hello " + name + "!";
+   }
+
+}
+------------------------------------------------------------------------
+
+The service is very simple - no registration (XML or annotation) is required!
+
+
+CDI + JSF: Numberguess quickstart
+=================================
+:Author: Pete Muir
+
+[[NumberguessQuickstart-]]
+
+This quickstart shows you how to create and deploy a simple application to JBoss WildFly; the application does not persist any information. Information is displayed using a JSF view, and business logic is encapsulated in two CDI beans.
+
+Switch to the `quickstarts/numberguess` directory and instruct Maven to build and deploy the application:
+
+    mvn package wildfly:deploy
+
+The quickstart uses a Maven plugin to deploy the application. The plugin requires JBoss WildFly to be running (you can find out how to start the server in <<GettingStarted-on_linux, Installing and starting the JBoss server on Linux, Unix or Mac OS X>> or <<GettingStarted-on_windows, Installing and starting the JBoss server on Windows>>).
+
+Or you can start the server using an IDE, like CodeReady Studio.
+
+Now, see if you can determine the most efficient approach to pinpoint the random number at the URL http://localhost:8080/wildfly-numberguess.
+
+[TIP]
+========================================================================
+Should you wish to undeploy the quickstart, or redeploy after making
+some changes, it's pretty easy:
+
+* `mvn wildfly:deploy` - deploy any changes to the application to the
+  application server
+* `mvn wildfly:undeploy` - undeploy the quickstart
+========================================================================
+
+It's time to pull the covers back and dive into the internals of the quickstart.
+
+
+Deploying the Numberguess quickstart using Eclipse
+--------------------------------------------------
+
+You may choose to deploy the quickstart using Eclipse. You'll need to have JBoss WildFly started in Eclipse as described  in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and to have imported the quickstarts into Eclipse (as described in <<GettingStarted-importing_quickstarts_into_eclipse, Importing the quickstarts into Eclipse>>).
+
+With the quickstarts imported, you can deploy the quickstart by right clicking on the `wildfly-numberguess` project, and choosing _Run As -> Run On Server_:
+
+image:gfx/Eclipse_Numberguess_Deploy_1.jpg[]
+
+Make sure the correct server is selected, and hit Finish:
+
+image:gfx/Eclipse_Deploy_2.jpg[]
+
+You should see the server start up (unless you already started it in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and the application deploy in the Console log:
+
+image:gfx/Eclipse_Numberguess_Deploy_3.jpg[]
+
+
+The numberguess quickstart in depth
+-----------------------------------
+
+In the numberguess application you get 10 attempts to guess a number between 1 and 100. After each attempt, you're told whether your guess was too high or too low.
+
+The quickstart is comprised of a number of beans, configuration files and Facelets (JSF) views, packaged as a war module. Let's start by examining the configuration files.
+
+All the configuration files for this quickstart are located in `WEB-INF/`, which can be found in the `src/main/webapp` directory. First, we have the JSF 2.0 version of `faces-config.xml`. A standardized version of Facelets is the default view handler in JSF 2.0, so there's really nothing that we have to configure. WildFly goes above and beyond Jakarta EE here, and will automatically configure JSF for you if you include this file. Thus, the configuration consists of only the root element.
+
+.src/main/webapp/WEB-INF/faces-config.xml
+[source,xml]
+------------------------------------------------------------------------
+<faces-config version="2.0"
+   xmlns="http://java.sun.com/xml/ns/javaee"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="
+      http://java.sun.com/xml/ns/javaee
+      http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
+
+</faces-config>
+------------------------------------------------------------------------
+
+There's also an empty `beans.xml` file, which tells WildFly to look for beans in this  application and to activate the CDI.
+
+Notice that we don't even need a `web.xml`!
+
+Let's take a look at the main JSF view, `src/main/webapp/home.xhtml`.
+
+
+[TIP]
+========================================================================
+JSF uses the .xhtml extension for source files, but serves up the
+rendered views with the .jsf extension.
+========================================================================
+
+.src/main/webapp/WEB-INF/home.xhtml
+[source,html]
+------------------------------------------------------------------------
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+   xmlns:ui="http://java.sun.com/jsf/facelets"
+   xmlns:h="http://java.sun.com/jsf/html"
+   xmlns:f="http://java.sun.com/jsf/core">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html;
+    charset=iso-8859-1" />
+<title>numberguess</title>
+</head>
+
+<body>
+   <div id="content">
+      <h1>Guess a number...</h1>
+      <h:form id="numberGuess">
+
+         <!-- Feedback for the user on their guess -->
+         <div style="color: red">                                    (1)
+            <h:messages id="messages" globalOnly="false" />
+            <h:outputText id="Higher" value="Higher!"
+               rendered="#{game.number gt game.guess and game.guess ne 0}" />
+            <h:outputText id="Lower" value="Lower!"
+               rendered="#{game.number lt game.guess and game.guess ne 0}" />
+         </div>
+
+         <!-- Instructions for the user -->
+         <div>                                                       (2)
+            I'm thinking of a number between <span
+               id="numberGuess:smallest">#{game.smallest}</span> and <span
+               id="numberGuess:biggest">#{game.biggest}</span>. You have
+            #{game.remainingGuesses} guesses remaining.
+         </div>
+
+         <!-- Input box for the users guess, plus a button to submit, and reset -->
+         <!-- These are bound using EL to our CDI beans -->
+         <div>
+            Your guess:                                              (3)
+            <h:inputText id="inputGuess" value="#{game.guess}"
+               required="true" size="3"
+               disabled="#{game.number eq game.guess}"
+               validator="#{game.validateNumberRange}" />            (4)
+            <h:commandButton id="guessButton" value="Guess"
+               action="#{game.check}"
+               disabled="#{game.number eq game.guess}" />
+         </div>
+         <div>                                                       (5)
+            <h:commandButton id="restartButton" value="Reset"
+               action="#{game.reset}" immediate="true" />
+         </div>
+      </h:form>
+
+   </div>
+
+   <br style="clear: both" />
+
+</body>
+</html>
+------------------------------------------------------------------------
+
+<1> There are a number of messages which can be sent to the user, "Higher!" and "Lower!"
+<2> As the user guesses, the range of numbers they can guess gets smaller - this sentence changes to make sure they know the number range of a valid guess.
+<3> This input field is bound to a bean property using a value expression.
+<4> A validator binding is used to make sure the user doesn't accidentally input a number outside of the range in which they can guess - if the validator wasn't here, the user might use up a guess on an out of bounds number.
+<5> There must be a way for the user to send their guess to the server. Here we bind to an action method on the bean.
+
+The quickstart consists of 4 classes, the first two of which are qualifiers.  First, there is the `@Random` qualifier, used for injecting a random number:
+
+[TIP]
+========================================================================
+A _qualifier_ is used to disambiguate between two beans both of which
+are eligible for injection based on their type. For more, see the
+link:http://docs.jboss.org/weld/reference/latest/en-US/html/[Weld Reference Guide].
+========================================================================
+
+.src/main/java/org/jboss/as/quickstarts/numberguess/Random.java
+[source,java]
+------------------------------------------------------------------------
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RUNTIME)
+@Documented
+@Qualifier
+public @interface Random {
+
+}
+------------------------------------------------------------------------
+
+There is also the `@MaxNumber` qualifier, used for injecting the maximum number that can be injected:
+
+.src/main/java/org/jboss/as/quickstarts/numberguess/MaxNumber.java
+[source,java]
+------------------------------------------------------------------------
+@Retention(RUNTIME)
+@Documented
+@Qualifier
+public @interface MaxNumber {
+
+}
+------------------------------------------------------------------------
+
+The application-scoped `Generator` class is responsible for creating the random number, via a producer method. It also exposes the maximum possible number via a producer method:
+
+.src/main/java/org/jboss/as/quickstarts/numberguess/Generator.java
+[source,java]
+------------------------------------------------------------------------
+@SuppressWarnings("serial")
+@ApplicationScoped
+public class Generator implements Serializable {
+
+   private java.util.Random random = new java.util.Random(System.currentTimeMillis());
+
+   private int maxNumber = 100;
+
+   java.util.Random getRandom() {
+      return random;
+   }
+
+   @Produces
+   @Random
+   int next() {
+      // a number between 1 and 100
+      return getRandom().nextInt(maxNumber - 1) + 1;
+   }
+
+   @Produces
+   @MaxNumber
+   int getMaxNumber() {
+      return maxNumber;
+   }
+}
+------------------------------------------------------------------------
+
+The `Generator` is application scoped, so we don't get a different random each time.
+
+The final bean in the application is the session-scoped `Game` class. This is the primary entry point of the application. It's responsible for setting up or resetting the game, capturing and validating the user's guess and providing feedback to the user with a `FacesMessage`. We've used the post-construct lifecycle method to initialize the game by retrieving a random number from the `@RandomInstance<Integer>` bean.
+
+You'll notice that we've also added the `@Named` annotation to this class. This annotation is only required when you want to make the bean accessible to a JSF view via EL (i.e. `#{game}`)
+
+.src/main/java/org/jboss/as/quickstarts/numberguess/Game.java
+[source,java]
+------------------------------------------------------------------------
+@SuppressWarnings("serial")
+@Named
+@SessionScoped
+public class Game implements Serializable {
+
+   /**
+    * The number that the user needs to guess
+    */
+   private int number;
+
+   /**
+    * The users latest guess
+    */
+   private int guess;
+
+   /**
+    * The smallest number guessed so far (so we can track the valid guess range).
+    */
+   private int smallest;
+
+   /**
+    * The largest number guessed so far
+    */
+   private int biggest;
+
+   /**
+    * The number of guesses remaining
+    */
+   private int remainingGuesses;
+
+   /**
+    * The maximum number we should ask them to guess
+    */
+   @Inject
+   @MaxNumber
+   private int maxNumber;
+
+   /**
+    * The random number to guess
+    */
+   @Inject
+   @Random
+   Instance<Integer> randomNumber;
+
+   public Game() {
+   }
+
+   public int getNumber() {
+      return number;
+   }
+
+   public int getGuess() {
+      return guess;
+   }
+
+   public void setGuess(int guess) {
+      this.guess = guess;
+   }
+
+   public int getSmallest() {
+      return smallest;
+   }
+
+   public int getBiggest() {
+      return biggest;
+   }
+
+   public int getRemainingGuesses() {
+      return remainingGuesses;
+   }
+
+   /**
+    * Check whether the current guess is correct, and update the biggest/smallest guesses as needed.
+    * Give feedback to the user if they are correct.
+    */
+   public void check() {
+      if (guess > number) {
+         biggest = guess - 1;
+      } else if (guess < number) {
+         smallest = guess + 1;
+      } else if (guess == number) {
+         FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Correct!"));
+      }
+      remainingGuesses--;
+   }
+
+   /**
+    * Reset the game, by putting all values back to their defaults, and getting a new random number.
+    * We also call this method when the user starts playing for the first time using
+    * {@linkplain PostConstruct @PostConstruct} to set the initial values.
+    */
+   @PostConstruct
+   public void reset() {
+      this.smallest = 0;
+      this.guess = 0;
+      this.remainingGuesses = 10;
+      this.biggest = maxNumber;
+      this.number = randomNumber.get();
+   }
+
+   /**
+    * A JSF validation method which checks whether the guess is valid. It might not be valid because
+    * there are no guesses left, or because the guess is not in range.
+    *
+    */
+   public void validateNumberRange(FacesContext context, UIComponent toValidate, Object value) {
+      if (remainingGuesses <= 0) {
+         FacesMessage message = new FacesMessage("No guesses left!");
+         context.addMessage(toValidate.getClientId(context), message);
+         ((UIInput) toValidate).setValid(false);
+         return;
+      }
+      int input = (Integer) value;
+
+      if (input < smallest || input > biggest) {
+         ((UIInput) toValidate).setValid(false);
+
+         FacesMessage message = new FacesMessage("Invalid guess");
+         context.addMessage(toValidate.getClientId(context), message);
+      }
+   }
+}
+
+------------------------------------------------------------------------
+
+
+CDI + JPA + EJB + JTA + JSF: Greeter quickstart
+===============================================
+:Author: Pete Muir
+
+[[GreeterQuickstart-]]
+
+This quickstart shows you how to create and deploy an application which persists information to a database to JBoss WildFly. Information is displayed using JSF views, business logic is encapsulated in CDI beans, information is persisted using JPA, and transactions can be controlled manually or using EJB.
+
+Switch to the `quickstarts/greeter` directory and instruct Maven to build and deploy the application:
+
+    mvn package wildfly:deploy
+
+
+The quickstart uses a Maven plugin to deploy the application. The plugin requires JBoss WildFly to be running (you can find out how to start the server in <<GettingStarted-on_linux, Installing and starting the JBoss server on Linux, Unix or Mac OS X>> or <<GettingStarted-on_windows, Installing and starting the JBoss server on Windows>>).
+
+Or you can start the server using an IDE, like CodeReady Studio. If you are using CodeReady Studio, you can deploy the quickstart by right clicking on the `greeter` project, and choosing _Run As -> Run On Server_:
+
+image:gfx/Eclipse_Greeter_Deploy_1.png[]
+
+Make sure the server is selected, and hit Finish:
+
+image:gfx/Eclipse_Deploy_2.jpg[]
+
+You should see the server start up (unless you already started it in <<GettingStarted-with_jboss_tools,Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and the application deploy in the Console log:
+
+image:gfx/Eclipse_Greeter_Deploy_3.png[]
+
+To use the application, visit http://localhost:8080/greeter/.
+
+[[greeter_in_depth]]
+The greeter quickstart in depth
+-------------------------------
+
+In the quickstart, all users are stored in an H2 database (an in-memory, embedded database provided out of the box in JBoss WildFly). Each user is stored as an entity, and entities are mapped to the database using JPA. By default, transactions are managed manually, using the JTA API. Optionally, you can use EJB to manage transactions (we'll look at how to enable that later). We need a transaction in progress in order to read and write any entities.
+
+The quickstart is comprised of two JSF views, an entity, and a number of CDI beans. Additionally, there are the usual configuration files in `WEB-INF/` (which can be found in the `src/main/webapp` directory). Here we find `beans.xml` and `faces-config.xml` which tell JBoss WildFly to enable CDI and JSF for the application. Notice that we don't need a `web.xml`. There are two new configuration files in `WEB-INF/classes/META-INF` (which can be found in the `src/main/resources` directory of the quickstart) — `persistence.xml`, which sets up JPA, and `import.sql` which Hibernate, the JPA provider in  JBoss WildFly, will use to load the initial users into the application when the application starts.
+
+`persistence.xml` is pretty straight forward, and links JPA to a datasource:
+
+.src/main/resources/META-INF/persistence.xml
+[source, xml]
+------------------------------------------------------------------------
+<persistence version="2.0"
+    xmlns="http://java.sun.com/xml/ns/persistence"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="
+        http://java.sun.com/xml/ns/persistence
+        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
+    <persistence-unit name="primary">                                (1)
+        <!-- If you are running in a production environment, add a
+             managed  data source, this example data source is just
+             for development and testing! -->
+        <!-- The datasource is deployed as
+             WEB-INF/greeter-quickstart-ds.xml, you can find it in
+             the source at
+             src/main/webapp/WEB-INF/greeter-quickstart-ds.xml -->
+        <jta-data-source>java:jboss/datasources/GreeterQuickstartDS</jta-data-source> (2)
+        <properties>
+            <!-- Properties for Hibernate -->                        (3)
+            <property name="hibernate.hbm2ddl.auto"
+                      value="create-drop" />
+            <property name="hibernate.show_sql"
+                      value="false" />
+        </properties>
+    </persistence-unit>
+</persistence>
+------------------------------------------------------------------------
+
+<1> The persistence unit is given a name, so that the application can use multiple if needed. If only one is defined, JPA will automatically use it.
+<2> The persistence unit references a data source. Here we are using the built in, sample, data source.
+<3> JPA allows us to configure the JPA provider specific properties. Here we tell Hibernate to automatically create any needed tables when the application starts (and drop them when the application is stopped).
+
+[TIP]
+========================================================================
+JBoss WildFly ships with a
+sample datasource `java:jboss/datasources/ExampleDS`. This data source
+is backed by H2, an in-memory database. Whilst this datasource is great
+for quickstarts, you will probably want to use a different datasource in
+your application. The link:http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/6/html/Administration_and_Configuration_Guide/index.html[Administration and Configuration Guide for JBoss Enterprise Application Platform 6] or the
+link:https://docs.jboss.org/author/display/WFLY/Getting+Started+Guide[Getting Started Guide for JBoss WildFly]
+tells you how to create a new datasource.
+========================================================================
+
+Let's take a look at the JSF views. First up is `src/main/webapp/greet.xhtml`:
+
+.src/main/webapp/greet.xhtml
+[source,html]
+------------------------------------------------------------------------
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+    xmlns:ui="http://java.sun.com/jsf/facelets"
+    xmlns:h="http://java.sun.com/jsf/html"
+    xmlns:f="http://java.sun.com/jsf/core">
+
+<ui:composition template="template.xhtml">                           (1)
+    <ui:define name="content">
+        <h:messages />                                               (2)
+        <h:form id="greetForm">
+            <h:panelGrid columns="3">
+                <h:outputLabel for="username">Enter username:</h:outputLabel>
+                <h:inputText id="username"
+                    value="#{greetController.username}" />
+                <h:message for="username" />
+            </h:panelGrid>
+            <h:commandButton id="greet" value="Greet!"
+                action="#{greetController.greet}" />
+        </h:form>
+        <h:outputText value="#{greetController.greeting}"
+            rendered="#{not empty greetController.greeting}" />      (3)
+        <br />
+        <h:link outcome="/create.xhtml" value="Add a new user" />    (4)
+    </ui:define>
+</ui:composition>
+</html>
+------------------------------------------------------------------------
+
+<1> As we have multiple views in this application, we've created a template that defines the common elements. We'll examine this next. Here we define the "content" section of the page, which will be inserted into the template.
+<2> We output any messages for the user at the top of the form, e.g. when a new user is created.
+<3> The greeting message is only rendered if there is a message.
+<4> We also a link to the page which allows a user to be added.
+
+Now let's take a look at the template. It defines common elements for the page, and allows pages which use it to insert content in various places.
+
+.src/main/webapp/template.xhtml
+[source,html]
+------------------------------------------------------------------------
+<!-- The template for our app, defines some regions -->
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<title>greeter</title>
+<ui:insert name="head" />                                            (1)
+</head>
+
+<body>
+
+    <div id="container">
+        <div id="header"></div>
+
+        <div id="sidebar"></div>
+
+        <div id="content">
+            <ui:insert name="content" />                             (2)
+        </div>
+
+        <br style="clear: both" />
+    </div>
+
+</body>
+</html>
+------------------------------------------------------------------------
+
+<1> The head, defined in case a page wants to add some content to the head of the page.
+<2> The content, defined by a page using this template, will be inserted here
+
+Finally, let's take a look at the user management page. It provides a form to add users:
+
+.src/main/webapp/create.xhtml
+[source,html]
+------------------------------------------------------------------------
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+    xmlns:ui="http://java.sun.com/jsf/facelets"
+    xmlns:h="http://java.sun.com/jsf/html"
+    xmlns:f="http://java.sun.com/jsf/core">
+
+<ui:composition template="template.xhtml">
+    <ui:define name="content">
+        <h:messages />
+        <h:form>
+            <h:panelGrid columns="3">
+                <h:outputLabel for="username">Enter username:</h:outputLabel>
+                <h:inputText id="username" value="#{newUser.username}" />
+                <h:message for="username" />
+
+                <h:outputLabel for="firstName">Enter first name:</h:outputLabel>
+                <h:inputText id="firstName" value="#{newUser.firstName}" />
+                <h:message for="firstName" />
+
+                <h:outputLabel for="lastName">Enter last name:</h:outputLabel>
+                <h:inputText id="lastName" value="#{newUser.lastName}" />
+                <h:message for="lastName" />
+
+            </h:panelGrid>
+            <h:commandButton action="#{createController.create}"
+                value="Add User" />
+        </h:form>
+        <h:link outcome="/greet.xhtml">Greet a user!</h:link>
+    </ui:define>
+</ui:composition>
+</html>
+------------------------------------------------------------------------
+
+The quickstart has one entity, which is mapped via JPA to the relational database:
+
+.src/main/java/org/jboss/as/quickstarts/greeter/domain/User.java
+[source,java]
+------------------------------------------------------------------------
+@Entity                                                              (1)
+public class User {
+
+    @Id                                                              (2)
+    @GeneratedValue
+    private Long id;
+
+    @Column(unique = true)
+    private String username;
+
+    private String firstName;                                        (3)
+
+    private String lastName;
+
+    public Long getId() {                                            (4)
+        return id;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+}
+------------------------------------------------------------------------
+<1> The `@Entity` annotation used on the class tells JPA that this class should be mapped as a table in the database.
+<2> Every entity requires an id, the `@Id` annotation placed on a field (or a JavaBean mutator/accessor) tells JPA that this property is the id. You can use a synthetic id, or a natural id (as we do here).
+<3> The entity also stores the real name of the user
+<4> As this is Java, every property needs an accessor/mutator!
+
+We use a couple of controller classes to back the JSF pages. First up is `GreetController` which is responsible for getting the user's real name from persistence layer, and then constructing the message.
+
+.src/main/java/org/jboss/as/quickstarts/greeter/web/GreetController.java
+[source,java]
+------------------------------------------------------------------------
+@Named                                                               (1)
+@RequestScoped                                                       (2)
+public class GreetController {
+
+    @Inject
+    private UserDao userDao;                                         (3)
+
+    private String username;
+
+    private String greeting;
+
+    public void greet() {
+        User user = userDao.getForUsername(username);
+        if (user != null) {
+            greeting = "Hello, " +
+                       user.getFirstName() +
+                       " " +
+                       user.getLastName() +
+                       "!";
+        } else {
+            greeting =
+                "No such user exists! Use 'emuster' or 'jdoe'";
+        }
+    }
+
+    public String getUsername() {                                    (4)
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getGreeting() {
+        return greeting;
+    }
+
+}
+------------------------------------------------------------------------
+<1> The bean is given a name, so we can access it from JSF
+<2> The bean is request scoped, a different greeting can be made in each request
+<3> We inject the `UserDao`, which handles database abstraction
+<4> We need to expose JavaBean style mutators and accessors for every property the JSF page needs to access to
+
+The second controller class is responsible for adding a new user:
+
+.src/main/java/org/jboss/as/quickstarts/greeter/web/CreateController.java
+[source,java]
+------------------------------------------------------------------------
+@Named                                                               (1)
+@RequestScoped                                                       (2)
+public class CreateController {
+
+    @Inject                                                          (3)
+    private FacesContext facesContext;
+
+    @Inject                                                          (4)
+    private UserDao userDao;
+
+    @Named                                                           (5)
+    @Produces
+    @RequestScoped
+    private User newUser = new User();
+
+    public void create() {
+        try {
+            userDao.createUser(newUser);
+            String message = "A new user with id " +
+                             newUser.getId() +
+                             " has been created successfully";
+            facesContext.addMessage(null, new FacesMessage(message));
+        } catch (Exception e) {
+            String message = "An error has occured while creating" +
+                             " the user (see log for details)";
+            facesContext.addMessage(null, new FacesMessage(message));
+        }
+    }
+}
+------------------------------------------------------------------------
+<1> The bean is given a name, so we can access it from JSF
+<2> The bean is request scoped, a different user can be added in each request
+<3> We inject the `FacesContext`, to allow us to send messages to the user when the user is created, or if an error occurs
+<4> We inject the `UserDao`, which handles database abstraction
+<5> We expose a prototype user using a named producer, which allows us to access it from a JSF page
+
+Now that we have the controllers in place, let's look at the most interesting part of the application, how we interact with the database. As we mentioned earlier, by default the application uses the JTA API to manually control transactions. To implement both approaches, we've defined a `UserDao` interface, with two implementations, one of which (the EJB variant) is as an alternative which can be enabled via a deployment descriptor. If you were wondering why we "hid" the persistence logic in the `UserDao`, rather than placing it directly in the controller classes, this is why!
+
+Let's first look at the interface, and the manual transaction control variant.
+
+.src/main/java/org/jboss/as/quickstarts/greeter/domain/UserDao.java
+[source,java]
+------------------------------------------------------------------------
+public interface UserDao {
+    User getForUsername(String username);
+
+    void createUser(User user);
+}
+------------------------------------------------------------------------
+
+The methods are fairly self explanatory, so let's move on quickly to the implementation, `ManagedBeanUserDao`:
+
+.src/main/java/org/jboss/as/quickstarts/greeter/domain/ManagedBeanUserDao.java
+[source,java]
+------------------------------------------------------------------------
+public class ManagedBeanUserDao implements UserDao {
+
+    @Inject
+    private EntityManager entityManager;                             (1)
+
+    @Inject
+    private UserTransaction utx;                                     (2)
+
+    public User getForUsername(String username) {                    (3)
+        try {
+            User user;
+            try {
+                utx.begin();
+                Query query = entityManager.createQuery("select u from User u where u.username = :username");
+                query.setParameter("username", username);
+                user = (User) query.getSingleResult();
+            } catch (NoResultException e) {
+                user = null;
+            }
+            utx.commit();
+            return user;
+        } catch (Exception e) {
+            try {
+                utx.rollback();
+            } catch (SystemException se) {
+                throw new RuntimeException(se);
+            }
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void createUser(User user) {                              (4)
+        try {
+            try {
+                utx.begin();
+                entityManager.persist(user);
+            } finally {
+                utx.commit();
+            }
+        } catch (Exception e) {
+            try {
+                utx.rollback();
+            } catch (SystemException se) {
+                throw new RuntimeException(se);
+            }
+            throw new RuntimeException(e);
+        }
+    }
+}
+------------------------------------------------------------------------
+<1> We inject the entity manager. This was set up in `persistence.xml`.
+<2> We inject the `UserTransaction`, to allow us to programmatically control the transaction
+<3> The `getUserForUsername` method can check whether a user with a matching username and password exists, and return it if it does.
+<4> `createUser` persists a new user to the database.
+
+You've probably noticed two things as you've read through this. Firstly, that manually managing transactions is a real pain. Secondly, you may be wondering how the entity manager and the logger are injected. First, let's tidy up the transaction manager, and use EJB to provide us with declarative transaction support.
+
+The class `EJBUserDao` provides this, and is defined as an alternative. Alternatives are disabled by default, and when enabled replace the original implementation. In order to enable this variant of `UserDao`, edit `beans.xml` and uncomment the alternative. Your `beans.xml` should now look like:
+
+.src/main/webapp/WEB-INF/beans.xml
+[source,xml]
+------------------------------------------------------------------------
+<beans xmlns="http://java.sun.com/xml/ns/javaee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="
+        http://java.sun.com/xml/ns/javaee
+        http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
+
+        <!-- Uncomment this alternative to see EJB declarative transactions in use -->
+        <alternatives>
+            <class>org.jboss.as.quickstarts.greeter.domain.EJBUserDao</class>
+        </alternatives>
+</beans>
+------------------------------------------------------------------------
+
+Now, let's look at `EJBUserDao`:
+
+.src/main/java/org/jboss/as/quickstarts/greeter/domain/EJBUserDao.java
+[source,java]
+------------------------------------------------------------------------
+@Stateful
+@Alternative
+public class EJBUserDao implements UserDao {
+
+    @Inject
+    private EntityManager entityManager;
+
+    public User getForUsername(String username) {
+        try {
+            Query query = entityManager.createQuery("select u from User u where u.username = ?");
+            query.setParameter(1, username);
+            return (User) query.getSingleResult();
+        } catch (NoResultException e) {
+            return null;
+        }
+    }
+
+    public void createUser(User user) {
+        entityManager.persist(user);
+    }
+
+}
+------------------------------------------------------------------------
+
+Using declarative transaction management has allowed us to remove a third of the lines of code from the class, but more importantly emphasizes the functionality of the class. Much better!
+
+
+[NOTE]
+========================================================================
+Sharp eyed developers who are used to Jakarta EE will have noticed that we
+have added this EJB to a war. This is the key improvement offered in
+EJB 3.1.
+========================================================================
+
+Finally, let's take a look at the `Resources` class, which provides resources such as the entity manager. CDI recommends using "resource producers", as we do in this quickstart, to alias resources to CDI beans, allowing for a  consistent style throughout our application:
+
+.src/main/java/org/jboss/as/quickstarts/greeter/Resources.java
+[source,java]
+------------------------------------------------------------------------
+public class Resources {
+
+    // Expose an entity manager using the resource producer pattern
+    @SuppressWarnings("unused")
+    @PersistenceContext
+    @Produces
+    private EntityManager em;                                        (1)
+
+    @Produces
+    Logger getLogger(InjectionPoint ip) {                            (2)
+        String category = ip.getMember()
+                            .getDeclaringClass()
+                            .getName();
+        return Logger.getLogger(category);
+    }
+
+    @Produces
+    FacesContext getFacesContext() {                                 (3)
+        return FacesContext.getCurrentInstance();
+    }
+
+}
+------------------------------------------------------------------------
+<1> We use the "resource producer" pattern, from CDI, to "alias" the old fashioned `@PersistenceContext` injection of the entity manager to a CDI style injection. This allows us to use a consistent injection style (`@Inject`) throughout the application.
+<2> We expose a JDK logger for injection. In order to save a bit more boiler plate, we automatically set the logger category as the class name!
+<3> We expose the `FacesContext` via a producer method, which allows it to be injected. If we were adding tests, we could also then mock it out.
+
+
+That concludes our tour of the greeter application!
+
+
+CDI + JSF + EJB + JTA + Bean Validation + JAX-RS + Arquillian: Kitchensink quickstart
+=====================================================================================
+:Author: Pete Muir
+
+[[KitchensinkQuickstart-]]
+
+This quickstart shows off all the new features of Jakarta EE, and makes a great starting point for your project.
+
+[TIP]
+.Bean Validation
+========================================================================
+Bean Validation is a specification in Jakarta EE, inspired by
+Hibernate Validator. It allows application developers to specify
+constraints once (often in their domain model), and have them applied in
+all layers of the application, protecting data and giving useful
+feedback to users.
+========================================================================
+
+[TIP]
+.JAX-RS: The Java API for RESTful Web Services
+========================================================================
+JAX-RS is a specification in Jakarta EE. It allows application
+developers to easily expose Java services as RESTful web services.
+========================================================================
+
+Switch to the `quickstarts/kitchensink` directory and instruct Maven to build and deploy the application:
+
+    mvn package wildfly:deploy
+
+The quickstart uses a Maven plugin to deploy the application. The plugin requires JBoss WildFly to be running (you can find out how to start the server in <<GettingStarted-on_linux, Installing and starting the JBoss server on Linux, Unix or Mac OS X>> or <<GettingStarted-on_windows, Installing and starting the JBoss server on Windows>>).
+
+Or you can start the server using an IDE, like Eclipse.
+
+Now, check if the application has deployed properly by clicking http://localhost:8080/wildfly-kitchensink. If you see a splash page it's all working!
+
+
+[TIP]
+========================================================================
+Should you wish to undeploy the quickstart, or redeploy after making
+some changes, it's pretty easy:
+
+* `mvn wildfly:deploy` - deploy any changes to the application to the
+  application server
+* `mvn wildfly:undeploy` - undeploy the quickstart
+========================================================================
+
+It's time to pull the covers back and dive into the internals of the application.
+
+Deploying the Kitchensink quickstart using CodeReady Studio, or Eclipse with JBoss Tools
+----------------------------------------------------------------------------------------------
+
+You may choose to deploy the quickstart using CodeReady Studio, or Eclipse with JBoss Tools. You'll need to have JBoss WildFly started in the IDE (as described  in <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and to have imported the quickstarts into Eclipse (as described in <<GettingStarted-importing_quickstarts_into_eclipse,Importing the quickstarts into Eclipse>>).
+
+With the quickstarts imported, you can deploy the quickstart by right clicking on the `wildfly-kitchensink` project, and choosing _Run As -> Run On Server_:
+
+image:gfx/Eclipse_KitchenSink_Deploy_1.jpg[]
+
+Make sure the server is selected, and hit Finish:
+
+image:gfx/Eclipse_Deploy_2.jpg[]
+
+You should see the server start up (unless you already started it in  <<GettingStarted-with_jboss_tools, Starting the JBoss server from JBDS or Eclipse with JBoss Tools>>) and the application deploy in the Console log:
+
+image:gfx/Eclipse_KitchenSink_Deploy_3.jpg[]
+
+
+The kitchensink quickstart in depth
+-----------------------------------
+
+The kitchensink application shows off a number of Jakarta EE technologies such as CDI, JSF, EJB, JTA, JAX-RS and Arquillian. It does this by providing a member registration database, available via JSF and JAX-RS.
+
+As usual, let's start by looking at the necessary deployment descriptors. By now, we're very used to seeing `beans.xml` and `faces-config.xml` in `WEB-INF/` (which can be found in the `src/main/webapp` directory). Notice that, once again, we don't need a `web.xml`. There are two configuration files in `WEB-INF/classes/META-INF` (which can be found in the `src/main/resources` directory) — `persistence.xml`, which sets up JPA, and `import.sql` which Hibernate, the JPA provider in JBoss WildFly, will use to load the initial users into the application when the application starts. We discussed both of these files in detail in <<GreeterQuickstart-,the Greeter Quickstart>>, and these are largely the same.
+
+Next, let's take a look at the JSF view the user sees. As usual, we use a template to provide the sidebar and footer. This one lives in `src/main/webapp/WEB-INF/templates/default.xhtml`:
+
+.src/main/webapp/WEB-INF/templates/default.xhtml
+[source,html]
+------------------------------------------------------------------------
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+    xmlns:h="http://java.sun.com/jsf/html"
+    xmlns:ui="http://java.sun.com/jsf/facelets">
+<h:head>                                                             (1)
+    <title>kitchensink</title>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=utf-8" />
+    <h:outputStylesheet name="css/screen.css" />
+</h:head>
+<h:body>
+    <div id="container">
+        <div class="dualbrand">
+            <img src="resources/gfx/dualbrand_logo.png" />
+        </div>
+        <div id="content">
+            <ui:insert name="content">                               (2)
+                 [Template content will be inserted here]
+            </ui:insert>
+        </div>
+        <div id="aside">                                             (3)
+            <p>Learn more about JBoss Enterprise Application
+                Platform 6.</p>
+            <ul>
+                <li>
+                    <a href="http://red.ht/jbeap-6-docs">
+                        Documentation
+                    </a>
+                </li>
+                <li>
+                    <a href="http://red.ht/jbeap-6">
+                        Product Information
+                    </a>
+               </li>
+            </ul>
+            <p>Learn more about JBoss WildFly.</p>
+            <ul>
+                <li>
+                    <a href="http://jboss.org/jdf/quickstarts/wildfly-quickstart/guide">
+                        Getting Started Developing Applications Guide
+                    </a>
+                </li>
+                <li>
+                    <a href="http://jboss.org/jbossas">
+                        Community Project Information
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div id="footer">
+            <p>
+                This project was generated from a Maven archetype from
+                JBoss.<br />
+            </p>
+        </div>
+    </div>
+</h:body>
+</html>
+------------------------------------------------------------------------
+<1> We have a common `<head>` element, where we define styles and more
+<2> The content is inserted here, and defined by views using this template
+<3> This application defines a common sidebar and footer, putting them in the template means we only have to define them once
+
+That leaves the main page, index.xhtml , in which we place the content unique to the main page:
+
+.src/main/webapp/index.xhtml
+[source,html]
+------------------------------------------------------------------------
+<?xml version="1.0" encoding="UTF-8"?>
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+    xmlns:ui="http://java.sun.com/jsf/facelets"
+    xmlns:f="http://java.sun.com/jsf/core"
+    xmlns:h="http://java.sun.com/jsf/html"
+    template="/WEB-INF/templates/default.xhtml">
+    <ui:define name="content">
+        <h1>Welcome to JBoss!</h1>
+
+        <h:form id="reg">                                            (1)
+            <h2>Member Registration</h2>
+            <p>Enforces annotation-based constraints defined on the
+                model class.</p>
+            <h:panelGrid columns="3" columnClasses="titleCell">
+                <h:outputLabel for="name" value="Name:" />
+                <h:inputText id="name" value="#{newMember.name}" />  (2)
+                <h:message for="name" errorClass="invalid" />
+
+                <h:outputLabel for="email" value="Email:" />
+                <h:inputText id="email"
+                             value="#{newMember.email}" />           (2)
+                <h:message for="email" errorClass="invalid" />
+
+                <h:outputLabel for="phoneNumber" value="Phone #:" />
+                <h:inputText id="phoneNumber"
+                             value="#{newMember.phoneNumber}" />     (2)
+                <h:message for="phoneNumber" errorClass="invalid" />
+            </h:panelGrid>
+
+            <p>
+                <h:panelGrid columns="2">
+                    <h:commandButton id="register"
+                        action="#{memberController.register}"
+                        value="Register" styleClass="register" />
+                    <h:messages styleClass="messages"
+                        errorClass="invalid" infoClass="valid"
+                        warnClass="warning" globalOnly="true" />
+                </h:panelGrid>
+            </p>
+        </h:form>
+        <h2>Members</h2>
+        <h:panelGroup rendered="#{empty members}">
+            <em>No registered members.</em>
+        </h:panelGroup>
+        <h:dataTable var="_member" value="#{members}"
+            rendered="#{not empty members}"
+            styleClass="simpletablestyle">                           (3)
+            <h:column>
+                <f:facet name="header">Id</f:facet>
+                #{_member.id}
+            </h:column>
+            <h:column>
+                <f:facet name="header">Name</f:facet>
+                #{_member.name}
+            </h:column>
+            <h:column>
+                <f:facet name="header">Email</f:facet>
+                #{_member.email}
+            </h:column>
+            <h:column>
+                <f:facet name="header">Phone #</f:facet>
+                #{_member.phoneNumber}
+            </h:column>
+            <h:column>
+                <f:facet name="header">REST URL</f:facet>
+                <a href="#{request.contextPath}/rest/members/#{_member.id}">
+                    /rest/members/#{_member.id}
+                </a>
+            </h:column>
+            <f:facet name="footer">
+                REST URL for all members:
+                    <a href="#{request.contextPath}/rest/members">
+                        /rest/members
+                    </a>
+            </f:facet>
+        </h:dataTable>
+    </ui:define>
+</ui:composition>
+
+------------------------------------------------------------------------
+<1> The JSF form allows us to register new users. There should be one already created when the application started.
+<2> The application uses Bean Validation to validate data entry. The error messages from Bean Validation are automatically attached to the relevant field by JSF, and adding a messages JSF component will display them.
+<3> This application exposes REST endpoints for each registered member. The application helpfully displays the URL to the REST endpoint on this page.
+
+Next, let's take a look at the Member entity, before we look at how the application is wired together:
+
+.src/main/java/org/jboss/as/quickstarts/kitchensink/model/Member.java
+[source,java]
+------------------------------------------------------------------------
+SuppressWarnings("serial")
+@Entity                                                              (1)
+@XmlRootElement                                                      (2)
+@Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))
+public class Member implements Serializable {
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    @NotNull
+    @Size(min = 1, max = 25)
+    @Pattern(regexp = "[A-Za-z ]*",
+             message = "must contain only letters and spaces")       (3)
+    private String name;
+
+    @NotNull
+    @NotEmpty
+    @Email                                                           (4)
+    private String email;
+
+    @NotNull
+    @Size(min = 10, max = 12)
+    @Digits(fraction = 0, integer = 12)                              (5)
+    @Column(name = "phone_number")
+    private String phoneNumber;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getPhoneNumber() {
+        return phoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber) {
+        this.phoneNumber = phoneNumber;
+    }
+}
+------------------------------------------------------------------------
+<1> As usual with JPA, we define that the class is an entity by adding @Entity
+<2> Members are exposed as a RESTful service using JAX-RS. We can use JAXB to map the object to XML and to do this we need to add @XmlRootElement
+<3> Bean Validation allows constraints to be defined once (on the entity) and applied everywhere. Here we constrain the person's name to a certain size and regular expression
+<4> Hibernate Validator also offers some extra validations such as @Email
+<5> @Digits , @NotNull and @Size are further examples of constraints
+
+Let's take a look at `MemberRepository`, which is responsible for interactions with the persistence layer:
+
+.src/main/java/org/jboss/as/quickstarts/kitchensink/data/MemberRepository.java
+[source,java]
+------------------------------------------------------------------------
+@ApplicationScoped                                                   (1)
+public class MemberRepository {
+
+    @Inject                                                          (2)
+    private EntityManager em;
+
+    public Member findById(Long id) {
+        return em.find(Member.class, id);
+    }
+
+    public Member findByEmail(String email) {
+        CriteriaBuilder cb = em.getCriteriaBuilder();                (3)
+        CriteriaQuery<Member> c = cb.createQuery(Member.class);
+        Root<Member> member = c.from(Member.class);
+        c.select(member).where(cb.equal(member.get("email"), email));
+        return em.createQuery(c).getSingleResult();
+    }
+
+    public List<Member> findAllOrderedByName() {
+        CriteriaBuilder cb = em.getCriteriaBuilder();
+        CriteriaQuery<Member> criteria = cb.createQuery(Member.class);
+        Root<Member> member = criteria.from(Member.class);
+        criteria.select(member).orderBy(cb.asc(member.get("name")));
+        return em.createQuery(criteria).getResultList();             (4)
+    }
+}
+------------------------------------------------------------------------
+<1> The bean is application scoped, as it is a singleton
+<2> The entity manager is injected, to allow interaction with JPA
+<3> The JPA criteria api is used to load a member by their unique identifier, their email address
+<4> The criteria api can also be used to load lists of entities
+
+Let's take a look at `MemberListProducer`, which is responsible for managing the list of registered members.
+
+.src/main/java/org/jboss/as/quickstarts/kitchensink/data/MemberListProducer.java
+[source,java]
+------------------------------------------------------------------------
+@RequestScoped                                                       (1)
+public class MemberListProducer {
+
+    @Inject                                                          (2)
+    private MemberRepository memberRepository;
+
+    private List<Member> members;
+
+    // @Named provides access the return value via the EL variable
+    // name "members" in the UI (e.g. Facelets or JSP view)
+    @Produces                                                        (3)
+    @Named
+    public List<Member> getMembers() {
+        return members;
+    }
+
+    public void onMemberListChanged(                                 (4)
+        @Observes(notifyObserver = Reception.IF_EXISTS)
+            final Member member) {
+        retrieveAllMembersOrderedByName();
+    }
+
+    @PostConstruct
+    public void retrieveAllMembersOrderedByName() {
+        members = memberRepository.findAllOrderedByName();
+    }
+}
+------------------------------------------------------------------------
+<1> This bean is request scoped, meaning that any fields (such as members ) will be stored for the entire request
+<2> The `MemberRepository` is responsible or interactions with the persistence layer
+<3> The list of members is exposed as a producer method, it's also available via EL
+<4> The observer method is notified whenever a member is created, removed, or updated. This allows us to refresh the list of members whenever they are needed. This is a good approach as it allows us to cache the list of members, but keep it up to date at the same time
+
+Let's now look at MemberRegistration, the service that allows us to create new members:
+
+.src/main/java/org/jboss/as/quickstarts/kitchensink/service/MemberRegistration.java
+[source,java]
+------------------------------------------------------------------------
+@Stateless                                                           (1)
+public class MemberRegistration {
+
+    @Inject                                                          (2)
+    private Logger log;
+
+    @Inject
+    private EntityManager em;
+
+    @Inject
+    private Event<Member> memberEventSrc;
+
+    public void register(Member member) throws Exception {
+        log.info("Registering " + member.getName());
+        em.persist(member);
+        memberEventSrc.fire(member);                                 (3)
+   }
+}
+------------------------------------------------------------------------
+<1> This bean requires transactions as it needs to write to the database. Making this an EJB gives us access to declarative transactions - much simpler than manual transaction control!
+<2> Here we inject a JDK logger, defined in the `Resources` class
+<3> An event is sent every time a member is updated. This allows other pieces of code (in this quickstart the member list is refreshed) to react to changes in the member list without any coupling to this class.
+
+Now, let's take a look at the `Resources` class, which provides resources such as the entity manager. CDI recommends using "resource producers", as we do in this quickstart, to alias resources to CDI beans, allowing for a  consistent style throughout our application:
+
+.src/main/java/org/jboss/as/quickstarts/kitchensink/util/Resources.java
+[source,java]
+------------------------------------------------------------------------
+public class Resources {
+    // use @SuppressWarnings to tell IDE to ignore warnings about
+    // field not being referenced directly
+    @SuppressWarnings("unused")                                      (1)
+    @Produces
+    @PersistenceContext
+    private EntityManager em;
+
+    @Produces                                                        (2)
+    public Logger produceLog(InjectionPoint injectionPoint) {
+        return Logger.getLogger(injectionPoint.getMember()
+                                              .getDeclaringClass()
+                                              .getName());
+    }
+
+    @Produces                                                        (3)
+    @RequestScoped
+    public FacesContext produceFacesContext() {
+        return FacesContext.getCurrentInstance();
+    }
+
+}
+------------------------------------------------------------------------
+<1> We use the "resource producer" pattern, from CDI, to "alias" the old fashioned `@PersistenceContext` injection of the entity manager to a CDI style injection. This allows us to use a consistent injection style (`@Inject`) throughout the application.
+<2> We expose a JDK logger for injection. In order to save a bit more boiler plate, we automatically set the logger category as the class name!
+<3> We expose the `FacesContext` via a producer method, which allows it to be injected. If we were adding tests, we could also then mock it out.
+
+If you want to define your own datasource, take a look at the link:http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/6/html/Administration_and_Configuration_Guide/index.html[Administration and Configuration Guide for JBoss Enterprise Application Platform 6] or the link:https://docs.jboss.org/author/display/AS71/Getting+Started+Guide[Getting Started Guide].
+
+Of course, we need to allow JSF to interact with the services. The `MemberController` class is responsible for this:
+
+.src/main/java/org/jboss/as/quickstarts/kitchensink/controller/MemberController.java
+[source,java]
+------------------------------------------------------------------------
+@Model                                                               (1)
+public class MemberController {
+
+    @Inject                                                          (2)
+    private FacesContext facesContext;
+
+    @Inject                                                          (3)
+    private MemberRegistration memberRegistration;
+
+    @Produces                                                        (4)
+    @Named
+    private Member newMember;
+
+    @PostConstruct                                                   (5)
+    public void initNewMember() {
+        newMember = new Member();
+    }
+
+    public void register() throws Exception {
+        try {
+            memberRegistration.register(newMember);                  (6)
+            FacesMessage m =
+                new FacesMessage(FacesMessage.SEVERITY_INFO,
+                                 "Registered!",
+                                 "Registration successful");
+            facesContext.addMessage(null, m);                        (7)
+            initNewMember();                                         (8)
+        } catch (Exception e) {
+            String errorMessage = getRootErrorMessage(e);
+            FacesMessage m =
+                new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                 errorMessage,
+                                 "Registration unsuccessful");
+            facesContext.addMessage(null, m);
+        }
+    }
+
+    private String getRootErrorMessage(Exception e) {
+        // Default to general error message that registration failed.
+        String errorMessage = "Registration failed. See server log for more information";
+        if (e == null) {
+            // This shouldn't happen, but return the default messages
+            return errorMessage;
+        }
+
+        // Start with the exception and recurse to find the root cause
+        Throwable t = e;
+        while (t != null) {
+            // Get the message from the Throwable class instance
+            errorMessage = t.getLocalizedMessage();
+            t = t.getCause();
+        }
+        // This is the root cause message
+        return errorMessage;
+    }
+
+}
+------------------------------------------------------------------------
+<1> The `MemberController` class uses the `@Model` stereotype, which adds `@Named` and `@RequestScoped` to the class
+<2> The `FacesContext` is injected, so that messages can be sent to the user
+<3> The `MemberRegistration` bean is injected, to allow the controller to interact with the database
+<4> The `Member` class is exposed using a named producer field, which allows access from JSF. Note that that the named producer field has dependent scope, so every time it is injected, the field will be read
+<5> The `@PostConstruct` annotation causes a new member object to be placed in the `newMember` field when the bean is instantiated
+<6> When the register method is called, the `newMember` object is passed to the persistence service
+<7> We also send a message to the user, to give them feedback on their actions
+<8> Finally, we replace the `newMember` with a new object, thus blanking out the data the user has added so far. This works as the producer field is dependent scoped
+
+Before we wrap up our tour of the kitchensink application, let's take a look at how the JAX-RS endpoints are created. Firstly, `JaxRSActivator`, which extends `Application` and is annotated with `@ApplicationPath`, is the Jakarta EE "no XML" approach to activating JAX-RS.
+
+.src/main/java/org/jboss/as/quickstarts/kitchensink/rest/JaxRsActivator.java
+[source,java]
+------------------------------------------------------------------------
+@ApplicationPath("/rest")
+public class JaxRsActivator extends Application {
+   /* class body intentionally left blank */
+}
+------------------------------------------------------------------------
+
+The real work goes in `MemberResourceRESTService`, which produces the endpoint:
+
+.src/main/java/org/jboss/as/quickstarts/kitchensink/rest/MemberResourceRESTService.java
+[source,java]
+------------------------------------------------------------------------
+@Path("/members")                                                    (1)
+@RequestScoped                                                       (2)
+public class MemberResourceRESTService {
+
+    @Inject                                                          (3)
+    private Logger log;
+
+    @Inject                                                          (4)
+    private Validator validator;
+
+    @Inject                                                          (5)
+    private MemberRepository repository;
+
+    @Inject                                                          (6)
+    private MemberRegistration registration;
+
+    @GET                                                             (7)
+    @Produces(MediaType.APPLICATION_JSON)
+    public List<Member> listAllMembers() {
+        return repository.findAllOrderedByName();
+    }
+
+    @GET                                                             (8)
+    @Path("/{id:[0-9][0-9]*}")
+    @Produces(MediaType.APPLICATION_JSON)
+    public Member lookupMemberById(@PathParam("id") long id) {
+        Member member = repository.findById(id);
+        if (member == null) {
+            throw new
+                WebApplicationException(Response.Status.NOT_FOUND);
+        }
+        return member;
+    }
+
+    /**
+     * Creates a new member from the values provided.  Performs
+     * validation, and will return a JAX-RS response with either
+     * 200 ok, or with a map of fields, and related errors.
+     */
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public Response createMember(Member member) {                    (9)
+        Response.ResponseBuilder builder = null;
+
+        try {
+            // Validates member using bean validation
+            validateMember(member);                                  (10)
+
+            registration.register(member);                           (11)
+
+            //Create an "ok" response
+            builder = Response.ok();
+        } catch (ConstraintViolationException ce) {                  (12)
+            //Handle bean validation issues
+            builder = createViolationResponse(
+                          ce.getConstraintViolations());
+        } catch (ValidationException e) {
+            //Handle the unique constrain violation
+            Map<String, String> responseObj =
+                new HashMap<String, String>();
+            responseObj.put("email", "Email taken");
+            builder = Response.status(Response.Status.CONFLICT)
+                              .entity(responseObj);
+        } catch (Exception e) {
+            // Handle generic exceptions
+            Map<String, String> responseObj
+                = new HashMap<String, String>();
+            responseObj.put("error", e.getMessage());
+            builder = Response.status(Response.Status.BAD_REQUEST)
+                              .entity(responseObj);
+        }
+
+        return builder.build();
+    }
+
+
+    /**
+     * <p>
+     * Validates the given Member variable and throws validation
+     * exceptions based on the type of error. If the error is
+     * standard bean validation errors then it will throw a
+     * ConstraintValidationException with the set of the
+     * constraints violated.
+     * </p>
+     * <p>
+     * If the error is caused because an existing member with the
+     * same email is registered it throws a regular validation
+     * exception so that it can be interpreted separately.
+     * </p>
+     *
+     * @param member Member to be validated
+     * @throws ConstraintViolationException
+     *     If Bean Validation errors exist
+     * @throws ValidationException
+     *     If member with the same email already exists
+     */
+    private void validateMember(Member member)
+            throws ConstraintViolationException,
+                   ValidationException {
+        //Create a bean validator and check for issues.
+        Set<ConstraintViolation<Member>> violations =
+            validator.validate(member);
+
+        if (!violations.isEmpty()) {
+            throw new ConstraintViolationException(
+                new HashSet<ConstraintViolation<?>>(violations));
+        }
+
+        //Check the uniqueness of the email address
+        if (emailAlreadyExists(member.getEmail())) {
+            throw new ValidationException("Unique Email Violation");
+        }
+    }
+
+    /**
+     * Creates a JAX-RS "Bad Request" response including a map of
+     * all violation fields, and their message. This can then be
+     * used by clients to show violations.
+     *
+     * @param violations A set of violations that needs to be
+     *                   reported
+     * @return JAX-RS response containing all violations
+     */
+    private Response.ResponseBuilder createViolationResponse
+            (Set<ConstraintViolation<?>> violations) {
+        log.fine("Validation completed. violations found: "
+            + violations.size());
+
+        Map<String, String> responseObj =
+            new HashMap<String, String>();
+
+        for (ConstraintViolation<?> violation : violations) {
+            responseObj.put(violation.getPropertyPath().toString(),
+                            violation.getMessage());
+        }
+
+        return Response.status(Response.Status.BAD_REQUEST)
+                       .entity(responseObj);
+    }
+
+    /**
+     * Checks if a member with the same email address is already
+     * registered.  This is the only way to easily capture the
+     * "@UniqueConstraint(columnNames = "email")" constraint from
+     * the Member class.
+     *
+     * @param email The email to check
+     * @return True if the email already exists, and false
+               otherwise
+     */
+    public boolean emailAlreadyExists(String email) {
+        Member member = null;
+        try {
+            member = repository.findByEmail(email);
+        } catch (NoResultException e) {
+            // ignore
+        }
+        return member != null;
+    }
+}
+------------------------------------------------------------------------
+<1> The `@Path` annotation tells JAX-RS that this class provides a REST endpoint mapped to `rest/members` (concatenating the path from the activator with the path for this endpoint).
+<2> The bean is request scoped, as JAX-RS interactions typically don't hold state between requests
+<3> JAX-RS endpoints are CDI enabled, and can use CDI-style injection.
+<4> CDI allows us to inject a Bean Validation `Validator` instance, which is used to validate the POSTed member before it is persisted
+<5> `MemberRegistration` is injected to allow us to alter the member database
+<6> `MemberRepository` is injected to allow us to query the member database
+<7> The `listAllMembers()` method is called when the raw endpoint is accessed and offers up a list of endpoints. Notice that the object is automatically marshalled to JSON by RESTEasy (the JAX-RS implementation included in JBoss WildFly).
+<8> The `lookupMemberById()` method is called when the endpoint is accessed with a member id parameter appended (for example `rest/members/1)`. Again, the object is automatically marshalled to JSON by RESTEasy.
+<9> `createMember()` is called when a POST is performed on the URL. Once again, the object is automatically unmarshalled from JSON.
+<10> In order to ensure that the member is valid, we call the `validateMember` method, which validates the object, and adds any constraint violations to the response. These can then be handled on the client side, and displayed to the user
+<11> The object is then passed to the `MemberRegistration` service to be persisted
+<12> We then handle any remaining issues with validating the object, which are raised when the object is persisted
+
+
+Arquillian
+~~~~~~~~~~
+
+If you've been following along with the Test Driven Development craze of the past few years, you're probably getting a bit nervous by now, wondering how on earth you are going to test your application. Lucky for you, the Arquillian project is here to help!
+
+Arquillian provides all the boiler plate for running your test inside JBoss WildFly, allowing you to concentrate on testing your application. In order to do that, it utilizes Shrinkwrap, a fluent API for defining packaging, to create an archive to deploy. We'll go through the testcase, and how you configure Arquillian in just a moment, but first let's run the test.
+
+Before we start, we need to let Arquillian know the path to our server. Open up `src/test/resources/arquillian.xml`, uncomment the `<configuration>` elements, and set the `jbossHome` property to the path to the server:
+
+image:gfx/eclipse_arquillian_0.png[]
+
+Now, make sure the server is not running (so that the instance started for running the test does not interfere), and then run the tests from the command line by typing:
+
+    mvn clean test -Parq-managed
+
+You should see the server start up, a `test.war` deployed, test executed, and then the results displayed to you on the console:
+
+------------------------------------------------------------------------
+$ > mvn clean test -Parq-managed
+
+
+[INFO] Scanning for projects...
+[INFO]
+[INFO] ------------------------------------------------------------------------
+[INFO] Building WildFly Quickstarts: Kitchensink 7.0.0-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO]
+[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ wildfly-kitchensink ---
+[INFO] Deleting /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target
+[INFO]
+[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ wildfly-kitchensink ---
+[INFO] Using 'UTF-8' encoding to copy filtered resources.
+[INFO] Copying 2 resources
+[INFO]
+[INFO] --- maven-compiler-plugin:2.3.1:compile (default-compile) @ wildfly-kitchensink ---
+[INFO] Compiling 6 source files to /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/classes
+[INFO]
+[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ wildfly-kitchensink ---
+[INFO] Using 'UTF-8' encoding to copy filtered resources.
+[INFO] Copying 1 resource
+[INFO]
+[INFO] --- maven-compiler-plugin:2.3.1:testCompile (default-testCompile) @ wildfly-kitchensink ---
+[INFO] Compiling 1 source file to /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/test-classes
+[INFO]
+[INFO] --- maven-surefire-plugin:2.7.2:test (default-test) @ wildfly-kitchensink ---
+[INFO] Surefire report directory: /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/surefire-reports
+
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest
+Jun 25, 2011 7:17:49 PM org.jboss.arquillian.container.impl.client.container.ContainerRegistryCreator getActivatedConfiguration
+INFO: Could not read active container configuration: null
+log4j:WARN No appenders could be found for logger (org.jboss.remoting).
+log4j:WARN Please initialize the log4j system properly.
+Jun 25, 2011 7:17:54 PM org.jboss.as.arquillian.container.managed.ManagedDeployableContainer startInternal
+INFO: Starting container with: [java, -Djboss.home.dir=/Users/pmuir/development/jboss, -Dorg.jboss.boot.log.file=/Users/pmuir/development/jboss/standalone/log/boot.log, -Dlogging.configuration=file:/Users/pmuir/development/jboss/standalone/configuration/logging.properties, -jar, /Users/pmuir/development/jboss/jboss-modules.jar, -mp, /Users/pmuir/development/jboss/modules, -logmodule, org.jboss.logmanager, -jaxpmodule, javax.xml.jaxp-provider, org.jboss.as.standalone, -server-config, standalone.xml]
+19:17:55,107 INFO  [org.jboss.modules] JBoss Modules version 1.0.0.CR4
+19:17:55,329 INFO  [org.jboss.msc] JBoss MSC version 1.0.0.CR2
+19:17:55,386 INFO  [org.jboss.as] JBoss WildFly.0.0.Beta4-SNAPSHOT "(TBD)" starting
+19:17:56,159 INFO  [org.jboss.as] creating http management service using network interface (management) port (9990) securePort (-1)
+19:17:56,181 INFO  [org.jboss.as.logging] Removing bootstrap log handlers
+19:17:56,189 INFO  [org.jboss.as.naming] (Controller Boot Thread) Activating Naming Subsystem
+19:17:56,203 INFO  [org.jboss.as.naming] (MSC service thread 1-4) Starting Naming Service
+19:17:56,269 INFO  [org.jboss.as.security] (Controller Boot Thread) Activating Security Subsystem
+19:17:56,305 INFO  [org.jboss.remoting] (MSC service thread 1-1) JBoss Remoting version 3.2.0.Beta2
+19:17:56,317 INFO  [org.xnio] (MSC service thread 1-1) XNIO Version 3.0.0.Beta3
+19:17:56,331 INFO  [org.xnio.nio] (MSC service thread 1-1) XNIO NIO Implementation Version 3.0.0.Beta3
+19:17:56,522 INFO  [org.jboss.as.connector.subsystems.datasources] (Controller Boot Thread) Deploying JDBC-compliant driver class org.h2.Driver (version 1.2)
+19:17:56,572 INFO  [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-7) The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
+19:17:56,627 INFO  [org.jboss.as.remoting] (MSC service thread 1-3) Listening on /127.0.0.1:9999
+19:17:56,641 INFO  [org.jboss.as.jmx.JMXConnectorService] (MSC service thread 1-2) Starting remote JMX connector
+19:17:56,705 INFO  [org.jboss.as.ee] (Controller Boot Thread) Activating EE subsystem
+19:17:56,761 INFO  [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-7) Starting Coyote HTTP/1.1 on http--127.0.0.1-8080
+19:17:56,793 INFO  [org.jboss.as.connector] (MSC service thread 1-3) Starting JCA Subsystem (JBoss IronJacamar 1.0.0.CR2)
+19:17:56,837 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) Bound data source [java:jboss/datasources/ExampleDS]
+19:17:57,335 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "arquillian-service"
+19:17:57,348 INFO  [org.jboss.as.deployment] (MSC service thread 1-7) Started FileSystemDeploymentService for directory /Users/pmuir/development/jboss/standalone/deployments
+19:17:57,693 INFO  [org.jboss.as] (Controller Boot Thread) JBoss WildFly.0.0.Beta4-SNAPSHOT "(TBD)" started in 2806ms - Started 111 of 138 services (27 services are passive or on-demand)
+19:18:00,596 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-6) Stopped deployment arquillian-service in 8ms
+19:18:01,394 INFO  [org.jboss.as.server.deployment] (pool-2-thread-7) Content added at location /Users/pmuir/development/jboss/standalone/data/content/0a/9e20b7bc978fd2778b89c7c06e4d3e1f308dfe/content
+19:18:01,403 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-7) Starting deployment of "arquillian-service"
+19:18:01,650 INFO  [org.jboss.as.server.deployment] (pool-2-thread-6) Content added at location /Users/pmuir/development/jboss/standalone/data/content/94/8324ab8f5a693c67fa57b59323304d3947bbf6/content
+19:18:01,659 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-5) Starting deployment of "test.war"
+19:18:01,741 INFO  [org.jboss.jpa] (MSC service thread 1-7) read persistence.xml for primary
+19:18:01,764 INFO  [org.jboss.weld] (MSC service thread 1-3) Processing CDI deployment: test.war
+19:18:01,774 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-3) JNDI bindings for session bean named MemberRegistration in deployment unit deployment "test.war" are as follows:
+
+        java:global/test/MemberRegistration!org.jboss.as.quickstarts.kitchensink.controller.MemberRegistration
+        java:app/test/MemberRegistration!org.jboss.as.quickstarts.kitchensink.controller.MemberRegistration
+        java:module/MemberRegistration!org.jboss.as.quickstarts.kitchensink.controller.MemberRegistration
+        java:global/test/MemberRegistration
+        java:app/test/MemberRegistration
+        java:module/MemberRegistration
+
+19:18:01,908 INFO  [org.jboss.weld] (MSC service thread 1-5) Starting Services for CDI deployment: test.war
+19:18:02,131 INFO  [org.jboss.weld.Version] (MSC service thread 1-5) WELD-000900 1.1.1 (Final)
+19:18:02,169 INFO  [org.jboss.weld] (MSC service thread 1-2) Starting weld service
+19:18:02,174 INFO  [org.jboss.as.arquillian] (MSC service thread 1-3) Arquillian deployment detected: ArquillianConfig[service=jboss.arquillian.config."test.war",unit=test.war,tests=[org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest]]
+19:18:02,179 INFO  [org.jboss.jpa] (MSC service thread 1-6) starting Persistence Unit Service 'test.war#primary'
+19:18:02,322 INFO  [org.hibernate.annotations.common.Version] (MSC service thread 1-6) Hibernate Commons Annotations 3.2.0.Final
+19:18:02,328 INFO  [org.hibernate.cfg.Environment] (MSC service thread 1-6) HHH00412:Hibernate [WORKING]
+19:18:02,330 INFO  [org.hibernate.cfg.Environment] (MSC service thread 1-6) HHH00206:hibernate.properties not found
+19:18:02,332 INFO  [org.hibernate.cfg.Environment] (MSC service thread 1-6) HHH00021:Bytecode provider name : javassist
+19:18:02,354 INFO  [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-6) HHH00204:Processing PersistenceUnitInfo [
+	name: primary
+	...]
+19:18:02,400 WARN  [org.hibernate.cfg.AnnotationBinder] (MSC service thread 1-6) HHH00194:Package not found or wo package-info.java: org.jboss.as.quickstarts.kitchensink.test
+19:18:02,400 WARN  [org.hibernate.cfg.AnnotationBinder] (MSC service thread 1-6) HHH00194:Package not found or wo package-info.java: org.jboss.as.quickstarts.kitchensink.controller
+19:18:02,401 WARN  [org.hibernate.cfg.AnnotationBinder] (MSC service thread 1-6) HHH00194:Package not found or wo package-info.java: org.jboss.as.quickstarts.kitchensink.util
+19:18:02,401 WARN  [org.hibernate.cfg.AnnotationBinder] (MSC service thread 1-6) HHH00194:Package not found or wo package-info.java: org.jboss.as.quickstarts.kitchensink.model
+19:18:02,592 INFO  [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (MSC service thread 1-6) HHH00130:Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
+19:18:02,852 INFO  [org.hibernate.dialect.Dialect] (MSC service thread 1-6) HHH00400:Using dialect: org.hibernate.dialect.H2Dialect
+19:18:02,858 WARN  [org.hibernate.dialect.H2Dialect] (MSC service thread 1-6) HHH00431:Unable to determine H2 database version, certain features may not work
+19:18:02,862 INFO  [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (MSC service thread 1-6) HHH00423:Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
+19:18:02,870 INFO  [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] (MSC service thread 1-6) HHH00268:Transaction strategy: org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
+19:18:02,874 INFO  [org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory] (MSC service thread 1-6) HHH00397:Using ASTQueryTranslatorFactory
+19:18:02,911 INFO  [org.hibernate.validator.util.Version] (MSC service thread 1-6) Hibernate Validator 4.1.0.Final
+19:18:02,917 INFO  [org.hibernate.validator.engine.resolver.DefaultTraversableResolver] (MSC service thread 1-6) Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
+19:18:03,079 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-6) HHH00227:Running hbm2ddl schema export
+19:18:03,093 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-6) HHH00230:Schema export complete
+19:18:03,217 INFO  [org.jboss.web] (MSC service thread 1-5) registering web context: /test
+19:18:03,407 WARN  [org.jboss.weld.Bean] (RMI TCP Connection(3)-127.0.0.1) WELD-000018 Executing producer field or method [method] @Produces public org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest.produceLog(InjectionPoint) on incomplete declaring bean Managed Bean [class org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest] with qualifiers [@Any @Default] due to circular injection
+19:18:03,427 WARN  [org.jboss.weld.Bean] (RMI TCP Connection(3)-127.0.0.1) WELD-000018 Executing producer field or method [method] @Produces public org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest.produceLog(InjectionPoint) on incomplete declaring bean Managed Bean [class org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest] with qualifiers [@Any @Default] due to circular injection
+19:18:03,450 WARN  [org.jboss.as.ejb3.component.EJBComponent] (RMI TCP Connection(3)-127.0.0.1) EJBTHREE-2120: deprecated getTransactionAttributeType method called (dev problem)
+19:18:03,459 INFO  [org.jboss.as.quickstarts.kitchensink.controller.MemberRegistration] (RMI TCP Connection(3)-127.0.0.1) Registering Jane Doe
+19:18:03,616 INFO  [org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest] (RMI TCP Connection(3)-127.0.0.1) Jane Doe was persisted with id 1
+19:18:03,686 INFO  [org.jboss.jpa] (MSC service thread 1-1) stopping Persistence Unit Service 'test.war#primary'
+19:18:03,687 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-1) HHH00227:Running hbm2ddl schema export
+19:18:03,690 INFO  [org.jboss.weld] (MSC service thread 1-3) Stopping weld service
+19:18:03,692 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-1) HHH00230:Schema export complete
+19:18:03,704 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-8) Stopped deployment test.war in 52ms
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 14.859 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 22.305s
+[INFO] Finished at: Sat Jun 25 19:18:04 BST 2011
+[INFO] Final Memory: 17M/125M
+[INFO] ------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+
+As you can see, that didn't take too long (approximately 15s), and is great for running in your QA environment, but if you running locally, you might prefer to connect to a running server. To do that, start up JBoss WildFly (as described in <<GettingStarted-, Getting Started with JBoss Enterprise Application Platform of WildFly>>. Now, run your test, but use the `arq-wildfly-remote` profile:
+
+    mvn clean test -Parq-remote
+
+------------------------------------------------------------------------
+$ > mvn clean test -Parq-remote
+
+
+[INFO] Scanning for projects...
+[INFO]
+[INFO] ------------------------------------------------------------------------
+[INFO] Building WildFly Quickstarts: Kitchensink 7.0.0-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO]
+[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ wildfly-kitchensink ---
+[INFO] Deleting /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target
+[INFO]
+[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ wildfly-kitchensink ---
+[INFO] Using 'UTF-8' encoding to copy filtered resources.
+[INFO] Copying 2 resources
+[INFO]
+[INFO] --- maven-compiler-plugin:2.3.1:compile (default-compile) @ wildfly-kitchensink ---
+[INFO] Compiling 6 source files to /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/classes
+[INFO]
+[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ wildfly-kitchensink ---
+[INFO] Using 'UTF-8' encoding to copy filtered resources.
+[INFO] Copying 1 resource
+[INFO]
+[INFO] --- maven-compiler-plugin:2.3.1:testCompile (default-testCompile) @ wildfly-kitchensink ---
+[INFO] Compiling 1 source file to /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/test-classes
+[INFO]
+[INFO] --- maven-surefire-plugin:2.7.2:test (default-test) @ wildfly-kitchensink ---
+[INFO] Surefire report directory: /Users/pmuir/workspace/wildfly-docs/quickstarts/kitchensink/target/surefire-reports
+
+------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.jboss.as.quickstarts.kitchensink.test.MemberRegistrationTest
+Jun 25, 2011 7:22:28 PM org.jboss.arquillian.container.impl.client.container.ContainerRegistryCreator getActivatedConfiguration
+INFO: Could not read active container configuration: null
+log4j:WARN No appenders could be found for logger (org.jboss.as.arquillian.container.MBeanServerConnectionProvider).
+log4j:WARN Please initialize the log4j system properly.
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.13 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 10.474s
+[INFO] Finished at: Sat Jun 25 19:22:33 BST 2011
+[INFO] Final Memory: 17M/125M
+[INFO] ------------------------------------------------------------------------
+$ >
+------------------------------------------------------------------------
+
+
+[IMPORTANT]
+========================================================================
+Arquillian defines two modes, _managed_ and _remote_ . The _managed_
+mode will take care of starting and stopping the server for you, whilst
+the _remote_ mode connects to an already running server.
+========================================================================
+
+This time you can see the test didn't start the server (if you check the instance you started, you will see the application was deployed there), and the test ran a lot faster (approximately 4s).
+
+We can also run the test from Eclipse, in both managed and remote modes. First, we'll run in in managed mode. In order to set up the correct dependencies on your classpath, right click on the project, and select Properties :
+
+image:gfx/eclipse_arquillian_1.png[]
+
+Now, locate the Maven panel:
+
+image:gfx/eclipse_arquillian_2.png[]
+
+And activate the `arq-managed` profile:
+
+image:gfx/eclipse_arquillian_3.png[]
+
+Finally, hit _Ok_, and then confirm you want to update the project configuration:
+
+image:gfx/eclipse_arquillian_4.png[]
+
+Once the project has built, locate the `MemberRegistrationTest` in `src/test/java`, right click on the test, and choose _Run As -> JUnit Test...`_:
+
+image:gfx/eclipse_arquillian_12.png[]
+
+You should see the server start in the Eclipse Console, the test be deployed, and finally the JUnit View pop up with the result (a pass of course!).
+
+We can also run the test in an already running instance of Eclipse. Simply change the active profile to `arq-remote`:
+
+image:gfx/eclipse_arquillian_11.png[]
+
+Now, make sure the server is running, right click on the test case and choose _Run As -> JUnit Test..._:
+
+image:gfx/eclipse_arquillian_12.png[]
+
+Again, you'll see the test run in the server, and the JUnit View pop up, with the test passing.
+
+So far so good, the test is running in both Eclipse and from the command line. But what does the test look like?
+
+.src/test/java/org/jboss/as/quickstarts/kitchensink/test/MemberRegistrationTest.java
+[source,java]
+------------------------------------------------------------------------
+@RunWith(Arquillian.class)                                           (1)
+public class MemberRegistrationTest {
+    @Deployment                                                      (2)
+    public static Archive<?> createTestArchive() {
+        return ShrinkWrap.create(WebArchive.class, "test.war")
+                .addClasses(Member.class,
+                            MemberRegistration.class,
+                            Resources.class)                         (3)
+                .addAsResource("META-INF/test-persistence.xml",
+                               "META-INF/persistence.xml")           (4)
+                .addAsWebInfResource(EmptyAsset.INSTANCE,
+                                     "beans.xml")                    (5)
+                // Deploy our test datasource
+                .addAsWebInfResource("test-ds.xml");                 (6)
+    }
+
+    @Inject                                                          (7)
+    MemberRegistration memberRegistration;
+
+    @Inject
+    Logger log;
+
+    @Test
+    public void testRegister() throws Exception {                    (8)
+        Member newMember = new Member();
+        newMember.setName("Jane Doe");
+        newMember.setEmail("jane@mailinator.com");
+        newMember.setPhoneNumber("2125551234");
+        memberRegistration.register(newMember);
+        assertNotNull(newMember.getId());
+        log.info(newMember.getName() +
+                 " was persisted with id " +
+                 newMember.getId());
+    }
+
+}
+------------------------------------------------------------------------
+<1> `@RunWith(Arquillian.class)` tells JUnit to hand control over to Arquillian when executing tests
+<2> The `@Deployment` annotation identifies the `createTestArchive()` static method to Arquillian as the one to use to determine which resources and classes to deploy
+<3> We add just the classes needed for the test, no more
+<4> We also add persistence.xml as our test is going to use the database
+<5> Of course, we must add beans.xml to enable CDI
+<6> Finally, we add a test datasource, so that test data doesn't overwrite production data
+<7> Arquillian allows us to inject beans into the test case
+<8> The test method works as you would expect - creates a new member, registers them, and then verifies that the member was created
+
+As you can see, Arquillian has lived up to the promise - the test case is focused on _what_ to test (the `@Deployment` method) and _how_ to test (the `@Test` method). It's also worth noting that this isn't a simplistic unit test - this is a fully fledged integration test that uses the database.
+
+Now, let's look at how we configure Arquillian. First of all, let's take a look at `arquillian.xml` in `src/test/resources`.
+
+
+.src/test/resources/META-INF/arquillian.xml
+[source,xml]
+------------------------------------------------------------------------
+<arquillian xmlns="http://jboss.org/schema/arquillian"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://jboss.org/schema/arquillian
+        http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
+
+   <!-- Uncomment to have test archives exported to the
+        file system for inspection -->
+<!--    <engine>  -->                                                (1)
+<!--       <property name="deploymentExportPath">
+               target/
+           </property>  -->
+<!--    </engine> -->
+
+   <!-- Force the use of the Servlet 3.0 protocol with all
+        containers, as it is the most mature -->
+   <defaultProtocol type="Servlet 3.0" />                            (2)
+
+   <!-- Example configuration for a remote JBoss WildFly instance -->
+   <container qualifier="jboss" default="true">
+      <!-- If you want to use the JBOSS_HOME environment variable,
+           just delete the jbossHome property -->
+      <configuration>
+         <property name="jbossHome">/path/to/wildfly</property>
+      </configuration>
+   </container>
+
+</arquillian>
+------------------------------------------------------------------------
+<1> Arquillian deploys the test war, and doesn't write it to disk. For debugging, it can be very useful to see exactly what is in your war, so Arquillian allows you to export the war when the tests runs
+<2> Arquillian currently needs configuring to use the Servlet protocol to connect to the server
+
+Now, we need to look at how we select between containers in the `pom.xml`:
+
+.pom.xml
+[source,xml]
+------------------------------------------------------------------------
+<profile>
+    <!-- An optional Arquillian testing profile that executes tests
+        in your WildFly instance -->
+    <!-- This profile will start a new WildFly instance, and
+        execute the test, shutting it down when done -->
+    <!-- Run with: mvn clean test -Parq-managed -->
+    <id>arq-wildfly-managed</id>                                     (1)
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.as</groupId>
+            <artifactId>                                             (2)
+                wildfly-arquillian-container-managed
+            </artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</profile>
+
+<profile>
+    <!-- An optional Arquillian testing profile that executes
+        tests in a remote WildFly instance -->
+    <!-- Run with: mvn clean test -Parq-remote -->
+    <id>arq-wildfly-remote</id>
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.as</groupId>
+            <artifactId>                                             (3)
+                wildfly-arquillian-container-remote
+            </artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</profile>
+------------------------------------------------------------------------
+<1> The profile needs an id so we can activate from Eclipse or the command line
+<2> Arquillian decides which container to use depending on your classpath. Here we define the managed container
+<3> Arquillian decides which container to use depending on your classpath. Here we define the remote container
+
+And that's it! As you can see Arquillian delivers simple and true testing. You can concentrate on writing your test functionality, and run your tests in the same environment in which you will run your application.
+
+
+[TIP]
+========================================================================
+Arquillian also offers other containers, allowing you to run your tests
+against Weld Embedded (super fast, but your enterprise services are
+mocked), GlassFish, and more
+========================================================================
+
+That concludes our tour of the kitchensink quickstart. If you would like to use this project as a basis for your own application, you can of course copy this application sources and modify it.
+
+
+= Creating your own application
+:Author: Pete Muir
+
+[[Archetype-]]
+
+What we didn't tell you about the kitchensink quickstart is that it is generated from a Maven archetype. Using this archetype offers you the perfect opportunity to generate your own project.
+
+You can create a project from the archetype using Red Hat CodeReady Studio, or Eclipse with JBoss Tools. First, open up _JBoss Central_, if it isn't already open. Hit _Cmd-3_ (Mac) or _Ctrl-3_ (Windows, Linux) and type _JBoss Central_:
+
+image:gfx/Eclipse_JBoss_Central_1.png[]
+
+You will now be shown _JBoss Central_, an excellent place to find about all things JBoss!
+
+image:gfx/Eclipse_JBoss_Central_2.png[]
+
+To create a new project, based on the kitchensink quickstart, click on _Create Projects | Jakarta EE Web Project_:
+
+image:gfx/Eclipse_JavaEEWebProject_1.png[]
+
+Red Hat CodeReady Studio will then check that you have the necessary pre-requisites to create the project. If you are using CodeReady, then you should, otherwise, JBoss Tools will help you install the necessary pre-requisites. See link:http://jboss.org/tools[JBoss Tools] for more information.
+
+Hit _Next >_. On the next screen you can enter a project name, package for sample code, and finally select a target runtime:
+
+image:gfx/Eclipse_JavaEEWebProject_2.png[]
+
+Finally, hit _Finish_. You'll be presented with the _New Project Example_ dialog, in which you can simply hit _Finish_:
+
+image:gfx/Eclipse_JavaEEWebProject_3.png[]
+
+You should now have a brand new project:
+
+image:gfx/Eclipse_JavaEEWebProject_4.png[]
+
+Enjoy!
+
+
+To use the archetype to generate a new project, you should run:
+
+    mvn archetype:generate \
+        -DarchetypeArtifactId=jboss-javaee7-webapp-archetype \
+        -DarchetypeGroupId=org.jboss.spec.archetypes \
+        -DarchetypeVersion=7.1.1.CR2 \
+
+Maven will download the archetype and it's dependencies, and ask you some questions:
+
+------------------------------------------------------------------------
+$ > mvn archetype:generate \
+        -DarchetypeArtifactId=jboss-javaee7-webapp-archetype \
+        -DarchetypeGroupId=org.jboss.spec.archetypes \
+        -DarchetypeVersion=7.1.1.CR2
+[INFO] Scanning for projects...
+[INFO]
+[INFO] ------------------------------------------------------------------------
+[INFO] Building Maven Stub Project (No POM) 1
+[INFO] ------------------------------------------------------------------------
+[INFO]
+
+.........
+
+Define value for property 'groupId': : com.acme.corp                 (1)
+Define value for property 'artifactId': : acme-sales                 (2)
+Define value for property 'version':  1.0-SNAPSHOT: :                (3)
+Define value for property 'package':  com.acme.corp: :               (4)
+[INFO] Using property: name = Jakarta EE webapp project               (5)
+Confirm properties configuration:
+groupId: com.acme.corp
+artifactId: acme-sales
+version: 1.0-SNAPSHOT
+package: com.acme.corp
+name: Jakarta EE webapp project
+ Y: :
+[WARNING] CP Don't override file /Users/pmuir/tmp/acme-sales/.settings/org.eclipse.jdt.apt.core.prefs
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 14.774s
+[INFO] Finished at: Mon Jun 06 18:53:38 BST 2011
+[INFO] Final Memory: 7M/125M
+[INFO] ------------------------------------------------------------------------
+$ >
+------------------------------------------------------------------------
+<1> Enter the groupId you wish to use
+<2> Enter the artifactId you wish to use
+<3> Enter the version you wish to use, or just hit Enter if you wish to accept the default 1.0-SNAPSHOT
+<4> Enter the java package you wish to use, or just hit Enter if you wish to accept the default (which is copied from groupId ).
+<5> Finally, if you are happy with your choices, hit Enter and Maven will generate the project for you.
+
+And that's it, you now have a brand new project with the same functionality as `kitchensink`, but customized with your details.
+
+[IMPORTANT]
+========================================================================
+The archetype contains some sample code to get you started. If you
+would prefer a blank canvas, with only a project skeleton, then use
+`jboss-javaee7-webapp-blank-archetype` as your archetype id.
+========================================================================
+
+[IMPORTANT]
+.Prefer Enterprise Applications (EARs)?
+========================================================================
+The archetype generates a WAR project. With Jakarta EE, you can include
+EJBs in your WAR, meaning you won't need an EAR until you need to divide
+your code into modules. If you would like to create an EAR based project
+then use `jboss-javaee7-webapp-ear-archetype`
+as your archetype id (or if you want a blank EAR, then
+`jboss-javaee7-webapp-ear-blank-archetype`).
+========================================================================
+
+
+
+
+= More Resources
+
+[cols=","]
+|=======================================================================
+| link:Getting_Started_Guide{outfilesuffix}[Getting Started Guide] |The Getting Started Guide covers topics such as
+server layout (what you can configure where), data source definition,
+and using the web management interface.
+
+|=======================================================================
+
+:leveloffset: +1
+
+[[Developing_Jakarta_Faces_Project_Using,_Maven_and_IntelliJ]]
+= Developing Jakarta Faces Project Using JBoss AS7, Maven and IntelliJ
+
+
+JBoss AS7 is a very 'modern' application server that has very fast
+startup speed. So it's an excellent container to test your Jakarta Faces project.
+In this article, I'd like to show you how to use AS7, maven and IntelliJ
+together to develop your Jakarta Faces project.
+
+In this article I'd like to introduce the following things:
+
+* Create a project using Maven
+* Add Jakarta Faces into project
+* Writing Code
+* Add JBoss AS 7 deploy plugin into project
+* Deploy project to JBoss AS 7
+* Import project into IntelliJ
+* Add IntelliJ Jakarta Faces support to project
+* Add JBoss AS7 to IntelliJ
+* Debugging project with IntelliJ and AS7
+
+I won't explain many basic concepts about AS7, maven and IntelliJ in
+this article because there are already many good introductions on these
+topics. So before doing the real work, there some preparations should be
+done firstly:
+
+*Download JBoss AS7*
+
+It could be downloaded from here:
+https://www.jboss.org/jbossas/downloads/
+
+Using the latest release would be fine. When I'm writing this article
+the latest version is 7.1.1.Final.
+
+*Install Maven*
+
+Please make sure you have maven installed on your machine. Here is my
+environment:
+
+[source,options="nowrap"]
+----
+weli@power:~$ mvn -version
+Apache Maven 3.0.3 (r1075438; 2011-03-01 01:31:09+0800)
+Maven home: /usr/share/maven
+Java version: 1.6.0_33, vendor: Apple Inc.
+Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
+Default locale: en_US, platform encoding: MacRoman
+OS name: "mac os x", version: "10.8", arch: "x86_64", family: "mac"
+----
+
+*Get IntelliJ*
+
+In this article I'd like to use IntelliJ Ultimate Edition as the IDE for
+development, it's a commercial software and can be downloaded from:
+https://www.jetbrains.com/idea/
+
+The version I'm using is IntelliJ IDEA Ultimate 11.1
+
+After all of these prepared, we can dive into the real work:
+
+[[create-a-project-using-maven]]
+== Create a project using Maven
+
+Use the following maven command to create a web project:
+
+[source,options="nowrap"]
+----
+mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes \
+-DarchetypeArtifactId=maven-archetype-webapp \
+-DarchetypeVersion=1.0 \
+-DgroupId=net.bluedash \
+-DartifactId=jsfdemo \
+-Dversion=1.0-SNAPSHOT
+----
+
+If everything goes fine maven will generate the project for us:
+
+image:images/jsf/8108c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg[alt=jsf/8108c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg]
+
+The contents of the project is shown as above.
+
+[[add-Jakarta-Faces-into-project]]
+== Add Jakarta Faces into project
+
+The Jakarta Faces library is now included in maven repo, so we can let maven to
+manage the download for us. First is to add repository into our pom.xml:
+
+[source,java,options="nowrap"]
+----
+<repository>
+  <id>jvnet-nexus-releases</id>
+  <name>jvnet-nexus-releases</name>
+  <url>https://maven.java.net/content/repositories/releases/</url>
+</repository>
+----
+
+Then we add Jakarta Faces dependency into pom.xml:
+
+[source,xml,options="nowrap"]
+----
+<dependency>
+    <groupId>jakarta.faces</groupId>
+    <artifactId>jakarta.faces-api</artifactId>
+    <version>4.0.1</version>
+    <scope>provided</scope>
+</dependency>
+----
+
+Please note the 'scope' is 'provided', because we don't want to bundle
+the jsf.jar into the war produced by our project later, as JBoss AS7
+already have Jakarta Faces bundled in.
+
+Then we run 'mvn install' to update the project, and maven will download
+jsf-api for us automatically.
+
+[[writing-code]]
+== Writing Code
+
+Writing Jakarta Faces code in this article is trivial, so I've put written a
+project called 'jsfdemo' onto github:
+
+https://github.com/liweinan/jsfdemo
+
+Please clone this project into your local machine, and import it into
+IntelliJ following the steps described as above.
+
+[[add-jboss-as-7-deploy-plugin-into-project]]
+== Add JBoss AS 7 deploy plugin into project
+
+JBoss AS7 has provide a set of convenient maven plugins to perform daily
+tasks such as deploying project into AS7. In this step let's see how to
+use it in our project.
+
+We should put AS7's repository into pom.xml:
+
+[source,xml,options="nowrap"]
+----
+<repository>
+    <id>jboss-public-repository-group</id>
+    <name>JBoss Public Repository Group</name>
+    <url>https://repository.jboss.org/nexus/content/groups/public/</url>
+    <layout>default</layout>
+    <releases>
+        <enabled>true</enabled>
+        <updatePolicy>never</updatePolicy>
+    </releases>
+    <snapshots>
+        <enabled>true</enabled>
+        <updatePolicy>never</updatePolicy>
+    </snapshots>
+</repository>
+----
+
+And also the plugin repository:
+
+[source,java,options="nowrap"]
+----
+<pluginRepository>
+    <id>jboss-public-repository-group</id>
+    <name>JBoss Public Repository Group</name>
+    <url>https://repository.jboss.org/nexus/content/groups/public/</url>
+    <releases>
+        <enabled>true</enabled>
+    </releases>
+    <snapshots>
+        <enabled>true</enabled>
+    </snapshots>
+</pluginRepository>
+----
+
+And put jboss deploy plugin into 'build' section:
+
+[source,java,options="nowrap"]
+----
+<plugin>
+    <groupId>org.jboss.as.plugins</groupId>
+    <artifactId>jboss-as-maven-plugin</artifactId>
+    <executions>
+        <execution>
+            <phase>package</phase>
+            <goals>
+                <goal>deploy</goal>
+            </goals>
+        </execution>
+    </executions>
+</plugin>
+----
+
+I've put the final version pom.xml here to check whether your
+modification is correct:
+
+https://github.com/liweinan/jsfdemo/blob/master/pom.xml
+
+Now we have finished the setup work for maven.
+
+[[deploy-project-to-jboss-as-7]]
+== Deploy project to JBoss AS 7
+
+To deploy the project to JBoss AS7, we should start AS7 firstly. In
+JBoss AS7 directory, run following command:
+
+[source,java,options="nowrap"]
+----
+bin/standalone.sh
+----
+
+AS7 should start in a short time. Then let's go back to our project
+directory and run maven command:
+
+[source,java,options="nowrap"]
+----
+mvn -q jboss-as:deploy
+----
+
+Maven will use some time to download necessary components for a while,
+so please wait patiently. After a while, we can see the result:
+
+image:images/jsf/97d781c6be9db755aef80a110f1d9b29590610d6.jpg[alt=jsf/97d781c6be9db755aef80a110f1d9b29590610d6.jpg]
+
+And if you check the console output of AS7, you can see the project is
+deployed:
+
+image:images/jsf/2._java.jpg[alt=jsf/2._java.jpg]
+
+Now we have learnt how to create a Jakarta Faces project and deploy it to AS7
+without any help from graphical tools. Next let's see how to use
+IntelliJ IDEA to go on developing/debugging our project.
+
+[[import-project-into-intellij]]
+== Import project into IntelliJ
+
+Now it's time to import the project into IntelliJ. Now let's open
+IntelliJ, and choose 'New Project...':
+
+image:images/jsf/05222f3059e387df96ce04d2aea156c82af15096.jpg[alt=jsf/05222f3059e387df96ce04d2aea156c82af15096.jpg]
+
+The we choose 'Import project from external model':
+
+image:images/jsf/d68a0cdbc8c90db3db8af998f34616f73c7fe809.jpg[alt=jsf/d68a0cdbc8c90db3db8af998f34616f73c7fe809.jpg]
+
+Next step is choosing 'Maven':
+
+image:images/jsf/0b3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg[alt=jsf/0b3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg]
+
+Then IntelliJ will ask you the position of the project you want to
+import. In 'Root directory' input your project's directory and leave
+other options as default:
+
+image:images/jsf/2f192d02993248c97e2ac42ea8f3105d855e5cdf.jpg[alt=jsf/2f192d02993248c97e2ac42ea8f3105d855e5cdf.jpg]
+
+For next step, just click 'Next':
+
+image:images/jsf/3a3ee36eb581930822c4a66362795345f5d2f9a7.jpg[alt=jsf/3a3ee36eb581930822c4a66362795345f5d2f9a7.jpg]
+
+Finally click 'Finish':
+
+image:images/jsf/91e40cd0b1545cff4622857d6dc9959f96faf056.jpg[alt=jsf/91e40cd0b1545cff4622857d6dc9959f96faf056.jpg]
+
+Hooray! We've imported the project into IntelliJ now icon:smile-o[role="yellow"]
+
+[[adding-intellij-Jakarta-Faces-support-to-project]]
+== Adding IntelliJ Jakarta Faces support to project
+
+Let's see how to use IntelliJ and AS7 to debug the project. First we
+need to add 'Jakarta Faces' facet into project. Open project setting:
+
+image:images/jsf/8b8d0051f4f15033f17cb859c65f2d8481914678.jpg[alt=jsf/8b8d0051f4f15033f17cb859c65f2d8481914678.jpg]
+
+Click on 'Facets' section on left; Select 'Web' facet that we already
+have, and click the '+' on top, choose 'Jakarta Faces':
+
+image:images/jsf/e6947b84a56a698ca1392a440081bddfb5cae284.jpg[alt=jsf/e6947b84a56a698ca1392a440081bddfb5cae284.jpg]
+
+Select 'Web' as parent facet:
+
+image:images/jsf/6b2296be1bb2d8a81952caef0f025a139a39b381.jpg[alt=jsf/6b2296be1bb2d8a81952caef0f025a139a39b381.jpg]
+
+Click 'Ok':
+
+image:images/jsf/9988c572bad281146f405e9287f645a3da201885.jpg[alt=jsf/9988c572bad281146f405e9287f645a3da201885.jpg]
+
+Now we have enabled IntelliJ's Jakarta Faces support for project.
+
+[[add-jboss-as7-to-intellij]]
+== Add JBoss AS7 to IntelliJ
+
+Let's add JBoss AS7 into IntelliJ and use it to debug our project. First
+please choose 'Edit Configuration' in menu tab:
+
+image:images/jsf/dc0550785aae11f9d3eb439fdc0c51069affd25d.jpg[alt=jsf/dc0550785aae11f9d3eb439fdc0c51069affd25d.jpg]
+
+Click '+' and choose 'JBoss Server' -> 'Local':
+
+image:images/jsf/1231420c938f087030cb3dcd37237b5585beb154.jpg[alt=jsf/1231420c938f087030cb3dcd37237b5585beb154.jpg]
+
+Click 'configure':
+
+image:images/jsf/d7e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg[alt=jsf/d7e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg]
+
+and choose your JBoss AS7:
+
+image:images/jsf/f7b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg[alt=jsf/f7b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg]
+
+Now we need to add our project into deployment. Click the 'Deployment'
+tab:
+
+image:images/jsf/6802fb7e29283d0e064a7cc4466b918995ba5645.jpg[alt=jsf/6802fb7e29283d0e064a7cc4466b918995ba5645.jpg]
+
+Choose 'Artifact', and add our project:
+
+image:images/jsf/359484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg[alt=jsf/359484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg]
+
+Leave everything as default and click 'Ok', now we've added JBoss AS7
+into IntelliJ
+
+[[debugging-project-with-intellij-and-as7]]
+== Debugging project with IntelliJ and AS7
+
+Now comes the fun part. To debug our project, we cannot directly use the
+'debug' feature provided by IntelliJ right now(maybe in the future
+version this problem could be fixed). So now we should use the debugging
+config provided by AS7 itself to enable JPDA feature, and then use the
+remote debug function provided by IntelliJ to get things done. Let's
+dive into the details now:
+
+First we need to enable JPDA config inside AS7, open
+'bin/standalone.conf' and find following lines:
+
+[source,java,options="nowrap"]
+----
+# Sample JPDA settings for remote socket debugging
+#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
+----
+
+Enable the above config by removing the leading hash sign:
+
+[source,java,options="nowrap"]
+----
+# Sample JPDA settings for remote socket debugging
+JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
+----
+
+[IMPORTANT]
+
+With WildFly you can directly start the server in debug mode:
+
+[source,java,options="nowrap"]
+----
+bin/standalone.sh --debug --server-config=standalone.xml
+----
+
+Now we start AS7 in IntelliJ:
+
+image:images/jsf/52369d67f9117c924213de24dd6642b48e47a436.png[alt=jsf/52369d67f9117c924213de24dd6642b48e47a436.png]
+
+Please note we should undeploy the existing 'jsfdemo' project in AS7 as
+we've added by maven jboss deploy plugin before. Or AS7 will tell us
+there is already existing project with same name so IntelliJ could not
+deploy the project anymore.
+
+If the project start correctly we can see from the IntelliJ console
+window, and please check the debug option is enabled:
+
+image:images/jsf/eaac5cb1a836809ab29513346b527fe051b7c7ac.png[alt=jsf/eaac5cb1a836809ab29513346b527fe051b7c7ac.png]
+
+Now we will setup the debug configuration, click 'debug' option on menu:
+
+image:images/jsf/b8323caf6980c40c3d635db5e308b03847618d06.jpg[alt=jsf/b8323caf6980c40c3d635db5e308b03847618d06.jpg]
+
+Choose 'Edit Configurations':
+
+image:images/jsf/8327bbe0e83cb7170dd84767631c98956e91c42c.jpg[alt=jsf/8327bbe0e83cb7170dd84767631c98956e91c42c.jpg]
+
+Then we click 'Add' and choose Remote:
+
+image:images/jsf/7103da6b6323e515a03a04cafe111aa7c6b3169d.jpg[alt=jsf/7103da6b6323e515a03a04cafe111aa7c6b3169d.jpg]
+
+Set the 'port' to the one you used in AS7 config file 'standalone.conf':
+
+image:images/jsf/30bbef45137c7d45ae300ba8d551423d1feefc96.png[alt=jsf/30bbef45137c7d45ae300ba8d551423d1feefc96.png]
+
+Leave other configurations as default and click 'Ok'. Now we need to set
+breakpoints in project, let's choose TimeBean.java and set a breakpoint
+on 'getNow()' method by clicking the left side of that line of code:
+
+image:images/jsf/a96b7d32e04aa67956bd00a187f09b75a5af241e.jpg[alt=jsf/a96b7d32e04aa67956bd00a187f09b75a5af241e.jpg]
+
+Now we can use the profile to do debug:
+
+image:images/jsf/5ea6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png[alt=jsf/5ea6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png]
+
+If everything goes fine we can see the console output:
+
+image:images/jsf/1096ebbbf2b29e694e300e02a48d0fa4207cb746.jpg[alt=jsf/1096ebbbf2b29e694e300e02a48d0fa4207cb746.jpg]
+
+Now we go to web browser and see our project's main page, try to click
+on 'Get current time':
+
+image:images/jsf/5ad5d0216d3326e9bc29705042db59f11c3c1e70.png[alt=jsf/5ad5d0216d3326e9bc29705042db59f11c3c1e70.png]
+
+Then IntelliJ will popup and the code is pausing on break point:
+
+image:images/jsf/2499d43c0dce2cab72ba472c8452a2b57999ac84.jpg[alt=jsf/2499d43c0dce2cab72ba472c8452a2b57999ac84.jpg]
+
+And we could inspect our project now.
+
+[[conclusion]]
+== Conclusion
+
+In this article I've shown to you how to use maven to create a project
+using Jakarta Faces and deploy it in JBoss AS7, and I've also talked about the
+usage of IntelliJ during project development phase. Hope the contents
+are practical and helpful to you icon:smile-o[role="yellow"]
+
+[[references]]
+== References
+
+* _https://developer.jboss.org/wiki/JBossAS7UsingJPDAToDebugTheASSourceCode[JBoss
+AS7: Using JPDA to debug the AS source code]_
+* _https://developer.jboss.org/wiki/MavenGettingStarted-Developers[Maven
+Getting Started - Developers]_
+* _https://blog.v-s-f.co.uk/2010/09/jsf-2-1-project-using-eclipse-and-maven-2/[JSF
+2.1 project using Eclipse and Maven 2:http]_
+* _https://www.amazon.com/Practical-RichFaces-Max-Katz/dp/1430234490/ref=dp_ob_title_bk[Practical
+RichFaces]_
+* _https://javaserverfaces.java.net/download.html[Oracle Mojarra
+JavaServer Faces]_
+* _https://github.com/jbossas/jboss-as-maven-plugin[JBoss AS7 Maven
+Plugin]_
+
+[[Getting_Started_Developing_Applications_Presentation_Demo]]
+= Getting Started Developing Applications Presentation & Demo
+
+
+This document is a "script" for use with the quickstarts associated with
+the link:Getting_Started_Developing_Applications_Guide.html[Getting
+Started Developing Applications Guide]. It can be used as the basis for
+demoing/explaining the Jakarta EE programming model with JBoss AS 7.
+
+There is an associated presentation – JBoss AS - Getting Started
+Developing Applications – which can be used to introduce the Jakarta EE
+ecosystem.
+
+The emphasis here is on the programming model, not on OAM/dev-ops,
+performance etc.
+
+[[prerequisites-for-using-the-script]]
+== Prerequisites for using the script
+
+* JBoss AS 7 downloaded and installed
+* Eclipse Indigo with m2eclipse and JBoss Tools installed
+* The quickstarts downloaded and imported into Eclipse
+* Make sure `$JBOSS_HOME` is set.
+* Make sure `src/test/resources/arquillian.xml` has the correct path to
+your JBoss AS install for kitchensink
+* Make sure your font size is set in Eclipse so everyone can read the
+text!
+
+[[import-examples-into-eclipse-and-set-up-jboss-as]]
+== Import examples into Eclipse and set up JBoss AS
+
+TODO
+
+[[the-helloworld-quickstart]]
+== The Helloworld Quickstart
+
+[[introduction-1]]
+=== Introduction
+
+This quickstart is extremely basic, and is really useful for nothing
+more than showing than the app server is working properly, and our
+deployment mechanism is working. We recommend you use this quickstart to
+demonstrate the various ways you can deploy apps to JBoss AS 7.
+
+[[using-maven]]
+=== Using Maven
+
+. Start JBoss AS 7 from the console
++
+[source,options="nowrap"]
+----
+$ JBOSS_HOME/bin/standalone.sh
+----
+
+. Deploy the app using Maven
++
+[source,options="nowrap"]
+----
+$ mvn clean package jboss-as:deploy
+----
++
+[IMPORTANT]
+====
+The quickstarts use the jboss-as maven plugin to deploy and undeploy
+applications. This plugin uses the JBoss AS Native Java Detyped
+Management API to communicate with the server. The Detyped API is used
+by management tools to control an entire domain of servers, and exposes
+only a small number of types, allowing for backwards and forwards
+compatibility.
+====
+
+. Show the app has deployed in the terminal.
++
+Visit http://localhost:8080/jboss-as-helloworld
+
+. Undeploy the app using Maven
++
+[source,options="nowrap"]
+----
+$ mvn jboss-as:undeploy
+----
+
+[[using-the-command-line-interface-cli]]
+=== Using the Command Line Interface (CLI)
+
+.  Start JBoss AS 7 from the console (if not already running)
++
+[source,options="nowrap"]
+----
+$ JBOSS_HOME/bin/standalone.sh
+----
+
+. Build the war
++
+[source,options="nowrap"]
+----
+$ mvn clean package
+----
+
+. Start the CLI
++
+[source,options="nowrap"]
+----
+$ JBOSS_HOME/bin/jboss-admin.sh --connect
+----
++
+[IMPORTANT]
++
+The command line also uses the Deptyped Management API to communicate
+with the server. It's designed to be as "unixy" as possible, allowing
+you to "cd" into nodes, with full tab completion etc. The CLI allows you
+to deploy and undeploy applications, create Jakarta Messaging queues, topics etc.,
+create datasources (normal and XA). It also fully supports the domain
+node.
+
+. Deploy the app
++
+[source,options="nowrap"]
+----
+$ deploy target/jboss-as-helloworld.war
+----
+
+. Show the app has deployed
++
+[source,java,options="nowrap"]
+----
+$ undeploy jboss-as-helloworld.war
+----
+
+[[using-the-web-management-interface]]
+=== Using the web management interface
+
+.  Start JBoss AS 7 from the console (if not already running)
++
+[source,options="nowrap"]
+----
+$ JBOSS_HOME/bin/standalone.sh
+----
+
+. Build the war
++
+[source,options="nowrap"]
+----
+$ mvn clean package
+----
+
+. Open up the web management interface http://localhost:9990/console
++
+[IMPORTANT]
+====
+The web management interface offers the same functionality as the CLI
+(and again uses the Detyped Management API), but does so using a pretty
+GWT interface! You can set up virtual servers, interrogate sub systems
+and more.
+====
+
+. Navigate `Manage Deployments -> Add content`. Click on choose file and
+locate `helloworld/target/jboss-as-helloworld.war`.
+
+. Click `Next` and `Finish` to upload the war to the server.
+
+. Now click `Enable` and `Ok` to start the application
+
+. Switch to the console to show it deployed
+
+. Now click `Remove`
+
+[[using-the-filesystem]]
+=== Using the filesystem
+
+.  Start JBoss AS 7 from the console (if not already running)
++
+[source,options="nowrap"]
+----
+$ JBOSS_HOME/bin/standalone.sh
+----
+
+. Build the war
++
+[source,options="nowrap"]
+----
+$ mvn clean package
+----
++
+[IMPORTANT]
+====
+Of course, you can still use the good ol' file system to deploy. Just
+copy the file to `$JBOSS_HOME/standalone/deployments`.
+====
+
+. Copy the war
++
+[source,options="nowrap"]
+----
+$ cp target/jboss-as-helloworld.war $JBOSS_HOME/standalone/deployments
+----
+
+. Show the war deployed
++
+[IMPORTANT]
+====
+The filesystem deployment uses marker files to indicate the status of a
+deployment. As this deployment succeeded we get a
+`$JBOSS_HOME/standalone/deployments/jboss-as-helloworld.war.deployed`
+file. If the deployment failed, you would get a `.failed` file etc.
+====
+
+. Undeploy the war
++
+[source,options="nowrap"]
+----
+rm $JBOSS_HOME/standalone/deployments/jboss-as-helloworld.war.deployed
+----
+
+. Show the deployment stopping!
+
+. Start and stop the app server, show that the deployment really is gone!
++
+[IMPORTANT]
+====
+This gives you much more precise control over deployments than before
+====
+
+[[using-eclipse]]
+=== Using Eclipse
+
+. Add a JBoss AS server
+.. Bring up the Server view
+..  Right click in it, and choose `New -> Server`
+.  Choose JBoss AS 7.0 and hit Next
+..  Locate the server on your disc
+..  Hit Finish
+.  Start JBoss AS in Eclipse
+..  Select the server
+..  Click the Run button
+..  Deploy the app
+.  right click on the app, choose `Run As -> Run On Server`
+..  Select the AS 7 instance you want to use
+..  Hit finish
+.  Load the app at http://localhost:8080/jboss-as-helloworld
+
+[[digging-into-the-app]]
+=== Digging into the app
+
+.  Open up the helloworld quickstart in Eclipse, and open up
+`src/main/webapp`.
+.  Point out that we don't require a `web.xml` anymore!
+.  Show `beans.xml` and explain it's a marker file used to JBoss AS to
+enable CDI (open it, show that it is empty)
+.  Show `index.html`, and explain it is just used to kick the user into
+the app (open it, show the meta-refresh)
+.  Open up the `pom.xm` - and emphasise that it's pretty simple.
+..  There is no parent pom, everything for the build is *here*
+..  Show that we are enabling the JBoss Maven repo - explain you can do
+this in your POM or in system wide ( `settings.xml`)
+..  Show the `dependencyManagement` section. Here we import the JBoss AS
+7 Web Profile API. Explain that this gives you all the versions for all
+of the JBoss AS 7 APIs that are in the web profile. Explain we could
+also depend on this directly, which would give us the whole set of APIs,
+but that here we've decided to go for slightly tighter control and
+specify each dependency ourselves
+..  Show the import for CDI, JSR-250 and Servlet API. Show that these
+are all provided - we are depending on build in server implementations,
+not packaging this stuff!
+..  Show the plugin sections - nothing that exciting here, the war
+plugin is out of date and requires you to provide `web.xml` icon:smile-o[role="yellow"]
+, configure the JBoss AS Maven Plugin, set the Java version to 6.
+.  Open up `src/main/java` and open up the `HelloWorldServlet`.
+..  Point out the `@WebServlet` - explain this one annotation removes
+about 8 lines of XML - no need to separately map a path either. This is
+much more refactor safe
+..  Show that we can inject services into a Servlet
+..  Show that we use the service (line 41) +
+#Cmd-click on `HelloService`
+..  This is a CDI bean - very simple, no annotations required!
+..  Explain injection
+...  Probably used to string based bean resolution
+...  This is typesafe (refactor safe, take advantage of the compiler and
+the IDE - we just saw that!)
+...  When CDI needs to inject something, the first thing it looks at is
+the type - and if the type of the injection point is assignable from a
+bean, CDI will inject that bean
+
+[[the-numberguess-quickstart]]
+== The numberguess quickstart
+
+[[introduction-2]]
+=== Introduction
+
+This quickstart adds in a "complete" view layer into the mix. Jakarta EE
+ships with a Jakarta Faces. Jakarta Faces is a server side rendering, component orientated
+framework, where you write markup using an HTML like language, adding in
+dynamic behavior by binding components to beans in the back end. The
+quickstart also makes more use of CDI to wire the application together.
+
+[[run-the-app]]
+=== Run the app
+
+.  Start JBoss AS in Eclipse
+.  Deploy it using Eclipse - just right click on the app, choose
+`Run As -> Run On Server`
+.  Select the AS 7 instance you want to use
+.  Hit finish
+.  Load the app at http://localhost:8080/jboss-as-numberguess
+.  Make a few guesses
+
+[[deployment-descriptors-srcmainwebappweb-inf]]
+=== Deployment descriptors src/main/webapp/WEB-INF
+
+Emphasize the lack of them!
+
+No need to open any of them, just point them out
+
+.  `web.xml` - don't need it!
+.  `beans.xml` - as before, marker file
+.  `faces-config.xml` - nice feature from AS7 - we can just put
+`faces-config.xml` into the WEB-INF and it enables Jakarta Faces (inspiration from
+CDI)
+.  `pom.xml` we saw this before, this time it's the same but adds in
+Jakarta Faces API
+
+[[views]]
+=== Views
+
+.  `index.html` - same as before, just kicks us into the app
+.  `home.xhtml`
+..  Lines 19 - 25 – these are messages output depending on state of
+beans (minimise coupling between controller and view layer by
+interrogating state, not pushing)
+.  Line 20 – output any messages pushed out by the controller
+.  Line 39 - 42 – the input field is bound to the guess field on the
+game bean. We validate the input by calling a method on the game bean.
+.  Line 43 - 45 – the command button is used to submit the form, and
+calls a method on the game bean
+.  Line 48, 49, The reset button again calls a method on the game bean
+
+[[beans]]
+=== Beans
+
+.  `Game.java` – this is the main controller for the game. App has no
+persistence etc.
+..  `@Named` – As we discussed CDI is typesafe, (beans are injected by
+type) but sometimes need to access in a non-typesafe fashion. @Named
+exposes the Bean in EL - and allows us to access it from Jakarta Faces
+..  `@SessionScoped` – really simple app, we keep the game data in the
+session - to play two concurrent games, need two sessions. This is not a
+limitation of CDI, but simply keeps this demo very simple. CDI will
+create a bean instance the first time the game bean is accessed, and
+then always load that for you
+..  `@Inject maxNumber` – here we inject the maximum number we can
+guess. This allows us to externalize the config of the game
+..  `@Inject rnadomNumber` – here we inject the random number we need to
+guess. Two things to discuss here
+..  Instance - normally we can inject the object itself, but sometimes
+it's useful to inject a "provider" of the object (in this case so that
+we can get a new random number when the game is reset!). Instance allows
+us to `get()` a new instance when needed
+..  Qualifiers - now we have two types of Integer (CDI auto-boxes types
+when doing injection) so we need to disambiguate. Explain qualifiers and
+development time approach to disambiguation. You will want to open up
+`@MaxNumber` and `@Random` here.
+..  `@PostConstruct` – here is our reset method - we also call it on
+startup to set up initial values. Show use of `Instance.get()`.
+.  `Generator.java` This bean acts as our random number generator.
+.  `@ApplicationScoped` explain about other scopes available in CDI +
+extensibility.
+..  `next()` Explain about producers being useful for determining bean
+instance at runtime
+..  `getMaxNumber()` Explain about producers allowing for loose coupling
+
+[[the-login-quickstart]]
+== The login quickstart
+
+[[introduction-3]]
+=== Introduction
+
+The login quickstart builds on the knowledge of CDI and Jakarta Faces we have got
+from numberguess. New stuff we will learn about is how to use Jakarta Persistence to
+store data in a database, how to use Jakarta Transactions to control transactions, and
+how to use Jakarta Enterprise Beans for declarative TX control.
+
+[[run-the-app-1]]
+=== Run the app
+
+.  Start JBoss AS in Eclipse
+.  Deploy it using Eclipse - just right click on the app, choose
+`Run As -> Run On Server`
+.  Select the AS 7 instance you want to use
+.  Hit finish
+.  Load the app at http://localhost:8080/jboss-as-login
+.  Login as admin/admin
+.  Create a new user
+
+[[deployment-descriptors]]
+=== Deployment Descriptors
+
+.  Show that we have the same ones we are used in `src/main/webapp` –
+`beans.xml`, `faces-config.xml`
+.  We have a couple of new ones in `src/main/resources`
+..  `persistence.xml`. Not too exciting. We are using a datasource that
+AS7 ships with. It's backed by the H2 database and is purely a sample
+datasource to use in sample applications. We also tell Hibernate to
+auto-create tables - as you always have.
+..  `import.sql` Again, the same old thing you are used to in Hibernate
+- auto-import data when the app starts.
+.  `pom.xml` is the same again, but just adds in dependencies for Jakarta Persistence,
+Jakarta Transactions and Jakarta Enterprise Beans
+
+[[views-1]]
+=== Views
+
+.  `template.xhtml` One of the updates added to Jakarta Faces was templating
+ability. We take advantage of that in this app, as we have multiple
+views
+..  Actually nothing too major here, we define the app "title" and we
+could easily define a common footer etc. (we can see this done in the
+kitchensink app)
+..  The `ui:insert` command inserts the actual content from the
+templated page. +
+# `home.xhtml`
+..  Uses the template
+..  Has some input fields for the login form, button to login and
+logout, link to add users.
+..  Binds fields to credentials bean}}
+..  Buttons link to login bean which is the controller
+.  `users.xhtml`
+..  Uses the template
+..  Displays all users using a table
+..  Has a form with input fields to add users.
+..  Binds fields to the newUser bean
+..  Methods call on userManager bean
+
+[[beans-1]]
+=== Beans
+
+.  `Credentials.java` Backing bean for the login form field, pretty
+trivial. It's request scoped (natural for a login field) and named so we
+can get it from Jakarta Faces.
+.  `Login.java`
+..  Is session scoped (a user is logged in for the length of their
+session or until they log out}}
+..  Is accessible from EL
+..  Injects the current credentials
+..  Uses the userManager service to load the user, and sends any
+messages to Jakarta Faces as needed
+..  Uses a producer method to expose the @LoggedIn user (producer
+methods used as we don't know which user at development time)
+.  `User.java` Is a pretty straightforward Jakarta Persistence entity. Mapped with
+`@Entity`, has an natural id.
+.  `UserManager.java` This is an interface, and by default we use the
+ManagedBean version, which requires manual TX control
+.  `ManagedBeanUserManager.java` - accessible from EL, request scoped.
+..  Injects a logger (we'll see how that is produced in a minute)
+..  Injects the entity manager (again, just a min)
+..  Inject the UserTransaction (this is provided by CDI)
+..  `getUsers()` standard Jakarta Persistence-QL that we know and love - but lots of
+ugly TX handling code.
+..  Same for `addUser()` and `findUser()` methods - very simple Jakarta Persistence
+but...
+..  Got a couple of producer methods.
+...  `getUsers()` is obvious - loads all the users in the database. No
+ambiguity - CDI takes into account generic types when injecting. Also
+note that CDI names respect JavaBean naming conventions
+...  `getNewUser()` is used to bind the new user form to from the view
+layer - very nice as it decreases coupling - we could completely change
+the wiring on the server side (different approach to creating the
+newUser bean) and no need to change the view layer.
+.  `EJBUserManager.java`
+..  It's an alternative – explain alternatives, and that they allow
+selection of beans at deployment time
+..  Much simple now we have declarative TX control.
+..  Start to see how we can introduce Jakarta Enterprise Beans to get useful enterprise
+services such as declarative TX control
+.  `Resources.java`
+..  `{EntityManager}` - explain resource producer pattern
+
+[[the-kitchensink-quickstart]]
+== The kitchensink quickstart
+
+[[introduction-4]]
+=== Introduction
+
+The kitchensink quickstart is generated from an archetype available for
+JBoss AS (tell people to check the
+link:/pages/createpage.action?spaceKey=WFLY&title=Getting+Started+Developing+Applications&linkCreation=true&fromPageId=557131[Getting
+Started Developing Applications] Guide for details). It demonstrates
+CDI, Jakarta Faces, Jakarta Enterprise Beans, Jakarta Persistence (which we've seen before) and Jakarta RESTful Web Services and Bean
+Validation as well. We add in Arquillian for testing.
+
+[[run-the-app-2]]
+=== Run the app
+
+.  Start JBoss AS in Eclipse
+.  Deploy it using Eclipse - just right click on the app, choose
+`Run As -> Run On Server`
+.  Select the AS 7 instance you want to use
+.  Hit finish
+.  Load the app at http://localhost:8080/jboss-as-kitchensink
+.  Register a member - make sure to enter an invalid email and phone -
+show Jakarta Bean Validation at work
+.  Click on the member URL and show the output from Jakarta RESTful Web Services
+
+[[Jakarta-Bean-Validation]]
+=== Jakarta Bean Validation
+
+.  Explain the benefits of Jakarta Bean Validation - need your data always
+valid (protect your data) AND good errors for your user. BV allows you
+to express once, apply often.
+.  `index.xhtml`
+..  Show the input fields – no validators attached
+..  Show the message output
+.  `Member.java`
+...  Hightlight the various validation annotations
+.  Jakarta EE automatically applies the validators in both the persistence
+layer and in your views
+
+[[Jakarta-RESTful-Web-Services]]
+=== Jakarta RESTful Web Services
+
+.  `index.xhtml` - Show that URL generation is just manual
+.  `JaxRsActivator.java` - simply activates Jakarta RESTful Web Services
+.  `Member.java` - add Jakarta XML Binding annotation to make Jakarta XML Binding process the class properly
+.  `MemberResourceRESTService.java`
+..  `@Path` sets the Jakarta RESTful Web Services resource
+..  Jakarta RESTful Web Services services can use injection
+..  `@GET` methods are auto transformed to XML using Jakarta XML Binding
+.  And that is it!
+
+[[arquillian-getting-started]]
+=== Arquillian
+
+.  Make sure JBoss AS is running
++
+[source,options="nowrap"]
+----
+mvn clean test -Parq-jbossas-remote
+----
+
+.  Explain the difference between managed and remote
+
+. Make sure JBoss AS is stopped
++
+[source,options="nowrap"]
+----
+mvn clean test -Parq-jbossas-managed
+----
+
+. Start JBoss AS in Eclipse
+
+. Update the project to use the `arq-jbossas-remote` profile
+
+. Run the test from Eclipse
++
+Right click on test, `Run As -> JUnit Test`
++
+`MemberRegistrationTest.java`
+
+.  Discuss micro deployments
+.  Explain Arquilian allows you to use injection
+.  Explain that Arquillian allows you to concentrate just on your test
+logic
+
+NOTE: References in this document to CDI refer to Jakarta Contexts and Dependency Injection unless otherwise noted.
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Getting_Started_Guide.html b/latest/Getting_Started_Guide.html new file mode 100644 index 000000000..9e1aabf5d --- /dev/null +++ b/latest/Getting_Started_Guide.html @@ -0,0 +1,1739 @@ + + + + + + + + +Getting Started Guide + + + + + + + +
+
+
+
+

© 2017 The original authors.

+
+ +
+
+
+

1. Getting Started with WildFly 29

+
+
+

WildFly 29 is the latest release in a series of JBoss open-source +application server offerings. WildFly 29 is an exceptionally fast, +lightweight and powerful implementation of the Jakarta +Enterprise Edition 10 specifications. WildFly’s modular architecture built on the +JBoss Modules and JBoss Modular Service Container projects enables services on-demand when your +application requires them. The table below lists the technologies available in WildFly 29 +server configuration profiles.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Jakarta EE Platform TechnologyJakarta EE Full PlatformJakarta EE Web +ProfileWildFly 29 Full ConfigurationWildFly 29 Default Configuration

Jakarta Activation 2.1

X

 — 

X

X

Jakarta Annotations 2.1

X

X

X

X

Jakarta Authentication 3.0

X

X

X

X

Jakarta Authorization 2.1

X

 — 

X

 — 

Jakarta Batch 2.1

X

 — 

X

 — 

Jakarta Bean Validation 3.0

X

X

X

X

Jakarta Concurrency 3.0

X

X

X

X

Jakarta Connectors 2.1

X

 — 

X

X

Jakarta Contexts and Dependency Injection 4.0

X

X

X

X

Jakarta Debugging Support for Other Languages 2.0

X

X

X

X

Jakarta Dependency Injection 2.0

X

X

X

X

Jakarta Enterprise Beans 4.0

X

X(Lite)

X

X(Lite)

Jakarta Enterprise Web Services 2.0

Optional

 — 

X

X

Jakarta Expression Language 5.0

X

X

X

X

Jakarta Interceptors 2.1

X

X

X

X

Jakarta JSON Binding 3.0

X

X

X

X

Jakarta JSON Processing 2.1

X

X

X

X

Jakarta Mail 2.1

X

 — 

X

X

Jakarta Messaging 3.1

X

 — 

X

 — 

Jakarta Persistence 3.1

X

X

X

X

Jakarta RESTful Web Services 3.1

X

X

X

X

Jakarta Security 3.0

X

X

X

X

Jakarta Faces 4.0

X

X

X

X

Jakarta Server Pages 3.1

X

X

X

X

Jakarta Servlet 6.0

X

X

X

X

Jakarta SOAP with Attachments 1.3

Optional

 — 

X

X

Jakarta Standard Tag Library 3.0

X

X

X

X

Jakarta Transactions 2.0

X

X

X

X

Jakarta WebSocket 2.1

X

X

X

X

Jakarta XML Binding 4.0

Optional

X

X

X

Jakarta XML Web Services 4.0

Optional

 — 

X

X

+
+

WildFly 29 also provides support for a number of MicroProfile technologies:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MicroProfile TechnologyWildFly 29 Default ConfigurationWildFly 29 MicroProfile Configuration

MicroProfile Config 3.0

X

X

MicroProfile Fault Tolerance 4.0

 — 

X

MicroProfile Health 4.0

 — 

X

MicroProfile JWT Authentication 2.0

X

X

MicroProfile Metrics 4.0 (deprecated in WildFly; will be replaced by Micrometer)

 — 

X

MicroProfile OpenAPI 3.0

 — 

X

MicroProfile Reactive Messaging 3.0

 — 

 — 

MicroProfile Streams Operators 3.0

 — 

 — 

MicroProfile Rest Client 3.0

X

X

+
+

Missing ActiveMQ Artemis and Jakarta Messaging?

+
+
+ + + + + +
+ + +WildFly’s default configuration provides Jakarta EE Web Profile support and thus +doesn’t include Jakarta Messaging (provided by ActiveMQ Artemis). As noted in the +WildFly Configurations section, other configuration +profiles do provide all features required by the Jakarta EE Full Platform. If you +want to use messaging, make sure you +start the server using an alternate configuration +that provides the Jakarta EE Full Platform. +
+
+
+

This document provides a quick overview on how to download and get +started using WildFly 29 for your application development. For in-depth +content on administrative features, refer to the WildFly 29 Admin Guide.

+
+
+
+
+

2. Requirements

+
+
+
    +
  • +

    Java SE 11 or later. We recommend that you use the latest available update +of the current long-term support Java release.

    +
  • +
+
+
+
+
+

3. Installation Options

+
+
+

There are a number of ways you can install WildFly, including unzipping our traditional download zip, provisioning a +custom installation using Galleon, or building a bootable jar. There are also two variants of the server: the standard "WildFly" variant and the tech-preview "WildFly Preview" variant used to showcase things in the works for future release of standard WildFly.

+
+
+

The Installation Guide +helps you identify the kind of WildFly installation that best fits your application’s deployment needs. In this guide +we’ll focus on the common approach of installing the download zip of standard WildFly.

+
+
+

3.1. Download

+
+

WildFly 29 distributions can be obtained from:

+
+ +
+

Standard WildFly 29 provides a single distribution available in zip or tar file +formats.

+
+
+
    +
  • +

    wildfly-29.0.0.Final.zip

    +
  • +
  • +

    wildfly-29.0.0.Final.tar.gz

    +
  • +
+
+
+

WildFly Preview 29 also provides a single distribution available in zip or tar file +formats.

+
+
+
    +
  • +

    wildfly-preview-29.0.0.Final.zip

    +
  • +
  • +

    wildfly-preview-29.0.0.Final.tar.gz

    +
  • +
+
+
+
+

3.2. Installation

+
+

Simply extract your chosen download to the directory of your choice. You +can install WildFly 29 on any operating system that supports the zip or +tar formats. Refer to the Release Notes for additional information +related to the release.

+
+
+
+
+
+

4. WildFly - A Quick Tour

+
+
+

Now that you’ve downloaded WildFly 29, the next thing to discuss is the +layout of the distribution and explore the server directory structure, +key configuration files, log files, user deployments and so on. It’s +worth familiarizing yourself with the layout so that you’ll be able to +find your way around when it comes to deploying your own applications.

+
+
+

4.1. WildFly Directory Structure

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DIRECTORYDESCRIPTION

appclient

Configuration files, deployment content, and writable areas +used by the application client container run from this installation.

bin

Start up scripts, start up configuration files and various command +line utilities like elytron-tool, add-user and Java diagnostic report available +for Unix and Windows environments

bin/client

Contains a client jar for use by non-maven based clients.

docs/schema

XML schema definition files

docs/examples/configs

Example configuration files representing +specific use cases

domain

Configuration files, deployment content, and writable areas +used by the domain mode processes run from this installation.

modules

WildFly is based on a modular classloading architecture. +The various modules used in the server are stored here.

standalone

Configuration files, deployment content, and writable areas +used by the single standalone server run from this installation.

welcome-content

Default Welcome Page content

+
+

4.1.1. Standalone Directory Structure

+
+

In " standalone " mode each WildFly 29 server instance is an +independent process (similar to previous JBoss AS versions; e.g., 3, 4, +5, or 6). The configuration files, deployment content and writable areas +used by the single standalone server run from a WildFly installation are +found in the following subdirectories under the top level "standalone" +directory:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DIRECTORYDESCRIPTION

configuration

Configuration files for the standalone server that runs +off of this installation. All configuration information for the running +server is located here and is the single place for configuration +modifications for the standalone server.

data

Persistent information written by the server to survive a restart +of the server

deployments

End user deployment content can be placed in this +directory for automatic detection and deployment of that content into +the server’s runtime.NOTE: The server’s management API is recommended +for installing deployment content. File system based deployment scanning +capabilities remain for developer convenience.

lib/ext

Location for installed library jars referenced by applications +using the Extension-List mechanism

log

standalone server log files

tmp

location for temporary files written by the server

tmp/auth

Special location used to exchange authentication tokens with +local clients so they can confirm that they are local to the running AS +process.

+
+
+

4.1.2. Domain Directory Structure

+
+

A key feature of WildFly 29 is the managing multiple servers from a +single control point. A collection of multiple servers are referred to +as a " domain ". Domains can span multiple physical (or virtual) +machines with all WildFly instances on a given host under the control of +a Host Controller process. The Host Controllers interact with the Domain +Controller to control the lifecycle of the WildFly instances running on +that host and to assist the Domain Controller in managing them. The +configuration files, deployment content and writeable areas used by +domain mode processes run from a WildFly installation are found in the +following subdirectories under the top level "domain" directory:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DIRECTORYDESCRIPTION

configuration

Configuration files for the domain and for the Host +Controller and any servers running off of this installation. All +configuration information for the servers managed wtihin the domain is +located here and is the single place for configuration information.

content

an internal working area for the Host Controller that controls +this installation. This is where it internally stores deployment +content. This directory is not meant to be manipulated by end users.Note +that "domain" mode does not support deploying content based on scanning +a file system.

lib/ext

Location for installed library jars referenced by applications +using the Extension-List mechanism

log

Location where the Host Controller process writes its logs. The +Process Controller, a small lightweight process that actually spawns the +other Host Controller process and any Application Server processes also +writes a log here.

servers

Writable area used by each Application Server instance that +runs from this installation. Each Application Server instance will have +its own subdirectory, created when the server is first started. In each +server’s subdirectory there will be the following subdirectories:data — information written by the server that needs to survive a restart of the +serverlog — the server’s log filestmp — location for temporary files +written by the server

tmp

location for temporary files written by the server

tmp/auth

Special location used to exchange authentication tokens with +local clients so they can confirm that they are local to the running AS +process.

+
+
+
+

4.2. WildFly 29 Configurations

+
+

4.2.1. Standalone Server Configurations

+
+
    +
  • +

    standalone.xml (default)

    +
    +
      +
    • +

      Jakarta web profile certified configuration with +the required technologies plus those noted in the table above.

      +
    • +
    +
    +
  • +
  • +

    standalone-ha.xml

    +
    +
      +
    • +

      Jakarta web profile certified configuration with +high availability

      +
    • +
    +
    +
  • +
  • +

    standalone-full.xml

    +
    +
      +
    • +

      Jakarta Full Platform certified configuration +including all the required technologies

      +
    • +
    +
    +
  • +
  • +

    standalone-full-ha.xml

    +
    +
      +
    • +

      Jakarta Full Platform certified configuration with +high availability

      +
    • +
    +
    +
  • +
  • +

    standalone-microprofile.xml

    +
    +
      +
    • +

      A configuration oriented toward microservices, providing our +MicroProfile platform implementations combined with Jakarta RESTful Web Services and +technologies Jakarta RESTful Web Services applications commonly use to integrate with +external services.

      +
    • +
    +
    +
  • +
  • +

    standalone-microprofile-ha.xml

    +
    +
      +
    • +

      A configuration oriented toward microservices, similar to +standalone-microprofile.xml but with support for high availability +web sessions and distributed Hibernate second level caching.

      +
    • +
    +
    +
  • +
+
+
+
+

4.2.2. Domain Server Configurations

+
+
    +
  • +

    domain.xml

    +
    +
      +
    • +

      Jakarta full and web profiles available with or +without high availability

      +
    • +
    +
    +
  • +
+
+
+

Important to note is that the domain and standalone modes +determine how the servers are managed not what capabilities they +provide.

+
+
+
+
+
+
+

5. Starting WildFly 29

+
+
+

To start WildFly 29 using the default web profile configuration in " +standalone" mode, change directory to $JBOSS_HOME/bin.

+
+
+
+
./standalone.sh
+
+
+
+

To start the default web profile configuration using domain management +capabilities,

+
+
+
+
./domain.sh
+
+
+
+

5.1. Starting WildFly with an Alternate Configuration

+
+

If you choose to start your server with one of the other provided +configurations, they can be accessed by passing the --server-config +argument with the server-config file to be used.

+
+
+

To use the Full Platform with clustering capabilities, use the following +syntax from $JBOSS_HOME/bin:

+
+
+
+
./standalone.sh --server-config=standalone-full-ha.xml
+
+
+
+

Similarly to start an alternate configuration in domain mode:

+
+
+
+
./domain.sh --domain-config=my-domain-configuration.xml
+
+
+
+

Alternatively, you can create your own selecting the additional +subsystems you want to add, remove, or modify.

+
+
+
+

5.2. Test Your Installation

+
+

After executing one of the above commands, you should see output similar +to what’s shown below.

+
+
+
+
=========================================================================
+ 
+  JBoss Bootstrap Environment
+ 
+  JBOSS_HOME: /opt/wildfly-10.0.0.Final
+ 
+  JAVA: java
+ 
+  JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=com.yourkit,org.jboss.byteman -Djava.awt.headless=true
+ 
+=========================================================================
+ 
+11:46:11,161 INFO  [org.jboss.modules] (main) JBoss Modules version 1.5.1.Final
+11:46:11,331 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final
+11:46:11,391 INFO  [org.jboss.as] (MSC service thread 1-6) WFLYSRV0049: WildFly Full 10.0.0.Final (WildFly Core 2.0.10.Final) starting
+<snip>
+11:46:14,300 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.0.0.Final (WildFly Core 2.0.10.Final) started in 1909ms - Started 267 of 553 services (371 services are lazy, passive or on-demand)
+
+
+
+

As with previous WildFly releases, you can point your browser to +http://localhost:8080 (if using the default configured http port) +which brings you to the Welcome Screen:

+
+
+

wildfly.png

+
+
+

From here you can access links to the WildFly community documentation +set, stay up-to-date on the latest project information, have a +discussion in the user forum and access the enhanced web-based +Administration Console. Or, if you uncover a defect while using WildFly, +report an issue to inform us (attached patches will be reviewed). This +landing page is recommended for convenient access to information about +WildFly 29 but can easily be replaced with your own if desired.

+
+
+
+
+
+

6. Managing your WildFly 29

+
+
+

WildFly 29 offers two administrative mechanisms for managing your +running instance:

+
+
+
    +
  • +

    a web-based Administration Console

    +
  • +
  • +

    a command-line interface

    +
  • +
+
+
+

The Admin Guide covers the details on managing your WildFly +installation. Here we’ll just touch on some of the basics.

+
+
+

6.1. Authentication

+
+

By default WildFly 29 is distributed with security enabled for the +management interfaces. This means that before you connect using the +administration console or remotely using the CLI you will need to add a +new user. This can be achieved simply by using the add-user.sh script +in the bin folder.

+
+
+

After starting the script you will be guided through the process to add +a new user: -

+
+
+
+
./add-user.sh
+What type of user do you wish to add?
+ a) Management User (mgmt-users.properties)
+ b) Application User (application-users.properties)
+(a):
+
+
+
+

In this case a new user is being added for the purpose of managing the +servers so select option a.

+
+
+

You will then be prompted to enter the details of the new user being +added: -

+
+
+
+
Enter the details of the new user to add.
+Realm (ManagementRealm) :
+Username :
+Password :
+Re-enter Password :
+
+
+
+

It is important to leave the name of the realm as 'ManagementRealm' as +this needs to match the name used in the server’s configuration. For the +remaining fields enter the new username, password and password +confirmation.

+
+
+

Users can be associated with arbitrary groups of your choosing, so you will be prompted if you would like +to do this.

+
+
+
+
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]:
+
+
+
+

Groups can be useful for simplified administration of things like access permissions, but for simply getting +started, leaving this blank is fine.

+
+
+

Provided there are no errors in the values entered you will then be +asked to confirm that you want to add the user, the user will be written +to the properties files used for authentication and a confirmation +message will be displayed.

+
+
+

The modified time of the properties files are inspected at the time of +authentication and the files reloaded if they have changed. For this +reason you do not need to re-start the server after adding a new user.

+
+
+

Finally, you will be asked whether the account you’ve added is going to be to used +to identify one WildFly process to another, typically in a WildFly managed domain:

+
+
+
+
Is this new user going to be used for one AS process to connect to another AS process?
+e.g. for a secondary host controller connecting to the primary or for a Remoting connection for server to server Jakarta Enterprise Beans calls.
+yes/no?
+
+
+
+

The answer for this should be no; the account you are adding here is for use by a human administrator.

+
+
+
+

6.2. Administration Console

+
+

To access the web-based Administration Console, simply follow the link +from the Welcome Screen. To directly access the Management Console, +point your browser at:

+
+ +
+ + + + + +
+ + +port 9990 is the default port configured. +
+
+
+
+
<management-interfaces>
+    <http-interface http-authentication-factory="management-http-authentication">
+        <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
+        <socket-binding http="management-http"/>
+    </http-interface>
+</management-interfaces>
+
+
+
+

If you modify the management-http socket binding in your running +configuration: adjust the above command accordingly. If such +modifications are made, then the link from the Welcome Screen will also +be inaccessible.

+
+
+
+

6.3. Command-Line Interface

+
+

If you prefer to manage your server from the command line (or batching), +the jboss-cli.sh script provides the same capabilities available via +the web-based UI. This script is accessed from $JBOSS_HOME/bin +directory; e.g.,

+
+
+
+
$JBOSS_HOME/bin/jboss-cli.sh --connect
+Connected to standalone controller at localhost:9990
+
+
+
+

Notice if no host or port information provided, it will default to +localhost:9990.

+
+
+

When running locally to the WildFly process the CLI will silently +authenticate against the server by exchanging tokens on the file system, +the purpose of this exchange is to verify that the client does have +access to the local file system. If the CLI is connecting to a remote +WildFly installation then you will be prompted to enter the username and +password of a user already added to the realm.

+
+
+

Once connected you can add, modify, remove resources and deploy or +undeploy applications. For a complete list of commands and command +syntax, type help once connected.

+
+
+
+

6.4. Deploying an Application

+
+

WildFly provides a number of ways you can deploy your application into the server. +These are covered in detail in the Admin Guide.

+
+
+

If you are running a standalone WildFly server, the simplest way to deploy +your application is to copy the application archive (war/ear/jar) into the $JBOSS_HOME/standalone/deployments +directory in the server installation. The server’s deployment-scanner subsystem will detect +the new file and deploy it.

+
+
+ + + + + +
+ + +If you are running a WildFly managed domain, the deployment-scanner subsystem is not +available so you will need to use the CLI or web console to deploy your application. For more, +see the Admin Guide. +
+
+
+
+

6.5. Modifying the Example DataSource

+
+

As with previous JBoss application server releases, a default data +source, ExampleDS , is configured using the embedded H2 database for +developer convenience. There are two ways to define datasource +configurations:

+
+
+
    +
  1. +

    as a module

    +
  2. +
  3. +

    as a deployment

    +
  4. +
+
+
+

In the provided configurations, H2 is configured as a module. The module +is located in the $JBOSS_HOME/modules/com/h2database/h2 directory. The +H2 datasource configuration is shown below.

+
+
+
+
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
+    <datasources>
+        <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS">
+            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
+            <driver>h2</driver>
+            <pool>
+                <min-pool-size>10</min-pool-size>
+                <max-pool-size>20</max-pool-size>
+                <prefill>true</prefill>
+            </pool>
+            <security>
+                <user-name>sa</user-name>
+                <password>sa</password>
+            </security>
+        </datasource>
+        <xa-datasource jndi-name="java:jboss/datasources/ExampleXADS" pool-name="ExampleXADS">
+           <driver>h2</driver>
+           <xa-datasource-property name="URL">jdbc:h2:mem:test</xa-datasource-property>
+           <xa-pool>
+                <min-pool-size>10</min-pool-size>
+                <max-pool-size>20</max-pool-size>
+                <prefill>true</prefill>
+           </xa-pool>
+           <security>
+                <user-name>sa</user-name>
+                <password>sa</password>
+           </security>
+        </xa-datasource>
+        <drivers>
+            <driver name="h2" module="com.h2database.h2">
+                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
+            </driver>
+        </drivers>
+  </datasources>
+</subsystem>
+
+
+
+

The datasource subsystem is provided by the +IronJacamar project. For a detailed +description of the available configuration properties, please consult +the project documentation.

+
+ +
+
+

6.6. Configure Logging in WildFly

+
+

WildFly logging can be configured with the web console or the command +line interface. You can get more detail on the Logging +Configuration page.

+
+
+

Turn on debugging for a specific category with the CLI:

+
+
+
+
/subsystem=logging/logger=org.jboss.as:add(level=DEBUG)
+
+
+
+

In the example above the org.jboss.as log category was configured. Use a different value +for the logger key to configure a different log category.

+
+
+

By default, the server.log is configured to include all levels in its +log output. In the above example we changed the console to also display +debug messages.

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Getting_Started_on_OpenShift.html b/latest/Getting_Started_on_OpenShift.html new file mode 100644 index 000000000..4528a4428 --- /dev/null +++ b/latest/Getting_Started_on_OpenShift.html @@ -0,0 +1,887 @@ + + + + + + + +Getting Started with WildFly on OpenShift + + + + + + + +
+
+
+
+

This guide is designed to assist you through obtaining an OpenShift instance and installing WildFly, complete with a deployed application. It is not intended to cover all possible configurations, as links to more detailed documentation will be provided.

+
+
+
+
+

Obtaining an OpenShift Instance

+
+

There are many options available for running OpenShift. This guide will mention two.

+
+
+
Code-ready-containers
+
+

If you wish to run a local development environment, then CRC is likely to be a good starting point.

+
+
+
+
Developer sandbox
+
+

The Red Hat OpenShift Developer Sandbox is a hosted environment, and is free to use for development purposes.

+
+
+

This guide will focus on usage of the hosted developer sandbox environment. The sandbox should be provisioned from the page above before proceeding further.

+
+
+
+
+

OpenShift

+
+

In order to use OpenShift effectively, in addition to a running instance, you will need the OpenShift web console. To access this tool, from your OpenShift sandbox click the terminal icon (i.e. >_) at the top right of your sandbox portal. A terminal tab will pop up at the bottom of the page.

+
+
+

It is also possible to use the OpenShift command line terminal locally (oc command). This may be obtained from your package manager or downloaded from your OpenShift sandbox (in your control panel, clicking on the question mark icon at the top right of the console presents a drop-down menu where Command line tools takes you to the latest version of oc).

+
+
+ + + + + +
+ + +If you have already installed oc on your machine, make sure that its version matches the version of the sandbox. You can use oc version to check both the version of oc and the version of the sandbox. Another way to check the version of the sandbox is by clicking on the question mark icon at the top right of the web console and then clicking on About in the drop-down menu: the OpenShift version will be listed there. +
+
+
+

Once you have downloaded and installed/unpacked the client, you can authenticate to your running sandbox OpenShift instance by using the Copy Login Command from the upper right menu in the sandbox user-interface (your username is displayed there.)

+
+
+

Example:

+
+
+
+
oc login --token=sha256~b-3av_0Lp8wmJu0G3WXzdfds34454mkvWjRRESd_jHTA --server=https://api.sandbox.x8i5.p1.openshiftapps.com:6443
+
+
+
+

We’ll be using the someuser-dev project for this example (someuser should be replaced with the username of the user):

+
+
+
+
oc project someuser-dev
+Already on project "someuser-dev" on server "https://api.sandbox.x8i5.p1.openshiftapps.com:6443"
+
+
+
+

In the OpenShift sandbox, it is not possible to create a new project but, in case you are running your own OpenShift, the command to create a new project is:

+
+
+
+
oc new-project <project name>
+
+
+
+
+

Helm Charts

+
+

Helm provides an easy way to manage and share applications on Kubernetes and OpenShift. We will use it to deploy our example applications to OpenShift.

+
+
+
Install Helm and Helm Charts
+
+

See the instructions for installing Helm here. Helm is installed on your local system as a command, which we will use to install the WildFly Charts. Once Helm is installed, we can proceed to use it to install the Helm Charts in our OpenShift instance:

+
+
+
+
helm repo add wildfly https://docs.wildfly.org/wildfly-charts/
+
+
+
+

For more information on the WildFly Helm Charts, see this blog post and the WildFly Helm Charts documentation

+
+
+
+
+

Example: To-do Quickstart

+
+
+

The first example we will build and deploy to OpenShift is the todo-backend quickstart. This quickstart provides documentation for installing via Helm, so only a brief version is detailed below.

+
+
+

First, we need to provision a database instance, in this case PostgresSQL:

+
+
+
+
oc new-app postgresql-ephemeral \
+   -p DATABASE_SERVICE_NAME=todos-db \
+   -p POSTGRESQL_DATABASE=todos
+
+
+
+

Next we use the WildFly Helm Charts to build and deploy our quickstart:

+
+
+
+
helm install todo-backend -f https://raw.githubusercontent.com/wildfly/wildfly-charts/main/examples/todo-backend/todo-backend-bootable-jar.yaml wildfly/wildfly
+
+
+
+ + + + + +
+ + +Note that your Deployment will report "ErrImagePull" and "ImagePullBackOff" until the build is complete. Once the build is complete, your image will be automatically rolled out. +
+
+
+

It is possible to use a specific quickstart tag in case the user does not want to use the main branch. To do so, add the following option to the above command:

+
+
+
+
--set build.ref={WildFlyQuickStartRepoTag}
+
+
+
+

Take a look at the bootable-jar-openshift profile configuration in the todo-backend quickstart’s pom.xml. The Maven profile named bootable-jar-openshift is used by the Helm chart to provision the server with the quickstart deployed. Notice the wildfly-jar-maven-plugin configuration defined in this profile. It specifies the layer that should be used when provisioning WildFly. For more details about this, take a look at the Architecture section in the quickstart’s README.

+
+
+

We have named this application todo-backend. This may be changed to a different name, if desired.

+
+
+

The application will now begin to build. The build can be observed via:

+
+
+
+
oc get build -w
+
+
+
+

It may take few minutes to build the application. Once the build is complete, deployment will begin and can be observed via:

+
+
+
+
oc get deployment todo-backend -w
+
+
+
+

Once deployment is complete, we need to query the route for this application to access it on the Internet. To do so, run:

+
+
+
+
oc get route todo-backend -o jsonpath="{.spec.host}"
+
+
+
+

Expected output:

+
+
+
+
todo-backend-someuser-dev.apps.sandbox.x8i5.p1.openshiftapps.com
+
+
+
+

The above command returns back a public address that points to the application deployed to the OpenShift cluster of the user (for example):

+
+
+
+
https://todo-backend-someuser-dev.apps.sandbox.x8i5.p1.openshiftapps.com
+
+
+
+

If you want to add entries in your application, use the following command:

+
+
+
+
curl -X POST -H "Content-Type: application/json" -d '{"title":"Deploy_ToDo-BackEnd","completed":false}' https://todo-backend-someuser-dev.apps.sandbox.x8i5.p1.openshiftapps.com
+
+
+
+

You can use the todo-frontend to test out the deployed app using:

+
+
+
+
https://todobackend.com/client/index.html
+
+
+
+

and entering your application URL from above.

+
+
+

If you wish to remove the application when you are done with it, simply run:

+
+
+
+
helm delete todo-backend
+
+
+
+
+
+

Example: jaxrs-client

+
+
+

The second example to build and deploy to OpenShift is the +jaxrs-client quickstart.

+
+
+

First of all, clone the quickstart repo:

+
+
+
+
git clone https://github.com/wildfly/quickstart.git
+cd quickstart/jaxrs-client
+
+
+
+

The WildFly Helm Charts are used to build and deploy jaxrs-client. The following command installs a Helm Release from the WildFly Helm Charts into an OpenShift cluster:

+
+
+
+
helm install jaxrs-client-from-chart -f charts/helm.yaml wildfly/wildfly
+
+
+
+ + + + + +
+ + +Note that your Deployment will report "ErrImagePull" and "ImagePullBackOff" until the build is complete. Once the build is complete, your image will be automatically rolled out. +
+
+
+

This time, the name of the Helm Chart app is jaxrs-client-from-chart. (Of course, this may be changed to a different name, if desired.)

+
+
+

The application will now begin to build. The build can be observed via:

+
+
+
+
oc get build -w
+
+
+
+

It may take few minutes to build the application. Once the build is complete, to follow the deployment of the application, run:

+
+
+
+
oc get deployment jaxrs-client-from-chart -w
+
+
+
+

Once deployment is complete, we need to query the route for this application to access it on the Internet. To do so, run:

+
+
+
+
oc get route jaxrs-client-from-chart -o jsonpath="{.spec.host}"
+
+
+
+

The above command returns back a public address that points to the application deployed to the OpenShift cluster of the user (for example):

+
+
+
+
jaxrs-client-from-chart-someuser-dev.apps.sandbox.x8i5.p1.openshiftapps.com
+
+
+
+

At this point, defining a env variable for simplicity, it is possible to test the REST endpoint that has been deployed into the OpenShift cluster:

+
+
+
+
export ROUTE=$(oc get route jaxrs-client-from-chart -o jsonpath="{.spec.host}")
+
+
+
+

and use curl to send HTTP method requests to the REST endpoint, for example (GET):

+
+
+
+
curl -L $ROUTE/rest/contacts
+
+
+
+

To run the quickstart’s Arquillian integration tests to validate that the quickstart has been set up correctly:

+
+
+
+
mvn clean verify -Parq-remote -Dserver.host=https://$(oc get route jaxrs-client-from-chart --template='{{ .spec.host }}')
+
+
+
+

Take a look at the openshift profile configuration in the jaxrs-client quickstart’s pom.xml. The Maven profile named openshift is used by the Helm chart to provision the server with the quickstart deployed. Notice the wildfly-maven-plugin configuration defined in this profile. It specifies the layer that should be used when provisioning WildFly. For more details about this, take a look at the wildfly-maven-plugin documentation.

+
+
+

If you wish to remove the application when you are done with it, simply run:

+
+
+
+
helm uninstall jaxrs-client-from-chart
+
+
+
+
+
+

References

+
+ +
+
+
+ + + \ No newline at end of file diff --git a/latest/Glossary.html b/latest/Glossary.html new file mode 100644 index 000000000..e6b4688b0 --- /dev/null +++ b/latest/Glossary.html @@ -0,0 +1,480 @@ + + + + + + + +Glossary + + + + + + +
+
+

Module

+
+
+

A logical grouping of classes used for classloading and dependency +management in WildFly 10. Modules can be dynamic or static.

+
+
+

Static Modules are the predefined modules installed in the modules/ +directory of the application server.

+
+
+

Dynamic Modules are created by the application server for each +deployment (or sub-deployment in an EAR).

+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Hacking_On_WildFly.html b/latest/Hacking_On_WildFly.html new file mode 100644 index 000000000..5e77fd154 --- /dev/null +++ b/latest/Hacking_On_WildFly.html @@ -0,0 +1,1313 @@ + + + + + + + + +Hacking on WildFly + + + + + + + +
+
+
+
+

© 2021 The original authors.

+
+ +
+
+
+

1. Target Audience

+
+
+

This document is a guide to the setup of Github, preparing and developing changes and contributing +to WildFly.

+
+
+

This guide assumes you know how to deal with the CLI of your OS, for example the Linux bash or MacOS zsh.

+
+
+
+
+

2. Prerequisites

+
+
+

You are very welcome to improve WildFly, please read why:

+
+
+ +
+
+

2.1. GitHub account

+
+

Create a GitHub account if you don’t have one already +Signing up for a new GitHub account

+
+
+

Create a Personal Access Token to work with on the command line. +Account Security - Creating a personal access token

+
+
+
+

2.2. Jira account

+
+

Create an account for Red Hat’s Jira [https://issues.redhat.com/] Choose "Sign up"

+
+
+
+
+
+

3. Getting started

+
+
+

3.1. Fork

+
+

Fork wildfly repository into your account QuickStart - Fork a repo

+
+ +
+
+

3.2. Clone

+
+

Clone your newly forked copy onto your local workspace

+
+
+
+
$ git clone git@github.com:[your user]/wildfly.git
+Cloning into 'wildfly'...
+remote: Counting objects: 533023, done.
+remote: Compressing objects: 100% (170/170), done.
+remote: Total 533023 (delta 60), reused 0 (delta 0), pack-reused 532777
+Receiving objects: 100% (533023/533023), 140.25 MiB | 1.75 MiB/s, done.
+Resolving deltas: 100% (210143/210143), done.
+Checking connectivity... done.
+
+$ cd wildfly
+
+
+
+
+

3.3. Remote

+
+

Add a remote ref to upstream, for pulling future updates

+
+
+
+
git remote add upstream git@github.com:wildfly/wildfly.git
+
+
+
+
+

3.4. Safety

+
+

As a precaution, disable merge commits to your main

+
+
+
+
git config branch.main.mergeoptions --ff-only
+
+
+
+
+

3.5. Working with git later

+
+

3.5.1. Pulling updates

+
+

Pulling later updates from upstream

+
+
+
+
$ git checkout -f main
+$ git pull --rebase upstream main
+From github.com:wildfly/wildfly
+ * branch            main     -> FETCH_HEAD
+Updating 3382570..1fa25df
+Fast-forward
+ {parent => bom}/pom.xml                            |   70 ++++----------
+ build/pom.xml                                      |   13 +--
+ domain/pom.xml                                     |   10 ++
+ .../src/main/resources/examples/host-example.xml   |    2 +-
+ .../resources/examples/jboss-domain-example.xml    |   28 +++---
+ .../main/resources/schema/jboss-domain-common.xsd  |   12 +--
+ .../main/resources/schema/jboss-domain-host.xsd    |    2 +-
+ domain/src/main/resources/schema/jboss-domain.xsd  |   17 ++--
+ pom.xml                                            |  100 ++++++++++++++++++--
+ process-manager/pom.xml                            |    3 +-
+ 10 files changed, 156 insertions(+), 101 deletions(-)
+ rename {parent => bom}/pom.xml (85%)
+
+
+
+

(--rebase will automatically move your local commits, if you have any, on top of the latest branch you pull from, you can leave it off if you do not).

+
+
+

Best practice is to never add your own commits to your local 'main' branch. Instead create a topic branch from 'main' and add commits to your topic branch. Only use your local 'main' to track the current state of the 'upstream' remote’s 'main' branch.

+
+
+

Please note that --rebase is very important if you do have commits. What happens is that when git pull can’t fast forward, it does a merge commit, and a merge commit puts the sucked in changes ON TOP of yours whereas a rebase puts them BELOW yours. In other words a merge commit makes the history a graph, and we prefer a cleaner, easier to follow linear history (hence the rebasing). Further once you do a merge commit it will be difficult to rebase the history before that commit (say you want to combine two commits to one later) as described in "Commit and push". Luckily the option set in step Safety will prevent this from happening.

+
+
+

One way to not forget --rebase the rebase option is you may want to create an alias

+
+
+
+
 $ git config --global alias.up "pull --rebase"
+
+
+
+

and then just use the new alias instead of pull

+
+
+
+
$ git up upstream main
+
+
+
+

One last option, which some prefer, is to avoid using pull altogether, and just use fetch + rebase (this is of course more typing) +For some reasons tags are not updated (e.g. not part of an active branch). Update the tags with

+
+
+
+
$ git fetch --tags upstream
+
+
+
+
+

3.5.2. Rebasing a feature branch

+
+

Assume you have a feature branch WFLY-815_upgrade_sample_dep and you have rebased the local main branch to be up to date with upstream main as described before.

+
+
+
+
git checkout -f WFLY-815_upgrade_sample_dep
+git rebase upstream/main
+
+
+
+

Do not pull the upstream main to your local feature branch! You’ll be stuck in duplicate commit hell.

+
+
+
+

3.5.3. Push

+
+

Pushing pulled updates (or local commits if you aren’t using topic branches) to your private github repo (origin)

+
+
+
+
$ git push
+Counting objects: 192, done.
+Delta compression using up to 4 threads.
+Compressing objects: 100% (44/44), done.
+Writing objects: 100% (100/100), 10.67 KiB, done.
+Total 100 (delta 47), reused 100 (delta 47)
+To git@github.com:[your user]/wildfly.git
+   3382570..1fa25df  main -> main
+
+
+
+

You might need to say -f to force the changes. Read Topic Branch though before you do it.

+
+
+

If you fetch the tags separately you have to push the tags also. Consider if you need them in your personal GitHub repository.

+
+
+
+
git push --tags
+
+
+
+
+
+
+
+

4. Development environment

+
+
+ +
+
+
+
+

5. Maven

+
+
+

Use maven. Simplest is to use the build.sh or build.bat scripts in the root of the source tree. If you don’t use those scripts and use the mvn command directly, note that WildFly’s root pom will enforce a minimum maven version.

+
+
+

Building WildFly requires Java 11 or newer. Make sure you have JAVA_HOME set to point to the JDK11 installation. Build uses Maven 3.

+
+
+
+
$ ./build.sh
+.....
+[INFO] ------------------------------------------------------------------------
+[INFO] Reactor Summary:
+[INFO]
+[INFO] WildFly: BOM ..................... SUCCESS [1.834s]
+[INFO] WildFly: Parent Aggregator ....... SUCCESS [0.022s]
+[INFO] WildFly: Domain Core ............. SUCCESS [3.051s]
+[INFO] WildFly: Server Manager .......... SUCCESS [0.204s]
+[INFO] WildFly: Server .................. SUCCESS [0.283s]
+[INFO] WildFly: Domain Controller ....... SUCCESS [0.084s]
+[INFO] WildFly: Process Manager ......... SUCCESS [0.314s]
+[INFO] WildFly: Remoting ................ SUCCESS [0.390s]
+[INFO] WildFly: Build ................... SUCCESS [5.696s]
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+
+
+
+
+
+

6. Community interaction

+
+
+

Discuss your planned changes (if you want feedback)

+
+
+ +
+
+

Getting feedback first is recommended before starting on any large-scale work. Large scale could mean many things including a complex change in a focused area, or a simple change made in many different parts of the code base.

+
+
+

Getting feedback first is strongly recommended before beginning work on a new feature. Any change that introduces new user-controllable behavior will be regarded as a new feature. Before merging new features we require a larger set of inputs than are required for other types of fixes, including a formal requirements analysis, a more formally considered plan for testing, and appropriate additions to the WildFly documentation. Before getting too far along with a feature it is best to discuss with other WildFly developers what’s needed and how best to ensure those things can be delivered.

+
+
+
+
+

7. IDE Integration

+
+
+

7.1. Eclipse

+
+

The "formal" rules to format code are based on Eclipse. You can find them here WildFly Core IDE Eclipse Configuration

+
+
+
    +
  1. +

    in Eclipse go to Window → Preferences → Java → Code Style → Formatter.

    +
  2. +
  3. +

    click Import.

    +
  4. +
  5. +

    select formatting rules which you have downloaded

    +
  6. +
+
+
+

Same for cleanup and templates

+
+
+
+

7.2. IntelliJ IDEA

+
+

7.2.1. Code Formatter

+
+

There is a plugin for IntelliJ to use the Eclipse formatter: Eclipse Code Formatter

+
+
+
+

7.2.2. Import WildFly as Maven project in IntelliJ IDEA

+
+

Before importing you have to set the VM Options of the IntelliJ Maven importer. Please follow this guide https://www.jetbrains.com/help/idea/maven-importing.html and add -DallTests to the field VM options for importer. +This is necessary because the testsuite poms do not contain all necessary modules by default.

+
+
+
+
+
+
+

8. Jira

+
+
+

Make sure there is a JIRA somewhere for the enhancement/fix

+
+
+ +
+
+

8.1. Good First Issues

+
+

Want to contribute to the WildFly project but aren’t quite sure where to start? Check out our issues with the good-first-issue label. These are a triaged set of issues that are great for getting started on our project.

+
+
+

Once you have selected an issue you’d like to work on, make sure it’s not already assigned to someone else. If you’ve resolved a WildFly issue before, to assign an issue to yourself, you should be able to simply click on "Start Progress" or Change the assignee by clicking on "Assign to me". This will automatically assign the issue to you. If you haven’t resolved an issue before, please start a thread expressing your interest in the issue in the wildfly-developers stream in zulip.

+
+
+
+

8.2. Special cases

+
+

For component upgrades select this type for the Jira. The title must reflect the library and the new version. +In the description please offer a links to the release notes, the git tag diff.

+
+
+

If you are aware that the component upgrade brings a fix for CVE, it’s good to note that in the JIRA title, as later that will make this information more visible in the WildFly release notes.

+
+
+
+
Sample title: Upgrade netty.io 4.1.68 (resolves [CVE-2021-37136|https://github.com/advisories/GHSA-grg4-wf29-r9vv], [CVE-2021-37136|https://github.com/advisories/GHSA-grg4-wf29-r9vv])
+Jira Body:
+Release Notes [https://netty.io/news/2021/09/09/4-1-68-Final.html]
+GitDiff [https://github.com/netty/netty/compare/netty-4.1.67.Final...netty-4.1.68.Final]
+
+
+
+
+
+
+

9. Heaven - Coding

+
+
+

9.1. Topic branch

+
+

Create a simple topic branch to isolate that work

+
+
+
+
git checkout -b WFLY-XXXX_my_cool_feature
+
+
+
+
+

9.2. Code

+
+

9.2.1. Extending WildFly

+
+

There is an excellent documentation and guide Extending WildFly and you can rely on Maven Archetypes to generate a skeleton WildFly Subsystem Archetype.

+
+
+
+

9.2.2. Adding a new external dependency

+
+

Take care that maintainers agree to pick up a new dependency.

+
+
+
    +
  • +

    Edit pom.xml and add a property of the form "version.groupId.artifactId" which contains the Maven version of the dependency. Add your new property in the proper alphabetical order with respect to the existing version properties. Add your dependency to the <dependencyManagement> section, and use the property for the version. If your new dependency has any transitive dependencies, be sure to <exclude> them (or if possible, update the project so that all its dependencies are of provided scope).

    +
  • +
  • +

    Add your dependency to any AS modules that require it, but only with group/artifact. If your dependency will be provided by an existing WildFly module, add a new artifact element to the module.xml file for the existing module, with the value of the element’s name attribute an expression of the form ${groupId:artifactId}

    +
  • +
  • +

    In the pom.xml file for the maven module where you added a new module.xml or updated an existing one for your new dependency, add a new dependency entry to the pom’s dependencies section.

    +
  • +
  • +

    If your dependency will be provided by a new WildFly module, create a directory in the relevant feature-pack maven module, e.g. ee-feature-pack/common/src/main/resources/modules/system/layers/base/ corresponding to the module’s name (which will differ from the Maven group/artifact name; look at other modules to get a feel for the naming scheme), with a version of "main", like this: modules/system/layers/base/org/jboss/foo/main. If the correct maven module to choose for your new directory is unclear, be sure to ask!

    +
  • +
  • +

    Create a module.xml file inside the "main" directory. Use a module.xml from another similar module as a template. JBoss Modules Reference Documentation

    +
  • +
  • +

    Important: Make sure you did not introduce any transitive dependencies by using "mvn dependency:tree". If you did, be sure to add <exclusion>s for each of them to your dependency as described above.

    +
  • +
  • +

    Important: Do not introduce a dependency on the "system" module. The JBoss Modules reference manual lists JDK packages. Please avoid deprecated packages.

    +
  • +
  • +

    Add license information to the license declaration file located in the maven module whose pom you just updated. For example, if you added a dependency entry to ee-feature-pack/common/pom.xml, please add an entry to ee-feature-pack/common/src/license/ee-feature-pack-common-licenses.xml. Add a new element in the appropriate spot. The elements are ordered by the maven groupId and artifactId of the entries. If the needed content for the entry is unclear, be sure to ask!

    +
  • +
+
+
+
+

9.2.3. Commit and push

+
+

Make the changes and commit one or more times (Don’t forget to push)

+
+
+
+
git commit -m 'WFLY-XXXX Frunubucate the Fromungulator'
+First time: git push --set-upstream origin WFLY-XXXX_my_cool_feature
+Second and ongoing: git push origin WFLY-XXXX_my_cool_feature
+
+
+
+

Note that git push references the branch you are pushing and defaults to main, not your working branch.

+
+
+
+
+

9.3. Rebase topic branch on latest main

+
+

Rebase your branch against the latest main (applies your patches on top of main)

+
+
+
+
git fetch upstream
+git rebase -i upstream/main
+# if you have conflicts fix them and rerun rebase
+# The -f, forces the push, alters history, see note below
+git push -f origin WFLY-XXXX_my_cool_feature
+
+
+
+

The -i triggers an interactive update which also allows you to combine commits, alter commit messages etc. It’s a good idea to make the commit log very nice for external consumption. Note that this alters history, which while great for making a clean patch, is unfriendly to anyone who has forked your branch. Therefore you want to make sure that you either work in a branch that you don’t share, or if you do share it, tell them you are about to revise the branch history (and thus, they will then need to rebase on top of your branch once you push it out).

+
+
+
+
+
+

10. Quality and Testing

+
+
+

A must read is the WildFly Testsuite documentation. It will save you time and nerves.

+
+
+

10.1. Checkstyle Errors

+
+

If you need to first verify that your changes pass the checkstyle audit, do this first.

+
+
+
+
mvn checkstyle:checkstyle
+
+
+
+

Then you can proceed with the build.

+
+
+
+

10.2. How do I ensure that my code does not blow up the testsuite?

+
+

First try to run the tests as part of the build before sending a pull request.

+
+
+
+
$> ./build.sh clean install -DallTests
+
+
+
+

Sometimes there are test failures that are not related to your code changes. Most times it’s your code change. Try to discuss this on Zulip.

+
+
+

You can get a full run using

+
+
+
+
$> ./build.sh clean install -DallTests -fae
+
+
+
+

This additional option will allow the build to continue even when there are test failures. Doing this, you can get a stock of all the test failures and figure out how many are related to your code changes.

+
+
+
+
+
+

11. Pull requests to upstream

+
+
+

Get your changes merged into upstream

+
+
+
    +
  • +

    Read the documentation to ensure that you follow a good Pull Request Standards WildFly Pull Request Standards and Guidelines

    +
  • +
  • +

    Make sure your repo is in sync with other unrelated changes in upstream before requesting your changes be merged into upstream by repeating Rebase topic branch on latest main.

    +
  • +
  • +

    Send a github pull request, by clicking the pull request link while in your repo’s fork. Quickstart - Create a pull request

    +
  • +
  • +

    In general, WildFly maintainers are watching the project, so they will receive a notification on each new PR.

    +
  • +
  • +

    As part of the review you may see an automated test run comment on your request.

    +
  • +
  • +

    After review a maintainer will merge your patch, update/resolve issues by request, and reply when complete

    +
  • +
  • +

    Don’t forget to switch back to main and pull the updates

    +
  • +
+
+
+
+
git checkout main
+git pull --ff-only upstream main
+
+
+
+

Update the main branch of your github repository (otherwise you will see a message like 'Your branch is ahead of 'origin/main' by XXX commits.' +if you use 'git status' on your local main branch.

+
+
+
+
git push origin main
+
+
+
+
+
+

12. WildFly Pull Request Standards and Guidelines

+
+
+

12.1. Describe the pull request adequately

+
+

The PR title should include a JIRA number directly from the project in question, whose corresponding JIRA issue will in turn have been linked to the pull request you are just now creating. The description should include a link to the JIRA. The description should also include a decent, human-readable summary of what is changing. Proper spelling and grammar is a plus!

+
+
+

Sample PR +[WFLY-815] This is the sample title

+
+ +
+

12.1.1. Commit message

+
+

The commit message for each commit should also reference a JIRA number.

+
+
+
+
+

12.2. Make sure it builds and tests pass first

+
+

It is highly annoying to reviewers when they find they’ve spent a great deal of time reviewing some code only to discover that it doesn’t even compile. In particular, it’s common for a patch to trip CheckStyle if it hadn’t been previously compile-tested at the least.

+
+
+

While it is tempting to rely on the automated CI/GitHub integration to do our build and test for us (and I’m guilty of having done this too), it generally just causes trouble, so please don’t do it!

+
+
+
+

12.3. Separate your changes - but not too much

+
+

This comes directly from [1], and I agree with it 100% (where the source document says "patch", think "commit"):

+
+
+
+
+

Separate each logical change into a separate patch. +For example, if your changes include both bug fixes and performance enhancements for a single driver, separate those changes into two or more patches. If your changes include an API update, and a new driver which uses that new API, separate those into two patches. +On the other hand, if you make a single change to numerous files, group those changes into a single patch. Thus a single logical change is contained within a single patch. +The point to remember is that each patch should make an easily understood change that can be verified by reviewers. Each patch should be justifiable on its own merits. +If one patch depends on another patch in order for a change to be complete, that is OK. Simply note "this patch depends on patch X" in your patch description. +When dividing your change into a series of patches, take special care to ensure that [WildFly] builds and runs properly after each patch in the series. Developers using "git bisect" to track down a problem can end up splitting your patch series at any point; they will not thank you if you introduce bugs in the middle. If you cannot condense your patch set into a smaller set of patches, then only post say 15 or so at a time and wait for review and integration.

+
+
+
+
+

I also want to emphasize how important it is to separate functional and non-functional changes. The latter category includes reformatting (which generally should not be done without a strong justification).

+
+
+

12.3.1. Creating per maven-module subtasks and doing one subtask per PR

+
+

If you have one logical change (for example you’re removing manual null checks and put a JDK or utility method instead) which affects more than one top-level maven module, please split them by top-level maven module. +For the logical change description use a top level JIRA (Bug, task, enhancement) and add sub-task for each top-level maven module.

+
+
+

Reason behind: WildFly and WildFly Core have a really huge codebase with several different full-time maintainers to review and approve the code. Afterward different project leads and/or release stewards do merge and Jira management work.

+
+
+

If there is a serious reason to deviate from this rule, please ask before on Zulip.

+
+
+
+
+

12.4. Avoid massive and/or "stream of consciousness" branches

+
+

We all know that development can sometimes be an iterative process, and we learn as we go. Nonetheless, we do not need or want a complete record of all the highs and lows in the history of every change (for example, an "add foobar" commit followed later by a "remove foobar" commit in the same PR) - particularly for large changes or in large projects (like WildFly proper). It is good practice for such change authors to go back and rearrange and/or restructure the commits of a pull request such that they incrementally introduce the change in a logical manner, as one single conceptual change per PR.

+
+
+

Note that this advice is not meant to discourage multiple commits in a single PR that are all steps on the way to an overall complex change. To the contrary, multiple well structured commits are sometimes critical to getting proper review of complex changes. For example a PR to refactor code away from an ill-fitting set of abstractions and to a new set can be difficult to review in a single commit. But doing so can be quite straightforward when broken up into, for example, four commits, one to make some small change to clean up something that would get in the way of the overall change, one introducing the new abstractions, one moving the implementation to the new abstractions, and one removing the old abstractions.

+
+
+

If a PR consists of dozens or hundreds of nontrivial commits, you will want to strongly consider dividing it up into multiple PRs, as PRs of this size simply cannot be effectively reviewed. They will either be merged without adequate review, or outright ignored or closed. Which one is worse, I leave to your imagination.

+
+
+
+

12.5. Pay attention and respond to review comments

+
+

While in general it is my experience that WildFly contributors are good about this, I’m going to quote this passage from [1] regardless:

+
+
+
+
+

Your patch will almost certainly get comments from reviewers on ways in which the patch can be improved. You must respond to those comments; ignoring reviewers is a good way to get ignored in return. […​] +Be sure to tell the reviewers what changes you are making and to thank them for their time. Code review is a tiring and time-consuming process, and reviewers sometimes get grumpy. Even in that case, though, respond politely and address the problems they have pointed out.

+
+
+
+
+

In addition, when something needs to be changed, the proper manner to do so is generally to modify the original commit, not to add more commits to the chain to fix issues as they’re reported. See Avoid massive and/or "stream of consciousness" branches.

+
+
+
+

12.6. Don’t get discouraged

+
+

It may come to pass that you have to iterate on your pull request many times before it is considered acceptable. Don’t be discouraged by this - instead, consider that to be a sign that the reviewers care highly about the quality of the code base. At the same time though, consider that it is frustrating for reviewers to have to say the same things over and over again, so please do take care to provide as high-quality submissions as possible, and see Pay attention and respond to review comments!

+
+
+
+

12.7. You can review code too!

+
+

You don’t have to be an official reviewer in order to review a pull request. If you see a pull request dealing with an area you are familiar with, feel free to examine it and comment as needed. In addition, all pull requests need to be reviewed for basic (non-machine-verifiable) correctness, including noticing bad code, NPE risks, and anti-patterns as well as "boring stuff" like spelling and grammar and documentation.

+
+
+

If you review a PR and you feel you understand it in total and that it is correct, it is helpful to the WildFly mergers if you use the 'Approve' option discussed in the Github pull request review documentation. Don’t worry that your approval will trigger automatic merging; it won’t. It’s just easier for others to see that you regard the PR as correct if you use the Github workflow. (Please don’t, however, use the 'Approve' option if you are not expressing an approval of the PR overall; e.g. if you only looked at one part and made some comments that were addressed. Use comments for that kind of input.)

+
+
+

If you do review a pull request and make suggestions for changes, please do pay attention to the PR and try to acknowledge if your suggestions have been resolved. This is particularly important if it won’t be quickly obvious to others if your input was addressed.

+
+
+
+

12.8. On major refactorings

+
+

When doing major and/or long-term refactors, while rare, it is possible that the above constraints become impractical, especially with regard to grouping changes. In this case, you can use a work branch on a (GitHub) fork of WildFly, applying the above rules in micro-scale to just that branch. In this case you could possibly ask a reviewer to also review some or all of the pull requests to that branch. Merge commits would then be used to periodically synchronize with upstream.

+
+
+

In this way, when the long-term branch is ready to "come home" to the main branch, the reviewers may have a good idea that the (potentially quite numerous) changes in the work branch have been reviewed already.

+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/latest/High_Availability_Guide.html b/latest/High_Availability_Guide.html new file mode 100644 index 000000000..48a428419 --- /dev/null +++ b/latest/High_Availability_Guide.html @@ -0,0 +1,5834 @@ + + + + + + + + +High Availability Guide + + + + + + + +
+
+
+
+

© 2017–2022 The original authors.

+
+ +
+
+
+

1. Introduction To High Availability Services

+
+
+

1.1. What are High Availability services?

+
+

WildFly’s High Availability services are used to guarantee availability +of a deployed Jakarta EE application.

+
+
+

Deploying critical applications on a single node suffers from two +potential problems:

+
+
+
    +
  • +

    loss of application availability when the node hosting the application +crashes (single point of failure)

    +
  • +
  • +

    loss of application availability in the form of extreme delays in +response time during high volumes of requests (overwhelmed server)

    +
  • +
+
+
+

WildFly supports two features which ensure high availability of critical +Jakarta EE applications:

+
+
+
    +
  • +

    fail-over: allows a client interacting with a Jakarta EE application to +have uninterrupted access to that application, even in the presence of +node failures

    +
  • +
  • +

    load balancing: allows a client to have timely responses from the +application, even in the presence of high-volumes of requests

    +
  • +
+
+
+ + + + + +
+ + +These two independent high availability services can very effectively +inter-operate when making use of mod_cluster for load balancing! +
+
+
+

Taking advantage of WildFly’s high availability services is easy, and +simply involves deploying WildFly on a cluster of nodes, making a small +number of application configuration changes, and then deploying the +application in the cluster.

+
+
+

We now take a brief look at what these services can guarantee.

+
+
+
+

1.2. High Availability through fail-over

+
+

Fail-over allows a client interacting with a Jakarta EE application to have +uninterrupted access to that application, even in the presence of node +failures. For example, consider a Jakarta EE application which makes use of +the following features:

+
+
+
    +
  • +

    session-oriented servlets to provide user interaction

    +
  • +
  • +

    session-oriented Jakarta Enterprise Beans to perform state-dependent business computation

    +
  • +
  • +

    Jakarta Enterprise Beans entity beans to store critical data in a persistent store (e.g. +database)

    +
  • +
  • +

    SSO login to the application

    +
  • +
+
+
+

If the application makes use of WildFly’s fail-over services, a client +interacting with an instance of that application will not be interrupted +even when the node on which that instance executes crashes. Behind the +scenes, WildFly makes sure that all of the user data that the +application make use of (HTTP session data, Jakarta Enterprise Beans SFSB sessions, +Jakarta Enterprise Beans entities and SSO credentials) are available at other nodes in the +cluster, so that when a failure occurs and the client is redirected to +that new node for continuation of processing (i.e. the client "fails +over" to the new node), the user’s data is available and processing can +continue.

+
+
+

The Infinispan and JGroups subsystems are instrumental in providing +these data availability guarantees and will be discussed in detail later +in the guide.

+
+
+
+

1.3. High Availability through load balancing

+
+

Load balancing enables the application to respond to client requests in +a timely fashion, even when subjected to a high-volume of requests. +Using a load balancer as a front-end, each incoming HTTP request can be +directed to one node in the cluster for processing. In this way, the +cluster acts as a pool of processing nodes and the load is "balanced" +over the pool, achieving scalability and, as a consequence, +availability. Requests involving session-oriented servlets are directed +to the the same application instance in the pool for efficiency of +processing (sticky sessions). Using mod_cluster has the advantage that +changes in cluster topology (scaling the pool up or down, servers +crashing) are communicated back to the load balancer and used to update +in real time the load balancing activity and avoid requests being +directed to application instances which are no longer available.

+
+
+

The mod_cluster subsystem is instrumental in providing support for this +High Availability feature of WildFly and will be discussed in detail +later in this guide.

+
+
+
+

1.4. Aims of the guide

+
+

This guide aims to:

+
+
+
    +
  • +

    provide a description of the high-availability features available in +WildFly and the services they depend on

    +
  • +
  • +

    show how the various high availability services can be configured for +particular application use cases

    +
  • +
  • +

    identify default behavior for features relating to +high-availability/clustering

    +
  • +
+
+
+
+

1.5. Organization of the guide

+
+

As high availability features and their configuration depend on the +particular component they affect (e.g. HTTP sessions, Jakarta Enterprise Beans SFSB sessions, +Hibernate), we organize the discussion around those Jakarta EE features. We +strive to make each section as self-contained as possible. Also, when +discussing a feature, we will introduce any WildFly subsystems upon +which the feature depends.

+
+
+
+
+
+

2. Distributable Web Applications

+
+
+

In a standard web application, session state does not survive beyond the lifespan of the servlet container. +A distributable web application allows session state to survive beyond the lifespan of a single server, either via persistence or by replicating state to other nodes in the cluster. +A web application indicates its intention to be distributable via the <distributable/> element within the web application’s deployment descriptor.

+
+
+

e.g.

+
+
+
/WEB-INF/web.xml:
+
+
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
+         version="4.0">
+    <distributable/>
+</web-app>
+
+
+
+

2.1. Distributable Web Subsystem

+
+

The distributable-web subsystem manages a set of session management profiles that encapsulate the configuration of a distributable session manager. +One of these profiles will be designated as the default profile (via the "default-session-management" attribute) and thus defines the default behavior of a distributable web application.

+
+
+
+
[standalone@embedded /] /subsystem=distributable-web:read-attribute(name=default-session-management)
+{
+    "outcome" => "success",
+    "result" => "default"
+}
+
+
+
+

The default session management stores web session data within an Infinispan cache. +We can introspect its configuration:

+
+
+
+
[standalone@embedded /] /subsystem=distributable-web/infinispan-session-management=default:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "cache" => undefined,
+        "cache-container" => "web",
+        "granularity" => "SESSION",
+        "affinity" => {"primary-owner" => undefined}
+    }
+}
+
+
+
+

2.1.1. Infinispan session management

+
+

The infinispan-session-management resource configures a distributable session manager that uses an embedded Infinispan cache.

+
+
+
+
cache-container
+
+

This references a cache-container defined in the Infinispan subsystem into which session data will be stored.

+
+
cache
+
+

This references a cache within associated cache-container upon whose configuration the web application’s cache will be based. +If undefined, the default cache of the associated cache container will be used.

+
+
granularity
+
+

This defines how the session manager will map a session into individual cache entries. +Possible values are:

+
+
+
SESSION
+
+

Stores all session attributes within a single cache entry. +This is generally more expensive than ATTRIBUTE granularity, but preserves any cross-attribute object references.

+
+
ATTRIBUTE
+
+

Stores each session attribute within a separate cache entry. +This is generally more efficient than SESSION granularity, but does not preserve any cross-attribute object references.

+
+
+
+
+
affinity
+
+

This resource defines the affinity that a web request should have for a given server. +The affinity of the associated web session determines the algorithm for generating the route to be appended onto the session ID (within the JSESSIONID cookie, or when encoding URLs). +This annotation of the session ID is used by load balancers to advise how future requests for existing sessions should be directed. +Routing is designed to be opaque to application code such that calls to HttpSession.getId() always return an unmodified session ID. +This is only generated when creating/updating the JSESSIONID cookie, or when encoding URLs via HttpServletResponse.encodeURL() and encodeRedirectURL(). +Possible values are:

+
+
+
affinity=none
+
+

Web requests will have no affinity to any particular node. +This option is intended for use cases where web session state is not maintained within the application server.

+
+
affinity=local
+
+

Web requests will have an affinity to the server that last handled a request for a given session. +This option corresponds to traditional sticky session behavior.

+
+
affinity=primary-owner
+
+

Web requests will have an affinity to the primary owner of a given session. +This is the default affinity for this distributed session manager. +Behaves the same as affinity=local if the backing cache is not distributed nor replicated.

+
+
affinity=ranked
+
+

Web requests will have an affinity to the first available node in a ranked list comprised of: primary owner, backup nodes, local node (if not a primary nor backup owner). +Only for use with load balancers that support multiple routes. +Behaves the same as affinity=local if cache is not distributed nor replicated.

+
+
+
+
+
marshaller
+
+

Specifies the marshalling implementation used to serialize session attributes.

+
+
+
JBOSS
+
+

Marshals session attributes using JBoss Marshalling.

+
+
PROTOSTREAM
+
+

Marshals session attributes using ProtoStream.

+
+
+
+
+
+
+
+

e.g. Creating a new session management profile, using ATTRIBUTE granularity with local session affinity:

+
+
+
+
[standalone@embedded /] /subsystem=distributable-web/infinispan-session-management=foo:add(cache-container=web, granularity=ATTRIBUTE)
+{
+    "outcome" => "success"
+}
+[standalone@embedded /] /subsystem=distributable-web/infinispan-session-management=foo/affinity=local:add(){allow-resource-service-restart=true}
+{
+    "outcome" => "success"
+}
+
+
+
+
+

2.1.2. HotRod session management

+
+

The hotrod-session-management resource configures a distributable session manager where session data is stored in a remote infinispan-server cluster via the HotRod protocol.

+
+
+
+
remote-cache-container
+
+

This references a remote-cache-container defined in the Infinispan subsystem into which session data will be stored.

+
+
cache-configuration
+
+

If a remote cache whose name matches the deployment name does not exist, this attribute defines a cache configuration within the remote infinispan server, from which an application-specific cache will be created.

+
+
granularity
+
+

This defines how the session manager will map a session into individual cache entries. +Possible values are:

+
+
+
SESSION
+
+

Stores all session attributes within a single cache entry. +This is generally more expensive than ATTRIBUTE granularity, but preserves any cross-attribute object references.

+
+
ATTRIBUTE
+
+

Stores each session attribute within a separate cache entry. +This is generally more efficient than SESSION granularity, but does not preserve any cross-attribute object references.

+
+
+
+
+
affinity
+
+

This resource defines the affinity that a web request should have for a given server. +The affinity of the associated web session determines the algorithm for generating the route to be appended onto the session ID (within the JSESSIONID cookie, or when encoding URLs). +This annotation of the session ID is used by load balancers to advise how future requests for existing sessions should be directed. +Routing is designed to be opaque to application code such that calls to HttpSession.getId() always return an unmodified session ID. +This is only generated when creating/updating the JSESSIONID cookie, or when encoding URLs via HttpServletResponse.encodeURL() and encodeRedirectURL(). +Possible values are:

+
+
+
affinity=none
+
+

Web requests will have no affinity to any particular node. +This option is intended for use cases where web session state is not maintained within the application server.

+
+
affinity=local
+
+

Web requests will have an affinity to the server that last handled a request for a given session. +This option corresponds to traditional sticky session behavior.

+
+
+
+
+
marshaller
+
+

Specifies the marshalling implementation used to serialize session attributes.

+
+
+
JBOSS
+
+

Marshals session attributes using JBoss Marshalling.

+
+
PROTOSTREAM
+
+

Marshals session attributes using ProtoStream.

+
+
+
+
+
+
+
+

e.g. Creating a new session management profile "foo" using the cache configuration "bar" defined on a remote infinispan server "datagrid" with ATTRIBUTE granularity:

+
+
+
+
[standalone@embedded /] /subsystem=distributable-web/hotrod-session-management=foo:add(remote-cache-container=datagrid, cache-configuration=bar, granularity=ATTRIBUTE)
+{
+    "outcome" => "success"
+}
+
+
+
+
+
+

2.2. Overriding default behavior

+
+

A web application can override the default distributable session management behavior in 1 of 2 ways:

+
+
+
    +
  1. +

    Reference a session-management profile by name

    +
  2. +
  3. +

    Provide deployment-specific session management configuration

    +
  4. +
+
+
+

2.2.1. Referencing an existing session management profile

+
+

To use an existing distributed session management profile, a web application should include a distributable-web.xml deployment descriptor located within the application’s /WEB-INF directory.

+
+
+

e.g.

+
+
+
/WEB-INF/distributable-web.xml
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<distributable-web xmlns="urn:jboss:distributable-web:2.0">
+    <session-management name="foo"/>
+</distributable-web>
+
+
+
+

Alternatively, the target distributed session management profile can be defined within an existing jboss-all.xml deployment descriptor:

+
+
+

e.g.

+
+
+
/META-INF/jboss-all.xml
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jboss xmlns="urn:jboss:1.0">
+    <distributable-web xmlns="urn:jboss:distributable-web:2.0">
+        <session-management name="foo"/>
+    </distributable-web>
+</jboss>
+
+
+
+
+

2.2.2. Using a deployment-specific session management profile

+
+

If custom session management configuration will only be used by a single web application, you may find it more convenient to define the configuration within the deployment descriptor itself. +Ad hoc configuration looks identical to the configuration used by the distributable-web subsystem.

+
+
+

e.g.

+
+
+
/WEB-INF/distributable-web.xml
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<distributable-web xmlns="urn:jboss:distributable-web:2.0">
+    <infinispan-session-management cache-container="foo" cache="bar" granularity="SESSION">
+        <primary-owner-affinity/>
+    </infinispan-session-management>
+</distributable-web>
+
+
+
+

Alternatively, session management configuration can be defined within an existing jboss-all.xml deployment descriptor:

+
+
+

e.g.

+
+
+
/META-INF/jboss-all.xml
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jboss xmlns="urn:jboss:1.0">
+    <distributable-web xmlns="urn:jboss:distributable-web:2.0">
+        <infinispan-session-management cache-container="foo" cache="bar" granularity="ATTRIBUTE">
+            <local-affinity/>
+        </infinispan-session-management>
+    </distributable-web>
+</jboss>
+
+
+
+
+
+

2.3. Distributable Shared Sessions

+
+

WildFly supports the ability to share sessions across web applications within an enterprise archive. +In previous releases, WildFly always presumed distributable session management of shared sessions. +Version 2.0 of the shared-session-config deployment descriptor was updated to allow an EAR to opt-in to this behavior using the familiar <distributable/> element. +Additionally, you can customize the behavior of the distributable session manager used for session sharing via the same configuration mechanism described in the above sections.

+
+
+

e.g.

+
+
+
/META-INF/jboss-all.xml
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<jboss xmlns="urn:jboss:1.0">
+    <shared-session-config xmlns="urn:jboss:shared-session-config:2.0">
+        <distributable/>
+        <session-config>
+            <cookie-config>
+                <path>/</path>
+            </cookie-config>
+        </session-config>
+    </shared-session-config>
+    <distributable-web xmlns="urn:jboss:distributable-web:2.0">
+        <session-management name="foo"/>
+    </distributable-web>
+</jboss>
+
+
+
+
+

2.4. Optimizing performance of distributed web applications

+
+

One of the primary design goals of WildFly’s distributed session manager was the parity of HttpSession semantics between distributable and non-distributable web applications. +In order to provide predictable behavior suitable for most web applications, the default distributed session manager configuration is quite conservative, generally favoring consistency over availability. +However, these defaults may not be appropriate for your application. +In general, the effective performance of the distributed session manager is constrained by:

+
+
+
    +
  1. +

    Replication/persistence payload size

    +
  2. +
  3. +

    Locking/isolation of a given session

    +
  4. +
+
+
+

To optimize the configuration of the distributed session manager for your application, you can address the above constraints by tuning one or more of the following:

+
+
+ +
+
+

2.4.1. Session granularity

+
+

By default, WildFly’s distributed session manager uses SESSION granularity, meaning that all session attributes are stored within a single cache entry. +While this ensures that any object references shared between session attributes are preserved following replication/persistence, it means that a change to a single attribute results in the replication/persistence of all attributes.

+
+
+

If your application does not share any object references between attributes, users are strongly advised to use ATTRIBUTE granularity. +Using ATTRIBUTE granularity, each session attribute is stored in a separate cache entry. +This means that a given request is only required to replicate/persist those attributes that were added/modified/removed/mutated in a given request. +For read-heavy applications, this can dramatically reduce the replication/persistence payload per request.

+
+
+
+

2.4.2. Session concurrency

+
+

WildFly’s default distributed session manager behavior is also conservative with respect to concurrent access to a given session. +By default, a request acquires exclusive access to its associated session for the duration of a request, and until any async child context is complete. +This maximizes the performance of a single request, as each request corresponds to a single cache transaction; allows for repeatable read semantics to the session; and ensures that subsequent requests are not prone to stale reads, even when handled by another cluster member.

+
+
+

However, if multiple requests attempt to access the same session concurrently, their processing will be effectively serialized. This might not be feasible, especially for heavily asynchronous web applications.

+
+
+

Relaxing transaction isolation from REPEATABLE_READ to READ_COMMITTED on the associated cache configuration will allow concurrent requests to perform lock-free (but potentially stale) reads by deferring locking to the first attempt to write to the session. +This improves the throughput of requests for the same session for highly asynchronous web applications whose session access is read-heavy.

+
+
+

e.g.

+
+
+
+
/subsystem=infinispan/cache-container=web/distributed-cache=dist/component=locking:write-attribute(name=isolation, value=READ_COMMITTED)
+
+
+
+

For asynchronous web applications whose session access is write-heavy, merely relaxing transaction isolation is not likely to be sufficient. +These web applications will likely benefit from disabling cache transactions altogether. +When transactions are disabled, cache entries are locked and released for every write to the session, resulting in last-write-wins semantics. +For write-heavy applications, this typically improves the throughput of concurrent requests for the same session, at the cost of longer response times for individual requests.

+
+
+
+
/subsystem=infinispan/cache-container=web/distributed-cache=dist/component=transaction:write-attribute(name=mode, value=NONE)
+
+
+
+ + + + + +
+ + +Relaxing transaction isolation currently prevents WildFly from enforcing that a given session is handled by one JVM at a time, a constraint dictated by the servlet specification. +
+
+
+
+

2.4.3. Session attribute immutability

+
+

In WildFly, distributed session attributes are presumed to be mutable objects, unless of a known immutable type, or unless otherwise specified.

+
+
+

Take the following session access pattern:

+
+
+
+
HttpSession session = request.getSession();
+MutableObject object = session.getAttribute("...");
+object.mutate();
+
+
+
+

By default, WildFly replicates/persists the mutable session attributes at the end of the request, ensuring that a subsequent request will read the mutated value, not the original value. +However, the replication/persistence of mutable session attributes at the end of the request happens whether or not these objects were actually mutated. +To avoid redundant session writes, users are strongly encouraged to store immutable objects in the session whenever possible. +This allows the application more control over when session attributes will replicate/persist, since immutable session attributes will only update upon explicit calls to HttpSession.setAttribute(…​).

+
+
+

WildFly can determine whether most JDK types are immutable, but any unrecognized/custom types are presumed to be mutable. +To indicate that a given session attribute of a custom type should be treated as immutable by the distributed session manager, annotate the class with one of the following annotations:

+
+
+
    +
  1. +

    @org.wildfly.clustering.web.annotation.Immutable

    +
  2. +
  3. +

    @net.jcip.annotations.Immutable

    +
  4. +
+
+
+

e.g.

+
+
+
+
@Immutable
+public class ImmutableClass implements Serializable {
+    // ...
+}
+
+
+
+

Alternatively, immutable classes can be enumerated via the distributable-web deployment descriptor.

+
+
+

e.g.

+
+
+
+
<distributable-web xmlns="urn:jboss:distributable-web:2.0">
+    <session-management>
+        <immutable-class>foo.bar.ImmutableClass</immutable-class>
+        <immutable-class>...</immutable-class>
+    </session-management>
+</distributable-web>
+
+
+
+
+

2.4.4. Session attribute marshalling

+
+

Minimizing the replication/persistence payload for individual session attributes has a direct impact on performance by reducing the number of bytes sent over the network or persisted to storage. +See the Marshalling section for more details.

+
+
+
+
+
+
+

3. Distributable Jakarta Enterprise Beans Applications

+
+
+

Just as with standard web applications, session state of stateful session beans (SFSB) contained in a standard EJB application +is not guaranteed to survive beyond the lifespan of the Jakarta Enterprise Beans container. And, as with standard web applications, there is a way to +allow session state of SFSBs to survive beyond the lifespan of a single server, either through persistence or by replicating state to +other nodes in the cluster.

+
+
+

A distributable SFSB is one whose state is made available on multiple nodes in a cluster and which supports failover of invocation attempts: if the node +on which the SFSB was created fails, the invocation will be retried on another node in the cluster where the SFSB state is present.

+
+
+

In the case of Jakarta Enterprise Beans applications, whether or not a bean is distributable is determined globally or on a per-bean basis, rather than on +an application-wide basis as in the case of distributed HttpSessions.

+
+
+

A stateful session bean within an Jakarta Enterprise Beans application indicates its intention to be distributable by using a passivation-capable cache +to store its session state. Cache factories were discussed in the Jakarta Enterprise Beans section of the Wildfly Admin Guide. +Additionally, the EJB application needs to be deployed into a server which uses an High Availability (HA) server profile, such as standalone-ha.xml +or standalone-full-ha.xml.

+
+
+

Since Jakarta Enterprise Beans are passivation-capable by default, generally, users already using an HA profile will not need to make any configuration changes +for their beans to be distributable and, consequently, to support failover. More fine-grained control over whether a bean is distributable can be +achieved using the passivationCapable attribute of the @Stateful annotation (or the equivalent deployment descriptor override). A bean which is marked as +@Stateful(passivationCapable=false) will not exhibit distributable behavior (i.e. failover), even when the application containing it is deployed in a cluster.

+
+
+ + + + + +
+ + +More information on passivation-capable beans can be found in Section 4.6.5 of the Jakarta Enterprise Beans specification. +
+
+
+

In the sections that follow, we discuss some aspects of configuring distributable Jakarta Enterprise Beans applications in Wildfly.

+
+
+

3.1. Distributable EJB Subsystem

+
+

The purpose of the distributable-ejb subsystem is to permit configuration of clustering abstractions +required to support those resources of the ejb3 subsystem which support clustered operation. The key resources +of the ejb3 subsystem which require clustering abstractions are:

+
+
+
    +
  • +

    cache factories +Passivating cache factories depend on a bean management provider to provide passivation and persistence of SFSB +session states in a local or distributed environment.

    +
  • +
  • +

    client mappings registries +Supporting remote invocation on SFSB deployed in a cluster require storing client mappings information in a + client mappings registry. The registry may be tailored for a local or a distributed environment.

    +
  • +
+
+
+

These clustering abstractions are made available to the ejb3 subsystem via the specification and configuration of +clustering abstraction 'providers'. We describe the available providers below.

+
+
+

3.1.1. Bean management providers

+
+

A bean management provider provides access to a given implementation of a bean manager, +used by passivation-capable cache factories defined in the ejb3 subsystem to manage passivation and persistence.

+
+
+

Bean management provider elements are named, and represent different implementation and configuration choices for bean management. +At least one named bean management provider must be defined in the distributable-ejb subsystem and of those, one +instance must be identified as the default bean management provider, using the default-bean-management attribute of +the distributable-ejb subsystem.

+
+
+

The available bean management provider is:

+
+
+
infinispan-bean-management
+
+

The infinispan-bean-management provider element represents a bean manager implementation based on an Infinispan cache. The +attributes for the infinispan-bean-manager element are:

+
+
+
+
cache-container
+
+

Specifies a cache container defined in the Infinispan subsystem used to support the session state cache

+
+
cache
+
+

Specifies the session state cache and its configured properties

+
+
max-active-beans
+
+

Specifies the maximum number of non-passivated session state entries allowed in the cache

+
+
+
+
+
+
+

3.1.2. Client mappings registries

+
+

A client mappings registry provider provides access to a given implementation of a client mappings registry, used by +the EJB client invocation mechanism to store information about client mappings for each node in the cluster. Client mappings +are defined in the socket bindings configuration of a server and required to allow an EJB client application to connect +to servers which are multi-homed (i.e. clients may access the same server from different networks using a different IP address +ad port for each interface on the multi-homed server).

+
+
+

The available client mappings registry providers are:

+
+
+
infinispan-client-mappings-registry
+
+

The infinispan-client-mappings-registry provider is a provider based on an Infinispan cache and suitable for a clustered server.

+
+
+
+
cache-container
+
+

Specifies a cache container defined in the Infinispan subsystem used to support the client mappings registry

+
+
cache
+
+

Specifies the cache and its configured properties used to support the client mappings registry

+
+
+
+
+
+
local-client-mappings-registry
+
+

The client mappings registry provider suitable for a local, non-clustered server.

+
+
+
+
+

3.1.3. Timer management

+
+

The distributable-ejb subsystem defines a set of timer management resources that define behavior for persistent or non-persistent EJB timers.

+
+
+

To use distributable timer management for EJB timers, one must first disable the existing in-memory mechanisms in the ejb3 subsystem. +See Jakarta Enterprise Beans Distributed Timer documentation for details.

+
+
+
infinispan-timer-management
+
+

This provider stores timer metadata within an embedded Infinispan cache, and utilizes consistent hashing to distribute timer execution between cluster members.

+
+
+
+
cache-container
+
+

Specifies a cache container defined in the Infinispan subsystem

+
+
cache
+
+

Specifies the a cache configuration within the specified cache-container

+
+
max-active-timers
+
+

Specifies the maximum number active timers to retain in memory at a time, after which the least recently used will passivate

+
+
marshaller
+
+

Specifies the marshalling implementation used to serialize the timeout context of a timer.

+
+
+
JBOSS
+
+

Marshals session attributes using JBoss Marshalling.

+
+
PROTOSTREAM
+
+

Marshals session attributes using ProtoStream.

+
+
+
+
+
+
+
+

To ensure proper functioning, the associated cache configuration, regardless of type, should use:

+
+
+
    +
  • +

    BATCH transaction mode

    +
  • +
  • +

    REPEATABLE_READ lock isolation

    +
  • +
+
+
+

Generally, persistent timers will leverage a distributed or replicated cache configuration if in a cluster, or a local, persistent cache configuration if on a single server; +while transient timers will leverage a local, passivating cache configuration.

+
+
+

By default, all cluster members will be eligible for timer execution. +A given cluster member exclude itself from timer execution by using a cache capacity-factor of 0.

+
+
+
+
+
+

3.2. Deploying clustered EJBs

+
+

Clustering support is available in the HA profiles of WildFly. In this +chapter we’ll be using the standalone server for explaining the details. +However, the same applies to servers in a domain mode. Starting the +standalone server with HA capabilities enabled, involves starting it +with the standalone-ha.xml (or even standalone-full-ha.xml):

+
+
+
+
./standalone.sh -server-config=standalone-ha.xml
+
+
+
+

This will start a single instance of the server with HA capabilities. +Deploying the EJBs to this instance doesn’t involve anything special +and is the same as explained in the application +deployment chapter.

+
+
+

Obviously, to be able to see the benefits of clustering, you’ll need +more than one instance of the server. So let’s start another server with +HA capabilities. That another instance of the server can either be on +the same machine or on some other machine. If it’s on the same machine, +the two things you have to make sure is that you pass the port offset +for the second instance and also make sure that each of the server +instances have a unique jboss.node.name system property. You can do +that by passing the following two system properties to the startup +command:

+
+
+
+
./standalone.sh -server-config=standalone-ha.xml -Djboss.socket.binding.port-offset=<offset of your choice> -Djboss.node.name=<unique node name>
+
+
+
+

Follow whichever approach you feel comfortable with for deploying the +EJB deployment to this instance too.

+
+
+ + + + + +
+ + +Deploying the application on just one node of a standalone instance of a +clustered server does not mean that it will be automatically deployed +to the other clustered instance. You will have to do deploy it +explicitly on the other standalone clustered instance too. Or you can +start the servers in domain mode so that the deployment can be deployed +to all the server within a server group. See the +admin guide for +more details on domain setup. +
+
+
+

Now that you have deployed an application with clustered EJBs on both +the instances, the EJBs are now capable of making use of the clustering +features.

+
+
+

3.2.1. Failover for clustered EJBs

+
+

Clustered EJBs have failover capability. The state of the @Stateful +@Clustered EJBs is replicated across the cluster nodes so that if one of +the nodes in the cluster goes down, some other node will be able to take +over the invocations. Let’s see how it’s implemented in WildFly. In +the next few sections we’ll see how it works for remote (standalone) +clients and for clients in another remote WildFly server instance. +Although, there isn’t a difference in how it works in both these cases, +we’ll still explain it separately so as to make sure there aren’t any +unanswered questions.

+
+
+
+

3.2.2. Remote standalone clients

+
+

In this section we’ll consider a remote standalone client (i.e. a client +which runs in a separate JVM and isn’t running within another WildFly +8 instance). Let’s consider that we have 2 servers, server X and server +Y which we started earlier. Each of these servers has the clustered EJB +deployment. A standalone remote client can use either the +JNDI approach or native JBoss EJB client APIs to +communicate with the servers. The important thing to note is that when +you are invoking clustered EJB deployments, you do not have to list +all the servers within the cluster (which obviously wouldn’t have been +feasible due the dynamic nature of cluster node additions within a +cluster).

+
+
+

The remote client just has to list only one of the servers with the +clustering capability. In this case, we can either list server X (in +jboss-ejb-client.properties) or server Y. This server will act as the +starting point for cluster topology communication between the client and +the clustered nodes.

+
+
+

Note that you have to configure the ejb cluster in the +jboss-ejb-client.properties configuration file, like so:

+
+
+
+
remote.clusters=ejb
+remote.cluster.ejb.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
+remote.cluster.ejb.connect.options.org.xnio.Options.SSL_ENABLED=false
+
+
+
+
+

3.2.3. Cluster topology communication

+
+

When a client connects to a server, the JBoss EJB client implementation +(internally) communicates with the server for cluster topology +information, if the server had clustering capability. In our example +above, let’s assume we listed server X as the initial server to connect +to. When the client connects to server X, the server will send back an +(asynchronous) cluster topology message to the client. This topology +message consists of the cluster name(s) and the information of the nodes +that belong to the cluster. The node information includes the node +address and port number to connect to (whenever necessary). So in this +example, the server X will send back the cluster topology consisting of +the other server Y which belongs to the cluster.

+
+
+

In case of stateful (clustered) EJBs, a typical invocation flow involves +creating of a session for the stateful bean, which happens when you do a +JNDI lookup for that bean, and then invoking on the returned proxy. The +lookup for stateful bean, internally, triggers a (synchronous) session +creation request from the client to the server. In this case, the +session creation request goes to server X since that’s the initial +connection that we have configured in our jboss-ejb-client.properties. +Since server X is clustered, it will return back a session id and along +with send back an "affinity" of that session. In case of clustered +servers, the affinity equals to the name of the cluster to which the +stateful bean belongs on the server side. For non-clustered beans, the +affinity is just the node name on which the session was created. This +affinity will later help the EJB client to route the invocations on +the proxy, appropriately to either a node within a cluster (for +clustered beans) or to a specific node (for non-clustered beans). While +this session creation request is going on, the server X will also send +back an asynchronous message which contains the cluster topology. The +JBoss EJB client implementation will take note of this topology +information and will later use it for connection creation to nodes +within the cluster and routing invocations to those nodes, whenever +necessary.

+
+
+

Now that we know how the cluster topology information is communicated +from the server to the client, let see how failover works. Let’s +continue with the example of server X being our starting point and a +client application looking up a stateful bean and invoking on it. During +these invocations, the client side will have collected the cluster +topology information from the server. Now let’s assume for some reason, +server X goes down and the client application subsequent invokes on the +proxy. The JBoss EJB client implementation, at this stage will be aware +of the affinity and in this case it’s a cluster affinity. Because of the +cluster topology information it has, it knows that the cluster has two +nodes server X and server Y. When the invocation now arrives, it sees +that the server X is down. So it uses a selector to fetch a suitable +node from among the cluster nodes. The selector itself is configurable, +but we’ll leave it from discussion for now. When the selector returns a +node from among the cluster, the JBoss EJB client implementation creates +a connection to that node (if not already created earlier) and creates a +EJB receiver out of it. Since in our example, the only other node in the +cluster is server Y, the selector will return that node and the JBoss +EJB client implementation will use it to create a EJB receiver out of it +and use that receiver to pass on the invocation on the proxy. +Effectively, the invocation has now failed over to a different node +within the cluster.

+
+
+
+

3.2.4. Remote clients on another instance of WildFly

+
+

So far we discussed remote standalone clients which typically use either +the EJB client API or the jboss-ejb-client.properties based approach to +configure and communicate with the servers where the clustered beans are +deployed. Now let’s consider the case where the client is an application +deployed another AS7 instance and it wants to invoke on a clustered +stateful bean which is deployed on another instance of WildFly. In +this example let’s consider a case where we have 3 servers involved. +Server X and Server Y both belong to a cluster and have clustered EJB +deployed on them. Let’s consider another server instance Server C (which +may or may not have clustering capability) which acts as a client on +which there’s a deployment which wants to invoke on the clustered beans +deployed on server X and Y and achieve failover.

+
+
+

The configurations required to achieve this are explained in +this chapter. As you can see the configurations are +done in a jboss-ejb-client.xml which points to a remote outbound +connection to the other server. This jboss-ejb-client.xml goes in the +deployment of server C (since that’s our client). As explained earlier, +the client configuration need not point to all clustered nodes. +Instead it just has to point to one of them which will act as a start +point for communication. So in this case, we can create a remote +outbound connection on server C to server X and use server X as our +starting point for communication. Just like in the case of remote +standalone clients, when the application on server C (client) looks up a +stateful bean, a session creation request will be sent to server X which +will send back a session id and the cluster affinity for it. +Furthermore, server X asynchronously send back a message to server C +(client) containing the cluster topology. This topology information will +include the node information of server Y (since that belongs to the +cluster along with server X). Subsequent invocations on the proxy will +be routed appropriately to the nodes in the cluster. If server X goes +down, as explained earlier, a different node from the cluster will be +selected and the invocation will be forwarded to that node.

+
+
+

As can be seen both remote standalone client and remote clients on +another WildFly instance act similar in terms of failover.

+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+
+

4. Messaging

+
+
+

This section is under development intending to describe high availability features and configuration pertaining to Jakarta Messaging (JMS).

+
+
+
+
+

5. Load Balancing

+
+
+

5.1. mod_cluster Subsystem

+
+

The mod_cluster integration is done via the mod_cluster subsystem.

+
+
+

5.1.1. Configuration

+
+
Instance ID or JVMRoute
+
+

The instance-id or JVMRoute defaults to jboss.node.name property passed +on server startup (e.g. via -Djboss.node.name=XYZ).

+
+
+
+
[standalone@localhost:9990 /] /subsystem=undertow:read-attribute(name=instance-id)
+{
+    "outcome" => "success",
+    "result" => expression "${jboss.node.name}"
+}
+
+
+
+

To configure instance-id statically, configure the corresponding +property in Undertow subsystem:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=undertow:write-attribute(name=instance-id,value=myroute)
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+
+
Proxies
+
+

By default, mod_cluster is configured for multicast-based discovery. To +specify a static list of proxies, create a remote-socket-binding for +each proxy and then reference them in the 'proxies' attribute. See the +following example for configuration in the domain mode:

+
+
+
+
[domain@localhost:9990 /] /socket-binding-group=ha-sockets/remote-destination-outbound-socket-binding=proxy1:add(host=10.21.152.86, port=6666)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => undefined
+}
+[domain@localhost:9990 /] /socket-binding-group=ha-sockets/remote-destination-outbound-socket-binding=proxy2:add(host=10.21.152.87, port=6666)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => undefined
+}
+[domain@localhost:9990 /] /profile=ha/subsystem=modcluster/proxy=default:write-attribute(name=proxies, value=[proxy1, proxy2])
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => undefined
+}
+[domain@localhost:9990 /] :reload-servers
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "server-groups" => undefined
+}
+
+
+
+
+
Multiple mod_cluster Configurations
+
+

Since WildFly 14 mod_cluster subsystem supports multiple named proxy configurations also allowing for registering +non-default Undertow servers with the reverse proxies. Moreover, this allows single application server node to register with +different groups of proxy servers.

+
+
+

See the following example which adds another Undertow AJP listener, server and a host and adds a new mod_cluster configuration +which registers this host using advertise mechanism.

+
+
+
+
/socket-binding-group=standard-sockets/socket-binding=ajp-other:add(port=8010)
+/subsystem=undertow/server=other-server:add
+/subsystem=undertow/server=other-server/ajp-listener=ajp-other:add(socket-binding=ajp-other)
+/subsystem=undertow/server=other-server/host=other-host:add(default-web-module=root-other.war)
+/subsystem=undertow/server=other-server/host=other-host/location=other:add(handler=welcome-content)
+/subsystem=undertow/server=other-server/host=other-host:write-attribute(name=alias,value=[localhost]))
+
+/socket-binding-group=standard-sockets/socket-binding=modcluster-other:add(multicast-address=224.0.1.106,multicast-port=23364)
+/subsystem=modcluster/proxy=other:add(advertise-socket=modcluster-other,balancer=other-balancer,connector=ajp-other)
+
+reload
+
+
+
+
+
+

5.1.2. Runtime Operations

+
+

The modcluster subsystem supports several operations:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-operation-names
+{
+    "outcome" => "success",
+    "result" => [
+        "add",
+        "add-custom-metric",
+        "add-metric",
+        "add-proxy",
+        "disable",
+        "disable-context",
+        "enable",
+        "enable-context",
+        "list-proxies",
+        "read-attribute",
+        "read-children-names",
+        "read-children-resources",
+        "read-children-types",
+        "read-operation-description",
+        "read-operation-names",
+        "read-proxies-configuration",
+        "read-proxies-info",
+        "read-resource",
+        "read-resource-description",
+        "refresh",
+        "remove-custom-metric",
+        "remove-metric",
+        "remove-proxy",
+        "reset",
+        "stop",
+        "stop-context",
+        "validate-address",
+        "write-attribute"
+    ]
+}
+
+
+
+

The operations specific to the modcluster subsystem are divided in 3 +categories the ones that affects the configuration and require a restart +of the subsystem, the one that just modify the behaviour temporarily and +the ones that display information from the httpd part.

+
+
+
operations displaying httpd information
+
+

There are 2 operations that display how Apache httpd sees the node:

+
+
+
read-proxies-configuration
+
+

Send a DUMP message to all Apache httpd the node is connected to and +display the message received from Apache httpd.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-proxies-configuration
+{
+    "outcome" => "success",
+    "result" => [
+        "neo3:6666",
+        "balancer: [1] Name: mycluster Sticky: 1 [JSESSIONID]/[jsessionid] remove: 0 force: 1 Timeout: 0 Maxtry: 1
+node: [1:1],Balancer: mycluster,JVMRoute: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,Domain: [],Host: 127.0.0.1,Port: 8080,Type: http,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0
+host: 1 [example.com] vhost: 1 node: 1
+host: 2 [localhost] vhost: 1 node: 1
+host: 3 [default-host] vhost: 1 node: 1
+context: 1 [/myapp] vhost: 1 node: 1 status: 1
+context: 2 [/] vhost: 1 node: 1 status: 1
+",
+        "jfcpc:6666",
+        "balancer: [1] Name: mycluster Sticky: 1 [JSESSIONID]/[jsessionid] remove: 0 force: 1 Timeout: 0 maxAttempts: 1
+node: [1:1],Balancer: mycluster,JVMRoute: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,LBGroup: [],Host: 127.0.0.1,Port: 8080,Type: http,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0
+host: 1 [default-host] vhost: 1 node: 1
+host: 2 [localhost] vhost: 1 node: 1
+host: 3 [example.com] vhost: 1 node: 1
+context: 1 [/] vhost: 1 node: 1 status: 1
+context: 2 [/myapp] vhost: 1 node: 1 status: 1
+"
+    ]
+}
+
+
+
+
+
read-proxies-info
+
+

Send a INFO message to all Apache httpd the node is connected to and +display the message received from Apache httpd.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-proxies-info
+{
+    "outcome" => "success",
+    "result" => [
+        "neo3:6666",
+        "Node: [1],Name: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,Balancer: mycluster,Domain: ,Host: 127.0.0.1,Port: 8080,Type: http,Flushpackets: Off,Flushwait: 10000,Ping: 10000000,Smax: 26,Ttl: 60000000,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: -1
+Vhost: [1:1:1], Alias: example.com
+Vhost: [1:1:2], Alias: localhost
+Vhost: [1:1:3], Alias: default-host
+Context: [1:1:1], Context: /myapp, Status: ENABLED
+Context: [1:1:2], Context: /, Status: ENABLED
+",
+        "jfcpc:6666",
+        "Node: [1],Name: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,Balancer: mycluster,LBGroup: ,Host: 127.0.0.1,Port: 8080,Type: http,Flushpackets: Off,Flushwait: 10,Ping: 10,Smax: 26,Ttl: 60,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: 1
+Vhost: [1:1:1], Alias: default-host
+Vhost: [1:1:2], Alias: localhost
+Vhost: [1:1:3], Alias: example.com
+Context: [1:1:1], Context: /, Status: ENABLED
+Context: [1:1:2], Context: /myapp, Status: ENABLED
+"
+    ]
+}
+
+
+
+
+
operations that handle the proxies the node is connected too
+
+

There are 3 operation that could be used to manipulate the list of +Apache httpd the node is connected to.

+
+
+
+
list-proxies
+
+

Displays the httpd that are connected to the node. The httpd could be +discovered via the Advertise protocol or via the proxy-list attribute.

+
+
+
+
[standalone@localhost:9990 subsystem=modcluster] :list-proxies
+{
+    "outcome" => "success",
+    "result" => [
+        "proxy1:6666",
+        "proxy2:6666"
+    ]
+}
+
+
+
+
+
remove-proxy
+
+

Remove a proxy from the discovered proxies or temporarily from the +proxy-list attribute.

+
+
+
+
[standalone@localhost:9990 subsystem=modcluster] :remove-proxy(host=jfcpc, port=6666)
+{"outcome" => "success"}
+
+
+
+
+
add-proxy
+
+

Add a proxy to the discovered proxies or temporarily to the proxy-list +attribute.

+
+
+
+
[standalone@localhost:9990 subsystem=modcluster] :add-proxy(host=jfcpc, port=6666)
+{"outcome" => "success"}
+
+
+
+
+
+ +
+

Those operations allow to send context related commands to Apache httpd. +They are send automatically when deploying or undeploying webapps.

+
+
+
enable-context
+
+

Tell Apache httpd that the context is ready receive requests.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:enable-context(context=/myapp, virtualhost=default-host)
+{"outcome" => "success"}
+
+
+
+
+
disable-context
+
+

Tell Apache httpd that it shouldn’t send new session requests to the +context of the virtualhost.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:disable-context(context=/myapp, virtualhost=default-host)
+{"outcome" => "success"}
+
+
+
+
+
stop-context
+
+

Tell Apache httpd that it shouldn’t send requests to the context of the +virtualhost.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:stop-context(context=/myapp, virtualhost=default-host, waittime=50)
+{"outcome" => "success"}
+
+
+
+
+
+ +
+

Those operations are like the context operation but they apply to all +webapps running on the node and operation that affect the whole node.

+
+
+
refresh
+
+

Refresh the node by sending a new CONFIG message to Apache httpd.

+
+
+
+
reset
+
+

Reset the connection between Apache httpd and the node.

+
+
+
+
+
Configuration
+
+
Metric configuration
+
+

There are 4 metric operations corresponding to add and remove load +metrics to the dynamic-load-provider. Note that when nothing is defined +a simple-load-provider is use with a fixed load factor of one.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-resource(name=mod-cluster-config)
+{
+    "outcome" => "success",
+    "result" => {"simple-load-provider" => {"factor" => "1"}}
+}
+
+
+
+

that corresponds to the following configuration:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:modcluster:1.0">
+            <mod-cluster-config>
+                <simple-load-provider factor="1"/>
+            </mod-cluster-config>
+ </subsystem>
+
+
+
+add-metric +
+

Add a metric to the dynamic-load-provider, the dynamic-load-provider in +configuration is created if needed.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:add-metric(type=cpu)
+{"outcome" => "success"}
+[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:read-resource(name=mod-cluster-config)
+{
+    "outcome" => "success",
+    "result" => {
+        "dynamic-load-provider" => {
+            "history" => 9,
+            "decay" => 2,
+            "load-metric" => [{
+                "type" => "cpu"
+            }]
+        }
+    }
+}
+
+
+
+
+remove-metric +
+

Remove a metric from the dynamic-load-provider.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:remove-metric(type=cpu)
+{"outcome" => "success"}
+
+
+
+
+add-custom-metric / remove-custom-metric +
+

like the add-metric and remove-metric except they require a class +parameter instead the type. Usually they needed additional properties +which can be specified

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:add-custom-metric(class=myclass, property=[("pro1" => "value1"), ("pro2" => "value2")]
+{"outcome" => "success"}
+
+
+
+

which corresponds the following in the xml configuration file:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:modcluster:1.0">
+    <mod-cluster-config>
+        <dynamic-load-provider history="9" decay="2">
+            <custom-load-metric class="myclass">
+                <property name="pro1" value="value1"/>
+                <property name="pro2" value="value2"/>
+            </custom-load-metric>
+        </dynamic-load-provider>
+    </mod-cluster-config>
+</subsystem>
+
+
+
+
+
+
+
+

5.1.3. SSL Configuration using Elytron Subsystem

+
+
+This section provides information how to configure mod_cluster +subsystem to protect communication between mod_cluster and load balancer +using SSL/TLS using Elytron Subsystem. +
+
+
+
Overview
+
+

Elytron subsystem provides a powerful and flexible model to configure +different security aspects for applications and the application server +itself. At its core, Elytron subsystem exposes different capabilities to +the application server in order centralize security related +configuration in a single place and to allow other subsystems to consume +these capabilities. One of the security capabilities exposed by Elytron +subsystem is a Client ssl-context that can be used to configure +mod_cluster subsystem to communicate with a load balancer using SSL/TLS.

+
+
+

When protecting the communication between the application server and the +load balancer, you need do define a Client ssl-context in order to:

+
+
+
    +
  • +

    Define a trust store holding the certificate chain that will be used +to validate load balancer’s certificate

    +
  • +
  • +

    Define a trust manager to perform validations against the load +balancer’s certificate

    +
  • +
+
+
+
+
Defining a Trust Store with the Trusted Certificates
+
+

To define a trust store in Elytron you can execute the following CLI +command:

+
+
+
+
/subsystem=elytron/key-store=default-trust-store:add(type=PKCS12, relative-to=jboss.server.config.dir, path=application.truststore, credential-reference={clear-text=password})
+
+
+
+

In order to successfully execute the command above you must have a +application.truststore file inside your +JBOSS_HOME/standalone/configuration directory. Where the trust store +is protected by a password with a value password. The trust store must +contain the certificates associated with the load balancer or a +certificate chain in case the load balancer’s certificate is signed by a +CA.

+
+
+

We strongly recommend you to avoid using self-signed certificates with +your load balancer. Ideally, certificates should be signed by a CA and +your trust store should contain a certificate chain representing your +ROOT and Intermediary CAs.

+
+
+
+
Defining a Trust Manager To Validate Certificates
+
+

To define a trust manager in Elytron you can execute the following CLI +command:

+
+
+
+
/subsystem=elytron/trust-manager=default-trust-manager:add(algorithm=PKIX, key-store=default-trust-store)
+
+
+
+

Here we are setting the default-trust-store as the source of the +certificates that the application server trusts.

+
+
+
+
Defining a Client SSL Context and Configuring mod_cluster Subsystem
+
+

Finally, you can create the Client SSL Context that is going to be used +by the mod_cluster subsystem when connecting to the load balancer using +SSL/TLS:

+
+
+
+
/subsystem=elytron/client-ssl-context=modcluster-client:add(trust-manager=default-trust-manager)
+
+
+
+

Now that the Client ssl-context is defined you can configure +mod_cluster subsystem as follows:

+
+
+
+
/subsystem=modcluster/proxy=default:write-attribute(name=ssl-context, value=modcluster-client)
+
+
+
+

Once you execute the last command above, reload the server:

+
+
+
+
reload
+
+
+
+
+
Using a Certificate Revocation List
+
+

In case you want to validate the load balancer certificate against a +Certificate Revocation List (CRL), you can configure the trust-manager +in Elytron subsystem as follows:

+
+
+
+
/subsystem=elytron/trust-manager=default-trust-manager:write-attribute(name=certificate-revocation-list.path, value=intermediate.crl.pem)
+
+
+
+

To use a CRL your trust store must contain the certificate chain in +order to check validity of both CRL list and the load balancer`s +certificate.

+
+
+

A different way to configure a CRL is using the Distribution Points +embedded in your certificates. For that, you need to configure a +certificate-revocation-list as follows:

+
+
+
+
/subsystem=elytron/trust-manager=default-trust-manager:write-attribute(name=certificate-revocation-list)
+
+
+
+
+
+

5.1.4. Remote User Authentication with Elytron

+
+

It is possible to accept a REMOTE_USER already authenticated by the Apache httpd server with Elytron via the AJP protocol. +This can be done by setting up Elytron to secure a WildFly deployment and specifying for the External HTTP mechanism to +be used. This is done by creating a security domain and specifying the External mechanism as one of the mechanism +configurations to be used by the http-authentication-factory:

+
+
+
+
/subsystem=elytron/http-authentication-factory=web-tests:add(security-domain=example-domain, http-server-mechanism-factory=example-factory,
+mechanism-configurations=[{mechanism-name=EXTERNAL}])
+
+
+
+

Elytron will accept the externally authenticated user and use the specified security domain to perform role mapping to +complete authorization.

+
+
+
+
+

5.2. Enabling ranked affinity support in load balancer

+
+

Enabling ranked affinity support in the server must be accompanied by a compatible load balancer with ranked affinity support enabled. +When using WildFly as a load balancer ranked routing can be enabled with the following CLI command:

+
+
+
+
/subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:add
+
+
+
+

The default delimiter which delimiters the node routes is "." which encodes multiple routes as node1.node2.node3. +Should the delimiter be required to be different, this is configurable by the delimiter attribute of the affinity resource. +See the following CLI command:

+
+
+
+
/subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:write-attribute(name=delimiter,value=":")
+
+
+
+
+ +
+

While the Apache family of load-balancers relies on attaching session affinity (routing) information by default to a JSESSIONID cookie or a jsessionid path parameter, +there are other load-balancers that rely on a cookie to drive session affinity.

+
+
+

In order to configure the cookie name and other properties use the following CLI script:

+
+
+
+
/subsystem=undertow/servlet-container=default/setting=affinity-cookie:add(name=SRV)
+
+
+
+

The affinity can be specified either in the instance-id or by providing jboss.node.name property to the server.

+
+
+
+
./bin/standalone.sh -c standalone-ha.xml -Djboss.node.name=ribera1
+
+
+
+

For complete documentation on configuring the servlet container refer to Undertow documentation section.

+
+
+

5.3.1. HAProxy

+
+

The following is a minimum HAProxy configuration to enable affinity provided by application server to be respected by the given load-balancer.

+
+
+
+
defaults
+timeout connect 5s
+timeout client 50s
+timeout server 50s
+
+frontend myfrontend
+bind 127.0.0.1:8888
+default_backend myservers
+
+backend myservers
+mode http
+cookie SRV indirect preserve
+option redispatch
+server server1 127.0.0.1:8080 cookie ribera1
+server server2 127.0.0.1:8180 cookie ribera2
+
+
+
+

Notice that the proxy server defined cookie names need to correspond with the application server’s instance-id.

+
+
+
+
+
+
+

6. HA Singleton Features

+
+
+

In general, an HA or clustered singleton is a service that exists on +multiple nodes in a cluster, but is active on just a single node at any +given time. If the node providing the service fails or is shut down, a +new singleton provider is chosen and started. Thus, other than a brief +interval when one provider has stopped and another has yet to start, the +service is always running on one node.

+
+
+

6.1. Singleton subsystem

+
+

WildFly 10 introduced a "singleton" subsystem, which defines a set of +policies that define how an HA singleton should behave. A singleton +policy can be used to instrument singleton deployments or to create +singleton MSC services.

+
+
+

6.1.1. Configuration

+
+

The +default +subsystem configuration from WildFly’s ha and full-ha profile looks +like:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:singleton:1.0">
+    <singleton-policies default="default">
+        <singleton-policy name="default" cache-container="server">
+            <simple-election-policy/>
+        </singleton-policy>
+    </singleton-policies>
+</subsystem>
+
+
+
+

A singleton policy defines:

+
+
+
    +
  1. +

    A unique name

    +
  2. +
  3. +

    A cache container and cache with which to register singleton provider candidates

    +
  4. +
  5. +

    An election policy

    +
  6. +
  7. +

    A quorum (optional)

    +
  8. +
+
+
+

One can add a new singleton policy via the following management +operation:

+
+
+
+
/subsystem=singleton/singleton-policy=foo:add(cache-container=server)
+
+
+
+
Cache configuration
+
+

The cache-container and cache attributes of a singleton policy must +reference a valid cache from the Infinispan subsystem. If no specific +cache is defined, the default cache of the cache container is assumed. +This cache is used as a registry of which nodes can provide a given +service and will typically use a replicated-cache configuration.

+
+
+
+
Election policies
+
+

WildFly includes two singleton election policy implementations:

+
+
+
    +
  • +

    simple
    +Elects the provider (a.k.a. primary provider) of a singleton service based on a +specified position in a circular linked list of eligible nodes sorted by +descending age. Position=0, the default value, refers to the oldest +node, 1 is second oldest, etc. ; while position=-1 refers to the +youngest node, -2 to the second youngest, etc.
    +e.g.

    +
    +
    +
    /subsystem=singleton/singleton-policy=foo/election-policy=simple:add(position=-1)
    +
    +
    +
  • +
  • +

    random
    +Elects a random member to be the provider of a singleton service
    +e.g.

    +
    +
    +
    /subsystem=singleton/singleton-policy=foo/election-policy=random:add()
    +
    +
    +
  • +
+
+
+
Preferences
+
+

Additionally, any singleton election policy may indicate a preference +for one or more members of a cluster. Preferences may be defined either +via node name or via outbound socket binding name. Node preferences +always take precedent over the results of an election policy.
+e.g.

+
+
+
+
/subsystem=singleton/singleton-policy=foo/election-policy=simple:list-add(name=name-preferences, value=nodeA)
+/subsystem=singleton/singleton-policy=bar/election-policy=random:list-add(name=socket-binding-preferences, value=nodeA)
+
+
+
+
+
+
Quorum
+
+

Network partitions are particularly problematic for singleton services, +since they can trigger multiple singleton providers for the same service +to run at the same time. To defend against this scenario, a singleton +policy may define a quorum that requires a minimum number of nodes to be +present before a singleton provider election can take place. A typical +deployment scenario uses a quorum of N/2 + 1, where N is the anticipated +cluster size. This value can be updated at runtime, and will immediately +affect any active singleton services.
+e.g.

+
+
+
+
/subsystem=singleton/singleton-policy=foo:write-attribute(name=quorum, value=3)
+
+
+
+
+
+

6.1.2. Non-HA environments

+
+

The singleton subsystem can be used in a non-HA profile, so long as the +cache that it references uses a local-cache configuration. In this +manner, an application leveraging singleton functionality (via the +singleton API or using a singleton deployment descriptor) will continue +function as if the server was a sole member of a cluster. For obvious +reasons, the use of a quorum does not make sense in such a +configuration.

+
+
+
+
+

6.2. Singleton deployments

+
+

WildFly 10 resurrected the ability to start a given deployment on a +single node in the cluster at any given time. If that node shuts down, +or fails, the application will automatically start on another node on +which the given deployment exists. Long time users of JBoss AS will +recognize this functionality as being akin to the +HASingletonDeployer, +a.k.a. " +deploy-hasingleton", +feature of AS6 and earlier.

+
+
+

6.2.1. Usage

+
+

A deployment indicates that it should be deployed as a singleton via a +deployment descriptor. This can either be a standalone +/META-INF/singleton-deployment.xml file or embedded within an existing +jboss-all.xml descriptor. This descriptor may be applied to any +deployment type, e.g. JAR, WAR, EAR, etc., with the exception of a +subdeployment within an EAR.
+e.g.

+
+
+
+
<singleton-deployment xmlns="urn:jboss:singleton-deployment:1.0" policy="foo"/>
+
+
+
+

The singleton deployment descriptor defines which +singleton policy should be used to deploy the +application. If undefined, the default singleton policy is used, as +defined by the singleton subsystem.

+
+
+

Using a standalone descriptor is often preferable, since it may be +overlaid onto an existing deployment archive.
+e.g.

+
+
+
+
deployment-overlay add --name=singleton-policy-foo --content=/META-INF/singleton-deployment.xml=/path/to/singleton-deployment.xml --deployments=my-app.jar --redeploy-affected
+
+
+
+
+

6.2.2. Singleton Deployment metrics

+
+

The singleton subsystem registers a set of runtime metrics for each singleton deployment installed on the server.

+
+
+
+
is-primary
+
+

Indicates whether the node on which the operation was performed is the primary provider of the given singleton deployment

+
+
primary-provider
+
+

Identifies the node currently operating as the primary provider for the given singleton deployment

+
+
providers
+
+

Identifies the set of nodes on which the given singleton deployment is installed.

+
+
+
+
+

e.g.

+
+
+
+
/subsystem=singleton/singleton-policy=foo/deployment=bar.ear:read-attribute(name=primary-provider)
+
+
+
+
+
+

6.3. Singleton MSC services

+
+

The singleton service facility exposes a mechanism for installing an MSC service such that the service only starts on a single member of a cluster at a time. +If the member providing the singleton service is shutdown or crashes, the facility automatically elects a new primary provider and starts the service on that node. +In general, a singleton election happens in response to any change of membership, where the membership is defined as the set of cluster nodes on which the given service was installed.

+
+
+

6.3.1. Installing an MSC service using an existing singleton policy

+
+

While singleton MSC services have been around since AS7, WildFly adds the ability to leverage the singleton subsystem to create singleton MSC services from existing singleton policies.

+
+
+

The singleton subsystem exposes capabilities for each singleton policy it defines.

+
+
+

These policies, encapsulated by the org.wildfly.clustering.singleton.service.SingletonPolicy interface, can be referenced via the following capability name: +"org.wildfly.clustering.singleton.policy" + policy-name

+
+
+

You can reference the default singleton policy of the server via the name: +"org.wildfly.clustering.singleton.default-policy" +e.g.

+
+
+
+
public class MyServiceActivator implements ServiceActivator {
+    @Override
+    public void activate(ServiceActivatorContext context) {
+        ServiceName name = ServiceName.parse("my.service.name");
+        // Use default singleton policy
+        Supplier<SingletonPolicy> policy = new ActiveServiceSupplier<>(context.getServiceTarget(), ServiceName.parse(SingletonDefaultRequirement.SINGLETON_POLICY.getName()));
+        ServiceBuilder<?> builder = policy.get().createSingletonServiceConfigurator(name).build(context.getServiceTarget());
+        Service service = new MyService();
+        builder.setInstance(service).install();
+    }
+}
+
+
+
+
+

6.3.2. Singleton MSC Service metrics

+
+

The singleton subsystem registers a set of runtime metrics for each singleton MSC service installed via a given singleton policy.

+
+
+
+
is-primary
+
+

Indicates whether the node on which the operation was performed is the primary provider of the given singleton service

+
+
primary-provider
+
+

Identifies the node currently operating as the primary provider for the given singleton service

+
+
providers
+
+

Identifies the set of nodes on which the given singleton service is installed.

+
+
+
+
+

e.g.

+
+
+
+
/subsystem=singleton/singleton-policy=foo/service=my.service.name:read-attribute(name=primary-provider)
+
+
+
+
+

6.3.3. Installing an MSC service using dynamic singleton policy

+
+

Alternatively, you can configure a singleton policy dynamically, which is particularly useful if you want to use a custom singleton election policy. +org.wildfly.clustering.singleton.service.SingletonPolicy is a generalization of the org.wildfly.clustering.singleton.service.SingletonServiceConfiguratorFactory interface, +which includes support for specifying an election policy, an election listener, and, optionally, a quorum.

+
+
+

The SingletonElectionPolicy is responsible for electing a member to operate as the primary singleton service provider following any change in the set of singleton service providers. +Following the election of a new primary singleton service provider, any registered SingletonElectionListener is triggered on every member of the cluster.

+
+
+

The 'SingletonServiceConfiguratorFactory' capability may be referenced using the following capability name: +"org.wildfly.clustering.cache.singleton-service-configurator-factory" + container-name + "." + cache-name

+
+
+

You can reference a 'SingletonServiceConfiguratorFactory' using the default cache of a given cache container via the name: +"org.wildfly.clustering.cache.default-singleton-service-configurator-factory" + container-name

+
+
+

e.g.

+
+
+
+
public class MySingletonElectionPolicy implements SingletonElectionPolicy {
+    @Override
+    public Node elect(List<Node> candidates) {
+        // ...
+        return ...;
+    }
+}
+
+public class MySingletonElectionListener implements SingletonElectionListener {
+    @Override
+    public void elected(List<Node> candidates, Node primary) {
+        // ...
+    }
+}
+
+public class MyServiceActivator implements ServiceActivator {
+    @Override
+    public void activate(ServiceActivatorContext context) {
+        String containerName = "foo";
+        SingletonElectionPolicy policy = new MySingletonElectionPolicy();
+        SingletonElectionListener listener = new MySingletonElectionListener();
+        int quorum = 3;
+        ServiceName name = ServiceName.parse("my.service.name");
+        // Use a SingletonServiceConfiguratorFactory backed by default cache of "foo" container
+        Supplier<SingletonServiceConfiguratorFactory> factory = new ActiveServiceSupplier<>(context.getServiceTarget(), ServiceName.parse(SingletonDefaultCacheRequirement.SINGLETON_SERVICE_CONFIGURATOR_FACTORY.resolve(containerName).getName()));
+        ServiceBuilder<?> builder = factory.get().createSingletonServiceConfigurator(name)
+                .electionListener(listener)
+                .electionPolicy(policy)
+                .requireQuorum(quorum)
+                .build(context.getServiceTarget());
+        Service service = new MyService();
+        builder.setInstance(service).install();
+    }
+}
+
+
+
+
+
+
+
+

7. Clustering API

+
+
+

WildFly exposes a public API to deployments for performing common clustering operations, such as:

+
+ +
+

This zero-dependency API allows an application to perform basic clustering tasks, while remaining decoupled from the libraries that implement WildFly’s clustering logic.

+
+
+

7.1. Group membership

+
+

The Group abstraction represents a logical cluster of nodes. +The Group service provides the following capabilities:

+
+
+
    +
  • +

    View the current membership of a group.

    +
  • +
  • +

    Identifies a designated coordinator for a given group membership. This designated coordinator will be the same on every node for a given membership. Traditionally, the oldest member of the cluster is chosen as the coordinator.

    +
  • +
  • +

    Registration facility for notifications of changes to group membership.

    +
  • +
+
+
+

WildFly creates a Group instance for every defined channel defined in the JGroups subsystem, as well as a local implementation. +The local Group implementation is effectively a singleton membership containing only the current node. +e.g.

+
+
+
+
@Resource(lookup = "java:jboss/clustering/group/ee") // A Group representing the cluster of the "ee" channel
+private Group group;
+
+@Resource(lookup = "java:jboss/clustering/group/local") // A non-clustered Group
+private Group localGroup;
+
+
+
+

To ensure that your application operates consistently regardless of server configuration, you are strongly recommended to reference a given Group using an alias. +Most users should use the "default" alias, which references either:

+
+
+
    +
  • +

    A Group backed by the default channel of the server, if the JGroups subsystem is present

    +
  • +
  • +

    A non-clustered Group, if the JGroups subsystem is not present

    +
  • +
+
+
+

e.g.

+
+
+
+
@Resource(lookup = "java:jboss/clustering/group/default")
+private Group group;
+
+
+
+

Additionally, WildFly creates a Group alias for every Infinispan cache-container, which references:

+
+
+
    +
  • +

    A Group backed by the transport channel of the cache container

    +
  • +
  • +

    A non-clustered Group, if the cache container has no transport

    +
  • +
+
+
+

This is useful when using a Group within the context of an Infinispan cache.

+
+
+

e.g.

+
+
+
+
@Resource(lookup = "java:jboss/clustering/group/server") // Backed by the transport of the "server" cache-container
+private Group group;
+
+
+
+

7.1.1. Node

+
+

A Node encapsulates a member of a group (i.e. a JGroups address). +A Node has the following distinct characteristics, which will be unique for each member of the group:

+
+
+
+
getName
+
+

The distinct logical name of this group member. +This value inherently defaults to the hostname of the machine, and can be overridden via the "jboss.node.name" system property. +You must override this value if you run multiple servers on the same host.

+
+
getSocketAddress()
+
+

The distinct bind address/port used by this group member. +This will be null if the group is non-clustered.

+
+
+
+
+
+

7.1.2. Membership

+
+

A Membership is an immutable encapsulation of a group membership (i.e. a JGroups view). +Membership exposes the following properties:

+
+
+
+
getMembers()
+
+

Returns the list of members comprising this group membership. The order of this list will be consistent on all nodes in the cluster.

+
+
isCoordinator()
+
+

Indicates whether the current member is the coordinator of the group.

+
+
getCoordinator()
+
+

Returns the member designated as coordinator of this group. This methods will return a consistent value for all nodes in the cluster.

+
+
+
+
+
+

7.1.3. Usage

+
+

The Group abstract is effectively a volatile reference to the current membership, and provides a facility for notification of membership changes. +It exposes the following properties and operations:

+
+
+
+
getName()
+
+

The logical name of this group.

+
+
getLocalMember()
+
+

The Node instance corresponding to the local member.

+
+
getMembership()
+
+

Returns the current membership of this group.

+
+
register(GroupListener)
+
+

Registers the specific listener to be notified of changes to group membership.

+
+
isSingleton()
+
+

Indicates whether the groups membership is non-clustered, i.e. will only ever contain a single member.

+
+
+
+
+
+

7.1.4. Example

+
+

A distributed "Hello world" example that prints joiners and leavers of a group membership:

+
+
+
+
public class MyGroupListener implements GroupListener {
+    @Resource(lookup = "java:jboss/clustering/group/default") (1)
+    private Group group;
+    private Registration<GroupListener> listenerRegistration;
+
+    @PostConstruct
+    public void init() {
+        this.listenerRegistration = this.group.register(this);
+        System.out.println("Initial membership: " + this.group.getMembership().getMembers());
+    }
+
+    @PreDestroy
+    public void destroy() {
+        this.listenerRegistration.close(); (2)
+    }
+
+    @Override
+    public void membershipChanged(Membership previous, Membership current, boolean merged) {
+        List<Node> previousMembers = previous.getMembers();
+        List<Node> currentMembers = current.getMembers();
+        List<Node> joiners = currentMembers.stream().filter(member -> !previousMembers.contains(member)).collect(Collectors.toList());
+        if (!joiners.isEmpty()) {
+            System.out.println("Welcome: " + joiners);
+        }
+        List<Node> leavers = previousMembers.stream().filter(member -> !currentMembers.contains(member)).collect(Collectors.toList());
+        if (!leavers.isEmpty()) {
+            System.out.println("Goodbye: " + leavers);
+        }
+    }
+}
+
+
+
+ + + + + + + + + +
1Injects the default Group of the server
2Make sure to close your listener registration!
+
+
+
+
+

7.2. Command Dispatcher

+
+

A command dispatcher is a mechanism for dispatching commands to be executed on members of a group.

+
+
+

7.2.1. CommandDispatcherFactory

+
+

A command dispatcher is created from a CommandDispatcherFactory, an instance of which is created for every defined channel defined in the JGroups subsystem, as well as a local implementation. +e.g.

+
+
+
+
@Resource(lookup = "java:jboss/clustering/dispatcher/ee") // A command dispatcher factory backed by the "ee" channel
+private CommandDispatcherFactory factory;
+
+@Resource(lookup = "java:jboss/clustering/dispatcher/local") // The non-clustered command dispatcher factory
+private CommandDispatcherFactory localFactory;
+
+
+
+

To ensure that your application functions consistently regardless of server configuration, we recommended that you reference the CommandDispatcherFactory using an alias. +Most users should use the "default" alias, which references either:

+
+
+
    +
  • +

    A CommandDispatcherFactory backed by the default channel of the server, if the JGroups subsystem is present

    +
  • +
  • +

    A non-clustered CommandDispatcherFactory, if the JGroups subsystem is not present

    +
  • +
+
+
+

e.g.

+
+
+
+
@Resource(lookup = "java:jboss/clustering/dispatcher/default")
+private CommandDispatcherFactory factory;
+
+
+
+

Additionally, WildFly creates a CommandDispatcherFactory alias for every Infinispan cache-container, which references:

+
+
+
    +
  • +

    A CommandDispatcherFactory backed by the transport channel of the cache container

    +
  • +
  • +

    A non-clustered CommandDispatcherFactory, if the cache container has no transport

    +
  • +
+
+
+

This is useful in the case where a CommandDispatcher is used to communicate with members on which a given cache is deployed.

+
+
+

e.g.

+
+
+
+
@Resource(lookup = "java:jboss/clustering/dispatcher/server") // Backed by the transport of the "server" cache-container
+private CommandDispatcherFactory factory;
+
+
+
+
+

7.2.2. Command

+
+

A Command encapsulates logic to be executed on a group member. +A Command can leverage 2 type of parameters during execution:

+
+
+
+
Sender supplied parameters
+
+

These are member variables of the Command implementation itself, and are provided during construction of the Command object. +As properties of a serializable object, these must also be serializable.

+
+
Receiver supplied parameters, i.e. local context
+
+

These are encapsulated in a single object, supplied during construction of the CommandDispatcher. +The command dispatcher passes the local context as a parameter to the Command.execute(…​) method.

+
+
+
+
+
+

7.2.3. CommandDispatcher

+
+

The CommandDispatcherFactory creates a CommandDispatcher using a service identifier and a local context. +This service identifier is used to segregate commands from multiple command dispatchers. +A CommandDispatcher will only receive commands dispatched by a CommandDispatcher with the same service identifier.

+
+
+

Once created, a CommandDispatcher will locally execute any received commands until it is closed. +Once closed, a CommandDispatcher is no longer allowed to dispatch commands.

+
+
+

The functionality of a CommandDispatcher boils down to 2 operations:

+
+
+
+
executeOnMember(Command, Node)
+
+

Executes a given command on a specific group member.

+
+
executeOnGroup(Command, Node…​)
+
+

Executes a given command on all members of the group, optionally excluding specific members

+
+
+
+
+

Both methods return responses as a CompletionStage, allowing for asynchronous processing of responses as they complete.

+
+
+
+

7.2.4. Example

+
+

To demonstrate how to use a CommandDispatcher, let’s create a distributed "hello world" application.

+
+
+

First, let’s create a simple HelloWorld interface which enables the caller to send a specific message to the entire group:

+
+
+
+
public interface HelloWorld {
+    void send(String message);
+}
+
+
+
+

Next, we need to define a local command execution context. +This should encapsulate any local information we need to make available to the execution of any command received by our CommandDispatcher. +For demonstration purposes, let’s make this a separate interface:

+
+
+
+
public interface LocalContext {
+    Node getLocalMember();
+}
+
+
+
+

Next we create a "hello world" Command that contains a message from the sender, and responds with a message of its own.

+
+
+
+
public class HelloWorldCommand implements Command<String, LocalContext> {
+    private final String message;
+
+    public HelloWorldCommand(String message) {
+        this.message = message;
+    }
+
+    @Override
+    public String execute(LocalContext context) {
+        System.out.println(String.format("Received message: %s", this.message);
+        return String.format("Hello from %s", context.getLocalMember().getName());
+    }
+}
+
+
+
+

Finally, we create a @Singleton Jakarta Enterprise Beans that implements our HelloWorld interface:

+
+
+
+
@Singleton
+@Startup
+@Local(HelloWorld.class)
+public class CommandDispatcherBean implements HelloWorld, LocalContext {
+
+    @Resource(lookup = "java:jboss/clustering/dispatcher/default") (1)
+    private CommandDispatcherFactory factory;
+    private CommandDispatcher<LocalContext> dispatcher;
+
+    @PostConstruct
+    public void init() {
+        this.dispatcher = this.factory.createCommandDispatcher(this.getClass().getName(), this);
+    }
+
+    @PreDestroy
+    public void destroy() {
+        this.dispatcher.close(); (2)
+    }
+
+    @Override
+    public Node getLocalMember() {
+        return this.factory.getGroup().getLocalMember();
+    }
+
+    @Override
+    public void send(String message) {
+        Map<Node, CompletionStage<String>> responses = this.dispatcher.executeOnGroup(new HelloWorldCommand(message), this.factory.getGroup().getLocalMember()); (3)
+        responses.values().forEach(stage -> stage.exceptionally(Exception::getLocalizedMessage).thenAccept(System.out::println));
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1Uses the default CommandDispatcherFactory of the server
2Don’t forget to close your CommandDispatcher!
3We don’t want to send the message to ourselves, so we exclude the local member
+
+
+

Now you can use the HelloWorld.send(…​) operation to say hello to your cluster.

+
+
+
+
+

7.3. Service Provider Registry

+
+

A service provider registry is a specialized cache that tracks the group members that provide a given service. +The ServiceProviderRegistry might be used in concert with a CommandDispatcher to communicate between a subset of group members on which a given service is installed. +It includes a registration facility to receive notifications when the set of nodes providing a given service changes. +WildFly uses this internally in its Singleton service/deployment implementation to drive the primary election process.

+
+
+

WildFly exposes a ServiceProviderRegistry (from which a ServiceProviderRegistration is created) for each cache defined by the Infinispan subsystem.

+
+
+

7.3.1. Example

+
+

The following is an example of using a ServiceProviderRegistry to publish the availability of a given singleton Jakarta Enterprise Beans. +The getProviders() method will return the set of nodes on which the ServiceProviderRegistrationBean is deployed.

+
+
+
+
@Singleton
+@Startup
+@Local(ServiceProviderRegistry.class)
+public class ServiceProviderRegistrationBean implements ServiceProviderRegistration<String>, ServiceProviderRegistration.Listener {
+    @Resource(lookup = "java:jboss/clustering/providers/server/default") (1)
+    private ServiceProviderRegistry registry;
+    private ServiceProviderRegistration registration;
+
+    @PostConstruct
+    public void init() {
+        this.registration = this.registry.register(this.getClass().getName(), this);
+    }
+
+    @PreDestroy
+    public void destroy() {
+        this.registration.close(); (2)
+    }
+
+    @Override
+    public void providersChanged(Set<Node> providers) {
+        System.out.println("%s is now available on the following nodes: %s", this.getClass().getName(), providers);
+    }
+
+    @Override
+    public String getService() {
+        return this.registration.getService();
+    }
+
+    @Override
+    public Set<Node> getProviders() {
+        return this.registration.getProviders();
+    }
+
+    @Override
+    public void close() {
+        // Do nothing - registration is close on bean destroy
+    }
+}
+
+
+
+ + + + + + + + + +
1Uses the default cache of the "server" cache container.
2Remember to close the registration!
+
+
+
+
+

7.4. Registry

+
+

A registry is a specialized cache for storing a unique key/value pair for each member of a group. +This is useful to bridge WildFly’s Group members to an internal identification system used by an application. +The Registry service includes a facility for notifying group members of new, updated, or obsolete registry entries.

+
+
+

WildFly exposes a RegistryFactory (from which a Registry is created) for each cache defined by the Infinispan subsystem.

+
+
+

7.4.1. Example

+
+

The following Registry example assigns a UUID to each group member, allowing each member to query the identifier of any other member:

+
+
+
+
@Singleton
+@Startup
+@Local(Registry.class)
+public class RegistryBean implements Registry<UUID, Void> {
+    @Resource(lookup = "java:jboss/clustering/registry/server/default") (1)
+    private RegistryFactory<UUID, Void> factory;
+    private Registry<UUID, Void> registry;
+
+    @PostConstruct
+    public void init() {
+        this.registry = this.factory.createRegistry(new AbstractMap.SimpleImmutableEntry<>(UUID.randomUUID(), null);
+    }
+
+    @PreDestroy
+    public void destroy() {
+        this.registry.close(); (2)
+    }
+
+    @Override
+    public Group getGroup() {
+        return this.registry.getGroup();
+    }
+
+        @Override
+        public Map<UUID, Void> getEntries() {
+            return this.registry.getEntries();
+        }
+
+    @Override
+    public Map.Entry<UUID, Void> getEntry(Node node) {
+        return this.registry.getEntry(node);
+    }
+
+    @Override
+    public void close() {
+        // Do nothing - registry is closed on bean destroy
+    }
+}
+
+
+
+ + + + + + + + + +
1Uses the default cache of the "server" cache container.
2Remember to close the registry!
+
+
+
+
+
+
+

8. JGroups

+
+
+

8.1. JGroups Subsystem

+
+

8.1.1. Purpose

+
+

The JGroups subsystem provides group communication support for HA +services in the form of JGroups channels.

+
+
+

Named channel instances permit application peers in a cluster to +communicate as a group and in such a way that the communication +satisfies defined properties (e.g. reliable, ordered, +failure-sensitive). Communication properties are configurable for each +channel and are defined by the protocol stack used to create the +channel. Protocol stacks consist of a base transport layer (used to +transport messages around the cluster) together with a user-defined, +ordered stack of protocol layers, where each protocol layer supports a +given communication property.

+
+
+

The JGroups subsystem provides the following features:

+
+
+
    +
  • +

    allows definition of named protocol stacks

    +
  • +
  • +

    view run-time metrics associated with channels

    +
  • +
  • +

    specify a default stack for general use

    +
  • +
+
+
+

In the following sections, we describe the JGroups subsystem.

+
+
+ + + + + +
+ + +JGroups channels are created transparently as part of the clustering +functionality (e.g. on clustered application deployment, channels will +be created behind the scenes to support clustered features such as +session replication or transmission of SSO contexts around the cluster). +
+
+
+
+

8.1.2. Configuration example

+
+

What follows is a sample JGroups subsystem configuration showing all of +the possible elements and attributes which may be configured. We shall +use this example to explain the meaning of the various elements and +attributes.

+
+
+ + + + + +
+ + +The schema for the subsystem, describing all valid elements and +attributes, can be found in the WildFly distribution, in the docs/schema +directory. +
+
+
+
+
<subsystem xmlns="urn:jboss:domain:jgroups:6.0">
+    <channels default="ee">
+        <channel name="ee" stack="udp" cluster="ejb"/>
+    </channels>
+    <stacks>
+        <stack name="udp">
+            <transport type="UDP" socket-binding="jgroups-udp"/>
+            <protocol type="PING"/>
+            <protocol type="MERGE3"/>
+            <protocol type="FD_SOCK"/>
+            <protocol type="FD_ALL"/>
+            <protocol type="VERIFY_SUSPECT"/>
+            <protocol type="pbcast.NAKACK2"/>
+            <protocol type="UNICAST3"/>
+            <protocol type="pbcast.STABLE"/>
+            <protocol type="pbcast.GMS"/>
+            <protocol type="UFC"/>
+            <protocol type="MFC"/>
+            <protocol type="FRAG3"/>
+        </stack>
+        <stack name="tcp">
+            <transport type="TCP" socket-binding="jgroups-tcp"/>
+            <socket-protocol type="MPING" socket-binding="jgroups-mping"/>
+            <protocol type="MERGE3"/>
+            <protocol type="FD_SOCK"/>
+            <protocol type="FD_ALL"/>
+            <protocol type="VERIFY_SUSPECT"/>
+            <protocol type="pbcast.NAKACK2"/>
+            <protocol type="UNICAST3"/>
+            <protocol type="pbcast.STABLE"/>
+            <protocol type="pbcast.GMS"/>
+            <protocol type="MFC"/>
+            <protocol type="FRAG3"/>
+        </stack>
+    </stacks>
+</subsystem>
+
+
+
+
<subsystem>
+
+

This element is used to configure the subsystem within a WildFly system +profile.

+
+
+
    +
  • +

    xmlns This attribute specifies the XML namespace of the JGroups +subsystem and, in particular, its version.

    +
  • +
  • +

    default-stack This attribute is used to specify a default stack for +the JGroups subsystem. This default stack will be used whenever a stack +is required but no stack is specified.

    +
  • +
+
+
+
+
<stack>
+
+

This element is used to configure a JGroups protocol stack.

+
+
+
    +
  • +

    name This attribute is used to specify the name of the stack.

    +
  • +
+
+
+
+
<transport>
+
+

This element is used to configure the transport layer (required) of the +protocol stack.

+
+
+
    +
  • +

    type This attribute specifies the transport type (e.g. UDP, TCP, +TCPGOSSIP)

    +
  • +
  • +

    socket-binding This attribute references a defined socket binding in +the server profile. It is used when JGroups needs to create general +sockets internally.

    +
  • +
  • +

    diagnostics-socket-binding This attribute references a defined +socket binding in the server profile. It is used when JGroups needs to +create sockets for use with the diagnostics program. For more about the +use of diagnostics, see the JGroups documentation for probe.sh.

    +
  • +
  • +

    default-executor This attribute references a defined thread pool +executor in the threads subsystem. It governs the allocation and +execution of runnable tasks to handle incoming JGroups messages.

    +
  • +
  • +

    oob-executor This attribute references a defined thread pool +executor in the threads subsystem. It governs the allocation and +execution of runnable tasks to handle incoming JGroups OOB +(out-of-bound) messages.

    +
  • +
  • +

    timer-executor This attribute references a defined thread pool +executor in the threads subsystem. It governs the allocation and +execution of runnable timer-related tasks.

    +
  • +
  • +

    shared This attribute indicates whether or not this transport is +shared amongst several JGroups stacks or not.

    +
  • +
  • +

    thread-factory This attribute references a defined thread factory in +the threads subsystem. It governs the allocation of threads for running +tasks which are not handled by the executors above.

    +
  • +
  • +

    site This attribute defines a site (data centre) id for this node.

    +
  • +
  • +

    rack This attribute defines a rack (server rack) id for this node.

    +
  • +
  • +

    machine This attribute defines a machine (host) is for this node.

    +
  • +
+
+
+ + + + + +
+ + +site, rack and machine ids are used by the Infinispan topology-aware +consistent hash function, which when using dist mode, prevents dist mode +replicas from being stored on the same host, rack or site +
+
+
+

.

+
+
+
<property>
+
+

This element is used to configure a transport property.

+
+
+
    +
  • +

    name This attribute specifies the name of the protocol property. The +value is provided as text for the property element.

    +
  • +
+
+
+
+
+
<protocol>
+
+

This element is used to configure a (non-transport) protocol layer in +the JGroups stack. Protocol layers are ordered within the stack.

+
+
+
    +
  • +

    type This attribute specifies the name of the JGroups protocol +implementation (e.g. MPING, pbcast.GMS), with the package prefix +org.jgroups.protocols removed.

    +
  • +
  • +

    socket-binding This attribute references a defined socket binding in +the server profile. It is used when JGroups needs to create general +sockets internally for this protocol instance.

    +
  • +
+
+
+
+
<relay>
+
+

This element is used to configure the RELAY protocol for a JGroups +stack. RELAY is a protocol which provides cross-site replication between +defined sites (data centres). In the RELAY protocol, defined sites +specify the names of remote sites (backup sites) to which their data +should be backed up. Channels are defined between sites to permit the +RELAY protocol to transport the data from the current site to a backup +site.

+
+
+
    +
  • +

    site This attribute specifies the name of the current site. Site +names can be referenced elsewhere (e.g. in the JGroups remote-site +configuration elements, as well as backup configuration elements in the +Infinispan subsystem)

    +
  • +
+
+
+
<remote-site>
+
+

This element is used to configure a remote site for the RELAY protocol.

+
+
+
    +
  • +

    name This attribute specifies the name of the remote site to which +this configuration applies.

    +
  • +
  • +

    stack This attribute specifies a JGroups protocol stack to use for +communication between this site and the remote site.

    +
  • +
  • +

    cluster This attribute specifies the name of the JGroups channel to +use for communication between this site and the remote site.

    +
  • +
+
+
+
+
+
+

8.1.3. Use Cases

+
+

In many cases, channels will be configured via XML as in the example +above, so that the channels will be available upon server startup. +However, channels may also be added, removed or have their +configurations changed in a running server by making use of the WildFly +management API command-line interface (CLI). In this section, we present +some key use cases for the JGroups management API.

+
+
+

The key use cases covered are:

+
+
+
    +
  • +

    adding a stack

    +
  • +
  • +

    adding a protocol to an existing stack

    +
  • +
  • +

    adding a property to a protocol

    +
  • +
+
+
+ + + + + +
+ + +The WildFly management API command-line interface (CLI) itself can be +used to provide extensive information on the attributes and commands +available in the JGroups subsystem interface used in these examples. +
+
+
+
Add a stack
+
+
+
/subsystem=jgroups/stack=mystack:add(transport={}, protocols={})
+
+
+
+
+
Add a protocol to a stack
+
+
+
/subsystem=jgroups/stack=mystack/transport=TRANSPORT:add(type=<type>, socket-binding=<socketbinding>)
+
+
+
+
+
/subsystem=jgroups/stack=mystack:add-protocol(type=<type>, socket-binding=<socketbinding>)
+
+
+
+
+
Add a property to a protocol
+
+
+
/subsystem=jgroups/stack=mystack/transport=TRANSPORT/property=<property>:add(value=<value>)
+
+
+
+
+
+
+

8.2. Member Discovery

+
+

8.2.1. Discovery for Kubernetes

+
+

KUBE_PING is a discovery protocol for JGroups cluster nodes managed by Kubernetes. +Since Kubernetes is in charge of launching nodes, it knows the addresses of all pods it started, +and is therefore an ideal place to ask for cluster discovery. +Discovery is therefore done by asking Kubernetes for a list of addresses of all cluster nodes. +Combined with bind_port / port_range, the protocol will then send a discovery request to all instances and wait for the responses.

+
+
+

To reconfigure an existing server profile with KUBE_PING use the following CLI batch replacing the namespace, +labels and stack name (tcp) with the target stack:

+
+
+
+
batch
+/subsystem=jgroups/stack=tcp/protocol=MPING:remove()
+/subsystem=jgroups/stack=tcp/protocol=kubernetes.KUBE_PING:add(add-index=1, properties={namespace="production", labels="cluster=nyc"})
+run-batch
+
+
+
+ + + + + +
+ + +To be able to query the Kubernetes server ensure view permissions are granted on the service account. +
+
+
+

For advanced configuration options, please visit protocol’s documentation here.

+
+
+
+

8.2.2. Discovery for AWS EC2

+
+

The org.jgroups.protocols.aws.S3_PING is a discovery protocol using AWS S3 buckets as cluster information store.

+
+
+

To provision using Galleon, use the jgroups-aws layer. +Note that the layer does not update configuration, only provisions necessary modules.

+
+
+

The following minimal example updates the existing tcp stack to use this discovery protocol instead of MPING:

+
+
+
+
batch
+/subsystem=jgroups/stack=tcp/protocol=MPING:remove()
+/subsystem=jgroups/stack=tcp/protocol=org.jgroups.protocols.aws.S3_PING:add(add-index=1, module="org.jgroups.aws", properties={region_name="eu-central-1", bucket_name="jgroups-s3"})
+run-batch
+
+
+
+

The S3 client used by the protocol uses the default credential store provider. +Refer to AWS documentation how to generate and supply appropriate credentials. +For instance, credentials can be provided by Java system properties (aws.accessKeyId and aws.secretAccessKey), +environmental properties (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY), etc.

+
+
+

For advanced configuration options, please visit protocol’s documentation here.

+
+
+
+
+
+
+

9. Infinispan

+
+
+

9.1. Infinispan Subsystem

+
+

The Infinispan subsystem configures a set of Infinispan cache containers and cache configurations for use by WildFly clustering services.

+
+
+

9.1.1. Cache container

+
+

A cache container manages a set of cache configurations that share the same transport and marshalling configuration. +Cache containers returned by the Infinispan subsystem are auto-configured with the following customizations:

+
+
+
    +
  • +

    A custom transport capable of sharing a JGroups channel defined by the JGroups subsystem.

    +
  • +
  • +

    Uses WildFly’s mbean server, if the org.jboss.as.jmx extension is present.

    +
  • +
  • +

    Marshaller configured to resolve classes using JBoss Modules.

    +
  • +
  • +

    Marshaller configured with a set of marshalling optimizations for common JDK classes

    +
  • +
  • +

    Marshaller configured with additional Externalizers loadable from the configured module attribute.

    +
  • +
+
+
+

e.g. To create a new cache container that loads marshallers from the "org.bar" module:

+
+
+
+
/subsystem=infinispan/cache-container=foo:add(module=org.foo)
+
+
+
+

A cache container may designate a specific cache as its default cache, i.e. the cache returned via CacheContainer.getCache():

+
+
+

e.g. To set "bar" as the default cache of the "foo" container:

+
+
+
+
/subsystem=infinispan/cache-container=foo:write-attribute(name=default-cache, value=bar)
+
+
+
+

A cache container can be injected directly into Jakarta EE applications using the @Resource annotation, e.g.

+
+
+
+
@Resource(lookup = "java:jboss/infinispan/container/foo")
+private org.infinispan.manager.EmbeddedCacheManager container;
+
+
+
+

Note that the server will not manage the lifecycle of any caches created from the injected cache manager. +The application is responsible for managing the lifecycle of manually created caches.

+
+
+
Transport
+
+

Configures the mechanism used by clustered caches to communicate with each other. +It is only necessary to define a transport if the cache container contains clustered caches.

+
+
+

To create a JGroups transport using the default channel of the server:

+
+
+
+
/subsystem=infinispan/cache-container=foo/transport=jgroups:add()
+
+
+
+

To create a JGroups transport using a distinct "alpha" channel, that uses the "tcp" stack:

+
+
+
+
/subsystem=jgroups/channel=alpha:add(stack=tcp)
+/subsystem=infinispan/cache-container=foo/transport=jgroups:add(channel=alpha)
+
+
+
+

For a complete list of transport attributes, refer to the WildFly management model documentation

+
+
+

To remove an existing JGroups transport, you can either use the standard remove resource operation:

+
+
+
+
/subsystem=infinispan/cache-container=foo/transport=jgroups:remove()
+
+
+
+

…​ or by adding the "none" transport (which will auto-remove any existing transport):

+
+
+
+
/subsystem=infinispan/cache-container=foo/transport=none:add(){allow-resource-service-restart=true}
+
+
+
+
+
Cache types
+
+

Infinispan supports a number of cache types for use in both HA and non-HA server profiles.

+
+
+
Local
+
+

A local cache stores a given cache entry only on the local node. +A local cache does not require a transport, as cache reads and writes are always local.

+
+
+

For more information about this cache type, refer to the the Infinispan documentation.

+
+
+

To create a local cache:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar:add()
+
+
+
+

For a complete list of local-cache attributes, refer to the WildFly management model documentation

+
+
+
+
Replicated
+
+

A replicated cache stores a given cache entry on every node in the cluster. +A replicated cache requires a transport, as cache writes are replicated to all nodes in the cluster on which the associated cache is running.

+
+
+

For more information about this cache type, refer to the the Infinispan documentation.

+
+
+

To create a replicated cache:

+
+
+
+
/subsystem=infinispan/cache-container=foo/replicated-cache=bar:add()
+
+
+
+

For a complete list of replicated-cache attributes, refer to the WildFly management model documentation

+
+
+
+
Distributed
+
+

A distributed cache stores a given cache entry on a configurable number of nodes in the cluster, assigned via an algorithm based on consistent hashing. +A distributed cache requires a transport, as cache writes need to forward to each owner, and cache reads from a non-owner require a remote request.

+
+
+

For more information about this cache type, refer to the the Infinispan documentation.

+
+
+

To create a distributed cache where a given entry is stored on 3 nodes:

+
+
+
+
/subsystem=infinispan/cache-container=foo/distributed-cache=bar:add(owners=3)
+
+
+
+

For a complete list of distributed-cache attributes, refer to the WildFly management model documentation

+
+
+
+
Scattered
+
+

A scattered cache is a variation of a distributed cache that maintains 2 copies of a particular cache entry. +Consequently, it can only tolerate failure of a single node at a time. +Primary ownership of a cache entry is determined by the same mechanism used by a distributed cache, +while the backup copy is the node that last updated the entry.

+
+
+

This design means that a scattered cache only requires 1 remote invocation to write a given cache entry, regardless of which node initiated the cache operation. +By comparison, a distributed cache (with 2 owners) uses 1 remote invocation to write a cache entry if and only if the primary owner initiated the cache operation, and otherwise requires 2 remote invocations.

+
+
+

For more information about this cache type, refer to the the Infinispan documentation.

+
+
+

To create a scattered cache:

+
+
+
+
/subsystem=infinispan/cache-container=foo/scattered-cache=bar:add()
+
+
+
+

For a complete list of scattered-cache attributes, refer to the WildFly management model documentation

+
+
+
+
Invalidation
+
+

An invalidation cache is a special type of clustered cache that does not share state, but instead ensures that remote state is invalidated any time a given entry is updated locally. +An invalidation cache requires a transport, as cache writes trigger invalidation on remote nodes on which the associated cache is running.

+
+
+

For more information about this cache type, refer to the the Infinispan documentation.

+
+
+

To create an invalidation cache:

+
+
+
+
/subsystem=infinispan/cache-container=foo/invalidation-cache=bar:add()
+
+
+
+

For a complete list of invalidation-cache attributes, refer to the WildFly management model documentation

+
+
+
+
+
Cache features
+
+

The configuration of a cache is divided into several components, each defining a specific cache feature. +Because a given cache configuration requires each component relevant to its cache type, cache add operations and cache component add operations are typically batched. +Any undefined components are auto-created using their defaults.

+
+
+

e.g. The following cache add operation:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar:add()
+
+
+
+

…​ is actually equivalent to the following sequence of operations:

+
+
+
+
batch
+/subsystem=infinispan/cache-container=foo/local-cache=bar:add()
+/subsystem=infinispan/cache-container=foo/local-cache=bar/component=expiration:add()
+/subsystem=infinispan/cache-container=foo/local-cache=bar/component=locking:add()
+/subsystem=infinispan/cache-container=foo/local-cache=bar/component=transaction:add()
+/subsystem=infinispan/cache-container=foo/local-cache=bar/memory=object:add()
+/subsystem=infinispan/cache-container=foo/local-cache=bar/store=none:add()
+run-batch
+
+
+
+

Similarly, you can reset all the attributes of a component by simply removing the component. +e.g.

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar:component=expiration:remove(){allow-resource-service-restart=true}
+
+
+
+

…​ is equivalent to:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar:component=expiration:remove(){allow-resource-service-restart=true}
+/subsystem=infinispan/cache-container=foo/local-cache=bar:component=expiration:add(){allow-resource-service-restart=true}
+
+
+
+
Memory
+
+

An Infinispan cache can be configured to store cache entries as Java objects or as binary data (i.e. byte[]), either on or off the JVM heap. +The type of storage used has semantic implications for the user of the cache. +When using object storage, the cache has store-as-reference semantics, whereas when using binary storage the cache has call-by-value semantics. +Consider the following logic:

+
+
+
+
List<String> list = new ArrayList<>();
+cache.startBatch();
+cache.put("a", list);
+list.add("test");
+cache.endBatch(true);
+
+List<String> result = cache.get("a");
+System.out.println(result.size());
+
+
+
+

How many elements are in the "result" list? The answer depends on how the cache is configured.

+
+
+

When the cache is configured to use object memory, our result list has 1 element. +When the cache is configured to use binary (or off-heap) memory, our result list is empty. +When using binary memory, the cache value must be marshalled to a byte[] on write and unmarshalled on read, thus any mutations of the cache value in the interim are not reflected in the cache.

+
+
+Object storage +
+

When using object storage, cache keys and values are stored as Java object references. +Object storage may be configured with a maximum size. +When the number of entries in the cache exceeds this threshold, the least recently used entries are evicted from memory.

+
+
+

e.g. To store a maximum of 100 objects in the Java heap:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/memory=object:add(size=100)
+
+
+
+

For a complete list of memory=object attributes, refer to the WildFly management model documentation

+
+
+
+Binary storage (on-heap) +
+

When using binary storage, each cache entry is stored as a byte[] within the JVM heap. +Binary storage may also be configured with a maximum size. +This size can be specified either as a maximum number of entries (i.e. COUNT), or as a maximum number of bytes (i.e. MEMORY). +When the number of entries in the cache exceeds this threshold, the least recently used entries are evicted from memory.

+
+
+

e.g. To store a maximum of 1 MB of binary data in the Java heap:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/memory=binary:add(size=1048576, eviction-type=MEMORY)
+
+
+
+

For a complete list of memory=binary attributes, refer to the WildFly management model documentation

+
+
+
+Off-heap binary storage +
+

When using off-heap storage, each cache entry is stored as a byte[] in native memory allocated via sun.misc.Unsafe. +Off-heap memory storage may also be configured with a maximum size, specified either as a maximum number of entries (i.e. COUNT), or as a maximum number of bytes (i.e. MEMORY). +When the number of entries in the cache exceeds this threshold, the least recently used entries are evicted from memory.

+
+
+

e.g. To store a maximum of 1 GB of binary data in native memory outside of the Java heap:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/memory=off-heap:add(size=1073741824)
+
+
+
+

For a complete list of memory=off-heap attributes, refer to the WildFly management model documentation

+
+
+
+
+
Transactions
+
+

An Infinispan cache can be configured as transactional or non-transactional. +This behavior is determined by the mode attribute, which supports the following values:

+
+
+
+
NONE
+
+

Non-transactional cache (the default behavior).

+
+
BATCH
+
+

Transactional cache using a local Infinispan transaction manager. +Infinispan transactions are started/committed/rolled-back using Infinispan’s batching API.

+
+
NON_XA
+
+

Transactional cache configured to use the server’s transaction manager, registering as a Synchronization to the current transaction. +Cache commit/rollback happens after the associated transaction completes.

+
+
NON_DURABLE_XA
+
+

Transactional cache configured to use the server’s transaction manager, enlisting as an XAResource to the current transaction, but without transaction recovery support.

+
+
FULL_XA
+
+

Transactional cache configured to use the server’s transaction manager, with full transaction recovery support.

+
+
+
+
+

Within the context of a transaction, cache write operations must obtain a lock on the affected keys. +Locks may be acquired either pessimistically (the default), i.e. before invoking the operation, or optimistically, i.e. before transaction commit.

+
+
+

e.g. To configure a transactional cache using local Infinispan transactions with OPTIMISTIC locking:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=transaction(mode=BATCH, locking=OPTIMISTIC)
+
+
+
+

For a complete list of transaction attributes, refer to the WildFly management model documentation

+
+
+
+
Locking
+
+

Within the context of a transaction, entries read from the cache are isolated from other concurrent transactions according to the configured isolation level. +Infinispan supports the following transaction isolation levels:

+
+
+
+
READ_COMMITTED
+
+

A cache read may return a different value than a previous read within the same transaction, even if a concurrent transaction updated the entry. +This is the default isolation level.

+
+
REPEATABLE_READ
+
+

A cache read will return the same value as a previous read within the same transaction, even if a concurrent transaction updated the entry.

+
+
+
+
+ + + + + +
+ + +Cache reads are always lock-free unless invoked using Flag.FORCE_WRITE_LOCK. +
+
+
+

e.g. To configure a cache using REPEATABLE_READ isolation:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=locking(isolation=REPEATABLE_READ)
+
+
+
+

For a complete list of locking attributes, refer to the WildFly management model documentation

+
+
+
+
Expiration
+
+

The expiration component configures expiration defaults for cache entries. +Cache entries may be configured to expire after some duration since creation (i.e. lifespan) or since last accessed (i.e. max-idle).

+
+
+

e.g. To configure expiration of entries older than 1 day, or that have not been accessed within the past hour:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=expiration(lifespan=86400000, max-idle=3600000)
+
+
+
+ + + + + +
+ + +max-idle based expiration is not generally safe for use with clustered caches, as the meta data of a cache entry is not replicated by cache read operations +
+
+
+

For a complete list of expiration attributes, refer to the WildFly management model documentation

+
+
+
+
Persistence
+
+

An Infinispan cache can optionally load/store cache entries from an external storage. +All cache stores support the following attributes:

+
+
+
+
fetch-state
+
+

Indicates whether to refresh persistent state from cluster members on cache start. +Does not apply to a local or invalidation cache, nor a shared store. +Default is true.

+
+
passivation
+
+

Indicates whether cache entries should only be persisted upon eviction from memory. +Default is true.

+
+
preload
+
+

Indicates whether cache entries should be loaded into memory on cache start. +Default is false.

+
+
purge
+
+

Indicates whether the cache store should be purged on cache start. +Purge should never be enabled on a shared store. +Default is true.

+
+
shared
+
+

Indicates that the same cache store endpoint (e.g. database, data grid, etc.) is used by all members of the cluster. +When using a shared cache store, cache entries are only persisted by the primary owner of a given cache entry. +Default is false.

+
+
+
+
+

To remove an existing cache store, you can either use the standard resource remove operation:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/store=file:remove()
+
+
+
+

…​ or by adding the "none" store (which auto-removes any existing store):

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/store=none:add(){allow-resource-service-restart=true}
+
+
+
+File store +
+

A file store persists cache entries to the local filesystem. +By default, files are stored in a file named "cache-name.dat" within a subdirectory named "infinispan/container-name" relative to the server’s data directory.

+
+
+

e.g. To persist cache entries to $HOME/foo/bar.dat:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/store=file:add(path=foo, relative-to=user.home)
+
+
+
+
+JDBC store +
+

A JDBC store persists cache entries to a database.

+
+
+

e.g. To persist cache entries to an H2 database via the ExampleDS data-source:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/store=jdbc:add(data-source=ExampleDS, dialect=H2)
+
+
+
+
+HotRod store +
+

The HotRod store uses one dedicated remote cache for each cache created by the server. +For Infinispan Server versions supporting protocol version 2.7 and above (Infinispan Server version 9.2) +a persistent remote cache will be automatically created based on default configuration. +The recommended configuration for the remote cache where session data will be offloaded is transactional distribution mode cache with pessimistic locking. +When using Infinispan Server version prior to 9.2, the caches need to be configured manually on the server where cache names correspond to the deployment file names (e.g. test.war).

+
+
+

Once a Remote Cache Container is configured a hotrod store can be configured replacing any existing store. +The following CLI script demonstrates a typical use case for offloading sessions using an invalidation-cache with a shared, persistent infinispan-server store referencing an existing remote-cache-container:

+
+
+
+
batch
+/subsystem=infinispan/cache-container=web/invalidation-cache=foo:add()
+/subsystem=infinispan/cache-container=web/invalidation-cache=foo/store=hotrod:add(remote-cache-container=web, cache-configuration=transactional, fetch-state=false, shared=true)
+/subsystem=infinispan/cache-container=web/invalidation-cache=foo/component=transaction:add(mode=BATCH)
+/subsystem=infinispan/cache-container=web/invalidation-cache=foo/component=locking:add(isolation=REPEATABLE_READ)
+run-batch
+
+
+
+
+
+
State transfer
+
+

The state transfer component defines the behavior for the initial transfer of state from remote caches on cache start. +State transfer is only applicable to distributed and replicated caches. +When configured with a timeout, a cache is only available after its initial state transfer completes. +If state transfer does not complete within the configured timeout, the cache will fail to start.

+
+
+

e.g. To configure a state-transfer timeout of 1 minute:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=state-transfer:add(timeout=60000)
+
+
+
+

Alternatively, state transfer can be configured to be non-blocking, by configuring a timeout of 0. +While this prevents timeouts due to large state transfers, cache operations on the new node will require remote invocations to retrieve the requisite state until state transfer is complete.

+
+
+

e.g. To configure a non-blocking state transfer:

+
+
+
+
/subsystem=infinispan/cache-container=foo/local-cache=bar/component=state-transfer:add(timeout=0)
+
+
+
+

For a complete list of state-transfer attributes, refer to the WildFly management model documentation

+
+
+
+
Injecting a cache into Jakarta EE applications
+
+

A cache can be injected directly into Jakarta EE applications using the @Resource annotation, e.g.

+
+
+
+
@Resource(lookup = "java:jboss/infinispan/cache/foo/bar") (1)
+private org.infinispan.Cache<Integer, Object> cache;
+
+
+
+ + + + + +
1where foo is the name of the cache container and bar is the name of the cache to inject
+
+
+

or in order to inject the default cache of the cache container use the following resource lookup:

+
+
+
+
@Resource(lookup = "java:jboss/infinispan/cache/foo/default")
+
+
+
+
+
+
+

9.1.2. Remote Cache Container

+
+

While Infinispan project is used as a library internally by WildFly to provide data distribution, Infinispan project is also distributed in a standalone server mode. +The Infinispan Server cluster operates as a language-independent service accessed remotely over a number of protocols (HotRod, REST, etc).

+
+
+

HotRod is Infinispan’s custom optimized binary protocol which was designed to:

+
+
+
    +
  • +

    enable faster client/server interactions compared to other existing text-based protocols,

    +
  • +
  • +

    allow clients to make more intelligent decisions with regards to load-balancing, failover,

    +
  • +
  • +

    and provide advanced cache operations.

    +
  • +
+
+
+

To learn more about the HotRod protocol itself and how to setup and run Infinispan Server, +refer to Infinispan documentation for the appropriate version.

+
+
+
Configuration
+
+

To configure a remote-cache-container ensure you have a list of available Infinispan Server nodes. +The following example CLI script first adds socket bindings to two known Infinispan Server nodes, +followed by configuration of the cluster.

+
+
+
+
batch
+/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=infinispan-server-1:add(host=server1.example.com, port=11622)
+/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=infinispan-server-2:add(host=server2.example.com, port=11722)
+/subsystem=infinispan/remote-cache-container=foo:add(default-remote-cluster=bar)
+/subsystem=infinispan/remote-cache-container=foo/remote-cluster=bar:add(socket-bindings=[infinispan-server-1, infinispan-server-2])
+run-batch
+
+
+
+

Upon reload, this will register necessary services for the client. +A HotRod client can be injected directly into Jakarta EE applications using the @Resource annotation.

+
+
+
+
@Resource(lookup = "java:jboss/infinispan/remote-container/foo")
+private org.infinispan.client.hotrod.RemoteCacheContainer client;
+
+
+
+
Security
+
+

Securing the store is just a matter of configuring the remote-cache-container with an SSL context. +Please follow the Elytron security guide on how to configure new SSL context +and Infinispan documentation on how to secure Infinispan Server instances.

+
+
+

Once the SSL Context is configured, use the following CLI script to configure remote-cache-container:

+
+
+
+
/subsystem=infinispan/remote-cache-container=foo/component=security:write-attribute(name=ssl-context, value=hotrod-ssl-context)
+
+
+
+
+
Statistics
+
+

To enable the gathering of statistics for a given remote-cache-container, use the statistics-enabled attribute:

+
+
+
+
/subsystem=infinispan/remote-cache-container=foo:write-attribute(name=statistics-enabled, value=true)
+
+
+
+

Using the exposed runtime metrics, users can tune the HotRod thread pool configuration by looking at active vs idle connections.

+
+
+
+
/subsystem=infinispan:remote-cache-container=foo:read-resource(include-runtime=true)
+
+
+
+

The Infinispan subsystem additionally exposes a runtime resource for each started remote cache instance. +The runtime remote cache resource exposes usage metrics (e.g. reads, writes, removes, etc) as well as metrics for tuning near-cache sizes (e.g. hits vs misses).

+
+
+
+
/subsystem=infinispan:remote-cache-container=foo/remote-cache=bar:read-resource(include-runtime=true)
+
+
+
+
+
Switching remote clusters
+
+

If a remote-cache-container configures multiple remote-clusters (e.g. when the infinispan servers are configured with cross site replication), +the hotrod client can toggle the remote-cluster with which it interacts via a runtime management operation.

+
+
+

For example, when the client is configured with multiple remote clusters, typically representing multiple data centers (this presumes that the infinispan servers are configured with cross-site replication), +if connectivity to the default remote cluster fails, the client will automatically fail over to a backup remote cluster. +Once the underlying connectivity issue is resolved, a user can manually fail back to the local site via the switch-cluster operation:

+
+
+
+
/subsystem=infinispan/remote-cache-container=foo/remote-cluster=bar:switch-cluster()
+
+
+
+

This operation returns true if the switch was successful, or false otherwise. +See the server log for specifics in the event that the switch was unsuccessful.

+
+
+
+
+
+
+
+
+

10. Advanced Topics

+
+
+

This section aims to describe cross-cutting topics, such as marshalling.

+
+
+

10.1. Marshalling

+
+

In general, the most effective way to improve the scalability of a system with persistent or distributed state is to reduce the number of bytes needed to be sent over the network or persisted to storage. +Marshalling is the process by which Java objects in heap space are converted to a byte buffer for replication to other JVMs or for persistence to local or shared storage.

+
+
+

WildFly generally supports 2 marshalling mechanisms for use with its clustering modules: JBoss Marshalling and ProtoStream.

+
+
+

10.1.1. JBoss Marshalling

+
+

JBoss Marshalling is a serialization library for objects implementing java.io.Serializable.

+
+
+

When configured to use JBoss Marshalling, an application can optimize the marshalling of a given object, either through custom JDK serialization logic, or by implementing a custom externalizer. +An externalizer is an implementation of the org.wildfly.clustering.marshalling.Externalizer interface, which dictates how a given class should be marshalled. +An externalizer reads/writes the state of an object directly from/to an input/output stream, but also:

+
+
+
    +
  1. +

    Allows an application to replicate/persist an object that does not implement java.io.Serializable

    +
  2. +
  3. +

    Eliminates the need to serialize the class descriptor of an object along with its state

    +
  4. +
+
+
+

e.g.

+
+
+
+
public class MyObjectExternalizer implements org.wildfly.clustering.marshalling.Externalizer<MyObject> {
+
+    @Override
+    public Class<MyObject> getTargetClass() {
+        return MyObject.class;
+    }
+
+    @Override
+    public void writeObject(ObjectOutput output, MyObject object) throws IOException {
+        // Write object state to stream
+    }
+
+    @Override
+    public MyObject readObject(ObjectInput input) throws IOException, ClassNotFoundException {
+        // Construct and read object state from stream
+        return ...;
+    }
+}
+
+
+
+

Externalizers are dynamically loaded during deployment via the service loader mechanism. +Implementations should be enumerated within a file named: +/META-INF/services/org.wildfly.clustering.marshalling.Externalizer

+
+
+
+

10.1.2. ProtoStream

+
+

ProtoStream is serialization library based on the Protobuf data format. +The nature of the Protobuf data format makes it very easy to evolve classes without breaking serialization compatibility. +When compared to JBoss Marshalling, ProtoStream is generally more efficient and generates smaller payloads, especially for objects containing fields that are either optional or have a default value. +Since marshallable classes are explicitly enumerated, ProtoStream is not vulnerable to the same arbitrary code execution exploits that affect JDK serialization.

+
+
+

When configured to use ProtoStream, a web application will need to register ProtoStream marshallers/schemas for every application-specific type. +WildFly initializes its ProtoStream marshaller using all instances of org.infinispan.protostream.SerializationContextInitializer that are visible to the deployment classpath. +Implementations should be enumerated within a file named: +/META-INF/services/org.infinispan.protostream.SerializationContextInitializer

+
+
+

Simple objects can leverage ProtoStream annotations and auto-generate marshallers and schemas at build time.

+
+
+

e.g.

+
+
+
+
@AutoProtoSchemaBuilder(includeClasses = { Person.class })
+public interface PersonInitalizer extends SerializationContextInitializer {
+}
+
+public class Person {
+    @ProtoField(number = 1)
+    final String name;
+    @ProtoField(number = 2, type = Type.UINT32, defaultValue = "0")
+    final int age;
+    @ProtoField(number = 3)
+    Person parent;
+    @ProtoField(number = 4, collectionImplementation = LinkedList.class)
+    final List<Person> children;
+
+    @ProtoFactory
+    Person(String name, int age, Person parent, List<Person> children) {
+        this.name = name;
+        this.age = age;
+        this.parent = parent;
+        this.children = children;
+    }
+
+    public Person(String name, int age) {
+        this.name = name;
+        this.age = age;
+        this.children = new LinkedList<>();
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public int getAge() {
+        return this.age;
+    }
+
+    public Person getParent() {
+        return this.parent;
+    }
+
+    public List<Person> getChildren() {
+        return this.children;
+    }
+
+    public void setParent(Person parent) {
+        this.parent = parent;
+    }
+
+    public void addChild(Person child) {
+        this.children.add(child);
+    }
+}
+
+
+
+

Sufficiently complex objects may require a custom org.infinispan.protostream.SerializationContextInitializer implementation to register custom marshaller implementations and schemas. +Refer to the Infinispan documentation for details.

+
+
+
+
+
+
+

11. Clustering and Domain Setup Walkthrough

+
+
+

In this article, I’d like to show you how to setup WildFly in domain +mode and enable clustering so we could get HA and session replication +among the nodes. It’s a step to step guide so you can follow the +instructions in this article and build the sandbox by yourself.

+
+
+

11.1. Preparation & Scenario

+
+

11.1.1. Preparation

+
+

We need to prepare two hosts (or virtual hosts) to do the experiment. We +will use these two hosts as following:

+
+
+
    +
  • +

    Install Fedora on them (Other linux version may also fine but I’ll +use Fedora in this article)

    +
  • +
  • +

    Make sure that they are in same local network

    +
  • +
  • +

    Make sure that they can access each other via different TCP/UDP +ports (better turn off firewall and disable SELinux during the experiment +or they will cause network problems).

    +
  • +
+
+
+
+

11.1.2. Scenario

+
+

Here are some details on what we are going to do:

+
+
+
    +
  • +

    Let’s call one host as 'primary', the other one as 'secondary'.

    +
  • +
  • +

    Both primary and secondary hosts will run WildFly, and the primary host +will run as a domain controller, the secondary host will under the domain management of primary host.

    +
  • +
  • +

    Apache httpd will be run on the primary host, and in httpd we will enable the +mod_cluster module. The WildFly on primary and secondary hosts will form a +cluster and discovered by httpd.

    +
  • +
+
+
+

clustering/Clustering.jpg

+
+
+
    +
  • +

    We will deploy a demo project into the domain, and verify that the project +is deployed into both primary and secondary Host Controllers by the domain controller. +Thus we could see that domain management provide us a single point to manage the +deployments across multiple hosts in a single domain.

    +
  • +
  • +

    We will access the cluster URL and verify that httpd has distributed +the request to one of the WildFly hosts. So we could see the cluster is +working properly.

    +
  • +
  • +

    We will try to make a request on cluster, and if the request is +forwarded to the Domain Controller, we then kill the WildFly process on the primary host. After +that we will go on requesting cluster and we should see the request is +forwarded to the secondary Host Controller, but the session is not lost. Our goal is to verify +the HA is working and sessions are replicated.

    +
  • +
  • +

    After previous step finished, we reconnect the Domain Controller by restarting +it. We should see the Domain Controller is registered back into cluster, also we +should see the secondary Host Controller sees the primary Host Controller as a domain controller again and connect to it.

    +
  • +
+
+
+

clustering/test_scenario.jpg

+
+
+

Please don’t worry if you cannot digest so many details currently. Let’s +move on and you will get the points step by step.

+
+
+
+
+

11.2. Download WildFly

+
+

First we should download WildFly from the WildFly website.

+
+
+

Then I unzipped the package to the primary host and try to make a test run:

+
+
+
+
unzip wildfly-29.0.0.Final.zip
+cd wildfly-29.0.0.Final/bin
+./domain.sh
+
+
+
+

If everything ok we should see WildFly successfully startup in domain +mode:

+
+
+
+
wildfly-29.0.0.Final/bin$ ./domain.sh
+=========================================================================
+
+  JBoss Bootstrap Environment
+
+  JBOSS_HOME: /Users/weli/Downloads/wildfly-29.0.0.Final
+
+  JAVA: /Library/Java/Home/bin/java
+
+  JAVA_OPTS: -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
+
+=========================================================================
+...
+
+[Server:server-two] 14:46:12,375 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 29.0.0.Final "Kenny" started in 8860ms - Started 210 of 258 services (829 services are lazy, passive or on-demand)
+
+
+
+

Now exit from the primary host and let’s repeat the same steps on the secondary host. Finally, +we get WildFly run on both primary and secondary hosts, then we could move on to +next step.

+
+
+
+

11.3. Domain Configuration

+
+

11.3.1. Interface config on the Primary Host Controller

+
+

In this section we’ll setup both the primary and secondary hosts for them to run in +domain mode. And we will configure the primary host to be the domain controller.

+
+
+

First open the host.xml in the primary host for editing:

+
+
+
+
vi domain/configuration/host.xml
+
+
+
+

The default settings for interface in this file is like:

+
+
+
+
<interfaces>
+    <interface name="management">
+        <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
+    </interface>
+    <interface name="public">
+       <inet-address value="${jboss.bind.address:127.0.0.1}"/>
+    </interface>
+    <interface name="unsecured">
+       <inet-address value="127.0.0.1" />
+    </interface>
+</interfaces>
+
+
+
+

We need to change the address to the management interface so the secondary Host Controller could +connect to the primary Host Controller. The public interface allows the application to be +accessed by non-local HTTP, and the unsecured interface allows remote +RMI access. My primary host’s ip address is 10.211.55.7, so I change the +config to:

+
+
+
+
<interfaces>
+    <interface name="management">
+        <inet-address value="${jboss.bind.address.management:10.211.55.7}"/>
+    </interface>
+    <interface name="public">
+       <inet-address value="${jboss.bind.address:10.211.55.7}"/>
+    </interface>
+    <interface name="unsecured">
+       <inet-address value="10.211.55.7" />
+    </interface>
+</interfaces>
+
+
+
+
+

11.3.2. Interface config on the Secondary Host Controller

+
+

Now we will setup interfaces on the secondary host. Let’s edit host.xml. Similar to +the steps on the primary host, open host.xml first:

+
+
+
+
vi domain/configuration/host.xml
+
+
+
+

The configuration we’ll use on the secondary host is a little bit different, because +we need to let the secondary Host Controller connect to the primary Host Controller. First we need to set the +hostname. We change the name property from:

+
+
+
+
<host name="primary" xmlns="urn:jboss:domain:3.0">
+
+
+
+

to:

+
+
+
+
<host name="secondary" xmlns="urn:jboss:domain:3.0">
+
+
+
+

Then we need to modify domain-controller section so the secondary Host Controller can connect to +primary Host Controller management port:

+
+
+
+
<domain-controller>
+   <remote protocol="remote" host="10.211.55.7" port="9999" />
+</domain-controller>
+
+
+
+

As we know, 10.211.55.7 is the ip address of the primary host. +You may use discovery options to define multiple mechanisms to connect +to the remote domain controller:

+
+
+
+
<domain-controller>
+ <remote authentication-context="hcAuthContext" >
+   <discovery-options>
+     <static-discovery name="primary-native" protocol="remote"  host="10.211.55.7" port="9999" />
+     <static-discovery name="primary-https" protocol="https-remoting" host="10.211.55.7" port="9993"
+                       authentication-context="hcAuthContext"/>
+     <static-discovery name="primary-http" protocol="http-remoting" host="10.211.55.7" port="9990" />
+   </discovery-options>
+ </remote>
+</domain-controller>
+
+
+
+

Finally, we also need to configure interfaces section and expose the +management ports to public address:

+
+
+
+
<interfaces>
+    <interface name="management">
+        <inet-address value="${jboss.bind.address.management:10.211.55.2}"/>
+    </interface>
+    <interface name="public">
+       <inet-address value="${jboss.bind.address:10.211.55.2}"/>
+    </interface>
+    <interface name="unsecured">
+       <inet-address value="10.211.55.2" />
+    </interface>
+</interfaces>
+
+
+
+

10.211.55.2 is the ip address of the secondary host. Refer to the domain +controller configuration above for an explanation of the management, +public, and unsecured interfaces.

+
+
+ + + + + +
+ + +It is easier to turn off all firewalls for testing, but in production, +you need to enable the firewall and allow access to the following ports: +9999. +
+
+
+
Dry Run
+
+

Now everything is set for the two hosts to run in domain mode. Let’s +start them by running domain.sh on both hosts. If everything goes fine, +we could see from the log on the primary Host Controller:

+
+
+
+
[Host Controller] 21:30:52,042 INFO  [org.jboss.as.domain] (management-handler-threads - 1) JBAS010918: Registered remote secondary host "secondary"
+
+
+
+

That means all the configurations are correct and two hosts are run in +domain mode now as expected. Hurrah!

+
+
+
+
+
+

11.4. Deployment

+
+

Now we can deploy a demo project into the domain. I have created a +simple project located at:

+
+
+
+
https://github.com/liweinan/cluster-demo
+
+
+
+

We can use git command to fetch a copy of the demo:

+
+
+
+
git clone git@github.com:liweinan/cluster-demo.git
+
+
+
+

In this demo project we have a very simple web application. In web.xml +we’ve enabled session replication by adding following entry:

+
+
+
+
<distributable/>
+
+
+
+

And it contains a jsp page called put.jsp which will put current time to +a session entry called 'current.time':

+
+
+
+
<%
+    session.setAttribute("current.time", new java.util.Date());
+%>
+
+
+
+

Then we could fetch this value from get.jsp:

+
+
+
+
The time is <%= session.getAttribute("current.time") %>
+
+
+
+

It’s an extremely simple project but it could help us to test the +cluster later: We will access put.jsp from cluster and see the request +are distributed to the primary host, then we disconnect the primary Host Controller and access get.jsp. +We should see the request is forwarded to secondary host but the 'current.time' +value is held by session replication. We’ll cover more details on this +one later.

+
+
+

Let’s go back to this demo project. Now we need to create a war from it. +In the project directory, run the following command to get the war:

+
+
+
+
mvn package
+
+
+
+

It will generate cluster-demo.war. Then we need to deploy the war into +domain. First we should access the http management console on +primary host (Because primary host is acting as domain controller):

+
+
+
+
http://10.211.55.7:9990
+
+
+
+

It will popup a windows ask you to input account name and password, we +can use the 'admin' account we’ve added just now. After logging in we +could see the 'Server Instances' window. By default there are three +servers listed, which are:

+
+
+
    +
  • +

    server-one

    +
  • +
  • +

    server-two

    +
  • +
  • +

    server-three

    +
  • +
+
+
+

We could see server-one and server-two are in running status and they +belong to main-server-group; server-three is in idle status, and it +belongs to other-server-group.

+
+
+

All these servers and server groups are set in domain.xml on the primary host. +What we are interested in is the 'other-server-group' in domain.xml:

+
+
+
+
<server-group name="other-server-group" profile="ha">
+   <jvm name="default">
+       <heap size="64m" max-size="512m"/>
+   </jvm>
+   <socket-binding-group ref="ha-sockets"/>
+</server-group>
+
+
+
+

We could see this server-group is using 'ha' profile, which then uses +'ha-sockets' socket binding group. It enables all the modules we need to +establish cluster later (including infinispan, jgroup and mod_cluster +modules). So we will deploy our demo project into a server that belongs +to 'other-server-group', so 'server-three' is our choice.

+
+
+ + + + + +
+ + +In newer version of WildFly, the profile 'ha' changes to 'full-ha': +
+
+
+
+
<server-group name="other-server-group" profile="full-ha">
+
+
+
+

Let’s go back to domain controller’s management console:

+
+
+
+
http://10.211.55.7:9990
+
+
+
+

Now server-three is not running, so let’s click on 'server-three' and +then click the 'start' button at bottom right of the server list. Wait a +moment and server-three should start now.

+
+
+

Now we should also enable 'server-three' on the secondary Host Controller: From the top of menu +list on left side of the page, we could see now we are managing the primary Host Controller +currently. Click on the list, and click 'secondary', then choose +'server-three', and we are in secondary Host Controller management page now.

+
+
+

Then repeat the steps we’ve done on the primary host to start 'server-three' on +secondary host.

+
+
+ + + + + +
+ + +server-three on primary and secondary host are two different hosts, their names +can be different. +
+
+
+

After server-three on both primary and secondary hosts are started, we will add our +cluster-demo.war for deployment. Click on the 'Manage Deployments' link +at the bottom of left menu list.

+
+
+

clustering/JBoss_Management.png
+(We should ensure the server-three should be started on both primary and +secondary hosts)

+
+
+

After enter 'Manage Deployments' page, click 'Add Content' at top right +corner. Then we should choose our cluster-demo.war, and follow the +instruction to add it into our content repository.

+
+
+

Now we can see cluster-demo.war is added. Next we click 'Add to Groups' +button and add the war to 'other-server-group' and then click 'save'.

+
+
+

Wait a few seconds, management console will tell you that the project is +deployed into 'other-server-group'.:

+
+
+

clustering/JBoss_Management_2.png

+
+
+

Please note we have two hosts participate in this server group, so the +project should be deployed in both primary and secondary hosts now - that’s the +power of domain management.

+
+
+

Now let’s verify this, trying to access cluster-demo from both primary +and secondary hosts, and they should all work now:

+
+
+
+
http://10.211.55.7:8330/cluster-demo/
+
+
+
+

clustering/http---10.211.55.7-8330-cluster-demo-.png

+
+
+
+
http://10.211.55.2:8330/cluster-demo/
+
+
+
+

clustering/http---10.211.55.2-8330-cluster-demo-.png

+
+
+

Now that we have finished the project deployment and see the usages of +domain controller, we will then head up for using these two hosts to +establish a cluster

+
+
+ + + + + +
+ + +Why is the port number 8330 instead of 8080? Please check the settings +in host.xml on both primary and secondary hosts: +
+
+
+
+
<server name="server-three" group="other-server-group" auto-start="false">
+    <!-- server-three avoids port conflicts by incrementing the ports in
+         the default socket-group declared in the server-group -->
+    <socket-bindings port-offset="250"/>
+</server>
+
+
+
+

The port-offset is set to 250, so 8080 + 250 = 8330

+
+
+

Now we quit the WildFly process on both primary and secondary hosts. We have some +work left on host.xml configurations. Open the host.xml of primary host, and +do some modifications the servers section from:

+
+
+
+
<server name="server-three" group="other-server-group" auto-start="false">
+    <!-- server-three avoids port conflicts by incrementing the ports in
+         the default socket-group declared in the server-group -->
+    <socket-bindings port-offset="250"/>
+</server>
+
+
+
+

to:

+
+
+
+
<server name="server-three" group="other-server-group" auto-start="true">
+    <!-- server-three avoids port conflicts by incrementing the ports in
+         the default socket-group declared in the server-group -->
+    <socket-bindings port-offset="250"/>
+</server>
+
+
+
+

We’ve set auto-start to true so we don’t need to enable it in management +console each time WildFly restart. Now open secondary’s host.xml, and modify +the server-three section:

+
+
+
+
<server name="server-three-secondary" group="other-server-group" auto-start="true">
+    <!-- server-three avoids port conflicts by incrementing the ports in
+         the default socket-group declared in the server-group -->
+    <socket-bindings port-offset="250"/>
+</server>
+
+
+
+

Besides setting auto-start to true, we’ve renamed the 'server-three' to +'server-three-secondary'. We need to do this because mod_cluster will fail +to register the hosts with same name in a single server group. It will +cause name conflict.

+
+
+

After finishing the above configuration, let’s restart two as7 hosts and +go on cluster configuration.

+
+
+
+

11.5. Cluster Configuration

+
+

We will use mod_cluster + apache httpd on primary host as our cluster +controller here. Because WildFly has been configured to support +mod_cluster out of box so it’s the easiest way.

+
+
+ + + + + +
+ + +The WildFly domain controller and httpd are not necessary to be on +same host. But in this article I just install them all on primary host for +convenience. +
+
+
+

First we need to ensure that httpd is installed:

+
+
+
+
sudo yum install httpd
+
+
+
+

And then we need to download newer version of mod_cluster from its +website:

+
+
+
+
http://www.jboss.org/mod_cluster/downloads
+
+
+
+

The version I downloaded is:

+
+
+
+
http://downloads.jboss.org/mod_cluster/1.1.3.Final/mod_cluster-1.1.3.Final-linux2-x86-so.tar.gz
+
+
+
+ + + + + +
+ + +Jean-Frederic has suggested to use mod_cluster 1.2.x. Because 1.1.x it +is affected by CVE-2011-4608 +
+
+
+

With mod_cluster-1.2.0 you need to add EnableMCPMReceive in the +VirtualHost.

+
+
+

Then we extract it into:

+
+
+
+
/etc/httpd/modules
+
+
+
+

Then we edit httpd.conf:

+
+
+
+
sudo vi /etc/httpd/conf/httpd.conf
+
+
+
+

We should add the modules:

+
+
+
+
LoadModule slotmem_module modules/mod_slotmem.so
+LoadModule manager_module modules/mod_manager.so
+LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
+LoadModule advertise_module modules/mod_advertise.so
+
+
+
+

Please note we should comment out:

+
+
+
+
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
+
+
+
+

This is conflicted with cluster module. And then we need to make httpd +to listen to public address so we could do the testing. Because we +installed httpd on primary host so we know the ip address of it:

+
+
+
+
Listen 10.211.55.7:80
+
+
+
+

Then we do the necessary configuration at the bottom of httpd.conf:

+
+
+
+
# This Listen port is for the mod_cluster-manager, where you can see the status of mod_cluster.
+# Port 10001 is not a reserved port, so this prevents problems with SELinux.
+Listen 10.211.55.7:10001
+# This directive only applies to Red Hat Enterprise Linux. It prevents the temmporary
+# files from being written to /etc/httpd/logs/ which is not an appropriate location.
+MemManagerFile /var/cache/httpd
+
+<VirtualHost 10.211.55.7:10001>
+
+  <Directory />
+    Order deny,allow
+    Deny from all
+    Allow from 10.211.55.
+  </Directory>
+
+
+  # This directive allows you to view mod_cluster status at URL http://10.211.55.4:10001/mod_cluster-manager
+  <Location /mod_cluster-manager>
+   SetHandler mod_cluster-manager
+   Order deny,allow
+   Deny from all
+   Allow from 10.211.55.
+  </Location>
+
+  KeepAliveTimeout 60
+  MaxKeepAliveRequests 0
+
+  ManagerBalancerName other-server-group
+  AdvertiseFrequency 5
+
+</VirtualHost>
+
+
+
+ + + + + +
+ + +For more details on mod_cluster configurations please see this document: +
+
+
+
+
http://docs.jboss.org/mod_cluster/1.1.0/html/Quick_Start_Guide.html
+
+
+
+
+

11.6. Testing

+
+

If everything goes fine we can start httpd service now:

+
+
+
+
service httpd start
+
+
+
+

Now we access the cluster:

+
+
+
+
http://10.211.55.7/cluster-demo/put.jsp
+
+
+
+

clustering/http---10.211.55.7-cluster-demo-put.jsp.png

+
+
+

We should see the request is distributed to one of the hosts (primary or +secondary) from the WildFly log. For me the request is sent to primary host:

+
+
+
+
[Server:server-three] 16:06:22,256 INFO  [stdout] (http-10.211.55.7-10.211.55.7-8330-4) Putting date now
+
+
+
+

Now I disconnect the Domain Controller by using the management interface. Select +'runtime' and the server 'primary' in the upper corners.

+
+
+

Select 'server-three' and kick the stop button, the active-icon should +change.

+
+
+

Killing the server by using system commands will have the effect that +the Host-Controller restart the instance immediately!

+
+
+

Then wait for a few seconds and access cluster:

+
+
+
+
http://10.211.55.7/cluster-demo/get.jsp
+
+
+
+

clustering/http---10.211.55.7-cluster-demo-get.jsp.png

+
+
+

Now the request should be served by the secondary host and we should see the log from +the secondary Host Controller:

+
+
+
+
[Server:server-three-secondary] 16:08:29,860 INFO  [stdout] (http-10.211.55.2-10.211.55.2-8330-1) Getting date now
+
+
+
+

And from the get.jsp we should see that the time we get is the same +we’ve put by 'put.jsp'. Thus it’s proven that the session is correctly +replicated to the secondary host.

+
+
+

Now we restart the primary Host Controller and should see the host is registered back to +cluster.

+
+
+ + + + + +
+ + +It doesn’t matter if you found the request is distributed to the secondary host at +first time. Then just disconnect the secondary Host Controller and do the testing, the request +should be sent to the primary host instead. The point is we should see the request +is redirect from one host to another and the session is held. +
+
+
+
+

11.7. Special Thanks

+
+

Wolf-Dieter Fink has +contributed the updated add-user.sh usages and configs in host.xml from +7.1.0.Final.
+Jean-Frederic Clere provided +the mod_cluster 1.2.0 usages.
+Misty Stanley-Jones has given a lot of suggestions and helps to make +this document readable.

+
+
+ + + + + +
+ + +References in this document to JavaServer Pages (JSP) refer to the Jakarta Server Pages unless otherwise noted +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Installation_Guide.html b/latest/Installation_Guide.html new file mode 100644 index 000000000..8455f99e4 --- /dev/null +++ b/latest/Installation_Guide.html @@ -0,0 +1,638 @@ + + + + + + + + +Installation Guide + + + + + + +
+
+
+
+

© 2020 The original authors.

+
+ +
+

Zipped distribution, +Galleon provisioning or bootable JAR, this guide helps you identify the +installation strategy that best fits your application requirements.

+
+
+
+
+

1. WildFly or WildFly Preview

+
+
+

The WildFly project now produces two appserver variants, standard WildFly and WildFly Preview, +so you’ll want to decide which is right for you. For most users the standard WildFly variant is the right choice, +but if you’d like a technical preview look at what’s coming in the future, try out WildFly Preview.

+
+
+
+
+

2. Installing WildFly from a zipped distribution

+
+
+

Downloading the WildFly release zip and unzipping it is the traditional way to install +a complete WildFly server with support for both standalone and managed domain operating modes. A WildFly distribution +contains a large number of default configurations allowing you to select the server features and operating modes.

+
+
+

A WildFly distribution based installation is well suited when:

+
+
+
    +
  • +

    You want to rely on a traditional Jakarta EE application deployment.

    +
  • +
  • +

    You want a Jakarta EE or MicroProfile platform compliant server that offers all Jakarta EE or MicroProfile features.

    +
  • +
  • +

    You are not (yet) concerned by server installation size and memory footprint.

    +
  • +
  • +

    You are not yet sure of the kind of operating mode and application you are targeting.

    +
  • +
  • +

    Your server instances will contain one or more application deployments.

    +
  • +
+
+
+

If that is the kind of installation you are aiming at, the guides that you should read next are:

+
+
+ +
+
+
+
+

3. Installing WildFly with Galleon

+
+
+

Galleon provisioning tooling allows you to construct a customized WildFly installation according to your application needs. +Some applications don’t need a fully featured server supporting all operating modes and containing all Jakarta EE capabilities. +Galleon tooling allows you to select the server capabilities you want to see installed.

+
+
+

A WildFly server provisioned with Galleon is well suited when:

+
+
+
    +
  • +

    You want to rely on a traditional Jakarta EE application deployment.

    +
  • +
  • +

    You want to easily update an installation to the latest WildFly version.

    +
  • +
  • +

    Your application requires only a subset of the Jakarta EE or MicroProfile platform APIs +(although Galleon can provision a server that supports the full set of Jakarta EE and MicroProfile platform APIs).

    +
  • +
  • +

    You are concerned by server installation size and memory footprint.

    +
  • +
  • +

    You are only using standalone operating mode (with support for High Availability or not).

    +
  • +
  • +

    Your server instances will contain one or more application deployments.

    +
  • +
+
+
+

If that is the kind of installation you are aiming at, the guides that you should read next are:

+
+
+ +
+
+
+
+

4. WildFly Bootable JAR

+
+
+

A bootable JAR contains both a customized WildFly server and your deployment. Such a JAR can +then run with a simple java command such as java -jar myapp-bootable.jar

+
+
+

A bootable JAR is built using Maven. You need to integrate the +bootable JAR Maven plugin +in the Maven project of your application.

+
+
+

A Bootable JAR is well suited when:

+
+
+
    +
  • +

    You want to leverage your existing WildFly applications.

    +
  • +
  • +

    You want to build a microservice composed of a server and a single application deployment.

    +
  • +
  • +

    You are concerned by JAR size and memory footprint.

    +
  • +
  • +

    You are only using standalone operating mode (with support for High Availability or not).

    +
  • +
  • +

    You are building your application using Maven.

    +
  • +
+
+
+

If that is the kind of installation you are aiming at, the guide that you should read next is:

+
+
+
    +
  • +

    The Bootable JAR Guide shows you how to package your application and the WildFly server +into a bootable JAR.

    +
  • +
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/JavaEE_Tutorial.html b/latest/JavaEE_Tutorial.html new file mode 100644 index 000000000..606b7eca2 --- /dev/null +++ b/latest/JavaEE_Tutorial.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /23/JavaEE_Tutorial.html

+ + \ No newline at end of file diff --git a/latest/Migration_Guide.html b/latest/Migration_Guide.html new file mode 100644 index 000000000..82be1f327 --- /dev/null +++ b/latest/Migration_Guide.html @@ -0,0 +1,904 @@ + + + + + + + + +WildFly Migration Guide + + + + + + + +
+
+
+
+

© 2021 The original authors.

+
+ +
+
+
+

1. Introduction

+
+
+

Since the initial development of JBoss AS7 the features added to WildFly have been continuing to +increase, some of the older features are now being removed to make way for new features. This +guide contains information about the removed features and their alternatives.

+
+
+
+
+

2. PicketBox Vault

+
+
+

WildFly Elytron has made available a new credential store which replaces the PicketBox vault. The +credential store can be used for credentials to be directly looked up for use by resources or it +can be used to store a SecretKey which can be used by an expression resolver to decrypt +previously encrypted expressions in the management model.

+
+
+

2.1. Credential Store Creation

+
+

Before credentials can be added a new credential store needs to be created.

+
+
+

2.1.1. From the command line

+
+

The first option is to use the Elytron command line utility to create a new store.

+
+
+
+
bin/elytron-tool.sh credential-store --create \
+    --location=standalone/configuration/credentials.store
+Credential store password:
+Confirm credential store password:
+Credential Store has been successfully created
+
+
+
+

The creation process prompts for a password for the store twice and automatically creates the +store.

+
+
+
+

2.1.2. Defining the credential store in the management model

+
+

This newly created credential store can be added to the management model of a running server.

+
+
+
+
/subsystem=elytron/credential-store=mystore:add( \
+    relative-to=jboss.server.config.dir, \
+    location=credentials.store, \
+    credential-reference={clear-text=cs_password})
+{"outcome" => "success"}
+
+
+
+

Instead of using the clear text password it is also possible to obfuscate the password using the +mask command in the command line tool.

+
+
+
+
bin/elytron-tool.sh mask --secret=cs_password --salt=12345678 --iteration=256
+MASK-0BjKFw41KSAGZr/OtiZNI1;12345678;256
+
+
+
+

The credential store resource can then be defined as.

+
+
+
+
/subsystem=elytron/credential-store=mystore:add( \
+    relative-to=jboss.server.config.dir, \
+    location=credentials.store, \
+    credential-reference={clear-text=MASK-0BjKFw41KSAGZr/OtiZNI1;12345678;256})
+{"outcome" => "success"}
+
+
+
+
+

2.1.3. Automatically creating the store

+
+

If the credential store file did not already exist, with a small change to the add operation +the store will be automatically created for you.

+
+
+
+
/subsystem=elytron/credential-store=mystore:add( \
+    relative-to=jboss.server.config.dir,
+    location=credentials.store,
+    credential-reference={clear-text=cs_password}, \
+    create=true)
+{"outcome" => "success"}
+
+
+
+
+
+

2.2. Adding Credentials

+
+

However the store was created credentials can be added using either the command line utility or a +management operation. If using the command line utility it is recommended that this is performed +when no running server is using the store to prevent accidental overwrites.

+
+
+

2.2.1. From the command line

+
+

The following command will add a new entry to the store under the alias example.

+
+
+
+
bin/elytron-tool.sh credential-store --add=example \
+    --location=standalone/configuration/credentials.store
+Credential store password:
+Secret to store:
+Confirm secret to store:
+Alias "example" has been successfully stored
+
+
+
+

This command prompts for the credential store password once followed by promting for the secret to +store twice.

+
+
+
+

2.2.2. Using a management operation

+
+

The following management operation can add an entry to the credential store:

+
+
+
+
history --disable
+/subsystem=elytron/credential-store=mystore:add-alias(alias=example, \
+    secret-value=example_password)
+{"outcome" => "success"}
+history --enable
+
+
+
+

In this example the CLI history is temporarily disabled to prevent the password being stored in the +history file.

+
+
+
+
+

2.3. Listing credential store contents

+
+

The command line tool and management operations can both be used to list the contents of the +credential store.

+
+
+

2.3.1. From the command line

+
+

The aliases in the credential store can be listed with the following command:

+
+
+
+
bin/elytron-tool.sh credential-store --aliases \
+    --location=standalone/configuration/credentials.store
+Credential store password:
+Credential store contains following aliases: example
+
+
+
+
+

2.3.2. Using a management operation

+
+

The read-aliases management operation can be used with a credential store to list the aliases +it contains.

+
+
+
+
/subsystem=elytron/credential-store=mystore:read-aliases
+{
+    "outcome" => "success",
+    "result" => ["example"]
+}
+
+
+
+
+
+

2.4. Vault Conversion

+
+

The WildFly Elytron tool can also be used to convert an existing vault to a credential store.

+
+
+
+
bin/elytron-tool.sh vault --enc-dir standalone/configuration/vault \
+    --keystore standalone/configuration/vault.keystore \
+    --location standalone/configuration/converted.store
+Vault password:
+Confirm vault password:
+Vault (enc-dir="standalone/configuration/vault";keystore="standalone/configuration/vault.keystore") \
+    converted to credential store "standalone/configuration/converted.store"
+
+
+
+

This will convert all of the contents of the vault to a new credential store. Vault entries were +identified using a BLOCK and a NAME, the resulting alias in the credential store will be in the +format BLOCK::NAME.

+
+
+
+

2.5. Referencing a credential store credential

+
+

Resources in the management model which can reference credentials from the credential store use a +credential-reference attribute, in defining the credential store previously this was used with +a clear-password but it can also be used to reference an alias stored within a credential store.

+
+
+

The following managment operation demonstrates defining a new key-store resource using a +credential store entry for the password.

+
+
+
+
/subsystem=elytron/key-store=test-store:add( \
+    relative-to=jboss.server.config.dir, \
+    path=test.keystore, required=false, \
+    credential-reference={store=mystore, alias=example})
+{"outcome" => "success"}
+
+
+
+
+

2.6. Encrypted Expressions

+
+

In addition to using direct references to credentials it is also possible to use a SecretKey to +handle previously encrypted expressions directly within the management model.

+
+
+

2.6.1. Adding a SecretKey to a credential store

+
+

Before encrypted expressions can be used an AES SecretKey is required. The previous vault +password making made use of a well known password for obfuscating, by using a SecretKey instead +users can manage their own key.

+
+
+
From the command line
+
+

A SecretKey can be added to the credential store with the following command:

+
+
+
+
bin/elytron-tool.sh credential-store --generate-secret-key=key \
+    --location standalone/configuration/credentials.store
+Credential store password:
+Alias "key" has been successfully stored
+
+
+
+
+
Using a management operation
+
+

The following management operation can also add a dynamically generated SecretKey:

+
+
+
+
/subsystem=elytron/credential-store=mystore:generate-secret-key(alias=key)
+{"outcome" => "success"}
+
+
+
+
+
+

2.6.2. Using a secret-key-credential-store

+
+

Alternatively it may be desirable to manage a SecretKey which is not itself password +protected. An alternative resource is available for this:

+
+
+
+
/subsystem=elytron/secret-key-credential-store=secret-key-store:add( \
+    relative-to=jboss.server.config.dir, path=secret-key.store)
+{"outcome" => "success"}
+
+
+
+

This command will have also populated the new store with a SecretKey under the alias key.

+
+
+
+

2.6.3. Adding the expression resolver resource

+
+

A new resource can be added to the elytron subsystem which is responsible for handling encrypted +expressions.

+
+
+
+
/subsystem=elytron/expression=encryption:add( \
+    resolvers=[{name=default, \
+                credential-store=secret-key-store, \
+                secret-key=key}], \
+    default-resolver=default)
+{"outcome" => "success"}
+
+
+
+
+

2.6.4. Creating an expression

+
+

The easiest way to create an encrupted expression is using a management operation as the result +takes into account the configured expression=encryption resource.

+
+
+
+
history --disable
+/subsystem=elytron/expression=encryption:create-expression(clear-text=my_password)
+{
+    "outcome" => "success",
+    "result" => {"expression" => "${ENC::RUxZAUMQ5Z7mXbyrCtv2kZlwHHpyJ//ma49gMAUnbmTfv2pGs30=}"}
+}
+
+history --enable
+
+
+
+

The resulting expression ${ENC::RUxZAUMQ5Z7mXbyrCtv2kZlwHHpyJ//ma49gMAUnbmTfv2pGs30=} can now be +used as the value for any other attribute in the management model which supports expressions.

+
+
+
+
+

2.7. Further Reading

+
+

The WildFly Elytron Security guide contains further information regarding Credential Stores and Encrypted Expressions.

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Quickstarts.html b/latest/Quickstarts.html new file mode 100644 index 000000000..8833e620b --- /dev/null +++ b/latest/Quickstarts.html @@ -0,0 +1,512 @@ + + + + + + + + +Quickstarts + + + + + + +
+
+
+
+

© 2021 The original authors.

+
+ +
+

WildFly ships with a number of quickstarts that show you how to get +started with a variety of technologies in WildFly. You’ll find out how +to write a web application using the latest Jakarta EE technologies like +Jakarta Contexts and Dependency Injection and Jakarta RESTful Web Services. +How to write client libraries to talk to WildFly using web services, Jakarta Messaging or Jakarta Enterprise Beans. +How to set up a distributed transaction, and how to recover from a +transaction failure. And much, much more.

+
+
+
+
+

1. Getting Started

+
+
+

Some of the quickstarts are described in great detail in the +Getting Started +Developing Applications Guide, which focuses on how get WildFly and +Eclipse, with JBoss Tools set up, and how to build web applications.

+
+
+

The other quickstarts are all described in README files and code +comments, including what to look out for, how to install and start +WildFly, and how to deploy and test the quickstart.

+
+
+

To download the quickstarts, visit +https://github.com/wildfly/quickstart.

+
+
+
+
+

2. Contributing

+
+
+

If you want to contribute to the quickstarts, check out our +Contributing a Quickstart page.

+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/Testsuite.html b/latest/Testsuite.html new file mode 100644 index 000000000..4d23de36c --- /dev/null +++ b/latest/Testsuite.html @@ -0,0 +1,3717 @@ + + + + + + + + +WildFly Testsuite + + + + + + + +
+
+
+
+

© 2017 The original authors.

+
+ +
+
+
+

1. WildFly Testsuite Overview

+
+
+ + + + + +
+ + +This section has not been updated for a long time and some sections are out of date. Contributions are welcome. +
+
+
+

This document will detail the implementation of the testsuite +integration submodule as it guides you on adding your own test cases.

+
+
+

The WildFly integration test suite has been designed with the following +goals:

+
+
+
    +
  • +

    support execution of all identified test case use cases

    +
  • +
  • +

    employ a design/organization which is scalable and maintainable

    +
  • +
  • +

    provide support for the automated measurement of test suite quality +(generation of feature coverage reports, code coverage reports)

    +
  • +
+
+
+

In addition, these requirements were considered:

+
+
+
    +
  • +

    identifying distinct test case runs of the same test case with a +different set of client side parameters and server side parameters

    +
  • +
  • +

    separately maintaining server side execution results (e.g. logs, the +original server configuration) for post-execution debugging

    +
  • +
  • +

    running the testsuite in conjunction with a debugger

    +
  • +
  • +

    the execution of a single test (for debugging purposes)

    +
  • +
  • +

    running test cases against different container modes (managed in the +main, but also remote and embedded)

    +
  • +
  • +

    configuring client and server JVMs separately (e.g., IPv6 testing)

    +
  • +
+
+
+

1.1. Test Suite Organization

+
+

The testsuite module has a few submodules:

+
+
+
    +
  • +

    benchmark - holds all benchmark tests intended to assess relative +performance of specific feature

    +
  • +
  • +

    domain - holds all domain management tests

    +
  • +
  • +

    integration - holds all integration tests

    +
  • +
  • +

    stress - holds all stress tests

    +
  • +
+
+
+

It is expected that test contributions fit into one of these categories.

+
+
+

The pom.xml file located in the testsuite module is inherited by all +submodules and is used to do the following:

+
+
+
    +
  • +

    set defaults for common testsuite system properties (which can then be +overridden on the command line)

    +
  • +
  • +

    define dependencies common to all tests (Arquillian, junit or testng, +and container type)

    +
  • +
  • +

    provide a workaround for @Resource(lookup=…​) which requires +libraries in jbossas/endorsed

    +
  • +
+
+
+

It should not:

+
+
+
    +
  • +

    define module-specific server configuration build steps

    +
  • +
  • +

    define module-specific surefire executions

    +
  • +
+
+
+

These elements should be defined in logical profiles associated with +each logical grouping of tests; e.g., in the pom for the module which +contains the tests. The submodule poms contain additional details of +their function and purpose as well as expanded information as shown in +this document.

+
+
+
+

1.2. Profiles

+
+

You should not activate the abovementioned profiles by -P, because that +disables other profiles which are activated by default.

+
+
+

Instead, you should always use activating properties, which are in +parentheses in the lists below.

+
+
+

Testsuite profiles are used to group tests into logical groups.

+
+
+
    +
  • +

    all-modules.module.profile (all-modules)

    +
  • +
  • +

    integration.module.profile (integration.module)

    +
  • +
  • +

    compat.module.profile (compat.module)

    +
  • +
  • +

    domain.module.profile (domain.module)

    +
  • +
  • +

    benchmark.module.profile (benchmark.module)

    +
  • +
  • +

    stress.module.profile (stress.module)

    +
  • +
+
+
+

They also prepare WildFly instances and resources for respective +testsuite submodules.

+
+
+
    +
  • +

    jpda.profile - sets surefire.jpda.args (debug)

    +
  • +
  • +

    ds.profile - sets database properties and prepares the datasource (ds=<db id>)

    +
    +
      +
    • +

      Has related database-specific profiles, like mysql51.profile etc.

      +
    • +
    +
    +
  • +
+
+
+

Integration testsuite profiles configure surefire executions.

+
+
+
    +
  • +

    smoke.integration.tests.profile

    +
  • +
  • +

    basic.integration.tests.profile

    +
  • +
  • +

    clustering.integration.tests.profile

    +
  • +
+
+
+
+

1.3. Integration tests

+
+

1.3.1. Smoke -Dts.smoke

+
+

Contains smoke tests.

+
+
+

Runs by default; use -Dts.noSmoke to prevent running.

+
+
+

Tests should execute quickly.

+
+
+

Divided into two Surefire executions:

+
+
+
    +
  • +

    One with full platform

    +
  • +
  • +

    Second with web profile (majority of tests).

    +
  • +
+
+
+
+

1.3.2. Basic -Dts.basic

+
+

Basic integration tests - those which do not need a special configuration +like cluster.

+
+
+

Divided into three Surefire executions:

+
+
+
    +
  • +

    One with full platform,

    +
  • +
  • +

    Second with web profile (majority of tests).

    +
  • +
  • +

    Third with web profile, but needs to be run after server restart to +check whether persistent data are really persisted.

    +
  • +
+
+
+
+

1.3.3. Clustering -Dts.clustering

+
+

Contains all tests relating to clustering aspects of the application server, such as:

+
+
+
    +
  • +

    web session clustering,

    +
  • +
  • +

    Jakarta Enterprise Beans session clustering,

    +
  • +
  • +

    command dispatcher,

    +
  • +
  • +

    web session affinity handling,

    +
  • +
  • +

    and other areas.

    +
  • +
+
+
+

Tests should leverage shared testing logic by extending org.jboss.as.test.clustering.cluster.AbstractClusteringTestCase. +The test case contract is that before executing the test method, all specified servers are started and all specified +deployments are deployed. This allows Arquillian resource injection into the test case.

+
+
+

There are four WildFly server instances, one load-balancer (Undertow) and one datagrid (Infinispan server) available +for the tests.

+
+
+
Maven profiles and Parallelization
+
+

There are maven profiles that might come in handy for testing:

+
+
+
    +
  • +

    ts.clustering.common.profile prepares server configurations used by test execution profiles

    +
  • +
  • +

    ts.clustering.cluster.ha.profile runs tests against standalone-ha.xml profile

    +
  • +
  • +

    ts.clustering.cluster.fullha.profile runs tests which require standalone-full-ha.xml profile; e.g. tests requiring JMS subsystem

    +
  • +
  • +

    ts.clustering.cluster.ha-infinispan-server.profile runs tests against standalone-ha.xml profile with Infinispan Server provisioned via @ClassRule

    +
  • +
  • +

    ts.clustering.single.profile runs clustering tests that are using a non-HA server profile

    +
  • +
  • +

    ts.clustering.byteman.profile runs clustering tests that require installation of byteman rules

    +
  • +
+
+
+

For instance, to only run tests that run against full-ha profile, activate clustering tests with -Dts.clustering and exclude +the other profiles with -P:

+
+
+
+
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -P \!ts.clustering.cluster.ha.profile,\!ts.clustering.single.profile,\!ts.clustering.byteman.profile
+
+
+
+

If the testsuite can be run on multiple runners in parallel, the main execution (which takes the majority of the execution time) +can be split by packages using -Dts.surefire.clustering.ha.additionalExcludes property. +This property feeds a regular expression to exclude sub-packages of the org.jboss.as.test.clustering.cluster package. +The sub-packages at the time of writing are affinity, cdi, dispatcher, ejb, ejb2, group, jms, jpa, +jsf, provider, registry, singleton, sso, web, and xsite. +For instance, to parallelize testsuite execution on two machines (e.g. when using GitHub actions scripting or alike) the following commands +could be used to split the clustering tests into two executions of similar execution time, the first node can run the first half of the tests in sub-packages, e.g.:

+
+
+
+
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -P="-ts.clustering.cluster.fullha.profile,-ts.clustering.cluster.ha-infinispan-server.profile,-ts.clustering.byteman.profile,-ts.clustering.single.profile" -Dts.surefire.clustering.ha.additionalExcludes=affinity\|cdi\|dispatcher\|ejb\|ejb2\|group\|jms\|jpa
+
+
+
+

while another node can concurrently run all the other profiles and the other half of sub-packages:

+
+
+
+
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -Dts.surefire.clustering.ha.additionalExcludes=jsf\|provider\|registry\|singleton\|sso\|web\|xsite
+
+
+
+

If the test packages get out of sync with the excludes this will result in a test running multiple times, rather than tests being omitted.

+
+
+
+
Running a single test
+
+

To run a single test, specifying -Dtest=foo is the standard way to do this. However, this overrides the includes/excludes +section of the surefire maven plugin execution. So, in case of the clustering testsuite, the profile which this test belongs +to, needs to be specified as well. For instance, to run a single test from the 'single' test execution, exclude the other +test profiles:

+
+
+
+
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -P="-ts.clustering.cluster.ha.profile,-ts.clustering.cluster.fullha.profile,-ts.clustering.cluster.ha-infinispan-server.profile,-ts.clustering.byteman.profile,-ts.clustering.single.profile" -Dtest=org.jboss.as.test.clustering.single.dispatcher.CommandDispatcherTestCase
+
+
+
+
+
+

1.3.4. Running Infinispan Server tests against custom distribution

+
+

To run the Infinispan Server-based tests against a custom distribution, a custom location can be specified with -Dinfinispan.server.home.override=/foo/bar +and -Dinfinispan.server.profile.override=infinispan-13.0.xml to use a corresponding server profile. +The distribution is then copied over to the build directories and patched with user credentials.

+
+
+
+
$ ./integration-tests.sh clean install -Dts.noSmoke -Dts.clustering -P="-ts.clustering.cluster.ha.profile,-ts.clustering.cluster.fullha.profile,-ts.clustering.single.profile,-ts.clustering.byteman.profile,-ts.clustering.single.profile" -Dinfinispan.server.home.override=/Users/rhusar/Downloads/redhat-datagrid-8.3.0-server
+
+
+
+

Should it be required, the Infinispan Server driver version can be also overridden by -Dversion.org.infinispan.server.driver=13.0.0.Dev03.

+
+
+
Skipping clustering tests
+
+

To skip execution of all clustering tests use -Dts.noClustering.

+
+
+
+
+

1.3.5. IIOP -Dts.iiop

+
+ + + + + +
+ + +This section is open for contributions. +
+
+
+
+

1.3.6. XTS -Dts.XTS

+
+ + + + + +
+ + +This section is open for contributions. +
+
+
+
+

1.3.7. Multinode -Dts.multinode

+
+ + + + + +
+ + +This section is open for contributions. +
+
+
+
+
+
+
+

2. WildFly Integration Testsuite User Guide

+
+ +
+

Target Audience: Those interested in running the testsuite or a subset +thereof, with various configuration options.

+
+
+

2.1. Running the testsuite

+
+

The tests can be run using:

+
+
+
    +
  • +

    build.sh or build.bat, as a part of WildFly build.

    +
    +
      +
    • +

      By default, only smoke tests are run. To run all tests, run build.sh +install -DallTests.

      +
    • +
    +
    +
  • +
  • +

    integration-tests.sh or integration-tests.bat, a convenience +script which uses bundled Maven (currently 3.0.3), and runs all parent +testsuite modules (which configure the AS server).

    +
  • +
  • +

    pure maven run, using mvn install.

    +
  • +
+
+
+

The scripts are wrappers around Maven-based build. Their arguments are +passed to Maven (with few exceptions described below). This means you +can use:

+
+
+
    +
  • +

    build.sh (defaults to install)

    +
  • +
  • +

    build.sh install

    +
  • +
  • +

    build.sh clean install

    +
  • +
  • +

    integration-tests.sh install

    +
  • +
  • +

    …​etc.

    +
  • +
+
+
+

2.1.1. Supported Maven phases

+
+

Testsuite actions are bounds to various Maven phases up to verify. +Running the build with earlier phases may fail in the submodules due to +missed configuration steps. Therefore, the only Maven phases you may +safely run, are:

+
+
+
    +
  • +

    clean

    +
  • +
  • +

    install

    +
  • +
  • +

    site

    +
  • +
+
+
+

The test phase is not recommended to be used for scripted jobs as we +are planning to switch to the failsafe plugin bound to the +integration-test and verify phases. See +WFLY-625 and +WFLY-228.

+
+
+
+

2.1.2. Testsuite structure

+
+

testsuite
+integration
+smoke
+basic
+clust
+iiop
+multinode
+xts
+compat
+domain
+mixed-domain
+stress
+benchmark

+
+
+
+

2.1.3. Test groups

+
+

To define groups of tests to be run, these properties are available:

+
+
+
    +
  • +

    -DallTests - Runs all subgroups.

    +
  • +
  • +

    -DallInteg - Runs all integration tests. Same as +cd testsuite/integration; mvn clean install -DallTests

    +
  • +
  • +

    -Dts.integ - Basic integration + clustering tests.

    +
  • +
  • +

    -Dts.clustering - Clustering tests.

    +
  • +
  • +

    -Dts.iiop - IIOP tests.

    +
  • +
  • +

    `-Dts.multinode `- Tests with many nodes.

    +
  • +
  • +

    -Dts.manualmode - Tests with manual mode Arquillian containers.

    +
  • +
  • +

    -Dts.bench - Benchmark tests.

    +
  • +
  • +

    -Dts.stress - Stress tests.

    +
  • +
  • +

    -Dts.domain - Domain mode tests.

    +
  • +
  • +

    -Dts.compat - Compatibility tests.

    +
  • +
+
+
+
+
+

2.2. Examples

+
+
    +
  • +

    integration-tests.sh [install] ` ` -- Runs smoke tests.

    +
  • +
  • +

    integration-tests.sh clean install — Cleans the target directory, then runs smoke tests.

    +
  • +
  • +

    integration-tests.sh install -Dts.smoke ` ` -- Same as above.

    +
  • +
  • +

    integration-tests.sh install -DallTests ` ` +-- Runs all testsuite tests.

    +
  • +
  • +

    integration-tests.sh install -Dts.stress — Runs smoke tests and stress tests.

    +
  • +
  • +

    integration-tests.sh install -Dts.stress -Dts.noSmoke — Runs stress tests only.

    +
  • +
+
+
+

Pure maven - if you prefer not to use scripts, you may achieve the +same result with:

+
+
+
    +
  • +

    mvn …​ -rf testsuite

    +
  • +
+
+
+

The -rf …​ parameter stands for "resume from" and causes Maven to run +the specified module and all successive.

+
+
+

It’s possible to run only a single module (provided the ancestor modules +were already run to create the AS copies) :

+
+
+
    +
  • +

    mvn …​ -pl testsuite/integration/cluster

    +
  • +
+
+
+

The -pl …​ parameter stands for "project list" and causes Maven to +run the specified module only.

+
+
+

2.2.1. Output to console

+
+
+
-DtestLogToFile
+
+
+
+
+

2.2.2. Other options

+
+

-DnoWebProfile - Run all tests with the full profile ( +standalone-full.xml). By default, most tests are run under web +profile ( standalone.xml).

+
+
+

-Dts.skipTests - Skip testsuite’s tests. Defaults to the value of +-DskipTests, which defaults to false. To build AS, skip unit tests +and run testsuite, use -DskipTests -Dts.skipTests=false.

+
+
+
+

2.2.3. Timeouts

+
+
Surefire execution timeout
+
+

Unfortunatelly, no math can be done in Maven, so instead of applying a +timeout ratio, you need to specify timeout manually for Surefire.

+
+
+
+
-Dsurefire.forked.process.timeout=900
+
+
+
+
+
In-test timeout ratios
+
+

Ratio in prercent - 100 = default, 200 = two times longer timeouts for +given category.

+
+
+

Currently we have five different ratios. Later, it could be replaced +with just one generic, one for database and one for deployment +operations.

+
+
+
+
-Dtimeout.ratio.fsio=100
+-Dtimeout.ratio.netio=100
+-Dtimeout.ratio.memio=100
+-Dtimeout.ratio.proc=100
+-Dtimeout.ratio.db=100
+
+
+
+
+
+

2.2.4. Running a single test (or specified tests)

+
+

Single test is run using -Dtest=…​ . Examples:

+
+
+
    +
  • +

    ./integration-tests.sh install -Dtest='*Clustered*' -Dintegration.module -Dts.clustering

    +
  • +
  • +

    ./integration-tests.sh clean install -Dtest=org / jboss / as +/ test / integration / ejb/async/*TestCase.java +-Dintegration.module -Dts.basic

    +
  • +
  • +

    cd testsuite; mvn install -Dtest='*Clustered*' +-Dts.basic +# No need for -Dintegration.module - integration module is active by default.

    +
  • +
+
+
+

The same shortcuts listed in "Test groups" may be used to activate the +module and group profile.

+
+
+

Note that -Dtest= overrides <includes> and <exludes> defined in +pom.xml, so do not rely on them when using wildcards - all compiled test +classes matching the wildcard will be run.

+
+
+

Which Surefire execution is used?

+
+
+

Due to Surefire’s design flaw, tests run multiple times if there are +multiple surefire executions.
+To prevent this, if -Dtest=…​ is specified, non-default executions +are disabled, and standalone-full is used for all tests.
+If you need it other way, you can overcome that need:

+
+
+
    +
  • +

    basic-integration-web.surefire with standalone.xml - Configure standalone.xml to be used as server config.

    +
  • +
  • +

    basic-integration-non-web.surefire - For tests included here, technically nothing changes.

    +
  • +
  • +

    basic-integration-2nd.surefire - Simply run the second test in another invocation of Maven.

    +
  • +
+
+
+
+

2.2.5. Running against existing AS copy (not the one from

+
+

build/target/jboss-as-*)

+
+
+

-Djboss.dist=<path/to/jboss-as> will tell the testsuite to copy that +AS into submodules to run the tests against.

+
+
+

For example, you might want to run the testsuite against AS located in +/opt/wildfly-8 :

+
+
+
+
./integration-tests.sh -DallTests -Djboss.dist=/opt/wildfly-8
+
+
+
+

The difference between jboss.dist and jboss.home:

+
+
+

jboss.dist is the location of the tested binaries. It gets copied to +testsuite submodules.

+
+
+

jboss.home is internally used and points to those copied AS instances +(for multinode tests, may be even different for each AS started by +Arquillian).

+
+
+
Running against a running JBoss AS instance
+
+

Arquillian’s WildFly 29 container adapter allows specifying +allowConnectingToRunningServer in arquillian.xml, which makes it +check whether AS is listening at managementAddress:managementPort, and +if so, it uses that server instead of launching a new one, and doesn’t +shut it down at the end.

+
+
+

All arquillian.xml’s in the testsuite specify this parameter. Thus, if +you have a server already running, it will be re-used.

+
+
+
+
Running against JBoss Enterprise Application Platform (EAP) 6.0
+
+

To run the testsuite against AS included JBoss Enterprise Application +Platform 6.x (EAP), special steps are needed.

+
+
+

Assuming you already have the sources available, and the distributed EAP +maven repository unzipped in e.g. /opt/jboss/eap6-maven-repo/ :

+
+
+

1) Configure maven in settings.xml to use only the EAP repository. This +repo contains all artifacts necessary for building EAP, including maven +plugins.
+The build (unlike running testsuite) may be done offline.
+The recommended way of configuring is to use special settings.xml, not +your local one (typically in .m2/settings.xml).

+
+
+
+
   <mirror>
+      <id>eap6-mirror-setting</id>
+      <mirrorOf>
+         *,!central-eap6,!central-eap6-plugins,!jboss-public-eap6,!jboss-public-eap6-plugins
+      </mirrorOf>
+      <name>Mirror Settings for EAP 6 build</name>
+      <url>file:///opt/jboss/eap6-maven-repo</url>
+    </mirror></mirrors>
+
+
+
+

\2) Build EAP. You won’t use the resulting EAP build, though. The +purpose is to get the artifacts which the testsuite depends on.

+
+
+
+
mvn clean install -s settings.xml -Dmaven.repo.local=local-repo-eap
+
+
+
+

\3) Run the testsuite. Assuming that EAP is located in /opt/eap6, you +would run:

+
+
+
+
./integration-tests.sh -DallTests -Djboss.dist=/opt/eap6
+
+
+
+

For further information on building EAP and running the testsuite +against it, see the official EAP documentation (link to be added) +.

+
+
+

How-to for EAP QA can be found +here (Red Hat internal +only).

+
+
+
+
+

2.2.6. Running with a debugger

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentWhat will start with debuggerDefault portPort change arg.

-Ddebug

AS instances run by Arquillian

8787

-Das.debug.port=…​

-Djpda

alias for -Ddebug

 

 

-DdebugClient

Test JVMs (currently Surefire)

5050

-Ddebug.port.surefire=…​

-DdebugCLI

AS CLI

5051

-Ddebug.port.cli=…​

+
+
Examples
+
+
+
./integration-tests.sh install -DdebugClient -Ddebug.port.surefire=4040
+ 
+...
+ 
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Listening for transport dt_socket at address: 4040
+
+
+
+
+
./integration-tests.sh install -DdebugClient -Ddebug.port.surefire
+ 
+...
+ 
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Listening for transport dt_socket at address: 5050
+
+
+
+
+
./integration-tests.sh install -Ddebug
+
+
+
+
+
./integration-tests.sh install -Ddebug -Das.debug.port=5005
+
+
+
+ + + + + +
+ + +JBoss AS is started by Arquillian, when the first test which requires +given instance is run. Unless you pass -DtestLogToFile=false, there’s +(currently) no challenge text in the console; it will look like the +first test is stuck. This is being solved in +http://jira.codehaus.org/browse/SUREFIRE-781. +
+
+
+ + + + + +
+ + +Depending on which test group(s) you run, multiple AS instances may be +started. In that case, you need to attach the debugger multiple times. +
+
+
+
+
+

2.2.7. Running tests with custom database

+
+

To run with different database, specify the -Dds and use these +properties (with the following defaults):

+
+
+
+
-Dds.jdbc.driver=
+-Dds.jdbc.driver.version=
+-Dds.jdbc.url=
+-Dds.jdbc.user=test
+-Dds.jdbc.pass=test
+-Dds.jdbc.driver.jar=${ds.db}-jdbc-driver.jar
+
+
+
+

driver is JDBC driver class. JDBC url, user and pass is as +expected.

+
+
+

driver.version is used for automated JDBC driver downloading. Users +can set up internal Maven repository hosting JDBC drivers, with +artifacts with

+
+
+

GAV = jdbcdrivers:${ds.db}:${ds.jdbc.driver.version}

+
+ +
+

The ds.db value is set depending on ds. E.g. -Dds=mssql2005 sets +ds.db=mssql (since they have the same driver). -Dds.db may be +overriden to use different driver.

+
+
+

In case you don’t want to use such driver, set just +-Dds.db= (empty) and provide the driver to the AS manually.
+Not supported; work in progress on parameter to provide JDBC Driver +jar.

+
+
+
Default values
+
+

For WildFly continuous integration, there are some predefined values for +some of databases, which can be set using:

+
+
+
+
-Dds.db=<database-identifier>
+
+
+
+

Where database-identifier is one of: h2, mysql51

+
+
+
+
+

2.2.8. Running tests with IPv6

+
+

-Dipv6 - Runs AS with +-Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true

+
+
+

and the following defaults, overridable by respective parameter:

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterIPv4 defaultIPv6 default 

-Dnode0

127.0.0.1

::1

Single-node tests.

-Dnode1

127.0.0.1

::1

Two-node tests (e.g. cluster) use this for the +2nd node.

-Dmcast

230.0.0.4

ff01::1

ff01::1 is IPv6 Node-Local scope mcast +addr.

-Dmcast.jgroupsDiag

224.0.75.75

ff01::2

JGroups diagnostics +multicast address.

-Dmcast.modcluster

224.0.1.105

ff01::3

mod_cluster multicast +address.

+
+

Values are set in AS configuration XML, replaced in resources (like +ejb-jar.xml) and used in tests.

+
+
+
+

2.2.9. Running tests with security manager / custom security policy

+
+

-Dsecurity.manager - Run with default policy.

+
+
+

-Dsecurity.policy=<path> - Run with the given policy.

+
+
+

-Dsecurity.manager.other=<set of Java properties> - Run with the given +properties. Whole set is included in all server startup parameters.

+
+
+

Example:

+
+
+
+
./integration-tests.sh clean install -Dintegration.module -DallTests \
+\"-Dsecurity.manager.other=-Djava.security.manager \
+-Djava.security.policy==$(pwd)/testsuite/shared/src/main/resources/secman/permitt_all.policy \
+-Djava.security.debug=access:failure \"
+
+
+
+

Notice the \" quotes delimiting the whole -Dsecurity.manager.other +property.

+
+
+
+

2.2.10. Creating test reports

+
+

Test reports are created in the form known from EAP 5. To create them, +simply run the testsuite, which will create Surefire XML files.

+
+
+

Creation of the reports is bound to the site Maven phase, so it must +be run separatedly afterwards. Use one of these:

+
+
+
+
./integration-tests.sh site
+cd testsuite; mvn site
+mvn -pl testsuite site
+
+
+
+

Note that it will take all test results under testsuite/integration/ - +the pattern is **/*TestCase.xml, without need to specify -DallTests.

+
+
+
+

2.2.11. Creating coverage reports

+ +
+

Coverage reports are created by +JaCoCo.

+
+
+

During the integration tests, Arquillian is passed a JVM argument which +makes it run with JaCoCo agent, which records the executions into +${basedir}/target/jacoco .

+
+
+

In the site phase, a HTML, XML and CSV reports are generated. That is +done using jacoco:report Ant task in maven-ant-plugin since JaCoCo’s +maven report goal doesn’t support getting classes outside +target/classes.

+
+
+
Usage
+
+
+
./build.sh clean install -DskipTests
+./integration-tests.sh clean install -DallTests -Dcoverage
+./integration-tests.sh site -DallTests -Dcoverage ## Must run in separatedly.
+
+
+
+

Alternative:

+
+
+
+
mvn clean install -DskipTests
+mvn -rf testsuite clean install -DallTests -Dcoverage
+mvn -rf testsuite site -DallTests -Dcoverage
+
+
+
+
+
+

2.2.12. Cleaning the project

+
+

To have most stable build process, it should start with:

+
+
+
    +
  • +

    clean target directories

    +
  • +
  • +

    only central Maven repo configured

    +
  • +
  • +

    clean local repository or at least:

    +
    +
      +
    • +

      free of artefacts to be built

      +
    • +
    • +

      free of dependencies to be used (especially snapshots)

      +
    • +
    +
    +
  • +
+
+
+

To use , you may use these commands:

+
+
+
+
mvn clean install -DskipTests -DallTests  ## ...to clean all testsuite modules.
+mvn dependency:purge-local-repository build-helper:remove-project-artifact -Dbuildhelper.removeAll
+
+
+
+

In case the build happens in a shared environment (e.g. network disk), +it’s recommended to use local repository:

+
+
+
+
cp /home/hudson/.m2/settings.xml .
+sed "s|<settings>|<settings><localRepository>/home/ozizka/hudson-repos/$JOBNAME</localRepository>|" -i settings.xml
+
+
+
+

Or:

+
+
+
+
mvn clean install ... -Dmaven.repo.local=localrepo
+
+
+ +
+
+
+
+
+

3. WildFly Testsuite Harness Developer Guide

+
+
+

Audience: Whoever wants to change the testsuite harness

+
+
+

JIRA: WFLY-576

+
+
+

3.1. Testsuite requirements

+
+

http://community.jboss.org/wiki/ASTestsuiteRequirements will probably be +merged here later.

+
+
+
+

3.2. Adding a new maven plugin

+
+

The plugin version needs to be specified in jboss-parent at the <properties> section of the jboss-parent pom.xml file.

+
+
+
+

3.3. Shortened Maven run overview

+ +
+ +
+

3.5. Properties and their propagation

+
+

Propagated to tests through arquillian.xml:
+<property name="javaVmArguments">${server.jvm.args}</property>
+TBD: https://issues.redhat.com/browse/ARQ-647

+
+
+

3.5.1. JBoss AS instance dir

+
+

integration/pom.xml

+
+
+

(currently nothing)

+
+
+

*-arquillian.xml

+
+
+
+
<container qualifier="jboss" default="true">
+    <configuration>
+        <property name="jbossHome">${basedir}/target/jbossas</property>
+
+
+
+
+

3.5.2. Server JVM arguments

+
+
+
<surefire.memory.args>-Xmx512m -XX:MaxPermSize=256m</surefire.memory.args>
+    <surefire.jpda.args></surefire.jpda.args>
+    <surefire.system.args>${surefire.memory.args} ${surefire.jpda.args}</surefire.system.args>
+
+
+
+
+

3.5.3. IP settings

+
+
    +
  • +

    ${ip.server.stack } - used in +<systemPropertyVariables> / <server.jvm.args> which is used in +*-arquillian.xml.

    +
  • +
+
+
+
+

3.5.4. Testsuite directories

+
+
    +
  • +

    ${jbossas.ts.integ.dir}

    +
  • +
  • +

    ${jbossas.ts.dir}

    +
  • +
  • +

    ${jbossas.project.dir}

    +
  • +
+
+
+
+

3.5.5. Clustering properties

+
+
    +
  • +

    node0

    +
  • +
  • +

    node1

    +
  • +
+
+
+
+
+

3.6. Debug parameters propagation

+
+
+
<surefire.jpda.args></surefire.jpda.args>       - default
+
+<surefire.jpda.args>-Xrunjdwp:transport=dt_socket,address=${as.debug.port},server=y,suspend=y</surefire.jpda.args> - activated by -Ddebug or -Djpda
+
+
+testsuite/pom.xml:        <surefire.system.args>... ${surefire.jpda.args} ...</surefire.system.args>
+testsuite/pom.xml:                        <jboss.options>${surefire.system.args}</jboss.options>
+
+testsuite/integration/pom.xml:     <server.jvm.args>${surefire.system.args} ${jvm.args.ip.server} ${jvm.args.security} ${jvm.args.timeouts} -Dnode0=${node0} -Dnode1=
+
+
+integration/pom.xml:
+<server.jvm.args>${surefire.system.args} ${jvm.args.ip.server} ${jvm.args.security} ${jvm.args.timeouts} -Dnode0=${node0} -Dnode1=${node1} -DudpGroup=${udpGroup} ${jvm.args.dirs}</server.jvm.args>
+
+arquillian.xml:
+<property name="javaVmArguments">${server.jvm.args} -Djboss.inst=${basedir}/target/jbossas</property>
+
+
+
+
+
+
+

4. How the WildFly is built and configured for testsuite modules.

+
+
+

Refer to Shortened Maven Run Overview to see the +mentioned build steps.

+
+
+

\1) AS instance is copied from ${jboss.dist} to +testsuite/target/jbossas.
+Defaults to AS which is built by the project ( +build/target/jboss-as-*).

+
+
+

2)

+
+
+

testsuite/pom.xml:

+
+
+

from $\{jboss.home} to ${basedir}/target/jbossas
+phase generate-test-resources: resource-plugin, goal copy-resources

+
+
+

testsuite/integration/pom.xml:

+
+
+

phase process-test-resources: antrun-plugin:

+
+
+
+
<ant antfile="$\{basedir}/src/test/scripts/basic-integration-build.xml">
+    <target name="build-basic-integration"/>
+    <target name="build-basic-integration-jts"/>
+</ant>
+
+
+
+

Which invokes

+
+
+
+
<target name="build-basic-integration" description="Builds server configuration for basic-integration tests">
+      <build-server-config name="jbossas"/>
+
+
+
+

Which invokes

+
+
+
+
<!-- Copy the base distribution. -->
+<!-- We exclude modules and bundles as they are read-only and we locate the via sys props. -->
+<copy todir="@{output.dir}/@{name}">
+    <fileset dir="@{jboss.dist}">
+        <exclude name="**/modules/**"/>
+        <exclude name="**/bundles/**"/>
+    </fileset>
+</copy>
+ 
+<!-- overwrite with configs from test-configs and apply property filtering -->
+<copy todir="@{output.dir}/@{name}" overwrite="true" failonerror="false">
+    <fileset dir="@{test.configs.dir}/@{name}"/>
+    <filterset begintoken="${" endtoken="}">
+        <filter token="node0" value="${node0}"/>
+        <filter token="node1" value="${node1}"/>
+        <filter token="udpGroup" value="${udpGroup}"/>
+        <filter-elements/>
+    </filterset>
+</copy>
+
+
+
+

4.1. Arquillian config file location

+
+
+
-Darquillian.xml=some-file-or-classpath-resource.xml
+
+
+
+
+
+
+

5. Plugin executions matrix

+
+
+

x - runs in this module
+xx - runs in this and all successive modules
+x! - runs but should not.

+
+ +++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 TSintegsmokebasicclustiiopcompdomainbenchstress

initialize

maven-help-plugin

xx

x

x

x

x

x

x

x

x

x

properties-maven-plugin:write-project-properties

x

 

 

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (banner)

 

 

 

 

 

 

 

 

 

 

process-resources

maven-resources-plugin:2.5:resources (default-resources)

xx

 

 

 

 

 

 

 

 

 

maven-dependency-plugin:2.3:copy (copy-annotations-endorsed)

xx!

 

 

 

 

 

 

 

 

 

compile

maven-compiler-plugin:2.3.2:compile (default-compile)

xx

 

 

 

 

 

 

 

 

 

generate-test-resources

maven-resources-plugin:2.5:copy-resources (build-jbossas.server)

xx!

 

 

 

 

 

 

 

 

 

Should be:

x

 

 

 

 

 

 

 

 

 

maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas)

 

x

 

 

 

 

 

 

 

 

maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups)

 

x

x

x

?

?

?

!

 

 

Should be:

 

xx

x

x

x

x

x

x

x

x

process-test-resources

maven-resources-plugin:2.5:testResources (default-testResources)

xx

 

 

 

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (build-smoke.server)

 

 

x

 

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (prepare-jars-basic-integration.server)

 

 

 

x

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (build-clustering.server)

 

 

 

 

x

x!?

 

 

 

 

test-compile

maven-compiler-plugin:2.3.2:testCompile (default-testCompile)

xx

 

 

 

 

 

 

 

 

 

xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server)

x

 

 

 

 

 

 

 

 

 

maven-antrun-plugin:1.6:run (build-jars)

 

 

 

 

 

 

x

 

 

 

test

maven-surefire-plugin:2.10:test (smoke-full.surefire)

 

 

 

 

 

 

 

 

 

 

maven-surefire-plugin:2.10:test (smoke-web.surefire)

 

 

 

 

 

 

 

 

 

 

maven-surefire-plugin:2.10:test (default-test)

 

 

 

 

x

x

x

x

 

 

maven-surefire-plugin:2.10:test +(basic-integration-default-full.surefire)

 

 

 

x

 

 

 

 

 

 

maven-surefire-plugin:2.10:test +(basic-integration-default-web.surefire)

 

 

 

x

 

 

 

 

 

 

maven-surefire-plugin:2.10:test (basic-integration-2nd.surefire)

 

 

 

x

 

 

 

 

 

 

maven-surefire-plugin:2.10:test (tests-clust-multi-node-unm…​surefire)

 

 

 

 

x

 

 

 

 

 

maven-surefire-plugin:2.10:test (tests-clustering-single-node.surefire)

 

 

 

 

x

 

 

 

 

 

maven-surefire-plugin:2.10:test (tests-clustering-multi-node.surefire)

 

 

 

 

x

 

 

 

 

 

maven-surefire-plugin:2.10:test (tests-iiop-multi-node.surefire)

 

 

 

 

 

x

 

 

 

 

package

maven-jar-plugin:2.3.1:jar (default-jar)

xx!

 

 

 

 

 

 

 

 

 

maven-source-plugin:2.1.2:jar-no-fork (attach-sources)

x

 

 

 

 

 

 

 

 

 

install

maven-install-plugin:2.3.1:install (default-install)

xx!

 

 

 

 

 

 

 

 

 

 

TS

integ

smoke

basic

clust

iiop

comp

domain

bench

stress

+
+
+
+

6. Shortened Maven Run Overview

+
+
+

6.1. How to get it

+
+
+
./integration-tests.sh clean install -DallTests | tee TS.txt | testsuite/tools/runSummary.sh
+
+
+
+
+

6.2. How it’s done

+
+

Run this script on the output of the AS7 testsuite run:

+
+
+
+
##  Cat the file or stdin if no args,
+##  filter only interesting lines - plugin executions and modules separators,
+##  plus Test runs summaries,
+##  and remove the boring plugins like enforcer etc.
+ 
+cat $1 \
+ | egrep ' --- |Building| ---------|Tests run: | T E S T S' \
+ | grep -v 'Time elapsed'
+ | sed 's|Tests run:|                Tests run:|' \
+ | grep -v maven-clean-plugin \
+ | grep -v maven-enforcer-plugin \
+ | grep -v buildnumber-maven-plugin \
+ | grep -v maven-help-plugin \
+ | grep -v properties-maven-plugin:.*:write-project-properties \
+;
+
+
+
+

You’ll get an overview of the run.

+
+
+
+

6.3. Example output with comments.

+
+
+
ondra@ondra-redhat: ~/work/AS7/ozizka-as7 $  ./integration-tests.sh clean install -DallTests | tee TS.txt | testsuite/tools/runSummary.sh
+[INFO] ------------------------------------------------------------------------
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Aggregator 7.1.0.CR1-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite ---
+              Copies org.jboss.spec.javax.annotation:jboss-annotations-api_1.1_spec to ${project.build.directory}/endorsed .
+              Inherited - needed for compilation of all submodules.
+ 
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite ---
+              Copies ${jboss.home} to target/jbossas .  TODO: Should be jboss.dist.
+ 
+[INFO] --- xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server) @ jboss-as-testsuite ---
+              Changes IP addresses used in server config files -
+              applies ${xslt.scripts.dir}/changeIPAddresses.xsl on ${basedir}/target/jbossas/standalone/configuration/standalone-*.xml
+              Currently inherited, IMO should not be.
+ 
+[INFO] --- maven-source-plugin:2.1.2:jar-no-fork (attach-sources) @ jboss-as-testsuite ---
+              TODO: Remove
+ 
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite ---
+ 
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Integration Aggregator 7.1.0.CR1-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-agg ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-agg ---
+              TODO: Remove
+[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas) @ jboss-as-testsuite-integration-agg ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-agg ---
+[INFO] --- xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server) @ jboss-as-testsuite-integration-agg ---
+              TODO: Remove
+[INFO] --- maven-source-plugin:2.1.2:jar-no-fork (attach-sources) @ jboss-as-testsuite-integration-agg ---
+              TODO: Remove
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-agg ---
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss AS Test Suite: Integration - Smoke 7.1.0.CR1-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-smoke ---
+              TODO: Remove
+[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server) @ jboss-as-testsuite-integration-smoke ---
+              TODO: Remove
+ 
+[INFO] --- maven-antrun-plugin:1.6:run (build-smoke.server) @ jboss-as-testsuite-integration-smoke ---
+     [echo] Building AS instance "smoke" from /home/ondra/work/EAP/EAP6-DR9 to /home/ondra/work/AS7/ozizka-as7/testsuite/integration/smoke/target
+              TODO: Should be running one level above!
+ 
+[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-surefire-plugin:2.10:test (smoke-full.surefire) @ jboss-as-testsuite-integration-smoke ---
+ T E S T S
+                Tests run: 4, Failures: 0, Errors: 4, Skipped: 0
+
+
+
+
+

6.4. Example output, unchanged

+
+
+
ondra@lenovo:~/work/AS7/ozizka-git$ ./integration-tests.sh clean install -DallTests | tee TS.txt | testsuite/tools/runSummary.sh
+SSCmeetingWestfordJan     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/smoke does not exist.
+     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/clustering-udp-0 does not exist.
+     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/clustering-udp-1 does not exist.
+     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/iiop-client does not exist.
+     [copy] Warning: /home/ondra/work/AS7/ozizka-git/testsuite/integration/src/test/resources/test-configs/iiop-server does not exist.
+[INFO] ------------------------------------------------------------------------
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Aggregator 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-antrun-plugin:1.6:run (banner) @ jboss-as-testsuite ---
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite ---
+[INFO] --- xml-maven-plugin:1.0:transform (update-ip-addresses-jbossas.server) @ jboss-as-testsuite ---
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite ---
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Integration 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-agg ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-agg ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas) @ jboss-as-testsuite-integration-agg ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-agg ---
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-agg ---
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Integration - Smoke 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-antrun-plugin:1.6:run (build-smoke.server) @ jboss-as-testsuite-integration-smoke ---
+     [echo] Building AS instance "smoke" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/smoke/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/smoke/target
+[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-smoke ---
+[INFO] --- maven-surefire-plugin:2.10:test (smoke-full.surefire) @ jboss-as-testsuite-integration-smoke ---
+ T E S T S
+                Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
+[INFO] --- maven-surefire-plugin:2.10:test (smoke-web.surefire) @ jboss-as-testsuite-integration-smoke ---
+ T E S T S
+                Tests run: 116, Failures: 0, Errors: 0, Skipped: 6
+[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-integration-smoke ---
+[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/integration/smoke/target/jboss-as-testsuite-integration-smoke-7.1.0.Final-SNAPSHOT.jar
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-smoke ---
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Integration - Basic 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-basic ---
+[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-basic ---
+[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-basic ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-basic ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-basic ---
+[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-basic ---
+[INFO] --- maven-antrun-plugin:1.6:run (prepare-jars-basic-integration.server) @ jboss-as-testsuite-integration-basic ---
+[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-basic ---
+[INFO] --- maven-surefire-plugin:2.10:test (basic-integration-default-full.surefire) @ jboss-as-testsuite-integration-basic ---
+ T E S T S
+                Tests run: 323, Failures: 0, Errors: 4, Skipped: 30
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Integration - Clustering 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-clust ---
+[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-clust ---
+[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-clust ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-clust ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-clust ---
+[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-clust ---
+[INFO] --- maven-antrun-plugin:1.6:run (build-clustering.server) @ jboss-as-testsuite-integration-clust ---
+     [echo] Building config clustering-udp-0
+     [echo] Building AS instance "clustering-udp-0" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/target
+     [echo] Building config clustering-udp-1
+     [echo] Building AS instance "clustering-udp-1" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/target
+[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-clust ---
+[INFO] --- maven-surefire-plugin:2.10:test (tests-clustering-multi-node-unmanaged.surefire) @ jboss-as-testsuite-integration-clust ---
+ T E S T S
+                Tests run: 9, Failures: 0, Errors: 0, Skipped: 0
+[INFO] --- maven-surefire-plugin:2.10:test (tests-clustering-single-node.surefire) @ jboss-as-testsuite-integration-clust ---
+ T E S T S
+                Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+[INFO] --- maven-surefire-plugin:2.10:test (tests-clustering-multi-node.surefire) @ jboss-as-testsuite-integration-clust ---
+ T E S T S
+                Tests run: 8, Failures: 0, Errors: 0, Skipped: 0
+[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-integration-clust ---
+[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/integration/clust/target/jboss-as-testsuite-integration-clust-7.1.0.Final-SNAPSHOT.jar
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-clust ---
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Integration - IIOP 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-iiop ---
+[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-iiop ---
+[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-iiop ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-iiop ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (ts.copy-jbossas.groups) @ jboss-as-testsuite-integration-iiop ---
+[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-iiop ---
+[INFO] --- maven-antrun-plugin:1.6:run (build-clustering.server) @ jboss-as-testsuite-integration-iiop ---
+     [echo] Building config iiop-client
+     [echo] Building AS instance "iiop-client" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/target
+     [echo] Building config iiop-server
+     [echo] Building AS instance "iiop-server" from /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/../../../build/target/jboss-as-7.1.0.Final-SNAPSHOT to /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/target
+[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-iiop ---
+[INFO] --- maven-surefire-plugin:2.10:test (tests-iiop-multi-node.surefire) @ jboss-as-testsuite-integration-iiop ---
+ T E S T S
+                Tests run: 12, Failures: 0, Errors: 0, Skipped: 0
+[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-integration-iiop ---
+[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/integration/iiop/target/jboss-as-testsuite-integration-iiop-7.1.0.Final-SNAPSHOT.jar
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-iiop ---
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Compatibility Tests 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-compat ---
+[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-compat ---
+[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-compat ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-compat ---
+[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-compat ---
+[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-compat ---
+[INFO] --- maven-antrun-plugin:1.6:run (build-jars) @ jboss-as-testsuite-integration-compat ---
+[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ jboss-as-testsuite-integration-compat ---
+ T E S T S
+                Tests run: 7, Failures: 0, Errors: 4, Skipped: 3
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Domain Mode Integration Tests 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-integration-domain ---
+[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-integration-domain ---
+[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-integration-domain ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-integration-domain ---
+[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-integration-domain ---
+[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-integration-domain ---
+[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ jboss-as-testsuite-integration-domain ---
+ T E S T S
+                Tests run: 89, Failures: 0, Errors: 0, Skipped: 4
+[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-integration-domain ---
+[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/domain/target/jboss-as-testsuite-integration-domain-7.1.0.Final-SNAPSHOT.jar
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-integration-domain ---
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Benchmark Tests 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-benchmark ---
+[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-benchmark ---
+[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-benchmark ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-benchmark ---
+[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-benchmark ---
+[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-benchmark ---
+[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ jboss-as-testsuite-benchmark ---
+ T E S T S
+                Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
+[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-benchmark ---
+[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/benchmark/target/jboss-as-testsuite-benchmark-7.1.0.Final-SNAPSHOT.jar
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-benchmark ---
+[INFO] ------------------------------------------------------------------------
+[INFO] Building JBoss Application Server Test Suite: Stress Tests 7.1.0.Final-SNAPSHOT
+[INFO] ------------------------------------------------------------------------
+[INFO] --- maven-dependency-plugin:2.3:copy (copy-annotations-endorsed) @ jboss-as-testsuite-stress ---
+[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ jboss-as-testsuite-stress ---
+[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jboss-as-testsuite-stress ---
+[INFO] --- maven-resources-plugin:2.5:copy-resources (build-jbossas.server) @ jboss-as-testsuite-stress ---
+[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ jboss-as-testsuite-stress ---
+[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ jboss-as-testsuite-stress ---
+[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ jboss-as-testsuite-stress ---
+ T E S T S
+                Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
+[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ jboss-as-testsuite-stress ---
+[INFO] Building jar: /home/ondra/work/AS7/ozizka-git/testsuite/stress/target/jboss-as-testsuite-stress-7.1.0.Final-SNAPSHOT.jar
+[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jboss-as-testsuite-stress ---
+[INFO] ------------------------------------------------------------------------
+[INFO] ------------------------------------------------------------------------
+[INFO] ------------------------------------------------------------------------
+[INFO] ------------------------------------------------------------------------
+
+
+
+
+
+
+

7. WildFly Testsuite Test Developer Guide

+
+ +
+

7.1. Pre-requisites

+
+

Please be sure to read Pre-requisites - test quality +standards and follow those guidelines.

+
+
+
+

7.2. Arquillian container configuration

+ +
+
+

7.3. ManagementClient and ModelNode usage example

+
+
+
final ModelNode operation = new ModelNode();
+operation.get(ModelDescriptionConstants.OP).set(ModelDescriptionConstants.READ_RESOURCE_OPERATION);
+operation.get(ModelDescriptionConstants.OP_ADDR).set(address);
+operation.get(ModelDescriptionConstants.RECURSIVE).set(true);
+
+final ModelNode result = managementClient.getControllerClient().execute(operation);
+Assert.assertEquals(ModelDescriptionConstants.SUCCESS, result.get(ModelDescriptionConstants.OUTCOME).asString());
+
+
+
+

ManagementClient can be obtained as described below.

+
+
+
+

7.4. Arquillian features available in tests

+
+

@ServerSetup

+
+
+

TBD

+
+
+
+
@ContainerResource private ManagementClient managementClient;
+final ModelNode result = managementClient.getControllerClient().execute(operation);
+
+
+
+

TBD

+
+
+
+
@ArquillianResource private ManagementClient managementClient;
+ModelControllerClient client = managementClient.getControllerClient();
+
+
+
+
+
@ArquillianResource ContainerController cc;
+
+@Test
+public void test() {
+    cc.setup("test", ...properties..)
+    cc.start("test")
+}
+
+
+
+
+
<arquillian>
+    <container qualifier="test" mode="manual" />
+</arquillian>
+
+
+
+
+
// Targeted containers HTTP context.
+@ArquillianResource URL url;
+
+
+
+
+
// Targeted containers HTTP context where servlet is located.
+@ArquillianResource(SomeServlet.class) URL url;
+
+
+
+
+
// Targeted containers initial context.
+@ArquillianResource InitialContext|Context context;
+
+
+
+
+
// The manual deployer.
+@ArquillianResource Deployer deployer;
+
+
+ +
+

See also +Arquillian +Reference.

+
+
+

Note to @ServerSetup annotation: It works as expected only on non-manual +containers. In case of manual mode containers it calls setup() method +after each server start up which is right (or actually before +deployment), but the tearDown() method is called only at AfterClass +event, i.e. usually after your manual shutdown of the server. Which +limits you on the ability to revert some configuration changes on the +server and so on. I cloned the annotation and changed it to fit the +manual mode, but it is still in my github branch :)

+
+
+
+

7.5. Properties available in tests

+
+

7.5.1. Directories

+
+
    +
  • +

    jbosssa.project.dir - Project’s root dir (where ./build.sh is).

    +
  • +
  • +

    jbossas.ts.dir - Testsuite dir.

    +
  • +
  • +

    jbossas.ts.integ.dir - Testsuite’s integration module dir.

    +
  • +
  • +

    jboss.dist - Path to AS distribution, either built +(build/target/jboss-as-…​) or user-provided via -Djboss.dist

    +
  • +
  • +

    jboss.inst - (Arquillian in-container only) Path to the AS instance in +which the test is running (until ARQ-650 is possibly done)

    +
  • +
  • +

    jboss.home - Deprecated as it’s name is unclear and +confusing. Use jboss.dist or jboss.inst.

    +
  • +
+
+
+
+

7.5.2. Networking

+
+
    +
  • +

    node0

    +
  • +
  • +

    node1

    +
  • +
  • +

    230.0.0.4

    +
  • +
+
+
+
+ +
+

In case some of the following causes timeouts, you may prolong the +timeouts by setting value >= 100:

+
+
+

100 = leave as is,
+150 = 50 % longer, etc.

+
+
+
    +
  • +

    timeout.ratio.gen - General ratio - can be used to adjust all +timeouts.When this and specific are defined, both apply.

    +
  • +
  • +

    timeout.ratio.fs- Filesystem IO

    +
  • +
  • +

    timeout.ratio.net - Network IO

    +
  • +
  • +

    timeout.ratio.mem - Memory IO

    +
  • +
  • +

    timeout.ratio.cpu - Processor

    +
  • +
  • +

    timeout.ratio.db - Database

    +
  • +
+
+
+

Time ratios will soon be provided by +org.jboss.as.test.shared.time.TimeRatio.for*() methods.

+
+
+
+
+

7.6. Negative tests

+
+

To test invalid deployment handling: @ShouldThrowException

+
+
+

Currently doesn’t work due to +WFLY-673.

+
+
+

optionally you might be able to catch it using the manual deployer

+
+
+
+
@Deployment(name = "X", managed = false) ...
+
+@Test
+public void shouldFail(@ArquillianResource Deployer deployer) throws Exception {
+  try {
+    deployer.deploy("X")
+  }
+  catch(Exception e) {
+   // do something
+  }
+}
+
+
+
+
+

7.7. Clustering tests (WFLY-616)

+
+

You need to deploy the same thing twice, so two deployment methods that +just return the same thing.
+And then you have tests that run against each.

+
+
+
+
@Deployment(name = "deplA", testable = false)
+    @TargetsContainer("serverB")
+    public static Archive<?> deployment()
+
+    @Deployment(name = "deplB", testable = false)
+    @TargetsContainer("serverA")
+    public static Archive<?> deployment(){ ... }
+
+    @Test
+    @OperateOnDeployment("deplA")
+    public void testA(){ ... }
+
+    @Test
+    @OperateOnDeployment("deplA")
+    public void testA() {...}
+
+
+
+
+

7.8. How to get the tests to main branch

+
+
    +
  • +

    First of all, be sure to read the "Before you add a test" section.

    +
  • +
  • +

    Fetch the newest mater: +git fetch upstream # Provided you have the jbossas/jbossas GitHub repo +as a remote called 'upstream'.

    +
  • +
  • +

    Rebase your branch: git checkout WFLY-1234-your-branch; git rebase +upstream/main

    +
  • +
  • +

    Run whole testsuite (integration-tests -DallTests). You may +use +https://jenkins.mw.lab.eng.bos.redhat.com/hudson/job/wildfly-as-testsuite-RHEL-matrix-openJDK7/lastCompletedBuild/testReport/.

    +
    +
      +
    • +

      If any tests fail and they do not fail in main, fix it and go back +to the "Fetch" step.

      +
    • +
    +
    +
  • +
  • +

    Push to a new branch in your GitHub repo: +git push origin WFLY-1234-new-XY-tests

    +
  • +
  • +

    Create a pull-request on GitHub. Go to your branch and click on +"Pull Request".

    +
    +
      +
    • +

      If you have a jira, start the title with it, like - WFLY-1234 New +tests for XYZ.

      +
    • +
    • +

      If you don’t, write some apposite title. In the description, describe +in detail what was done and why should it be merged. Keep in mind that +the diff will be visible under your description.

      +
    • +
    +
    +
  • +
  • +

    Keep the branch rebased daily until it’s merged (see the Fetch +step). If you don’t, you’re dramatically decreasing chance to get it +merged.

    +
  • +
  • +

    There’s a mailing list, jbossas-pull-requests, which is notified of +every pull-request.

    +
  • +
  • +

    You might have someone with merge privileges to cooperate with you, so +they know what you’re doing, and expect your pull request.

    +
  • +
  • +

    When your pull request is reviewed and merged, you’ll be notified by +mail from GitHub.

    +
  • +
  • +

    You may also check if it was merged by the following: +git fetch upstream; git cherry <branch> ## Or git branch +--contains\{\{<branch> - see}} here

    +
  • +
  • +

    Your commits will appear in main. They will have the same hash as in +your branch.

    +
    +
      +
    • +

      You are now safe to delete both your local and remote branches: +git branch -D WFLY-1234-your-branch; git push origin :WFLY-1234-your-branch

      +
    • +
    +
    +
  • +
+
+
+
+
+
+

8. How to Add a Test Case

+
+
+

(Please don’t (re)move - this is a landing page from a Jira link.)

+
+
+

Thank you for finding time to contribute to WildFly 29 quality.
+Covering corner cases found by community users with tests is very +important to increase stability.
+If you’re providing a test case to support your bug report, it’s very +likely that your bug will be fixed much sooner.

+
+
+

8.1. 1) Create a test case.

+
+

It’s quite easy - a simple use case may even consist of one short .java +file.

+
+
+

Check WildFly 29 +test +suite test cases for examples.

+
+
+

For more information, see WildFly Testsuite Test +Developer Guide. Check the requirements for a test to be included in +the testsuite.

+
+
+

Ask for help at WildFly 29 forum or at IRC - #wildfly @ FreeNode.

+
+
+
+

8.2. 2) Push your test case to GitHub and create a pull request.

+
+

For information on how to create a GitHub account and push your code +therein, see Hacking +on WildFly.

+
+
+

If you’re not into Git, send a diff file to JBoss forums, someone might +pick it up.

+
+
+
+

8.3. 3) Wait for the outcome.

+
+

Your test case will be reviewed and eventually added. It may take few +days.

+
+
+

When something happens, you’ll receive a notification e-mail.

+
+
+
+
+
+

9. Before you add a test

+
+
+

Every added test, whether ported or new should follow the same +guidelines:

+
+
+

9.1. Verify the test belongs in WildFly

+
+

AS6 has a lot of tests for things that are discontinued. For example +the
+legacy JBoss Transaction Manager which was replaced by Arjuna. Also we
+had tests for SPIs that no longer exist. None of these things should +be
+migrated.

+
+
+
+

9.2. Only add CORRECT and UNDERSTANDABLE tests

+
+

If you don’t understand what a test is doing (perhaps too complex), or
+it’s going about things in a strange way that might not be correct, +THEN
+DO NOT PORT IT. Instead we should have a simpler, understandable, and
+correct test. Write a new one, ping the author, or skip it altogether.

+
+
+
+

9.3. Do not add duplicate tests

+
+

Always check that the test you are adding doesn’t have coverage
+elsewhere (try using "git grep"). As mentioned above we have some
+overlap between 6 and 7. The 7 test version will likely be better.

+
+
+
+

9.4. Don’t name tests after JIRAs

+
+

A JIRA number is useless without an internet connection, and they are
+hard to read. If I get a test failure thats XDGR-843534578 I have to +dig
+to figure out the context. It’s perfectly fine though to link to a +JIRA
+number in the comments of the test. Also the commit log is always +available.

+
+
+
+

9.5. Tests should contain javadoc that explains what is being tested

+
+

This is especially critical if the test is non-trivial

+
+
+
+

9.6. Prefer expanding an EXISTING test over a new test class

+
+

If you are looking at migrating or creating a test with similar
+functionality to an exiting test, it is better to
+expand upon the existing one by adding more test methods, rather than
+creating a whole new test. In general each
+new test class adds at least 300ms to execution time, so as long as it
+makes sense it is better to add it to an
+existing test case.

+
+
+
+

9.7. Organize tests by subsystem

+
+

Integration tests should be packaged in subpackages under the relevant
+subsystem (e.g org.jboss.as.test.integration.ejb.async). When a test
+impacts multiple subsystems this is a bit of a judgement call, but in
+general the tests should go into the package of
+the spec that defines the functionality (e.g. Jakarta Contexts and Dependency Injection based constructor
+injection into an Jakarta Enterprise Beans, even though this involves Jakarta Contexts and Dependency Injection and Jakarta Enterprise Beans,
+the Jakarta Contexts and Dependency Injection spec defines this behaviour)

+
+
+
+

9.8. Explain non-obvious spec behavior in comments

+
+

The EE spec is full of odd requirements. If the test is covering
+behavior that is not obvious then please add something like "Verifies +EE
+X.T.Z - The widget can’t have a foobar if it is declared like blah"

+
+
+
+

9.9. Put integration test resources in the source directory of the test

+
+

At the moment there is not real organization of these files. It makes
+sense for most apps to have this separation, however the testsuite is
+different. e.g. most apps will have a single deployment descriptor of +a
+given type, for the testsuite will have hundreds, and maintaining +mirroring
+package structures is error prone.
+This also makes the tests easier to understand, as all the artifacts +in
+the deployment are in one place, and that place tends to be small +(only
+a handful of files).

+
+
+
+

9.10. Do not hard-code values likely to need configuration (URLs, ports, …​)

+
+

URLs hardcoded to certain address (localhost) or port (like the default +8080 for web) prevent running the test against different address or with +IPv6 adress.
+Always use the configurable values provided by Arquillian or as a system +property.
+If you come across a value which is not configurable but you think it +should be, file an WildFly 29 jira issue with component "Test suite".
+See +@ArquillianResourrce +usage example.

+
+
+
+

9.11. Follow best committing practices

+
+
    +
  • +

    Only do changes related to the topic of the jira/pull request.

    +
  • +
  • +

    Do not clutter your pull request with e.g. reformatting, fixing typos +spotted along the way - do another pull request for such.

    +
  • +
  • +

    Prefer smaller changes in more pull request over one big pull request +which are difficult to merge.

    +
  • +
  • +

    Keep the code consistent across commits - e.g. when renaming +something, be sure to update all references to it.

    +
  • +
  • +

    Describe your commits properly as they will appear in main’s linear +history.

    +
  • +
  • +

    If you’re working on a jira issue, include it’s ID in the commit +message(s).

    +
  • +
+
+
+
+

9.12. Do not use blind timeouts

+
+

Do not use Thread.sleep() without checking for the actual condition you +need to be fulfilled.
+You may use active waiting with a timeout, but prefer using timeouts of +the API/SPI you test where available.

+
+
+

Make the timeouts configurable: For a group of similar test, use a +configurable timeout value with a default if not set.

+
+
+
+

9.13. Provide messages in assert*() and fail() calls

+
+

Definitely, it’s better to see "File x/y/z.xml not found" instead of:

+
+
+
+
junit.framework.AssertionFailedError
+     at junit.framework.Assert.fail(Assert.java:48) [arquillian-service:]
+     at junit.framework.Assert.assertTrue(Assert.java:20) [arquillian-service:]
+     at junit.framework.Assert.assertTrue(Assert.java:27) [arquillian-service:]
+     at org.jboss.as.test.smoke.embedded.parse.ParseAndMarshalModelsTestCase.getOriginalStandaloneXml(ParseAndMarshalModelsTestCase.java:554) [bogus.jar:]
+
+
+
+
+

9.14. Provide configuration properties hints in exceptions

+
+

If your test uses some configuration property and it fails possibly due +to misconfiguration, note the property and it’s value in the exception:

+
+
+
+
File jdbcJar = new File( System.getProperty("jbossas.ts.dir", "."),
+       "integration/src/test/resources/mysql-connector-java-5.1.15.jar");
+    if( !jdbcJar.exists() )
+        throw new IllegalStateException("Can't find " + jdbcJar + " using $\{jbossas.ts.dir} == " + System.getProperty("jbossas.ts.dir") );
+
+
+
+
+

9.15. Clean up

+
+
    +
  • +

    Close sockets, connections, file descriptors;

    +
  • +
  • +

    Don’t put much data to static fields, or clean them in a finaly {…​} block.

    +
  • +
  • +

    Don’t alter AS config (unless you are absolutely sure that it will +reload in a final \{…​} block or an @After* method)

    +
  • +
+
+
+
+

9.16. Keep the tests configurable

+
+

Keep these things in properties, set them at the beginning of the test: +* Timeouts +* Paths +* URLs +* Numbers (of whatever)

+
+
+

They either will be or already are provided in form of system +properties, or a simple testsuite until API (soon to come).

+
+
+
+
+
+

10. Shared Test Classes and Resources

+
+
+

10.1. Among Testsuite Modules

+
+

Use the testsuite/shared module.

+
+
+

Classes and resources in this module are available in all testsuite +modules - i.e. in testsuite/* .

+
+
+

Only use it if necessary - don’t put things "for future use" in there.

+
+
+

Don’t split packages across modules. Make sure the java package is +unique in the WildFly project.

+
+
+

Document your util classes (javadoc) so they can be easily found and +reused! A generated list will be put here.

+
+
+
+

10.2. Between Components and Testsuite Modules

+
+

To share component’s test classes with some module in testsuite, you +don’t need to split to submodules. +You can create a jar with classifier using this:

+
+
+
+
<plugin>
+    <groupId>org.apache.maven.plugins</groupId>
+    <artifactId>maven-jar-plugin</artifactId>
+    <executions>
+        <execution>
+            <goals>
+                <goal>test-jar</goal>
+            </goals>
+        </execution>
+    </executions>
+</plugin>
+
+
+
+

This creates a jar with classifier "tests", so you can add it as +dependency to a testsuite module:

+
+
+
+
    <dependency>
+        <groupId>org.wildfly</groupId>
+        <artifactId>wildfly-clustering-common</artifactId>
+        <classifier>tests</classifier>
+        <version>${project.version}</version>
+        <scope>test</scope>
+    </dependency>
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/WildFly_Elytron_Security.html b/latest/WildFly_Elytron_Security.html new file mode 100644 index 000000000..72abcf756 --- /dev/null +++ b/latest/WildFly_Elytron_Security.html @@ -0,0 +1,15869 @@ + + + + + + + +WildFly Elytron Security + + + + + + + +
+
+
+ +
+
+
+

1. About

+
+
+

WildFly Elytron brings to WildFly a single unified security framework across +the whole of the application server. As a single framework it will be usable +both for configuring management access to the server and for applications +deployed to the server. It will also be usable across all process types so +there will be no need to learn a different security framework for host +controllers in a domain compared to configuring a standalone server.

+
+
+

The project covers these main areas:

+
+
+
    +
  • +

    Authentication

    +
  • +
  • +

    Authorization

    +
  • +
  • +

    SSL / TLS

    +
  • +
  • +

    Secure Credential Storage

    +
  • +
+
+
+

1.1. Authentication

+
+

One of the fundamental objectives of the project was to ensure that we +can use stronger authentication mechanisms for both HTTP and SASL based +authentication, in both cases the new framework also makes it possible +to bring in new implementations opening up various integration +opportunities with external solutions.

+
+
+
+

1.2. Authorization

+
+

The architecture of the project makes a very clear distinction between +the raw representation of the identity as returned by a SecurityRealm +from the repository of identities and the final representation as a +SecurityIdentity after roles have been decoded and mapped and +permissions have been mapped.

+
+
+

Custom implementations of the components to perform role decoding and +mapping, and permission mapping can be provided allowing for further +flexibility beyond the default set of components provided by the +project.

+
+
+
+

1.3. SSL / TLS

+
+

The project becomes the centralised point within the application server +for configuring SSL related resources meaning they can be configured in +a central location and referenced by resources across the application +server. The centralised configuration also covers advanced options such +as configuration of enabled cipher suites and protocols without this +information needing to be distributed across the management model.

+
+
+

The SSL / TLS implementation also includes an optimisation where it can +be closely tied to authentication allowing for permissions checks to be +performed on establishment of a connection before the first request is +received and the eager construction of a SecurityIdentity eliminating +the need for it to be constructed on a per-request basis.

+
+
+
+

1.4. Secure Credential Storage

+
+

The previous vault used for plain text String encryption is replaced +with a newly designed credential store. in addition to the protection it +offers for the credentials stored within it, the store currently +supports storage of clear text credentials.

+
+
+
+
+
+

2. General Elytron Architecture

+
+
+

The overall architecture for WildFly Elytron is building up a full +security policy from assembling smaller components together, by default +we include various implementations of the components - in addition to +this, custom implementations of many components can be provided in order +to provide more specialised implementations.

+
+
+

Within WildFly the different Elytron components are handled as +capabilities meaning that different implementations can be mixed and +matched, however the different implementations are modelled using +distinct resources. This section contains a number of diagrams to show +the general relationships between different components to provide a high +level view, however the different resource definitions may use different +dependencies depending on their purpose.

+
+
+

2.1. Security Domains

+
+

Within WildFly Elytron a SecurityDomain can be considered as a security +policy backed by one or more SecurityRealm instances. Resources that +make authorization decisions will be associated with a SecurityDomain, +from the SecurityDomain a SecurityIdentity can be obtained which is a +representation of the current identity, from this the identity’s roles +and permissions can be checked to make the authorization decision for +the resource.

+
+
+

The SecurityDomain is the general wrapper around the policy describing a +resulting SecurityIdentity and makes use of the following components to +define this policy.

+
+
+
    +
  • +

    NameRewriter

    +
  • +
+
+
+

NameRewriters are used in multiple places within the Elytron +configuration, as their name implies, their purpose is to take a name +and map it to another representation of the name or perform some +normalisation or clean up of the name.

+
+
+
    +
  • +

    RealmMapper

    +
  • +
+
+
+

As a SecurityDomain is able to reference multiple SecurityRealms the +RealmMapper is responsible for identifying which SecurityRealm to use +based on the supplied name for authentication.

+
+
+
    +
  • +

    SecurityRealm

    +
  • +
+
+
+

One or more named SecurityRealms are associated with a SecurityDomain. +A SecurityRealm provides access to the underlying repository of +identities. It is used for obtaining credentials to allow +authentication mechanisms to perform verification, for validation of +Evidence, and for obtaining the raw AuthorizationIdentity performing the +authentication.

+
+
+

Some SecurityRealm implementations are also modifiable and therefore +expose an API that allows for updates to be made to the repository +containing the identities.

+
+
+
    +
  • +

    RoleDecoder

    +
  • +
+
+
+

Along with the SecurityRealm association is also a reference to a +RoleDecoder, the RoleDecoder takes the raw AuthorizationIdentity +returned from the SecurityRealm and converts its attributes into roles.

+
+
+
    +
  • +

    RoleMapper

    +
  • +
+
+
+

After the roles have been decoded for an identity, further mapping can be +applied. This could be as simple as normalising the format of role names, +or perhaps adding or removing specific role names. If a RoleMapper is +referenced by a SecurityRealm association, that RoleMapper is applied +first before applying the RoleMapper associated with the SecurityDomain.

+
+
+
    +
  • +

    PrincipalDecoder

    +
  • +
+
+
+

A PrincipalDecoder converts from a Principal to a String representation +of a name. One example for this is the X500PrincipalDecoder, which +is able to extract an attribute from a distinguished name.

+
+
+
    +
  • +

    PermissionMapper

    +
  • +
+
+
+

In addition to having roles, a SecurityIdentity can also have a set of +permissions. The PermissionMapper assigns those permissions to the +identity.

+
+
+

Different secured resources can be associated with different +SecurityDomains for their authorization decisions. Within WildFly +Elytron we have the ability to configure inflow between different +SecurityDomains. The inflow process means that a SecurityIdentity +inflowed into a second SecurityDomain has the mappings of the new +SecurityDomain applied to it. So although a common identity may be +calling different resources, each of those resources could have a very +different view of the roles and permissions associated with the +identity.

+
+
+
+

2.2. SASL Authentication

+
+

The SaslAuthenticationFactory is an authentication policy for +authentication using SASL authentication mechanisms. In addition to +being a policy it is also a factory for configured authentication +mechanisms backed by a SecurityDomain.

+
+
+

The SaslAuthenticationFactory references the following: -

+
+
+
    +
  • +

    SecurityDomain

    +
  • +
+
+
+

This is the security domain that any mechanism authentication will be +performed against.

+
+
+
    +
  • +

    SaslServerFactory

    +
  • +
+
+
+

This is the general factory for server side SASL authentication +mechanisms.

+
+
+
    +
  • +

    MechanismConfigurationSelector

    +
  • +
+
+
+

Additional configuration can be supplied for the authentication +mechanisms. The configuration will be described in more detail later but +the purpose of the MechanismConfigurationSelector is to obtain +configuration specific to the mechanism selected. This can include +information about realm names a mechanism should present to a remote +client plus additional NameRewriters and RealmMappers to use during the +authentication process.

+
+
+

The reason some components referenced by the SecurityDomain are +duplicated is so that mechanism-specific mappings can be applied.

+
+
+
+

2.3. HTTP Authentication

+
+

The HttpAuthenticationFactory is an authentication policy for +authentication using HTTP authentication mechanisms, including the BASIC, +DIGEST, EXTERNAL, FORM, SPNEGO, and CLIENT_CERT mechanisms. In addition to +being a policy, it is also a factory for configured authentication +mechanisms backed by a SecurityDomain.

+
+
+

The HttpAuthenticationFactory references the following:

+
+
+
    +
  • +

    SecurityDomain

    +
  • +
+
+
+

This is the security domain that any mechanism authentication will be +performed against.

+
+
+
    +
  • +

    HttpServerAuthenticationMechanismFactory

    +
  • +
+
+
+

This is the general factory for server side HTTP authentication +mechanisms.

+
+
+
    +
  • +

    MechanismConfigurationSelector

    +
  • +
+
+
+

Additional configuration can be supplied for the authentication +mechanisms. The configuration will be described in more detail later but +the purpose of the MechanismConfigurationSelector is to obtain +configuration specific to the mechanism selected. This can include +information about realm names a mechanism should present to a remote +client plus additional NameRewriters and RealmMappers to use during the +authentication process.

+
+
+

The reason some components referenced by the SecurityDomain are +duplicated is so that mechanism-specific mappings can be applied.

+
+
+
+

2.4. SSL / TLS

+
+

The SSLContext defined within Elytron is a javax.net.ssl.SSLContext +meaning it can be used by anything that uses an SSLContext directly.

+
+
+

In addition to the usual configuration for an SSLContext it is possible +to configure additional items such as cipher suites and protocols and +the SSLContext returned will wrap any engines created to set these +values.

+
+
+

The SSLContext within Elytron can also reference the following:

+
+
+
    +
  • +

    KeyManagers

    +
  • +
+
+
+

An array of KeyManager instances to be used by the SSLContext, this in +turn can reference a KeyStore to load the keys.

+
+
+
    +
  • +

    TrustManagers

    +
  • +
+
+
+

An array of TrustManager instances to be used by the SSLContext, this in +turn can also reference a KeyStore to load the certificates.

+
+
+
    +
  • +

    SecurityDomain

    +
  • +
+
+
+

If an SSLContext is (optionally) configured to reference a +SecurityDomain then verification of a client’s certificate can be +performed as an authentication ensuring the appropriate permissions to +Logon are assigned before even allowing the connection to be fully +opened. Additionally, the SecurityIdentity can be established at the time +the connection is opened and used for any invocations over the +connection.

+
+
+
+

2.5. Passwords

+
+

One of the core features of WildFly Elytron is the ability to work with many different formats for representing passwords, WildFly Elytron also contains APIs that can be used to convert from clear text passwords to these representations that can be stored in the underlying identity stores.

+
+
+

This section will document how these APIs can be used to work with the different password types.

+
+
+

2.5.1. PasswordFactory

+
+

Working with passwords will require interaction with the org.wildfly.security.password.PasswordFactory API, this obtains access to implementations from java.security.Provider instances, there are two different ways these can be identified: -

+
+
+
    +
  1. +

    By querying the globally installed Providers

    +
  2. +
  3. +

    By passing in the Provider to the getInstance method of the PasswordFactory API.

    +
  4. +
+
+
+

In both cases the WildFly Elytron implementations are provided by the org.wildfly.security.WildFlyElytronProvider provider.

+
+
+

When relying on the Provider being globally registered the PasswordFactory for a specific algorithm can be obtained as: -

+
+
+
+
PasswordFactory passwordFactory = PasswordFactory.getInstance(algorithm);
+
+
+
+

However an alternative approach could be to manually instantiate the Provider and pass it in when obtaining an instance of the PasswordFactory: -

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+...
+PasswordFactory passwordFactory = PasswordFactory.getInstance(algorithm, ELYTRON_PROVIDER);
+
+
+
+
+

2.5.2. Clear Password

+
+

The simplest type of Password to obtain from the PasswordFactory is a clear text password, the following code illustrates how this can be obtained.

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+static final String TEST_PASSWORD = "test_password";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(ClearPassword.ALGORITHM_CLEAR, ELYTRON_PROVIDER);
+
+    ClearPasswordSpec passwordSpec = new ClearPasswordSpec(TEST_PASSWORD.toCharArray());
+    Password password = passwordFactory.generatePassword(passwordSpec);
+
+    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(password, TEST_PASSWORD.toCharArray())));
+}
+
+
+
+

A second approach is to obtain a raw representation of the ClearPassword, however this will need to be translated into the PasswordFactory if it will be used for evidence validation but if the Password is not being used for verification this can be a suitable alternative provided the parameters have been pre-verified.

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+static final String TEST_PASSWORD = "test_password";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(ClearPassword.ALGORITHM_CLEAR, ELYTRON_PROVIDER);
+
+    Password rawPassword = ClearPassword.createRaw(ClearPassword.ALGORITHM_CLEAR, TEST_PASSWORD.toCharArray());
+
+    Password password = passwordFactory.translate(rawPassword);
+
+    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(password, TEST_PASSWORD.toCharArray())));
+}
+
+
+
+

The raw password can be used for other areas of the Elytron APIs however if it is used for validation an error similar to the following will be thrown.

+
+
+
+
Exception in thread "main" java.security.InvalidKeyException
+    at org.wildfly.security.password.impl.PasswordFactorySpiImpl.engineVerify(PasswordFactorySpiImpl.java:762)
+    at org.wildfly.security.password.PasswordFactory.verify(PasswordFactory.java:210)
+[source,java]
+
+
+
+
+

2.5.3. Simple Digest

+
+

The next type of password is the simple digest, for this password type the clear text password id digested using the specified algorithm however no salt is used.

+
+
+

The following algorithms are applicable to this type of encoding.

+
+
+
    +
  • +

    simple-digest-md2

    +
  • +
  • +

    simple-digest-md5

    +
  • +
  • +

    simple-digest-sha-1

    +
  • +
  • +

    simple-digest-sha-256

    +
  • +
  • +

    simple-digest-sha-384

    +
  • +
  • +

    simple-digest-sha-512

    +
  • +
+
+
+

The following example illustrates how the Password instance can be created starting from the clear text password,from this the digested representation of the password can be obtained which could be used to store the password. The digested representation is then used to create a further Password instance.

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+static final String TEST_PASSWORD = "test_password";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(SimpleDigestPassword.ALGORITHM_SIMPLE_DIGEST_SHA_512, ELYTRON_PROVIDER);
+
+    ClearPasswordSpec clearSpec = new ClearPasswordSpec(TEST_PASSWORD.toCharArray());
+    SimpleDigestPassword original = (SimpleDigestPassword) passwordFactory.generatePassword(clearSpec);
+
+    byte[] digest = original.getDigest();
+    HashPasswordSpec hashSpec = new HashPasswordSpec(digest);
+
+    SimpleDigestPassword restored = (SimpleDigestPassword) passwordFactory.generatePassword(hashSpec);
+
+    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+}
+
+
+
+

Starting from the digest the raw APIs can be used as.

+
+
+
+
SimpleDigestPassword rawPassword = SimpleDigestPassword.createRaw(SimpleDigestPassword.ALGORITHM_SIMPLE_DIGEST_SHA_512, digest);
+
+SimpleDigestPassword restored = (SimpleDigestPassword) passwordFactory.translate(rawPassword);
+
+System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+
+
+
+
+

2.5.4. Salted Digest

+
+

Two variations of salted digests are supported, these can either be digested with the salt first or the password first. The following algorithms are supported: -

+
+
+
    +
  • +

    password-salt-digest-md5

    +
  • +
  • +

    password-salt-digest-sha-1

    +
  • +
  • +

    password-salt-digest-sha-256

    +
  • +
  • +

    password-salt-digest-sha-384

    +
  • +
  • +

    password-salt-digest-sha-512

    +
  • +
  • +

    salt-password-digest-md5

    +
  • +
  • +

    salt-password-digest-sha-1

    +
  • +
  • +

    salt-password-digest-sha-256

    +
  • +
  • +

    salt-password-digest-sha-384

    +
  • +
  • +

    salt-password-digest-sha-512

    +
  • +
+
+
+

The following example shows how using a generated salt the password can be created from a clear text password and then subsequently how the password can be recreated from the salt and digest.

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+static final String TEST_PASSWORD = "test_password";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(SaltedSimpleDigestPassword.ALGORITHM_PASSWORD_SALT_DIGEST_SHA_512, ELYTRON_PROVIDER);
+
+    byte[] salt = new byte[32];
+    SecureRandom random = new SecureRandom();
+    random.nextBytes(salt);
+
+    SaltedPasswordAlgorithmSpec saltedSpec = new SaltedPasswordAlgorithmSpec(salt);
+    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), saltedSpec);
+
+    SaltedSimpleDigestPassword original = (SaltedSimpleDigestPassword) passwordFactory.generatePassword(encryptableSpec);
+
+    byte[] digest = original.getDigest();
+
+    SaltedHashPasswordSpec saltedHashSpec = new SaltedHashPasswordSpec(digest, salt);
+
+    SaltedSimpleDigestPassword restored = (SaltedSimpleDigestPassword) passwordFactory.generatePassword(saltedHashSpec);
+
+    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+}
+
+
+
+

Alternatively the salt could be generated automatically by using a ClearPasswordSpec.

+
+
+
+
ClearPasswordSpec clearSpec = new ClearPasswordSpec(TEST_PASSWORD.toCharArray());
+SaltedSimpleDigestPassword original = (SaltedSimpleDigestPassword) passwordFactory.generatePassword(clearSpec);
+
+byte[] salt = original.getSalt();
+byte[] digest = original.getDigest();
+
+
+
+

Starting with the digest and salt the raw APIs can also be used.

+
+
+
+
SaltedSimpleDigestPassword rawPassword = SaltedSimpleDigestPassword.createRaw(SaltedSimpleDigestPassword.ALGORITHM_PASSWORD_SALT_DIGEST_SHA_512, digest, salt);
+
+SaltedSimpleDigestPassword restored = (SaltedSimpleDigestPassword) passwordFactory.translate(rawPassword);
+
+System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+
+
+
+
+

2.5.5. Digest

+
+

The Digest passwords are an alternative form of digest where the username, realm and password are digested together delimited with a ':', these are usable with clear text authentication mechanisms but also usable with the digest authentication mechanisms also eliminating the transmission of clear text passwords during authentication. The following algorithms are supported: -

+
+
+
    +
  • +

    digest-md5

    +
  • +
  • +

    digest-sha

    +
  • +
  • +

    digest-sha-256

    +
  • +
  • +

    digest-sha-384

    +
  • +
  • +

    digest-sha-512

    +
  • +
  • +

    digest-sha-512-256

    +
  • +
+
+
+

The following example illustrates how a password can be created from the username, realm, and password and then how it can be recreated from the digest, realm, and password.

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+static final String TEST_USERNAME = "test_username";
+static final String TEST_REALM = "Test Realm";
+static final String TEST_PASSWORD = "test_password";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(DigestPassword.ALGORITHM_DIGEST_MD5, ELYTRON_PROVIDER);
+
+    DigestPasswordAlgorithmSpec digestAlgorithmSpec = new DigestPasswordAlgorithmSpec(TEST_USERNAME, TEST_REALM);
+    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), digestAlgorithmSpec);
+
+    DigestPassword original = (DigestPassword) passwordFactory.generatePassword(encryptableSpec);
+
+    byte[] digest = original.getDigest();
+
+    DigestPasswordSpec digestPasswordSpec = new DigestPasswordSpec(TEST_USERNAME, TEST_REALM, digest);
+
+    DigestPassword restored = (DigestPassword) passwordFactory.generatePassword(digestPasswordSpec);
+
+    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+}
+
+
+
+

For this password type is not possible to create the password from the ClearPasswordSpec as additional information always needs to be specified and can not be dynamically or randomly generated, however the raw APIs can still be used.

+
+
+
+
DigestPassword rawPassword = DigestPassword.createRaw(DigestPassword.ALGORITHM_DIGEST_MD5, TEST_USERNAME, TEST_REALM, digest);
+
+DigestPassword restored = (DigestPassword) passwordFactory.translate(rawPassword);
+
+System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+
+
+
+
+

2.5.6. SCRAM

+
+

Another set of passwords more tightly tied to a specific authentication mechanism are the SCRAM password types, the following algorithms are supported: -

+
+
+
    +
  • +

    scram-sha-1

    +
  • +
  • +

    scram-sha-256

    +
  • +
  • +

    scram-sha-384

    +
  • +
  • +

    scram-sha-512

    +
  • +
+
+
+

The following demonstrates how a clear password can be converted to a scram password using a specified salt and iteration count and how this can be recreated from the digested value.

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+
+static final String TEST_PASSWORD = "test_password";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(ScramDigestPassword.ALGORITHM_SCRAM_SHA_512, ELYTRON_PROVIDER);
+
+    byte[] salt = new byte[12];
+    SecureRandom random = new SecureRandom();
+    random.nextBytes(salt);
+
+    IteratedSaltedPasswordAlgorithmSpec iteratedAlgorithmSpec = new IteratedSaltedPasswordAlgorithmSpec(2000, salt);
+    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), iteratedAlgorithmSpec);
+
+    ScramDigestPassword original = (ScramDigestPassword) passwordFactory.generatePassword(encryptableSpec);
+
+    byte[] digest = original.getDigest();
+
+    IteratedSaltedHashPasswordSpec scramPasswordSpec = new IteratedSaltedHashPasswordSpec(digest, salt, 2000);
+
+    ScramDigestPassword restored = (ScramDigestPassword) passwordFactory.generatePassword(scramPasswordSpec);
+
+    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+}
+
+
+
+

Alternatively instead of using the IteratedSaltedPasswordAlgorithmSpec is it also possible to use a SaltedPasswordAlgorithmSpec when converting from the clear text password and a default iteration count will be used instead, this is similar to how the conversion happens for salted digest passwords.

+
+
+

It is also possible to omit the salt and iteration count and these will be generated.

+
+
+
+
ClearPasswordSpec clearSpec = new ClearPasswordSpec(TEST_PASSWORD.toCharArray());
+
+ScramDigestPassword original = (ScramDigestPassword) passwordFactory.generatePassword(clearSpec);
+
+byte[] salt = original.getSalt();
+byte[] digest = original.getDigest();
+int iterationCount = original.getIterationCount();
+
+
+
+

Starting with a digest, salt, and iteration count the raw APIs can also be used.

+
+
+
+
ScramDigestPassword rawPassword = ScramDigestPassword.createRaw(ScramDigestPassword.ALGORITHM_SCRAM_SHA_256, digest, salt, 2000);
+
+ScramDigestPassword restored = (ScramDigestPassword) passwordFactory.translate(rawPassword);
+
+System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+
+
+
+
+

2.5.7. OTP

+
+

One more type of mechanism specific password is the one time password type. The following algorithms are supported: -

+
+
+
    +
  • +

    otp-md5

    +
  • +
  • +

    otp-sha1

    +
  • +
  • +

    otp-sha256

    +
  • +
  • +

    otp-sha384

    +
  • +
  • +

    otp-sha512

    +
  • +
+
+
+

The following demonstrates how a clear password can be converted to a one time password using a specified seed and iteration count and how this can be recreated from the hashed value.

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+static final String TEST_PASSWORD = "test_password";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(OneTimePassword.ALGORITHM_OTP_SHA_512, ELYTRON_PROVIDER);
+
+    String seed = "ke1234";
+    int sequenceNumber = 500;
+
+    OneTimePasswordAlgorithmSpec oneTimeAlgorithmSpec = new OneTimePasswordAlgorithmSpec(OneTimePassword.ALGORITHM_OTP_SHA_512, seed, sequenceNumber);
+    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), oneTimeAlgorithmSpec);
+
+    OneTimePassword original = (OneTimePassword) passwordFactory.generatePassword(encryptableSpec);
+
+    byte[] hash = original.getHash();
+
+    OneTimePasswordSpec oneTimeSpec = new OneTimePasswordSpec(hash, seed, sequenceNumber);
+
+    OneTimePassword restored = (OneTimePassword) passwordFactory.generatePassword(oneTimeSpec);
+}
+
+
+
+

This example does not include verification as that is handled by the SASL mechanism which also increments the sequence and replaces the hash, this does mean this password type needs to be used with a security realm which also supports updates.

+
+
+

Starting with the hash and sequence number the raw APIs can also be used.

+
+
+
+
OneTimePassword rawPassword = OneTimePassword.createRaw(OneTimePassword.ALGORITHM_OTP_SHA_512, original.getHash(), original.getSeed(), original.getSequenceNumber());
+
+OneTimePassword restored = (OneTimePassword) passwordFactory.translate(rawPassword);
+
+
+
+
+

2.5.8. Other Iterated Salted Types

+
+

The following algorithms are also supported for alternative iterated salted password types: -

+
+
+
    +
  • +

    bcrypt

    +
  • +
  • +

    sun-crypt-md5

    +
  • +
  • +

    sun-crypt-md5-bare-salt

    +
  • +
  • +

    crypt-sha-256

    +
  • +
  • +

    crypt-sha-512

    +
  • +
  • +

    bsd-crypt-des

    +
  • +
+
+
+

The general pattern for working with these password types is the same as was used for Scram password types if an interaction count is specified or the same as salted digest password types if a default iteration count is to be used instead.

+
+
+
+

2.5.9. Other Salted Types

+
+

The following algorithms are also supported for salted password types: -

+
+
+
    +
  • +

    crypt-md5

    +
  • +
  • +

    crypt-des

    +
  • +
+
+
+

The general pattern for working with these password types is the same as was used for salted digest password types as no iteration count is required.

+
+
+
+

2.5.10. Masked Password Types

+
+

Finally a set of masked password types are also supported to add support for legacy password types which were previously supported within PicketBox, the following algorithms are supported.

+
+
+
    +
  • +

    masked-MD5-DES

    +
  • +
  • +

    masked-MD5-DES-CBC-PKCS5

    +
  • +
  • +

    masked-MD5-3DES

    +
  • +
  • +

    masked-MD5-3DES-CBC-PKCS5

    +
  • +
  • +

    masked-SHA1-DES-EDE

    +
  • +
  • +

    masked-SHA1-DES-EDE-CBC-PKCS5

    +
  • +
  • +

    masked-SHA1-RC2-40

    +
  • +
  • +

    masked-SHA1-RC2-40-CBC-PKCS5

    +
  • +
  • +

    masked-SHA1-RC2-128

    +
  • +
  • +

    masked-SHA1-RC2-128-CBC-PKCS5

    +
  • +
  • +

    masked-SHA1-RC4-40

    +
  • +
  • +

    masked-SHA1-RC4-40-ECB

    +
  • +
  • +

    masked-SHA1-RC4-128

    +
  • +
  • +

    masked-SHA1-RC4-128-ECB

    +
  • +
  • +

    masked-HMAC-SHA1-AES-128

    +
  • +
  • +

    masked-HMAC-SHA224-AES-128

    +
  • +
  • +

    masked-HMAC-SHA256-AES-128

    +
  • +
  • +

    masked-HMAC-SHA384-AES-128

    +
  • +
  • +

    masked-HMAC-SHA512-AES-128

    +
  • +
  • +

    masked-HMAC-SHA1-AES-256

    +
  • +
  • +

    masked-HMAC-SHA224-AES-256

    +
  • +
  • +

    masked-HMAC-SHA256-AES-256

    +
  • +
  • +

    masked-HMAC-SHA384-AES-256

    +
  • +
  • +

    masked-HMAC-SHA512-AES-256

    +
  • +
  • +

    masked-PBKDF-HMAC-SHA1

    +
  • +
  • +

    masked-PBKDF-HMAC-SHA224

    +
  • +
  • +

    masked-PBKDF-HMAC-SHA256

    +
  • +
  • +

    masked-PBKDF-HMAC-SHA384

    +
  • +
  • +

    masked-PBKDF-HMAC-SHA512

    +
  • +
+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+
+static final String TEST_PASSWORD = "test_password";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(MaskedPassword.ALGORITHM_MASKED_MD5_DES, ELYTRON_PROVIDER);
+
+    char[] key = "my_secret_key".toCharArray();
+
+    byte[] salt = new byte[8];
+    SecureRandom random = new SecureRandom();
+    random.nextBytes(salt);
+
+    int iterationCount = 100;
+
+    MaskedPasswordAlgorithmSpec maskedAlgorithmSpec = new MaskedPasswordAlgorithmSpec(key, iterationCount, salt);
+    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), maskedAlgorithmSpec);
+
+    MaskedPassword original = (MaskedPassword) passwordFactory.generatePassword(encryptableSpec);
+
+    byte[] masked = original.getMaskedPasswordBytes();
+
+    MaskedPasswordSpec maskedPasswordSpec = new MaskedPasswordSpec(key, iterationCount, salt, masked);
+
+    MaskedPassword restored = (MaskedPassword) passwordFactory.generatePassword(maskedPasswordSpec);
+
+    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+}
+
+
+
+

As with the other password types the raw password APIs can also be used to recreate the password.

+
+
+
+
MaskedPassword rawPassword = MaskedPassword.createRaw(MaskedPassword.ALGORITHM_MASKED_MD5_DES, key, iterationCount, salt, masked);
+
+MaskedPassword restored = (MaskedPassword) passwordFactory.translate(rawPassword);
+
+System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+
+
+
+
+

2.5.11. Modular Crypt Encoding

+
+

A number of password types can be encoded using modular crypt allowing information such as the password type, the hash or digest, the salt, and the iteration count to be encoded in a single String, this can make storage and retrieval of passwords easier as multiple pieces of related data can be handled as one.

+
+
+

Within the WildFly Elytron project the utility org.wildfly.security.password.util.ModularCrypt can be used to handle the encoding and decoding.

+
+
+

The following password types can be encoded and decoded: -

+
+
+
    +
  • +

    BCryptPassword

    +
  • +
  • +

    BSDUnixDESCryptPassword

    +
  • +
  • +

    UnixDESCryptPassword

    +
  • +
  • +

    UnixMD5CryptPassword

    +
  • +
  • +

    SunUnixMD5CryptPassword

    +
  • +
  • +

    UnixSHACryptPassword

    +
  • +
+
+
+

The following code demonstrates this for a BSDUnixDESCryptPassword: -

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+
+static final String TEST_PASSWORD = "myPassword";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(BSDUnixDESCryptPassword.ALGORITHM_BSD_CRYPT_DES, ELYTRON_PROVIDER);
+
+    int iterationCount = BSDUnixDESCryptPassword.DEFAULT_ITERATION_COUNT;
+
+    byte[] salt = new byte[BSDUnixDESCryptPassword.BSD_CRYPT_DES_SALT_SIZE];
+    SecureRandom random = new SecureRandom();
+    random.nextBytes(salt);
+
+    IteratedSaltedPasswordAlgorithmSpec iteratedAlgorithmSpec = new IteratedSaltedPasswordAlgorithmSpec(iterationCount, salt);
+    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), iteratedAlgorithmSpec);
+
+    BSDUnixDESCryptPassword original = (BSDUnixDESCryptPassword) passwordFactory.generatePassword(encryptableSpec);
+
+    String modularCryptString = ModularCrypt.encodeAsString(original);
+
+    Password rawPassword = ModularCrypt.decode(modularCryptString);
+
+    BSDUnixDESCryptPassword restored = (BSDUnixDESCryptPassword) passwordFactory.translate(rawPassword);
+
+    System.out.println(String.format("Password Verified '%b'", passwordFactory.verify(restored, TEST_PASSWORD.toCharArray())));
+}
+
+
+
+ + + + + +
+ + +The Password returned from the call to ModularCrypt.decode(…​) is a raw password so needs translating by the PasswordFactory. +
+
+
+
+
+
+
+

3. Elytron Subsystem

+
+
+

WildFly Elytron is a security framework used to unify security across +the entire application server. The elytron subsystem enables a single +point of configuration for securing both applications and the management +interfaces. WildFly Elytron also provides a set of APIs and SPIs for +providing custom implementations of functionality and integrating with +the elytron subsystem.

+
+
+

In addition, there are several other important features of the WildFly +Elytron:

+
+
+
    +
  • +

    Stronger authentication mechanisms for HTTP and SASL authentication.

    +
  • +
  • +

    Improved architecture that allows for SecurityIdentities to be +propagated across security domains and transparently transformed ready +to be used for authorization. This transformation takes place using +configurable role decoders, role mappers, and permission mappers.

    +
  • +
  • +

    Centralized point for SSL/TLS configuration including cipher suites +and protocols.

    +
  • +
  • +

    SSL/TLS optimizations such as eager SecureIdentity construction and +closely tying authorization to establishing an SSL/TLS connection. Eager +SecureIdentity construction eliminates the need for a SecureIdentity +to be constructed on a per-request basis. Closely tying authentication +to establishing an SSL/TLS connection enables permission checks to +happen BEFORE the first request is received.

    +
  • +
  • +

    A secure credential store that replaces the previous vault +implementation to store clear text credentials.

    +
  • +
+
+
+

The new elytron subsystem exists in parallel to the legacy security +subsystem and legacy core management authentication. Both the legacy and +Elytron methods may be used for securing the management interfaces as +well as providing security for applications.

+
+
+

3.1. Get Started using the Elytron Subsystem

+
+

To get started using Elytron, refer to these topics:

+
+
+ +
+
+
+

3.2. Provided components

+
+

WildFly Elytron provides a default set of implementations in the +elytron subsystem.

+
+
+

3.2.1. Factories

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

aggregate-http-server-mechanism-factory

An HTTP server factory +definition where the HTTP server factory is an aggregation of other HTTP +server factories.

aggregate-sasl-server-factory

A SASL server factory definition where +the SASL server factory is an aggregation of other SASL server +factories.

configurable-http-server-mechanism-factory

A SASL server factory +definition where the SASL server factory is an aggregation of other SASL +server factories.

configurable-sasl-server-factory

A SASL server factory definition +where the SASL server factory is an aggregation of other SASL server +factories.

custom-credential-security-factory

A custom credential SecurityFactory +definition.

http-authentication-factory

Resource containing the association of a +security domain with a HttpServerAuthenticationMechanismFactory.

kerberos-security-factory

A security factory for obtaining a +GSSCredential for use during authentication.

mechanism-provider-filtering-sasl-server-factory

A SASL server factory +definition that enables filtering by provider where the factory was +loaded using a provider.

provider-http-server-mechanism-factory

An HTTP server factory +definition where the HTTP server factory is an aggregation of factories +from the provider list.

provider-sasl-server-factory

A SASL server factory definition where +the SASL server factory is an aggregation of factories from the provider +list.

sasl-authentication-factory

Resource containing the association of a +security domain with a SaslServerFactory.

service-loader-http-server-mechanism-factory

An HTTP server factory +definition where the HTTP server factory is an aggregation of factories +identified using a ServiceLoader

service-loader-sasl-server-factory

A SASL server factory definition +where the SASL server factory is an aggregation of factories identified +using a ServiceLoader

+
+
+

3.2.2. Principal Transformers

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

aggregate-principal-transformer

A principal transformer definition +where the principal transformer is an aggregation of other principal +transformers.

case-principal-transformer

A principal transformer definition where +the principal is adjusted to upper or lower case.

chained-principal-transformer

A principal transformer definition where +the principal transformer is a chaining of other principal transformers.

constant-principal-transformer

A principal transformer definition +where the principal transformer always returns the same constant.

custom-principal-transformer

A custom principal transformer +definition.

regex-principal-transformer

A regular expression based principal +transformer

regex-validating-principal-transformer

A regular expression based +principal transformer which uses the regular expression to validate the +name.

+
+
+

3.2.3. Principal Decoders

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

aggregate-principal-decoder

A principal decoder definition where the +principal decoder is an aggregation of other principal decoders.

concatenating-principal-decoder

A principal decoder definition where +the principal decoder is a concatenation of other principal decoders.

constant-principal-decoder

Definition of a principal decoder that +always returns the same constant.

custom-principal-decoder

Definition of a custom principal decoder.

x500-attribute-principal-decoder

Definition of a X500 attribute based +principal decoder.

+
+
+

3.2.4. Evidence Decoders

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

x509-subject-alt-name-evidence-decoder

An evidence decoder that derives the +principal associated with a certificate chain from an X.509 subject alternative +name from the first certificate in the given chain.

x500-subject-evidence-decoder

An evidence decoder that derives the principal +associated with a certificate chain from the subject from the first certificate +in the given chain.

custom-evidence-decoder

Definition of a custom evidence decoder.

aggregate-evidence-decoder

An evidence decoder that is an aggregation of other +evidence decoders. Given evidence, these evidence decoders will be attempted in +order until one returns a non-null principal or until there are no more evidence +decoders left to try.

+
+
+

3.2.5. Realm Mappers

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

constant-realm-mapper

Definition of a constant realm mapper that +always returns the same value.

custom-realm-mapper

Definition of a custom realm mapper

mapped-regex-realm-mapper

Definition of a realm mapper implementation +that first uses a regular expression to extract the realm name, this is +then converted using the configured mapping of realm names.

simple-regex-realm-mapper

Definition of a simple realm mapper that +attempts to extract the realm name using the capture group from the +regular expression, if that does not provide a match then the delegate +realm mapper is used instead.

+
+
+

3.2.6. Realms

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

aggregate-realm

A realm definition that is an aggregation of two +or more realms, one for the authentication steps and one or more for loading the +identity for the authorization steps and aggregating the resulting attributes.

caching-realm

A realm definition that enables caching to another +security realm. Caching strategy is Least Recently Used where least +accessed entries are discarded when maximum number of entries is +reached.

custom-modifiable-realm

Custom realm configured as being modifiable +will be expected to implement the ModifiableSecurityRealm interface. By +configuring a realm as being modifiable management operations will be +made available to manipulate the realm.

custom-realm

A custom realm definitions can implement either the s +SecurityRealm interface or the ModifiableSecurityRealm interface. +Regardless of which interface is implemented management operations will +not be exposed to manage the realm. However other services that depend +on the realm will still be able to perform a type check and cast to gain +access to the modification API.

filesystem-realm

A simple security realm definition backed by the +filesystem.

identity-realm

A security realm definition where identities are +represented in the management model.

jdbc-realm

A security realm definition backed by database using JDBC.

key-store-realm

A security realm definition backed by a keystore.

ldap-realm

A security realm definition backed by LDAP.

properties-realm

A security realm definition backed by properties +files.

token-realm

A security realm definition capable of validating and +extracting identities from security tokens.

distributed-realm

A security realm definition for authentication and authorization identities distributed between multiple security realms.

failover-realm

A realm definition that is an aggregation of two realms, one for default behaviour and +second for cases when first realm is unavailable.

jaas-realm

A security realm definition that uses JAAS configuration file to initialize LoginContext that is used to obtain identities.

+
+
+

3.2.7. Permission Mappers

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

custom-permission-mapper

Definition of a custom permission mapper.

logical-permission-mapper

Definition of a logical permission mapper.

simple-permission-mapper

Definition of a simple configured permission +mapper.

constant-permission-mapper

Definition of a permission mapper that +always returns the same constant.

+
+
+

3.2.8. Role Decoders

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

custom-role-decoder

Definition of a custom RoleDecoder

simple-role-decoder

Definition of a simple RoleDecoder that takes a +single attribute and maps it directly to roles.

source-address-role-decoder

Definition of a RoleDecoder that maps roles +based on the IP address of the remote client.

aggregate-role-decoder

A role decoder that is an aggregation of other +role decoders. An aggregate role decoder combines the roles obtained using +each role decoder.

+
+
+

3.2.9. Role Mappers

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

add-prefix-role-mapper

A role mapper definition for a role mapper that +adds a prefix to each provided.

add-suffix-role-mapper

A role mapper definition for a role mapper that +adds a suffix to each provided.

constant-role-mapper

A role mapper definition where a constant set of +roles is always returned.

aggregate-role-mapper

A role mapper definition where the role mapper +is an aggregation of other role mappers.

logical-role-mapper

A role mapper definition for a role mapper that +performs a logical operation using two referenced role mappers.

custom-role-mapper

Definition of a custom role mapper

mapped-role-mapper

A role mapper definition for a role mapper that uses +configured mapping of role names to map role names.

regex-role-mapper

A role mapper definition for a role mapper that +performs a regex matching and maps matching roles with provided pattern. +Regex can capture groups that replacement pattern can make use of.

+
+
+

3.2.10. SSL Components

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

client-ssl-context

An SSLContext for use on the client side of a +connection.

filtering-key-store

A filtering keystore definition, which provides a +keystore by filtering a key-store.

key-manager

A key manager definition for creating the key manager +list as used to create an SSL context.

key-store

A keystore definition.

ldap-key-store

An LDAP keystore definition, which loads a keystore +from an LDAP server.

server-ssl-context

An SSL context for use on the server side of a +connection.

trust-manager

A trust manager definition for creating the +TrustManager list as used to create an SSL context.

certificate-authority-account

A certificate authority account which can +be used to obtain and revoke signed certificates.

+
+
+

3.2.11. Other

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

aggregate-providers

An aggregation of two or more Provider[] +resources.

authentication-configuration

An individual authentication +configuration definition, which is used by clients deployed to WildFly +and other resources for authenticating when making a remote connection.

authentication-context

An individual authentication context +definition, which is used to supply an ssl-context and +authentication-configuration when clients deployed to WildFly and other +resources make a remoting connection.

credential-store

Credential store to keep alias for sensitive +information such as passwords for external services.

dir-context

The configuration to connect to a directory (LDAP) server.

provider-loader

A definition for a provider loader.

security-domain

A security domain definition.

security-property

A definition of a security property to be set.

+
+
+
+

3.3. Out of the Box Configuration

+
+

WildFly provides a set of components configured by default. While these +components are ready to use, the legacy security subsystem and legacy +core management authentication is still used by default. To configure +WildFly to use the these configured components as well as create new +ones, see the Using the Elytron +Subsystem section.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Default ComponentDescription

ApplicationDomain

The ApplicationDomain security domain uses +ApplicationRealm and groups-to-roles for authentication. It also uses +default-permission-mapper to assign the login permission.

ManagementDomain

The ManagementDomain security domain uses two +security realms for authentication: ManagementRealm with groups-to-roles +and local with super-user-mapper. It also uses default-permission-mapper +to assign the login permission.

local (security realm)

The local security realm does no authentication +and sets the identity of principals to $local

ApplicationRealm

The ApplicationRealm security realm is a properties +realm that authenticates principals using application-users.properties +and assigns roles using application-roles.properties. These files are +located under jboss.server.config.dir, which by default, maps to +EAP_HOME/standalone/configuration. They are also the same files used by +the legacy security default configuration.

ManagementRealm

The ManagementRealm security realm is a properties +realm that authenticates principals using mgmt-users.properties and +assigns roles using mgmt-groups.properties. These files are located +under jboss.server.config.dir, which by default, maps to +EAP_HOME/standalone/configuration. They are also the same files used by +the legacy security default configuration.

default-permission-mapper

The default-permission-mapper mapper is a +simple permission mapper that uses the default-permissions permission set +to assign the full set of permissions that an identity would require to +access any services on the server. For example, the default-permission-mapper +mapper uses org.wildfly.extension.batch.jberet.deployment.BatchPermission +specified by the default-permissions permission set to assign permission for +batch jobs. The batch permissions are start, stop, restart, abandon, and read +which aligns with jakarta.batch.operations.JobOperator. The default-permission-mapper +mapper also uses org.wildfly.security.auth.permission.LoginPermission specified +by the the login-permission permission set to assign the login permission.

local (mapper)

The local mapper is a constant role mapper that maps to +the local security realm. This is used to map authentication to the +local security realm.

groups-to-roles

The groups-to-roles mapper is a simple-role-decoder +that will decode the groups information of a principal and use it for +the role information.

super-user-mapper

The super-user-mapper mapper is a constant role +mapper that maps the SuperUser role to a principal.

management-http-authentication

The management-http-authentication +http-authentication-factory can be used for doing authentication over +http. It uses the global provider-http-server-mechanism-factory to +filter authentication mechanism and uses ManagementDomain for +authenticating principals. It accepts the DIGEST authentication +mechanisms and exposes it as ManagementRealm to applications.

global (provider-http-server-mechanism-factory)

This is the HTTP +server factory mechanism definition used to list the provided +authentication mechanisms when creating an http authentication factory.

management-sasl-authentication

The management-sasl-authentication +sasl-authentication-factory can be used for authentication using SASL. +It uses the configured sasl-server-factory to filter authentication +mechanisms, which also uses the global provider-sasl-server-factory to +filter by provider names. management-sasl-authentication uses the +ManagementDomain security domain for authentication of principals. It +also maps authentication using JBOSS-LOCAL-USER mechanisms using the +local realm mapper and authentication using DIGEST-MD5 to +ManagementRealm.

application-sasl-authentication

The application-sasl-authentication +sasl-authentication-factory can be used for authentication using SASL. +It uses the configured sasl-server-factory to filter authentication +mechanisms, which also uses the global provider-sasl-server-factory to +filter by provider names. application-sasl-authentication uses the +ApplicationDomain security domain for authentication of principals.

global (provider-sasl-server-factory)

This is the SASL server factory +definition used to create SASL authentication factories.

elytron (mechanism-provider-filtering-sasl-server-factor)

This is used +to filter which sasl-authentication-factory is used based on the +provider. In this case, elytron will match on the WildFlyElytron +provider name.

configured (configurable-sasl-server-factory)

This is used to filter +sasl-authentication-factory is used based on the mechanism name. In this +case, configured will match on JBOSS-LOCAL-USER and DIGEST-MD5. It also +sets the wildfly.sasl.local-user.default-user to $local.

applicationSSC

The applicationSSC server SSL context can be used +to automatically generate a self-signed certificate the first time +the HTTPS interface is accessed. This server SSL context should only +be used for testing purposes. It should never be used in a production +environment.

combined-providers

Is an aggregate provider that aggregates the elytron +and openssl provider loaders.

elytron

A provider loader

openssl

A provider loader

+
+

Default WildFly Configuration

+
+
+
+
/subsystem=elytron:read-resource(recursive=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "default-authentication-context" => undefined,
+        "disallowed-providers" => ["OracleUcrypto"],
+        "final-providers" => "combined-providers",
+        "initial-providers" => undefined,
+        "security-properties" => undefined,
+        "add-prefix-role-mapper" => undefined,
+        "add-suffix-role-mapper" => undefined,
+        "aggregate-evidence-decoder" => undefined,
+        "aggregate-http-server-mechanism-factory" => undefined,
+        "aggregate-principal-decoder" => undefined,
+        "aggregate-principal-transformer" => undefined,
+        "aggregate-providers" => {"combined-providers" => {"providers" => [
+            "elytron",
+            "openssl"
+        ]}},
+        "aggregate-realm" => undefined,
+        "aggregate-role-decoder" => undefined,
+        "aggregate-role-mapper" => undefined,
+        "aggregate-sasl-server-factory" => undefined,
+        "aggregate-security-event-listener" => undefined,
+        "authentication-configuration" => undefined,
+        "authentication-context" => undefined,
+        "caching-realm" => undefined,
+        "case-principal-transformer" => undefined,
+        "certificate-authority-account" => undefined,
+        "chained-principal-transformer" => undefined,
+        "client-ssl-context" => undefined,
+        "concatenating-principal-decoder" => undefined,
+        "configurable-http-server-mechanism-factory" => undefined,
+        "configurable-sasl-server-factory" => {"configured" => {
+            "filters" => undefined,
+            "properties" => {"wildfly.sasl.local-user.default-user" => "$local"},
+            "protocol" => undefined,
+            "sasl-server-factory" => "elytron",
+            "server-name" => undefined
+        }},
+        "constant-permission-mapper" => undefined,
+        "constant-principal-decoder" => undefined,
+        "constant-principal-transformer" => undefined,
+        "constant-realm-mapper" => {"local" => {"realm-name" => "local"}},
+        "constant-role-mapper" => {"super-user-mapper" => {"roles" => ["SuperUser"]}},
+        "credential-store" => undefined,
+        "custom-credential-security-factory" => undefined,
+        "custom-evidence-decoder" => undefined,
+        "custom-modifiable-realm" => undefined,
+        "custom-permission-mapper" => undefined,
+        "custom-principal-decoder" => undefined,
+        "custom-principal-transformer" => undefined,
+        "custom-realm" => undefined,
+        "custom-realm-mapper" => undefined,
+        "custom-role-decoder" => undefined,
+        "custom-role-mapper" => undefined,
+        "custom-security-event-listener" => undefined,
+        "dir-context" => undefined,
+        "file-audit-log" => {"local-audit" => {
+            "format" => "JSON",
+            "path" => "audit.log",
+            "relative-to" => "jboss.server.log.dir",
+            "synchronized" => true
+        }},
+        "filesystem-realm" => undefined,
+        "filtering-key-store" => undefined,
+        "http-authentication-factory" => {
+            "management-http-authentication" => {
+                "http-server-mechanism-factory" => "global",
+                "mechanism-configurations" => [{
+                    "mechanism-name" => "DIGEST",
+                    "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
+                }],
+                "security-domain" => "ManagementDomain"
+            }
+        },
+        "identity-realm" => {"local" => {
+            "attribute-name" => undefined,
+            "attribute-values" => undefined,
+            "identity" => "$local"
+        }},
+        "jdbc-realm" => undefined,
+        "kerberos-security-factory" => undefined,
+        "key-manager" => {
+            "applicationKM" => {
+                "algorithm" => undefined,
+                "alias-filter" => undefined,
+                "credential-reference" => {"clear-text" => "password"},
+                "generate-self-signed-certificate-host" => "localhost",
+                "key-store" => "applicationKS",
+                "provider-name" => undefined,
+                "providers" => undefined
+            }
+        }
+        "key-store" => {
+            "applicationKS" => {
+                "alias-filter" => undefined,
+                "credential-reference" => {"clear-text" => "password"},
+                "path" => "application.keystore",
+                "relative-to" => "jboss.server.config.dir",
+                "required" => false,
+                "provider-name" => undefined,
+                "providers" => undefined,
+                "type" => "JKS"
+            }
+        },
+        "key-store-realm" => undefined,
+        "ldap-key-store" => undefined,
+        "ldap-realm" => undefined,
+        "logical-permission-mapper" => undefined,
+        "logical-role-mapper" => undefined,
+        "mapped-regex-realm-mapper" => undefined,
+        "mapped-role-mapper" => undefined,
+        "mechanism-provider-filtering-sasl-server-factory" => {"elytron" => {
+            "enabling" => true,
+            "filters" => [{"provider-name" => "WildFlyElytron"}],
+            "sasl-server-factory" => "global"
+        }},
+        "periodic-rotating-file-audit-log" => undefined,
+        "permission-set" => {
+            "login-permission" => {"permissions" => [{"class-name" => "org.wildfly.security.auth.permission.LoginPermission"}]},
+            "default-permissions" => {"permissions" => [
+                {
+                    "class-name" => "org.wildfly.extension.batch.jberet.deployment.BatchPermission",
+                    "module" => "org.wildfly.extension.batch.jberet",
+                    "target-name" => "*"
+                },
+                {
+                    "class-name" => "org.wildfly.transaction.client.RemoteTransactionPermission",
+                    "module" => "org.wildfly.transaction.client"
+                },
+                {
+                    "class-name" => "org.jboss.ejb.client.RemoteEJBPermission",
+                    "module" => "org.jboss.ejb-client"
+                }
+            ]}
+        },
+        "policy" => undefined,
+        "properties-realm" => {
+            "ApplicationRealm" => {
+                "groups-attribute" => "groups",
+                "groups-properties" => {
+                    "path" => "application-roles.properties",
+                    "relative-to" => "jboss.server.config.dir"
+                },
+                "users-properties" => {
+                    "path" => "application-users.properties",
+                    "relative-to" => "jboss.server.config.dir",
+                    "digest-realm-name" => "ApplicationRealm"
+                }
+            },
+            "ManagementRealm" => {
+                "groups-attribute" => "groups",
+                "groups-properties" => {
+                    "path" => "mgmt-groups.properties",
+                    "relative-to" => "jboss.server.config.dir"
+                },
+                "users-properties" => {
+                    "path" => "mgmt-users.properties",
+                    "relative-to" => "jboss.server.config.dir",
+                    "digest-realm-name" => "ManagementRealm"
+                }
+            }
+        },
+        "provider-http-server-mechanism-factory" => {"global" => {"providers" => undefined}},
+        "provider-loader" => {
+            "elytron" => {
+                "argument" => undefined,
+                "class-names" => undefined,
+                "configuration" => undefined,
+                "module" => "org.wildfly.security.elytron",
+                "path" => undefined,
+                "relative-to" => undefined
+            },
+            "openssl" => {
+                "argument" => undefined,
+                "class-names" => undefined,
+                "configuration" => undefined,
+                "module" => "org.wildfly.openssl",
+                "path" => undefined,
+                "relative-to" => undefined
+            }
+        },
+        "provider-sasl-server-factory" => {"global" => {"providers" => undefined}},
+        "regex-role-mapper" => undefined,
+        "regex-principal-transformer" => undefined,
+        "regex-validating-principal-transformer" => undefined,
+        "sasl-authentication-factory" => {
+            "application-sasl-authentication" => {
+                "mechanism-configurations" => [
+                    {
+                        "mechanism-name" => "JBOSS-LOCAL-USER",
+                        "realm-mapper" => "local"
+                    },
+                    {
+                        "mechanism-name" => "DIGEST-MD5",
+                        "mechanism-realm-configurations" => [{"realm-name" => "ApplicationRealm"}]
+                    }
+                ],
+                "sasl-server-factory" => "configured",
+                "security-domain" => "ApplicationDomain"
+            },
+            "management-sasl-authentication" => {
+                "mechanism-configurations" => [
+                    {
+                        "mechanism-name" => "JBOSS-LOCAL-USER",
+                        "realm-mapper" => "local"
+                    },
+                    {
+                        "mechanism-name" => "DIGEST-MD5",
+                        "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
+                    }
+                ],
+                "sasl-server-factory" => "configured",
+                "security-domain" => "ManagementDomain"
+            }
+        },
+        "security-domain" => {
+            "ApplicationDomain" => {
+                "default-realm" => "ApplicationRealm",
+                "outflow-anonymous" => false,
+                "outflow-security-domains" => undefined,
+                "permission-mapper" => "default-permission-mapper",
+                "post-realm-principal-transformer" => undefined,
+                "pre-realm-principal-transformer" => undefined,
+                "principal-decoder" => undefined,
+                "realm-mapper" => undefined,
+                "realms" => [
+                    {
+                        "realm" => "ApplicationRealm",
+                        "role-decoder" => "groups-to-roles"
+                    },
+                    {"realm" => "local"}
+                ],
+                "role-mapper" => undefined,
+                "security-event-listener" => undefined,
+                "trusted-security-domains" => undefined
+            },
+            "ManagementDomain" => {
+                "default-realm" => "ManagementRealm",
+                "outflow-anonymous" => false,
+                "outflow-security-domains" => undefined,
+                "permission-mapper" => "default-permission-mapper",
+                "post-realm-principal-transformer" => undefined,
+                "pre-realm-principal-transformer" => undefined,
+                "principal-decoder" => undefined,
+                "realm-mapper" => undefined,
+                "realms" => [
+                    {
+                        "realm" => "ManagementRealm",
+                        "role-decoder" => "groups-to-roles"
+                    },
+                    {
+                        "realm" => "local",
+                        "role-mapper" => "super-user-mapper"
+                    }
+                ],
+                "role-mapper" => undefined,
+                "security-event-listener" => undefined,
+                "trusted-security-domains" => undefined
+            }
+        },
+        "server-ssl-context" => {
+            "applicationSSC" => {
+                "authentication-optional" => false,
+                "cipher-suite-filter" => "DEFAULT",
+                "cipher-suite-names" => undefined,
+                "final-principal-transformer" => undefined,
+                "key-manager" => "applicationKM",
+                "maximum-session-cache-size" => -1,
+                "need-client-auth" => false,
+                "post-realm-principal-transformer" => undefined,
+                "pre-realm-principal-transformer" => undefined,
+                "protocols" => undefined,
+                "provider-name" => undefined,
+                "providers" => undefined,
+                "realm-mapper" => undefined,
+                "security-domain" => undefined,
+                "session-timeout" => -1,
+                "trust-manager" => undefined,
+                "use-cipher-suites-order" => true,
+                "want-client-auth" => false,
+                "wrap" => false,
+                "ssl-session" => undefined
+            }
+        },
+        "service-loader-http-server-mechanism-factory" => undefined,
+        "service-loader-sasl-server-factory" => undefined,
+        "simple-permission-mapper" => {"default-permission-mapper" => {
+            "mapping-mode" => "first",
+            "permission-mappings" => [
+                {
+                    "principals" => ["anonymous"],
+                    "permission-sets" => [{"permission-set" => "default-permissions"}]
+                },
+                {
+                    "match-all" => true,
+                    "permission-sets" => [
+                        {"permission-set" => "login-permission"},
+                        {"permission-set" => "default-permissions"}
+                    ]
+                }
+            ]
+        }},
+        "simple-regex-realm-mapper" => undefined,
+        "simple-role-decoder" => {"groups-to-roles" => {"attribute" => "groups"}},
+        "size-rotating-file-audit-log" => undefined,
+        "source-address-role-decoder" => undefined,
+        "syslog-audit-log" => undefined,
+        "token-realm" => undefined,
+        "trust-manager" => undefined,
+        "x500-attribute-principal-decoder" => undefined,
+        "x500-subject-evidence-decoder" => undefined,
+        "x509-subject-alt-name-evidence-decoder" => undefined
+    }
+}
+
+
+
+
+

3.4. Default Application Authentication Configuration

+
+

By default, applications are secured using legacy security domains. +Applications must specify a security domain in their web.xml as well +as the authentication method. If no security domain is specified by the +application, WildFly will use the provided other legacy security +domain.

+
+
+

3.4.1. Update WildFly to Use the Default Elytron Components for Application

+
+

Authentication

+
+
+
+
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-http-auth)
+
+
+
+

For more information on configuring an http-authentication-factory, see configure an http-authentication-factory

+
+
+

SSL/TLS

+
+
+

Undertow can be configured to make use of the applicationSSC server SSL context for testing purposes, +as shown below:

+
+
+
+
batch
+/subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
+/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=applicationSSC)
+run-batch
+reload
+
+
+
+

The applicationSSC server SSL context references the applicationKM key manager:

+
+
+
+
/subsystem=elytron/key-manager=applicationKM:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "algorithm" => undefined,
+        "alias-filter" => undefined,
+        "credential-reference" => {"clear-text" => "password"},
+        "generate-self-signed-certificate-host" => "localhost",
+        "key-store" => "applicationKS",
+        "provider-name" => undefined,
+        "providers" => undefined
+    }
+}
+
+
+
+

When the applicationSSC server SSL context is used by Undertow, a self-signed certificate will automatically +be generated the first time the HTTPS interface is accessed if the file that backs the applicationKS key store +doesn’t exist. This self-signed certificate will then be persisted to the file that backs the applicationKS key +store. The generate-self-signed-certificate-host value, localhost, will be used as the Common Name (CN) value +in the generated self-signed certificate. The following messages will appear in the server log file:

+
+
+
+
13:21:39,197 WARN  [org.wildfly.extension.elytron] (MSC service thread 1-6) WFLYELY01083: KeyStore /wildfly/standalone/configuration/application.keystore not found, it will be auto generated on first use with a self-signed certificate for host localhost
+...
+13:39:57,152 WARN  [org.wildfly.extension.elytron] (default task-1) WFLYELY01084: Generated self-signed certificate at /wildfly/dist/target/wildfly-21.0.0.Beta1-SNAPSHOT/standalone/configuration/application.keystore. Please note that self-signed certificates are not secure and should only be used for testing purposes. Do not use this self-signed certificate in production.
+SHA-1 fingerprint of the generated key is fc:16:cf:bf:de:3a:6d:d6:fe:ec:f9:cd:9d:22:c9:3d:43:d7:e3:57
+SHA-256 fingerprint of the generated key is 38:69:00:4e:39:e2:40:e2:ef:b6:95:58:c6:ba:d0:0f:56:c5:7c:5d:fc:d5:c3:b9:b0:94:80:9c:f5:45:9d:40
+
+
+
+

NOTE To disable the automatic self-signed certificate generation, undefine the generate-self-signed-certificate-host +attribute on the applicationKM key manager.

+
+
+

WARNING This self-signed certificate is only intended to be used for testing purposes. This self-signed certificate +should never be used in a production environment. For more information on configuring an ssl-context, +see Configuring a server SSLContext. For more information on how to +easily obtain a signed certificate using the WildFly CLI, see Obtain a signed certificate from Let’s Encrypt.

+
+
+
+

3.4.2. Default Elytron ApplicationDomain Configuration

+
+

The http-authentication-factory can be configured to use the ApplicationDomain +security domain.

+
+
+
+
/subsystem=elytron/security-domain=ApplicationDomain:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "default-realm" => "ApplicationRealm",
+        "permission-mapper" => "default-permission-mapper",
+        "post-realm-principal-transformer" => undefined,
+        "pre-realm-principal-transformer" => undefined,
+        "principal-decoder" => undefined,
+        "realm-mapper" => undefined,
+        "realms" => [{
+            "realm" => "ApplicationRealm",
+            "role-decoder" => "groups-to-roles"
+        }],
+        "role-mapper" => undefined,
+        "trusted-security-domains" => undefined
+    }
+}
+
+
+
+

The ApplicationDomain security domain is backed by the +ApplicationRealm Elytron security realm, which is a properties-based +realm.

+
+
+
+
/subsystem=elytron/properties-realm=ApplicationRealm:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "groups-attribute" => "groups",
+        "groups-properties" => {
+            "path" => "application-roles.properties",
+            "relative-to" => "jboss.server.config.dir"
+        },
+        "users-properties" => {
+            "path" => "application-users.properties",
+            "relative-to" => "jboss.server.config.dir",
+            "digest-realm-name" => "ApplicationRealm"
+        }
+    }
+}
+
+
+
+
+
+

3.5. Default Management Authentication Configuration

+
+

By default, the WildFly management interfaces are secured using WildFly +Elytron capabilities.

+
+
+

3.5.1. Default Elytron Management HTTP Authentication Configuration

+
+

When you access the management interface over HTTP, for example when +using the web-based management console, WildFly will use the +management-http-authentication http-authentication-factory.

+
+
+
+
/subsystem=elytron/http-authentication-factory=management-http-authentication:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "http-server-mechanism-factory" => "global",
+        "mechanism-configurations" => [{
+            "mechanism-name" => "DIGEST",
+            "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
+        }],
+        "security-domain" => "ManagementDomain"
+    }
+}
+
+
+
+

The management-http-authentication http-authentication-factory, is +configured to use the ManagementDomain security domain.

+
+
+
+
/subsystem=elytron/security-domain=ManagementDomain:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "default-realm" => "ManagementRealm",
+        "outflow-anonymous" => false,
+        "outflow-security-domains" => undefined,
+        "permission-mapper" => "default-permission-mapper",
+        "post-realm-principal-transformer" => undefined,
+        "pre-realm-principal-transformer" => undefined,
+        "principal-decoder" => undefined,
+        "realm-mapper" => undefined,
+        "realms" => [
+            {
+                "realm" => "ManagementRealm",
+                "role-decoder" => "groups-to-roles"
+            },
+            {
+                "realm" => "local",
+                "role-mapper" => "super-user-mapper"
+            }
+        ],
+        "role-mapper" => undefined,
+        "security-event-listener" => undefined,
+        "trusted-security-domains" => undefined
+    }
+}
+
+
+
+

The ManagementDomain security domain is backed by the +ManagementRealm Elytron security realm, which is a properties-based +realm.

+
+
+
+
/subsystem=elytron/properties-realm=ManagementRealm:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "groups-attribute" => "groups",
+        "groups-properties" => {
+            "path" => "mgmt-groups.properties",
+            "relative-to" => "jboss.server.config.dir"
+        },
+        "plain-text" => false,
+        "users-properties" => {
+            "path" => "mgmt-users.properties",
+            "relative-to" => "jboss.server.config.dir",
+            "digest-realm-name" => "ManagementRealm"
+        }
+    }
+}
+
+
+
+
+

3.5.2. Default Elytron Management CLI Authentication

+
+

By default, the management CLI ( jboss-cli.sh) is configured to +connect over remote+http.

+
+
+

Default jboss-cli.xml

+
+
+
+
<jboss-cli xmlns="urn:jboss:cli:3.3">
+ 
+    <default-protocol use-legacy-override="true">remote+http</default-protocol>
+ 
+    <!-- The default controller to connect to when 'connect' command is executed w/o arguments -->
+    <default-controller>
+        <protocol>remote+http</protocol>
+        <host>localhost</host>
+        <port>9990</port>
+    </default-controller>
+
+
+
+

This will establish a connection over HTTP and use HTTP upgrade to +change the communication protocol to native. The HTTP upgrade +connection is secured in the http-upgrade section of the +http-interface using a sasl-authentication-factory.

+
+
+

Example Configuration with Default Components

+
+
+
+
/core-service=management/management-interface=http-interface:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "allowed-origins" => undefined,
+        "console-enabled" => true,
+        "http-authentication-factory" => "management-http-authentication",
+        "http-upgrade" => {
+            "enabled" => true,
+            "sasl-authentication-factory" => "management-sasl-authentication"
+        },
+        "http-upgrade-enabled" => true,
+        "sasl-protocol" => "remote",
+        "secure-socket-binding" => undefined,
+        "security-realm" => undefined,
+        "server-name" => undefined,
+        "socket-binding" => "management-http",
+        "ssl-context" => undefined
+    }
+}
+
+
+
+

The default sasl-authentication-factory is +management-sasl-authentication.

+
+
+
+
/subsystem=elytron/sasl-authentication-factory=management-sasl-authentication:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "mechanism-configurations" => [
+            {
+                "mechanism-name" => "JBOSS-LOCAL-USER",
+                "realm-mapper" => "local"
+            },
+            {
+                "mechanism-name" => "DIGEST-MD5",
+                "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
+            }
+        ],
+        "sasl-server-factory" => "configured",
+        "security-domain" => "ManagementDomain"
+    }
+}
+
+
+
+

The management-sasl-authentication sasl-authentication-factory +specifies JBOSS-LOCAL-USER and DIGEST-MD5 mechanisms.

+
+
+

JBOSS-LOCAL-USER Realm

+
+
+
+
/subsystem=elytron/identity-realm=local:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "attribute-name" => undefined,
+        "attribute-values" => undefined,
+        "identity" => "$local"
+    }
+}
+
+
+
+

The local Elytron security realm is for handling silent authentication +for local users.

+
+
+

The ManagementRealm Elytron security realm is the same realm used in +the management-http-authentication http-authentication-factory.

+
+
+
+
+

3.6. Comparing Legacy Approaches to Elytron Approaches

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Legacy ApproachElytron Approach

UsersRoles Login Module

Configure Authentication with a Properties +File-Based Identity Store

Database Login Module

Configure Authentication with a Database +Identity Store

Ldap, LdapExtended, AdvancedLdap, AdvancedADLdap Login Modules

Configure Authentication with an LDAP-Based Identity Store

Certificate, Certificate Roles Login Module

Configure Authentication +with Certificates

Kerberos, SPNEGO Login Modules

Configure Authentication with a +Kerberos-Based Identity Store

Kerberos, SPNEGO Login Modules with Fallback

Configure Authentication +with a Form as a Fallback for Kerberos

RoleMapping Login Module

Configure Authentication +with a Mapped Role Mapper

Vault

Create and Use a Credential Store

Legacy Security Realms

Secure the Management Interfaces with a New +Identity Store, Silent Authentication

RBAC

Using RBAC with Elytron

Legacy Security Realms for One-way and Two-way SSL/TLS for Applications

Enable One-way SSL/TLS for Applications, Enable Two-way SSL/TLS in +WildFly for Applications

Legacy Security Realms for One-way and Two-way SSL/TLS for Management +Interfaces

Enable One-way for the Management Interfaces Using the +Elytron Subsystem, Enable Two-way SSL/TLS for the Management Interfaces +using the Elytron Subsystem

+
+
+
+
+

4. Using the Elytron Subsystem

+
+
+

4.1. Set Up and Configure Authentication for Applications

+
+

4.1.1. Configure Authentication with a Properties File-Based Identity Store

+
+
Create properties files:
+
+

You need to create two properties files: one that maps user to passwords +and another that maps users to roles. Usually these files are located in +the jboss.server.config.dir directory and follow the naming convention +*-users.properties and *-roles.properties, but other locations and +names may be used. The *-users.properties file must also contain a +reference to the properties-realm, which you will create in the next +step: #$REALM_NAME=YOUR_PROPERTIES_REALM_NAME$

+
+
+

Example user to password file: example-users.properties

+
+
+
+
#$REALM_NAME=examplePropRealm$
+user1=password123
+user2=password123
+
+
+
+

Example user to roles file: example-roles.properties

+
+
+
+
user1=Admin
+user2=Guest
+
+
+
+

The Properties Realm also supports storing hashed passwords in the properties +files, namely DIGEST passwords. Learn how to specify the encoding and character set for these passwords +in the next section.

+
+
+
+
Configure a properties-realm in WildFly:
+
+
+
/subsystem=elytron/properties-realm=examplePropRealm:add(groups-attribute=groups,groups-properties={path=example-roles.properties,relative-to=jboss.server.config.dir},users-properties={path=example-users.properties,relative-to=jboss.server.config.dir,plain-text=true})
+
+
+
+

The name of the properties-realm is examplePropRealm, which is used +in the previous step in the example-users.properties file. Also, if +your properties files are located outside of jboss.server.config.dir, +then you need to change the path and relative-to values +appropriately.

+
+
+

Additionally, if storing hashed passwords in the properties file, you can specify the following +attributes:

+
+
+
    +
  • +

    hash-encoding: This attribute specifies the string format for the password if it is not stored in plain +text. It is set to hex encoding by default, but base64 is also supported.

    +
  • +
  • +

    hash-charset: This attribute specifies the character set to use when converting the password string to a +byte array. It is set to UTF-8 by default.

    +
  • +
+
+
+

For example, the following properties realm is configured to use base64 encoding and the character set +GB2312.

+
+
+
+
/subsystem=elytron/properties-realm=examplePropRealm:add(groups-attribute=groups,groups-properties={path=example-roles.properties,relative-to=jboss.server.config.dir},users-properties={path=example-users.properties,relative-to=jboss.server.config.dir},hash-encoding=base64,hash-charset=GB2312)
+
+
+
+
+
Configure a security-domain:
+
+
+
/subsystem=elytron/security-domain=exampleSD:add(realms=[{realm=examplePropRealm,role-decoder=groups-to-roles}],default-realm=examplePropRealm,permission-mapper=default-permission-mapper)
+
+
+
+
+
Configure an http-authentication-factory:
+
+
+
/subsystem=elytron/http-authentication-factory=example-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleSD,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])
+
+
+
+

This example shows creating an http-authentication-factory using +BASIC authentication, but it could be updated to other mechanisms such +as FORM.

+
+
+
+
Configure an application-security-domain in the Undertow subsystem:
+
+
+
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-http-auth)
+
+
+
+
+
Configure your application’s web.xml and jboss-web.xml.
+
+

Your application’s web.xml and jboss-web.xml must be updated to use +the application-security-domain you configured in WildFly. An example +of this is available in the +Configure Applications to Use Elytron for Authentication +section.

+
+
+
+
+

4.1.2. Configure Authentication with a Filesystem-Based Identity Store

+
+
Chose a directory for users:
+
+

You need a directory where your users will be stored. In this example, +we are using a directory called fs-realm-users located in +jboss.server.config.dir.

+
+
+
+
Configure a filesystem-realm in WildFly:
+
+
+
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir)
+
+
+
+

If your directory is located outside of jboss.server.config.dir, then +you need to change the path and relative-to values appropriately.

+
+
+
+
Encryption
+
+

To enable encryption for a filesystem-realm, there are a couple of attributes that can be configured.

+
+
+
    +
  • +

    credential-store: This attribute specifies the credential-store where the secret key used for encrypting and decrypting the realm is stored.

    +
  • +
  • +

    secret-key: This attribute specifies the alias within the credential-store that contains the secret key to be used to encrypt and decrypt the realm.

    +
  • +
+
+
+

As an example, to create a credential-store that is automatically populated with a SecretKey under the alias key, the following command can be used:

+
+
+
+
/subsystem=elytron/secret-key-credential-store=mycredstore:add(path=propcredstore.cs, relative-to=jboss.server.config.dir, create=true, populate=true)
+
+
+
+

An encrypted filesystem-realm that makes use of the credential-store could be then created as follows:

+
+
+
+
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir, credential-store=mycredstore, secret-key=key)
+
+
+
+
+
Integrity
+
+

It is also possible to enable support for integrity checking on the filesystem realm by configuring the key-store and key-store-alias attributes for the realm.

+
+
+

When enabling integrity checking on a filesystem realm, you will have to specify the following 2 attributes

+
+
+
    +
  • +

    key-store: This attribute specifies the key-store that contains the key pair (private key and public key) that’s used for signing each identity file and for integrity checking.

    +
  • +
  • +

    key-store-alias: This attribute specifies the alias within the key-store that identifies the PrivateKeyEntry to use to sign identity files and perform filesystem integrity checks.

    +
  • +
+
+
+

To create a key-store and a key-pair for the attributes above, you can create a key-store resource using the following commands. This will create a key-store called keystore with the alias localhost, and the password secret.

+
+
+
+
/subsystem=elytron/key-store=keystore:add(path=keystore, relative-to=jboss.server.config.dir, type=PKCS12, credential-reference={clear-text=secret})
+/subsystem=elytron/key-store=keystore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=1024,validity=365,distinguished-name="CN=localhost")
+/subsystem=elytron/key-store=keystore:store()
+
+
+
+

To create an integrity enabled filesystem realm with a key-store called keystore and the key-store-alias localhost, the following command would be used

+
+
+
+
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir, key-store=keystore, key-store-alias=localhost)
+
+
+
+

Integrity and Encryption can be used in conjuction together. To create an encrypted filesystem realm with integrity enabled, the following command would be used

+
+
+
+
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir, credential-store=mycredstore, secret-key=key, key-store=keystore, key-store-alias=localhost)
+
+
+
+
+
Add a user:
+
+

When using the filesystem-realm, you can add users using the +management CLI.

+
+
+
+
/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=user1)
+/subsystem=elytron/filesystem-realm=exampleFsRealm:set-password(clear={password="password123"}, identity=user1)
+/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=user1, name=Roles, value=["Admin","Guest"])
+
+
+
+
+
Add a simple-role-decoder:
+
+
+
/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
+
+
+
+

This simple-role-decoder decodes a principal’s roles from the Roles +attribute. You can change this value if your roles are in a different +attribute.

+
+
+
+
Configure a security-domain:
+
+
+
/subsystem=elytron/security-domain=exampleFsSD:add(realms=[{realm=exampleFsRealm,role-decoder=from-roles-attribute}],default-realm=exampleFsRealm,permission-mapper=default-permission-mapper)
+
+
+
+
+
Configure an http-authentication-factory:
+
+
+
/subsystem=elytron/http-authentication-factory=example-fs-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleFsSD,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])
+
+
+
+

This example shows creating an http-authentication-factory using +BASIC authentication, but it could be updated to other mechanisms such +as FORM.

+
+
+
+
Configure an application-security-domain in the Undertow subsystem:
+
+
+
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-fs-http-auth)
+
+
+
+
+
Configure your application’s web.xml and jboss-web.xml.
+
+

Your application’s web.xml and jboss-web.xml must be updated to use +the application-security-domain you configured in WildFly. An example +of this is available in the +Configure Applications to Use Elytron for Authentication +section.

+
+
+

Your application is now using a filesystem-based identity store for +authentication.

+
+
+
+
+

4.1.3. Configure Authentication with a Database Identity Store

+
+
Determine your database format for usernames, passwords, and roles:
+
+

To set up authentication using a database for an identity store, you +need to determine how your usernames, passwords, and roles are stored in +that database. In this example, we are using a single table with the +following sample data:

+
+ +++++ + + + + + + + + + + + + + + + + + + + +
usernamepasswordroles

user1

password123

Admin

user2

password123

Guest

+
+
+
Configure a datasource:
+
+

To connect to a database from WildFly, you must have the appropriate +database driver deployed as well as a datasource configured. This +example shows deploying the driver for postgres and configuring a +datasource in WildFly:

+
+
+
+
deploy /path/to/postgresql-9.4.1210.jar
+ 
+data-source add --name=examplePostgresDS --jndi-name=java:jboss/examplePostgresDS --driver-name=postgresql-9.4.1210.jar  --connection-url=jdbc:postgresql://localhost:5432/postgresdb --user-name=postgresAdmin --password=mysecretpassword
+
+
+
+
+
Configure a jdbc-realm in WildFly:
+
+
+
/subsystem=elytron/jdbc-realm=exampleDbRealm:add(principal-query=[{sql="SELECT password,roles FROM wildfly_users WHERE username=?",data-source=examplePostgresDS,clear-password-mapper={password-index=1},attribute-mapping=[{index=2,to=groups}]}])
+
+
+
+

NOTE: The above example shows how to obtain passwords and roles from a +single principal-query. You can also create additional +principal-query with attribute-mapping attributes if you require +multiple queries to obtain roles or additional authentication or +authorization information.

+
+
+
+
Configure a security-domain:
+
+
+
/subsystem=elytron/security-domain=exampleDbSD:add(realms=[{realm=exampleDbRealm,role-decoder=groups-to-roles}],default-realm=exampleDbRealm,permission-mapper=default-permission-mapper)
+
+
+
+
+
Configure an http-authentication-factory:
+
+
+
/subsystem=elytron/http-authentication-factory=example-db-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleDbSD,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=exampleDbSD}]}])
+
+
+
+

This example shows creating an http-authentication-factory using +BASIC authentication, but it could be updated to other mechanisms such +as FORM.

+
+
+
+
Configure an application-security-domain in the Undertow subsystem:
+
+
+
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-db-http-auth)
+
+
+
+
+
Configure your application’s web.xml and jboss-web.xml.
+
+

Your application’s web.xml and jboss-web.xml must be updated to use +the application-security-domain you configured in WildFly. An example +of this is available in the +Configure Applications to Use Elytron for Authentication +section.

+
+
+
+
+

4.1.4. Configure Authentication with an LDAP-Based Identity Store

+
+
Determine your LDAP format for usernames, passwords, and roles:
+
+

To set up authentication using an LDAP server for an identity store, you +need to determine how your usernames, passwords, and roles are stored. +In this example, we are using the following structure:

+
+
+
+
dn: dc=wildfly,dc=org
+dc: wildfly
+objectClass: top
+objectClass: domain
+ 
+dn: ou=Users,dc=wildfly,dc=org
+objectClass: organizationalUnit
+objectClass: top
+ou: Users
+ 
+dn: uid=jsmith,ou=Users,dc=wildfly,dc=org
+objectClass: top
+objectClass: person
+objectClass: inetOrgPerson
+cn: John Smith
+sn: smith
+uid: jsmith
+userPassword: password123
+ 
+dn: ou=Roles,dc=wildfly,dc=org
+objectclass: top
+objectclass: organizationalUnit
+ou: Roles
+ 
+dn: cn=Admin,ou=Roles,dc=wildfly,dc=org
+objectClass: top
+objectClass: groupOfNames
+cn: Admin
+member: uid=jsmith,ou=Users,dc=wildfly,dc=org
+
+
+
+
+
Configure a dir-context:
+
+

To connect to the LDAP server from WildFly, you need to configure a +dir-context that provides the URL as well as the principal used to +connect to the server.

+
+
+
+
/subsystem=elytron/dir-context=exampleDC:add(url="ldap://127.0.0.1:10389",principal="uid=admin,ou=system",credential-reference={clear-text="secret"})
+
+
+
+
+
Configure an ldap-realm in WildFly:
+
+
+
/subsystem=elytron/ldap-realm=exampleLR:add(dir-context=exampleDC,identity-mapping={search-base-dn="ou=Users,dc=wildfly,dc=org",rdn-identifier="uid",user-password-mapper={from="userPassword"},attribute-mapping=[{filter-base-dn="ou=Roles,dc=wildfly,dc=org",filter="(&(objectClass=groupOfNames)(member={1}))",from="cn",to="Roles"}]})
+
+
+
+

Additionally, if storing hashed passwords in the LDIF file, you can specify the following +attributes:

+
+
+
    +
  • +

    hash-encoding: This attribute specifies the string format for the password if it is not stored in plain +text. It is set to base64 encoding by default, but hex is also supported.

    +
  • +
  • +

    hash-charset: This attribute specifies the character set to use when converting the password string to a +byte array. It is set to UTF-8 by default.

    +
  • +
+
+
+

For example, the following LDAP realm is storing hexadecimal encoded strings hashed using the GB2312 character set:

+
+
+
+
/subsystem=elytron/ldap-realm=exampleLR:add(dir-context=exampleDC,identity-mapping={...},hash-encoding=hex,hash-charset=GB2312)
+
+
+
+
+
Add a simple-role-decoder:
+
+
+
/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
+
+
+
+
+
Configure a security-domain:
+
+
+
/subsystem=elytron/security-domain=exampleLdapSD:add(realms=[{realm=exampleLR,role-decoder=from-roles-attribute}],default-realm=exampleLR,permission-mapper=default-permission-mapper)
+
+
+
+
+
Configure an http-authentication-factory:
+
+
+
/subsystem=elytron/http-authentication-factory=example-ldap-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleLdapSD,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])
+
+
+
+

This example shows creating an http-authentication-factory using +BASIC authentication, but it could be updated to other mechanisms such +as FORM.

+
+
+
+
Configure an application-security-domain in the Undertow subsystem:
+
+
+
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-ldap-http-auth)
+
+
+
+
+
Configure your application’s web.xml and jboss-web.xml.
+
+

Your application’s web.xml and jboss-web.xml must be updated to use +the application-security-domain you configured in WildFly. An example +of this is available in the +Configure Applications to Use Elytron for Authentication +section.

+
+
+

IMPORTANT: In cases where you configure an LDAP server in the +elytron subsystem for authentication and that LDAP server then becomes +unreachable, WildFly will return a 500, or internal server error, +error code when attempting authentication using that unreachable LDAP +server. This behavior differs from the legacy security subsystem, +which will return a 401, or unauthorized, error code under the same +conditions.

+
+
+
+
+

4.1.5. Configure Authentication with Certificates

+
+

IMPORTANT: Before you can set up certificate-based authentication, you +must have two-way SSL configured.

+
+
+
Configure a key-store-realm.
+
+
+
/subsystem=elytron/key-store-realm=ksRealm:add(key-store=twoWayTS)
+
+
+
+

You must configure this realm with a truststore that contains the +client’s certificate. The authentication process uses the same +certificate presented by the client during the two-way SSL handshake.

+
+
+
+
Create a Decoder.
+
+

You need to create a x500-attribute-principal-decoder to decode the +principal you get from your certificate. The below example will decode +the principal based on the first CN value.

+
+
+
+
/subsystem=elytron/x500-attribute-principal-decoder=CNDecoder:add(oid="2.5.4.3",maximum-segments=1)
+
+
+
+

For example, if the full DN was +CN=client,CN=client-certificate,DC=example,DC=jboss,DC=org, +CNDecoder would decode the principal as client. This decoded +principal is used as the alias value to lookup a certificate in the +truststore configured in ksRealm.

+
+
+

IMPORTANT: The decoded principal * MUST* must be the alias value +you set in your server’s truststore for the client’s certificate.

+
+
+
+
Configure an evidence-decoder
+
+

By default, the principal associated with a certificate will be the subject name +from the certificate. This subject name will then be rewritten using any configured +principal decoders and principal transformers to obtain the name that should be used +when locating and loading the identity from the underlying identity store.

+
+
+

To specify that a subject alternative name from a certificate should be used as the +principal associated with that certificate, an x509-subject-alt-name-evidence-decoder +needs to be configured. This element has two attributes:

+
+
+
    +
  • +

    alt-name-type - The subject alternative name type to decode. This attribute is +required. Must be one of the subject alternative name types that can be represented +as a String:

    +
    +
      +
    • +

      rfc822Name

      +
    • +
    • +

      dNSName

      +
    • +
    • +

      uniformResourceIdentifier

      +
    • +
    • +

      iPAddress

      +
    • +
    • +

      registeredID

      +
    • +
    • +

      directoryName

      +
    • +
    +
    +
  • +
  • +

    segment - The 0-based occurrence of the subject alternative name to map. This +attribute is optional and only used when there is more than one subject alternative +name of the given alt-name-type. The default value is 0.

    +
  • +
+
+
+

For example, consider the following X.509 v3 Subject Alternative Name extension from +the first certificate in an X.509 certificate chain:

+
+
+
+
X509v3 Subject Alternative Name:
+DNS:one.example.org, IP Address:127.0.0.1
+
+
+
+

To associate the certificate chain evidence with the principal "one.example.org", the +following x509-subject-alt-name-evidence-decoder could be configured:

+
+
+
+
/subsystem=elytron/x509-subject-alt-name-evidence-decoder=exampleDnsDecoder:add(alt-name-type=dNSName)
+
+
+
+

Next, consider the following X.509 v3 Subject Alternative Name extension from the first +certificate in an X.509 certificate chain:

+
+
+
+
X509v3 Subject Alternative Name:
+DNS:one.example.org, DNS:two.example.org, IP Address:127.0.0.1
+
+
+
+

To associate the evidence with the principal "two.example.org", the following +x509-subject-alt-name-evidence-decoder could be configured:

+
+
+
+
/subsystem=elytron/x509-subject-alt-name-evidence-decoder=anotherDnsDecoder:add(alt-name-type=dNSName, segment=1)
+
+
+
+

It is also possible to configure an x500-subject-evidence-decoder. This evidence decoder +will extract the subject from the first certificate in the certificate chain, as an X500Principal. +Example configuration:

+
+
+
+
/subsystem=elytron/x500-subject-evidence-decoder=exampleSubjectDecoder:add()
+
+
+
+

To make use of a custom org.wildfly.security.auth.server.EvidenceDecoder implementation, a +custom-evidence-decoder can be configured. The custom implementation class needs to first be +packaged in a JAR. A module can then be added to WildFly that contains this JAR. See +Custom Components for more information on how to add a custom Elytron +component to WildFly.

+
+
+

Example configuration:

+
+
+
+
/subsystem=elytron/custom-evidence-decoder=myCustomEvidenceDecoder:add(module=org.wildfly.security.examples, class-name=org.wildfly.security.examples.MyCustomEvidenceDecoder)
+
+
+
+

Finally, it is also possible to configure an aggregate-evidence-decoder. This consists of +two or more evidence-decoder elements where each element is reference to a configured +evidence decoder. Given evidence, these evidence decoders will be attempted in order until +one returns a non-null principal or until there are no more evidence decoders left to try.

+
+
+

Example configuration:

+
+
+
+
/subsystem=elytron/x509-subject-alt-name-evidence-decoder=emailDecoder:add(alt-name-type=rfc822Name)
+/subsystem=elytron/x509-subject-alt-name-evidence-decoder=dnsDecoder:add(alt-name-type=dNSName)
+/subsystem=elytron/x500-subject-evidence-decoder=subjectDecoder:add()
+/subsystem=elytron/aggregate-evidence-decoder=aggregateDecoder:add(evidence-decoders=[emailDecoder,subjectDecoder,dnsDecoder])
+
+
+
+

Once an evidence-decoder has been configured, it can be referenced from a security-domain:

+
+
+
+
/subsystem=elytron/security-domain=exampleCertSD:add(..., evidence-decoder=aggregateDecoder)
+
+
+
+

If no evidence-decoder is specified for a security-domain, then the principal associated with the evidence will +just be the default principal for the evidence type, i.e., for an X.509 certificate chain, this would continue to +default to the subject from the first certificate in the certificate chain.

+
+
+
+
Add a constant-role-mapper for assigning roles.
+
+

This is example uses a constant-role-mapper to assign roles to a +principal from ksRealm but other approaches may also be used.

+
+
+
+
/subsystem=elytron/constant-role-mapper=constantClientCertRole:add(roles=[Admin,Guest])
+
+
+
+
+
Configure a security-domain.
+
+
+
/subsystem=elytron/security-domain=exampleCertSD:add(realms=[{realm=ksRealm}],default-realm=ksRealm,permission-mapper=default-permission-mapper,principal-decoder=CNDecoder,role-mapper=constantClientCertRole)
+
+
+
+
+
Configure an http-authentication-factory.
+
+
+
/subsystem=elytron/http-authentication-factory=exampleCertHttpAuth:add(http-server-mechanism-factory=global,security-domain=exampleCertSD,mechanism-configurations=[{mechanism-name=CLIENT_CERT,mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])
+
+
+
+
+
Configure an application-security-domain in the Undertow subsystem.
+
+
+
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=exampleCertHttpAuth)
+
+
+
+
+
Update server-ssl-context.
+
+
+
/subsystem=elytron/server-ssl-context=twoWaySSC:write-attribute(name=security-domain,value=exampleCertSD)
+/subsystem=elytron/server-ssl-context=twoWaySSC:write-attribute(name=authentication-optional, value=true)
+
+
+
+
+
Configure your application’s web.xml and jboss-web.xml.
+
+

Your application’s web.xml and jboss-web.xml must be updated to use +the application-security-domain you configured in WildFly. An example +of this is available in the +Configure Applications to Use Elytron for Authentication +section.

+
+
+

In addition, you need to update your web.xml to use CLIENT-CERT as +its authentication method.

+
+
+
+
<login-config>
+  <auth-method>CLIENT-CERT</auth-method>
+  <realm-name>exampleApplicationDomain</realm-name>
+</login-config>
+
+
+
+
+
+

4.1.6. Configure Authentication with a Kerberos-Based Identity Store

+
+

IMPORTANT: The following steps assume you have a working KDC and +Kerberos domain as well as your client browsers configured.

+
+
+
Configure a kerberos-security-factory.
+
+
+
/subsystem=elytron/kerberos-security-factory=krbSF:add(principal="HTTP/host@REALM",path="/path/to/http.keytab",mechanism-oids=[1.2.840.113554.1.2.2,1.3.6.1.5.5.2])
+
+
+
+
+
Configure the system properties for Kerberos.
+
+

Depending on how your environment is configured, you will need to set +some of the system properties below.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
System PropertyDescription

java.security.krb5.kdc

The host name of the KDC.

java.security.krb5.realm

The name of the realm.

java.security.krb5.conf

The path to the configuration krb5.conf file.

sun.security.krb5.debug

If true, debugging mode will be enabled.

+
+

To configure a system property in WildFly:

+
+
+
+
/system-property=java.security.krb5.conf:add(value="/path/to/krb5.conf")
+
+
+
+
+
Configure an Elytron security realm for assigning roles.
+
+

The the client’s Kerberos token will provide the principal, but you need +a way to map that principal to a role for your application. There are +several ways to accomplish this, but this example creates a +filesystem-realm, adds a user to the realm that matches the principal +from the Kerberos token, and assigns roles to that user.

+
+
+
+
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir)
+/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=user1@REALM)
+/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=user1@REALM,name=Roles,value=["Admin","Guest"])
+
+
+
+
+
Add a simple-role-decoder.
+
+
+
/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
+
+
+
+

This simple-role-decoder decodes a principal’s roles from the Roles +attribute. You can change this value if your roles are in a different +attribute.

+
+
+
+
Configure a security-domain.
+
+
+
/subsystem=elytron/security-domain=exampleFsSD:add(realms=[{realm=exampleFsRealm,role-decoder=from-roles-attribute}],default-realm=exampleFsRealm,permission-mapper=default-permission-mapper)
+
+
+
+
+
Configure an http-authentication-factory that uses the
+
+

kerberos-security-factory.

+
+
+
+
/subsystem=elytron/http-authentication-factory=example-krb-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleFsSD,mechanism-configurations=[{mechanism-name=SPNEGO,mechanism-realm-configurations=[{realm-name=exampleFsSD}],credential-security-factory=krbSF}])
+
+
+
+
+
Configure an application-security-domain in the Undertow subsystem:
+
+
+
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-krb-http-auth)
+
+
+
+
+
Configure your application’s web.xml, jboss-web.xml and
+
+

jboss-deployment-structure.xml.

+
+
+

Your application’s web.xml and jboss-web.xml must be updated to use +the application-security-domain you configured in WildFly. An example +of this is available in the +Configure Applications to Use Elytron for Authentication +section.

+
+
+

In addition, you need to update your web.xml to use SPNEGO as its +authentication method.

+
+
+
+
<login-config>
+  <auth-method>SPNEGO</auth-method>
+  <realm-name>exampleApplicationDomain</realm-name>
+</login-config>
+
+
+
+
+
+

4.1.7. Configure Authentication with a Form as a Fallback for Kerberos

+
+
Configure kerberos-based authentication.
+
+

Configuring kerberos-based authentication is covered in a previous +section.

+
+
+
+
Add a mechanism for FORM authentication in the
+
+

http-authentication-factory.

+
+
+

You can use the existing http-authentication-factory you configured +for kerberos-based authentication and and an additional mechanism for +FORM authentication.

+
+
+
+
/subsystem=elytron/http-authentication-factory=example-krb-http-auth:list-add(name=mechanism-configurations, value={mechanism-name=FORM})
+
+
+
+
+
Add additional fallback principals.
+
+

The existing configuration for kerberos-based authentication should +already have a security realm configured for mapping principals from +kerberos token to roles for the application. You can add additional +users for fallback authentication to that realm. For example if you used +a filesystem-realm, you can simply create a new user with the +appropriate roles:

+
+
+
+
/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=fallbackUser1)
+/subsystem=elytron/filesystem-realm=exampleFsRealm:set-password(identity=fallbackUser1,clear={password="password123"})
+/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=fallbackUser1,name=Roles,value=["Admin","Guest"])
+
+
+
+
+
Update the web.xml for FORM fallback.
+
+

You need to update the web.xml to use the value SPNEGO,FORM for the +auth-method, which will use FORM as a fallback authentication method +if SPNEGO fails. You also need to specify the location of your login +and error pages.

+
+
+
+
<login-config>
+  <auth-method>SPNEGO,FORM</auth-method>
+  <realm-name>exampleApplicationDomain</realm-name>
+  <form-login-config>
+    <form-login-page>/login.jsp</form-login-page>
+    <form-error-page>/error.jsp</form-error-page>
+  </form-login-config>
+</login-config>
+
+
+
+
+
+

4.1.8. Configure Applications to Use Elytron for Authentication

+
+

After you have configured the elytron subsystem +for authentication, you need to configure your application to use it.

+
+
+
Configure your application’s web.xml.
+
+

Your application’s web.xml needs to be configured to use the +appropriate authentication method. When using elytron, this is defined +in the http-authentication-factory you created.

+
+
+

Example web.xml with BASIC Authentication

+
+
+
+
<web-app>
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>secure</web-resource-name>
+      <url-pattern>/secure/*</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+      <role-name>Admin</role-name>
+    </auth-constraint>
+  </security-constraint>
+  <security-role>
+    <description>The role that is required to log in to /secure/*</description>
+    <role-name>Admin</role-name>
+  </security-role>
+  <login-config>
+    <auth-method>BASIC</auth-method>
+    <realm-name>exampleApplicationDomain</realm-name>
+  </login-config>
+</web-app>
+
+
+
+

BASIC Authentication can be configured to be silent

+
+
+
+
<auth-method>BASIC?silent=true</auth-method>
+
+
+
+

Basic authentication in silent mode will send challenge to authenticate only if the request +contained authorization header, otherwise it is assumed another method will send the challenge.

+
+
+
+
Configure your application to use a security domain.
+
+

You can configure your application’s jboss-web.xml to specify the +security domain you want to use for authentication. When using the +elytron subsystem, this is defined when you created the +application-security-domain.

+
+
+

Example jboss-web.xml

+
+
+
+
<jboss-web>
+  <security-domain>exampleApplicationDomain</security-domain>
+</jboss-web>
+
+
+
+

Using jboss-web.xml allows you to configure the security domain for a +single application only. Alternatively, you can specify a default +security domain for all applications using the undertow subsystem. +This allows you to omit using jboss-web.xml to configure a security +domain for an individual application.

+
+
+
+
/subsystem=undertow:write-attribute(name=default-security-domain, value="exampleApplicationDomain")
+
+
+
+

IMPORTANT: Setting default-security-domain in the undertow +subsystem will apply to ALL applications. If default-security-domain +is set and an application specifies a security domain in a +jboss-web.xml file, the configuration in jboss-web.xml will override +the default-security-domain in the undertow subsystem.

+
+
+
+
+

4.1.9. Override an Application’s Authentication Configuration

+
+

You can override the authentication configuration of an application with +one configured in WildFly. To do this, use the +override-deployment-configuration property in the +application-security-domain section of the undertow subsystem:

+
+
+
+
/subsystem=undertow/application-security-domain=exampleApplicationDomain:write-attribute(name=override-deployment-config,value=true)
+
+
+
+

For example, an application is configured to use FORM authentication +with the exampleApplicationDomain in its jboss-web.xml.

+
+
+

Example jboss-web.xml

+
+
+
+
<login-config>
+  <auth-method>FORM</auth-method>
+  <realm-name>exampleApplicationDomain</realm-name>
+</login-config>
+
+
+
+

By enabling override-deployment-configuration, you can create a new +http-authentication-factory that specifies a different authentication +mechanism such as BASIC.

+
+
+

Example http-authentication-factory

+
+
+
+
/subsystem=elytron/http-authentication-factory=exampleHttpAuth:read-resource()
+{
+    "outcome" => "success",
+    "result" => {
+        "http-server-mechanism-factory" => "global",
+        "mechanism-configurations" => [{
+            "mechanism-name" => "BASIC",
+            "mechanism-realm-configurations" => [{"realm-name" => "exampleApplicationDomain"}]
+        }],
+        "security-domain" => "exampleSD"
+    }
+}
+
+
+
+

This will override the authentication mechanism defined in the +application’s jboss-web.xml and attempt to authenticate a user using +BASIC instead of FORM.

+
+
+
+

4.1.10. Create and Use a Credential Store

+
+
Create credential store.
+
+
+
/subsystem=elytron/credential-store=exampleCS:add(relative-to=jboss.server.data.dir, location=example.jceks,create=true,credential-reference={clear-text=cs-secret})
+
+
+
+
+
Add a credential to a credential store.
+
+
+
/subsystem=elytron/credential-store=exampleCS:add-alias(alias=keystorepw,secret-value=secret)
+
+
+
+
+
List all credentials in a credential store.
+
+
+
/subsystem=elytron/credential-store=exampleCS:read-aliases()
+{
+    "outcome" => "success",
+    "result" => ["keystorepw"]
+}
+
+
+
+
+
Remove a credential from a credential store.
+
+
+
/subsystem=elytron/credential-store=exampleCS:remove-alias(alias=keystorepw)
+
+
+
+
+
Use a credential store.
+
+
+
/subsystem=elytron/key-store=twoWayKS:write-attribute(name=credential-reference,value={store=exampleCS,alias=keystorepw})
+
+
+
+
+
+
+

4.2. Set up and Configure Authentication for the Management Interfaces

+
+

4.2.1. Secure the Management Interfaces with a New Identity Store

+
+
Create a security domain and any supporting security realms,
+
+

decoders, or mappers for your identity store.

+
+
+

This process is covered in a previous section. For example, if you +wanted to secure the management interfaces using a filesystem-based +identity store, you would follow the steps in +Configure +Authentication with a Filesystem-Based Identity Store.

+
+
+
+
Create an http-authentication-factory or
+
+

sasl-authentication-factory.

+
+
+

Example http-authentication-factory

+
+
+
+
/subsystem=elytron/http-authentication-factory=example-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleSD,mechanism-configurations=[{mechanism-name=DIGEST,mechanism-realm-configurations=[{realm-name=exampleManagementRealm}]}])
+
+
+
+

Example sasl-authentication-factory

+
+
+
+
/subsystem=elytron/sasl-authentication-factory=example-sasl-auth:add(sasl-server-factory=configured,security-domain=exampleSD,mechanism-configurations=[{mechanism-name=DIGEST-MD5,mechanism-realm-configurations=[{realm-name=exampleManagementRealm}]}])
+
+
+
+
+
Update the management interfaces to use your
+
+

http-authentication-factory or sasl-authentication-factory.

+
+
+

Example update http-authentication-factory

+
+
+
+
/core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=example-http-auth)
+{
+   "outcome" => "success",
+   "response-headers" => {
+       "operation-requires-reload" => true,
+       "process-state" => "reload-required"
+   }
+}
+ 
+reload
+
+
+
+

Example update sasl-authentication-factory

+
+
+
+
/core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=example-sasl-auth)
+{
+   "outcome" => "success",
+   "response-headers" => {
+       "operation-requires-reload" => true,
+       "process-state" => "reload-required"
+   }
+}
+ 
+reload
+
+
+
+
+
+

4.2.2. Silent Authentication

+
+

By default, WildFly provides an authentication mechanism for local +users, also know as silent authentication, through the local security +realm.

+
+
+

Silent authentication must be used via a sasl-authentication-factory.

+
+
+

IMPORTANT: When enabling silent authentication, you must ensure the +security domain referenced by your sasl-authentication-factory +references a security realm that contains the $local user. By default, +WildFly provides the local identity realm that provides this user.

+
+
+
Add silent authentication to an existing
+
+

sasl-authentication-factory.

+
+
+
+
/subsystem=elytron/sasl-authentication-factory=example-sasl-auth:list-add(name=mechanism-configurations, value={mechanism-name=JBOSS-LOCAL-USER, realm-mapper=local})
+ 
+reload
+
+
+
+
+
Create a new sasl-server-factory with silent authentication.
+
+
+
/subsystem=elytron/sasl-authentication-factory=example-sasl-auth:add(sasl-server-factory=configured,security-domain=exampleSD,mechanism-configurations=[{mechanism-name=DIGEST-MD5,mechanism-realm-configurations=[{realm-name=exampleManagementRealm}]},{mechanism-name=JBOSS-LOCAL-USER, realm-mapper=local}])
+ 
+reload
+
+
+
+
+
Remove silent authentication from an existing sasl-server-factory:
+
+
+
/subsystem=elytron/sasl-authentication-factory=managenet-sasl-authentication:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "mechanism-configurations" => [
+            {
+                "mechanism-name" => "JBOSS-LOCAL-USER",
+                "realm-mapper" => "local"
+            },
+            {
+                "mechanism-name" => "DIGEST-MD5",
+                "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
+            }
+        ],
+        "sasl-server-factory" => "configured",
+        "security-domain" => "ManagementDomain"
+    }
+}
+ 
+/subsystem=elytron/sasl-authentication-factory=temp-sasl-authentication:list-remove(name=mechanism-configurations,index=0)
+ 
+reload
+
+
+
+
+
+

4.2.3. Using RBAC with Elytron

+
+

RBAC can be configured to automatically assign or exclude roles for +users that are members of groups. This is configured in the +access-control section of the core management. When the management +interfaces are secured with the elytron subsystem, and users are +assigned groups when they authenticate. You can also configure roles to +be assigned to authenticated users in a variety of ways using the +elytron subsystem, for example using a role mapper or a role decoder.

+
+
+
+
+

4.3. Configure SSL/TLS

+
+

4.3.1. Enable One-way SSL/TLS for Applications

+
+

There are a couple ways to enable one-way SSL/TLS for deployed applications.

+
+
+
Using a security command:
+
+

The security enable-ssl-http-server command can be used to enable one-way +SSL/TLS for deployed applications. Example of wizard usage:

+
+
+
+
security enable-ssl-http-server --interactive --override-ssl-context
+Please provide required pieces of information to enable SSL:
+Key-store file name (default default-server.keystore): keystore.pkcs12
+Password (blank generated): secret
+What is your first and last name? [Unknown]: localhost
+What is the name of your organizational unit? [Unknown]:
+What is the name of your organization? [Unknown]:
+What is the name of your City or Locality? [Unknown]:
+What is the name of your State or Province? [Unknown]:
+What is the two-letter country code for this unit? [Unknown]:
+Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
+Validity (in days, blank default): 365
+Alias (blank generated): localhost
+Enable SSL Mutual Authentication y/n (blank n): n
+
+SSL options:
+key store file: keystore.pkcs12
+distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
+password: secret
+validity: 365
+alias: localhost
+Server keystore file keystore.pkcs12, certificate file keystore.pem and keystore.csr file
+will be generated in server configuration directory.
+Do you confirm y/n: y
+
+
+
+

NB: Once the command is executed, the CLI will reload the server.

+
+
+

HTTPS is now enabled for applications.

+
+
+
+
Using Elytron subsystem commands:
+
+

You can also use the Elytron subsystem, along with the Undertow subsystem, to +enable HTTPS for deployed applications.

+
+
+
Configure a key-store in WildFly:
+
+
+
/subsystem=elytron/key-store=httpsKS:add(path=/path/to/keystore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
+
+
+
+

The previous command uses an absolute path to the keystore. +Alternatively you can use the relative-to attribute to specify the +base directory variable and path specify a relative path. +Also, in case of file-based keystore the type attribute can be omitted and +the keystore type will be automatically detected.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:add(path=keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
+
+
+
+

If the keystore file does not exist yet, the following commands can be used to +generate an example key pair:

+
+
+
+
/subsystem=elytron/key-store=httpsKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")
+/subsystem=elytron/key-store=httpsKS:store()
+
+
+
+
+
+
List all aliases (recursively) in a key store.
+
+
+
/subsystem=elytron/key-store=httpsKS:read-aliases(recursive=true,verbose=true)
+{
+    "outcome" => "success",
+    "result" => {"localhost" => {
+        "alias" => "localhost",
+        "entry-type" => "PrivateKeyEntry",
+        "creation-date" => "2022-12-28T15:58:04.818+0530",
+        "certificate-chain" => [{
+            "type" => "X.509",
+            "algorithm" => "RSA",
+            "format" => "X.509",
+            "public-key" => "30:82:01:22:30:0d:06:09:2a:86:48:86:f7:0d:01:01:01:
+05:00:03:82:01:0f:00:30:82:01:0a:02:82:01:01:00:9e:b2:6f:4e:92:e9:f3:69:eb:9c:0e
+:63:1e:d6:d4:4b:2b:5d:46:e2:68:fd:96:83:a1:3b:83:a2:70:a8:6e:e1:2e:8d:e9:8d:ed:9
+d:d3:f3:56:26:00:29:32:a0:95:61:54:6f:35:95:41:95:76:73:34:46:db:4b:75:3c:f1:64:
+91:4a:a6:61:89:80:8c:6b:87:75:8d:d1:d1:56:bb:5e:1b:ed:97:5a:b4:ac:1e:16:06:07:e5
+:cb:6c:a8:c5:66:16:e2:92:6a:db:a6:b0:09:d2:7d:dc:fa:68:f3:2c:c5:c2:a6:f2:bd:73:f
+5:3b:94:17:16:2f:d0:8a:e6:d0:f3:53:c4:71:c6:31:61:9b:87:9d:5e:63:d8:c3:e3:81:f8:
+6f:f6:35:7b:85:9c:81:c9:94:91:d3:5d:bc:89:3b:dc:7d:c2:ae:d2:ca:b4:61:6f:04:5b:4f
+:8f:c6:ac:e0:49:de:5f:bf:84:f5:38:b1:07:48:1f:17:fb:72:15:ac:31:7a:13:f8:58:aa:6
+7:b0:67:b1:2b:99:c0:7a:a7:f6:42:d3:f9:f5:33:90:2a:9c:7c:78:73:7f:74:54:91:04:c2:
+51:ff:59:11:cd:7d:d7:61:e9:5c:c6:c7:d1:a1:f2:f5:7b:41:94:c4:cd:8d:5e:06:f1:6a:f4
+:72:24:37:be:27:02:03:01:00:01",
+            "sha-1-digest" => "70:46:1d:af:1a:5e:30:34:e9:dd:53:f4:38:b6:3e:89:5
+a:1c:f9:90",
+            "sha-256-digest" => "61:43:2e:6f:c0:ed:91:b1:3a:20:51:fc:2b:e9:33:d2
+:66:d2:a6:f2:32:5c:ca:91:14:67:7b:f2:4e:55:ed:77",
+            "encoded" => "30:82:02:cb:30:82:01:b5:a0:03:02:01:02:02:08:0c:e1:64:
+83:a0:95:28:72:30:0b:06:09:2a:86:48:86:f7:0d:01:01:0b:30:14:31:12:30:10:06:03:55
+:04:03:13:09:6c:6f:63:61:6c:68:6f:73:74:30:22:18:0f:32:30:32:32:31:32:32:38:31:3
+0:32:38:30:34:5a:18:0f:32:30:32:33:31:32:32:38:31:30:32:38:30:34:5a:30:14:31:12:
+30:10:06:03:55:04:03:13:09:6c:6f:63:61:6c:68:6f:73:74:30:82:01:22:30:0d:06:09:2a
+:86:48:86:f7:0d:01:01:01:05:00:03:82:01:0f:00:30:82:01:0a:02:82:01:01:00:9e:b2:6
+f:4e:92:e9:f3:69:eb:9c:0e:63:1e:d6:d4:4b:2b:5d:46:e2:68:fd:96:83:a1:3b:83:a2:70:
+a8:6e:e1:2e:8d:e9:8d:ed:9d:d3:f3:56:26:00:29:32:a0:95:61:54:6f:35:95:41:95:76:73
+:34:46:db:4b:75:3c:f1:64:91:4a:a6:61:89:80:8c:6b:87:75:8d:d1:d1:56:bb:5e:1b:ed:9
+7:5a:b4:ac:1e:16:06:07:e5:cb:6c:a8:c5:66:16:e2:92:6a:db:a6:b0:09:d2:7d:dc:fa:68:
+f3:2c:c5:c2:a6:f2:bd:73:f5:3b:94:17:16:2f:d0:8a:e6:d0:f3:53:c4:71:c6:31:61:9b:87
+:9d:5e:63:d8:c3:e3:81:f8:6f:f6:35:7b:85:9c:81:c9:94:91:d3:5d:bc:89:3b:dc:7d:c2:a
+e:d2:ca:b4:61:6f:04:5b:4f:8f:c6:ac:e0:49:de:5f:bf:84:f5:38:b1:07:48:1f:17:fb:72:
+15:ac:31:7a:13:f8:58:aa:67:b0:67:b1:2b:99:c0:7a:a7:f6:42:d3:f9:f5:33:90:2a:9c:7c
+:78:73:7f:74:54:91:04:c2:51:ff:59:11:cd:7d:d7:61:e9:5c:c6:c7:d1:a1:f2:f5:7b:41:9
+4:c4:cd:8d:5e:06:f1:6a:f4:72:24:37:be:27:02:03:01:00:01:a3:21:30:1f:30:1d:06:03:
+55:1d:0e:04:16:04:14:ac:99:db:c3:82:18:60:51:92:7d:75:51:ba:b4:a9:65:90:0e:7d:13
+:30:0b:06:09:2a:86:48:86:f7:0d:01:01:0b:03:82:01:01:00:97:83:30:22:ed:2e:4e:55:3
+3:73:4c:e2:56:d2:37:0a:47:39:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:
+f1:92:42:64:a5:ee:56:ca:f1:da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0
+:f6:80:c8:05:1b:29:c0:66:14:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:4
+6:50:9c:e3:d5:6b:0b:48:b4:7f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:
+63:3c:a4:8a:c5:f8:d1:6e:ae:eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a
+:30:cc:5b:c0:fc:70:f2:2b:50:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6
+b:04:02:b5:49:0c:7f:a1:a0:ef:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:
+cf:0f:85:3a:c8:18:89:22:68:04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64
+:59:63:50:88:f4:05:9e:e6:fa:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:6
+9:d9:89:0b:51:99:00:35",
+            "subject" => "CN=localhost",
+            "issuer" => "CN=localhost",
+            "not-before" => "2022-12-28T15:58:04.000+0530",
+            "not-after" => "2023-12-28T15:58:04.000+0530",
+            "serial-number" => "0c:e1:64:83:a0:95:28:72",
+            "signature-algorithm" => "SHA256withRSA",
+            "signature" => "97:83:30:22:ed:2e:4e:55:33:73:4c:e2:56:d2:37:0a:47:3
+9:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:f1:92:42:64:a5:ee:56:ca:f1:
+da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0:f6:80:c8:05:1b:29:c0:66:14
+:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:46:50:9c:e3:d5:6b:0b:48:b4:7
+f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:63:3c:a4:8a:c5:f8:d1:6e:ae:
+eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a:30:cc:5b:c0:fc:70:f2:2b:50
+:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6b:04:02:b5:49:0c:7f:a1:a0:e
+f:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:cf:0f:85:3a:c8:18:89:22:68:
+04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64:59:63:50:88:f4:05:9e:e6:fa
+:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:69:d9:89:0b:51:99:00:35",
+            "version" => "v3"
+        }]
+    }}
+}
+
+
+
+
+
List all aliases (recursively, non-verbose) in a key store.
+
+
+
/subsystem=elytron/key-store=httpsKS:read-aliases(recursive=true, verbose=false)
+{
+    "outcome" => "success",
+    "result" => {"localhost" => {
+        "alias" => "localhost",
+        "entry-type" => "PrivateKeyEntry",
+        "creation-date" => "2022-12-28T15:58:04.818+0530",
+        "certificate-chain" => [{
+            "type" => "X.509",
+            "algorithm" => "RSA",
+            "format" => "X.509",
+            "sha-1-digest" => "70:46:1d:af:1a:5e:30:34:e9:dd:53:f4:38:b6:3e:89:5
+a:1c:f9:90",
+            "sha-256-digest" => "61:43:2e:6f:c0:ed:91:b1:3a:20:51:fc:2b:e9:33:d2
+:66:d2:a6:f2:32:5c:ca:91:14:67:7b:f2:4e:55:ed:77",
+            "subject" => "CN=localhost",
+            "issuer" => "CN=localhost",
+            "not-before" => "2022-12-28T15:58:04.000+0530",
+            "not-after" => "2023-12-28T15:58:04.000+0530",
+            "serial-number" => "0c:e1:64:83:a0:95:28:72",
+            "signature-algorithm" => "SHA256withRSA",
+            "signature" => "97:83:30:22:ed:2e:4e:55:33:73:4c:e2:56:d2:37:0a:47:3
+9:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:f1:92:42:64:a5:ee:56:ca:f1:
+da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0:f6:80:c8:05:1b:29:c0:66:14
+:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:46:50:9c:e3:d5:6b:0b:48:b4:7
+f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:63:3c:a4:8a:c5:f8:d1:6e:ae:
+eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a:30:cc:5b:c0:fc:70:f2:2b:50
+:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6b:04:02:b5:49:0c:7f:a1:a0:e
+f:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:cf:0f:85:3a:c8:18:89:22:68:
+04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64:59:63:50:88:f4:05:9e:e6:fa
+:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:69:d9:89:0b:51:99:00:35",
+            "version" => "v3"
+        }]
+    }}
+}
+
+
+
+
+
Read an alias in a key store.
+
+
+
/subsystem=elytron/key-store=httpsKS:read-alias(alias="localhost")
+{
+    "outcome" => "success",
+    "result" => {
+        "alias" => "localhost",
+        "entry-type" => "PrivateKeyEntry",
+        "creation-date" => "2022-12-28T15:58:04.818+0530",
+        "certificate-chain" => [{
+            "type" => "X.509",
+            "algorithm" => "RSA",
+            "format" => "X.509",
+            "public-key" => "30:82:01:22:30:0d:06:09:2a:86:48:86:f7:0d:01:01:01:
+05:00:03:82:01:0f:00:30:82:01:0a:02:82:01:01:00:9e:b2:6f:4e:92:e9:f3:69:eb:9c:0e
+:63:1e:d6:d4:4b:2b:5d:46:e2:68:fd:96:83:a1:3b:83:a2:70:a8:6e:e1:2e:8d:e9:8d:ed:9
+d:d3:f3:56:26:00:29:32:a0:95:61:54:6f:35:95:41:95:76:73:34:46:db:4b:75:3c:f1:64:
+91:4a:a6:61:89:80:8c:6b:87:75:8d:d1:d1:56:bb:5e:1b:ed:97:5a:b4:ac:1e:16:06:07:e5
+:cb:6c:a8:c5:66:16:e2:92:6a:db:a6:b0:09:d2:7d:dc:fa:68:f3:2c:c5:c2:a6:f2:bd:73:f
+5:3b:94:17:16:2f:d0:8a:e6:d0:f3:53:c4:71:c6:31:61:9b:87:9d:5e:63:d8:c3:e3:81:f8:
+6f:f6:35:7b:85:9c:81:c9:94:91:d3:5d:bc:89:3b:dc:7d:c2:ae:d2:ca:b4:61:6f:04:5b:4f
+:8f:c6:ac:e0:49:de:5f:bf:84:f5:38:b1:07:48:1f:17:fb:72:15:ac:31:7a:13:f8:58:aa:6
+7:b0:67:b1:2b:99:c0:7a:a7:f6:42:d3:f9:f5:33:90:2a:9c:7c:78:73:7f:74:54:91:04:c2:
+51:ff:59:11:cd:7d:d7:61:e9:5c:c6:c7:d1:a1:f2:f5:7b:41:94:c4:cd:8d:5e:06:f1:6a:f4
+:72:24:37:be:27:02:03:01:00:01",
+            "sha-1-digest" => "70:46:1d:af:1a:5e:30:34:e9:dd:53:f4:38:b6:3e:89:5
+a:1c:f9:90",
+            "sha-256-digest" => "61:43:2e:6f:c0:ed:91:b1:3a:20:51:fc:2b:e9:33:d2
+:66:d2:a6:f2:32:5c:ca:91:14:67:7b:f2:4e:55:ed:77",
+            "encoded" => "30:82:02:cb:30:82:01:b5:a0:03:02:01:02:02:08:0c:e1:64:
+83:a0:95:28:72:30:0b:06:09:2a:86:48:86:f7:0d:01:01:0b:30:14:31:12:30:10:06:03:55
+:04:03:13:09:6c:6f:63:61:6c:68:6f:73:74:30:22:18:0f:32:30:32:32:31:32:32:38:31:3
+0:32:38:30:34:5a:18:0f:32:30:32:33:31:32:32:38:31:30:32:38:30:34:5a:30:14:31:12:
+30:10:06:03:55:04:03:13:09:6c:6f:63:61:6c:68:6f:73:74:30:82:01:22:30:0d:06:09:2a
+:86:48:86:f7:0d:01:01:01:05:00:03:82:01:0f:00:30:82:01:0a:02:82:01:01:00:9e:b2:6
+f:4e:92:e9:f3:69:eb:9c:0e:63:1e:d6:d4:4b:2b:5d:46:e2:68:fd:96:83:a1:3b:83:a2:70:
+a8:6e:e1:2e:8d:e9:8d:ed:9d:d3:f3:56:26:00:29:32:a0:95:61:54:6f:35:95:41:95:76:73
+:34:46:db:4b:75:3c:f1:64:91:4a:a6:61:89:80:8c:6b:87:75:8d:d1:d1:56:bb:5e:1b:ed:9
+7:5a:b4:ac:1e:16:06:07:e5:cb:6c:a8:c5:66:16:e2:92:6a:db:a6:b0:09:d2:7d:dc:fa:68:
+f3:2c:c5:c2:a6:f2:bd:73:f5:3b:94:17:16:2f:d0:8a:e6:d0:f3:53:c4:71:c6:31:61:9b:87
+:9d:5e:63:d8:c3:e3:81:f8:6f:f6:35:7b:85:9c:81:c9:94:91:d3:5d:bc:89:3b:dc:7d:c2:a
+e:d2:ca:b4:61:6f:04:5b:4f:8f:c6:ac:e0:49:de:5f:bf:84:f5:38:b1:07:48:1f:17:fb:72:
+15:ac:31:7a:13:f8:58:aa:67:b0:67:b1:2b:99:c0:7a:a7:f6:42:d3:f9:f5:33:90:2a:9c:7c
+:78:73:7f:74:54:91:04:c2:51:ff:59:11:cd:7d:d7:61:e9:5c:c6:c7:d1:a1:f2:f5:7b:41:9
+4:c4:cd:8d:5e:06:f1:6a:f4:72:24:37:be:27:02:03:01:00:01:a3:21:30:1f:30:1d:06:03:
+55:1d:0e:04:16:04:14:ac:99:db:c3:82:18:60:51:92:7d:75:51:ba:b4:a9:65:90:0e:7d:13
+:30:0b:06:09:2a:86:48:86:f7:0d:01:01:0b:03:82:01:01:00:97:83:30:22:ed:2e:4e:55:3
+3:73:4c:e2:56:d2:37:0a:47:39:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:
+f1:92:42:64:a5:ee:56:ca:f1:da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0
+:f6:80:c8:05:1b:29:c0:66:14:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:4
+6:50:9c:e3:d5:6b:0b:48:b4:7f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:
+63:3c:a4:8a:c5:f8:d1:6e:ae:eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a
+:30:cc:5b:c0:fc:70:f2:2b:50:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6
+b:04:02:b5:49:0c:7f:a1:a0:ef:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:
+cf:0f:85:3a:c8:18:89:22:68:04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64
+:59:63:50:88:f4:05:9e:e6:fa:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:6
+9:d9:89:0b:51:99:00:35",
+            "subject" => "CN=localhost",
+            "issuer" => "CN=localhost",
+            "not-before" => "2022-12-28T15:58:04.000+0530",
+            "not-after" => "2023-12-28T15:58:04.000+0530",
+            "serial-number" => "0c:e1:64:83:a0:95:28:72",
+            "signature-algorithm" => "SHA256withRSA",
+            "signature" => "97:83:30:22:ed:2e:4e:55:33:73:4c:e2:56:d2:37:0a:47:3
+9:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:f1:92:42:64:a5:ee:56:ca:f1:
+da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0:f6:80:c8:05:1b:29:c0:66:14
+:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:46:50:9c:e3:d5:6b:0b:48:b4:7
+f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:63:3c:a4:8a:c5:f8:d1:6e:ae:
+eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a:30:cc:5b:c0:fc:70:f2:2b:50
+:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6b:04:02:b5:49:0c:7f:a1:a0:e
+f:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:cf:0f:85:3a:c8:18:89:22:68:
+04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64:59:63:50:88:f4:05:9e:e6:fa
+:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:69:d9:89:0b:51:99:00:35",
+            "version" => "v3"
+        }]
+    }
+}
+
+
+
+
+
Read an alias in a key store (non-verbose).
+
+
+
/subsystem=elytron/key-store=httpsKS:read-alias(alias="localhost",verbose=false)
+{
+    "outcome" => "success",
+    "result" => {
+        "alias" => "localhost",
+        "entry-type" => "PrivateKeyEntry",
+        "creation-date" => "2022-12-28T15:58:04.818+0530",
+        "certificate-chain" => [{
+            "type" => "X.509",
+            "algorithm" => "RSA",
+            "format" => "X.509",
+            "sha-1-digest" => "70:46:1d:af:1a:5e:30:34:e9:dd:53:f4:38:b6:3e:89:5
+a:1c:f9:90",
+            "sha-256-digest" => "61:43:2e:6f:c0:ed:91:b1:3a:20:51:fc:2b:e9:33:d2
+:66:d2:a6:f2:32:5c:ca:91:14:67:7b:f2:4e:55:ed:77",
+            "subject" => "CN=localhost",
+            "issuer" => "CN=localhost",
+            "not-before" => "2022-12-28T15:58:04.000+0530",
+            "not-after" => "2023-12-28T15:58:04.000+0530",
+            "serial-number" => "0c:e1:64:83:a0:95:28:72",
+            "signature-algorithm" => "SHA256withRSA",
+            "signature" => "97:83:30:22:ed:2e:4e:55:33:73:4c:e2:56:d2:37:0a:47:3
+9:7c:01:f9:97:6c:f6:98:f7:33:5b:b2:57:ba:d9:ff:7d:4c:f1:92:42:64:a5:ee:56:ca:f1:
+da:ae:64:51:a0:90:5a:d7:a0:eb:e8:7b:e0:ef:6d:a1:8f:d0:f6:80:c8:05:1b:29:c0:66:14
+:4d:bb:d9:87:e1:8e:d5:95:3c:c8:0f:fe:49:74:bd:28:a5:46:50:9c:e3:d5:6b:0b:48:b4:7
+f:1b:ad:95:8b:52:ee:5a:e1:03:43:47:6e:6e:ac:c2:5a:da:63:3c:a4:8a:c5:f8:d1:6e:ae:
+eb:09:97:8b:0c:cd:37:92:77:0c:05:6b:a1:99:8f:7b:b8:6a:30:cc:5b:c0:fc:70:f2:2b:50
+:73:22:d2:aa:80:b6:b0:c2:67:37:25:91:10:80:3a:ed:8c:6b:04:02:b5:49:0c:7f:a1:a0:e
+f:3a:66:07:a5:9d:ab:09:be:21:8e:73:f3:91:19:3e:59:75:cf:0f:85:3a:c8:18:89:22:68:
+04:95:81:9a:7d:67:19:28:11:bc:6b:e8:cb:c7:7b:9c:b4:64:59:63:50:88:f4:05:9e:e6:fa
+:01:17:2b:eb:75:da:8b:34:f2:1f:47:2d:c5:79:8f:76:59:69:d9:89:0b:51:99:00:35",
+            "version" => "v3"
+        }]
+    }
+}
+
+
+
+
Configure a key-manager that references your key-store:
+
+
+
/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret})
+
+
+
+
+
Configure a server-ssl-context that references your key-manager:
+
+
+
/subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.2"])
+
+
+
+

IMPORTANT: You need to determine what SSL/TLS protocols you want to +support. The example commands above uses TLSv1.2.

+
+
+
+
Check and see if the https-listener is configured to use a legacy security realm for its SSL configuration:
+
+
+
/subsystem=undertow/server=default-server/https-listener=https:read-attribute(name=security-realm)
+{
+    "outcome" => "success",
+    "result" => "ApplicationRealm"
+}
+
+
+
+

The above command shows that the https-listener is configured to use +the ApplicationRealm legacy security realm for its SSL configuration. +Undertow cannot reference both a legacy security realm and an +ssl-context in Elytron at the same time so you must remove the +reference to the legacy security realm. Also there has to be always +configured either ssl-context or security-realm. Thus when changing +between those, you have to use batch operation:

+
+
+

Remove the reference to the legacy security realm and update the +https-listener to use the ssl-context from Elytron :

+
+
+
+
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=httpsSSC)
+
+
+
+
+
Reload the server:
+
+
+
reload
+
+
+
+

HTTPS is now enabled for applications.

+
+
+
+
+
+

4.3.2. Enable Two-way SSL/TLS in WildFly for Applications

+
+

First, obtain or generate your client keystore.

+
+
+
+
$ keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -validity 365 -keystore client.keystore.pkcs12 -dname "CN=client" -keypass secret -storepass secret
+
+
+
+

Export the client certificate:

+
+
+
+
$ keytool -exportcert  -keystore client.keystore.pkcs12 -alias client -keypass secret -storepass secret -file /path/to/client.cer
+
+
+
+

There are a couple ways to enable two-way SSL/TLS for deployed applications.

+
+
+
Using a security command:
+
+

The security enable-ssl-http-server command can be used to enable two-way +SSL/TLS for the deployed applications. Example of wizard usage:

+
+
+ + + + + +
+ + +
+

In the following example, we enter n when propmted with Validate certificate because the example uses a self-signed certificate. If you use Cretificate Authority (CA) signed certificates, enter y when prompted.

+
+
+
+
+
+
security enable-ssl-http-server --interactive --override-ssl-context
+Please provide required pieces of information to enable SSL:
+Key-store file name (default default-server.keystore): server.keystore.pkcs12
+Password (blank generated): secret
+What is your first and last name? [Unknown]: localhost
+What is the name of your organizational unit? [Unknown]:
+What is the name of your organization? [Unknown]:
+What is the name of your City or Locality? [Unknown]:
+What is the name of your State or Province? [Unknown]:
+What is the two-letter country code for this unit? [Unknown]:
+Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
+Validity (in days, blank default): 365
+Alias (blank generated): localhost
+Enable SSL Mutual Authentication y/n (blank n): y
+Client certificate (path to pem file): /path/to/client.cer
+Validate certificate y/n (blank y): n
+Trust-store file name (management.truststore): server.truststore.pkcs12
+Password (blank generated): secret
+
+SSL options:
+key store file: server.keystore.pkcs12
+distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
+password: secret
+validity: 365
+alias: localhost
+client certificate: /path/to/client.cer
+trust store file: server.trustore.pkcs12
+trust store password: secret
+Server keystore file server.keystore.pkcs12, certificate file server.pem and server.csr file will be generated in server configuration directory.
+Server truststore file server.trustore.pkcs12 will be generated in server configuration directory.
+Do you confirm y/n: y
+
+
+
+

NB: Once the command is executed, the CLI will reload the server. To complete +the two-way SSL/TLS authentication, you need to +import the server certificate +into the client truststore and +configure your client +to present the client certificate.

+
+
+
+
Using Elytron subsystem commands:
+
+

You can also use the Elytron subsystem, along with the Undertow subsystem, +to enable two-way SSL/TLS for deployed applications.

+
+
+
Obtain or generate your key stores:
+
+

Before enabling HTTPS in WildFly, you must obtain or generate the server key +store and trust store you plan on using. To generate an example key store and +trust store, use the following commands.

+
+
+

Create a server key-store:

+
+
+
+
/subsystem=elytron/key-store=twoWayKS:add(path=/path/to/server.keystore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
+/subsystem=elytron/key-store=twoWayKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")
+/subsystem=elytron/key-store=twoWayKS:store()
+
+
+
+

NOTE
+The first command above uses an absolute path to the keystore. +Alternatively you can use the relative-to attribute to specify the +base directory variable and path specify a relative path.

+
+
+
+
/subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
+
+
+
+

Export the server certificate:

+
+
+
+
/subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
+
+
+
+

Create a key-store for the server truststore and import the client certificate +into the server truststore:

+
+
+ + + + + +
+ + +
+

In the following example, we enter validate=false in the import-certificate command because the example uses a self-signed certificate. If you use Certificate Authority (CA) signed certificates, omit validate=false.

+
+
+
+
+
+
/subsystem=elytron/key-store=twoWayTS:add(path=/path/to/server.truststore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
+/subsystem=elytron/key-store=twoWayTS:import-certificate(alias=client,path=/path/to/client.cer,credential-reference={clear-text=secret},trust-cacerts=true,validate=false)
+/subsystem=elytron/key-store=twoWayTS:store()
+
+
+
+
+
Configure a key-manager that references your key store key-store:
+
+
+
/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS,credential-reference={clear-text=secret})
+
+
+
+
+
Configure a trust-manager that references your truststore key-store:
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS)
+
+
+
+
+
Configure a server-ssl-context that references your key-manager, trust-manager, and enables client authentication:
+
+
+
/subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM,protocols=["TLSv1.2"],trust-manager=twoWayTM,need-client-auth=true)
+
+
+
+

IMPORTANT
+You need to determine what SSL/TLS protocols you want to support. The +example commands above uses TLSv1.2.

+
+
+
+
Check and see if the https-listener is configured to use a legacy security realm for its SSL configuration:
+
+
+
/subsystem=undertow/server=default-server/https-listener=https:read-attribute(name=security-realm)
+{
+    "outcome" => "success",
+    "result" => "ApplicationRealm"
+}
+
+
+
+

The above command shows that the https-listener is configured to use +the ApplicationRealm legacy security realm for its SSL configuration. +Undertow cannot reference both a legacy security realm and an +ssl-context in Elytron at the same time so you must remove the +reference to the legacy security realm. Also there has to be always +configured either ssl-context or security-realm. Thus when changing +between those, you have to use batch operation:

+
+
+
+
Remove the reference to the legacy security realm and update the https-listener to use the ssl-context from Elytron:
+
+
+
batch
+/subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
+/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=twoWaySSC)
+run-batch
+
+
+
+
+
Reload the server
+
+
+
reload
+
+
+
+

To complete the two-way SSL/TLS authentication, you need to +import the server certificate +into the client truststore and +configure your client +to present the client certificate.

+
+
+
+
+
Import the server certificate into the client truststore
+
+
+
$ keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file /path/to/server.cer
+
+
+
+
+
Configure your client to use the client certificate
+
+

You need to configure your client to present the trusted client +certificate to the server to complete the two-way SSL/TLS +authentication. For example, if using a browser, you need to import the +trusted certificate into the browser’s truststore.

+
+
+

Two-Way HTTPS is now enabled for applications.

+
+
+
+
+

4.3.3. Configure certificate revocation in trust-manager

+
+
Configure Certificate Revocation List:
+
+

You can configure your trust-manager to use certificate-revocation-list (CRL) to check revocation status of obtained certificates.

+
+
+

The supported attributes for a certificate-revocation-list include:

+
+
+
    +
  • +

    path: The path to the configuration file that is used to initialize the certificate revocation list.

    +
  • +
  • +

    relative-to: The base path of the certificate revocation list file.

    +
  • +
  • +

    maximum-cert-path: The maximum number of non-self-issued intermediate certificates that can exist in a certification path. +The default value is 5. (Deprecated. Use maximum-cert-path in trust-manager).

    +
  • +
+
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=certificate-revocation-list, value={})
+
+
+
+

This will use CRLs obtained from distribution points referenced in your certificates.

+
+
+

NOTE: To use a CRL your trust store must contain the certificate chain in order to check validity of both CRL list.

+
+
+
Override CRL location obtained from certificates:
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=certificate-revocation-list.path, value=intermediate.crl.pem)
+
+
+
+
+
Configure multiple certificate revocation lists
+
+

Alternatively, you can configure multiple certificate revocation lists in your trust-manager using +the certificate-revocation-lists attribute as follows:

+
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=certificate-revocation-lists, value=[{path="PATH/TO/CRL"}, {path="PATH/TO/OTHER/CRL"}])
+
+
+
+

The supported attributes for certificate-revocation-lists include a list of certificate-revocation-list objects containing:

+
+
+
    +
  • +

    path: The path to the configuration file that is used to initialize the certificate revocation list.

    +
  • +
  • +

    relative-to: The base path of the certificate revocation list file.

    +
  • +
+
+
+
+
+
Configure OCSP certificate revocation:
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=ocsp, value={})
+
+
+
+

This will enable OCSP certificate revocation by using OCSP responder inside the certificate. In case the responder is known but OCSP revocation status is unknown, the verification will fail.

+
+
+
Override OCSP responder URI extracted from certificate:
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=ocsp.responder, value="http://example.com/ocsp-responder")
+
+
+
+
+
+
Configure order of revocation mechanisms:
+
+

If both CRL and OCSP are defined, Elytron will use OCSP for obtaining revocation status as first by default. In case you want to prefer CRL:

+
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=ocsp.prefer-crls, value="true")
+
+
+
+
+
Other trust-manager configuration:
+
+
Configure trust-manager to only check leaf certificates for revocation status
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=only-leaf-cert, value="true")
+
+
+
+
+
Configure trust-manager to accept certificates with unknown revocation status
+
+

In case you want to accept certificates with unknown revocation status, you can enable soft-fail behaviour in your trust-manager.

+
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=soft-fail, value=true)
+
+
+
+
+
Set maximum number of intermediate certificates of trust-manager
+
+

Sets the value of the maximum number of non-self-issued intermediate certificates that may exist in a certification path with default value of 5.

+
+
+
+
/subsystem=elytron/trust-manager=twoWayTM:write-attribute(name=maximum-cert-path, value=10)
+
+
+
+
+
+
+

4.3.4. Enable One-way SSL/TLS for the Management Interfaces

+
+

There are a couple ways to enable one-way SSL/TLS for the management interfaces.

+
+
+
Using a security command:
+
+

The security enable-ssl-management command can be used to enable one-way +SSL/TLS for the management interfaces. Example of wizard usage:

+
+
+
+
security enable-ssl-management --interactive
+Please provide required pieces of information to enable SSL:
+Key-store file name (default management.keystore): keystore.pkcs12
+Password (blank generated): secret
+What is your first and last name? [Unknown]: localhost
+What is the name of your organizational unit? [Unknown]:
+What is the name of your organization? [Unknown]:
+What is the name of your City or Locality? [Unknown]:
+What is the name of your State or Province? [Unknown]:
+What is the two-letter country code for this unit? [Unknown]:
+Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
+Validity (in days, blank default): 365
+Alias (blank generated): localhost
+Enable SSL Mutual Authentication y/n (blank n): n
+
+SSL options:
+key store file: keystore.pkcs12
+distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
+password: secret
+validity: 365
+alias: localhost
+Server keystore file keystore.pkcs12, certificate file keystore.pem and keystore.csr file
+will be generated in server configuration directory.
+Do you confirm y/n :y
+
+
+
+

NB: Once the command is executed, the CLI will reload the server and reconnect to it.

+
+
+

HTTPS is now enabled for the management interfaces.

+
+
+
+
Using Elytron subsystem commands:
+
+

Elytron subsystem commands can also be used to enable one-way SSL/TLS for the +management interfaces.

+
+
+
Configure a key-store:
+
+
+
/subsystem=elytron/key-store=httpsKS:add(path=keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
+
+
+
+

NOTE: The above command uses relative-to to reference the location +of the keystore file. Alternatively, you can specify the full path to +the keystore in path and omit relative-to.

+
+
+

If the keystore file does not exist yet, the following commands can be used to +generate an example key pair:

+
+
+
+
/subsystem=elytron/key-store=httpsKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")
+/subsystem=elytron/key-store=httpsKS:store()
+
+
+
+
+
Create a key-manager and server-ssl-context.
+
+
+
/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret})
+ 
+/subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.2"])
+
+
+
+

IMPORTANT: You need to determine what SSL/TLS protocols you want to +support. The example commands above uses TLSv1.2.

+
+
+
+
Enable HTTPS on the management interface.
+
+
+
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=httpsSSC)
+ 
+/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
+
+
+
+
+
Reload the WildFly instance.
+
+
+
reload
+
+
+
+

HTTPS is now enabled for the management interfaces.

+
+
+
+
+
+

4.3.5. Enable Two-way SSL/TLS for the Management Interfaces

+
+

First, obtain or generate your client keystore.

+
+
+
+
$ keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -validity 365 -keystore client.keystore.pkcs12 -dname "CN=client" -keypass secret -storepass secret
+
+
+
+

Export your client certificate.

+
+
+
+
$ keytool -exportcert  -keystore client.keystore.pkcs12 -alias client -keypass secret -storepass secret -file /path/to/client.cer
+
+
+
+

There are a couple ways to enable two-way SSL/TLS for the management interfaces.

+
+
+
Using a security command:
+
+

The security enable-ssl-management command can be used to enable two-way +SSL/TLS for the management interfaces. Example of wizard usage:

+
+
+ + + + + +
+ + +
+

In the following example, we enter n when propmted with Validate certificate because the example uses a self-signed certificate. If you use Certificate Authority (CA) signed certificates, enter y when prompted.

+
+
+
+
+
+
security enable-ssl-management --interactive
+Please provide required pieces of information to enable SSL:
+Key-store file name (default management.keystore): server.keystore.pkcs12
+Password (blank generated): secret
+What is your first and last name? [Unknown]: localhost
+What is the name of your organizational unit? [Unknown]:
+What is the name of your organization? [Unknown]:
+What is the name of your City or Locality? [Unknown]:
+What is the name of your State or Province? [Unknown]:
+What is the two-letter country code for this unit? [Unknown]:
+Is CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
+Validity (in days, blank default): 365
+Alias (blank generated): localhost
+Enable SSL Mutual Authentication y/n (blank n): y
+Client certificate (path to pem file): /path/to/client.cer
+Validate certificate y/n (blank y): n
+Trust-store file name (management.truststore): server.truststore.pkcs12
+Password (blank generated): secret
+
+SSL options:
+key store file: server.keystore.pkcs12
+distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
+password: secret
+validity: 365
+alias: localhost
+client certificate: /path/to/client.cer
+trust store file: server.trustore.pkcs12
+trust store password: secret
+Server keystore file server.keystore.pkcs12, certificate file server.pem and server.csr file will be generated in server configuration directory.
+Server truststore file server.trustore.pkcs12 will be generated in server configuration directory.
+Do you confirm y/n: y
+
+
+
+

NB: Once the command is executed, the CLI will reload the server and +attempt to reconnect to it. To complete the two-way SSL/TLS authentication, +you need to import the server certificate +into the client truststore and +configure your client +to present the client certificate.

+
+
+
+
Using Elytron subsystem commands:
+
+

Elytron subsystem commands can also be used to enable two-way SSL/TLS for the +management interfaces.

+
+
+
Obtain or generate your key stores.
+
+

Before enabling HTTPS in WildFly, you must obtain or generate the server +key store and trust store you plan on using. To generate an example key +store and trust store, use the following commands.

+
+
+

Configure a key-store.

+
+
+
+
/subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
+
+/subsystem=elytron/key-store=twoWayKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")
+
+/subsystem=elytron/key-store=twoWayKS:store()
+
+
+
+

NOTE: The above command uses relative-to to reference the location +of the keystore file. Alternatively, you can specify the full path to +the keystore in path and omit relative-to.

+
+
+

Export your server certificate.

+
+
+
+
/subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
+
+
+
+

Create a key-store for the server trust store and import the client certificate +into the server trust store.

+
+
+ + + + + +
+ + +
+

In the following example, we enter validate=false in the import-certificate command because the example uses a self-signed certificate. If you use Certificate Authority (CA) signed certificates, omit validate=false.

+
+
+
+
+
+
/subsystem=elytron/key-store=twoWayTS:add(path=server.truststore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
+
+/subsystem=elytron/key-store=twoWayTS:import-certificate(alias=client,path=/path/to/client.cer,credential-reference={clear-text=secret},trust-cacerts=true,validate=false)
+
+/subsystem=elytron/key-store=twoWayTS:store()
+
+
+
+
+
Configure a key-manager, trust-manager, and server-ssl-context for the server key store and trust store.
+
+
+
/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS,credential-reference={clear-text=secret})
+ 
+/subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS)
+ 
+/subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM,protocols=["TLSv1.2"],trust-manager=twoWayTM,want-client-auth=true,need-client-auth=true)
+
+
+
+

IMPORTANT: You need to determine what SSL/TLS protocols you want to +support. The example commands above uses TLSv1.2.

+
+
+
+
Enable HTTPS on the management interface.
+
+
+
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=twoWaySSC)
+ 
+/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
+
+
+
+
+
Reload the WildFly instance.
+
+
+
reload
+
+
+
+

To complete the two-way SSL/TLS authentication, you need to +import the server certificate +into the client truststore and +configure your client +to present the client certificate.

+
+
+
+
+
Import the server certificate into the client truststore.
+
+
+
$ keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file /path/to/server.cer
+
+
+
+
+
Configure your client to use the client certificate.
+
+

You need to configure your client to present the trusted client +certificate to the server to complete the two-way SSL/TLS +authentication. For example, if using a browser, you need to import the +trusted certificate into the browser’s trust store.

+
+
+

Two-way SSL/TLS is now enabled for the management interfaces.

+
+
+
+
+

4.3.6. KeyStore manipulation operations

+
+

It is possible to perform various KeyStore manipulation operations on an +Elytron key-store resource using the management CLI.

+
+
+
Generate a key pair
+
+

The generate-key-pair command generates a key pair and wraps the resulting +public key in a self-signed X.509 certificate. The generated private key and +self-signed certificate will be added to the KeyStore.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:generate-key-pair(alias=example,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=www.example.com")
+
+
+
+
+
Generate a certificate signing request
+
+

The generate-certificate-signing-request command generates a PKCS #10 +certificate signing request using a PrivateKeyEntry from the KeyStore. The +generated certificate signing request will be output to a file.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:generate-certificate-signing-request(alias=example,path=server.csr,relative-to=jboss.server.config.dir,distinguished-name="CN=www.example.com",extensions=[{critical=false,name=KeyUsage,value=digitalSignature}],credential-reference={clear-text=secret})
+
+
+
+
+
Import a certificate or certificate chain
+
+

The import-certificate command imports a certificate or certificate chain +from a file into an entry in the KeyStore.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:import-certificate(alias=example,path=/path/to/certificate_or_chain/file,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},trust-cacerts=true)
+
+
+
+
+
Export a certificate
+
+

The export-certificate command exports a certificate from an entry in the +KeyStore to a file.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:export-certificate(alias=example,path=serverCert.cer,relative-to=jboss.server.config.dir,pem=true)
+
+
+
+
+
Change an alias
+
+

The change-alias command moves an existing KeyStore entry to a new alias.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:change-alias(alias=example,new-alias=newExample,credential-reference={clear-text=secret})
+
+
+
+
+
Store changes made to key-stores
+
+

The store command persists any changes that have been made to the file that +backs the KeyStore.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:store()
+
+
+
+
+
Obtain a signed certificate from Let’s Encrypt
+
+

Before obtaining a signed certificate from Let’s Encrypt, you must configure +a Let’s Encrypt account using the following commands.

+
+
+
Create a key-store to hold your Let’s Encrypt account key.
+
+
+
/subsystem=elytron/key-store=accountsKS:add(path=accounts.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)
+
+
+
+
+
Configure a Let’s Encrypt account
+
+
+
/subsystem=elytron/certificate-authority-account=myLEAccount:add(alias=example,key-store=accountsKS,contact-urls=[mailto:admin@example.org])
+
+
+
+

Note: Let’s Encrypt is the default certificate authority and therefore the certificate-authority attribute can be omitted when creating a certificate-authority-account. +It is also possible to configure an account with different certificate authority than Let’s Encrypt by adding custom certificate-authority resource and passing it to certificate-authority-account.

+
+
+
+
/subsystem=elytron/certificate-authority=myCA:add(url="https://my.example.url/acme/directory", staging-url="https://my.example.staging.url/acme/directory")
+/subsystem=elytron/certificate-authority-account=myCAAccount:add(certificate-authority=myCA,alias=example,key-store=accountsKS,contact-urls=[mailto:admin@example.org])
+
+
+
+
+
Obtain a signed certificate from Let’s Encrypt
+
+

The obtain-certificate command creates an account with Let’s Encrypt, if such an account does not already exist, +obtains a signed certificate from Let’s Encrypt, and stores it in the KeyStore.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:obtain-certificate(alias=server,domain-names=[www.example.org],certificate-authority-account=myLEAccount,agree-to-terms-of-service=true,algorithm=RSA,key-size=2048,credential-reference={clear-text=secret})
+
+
+
+
+
+
Revoke a signed certificate
+
+

The revoke-certificate command revokes a certificate that was issued by Let’s Encrypt.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:revoke-certificate(alias=server,reason=keyCompromise,certificate-authority-account=myLEAccount)
+
+
+
+
+
Check if a certificate is due for renewal
+
+

The should-renew-certificate command checks if a certificate is due for renewal. In particular, it will return true if the certificate expires in less than the given number of days and false otherwise.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:should-renew-certificate(alias=server,expiration=7)
+
+
+
+
+
+

4.3.7. Certificate authority account operations

+
+

It is possible to perform various operations on an Elytron certificate-authority-account +resource using the management CLI.

+
+
+
Create an account with the certificate authority
+
+

The create-account command creates an account with the certificate authority if one does not already exist.

+
+
+
+
/subsystem=elytron/certificate-authority-account=myLEAccount:create-account(agree-to-terms-of-service=true)
+
+
+
+
+
Update an account with the certificate authority
+
+

The update-account command updates an account with the certificate authority.

+
+
+
+
/subsystem=elytron/certificate-authority-account=myLEAccount:update-account(agree-to-terms-of-service=true)
+
+
+
+
+
Change the account key
+
+

The change-account-key command changes the key associated with the certificate authority account.

+
+
+
+
/subsystem=elytron/certificate-authority-account=myLEAccount:change-account-key()
+
+
+
+
+
Deactivate the account
+
+

The deactivate-account command deactivates the certificate authority account.

+
+
+
+
/subsystem=elytron/certificate-authority-account=myLEAccount:deactivate-account()
+
+
+
+
+
Get metadata
+
+

The get-metadata command retrieves the metadata (e.g., terms of service URL, website URL, CAA identities, +and whether or not an external account is required), if any, associated with the certificate authority.

+
+
+
+
/subsystem=elytron/certificate-authority-account=myLEAccount:get-metadata()
+
+
+
+
+
+

4.3.8. Using an ldap-key-store

+
+

An ldap-key-store allows you to use a keystore stored in an LDAP +server. You can use an ldap-key-store in same way you can use a +key-store.

+
+
+

To create and use an ldap-key-store:

+
+
+
Configure a dir-context.
+
+

To connect to the LDAP server from WildFly, you need to configure a +dir-context that provides the URL as well as the principal used to +connect to the server.

+
+
+

Example dir-context

+
+
+
+
/subsystem=elytron/dir-context=exampleDC:add( \
+  url="ldap://127.0.0.1:10389", \
+  principal="uid=admin,ou=system", \
+  credential-reference={clear-text=secret} \
+)
+
+
+
+
+
Configure an ldap-key-store.
+
+

When configure an ldap-key-store, you need to specify both the +dir-context used to connect to the LDAP server as well as how to +locate the keystore stored in the LDAP server. At a minimum, this +requires you specify a search-path.

+
+
+

Example ldap-key-store

+
+
+
+
/subsystem=elytron/ldap-key-store=ldapKS:add( \
+  dir-context=exampleDC, \
+  search-path="ou=Keystores,dc=wildfly,dc=org" \
+)
+
+
+
+
+
Use the ldap-key-store.
+
+

Once you have defined your ldap-key-store, you can use it in the same +places where a key-store could be used. For example, you could use an +ldap-key-store when configuring HTTPS and Two-Way HTTPS for +applications.

+
+
+
+
+

4.3.9. Using a filtering-key-store

+
+

A filtering-key-store allows you to expose a subset of aliases from an +existing key-store, and use it in the same places you could use a +key-store. For example, if a keystore contained alias1, alias2, +and alias3, but you only wanted to expose alias1 and alias3, a +filtering-key-store provides you several ways to do that.

+
+
+

To create a filtering-key-store:

+
+
+
Configure a key-store.
+
+
+
/subsystem=elytron/key-store=myKS:add( \
+  path=keystore.pkcs12, \
+  relative-to=jboss.server.config.dir, \
+  credential-reference={ \
+    clear-text=secret \
+  }, \
+  type=PKCS12 \
+)
+
+
+
+
+
Configure a filtering-key-store.
+
+

When you configure a filtering-key-store, you specify which +key-store you want to filter and the alias-filter for filtering +aliases from the key-store. The filter can be specified in one of the +following formats:

+
+
+
    +
  • +

    alias1,alias3, which is a comma-delimited list of aliases to expose.

    +
  • +
  • +

    ALL:-alias2, which exposes all aliases in the keystore except the +ones listed.

    +
  • +
  • +

    NONE:+alias1:+alias3, which exposes no aliases in the keystore +except the ones listed.

    +
  • +
+
+
+

This example uses a comma-delimted list to expose alias1 and alias3.

+
+
+
+
/subsystem=elytron/filtering-key-store=filterKS:add( \
+  key-store=myKS, \
+  alias-filter="alias1,alias3" \
+)
+
+
+
+
+
Use the filtering-key-store.
+
+

Once you have defined your filtering-key-store, you can use it in the +same places where a key-store could be used. For example, you could +use a filtering-key-store when configuring HTTPS and Two-Way HTTPS for +applications.

+
+
+
+
+

4.3.10. Reload a Keystore

+
+

You can reload a keystore configured in WildFly from the management CLI. +This is useful in cases where you have made changes to certificates +referenced by a keystore.

+
+
+

To reload a keystore.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:load
+
+
+
+
+

4.3.11. Reinitialize a Key Manager

+
+

You can reinitialize a key-manager configured in WildFly from the management CLI. +This is useful in cases where you have made changes in certificates provided by keystore +resource and you want to apply this change to new SSL connections without restarting the server.

+
+
+

If the key-store is file based then it must be loaded first.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:load()
+
+
+
+

To reinitialize a key-manager.

+
+
+
+
/subsystem=elytron/key-manager=httpsKM:init()
+
+
+
+
+

4.3.12. Reinitialize a Trust Manager

+
+

You can reinitialize a trust-manager configured in WildFly from the management CLI. +This is useful in cases where you have made changes to certificates provided by keystore +resource and you want to apply this change to new SSL connections without restarting the server.

+
+
+

If the key-store is file based then it must be loaded first.

+
+
+
+
/subsystem=elytron/key-store=httpsKS:load()
+
+
+
+

To reinitialize a trust-manager.

+
+
+
+
/subsystem=elytron/trust-manager=httpsTM:init()
+
+
+
+
+

4.3.13. Check the Content of a Keystore by Alias

+
+

If you add a keystore to the elytron subsystem using the key-store +component, you can check the keystore’s contents using the alias child +element and reading its attributes.

+
+
+

For example:

+
+
+
+
/subsystem=elytron/key-store=httpsKS/alias=localhost:read-attribute(name=certificate-chain)
+{
+    "outcome" => "success",
+    "result" => [{
+        "type" => "X.509",
+        "algorithm" => "RSA",
+        "format" => "X.509",
+        "public-key" => "30:81:9f:30:0d:06:09:2a:8......
+
+
+
+

The following attributes can be read:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

certificate

The certificate associated with the alias. If the alias +has a certificate chain this will always be undefined.

certificate-chain

The certificate chain associated with the alias.

creation-date

The creation date of the entry represented by this +alias.

entry-type

The type of the entry for this alias. Available types: +PasswordEntry, PrivateKeyEntry, SecretKeyEntry, TrustedCertificateEntry, +and Other. Unrecognized types will be reported as Other.

+
+
+

4.3.14. Custom Components

+
+

When configuring SSL/TLS in the elytron subsystem, you can provide and +use custom implementations of the following components:

+
+
+
    +
  • +

    key-store

    +
  • +
  • +

    key-manager

    +
  • +
  • +

    trust-manager

    +
  • +
  • +

    client-ssl-context

    +
  • +
  • +

    server-ssl-context

    +
  • +
  • +

    certificate-authority-account

    +
  • +
+
+
+

When creating custom implementations of Elytron components, they must +present the appropriate capabilities and requirements.

+
+
+
+

4.3.15. Configuring a server SSLContext

+
+

Using the Elytron subsystem, it is possible to configure an SSLContext for use on the server side of a connection.

+
+
+

Adding a server SSLContext takes the general form:

+
+
+
+
/subsystem=elytron/server-ssl-context=test-server-ssl-context:add(...)
+
+
+
+

The following attributes can be specified when creating a server-ssl-context:

+
+
+
+
security-domain
+
+

(Optional) A reference to the security-domain to use for authentication during SSL session +establishment.

+
+
key-manager
+
+

(Optional) A reference to the KeyManager to be used by this SSLContext.

+
+
trust-manager
+
+

(Optional) A reference to the TrustManager to be used by this SSLContext.

+
+
cipher-suite-filter
+
+

(Optional) The filter to be applied to the cipher suites for TLSv1.2 and below made available +by this SSLContext. The format of this attribute is described in detail in +org.wildfly.security.ssl.CipherSuiteSelector.fromString(selector). +The default value is DEFAULT, which corresponds to all known cipher suites that do not have NULL encryption and +excludes any cipher suites that have no authentication.

+
+
cipher-suite-names
+
+

(Optional) The enabled cipher suites for TLSv1.3. The format of this attribute is a simple colon +(":") separated list of TLSv1.3 cipher suite names (e.g., TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256). +This attribute must be specified in order for TLSv1.3 to be enabled.

+
+
protocols
+
+

(Optional) A space separated list of the protocols to be supported by this SSLContext. The default value +is TLSv1 TLSv1.1 TLSv1.2 TLSv1.3. Note that the TLSv1.3 protocol will only be usable when running against JDK 11 or +higher.

+
+
want-client-auth
+
+

(Optional) To request (but not to require) a client certificate on SSL handshake. If a +security-domain is configured and supports X509 evidence, this will be set to true automatically. Ignored when +need-client-auth is set. The default value is false.

+
+
need-client-auth
+
+

(Optional) If true, a client certificate is required on SSL handshake. A connection without a +trusted client certificate will be rejected. The default value is false.

+
+
authentication-optional
+
+

(Optional) Rejection of the client certificate by the configured security-domain will not +prevent the connection. This allows a fall through to use other authentication mechanisms (like form login) when the +client certificate is rejected by the +security-domain. This has an effect only when the security-domain is configured. The default value is false.

+
+
use-cipher-suites-order
+
+

(Optional) If true, the cipher suites order defined on the server will be used. If false, +the cipher suites order presented by the client will be used. The default value is true.

+
+
provider-name
+
+

(Optional) The name of the provider to use. If not specified, all providers from providers will be +passed to the SSLContext.

+
+
providers
+
+

(Optional) The name of the providers to obtain the Provider[] to use to load the SSLContext.

+
+
maximum-session-cache-size
+
+

(Optional) The maximum number of SSL sessions to be cached. The default value -1 +indicates that the JVM default value should be used. A value of 0 means there is no limit.

+
+
session-timeout
+
+

(Optional) The timeout for SSL sessions. The default value -1 indicates that the JVM default value +should be used. A value of 0 means there is no limit.

+
+
wrap
+
+

(Optional) If true, the returned SSLEngine, SSLSocket, and SSLServerSocket instances will be wrapped to +protect against further modification. The default value is false.

+
+
pre-realm-principal-transformer
+
+

(Optional) A principal transformer to apply before the realm is selected.

+
+
post-realm-principal-transformer
+
+

(Optional) A principal transformer to apply after the realm is selected.

+
+
final-principal-transformer
+
+

(Optional) A final principal transformer to apply for this mechanism realm.

+
+
realm-mapper
+
+

(Optional) The realm mapper to be used for SSL authentication.

+
+
+
+
+
+

4.3.16. Configuring a client SSLContext

+
+

Using the Elytron subsystem, it is possible to configure an SSLContext for use on the client side of a connection.

+
+
+

Adding a client SSLContext takes the general form:

+
+
+
+
/subsystem=elytron/client-ssl-context=test-client-ssl-context:add(...)
+
+
+
+

The following attributes can be specified when creating a client-ssl-context:

+
+
+
+
key-manager
+
+

(Optional) A reference to the KeyManager to be used by this SSLContext.

+
+
trust-manager
+
+

(Optional) A reference to the TrustManager to be used by this SSLContext.

+
+
cipher-suite-filter
+
+

(Optional) The filter to be applied to the cipher suites for TLSv1.2 and below made available +by this SSLContext. The format of this attribute is described in detail in +org.wildfly.security.ssl.CipherSuiteSelector.fromString(selector). +The default value is DEFAULT, which corresponds to all known cipher suites that do not have NULL encryption and +excludes any cipher suites that have no authentication.

+
+
cipher-suite-names
+
+

(Optional) The enabled cipher suites for TLSv1.3. The format of this attribute is a simple colon +(":") separated list of TLSv1.3 cipher suite names (e.g., TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256). +This attribute must be specified in order for TLSv1.3 to be enabled.

+
+
protocols
+
+

(Optional) A space separated list of the protocols to be supported by this SSLContext. The default value +is TLSv1 TLSv1.1 TLSv1.2 TLSv1.3. Note that the TLSv1.3 protocol will only be usable when running against JDK 11 or higher.

+
+
provider-name
+
+

(Optional) The name of the provider to use. If not specified, all providers from providers will be +passed to the SSLContext.

+
+
providers
+
+

(Optional) The name of the providers to obtain the Provider[] to use to load the SSLContext.

+
+
+
+
+

WARNING It is possible to use TLSv1.3 with WildFly when running against JDK 11 or higher. However, if JDK 11 +is in use and if there is a very large number of TLSv1.3 requests being made, it is possible that a drop in +performance (throughput and response time) will occur compared to TLSv1.2. Upgrading to newer JDK versions +should improve performance. For this reason, the use of TLSv1.3 is currently disabled by default. TLSv1.3 can +be enabled by configuring the new cipher-suite-names attribute in the SSL Context resource definition in the +Elytron subsystem as described in the previous two sections. It is recommended to test for performance +degradation prior to enabling TLSv1.3 in a production environment. See WFWIP-160 +for more details.

+
+
+

Note: When using TLSv1.3, it is important to keep in mind that session IDs have become essentially obsolete. +This means that the session ID can no longer reliably be used to test if a session was resumed. Instead, +creation time can be used to test if a session was resumed. Currently, clients need to read from the server after +the first handshake in order to receive the NewSessionTicket that can be used for resumption. However, this may +change once JDK-8209953 is resolved.

+
+
+
+

4.3.17. Configuring SSLv2Hello

+
+

Older JDK versions use SSLv2Hello during the initial SSL handshake message +where the SSL/TLS version that will be used for the rest of the communication is +negotiated.

+
+
+

Using SSLv2Hello is discouraged, therefore newer JDK versions disable this protocol +on the client by default. However, they do provide the ability to re-enable it if necessary.

+
+
+

SSLv2Hello can be configured as a supported protocol for the server SSL context as follows:

+
+
+
+
/subsystem=elytron/server-ssl-context=server-context:add(protocols=[SSLv2Hello,TLSv1], ...)
+
+
+
+

Similarly, it can be configured as a supported protocol for the client SSL context as follows:

+
+
+
+
/subsystem=elytron/client-ssl-context=client-context:add(protocols=[SSLv2Hello,TLSv1], ...)
+
+
+
+
WARNING:
+
+
    +
  • +

    The use of SSLv2Hello is strongly discouraged.

    +
  • +
  • +

    SSLv2Hello cannot be configured by itself, as its purpose is to determine +which encryption protocols are supported by the server it connects to. It always +needs to be configured along side another encryption protocol.

    +
  • +
  • +

    Additionally, IBM JDK does not support specifying SSLv2Hello in its client, although a +server side connection always accepts this protocol.

    +
  • +
+
+
+
+
+

4.3.18. Default SSLContext

+
+

Many libraries that can be used within deployments may require SSL configuration for any connections they establish, these libraries tend to be configurable by the caller or if no configuration is provided fall back to using the default SSLContext for the process available from: -

+
+
+
+
javax.net.ssl.SSLContext.getDefault();
+
+
+
+

By default this SSLContext is configured using system properties, however within the WildFly Elytron subsystem it is possible to specify that one of the configured contexts should be associated and used as the default.

+
+
+

To make use of this feature configure your SSLContext as normal, the following command can then be used to specify which SSLContext should be used as the default.

+
+
+
+
/subsystem=elytron:write-attribute(name=default-ssl-context, value=client-context)
+
+
+
+

As existing services and deployments could have cached the default SSLContext prior to this being set a reload is required to ensure the default gets set before the deployments are activated.

+
+
+
+
:reload
+
+
+
+

Note: If the default-ssl-context attribute is subsequently 'undefined' the standard APIs do not provide us with a mechanism to revert the default so in this situation the Java process would need be restarted.

+
+
+
+
/subsystem=elytron:undefine-attribute(name=default-ssl-context)
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-restart" => true,
+        "process-state" => "restart-required"
+    }
+}
+
+
+
+
+

4.3.19. Configuring SNI

+
+

Using the WildFly Elytron subsystem it is possible to configure an SSL context which supports SNI. By supporting SNI if an SNI host name is available whilst the SSLSession is being negotiated a host specific SSLContext will be selected. If no host specific SSLContext is identified either because no host name was received or because there is no match a default SSLContext will be used instead. By identifying a host specific SSLContext it means that a certificate appropriate for that host can be used.

+
+
+

The following command demonstrates how an SNI aware SSLContext can be added: -

+
+
+
+
[standalone@localhost:9990 /] ./subsystem=elytron/server-ssl-sni-context=test-sni:add(default-ssl-context=jboss,host-context-map={localhost=localhost, wildfly.org=wildfly})
+{"outcome" => "success"}
+
+
+
+

This example assumes that three SSLContexts have been previously defined following the steps available previously in this document, those contexts are jboss, localhost, and wildfly.

+
+
+

During negotiation of the SSLSession if the SNI host name received is localhost then the localhost SSLContext will be used, if the SNI host name is wildfly.org then the wildfly SSLContext will be used. If no SNI host name is received or if we receive a name that does not match this will fallback and use the jboss SSLContext.

+
+
+

The resulting resource looks like: -

+
+
+
+
[standalone@localhost:9990 /] ./subsystem=elytron/server-ssl-sni-context=test-sni:read-resource
+{
+    "outcome" => "success",
+    "result" => {
+        "default-ssl-context" => "jboss",
+        "host-context-map" => {
+            "localhost" => "localhost",
+            "wildfly.org" => "wildfly"
+        }
+    }
+}
+
+
+
+

Within the host-context-map it is also possible to define wildcard mappings such as * and *.wildfly.org.

+
+
+
+

4.3.20. Use the Elytron Subsystem

+
+

For authentication in applications, you can use the +application-security-domain property in the undertow subsystem to +configure a security domain in the elytron subsystem.

+
+
+
+
/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(http-authentication-factory=example-http-auth)
+
+
+
+

NOTE: This must match the security-domain configured in the +jboss-web.xml of your application.

+
+
+

For enabling HTTPS using elytron you need to set the ssl-context attribute.

+
+
+
+
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=httpsSSC)
+
+
+
+
+
+

4.4. Creating Elytron Subsystem Components

+
+

4.4.1. Create an Elytron Security Realm

+
+

Security realms in the Elytron subsystem, when used in conjunction with +security domains, are use for both core management authentication as +well as for authentication with applications. Security realms are also +specifically typed based on their identity store, for example +jdbc-realm, filesystem-realm, properties-realm, etc.

+
+
+

Adding a security realm takes the general form:

+
+
+
+
/subsystem=elytron/type-of-realm=realmName:add(....)
+
+
+
+

Examples of adding specific realms, such as jdbc-realm, +filesystem-realm, and properties-realm can be found in previous +sections.

+
+
+
+

4.4.2. Create an Elytron Role Decoder

+
+

A role decoder converts attributes from the identity provided by the +security realm into roles. Role decoders are also specifically typed +based on their functionality, for example empty-role-decoder, +simple-role-decoder, custom-role-decoder, and aggregate-role-decoder.

+
+
+

Adding a role decoder takes the general form:

+
+
+
+
/subsystem=elytron/ROLE-DECODER-TYPE=roleDeoderName:add(....)
+
+
+
+
Create an Elytron Role Decoder that makes use of the IP Address of the Remote Client
+
+

A role decoder that is configured on a security realm assigns roles to +an identity based on attributes provided by the security realm. It is +also possible to configure a role decoder that makes use of the IP +address of the remote client when determining the roles associated +with an identity. As an example, we might want to make use of the IP +address of the remote client in order to assign a user a particular +role when establishing a connection to the server from a corporate +network and a different role when establishing a connection to the +server from a different network.

+
+
+

Adding a role decoder that makes use of the remote client’s IP +address takes the general form:

+
+
+
+
/subsystem=elytron/source-address-role-decoder=roleDecoderName:add(source-address="...", pattern="...", roles=[...])
+
+
+
+

In particular, a source-address-role-decoder has the following attributes:

+
+
+
    +
  • +

    source-address - The IP address of the remote client.

    +
  • +
  • +

    pattern - A regular expression that specifies the IP address to match.

    +
  • +
  • +

    roles - The list of roles to assign if the source IP address matches the given address.

    +
  • +
+
+
+

Only one of source-address and pattern should be specified.

+
+
+

For example, the following source-address-role-decoder could be configured to specify +that a user should be assigned the "Administrator" role when establishing a connection +to the server from the 10.10.10.10 IP address:

+
+
+
+
/subsystem=elytron/source-address-role-decoder=decoder1:add(source-address="10.10.10.10", roles=["Administrator"])
+
+
+
+

Once a source-address-role-decoder has been configured, it can be referenced from a security-domain:

+
+
+
+
/subsystem=elytron/security-domain=exampleSD:add(..., role-decoder=decoder1)
+
+
+
+

It is also possible to assign permissions to an identity based on its roles using a +simple permission mapper.

+
+
+

Example configuration:

+
+
+
+
/subsystem=elytron/source-address-role-decoder=decoder1:add(source-address="10.10.10.10", roles=["Administrator"])
+/subsystem=elytron/simple-permission-mapper=ipPermissionMapper:add(permission-mappings=[{roles=["Administrator"], permission-sets=[{permission-set=login-permission}]}])
+/subsystem=elytron/security-domain=exampleSD:add(..., role-decoder=decoder1, permission-mapper=ipPermissionMapper)
+
+
+
+

The above example configures a security domain with a source address role decoder that +will assign the "Administrator" role when the IP address of the remote client matches +the configured address and a simple permission mapper that only assigns the +"LoginPermission" if the identity has the "Administrator" role. Thus, authentication +will succeed if the IP address of the remote client matches the configured address.

+
+
+

It is also possible to configure an aggregate-role-decoder. This consists of +two or more role-decoder elements where each element is a reference to a configured +role decoder. Each role decoder will be applied and the returned value will be a union of +the roles returned by each decoder.

+
+
+

Example configuration:

+
+
+
+
/subsystem=elytron/source-address-role-decoder=decoder1:add(source-address="10.10.10.10", roles=["Administrator"])
+/subsystem=elytron/source-address-role-decoder=decoder2:add(source-address="12.12.12.12", roles=["Users"])
+/subsystem=elytron/aggregate-role-decoder=aggregateDecoder:add(role-decoders=[decoder1, decoder2])
+
+
+
+
+
+

4.4.3. Create an Elytron Permission Set

+
+

Permission sets can be used to assign permissions to an identity.

+
+
+

Adding a permission set takes the general form:

+
+
+
+
/subsystem=elytron/permission-set=PermissionSetName:add(permissions=[{class-name="...", module="...", target-name="...", action="..."}...])
+
+
+
+

where permissions consists of a set of permissions, where each permission has the following attributes:

+
+
+
    +
  • +

    class-name is the fully qualified class name of the permission. This is the only permission attribute that is required.

    +
  • +
  • +

    module is the optional module to use to load the permission.

    +
  • +
  • +

    target-name is the optional target name to pass to the permission as it is constructed.

    +
  • +
  • +

    action is the optional action to pass to the permission as it is constructed.

    +
  • +
+
+
+
+

4.4.4. Create an Elytron Permission Mapper

+
+

In addition to roles being assigned to a identity, permissions may also +be assigned. A permission mapper assigns permissions to an identity. +Permission mappers are also specifically typed based on their +functionality, for example logical-permission-mapper, +simple-permission-mapper, and custom-permission-mapper.

+
+
+

Adding a permission mapper takes the general form:

+
+
+
+
/subsystem=elytron/simple-permission-mapper=PermissionMapperName:add(...)
+
+
+
+
+

4.4.5. Create an Elytron Role Mapper

+
+

A role mapper maps roles after they have been decoded to other roles. +Examples include normalizing role names or adding and removing specific +roles from principals after they have been decoded. Role mappers are +also specifically typed based on their functionality, for example +add-prefix-role-mapper, add-suffix-role-mapper, and +constant-role-mapper.

+
+
+

Adding a role mapper takes the general form:

+
+
+
+
/subsystem=elytron/ROLEM-MAPPER-TYPE=roleMapperName:add(...)
+
+
+
+
+

4.4.6. Create an Elytron Security Domain

+
+

Security domains in the Elytron subsystem, when used in conjunction with +security realms, are use for both core management authentication as well +as for authentication with applications.

+
+
+

Adding a security domain takes the general form:

+
+
+
+
/subsystem=elytron/security-domain=domainName:add(realms=[{realm=realmName,role-decoder=roleDecoderName}],default-realm=realmName,permission-mapper=permissionMapperName,role-mapper=roleMapperName,...)
+
+
+
+
+

4.4.7. Create an Elytron Authentication Factory

+
+

An authentication factory is an authentication policy used for specific +authentication mechanisms. Authentication factories are specifically +based on the authentication mechanism, for example +http-authentication-factory and
+sasl-authentication-factory and kerberos-security-factory.

+
+
+

Adding an authentication factory takes the general form:

+
+
+
+
/subsystem=elytron/AUTH-FACTORY-TYPE=authFactoryName:add(....)
+
+
+
+
+

4.4.8. Create an Elytron Policy Provider

+
+

Elytron subsystem provides a specific resource definition that can be +used to configure a default ruby Policy provider. The subsystem allows +you to define multiple policy providers but select a single one as the +default:

+
+
+
+
/subsystem=elytron/policy=policy-provider-a:add(custom-policy=\[{name=policy-provider-a, class-name=MyPolicyProviderA, module=x.y.z}\])
+
+
+
+
+

4.4.9. Create an Elytron Case Principal Transformer

+
+

Principal transformers can take a name and map it to another representation of the name or perform +some normalisation. A case-principal-transformer converts a principal to upper or lower case. +As an example, we might want to convert our principal to upper case if the identities in our realm +are stored in upper case.

+
+
+

Adding a case-principal-transformer that converts a principal to upper/lower case takes the +general form:

+
+
+
+
/subsystem=elytron/case-principal-transformer=transformerName:add(upper-case="...")
+
+
+
+

In particular, a case-principal-transformer has the following attribute:

+
+
+
    +
  • +

    upper-case - A boolean value to indicate whether the principal should be converted to upper case. +Indicating false for this attribute converts the principal to lower case.

    +
  • +
+
+
+

For example, the following case-principal-transformer could be configured to specify that +a principal should be transformed to lower case:

+
+
+
+
/subsystem=elytron/case-principal-transformer=transformer1:add(upper-case="false")
+
+
+
+

On the other hand, a case-principal-transformer could be configured by omitting the +upper-case attribute, which is then set to true by default:

+
+
+
+
/subsystem=elytron/case-principal-transformer=transformer2:add()
+
+
+
+
+
+

4.5. Component Documentation

+
+

4.5.1. Security Realms

+
+

The primary responsibility of a security realm is the ability to load identities with associated attributes, these identities are then used within the authentication process for credential validation and subsequently wrapped to represent the SecurityIdentity instances using within applications for authorization.

+
+
+

Generally a security realm operates in one of three modes, in the first mode on loading an identity from its store the security realm also loads one or more credential representations from the store and holds these within the identity. During authentication the credentials within the identity can be used to verify the connection attempt. The reason multiple credentials are loaded is because specific types may be applicable to specific mechanisms so an appropriate credential representation can be selected at the time of authentication.

+
+
+

In the second mode the identity is loaded as in the first mode however no credentials are loaded, in this mode evidence can be passed in to the identity for verification. This mode is sometimes the only mode available where it is not possible to load the representation of a credential from its store.

+
+
+

In the third mode evidence is passed to the security realm and used to construct the resulting identity, this mode is predominantly used with certificate and token based authentication mechanisms where the verified certificate or token can be used to construct the resulting identity.

+
+
+

Once an identity has been loaded for authorization decisions the identity will have a set of associated attributes, these will subsequent be mapped using role decoders, role mappers, and permission mappers as required for identity specific authorization decisions.

+
+
+
+

4.5.2. Aggregate Security Realm

+
+

The aggregate security realm allows for two or more security realms to be aggregated into a single security realm allowing one to be used during the authentication steps and one or more to be used to assemble the identity used for authorization decisions and aggregating any associated attributes.

+
+
+

The aggregate-realm resource contains the following attributes: -

+
+
+
    +
  • +

    authentication-realm - This realm use used to load the credentials of the identity or perform evidence verification.

    +
  • +
  • +

    authorization-realm - The realm to use to load the identities attributes used for authorization.

    +
  • +
  • +

    authorization-realms - A list of one or more realms to use to load the identities attributes and aggregate into a single set of attributes.

    +
  • +
  • +

    principal-transformer - A principal transformer that can be used to transform the principal after loading the credentials +for authentication but before loading the identities attributes for authorization. This attribute is optional.

    +
  • +
+
+
+ + + + + +
+ + +authorization-realm and authorization-realms are mutually exclusive so exactly one of these must be specified. +
+
+
+
Defining a Simple Aggregation
+
+

Assuming two realms properties-realm and jdbc-realm already exist an aggregate-realm combining these two can be created with the following command.

+
+
+
+
/subsystem=elytron/aggregate-realm=combined:add(
+    authentication-realm=properties-realm,
+    authorization-realm=jdbc-realm)
+
+
+
+

Where this realm is used the properties-realm will be used to load an identity’s credentials and the jdbc-realm will be used to load the attributes for the identity.

+
+
+

The following command is exactly the same except the authorization-realms attribute is used instead.

+
+
+
+
/subsystem=elytron/aggregate-realm=combined:add(
+    authentication-realm=properties-realm,
+    authorization-realms=[jdbc-realm])
+
+
+
+

The following command will reference a principal transformer defined in the mappers configuration to be used to transform the principal +after authentication.

+
+
+
+
/subsystem=elytron/aggregate-realm=combined:add(
+    authentication-realm=properties-realm,
+    authorization-realms=[jdbc-realm],
+    principal-transformer=custom-transformer)
+
+
+
+
+
Aggregating Attributes
+
+

If a third realm ldap-realm also exists that shoud also be used for the loading of attributes an aggregate-realm can be defined using the following command: -

+
+
+
+
/subsystem=elytron/aggregate-realm=combined:add(
+    authentication-realm=properties-realm,
+    authorization-realms=[jdbc-realm, ldap-realm])
+
+
+
+

As before the properties-realm will be used to load the identity’s credentials or perform evidence verification but the attributes for the identity will be loaded both from the jdbc-realm and ldap-realm then combined together.

+
+
+

The approach taken to combine attributes makes use of the first instance of each attribute, if the same attribute is loaded by multiple realms only the first occurrence will be used. Later occurrences of an existing attribtue will be ignored.

+
+
+

As an example if the following attributes were loaded from the jdbc-realm: -

+
+ + ++++ + + + + + + + + + + + + + + + + +
Table 1. JDBC Attributes
ATTRIBUTEVALUES

e-mail

example@wildfly.org

groups

Supervisor, User

+
+

And the following attributes were loaded from the ldap-realm: -

+
+ + ++++ + + + + + + + + + + + + + + + + +
Table 2. LDAP Attributes
ATTRIBUTEVALUES

e-mail

administrator@wildfly.org

phone

0000 0000 0000

+
+

The resulting attributes would be: -

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + +
Table 3. Combined Attributes
ATTRIBUTEVALUES

e-mail

example@wildfly.org

groups

Supervisor, User

phone

0000 0000 0000

+
+
+
+

4.5.3. Filesystem Security Realm

+
+

The filesystem security realm is a security realm developed to support storing of identities in a filesystem with the option of associating multiple credentials and multiple attributes with each identity. Both credentials and attributes can contain multiple values.

+
+
+
Create and Populate Filesystem Security Realm
+
+

Every identity is stored in an XML file where the name of the file is the name of the identity. It is sufficient to just specify the path to the directory where identity files will be stored. There are other optional attributes.

+
+
+
    +
  • +

    path The actual filesystem path. Treated as an absolute path, unless the 'relative-to' attribute is specified, in which case the value is treated as relative to that path.

    +
  • +
  • +

    relative-to If 'relative-to' is provided, the value of the 'path' attribute is treated as relative to the path specified by this attribute.

    +
  • +
  • +

    levels The number of levels of directory hashing to apply. When this attribute is set to positive value, filesystem realm will store identities in directory structure where the name of subdirectories will be derived from first characters of identity name. For example, location of identity named "alex" could be a/l/alex.xml. This is useful not only because some filesystems can limit the amount of files that can be stored in a single directory, but also for performance reasons, because that might be influenced by the number of entries in a single directory as well. Default value is 2.

    +
  • +
  • +

    encoded When encoding is set to true, the identity names will be BASE32 encoded before they are used as filenames. This is beneficial, because some filesystems are case-insensitive or might restrict set of characters allowed in a filename. Default value is true.

    +
  • +
  • +

    hash-encoding specifies the string format for the password if it is not stored in plain text. Set to BASE64 bt default, but HEX is also supported.

    +
  • +
  • +

    hash-charset specifies the character set to use when converting the password string to a byte array. Set to UTF-8 by default.

    +
  • +
  • +

    credential-store specifies the credential store where the secret key is stored if the filesystem realm is to be encrypted. This attribute is optional.

    +
  • +
  • +

    secret-key specifies the alias of the secret key that is stored in the previously specified credential store. This attribute is optional.

    +
  • +
  • +

    key-store specifies the key store where the key pair is stored if the integrity is to be enabled on the filesystem realm. This attribute is optional.

    +
  • +
  • +

    key-store-alias specifies the alias of the key pair that is stored in the previously specified key store. This attribute is optional.

    +
  • +
+
+
+

Filesystem security realm can be added with WildFly management CLI or with Elytron API.

+
+
+
WildFly management CLI
+
+

The following command creates realm with name fsRealm that resides in directory fs-realm-users inside the base configuration directory defined by jboss.server.config.dir property. The levels number is 2 and encoded value is true. +The charset is UTF-8 and the string encoding is BASE64.

+
+
+

The credential-store being referenced is called mycredstore and the alias of the secret-key in that credential-store is key. The secret key will be used to encrypt and decrypt the filesystem realm.

+
+
+

The key-store being referenced is called keystore and the alias of the key pair in that key-store is localhost. The localhost key pair will be used to sign identity files and verify the pre-existing signatures to ensure that the filesystem realm has not been tampered with.

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:add(path=fs-realm-users, relative-to=jboss.server.config.dir, credential-store=mycredstore, secret-key=key, key-store=keystore, key-store-alias=localhost)
+
+
+
+ + + + + +
+ + +Although identities stored within the same realm can be hashed using different algorithms, they are all +hashed using the same character set and stored using the same string encoding across the whole realm. +
+
+
+

To add identity with the name "alex" to this filesystem realm:

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:add-identity(identity=alex)
+
+
+
+

To delete existing identity from filesystem realm:

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:remove-identity(identity=alex)
+
+
+
+

It’s possible to update the key-store or key-store-alias to use for integrity checking using the update-key-pair command as shown below. These commands will also update the signature in any existing identity files.

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:write-attribute(name=key-store, value=newKeystore)
+/subsystem=elytron/filesystem-realm=fsRealm:write-attribute(name=key-store-alias, value=newKeystoreAlias)
+/subsystem=elytron/filesystem-realm=fsRealm:update-key-pair()
+
+
+
+
+
Programmatic approach
+
+

When creating filesystem realm with Elytron API, you can specify name rewriter in the constructor. The name rewriter will be applied to identity names to transform them from one form to another. It can be used to normalize the case, trim extra whitespaces, map one naming scheme to another, remove realm component from identity name (e.g. "user@realm" to "user") or to perform validation step on the syntax of the name.

+
+
+

To enable encryption for a filesystem realm programmatically, you can specify a SecretKey when instantiating the realm.

+
+
+

To enable integrity for the filesystem realm programmatically, you can specify a PublicKey and PrivateKey when instantiating the realm.

+
+
+

A org.wildfly.security.auth.realm.FileSystemSecurityRealm can be instantiated using a builder() method as shown in the example below.

+
+
+
+
FileSystemSecurityRealm fsRealm = FileSystemSecurityRealm.builder()
+    .setRoot(fsRealmPath)
+    .setNameRewriter(IDENTITY_REWRITER)
+    .setLevels(2)
+    .setEncoded(true)
+    .setProviders(ELYTRON_PASSWORD_PROVIDERS)
+    .setSecretKey(secretKey)
+    .setPublicKey(publicKey)
+    .setPrivateKey(privateKey)
+    .build();
+
+
+
+

org.wildfly.security.auth.server.NameRewriter.IDENTITY_REWRITER is a simple identity name rewriter that does no rewriting. You can implement the NameRewriter interface and use your own rewriter.

+
+
+

Class org.wildfly.security.auth.principal.NamePrincipal represents principal comprised of a simple name. Handle for the identity can be obtained by passing the NamePrincipal instance to the getRealmIdentity or getRealmIdentityForUpdate method. Received identity for the given principal might or might not exist in the filesystem realm. Method exists can be called to check whether the received identity exists. If it does not, you cannot modify its credentials or attributes.

+
+
+

To add non existent identity to the filesystem realm, create method must be called. After this call, credentials and roles of this identity are empty. The exception will be thrown if method create is called on an existing identity.

+
+
+
+
ModifiableRealmIdentity modifiableIdentity = fsRealm.getRealmIdentityForUpdate(new NamePrincipal("alex"));
+if (!modifiableIdentity.exists()) {
+    modifiableIdentity.create();
+}
+
+
+
+

To obtain read only instance of identity:

+
+
+
+
RealmIdentity identity = fsRealm.getRealmIdentity(identityPrincipal);
+
+
+
+

To obtain identity that can be modified:

+
+
+
+
ModifiableRealmIdentity modifiableIdentity = fsRealm.getRealmIdentityForUpdate(identityPrincipal);
+
+
+
+

ModifiableRealmIdentity handle must be cleaned up by a call to dispose when the modifying is done:

+
+
+
+
modifiableIdentity.dispose();
+
+
+
+

To delete the identity from the realm:

+
+
+
+
identity.delete();
+
+
+
+
+
+
Credentials
+
+

Supported password types for identity in filesystem realm are Bcrypt, Clear, Simple Digest, Salted Simple Digest, Scram Digest, Digest and OTP.

+
+
+
WildFly management CLI
+
+

To set clear password to the identity:

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:set-password(clear={password="alexPassword"}, identity=alex)
+
+
+
+

The above command will store password in clear text in identity’s file. It is not recommended to use clear passwords in a production set up.

+
+
+

To set digest password to the identity:

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:set-password(digest={algorithm=digest-md5,password="demoPassword",realm=demoRealm},identity=alex)
+
+
+
+

Note: Operation set-password` replaces any existing credential(s) with the new value.

+
+
+
+
Programmatic approach
+
+

When using Elytron API, working with passwords require interaction with the org.wildfly.security.password.PasswordFactory API. Here is the simplest example that will store password in clear text in identity’s file. Examples on how to work with other types of passwords can be found in Passwords section of this documentation.

+
+
+
+
PasswordFactory passwordFactory = PasswordFactory.getInstance(ClearPassword.ALGORITHM_CLEAR);
+PasswordCredential clearPassword = new PasswordCredential(passwordFactory.generatePassword(new ClearPasswordSpec("alexPassword".toCharArray())));
+identity.setCredentials(Collections.singleton(clearPassword));
+
+
+
+

Note: Operation setCredentials replaces any existing credential(s) with the new value.

+
+
+
+
+
Attributes
+
+

Attributes associated with identities can be read and updated through CLI as well as programmatically.

+
+
+
WildFly management CLI
+
+

To add attribute to the identity, you have to specify the name of the attribute and its values (values are of type LIST):

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:add-identity-attribute(
+    identity="alex",
+    name=Email,
+    value=["alex@email.com", "alex_email@email.com"])
+{"outcome" => "success"}
+
+
+
+

To read the identity with its attributes:

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:read-identity(identity="alex")
+{
+    "outcome" => "success",
+    "result" => {
+        "name" => "alex",
+        "attributes" => {"Email" => [
+            "alex@email.com",
+            "alex_email@email.com"
+        ]}
+    }
+}
+
+
+
+

To remove individual values of the attribute:

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:remove-identity-attribute(
+    identity=alex,
+    name=Email,
+    value=[alex@email.com])
+{"outcome" => "success"}
+/subsystem=elytron/filesystem-realm=fsRealm:read-identity(identity="alex")
+{
+    "outcome" => "success",
+    "result" => {
+        "name" => "alex",
+        "attributes" => {"Email" => ["alex_email@email.com"]}
+    }
+}
+
+
+
+

To remove the whole attribute:

+
+
+
+
/subsystem=elytron/filesystem-realm=fsRealm:remove-identity-attribute(identity=alex, name=Email)
+{"outcome" => "success"}
+/subsystem=elytron/filesystem-realm=fsRealm:read-identity(identity=alex)
+{
+    "outcome" => "success",
+    "result" => {
+        "name" => "alex",
+        "attributes" => undefined
+    }
+}
+
+
+
+
+
Programmatic approach
+
+

Interface org.wildfly.security.authz.Attributes represents collection of string attributes. To get attributes associated with specific identity:

+
+
+
+
Attributes identityAttributes = identity.getAttributes();
+
+
+
+

To update attributes you can use ModifiableRealmIdentity instance. Class org.wildfly.security.authz.MapAttributes represents collection of attributes backed by java.util.Map:

+
+
+
+
ModifiableRealmIdentity modifiableIdentity = fsRealm.getRealmIdentityForUpdate(identityPrincipal);
+MapAttributes attributes = new MapAttributes();
+attributes.addLast("email","alex@email.com");
+modifiableIdentity.setAttributes(attributes);
+modifiableIdentity.dispose();
+
+
+
+
+
+
Converting legacy properties file into Filesystem realm
+
+

WildFly can use authentication with a properties file based identity store. One properties file maps users to passwords and another maps users to roles. You can use Elytron Tool to convert these properties files into a filesystem realm. Below is an example of how to run this tool from the command line:

+
+
+
+
$JBOSS_HOME/bin/elytron-tool.sh filesystem-realm -u conf/users.properties -r conf/roles.properties --output-location realms/example --summary -f example-fs-realm
+
+
+
+

This command creates new filesystem realm with users taken from users.properties file and roles taken from roles.properties file. Script example-fs-realm.sh that contains the commands for WildFly CLI is generated as well. The script adds this filesystem realm to the Elytron subsystem and also adds new security domain that uses this filesystem realm as a default realm.

+
+
+
+
Converting an unencrypted filesystem realm into an encrypted filesystem realm
+
+

It is possible to convert an unencrypted filesystem realm into an encrypted one using the Elytron Tool. In particular, the filesystem-realm-encrypt command can be used as shown below:

+
+
+
+
$JBOSS_HOME/bin/elytron-tool.sh filesystem-realm-encrypt -i ./standalone/configuration/fs-realm-plain -o ./standalone/configuration/fs-realm-enc -c ./mycredstore.cs
+
+
+
+

This command creates a new filesystem realm by taking the existing filesystem realm from the specified input location, ./standalone/configuration/fs-realm-plain, and encrypting its contents using the secret key with alias key from the specified credential store, ./mycredstore.cs. The new filesystem realm is stored in the specified output location, ./standalone/configuration/fs-realm-enc.

+
+
+

A .cli script will also be generated at the root of the filesystem realm. The script contains WildFly CLI commands that can be used to configure a secret-key-credential-store resource and a filesystem-realm resource in the Elytron subsystem that makes use of the newly encrypted realm content.

+
+
+
+
+

4.5.4. JDBC Security Realm

+
+

The JDBC security realm is a security realm developed to support loading identities from a database with the option of multiple credentials and multiple attributes each with the option of containing multiple values.

+
+
+

When defining the JDBC security realm one or more principal queries can be defined, each of these can load a credential and / or attributes for the resulting identity. Each defined principal query is associated with it’s own datasource, this means quite a complex configuration can be created loading the different aspects of an identity from multiple locations.

+
+
+

Each of the examples documented within this section will be making use of pre-configured datasources, please refer to the datasources subsystem documentation for more information relating to how to define datasources.

+
+
+
Loading a Single Clear Text Password
+
+

The simplest configuration is to load a clear text password for an identity. This approach would not be recommended at all in a production set up, however it does make a suitable starting point to illustrate how the JDBC security realm can be configured.

+
+ + ++++ + + + + + + + + + + + + +
Table 4. Example Table
NAMEPASSWORD

test

myPassword

+
+

A JDBC security realm can be defined as: -

+
+
+
+
/subsystem=elytron/jdbc-realm=demo-realm:add(
+    principal-query=[{data-source=Identities,
+                      sql="select PASSWORD from IDENTITIES where NAME = ?",
+                      clear-password-mapper={password-index=1}}])
+
+
+
+

This realm is defined within a single principal-query against the Identities datasource. For the user test the result of the query would be: -

+
+ + +++ + + + + + + + + + + +
Table 5. Query Results
1

myPassword

+
+

The principal query can be defined with password mappers which define which columns should be used to construct the password for the identity being loaded, in this example a clear-password-mapper is used: -

+
+
+
+
clear-password-mapper={password-index=1}
+
+
+
+ + + + + +
+ + +The index of the first column is 1 +
+
+
+
+
Alternative Password Mappers
+
+

The WildFly Elytron project supports a variety of password types as described within Passwords, some of these password types require multiple values to be loaded from the database to reconstruct the password so alternative password mappers are made available. More than one password mapper can be defined on a single principal-query to support loading multiple passwords simultaneously.

+
+
+ + + + + +
+ + +Where the various password mappers load encoded representations of passwords and salts from the database these can either be encoded using Base64 or Hexadecimal, by default unless specified Base64 is assumed. +
+
+
+
clear-password-mapper
+
+

This mapper is used to load a clear text password directly from the database.

+
+
+

The following attribute is supported for this password mapper: -

+
+
+
    +
  • +

    password-index - The index of the column containing the clear text password.

    +
  • +
+
+
+
+
bcrypt-password-mapper
+
+

The bcrypt-password-mapper can be used for passwords to be loaded using the bcrypt algorithm, as an iterated salted password type the iteration count and salt are also loaded from the database query.

+
+
+
    +
  • +

    password-index - The index of the column containing the encoded password.

    +
  • +
  • +

    hash-encoding - The encoding of the hash, either base64 or hex.

    +
  • +
  • +

    salt-index - The index of the column containing the encoded salt.

    +
  • +
  • +

    salt-encoding - The encoding of the salt, either base64 or hex.

    +
  • +
  • +

    iteration-count-index - The index of the column containing the iteration count.

    +
  • +
+
+
+
+
modular-crypt-mapper
+
+

The modular-crypt-mapper can be used for passwords encoded using modular crypt, this encoding allows for multiple pieces of information to be encoded in single String such as the password type, the hash or digest, the salt, and the iteraction count.

+
+
+

Information on how to encode and decode modular crypt representations can be seen in Modular Crypt Encoding.

+
+
+

The following attribute is supported for this password mapper: -

+
+
+
    +
  • +

    password-index - The index of the column containing the modular crypt encoded password.

    +
  • +
+
+
+
+
salted-simple-digest-mapper
+
+

The salted-simple-digest-mapper supports the password types hashed with a salt as described in Salted Digest, for this type of password the encoded form of the password is loaded in addition to the salt.

+
+
+
    +
  • +

    algorithm - The algorithm of the password type, the supported values are listed at Salted Digest.

    +
  • +
  • +

    password-index - The index of the column containing the encoded password.

    +
  • +
  • +

    hash-encoding - The encoding of the hash, either base64 or hex.

    +
  • +
  • +

    salt-index - The index of the column containing the encoded salt.

    +
  • +
  • +

    salt-encoding - The encoding of the salt, either base64 or hex.

    +
  • +
+
+
+
+
simple-digest-mapper
+
+

The simple-digest-mapper supports the loading of passwords which have been simply hashed without any salt as described in Simple Digest.

+
+
+
    +
  • +

    algorithm - The algorithm of the password type, the supported values are listed at Simple Digest.

    +
  • +
  • +

    password-index - The index of the column containing the encoded password.

    +
  • +
  • +

    hash-encoding - The encoding of the hash, either base64 or hex.

    +
  • +
+
+
+
+
scram-mapper
+
+

The scram-mapper supports the loading of SCRAM passwords which use both a salt and an interation count as described in Scram.

+
+
+
    +
  • +

    algorithm - The algorithm of the password type, the supported values are listed at Scram.

    +
  • +
  • +

    password-index - The index of the column containing the encoded password.

    +
  • +
  • +

    hash-encoding - The encoding of the hash, either base64 or hex.

    +
  • +
  • +

    salt-index - The index of the column containing the encoded salt.

    +
  • +
  • +

    salt-encoding - The encoding of the salt, either base64 or hex.

    +
  • +
  • +

    iteration-count-index - The index of the column containing the iteration count.

    +
  • +
+
+
+
+
+
Hash Character Sets
+
+

The various password mappers allow loading multiples values from the database to hash the client provided password in order +to compare against the password stored in the database.

+
+
+

The JDBC realm supports specifying the character set via the attribute hash-charset to use when converting +the client provided password string to a byte array. This is useful when our database is storing +hashed passwords using a charset other than UTF-8, as the JDBC realm assumes that is the charset being used by default.

+
+
+ + + + + +
+ + +Although more than one password mapper can be defined on a single principal-query, only one hash-charset +can be defined across the whole realm. +
+
+
+

For example, the following JDBC realm is configured using the GB2312 charset:

+
+
+
+
 /subsystem=elytron/jdbc-realm=exampleDbRealm:add(principal-query=[{sql="SELECT password FROM all_users WHERE user=?",data-source=exampleDS,simple-digest-mapper={algorithm=password-salt-digest-md5,password-index=1}}])
+
+
+
+
+
Using a Hashed Password Representation
+
+

The same approach can be taken for all hashed password representations, for illustration purposes this section will illustrate how a bcrypt password can be prepared to be stored in a database and the subsequent realm configuration to make use of it. Examples uising the APIs for the different password types can be found in the Passwords section of this documentation.

+
+
+

The following example takes the password myPassword, generates a random salt an produces a bcrypt representation of the password.

+
+
+
+
static final Provider ELYTRON_PROVIDER = new WildFlyElytronProvider();
+
+static final String TEST_PASSWORD = "myPassword";
+
+public static void main(String[] args) throws Exception {
+    PasswordFactory passwordFactory = PasswordFactory.getInstance(BCryptPassword.ALGORITHM_BCRYPT, ELYTRON_PROVIDER);
+
+    int iterationCount = 10;
+
+    byte[] salt = new byte[BCryptPassword.BCRYPT_SALT_SIZE];
+    SecureRandom random = new SecureRandom();
+    random.nextBytes(salt);
+
+    IteratedSaltedPasswordAlgorithmSpec iteratedAlgorithmSpec = new IteratedSaltedPasswordAlgorithmSpec(iterationCount, salt);
+    EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(TEST_PASSWORD.toCharArray(), iteratedAlgorithmSpec);
+
+    BCryptPassword original = (BCryptPassword) passwordFactory.generatePassword(encryptableSpec);
+
+    byte[] hash = original.getHash();
+
+    Encoder encoder = Base64.getEncoder();
+    System.out.println("Encoded Salt = " + encoder.encodeToString(salt));
+    System.out.println("Encoded Hash = " + encoder.encodeToString(hash));
+}
+
+
+
+

This produces the following output, as the salt is randomly generated the output would differ each time the above code is executed.

+
+
+
+
Encoded Salt = 3bFOQwRU75to+yJ8Cv0g8w==
+Encoded Hash = x9P/0cxfNz+Pf3HCinZ3dLCbNMnBeiU=
+
+
+
+

This could now be stored in a database table: -

+
+ + ++++++ + + + + + + + + + + + + + + + + +
Table 6. Example Table
NAMEPASSWORDSALTITERATION_COUNT

test

x9P/0cxfNz+Pf3HCinZ3dLCbNMnBeiU=

3bFOQwRU75to+yJ8Cv0g8w==

10

+
+

The JDBC security realm can instead be created with the following CLI command: -

+
+
+
+
/subsystem=elytron/jdbc-realm=demo-realm:add(
+    principal-query=[{data-source=Identities,
+                      sql="select PASSWORD, SALT, ITERATION_COUNT from IDENTITIES where NAME = ?",
+                      bcrypt-mapper={password-index=1, salt-index=2, iteration-count-index=3}}])
+
+
+
+

For the user test the result of the query would be: -

+
+ + +++++ + + + + + + + + + + + + + + +
Table 7. Query Results
123

x9P/0cxfNz+Pf3HCinZ3dLCbNMnBeiU=

3bFOQwRU75to+yJ8Cv0g8w==

10

+
+

The bcrypt-password-mapper is defined to load the encoded password, encoded salt and iteration count from the relevent columns in the query result.

+
+
+
+
bcrypt-mapper={password-index=1, salt-index=2, iteration-count-index=3}
+
+
+
+

Had the values been encoding using hexadecimal instead of Base64 the bcrypt-mapper could have been defined as: -

+
+
+
+
bcrypt-mapper={password-index=1, hash-encoding=hex, salt-index=2, salt-encoding=hex, iteration-count-index=3}
+
+
+
+ + + + + +
+ + +It is worth noting that as the hash-encoding and salt-encoding are specified separately one could use Base64 whilst the other uses hexadecimal. +
+
+
+
+
Loading Passwords from Different Queries / Datasources
+
+

It is also possible to combine both of the example so far and define two separate principal-query instances to attempt to load both password types from different locations.

+
+
+

Here is an example configuration loading a clear text password from one datasource / table and loading a bcrypt password from a second datasource / table.

+
+
+
+
/subsystem=elytron/jdbc-realm=demo-realm:add(
+    principal-query=[
+        {data-source=LegacyIdentities,
+         sql="select PASSWORD from LEGACY_IDENTITIES where NAME = ?",
+         clear-password-mapper={password-index=1}},
+        {data-source=NewIdentities,
+         sql="select PASSWORD, SALT, ITERATION_COUNT from NEW_IDENTITIES where NAME = ?",
+         bcrypt-mapper={password-index=1, salt-index=2, iteration-count-index=3}}
+                    ])
+
+
+
+ + + + + +
+ + +It is not required that the identity is found from both of the queries, this can be useful in situations where identities are being migrated from one location to another or for aggregating two together. +
+
+
+
+
Loading Attributes
+
+

The examples so far have focussed on the loading of passwords from the database, the principal queries can also be used to load attributes for the resulting identities.

+
+
+

The loading of attributes can either be defined to happen within the principal queries being used to load the passwords or attribute specific principal queries can be defined, as each principal-query can be defined with it’s own datasource reference this means attributes can also be loaded from alternative locations.

+
+
+

The loaded attributes can then be used for mapping to roles and permissions which should be granted to the identity or they can be obtained programatically within the deployment to identify information about the currently authenticated identity.

+
+
+
Loading Attributes with Passwords
+
+

For single valued attributes these can often be loaded using the same principal-query used to load an identities password, as an example if an identities e-mail address or department is to be loaded from the database these can be loaded at the same time as the password.

+
+
+

A table for this example could look like: -

+
+ + ++++++ + + + + + + + + + + + + + + + + +
Table 8. Example Table
NAMEPASSWORDE_MAILDepartment

test

myPassword

test@example.com

Sales

+
+

The realm can now be defined as: -

+
+
+
+
/subsystem=elytron/jdbc-realm=demo-realm:add(
+    principal-query=[
+        {data-source=Identities,
+         sql="select PASSWORD, E_MAIL, DEPARTMENT from IDENTITIES where NAME = ?",
+         clear-password-mapper={password-index=1},
+         attribute-mapping=[{index=2, to=email},{index=3,to=department}]
+        }])
+
+
+
+

For the user test the result of the query would be: -

+
+ + +++++ + + + + + + + + + + + + + + +
Table 9. Query Results
123

myPassword

test@example.com

Sales

+
+

The configuration contained the following attribute mappings: -

+
+
+
+
attribute-mapping=[{index=2, to=email},{index=3,to=department}]
+
+
+
+

This means the contents of column 2 will be mapped to the email attribute and the contents of column 3 will be mapped to the department attribute.

+
+
+
+
Loading Attributes Separately.
+
+

For multi-valued attributes such as a list of groups it can often make sense to define a separate principal query.

+
+
+

A list of groups could be represented as follows in a table.

+
+ + ++++ + + + + + + + + + + + + + + + + +
Table 10. Example Table
NAMETEAM

test

Users

test

Supervisors

+
+

A realm can now be defined with a second principal query to load the groups into an attribute.

+
+
+
+
/subsystem=elytron/jdbc-realm=demo-realm:add(
+    principal-query=[
+        {data-source=Identities,
+         sql="select PASSWORD from IDENTITIES where NAME = ?",
+         clear-password-mapper={password-index=1}
+        },{data-source=Identities,
+         sql="select TEAM from MEMBERSHIP where NAME = ?",
+         attribute-mapping=[{index=1, to=groups}]
+        }])
+
+
+
+

Within this definition the second principal-query will load the attribute groups: -

+
+
+
+
{data-source=Identities,
+ sql="select TEAM from MEMBERSHIP where NAME = ?",
+ attribute-mapping=[{index=1, to=groups}]
+}
+
+
+
+

For the user test the results would be: -

+
+ + +++ + + + + + + + + + + + + + +
Table 11. Query Results
1

Users

Supervisors

+
+

The end result would be that the identity contains the attribute groups with the values Users, and Supervisors

+
+
+
+
+
+

4.5.5. JAAS Security Realm

+
+

A JAAS realm utilizes a LoginContext initialized from a JAAS configuration file to authenticate and authorize users with custom Login Modules. Flags and options can be specified in a JAAS configuration file according to the Java documentation.

+
+
+

The jaas-realm resource contains the following attributes: -

+
+
+
    +
  • +

    entry JAAS configuration file entry name

    +
  • +
  • +

    path Path to the JAAS configuration file. You can also specify the location of the configuration with java system property "java.security.auth.login.config" or with java security property "login.config.url"

    +
  • +
  • +

    relative-to Optional base folder for the path.

    +
  • +
  • +

    module The WildFly module with Login Module implementations and Callback Handler implementation.

    +
  • +
  • +

    callback-handler Callback handler to use with the Login Context. Security property "auth.login.defaultCallbackHandler" can be used instead. The default callback handler of the realm will be used if none of these are defined.

    +
  • +
+
+
+

All attributes but entry are optional.

+
+
+

Example of jaas-realm configuration via WildFly CLI:

+
+
+
+
/subsystem=elytron/jaas-realm=theRealm:add(
+    entry=Entry1,
+    path=/path/to/jaas/config/JAASConfig.conf,
+    module=myLoginModule,
+    callback-handler=my.custom.MyCallbackHandler)
+
+
+
+
Subject’s Principals to attributes mapping
+
+

Login Modules use Subjects to represent the user currently being authenticated. Subject’s +principals are mapped to user’s attributes with the following rule:

+
+
+
    +
  • +

    key of the attribute is principal’s simple classname, so the value of principal.getClass().getSimpleName())

    +
  • +
  • +

    value is principal’s name, so the result of principal.getName() call. For principals of the same type / key, the values will be appended to the collection under this attribute key.

    +
  • +
+
+
+

Attributes can be used to associate roles in the Elytron subsystem. Roles is the default attribute name used for this purpose. You can configure a role-decoder to use a different attribute. This means you can add roles to authenticated user by associating principals with the Subject in a Login Module imlpementations.

+
+
+
+
+
+
+
+

5. Using Elytron within WildFly

+
+
+

5.1. Using the Out of the Box Elytron Components

+
+

5.1.1. Securing Management Interfaces

+
+

You can find more details on the enabling WildFly to use the out of the +box Elytron components for securing the management interfaces in the +Default +Management Authentication Configuration section.

+
+
+
+

5.1.2. Securing Applications

+
+

The elytron subsystem provides application-security-domain by +default which can be used to secure applications. For more details on +how application-security-domain is configured, see the +Default +Application Authentication Configuration section.

+
+
+

To configure applications to use application-security-domain, see +Set Up and Configure Authentication for Applications. You +can also override the default behavior of all applications using the +steps in +Override an Application’s Authentication Configuration.

+
+
+
+

5.1.3. Using SSL/TLS

+
+

WildFly does provide a default one-way SSL/TLS configuration using the +legacy core management authentication but does not provide one in the +elytron subsystem. You can find more details on configuring SSL/TLS +using the elytron subsystem for both the management interfaces as well +as for applications in +Configure +SSL/TLS

+
+
+
+

5.1.4. Using Elytron with Other Subsystems

+
+

In addition to securing applications and management interfaces, Elytron +also integrates with other subsystems in WildFly.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SubsystemDetails

batch-jberet

You can configure the batch-jberet to run batch jobs +using an Elytron security domain.

datasources

You can use a credential store or an Elytron security +domain to provide authentication information in a datasource definition.

messaging-activemq

You can secure remote connections to the remote +connections used by the messaging-activemq subsystem.

iiop-openjdk

You can use the elytron subsystem to configure SSL/TLS +between clients and servers using the iiop-openjdk subsystem.

mail

You can use a credential store to provide authentication +information in a server definition in the mail subsystem.

undertow

You can use the elytron subsystem to configure both SSL/TLS +and application authentication.

+
+
+
+

5.2. Undertow Subsystem

+
+

As a web application is deployed the name of the security domain required by that application will be identified, this will either be from within the deployment or if the deployment does not have a security domain the default-security-domain as defined on the Undertow subsystem will be assumed. An application-security-domain resource can be added to the Undertow subsystem which maps from the name of the security domain required by the application to the appropriate WildFly Elytron configuration.

+
+
+

As an example in it’s simplest form a mapping can be added as: -

+
+
+
+
/subsystem=undertow/application-security-domain=MyAppSecurity:add(security-domain=ApplicationDomain)
+
+
+
+

Which results in: -

+
+
+
+
<subsystem xmlns="urn:jboss:domain:undertow:7.0" ... default-security-domain="other">
+...
+    <application-security-domains>
+        <application-security-domain name="MyAppSecurity" security-domain="ApplicationDomain"/>
+    </application-security-domains>
+...
+</subsystem>
+
+
+
+

Note: If the deployment was already deployed at this point the +application server should be reloaded or the deployment redeployed for +the application security domain mapping to take effect.

+
+
+

Here we are mapping from the applications security domain MyAppSecurity to the WildFly Elytron defined domain ApplicationDomain.

+
+
+

This simple form is suitable where a deployment is using the standard HTTP mechanisms as defined within the Servlet specification i.e. BASIC, CLIENT_CERT, DIGEST, FORM and authentication will be performed against the ApplicationDomain security domain. This form is also suitable where an application is not using any authentication mechanisms and instead is using programatic authentication or even wishes to obtain the SecurityDomain associated with the deployment and use it directly.

+
+
+

An advanced form of the mapping can be added as: -

+
+
+
+
/subsystem=undertow/application-security-domain=MyAppSecurity:add(http-authentication-factory=application-http-authentication)
+
+
+
+

Which results in: -

+
+
+
+
<subsystem xmlns="urn:jboss:domain:undertow:7.0" ... default-security-domain="other">
+...
+    <application-security-domains>
+        <application-security-domain name="MyAppSecurity" http-authentication-factory="application-http-authentication"/>
+    </application-security-domains>
+...
+</subsystem>
+
+
+
+

In this form of the configuration instead of referencing a security domain a http-authentication-factory is referenced instead, this is the factory that will be used to obtain the instances of the authentication mechansisms and is in turn associated with the security domain. The standard mechanisms as defined in the Servlet specification can be used in this way but this approach also allows for other mechanisms to be used such as SPNEGO which requires additional configuration or even plug-in custom mechanism implementations.

+
+
+

When the advanced form of the mapping is used a further configuration option is available: -

+
+
+
    +
  • +

    override-deployment-config

    +
  • +
+
+
+

The referenced http-authentication-factory can return a complete set of authentication mechanisms, by default these are filtered to just match the mechanisms requested by the application - if this option is set to true then the mechanisms offered by the factory will override the mechanisms requested by the application. One example of where this could be useful is say an application has been developed to support FORM authentication, by overriding the mechanisms the application could be updated to support SPNEGO, and FORM authentication without any modifications to the deployment.

+
+
+

The application-security-domain resource also has one additional option enable-jacc, if this is set to true JACC will be enabled for any deployments matching against this mapping.

+
+
+

5.2.1. Runtime Information

+
+

Where an application-security-domain mapping is in use it can be useful to double check that deployments did match against it as expected, if the resource is read with include-runtime=true the deployments that are associated with the mapping will also be shown: -

+
+
+
+
[standalone@localhost:9990 /] /subsystem=undertow/application-security-domain=MyAppSecurity:read-resource(include-runtime=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "enable-jacc" => false,
+        "http-authentication-factory" => undefined,
+        "override-deployment-config" => false,
+        "referencing-deployments" => ["simple-webapp.war"],
+        "security-domain" => "ApplicationDomain",
+        "setting" => undefined
+    }
+}
+
+
+
+

In this output the referencing-deployments attribute shows that the deployment simple-webapp.war has been deployed using this mapping.

+
+
+
+
+

5.3. Jakarta Enterprise Beans Subsystem

+
+

Configuration can be added to the Jakarta Enterprise Beans subsystem to map a security domain +name referenced in a deployment to an Elytron security domain:

+
+
+
+
/subsystem=ejb3/application-security-domain=MyAppSecurity:add(security-domain=ApplicationDomain)
+
+
+
+

Which results in:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:ejb3:5.0">
+...
+    <application-security-domains>
+        <application-security-domain name="MyAppSecurity" security-domain="ApplicationDomain"/>
+    </application-security-domains>
+...
+</subsystem>
+
+
+
+

Note: If the deployment was already deployed at this point the +application server should be reloaded or the deployment redeployed for +the application security domain mapping to take effect.

+
+
+

An application-security-domain has two main attributes:

+
+
+
    +
  • +

    name - the name of the security domain as specified in a deployment

    +
  • +
  • +

    security-domain - a reference to the Elytron security domain that +should be used

    +
  • +
+
+
+

There is another attribute called legacy-compliant-principal-propagation. +If it is set to true and there is no incoming run-as identity, +then the principal of the local unsecured bean is the current authenticated identity. This was the case +for legacy PicketBox security. If this attribute is set to false, the behaviour will comply with the Elytron’s previous +behaviour and if there is no incoming run-as identity then the principal of the local unsecured bean is anonymous. +This attribute is optional and the default value is true.

+
+
+

When an application security domain mapping is configured for a bean in +a deployment, this indicates that security should be handled by Elytron.

+
+
+
+

5.4. WebServices Subsystem

+
+

There is adapter in webservices subsystem to make authentication works +for elytron security domain automatically. Like configure with legacy +security domain, you can configure elytron security domain in deployment +descriptor or annotation to secure webservice endpoint.

+
+
+

When Elytron security is enabled, JAAS subject or principal can be pushed +to jbossws-cxf endpoint’s SecurityContext to propagate authenticated +identity to Jakarta Enterprise Beans container. Here is a CXF interceptor example to +propagate authenticated information to Jakarta Enterprise Beans container :

+
+
+
+
public class PropagateSecurityInterceptor extends WSS4JInInterceptor {
+
+   public PropagateSecurityInterceptor() {
+      super();
+      getAfter().add(PolicyBasedWSS4JInInterceptor.class.getName());
+   }
+
+   @Override
+   public void handleMessage(SoapMessage message) throws Fault {
+      ...
+      final Endpoint endpoint = message.getExchange().get(Endpoint.class);
+      final SecurityDomainContext securityDomainContext = endpoint.getSecurityDomainContext();
+      //push subject principal retrieved from CXF to ElytronSecurityDomainContext
+      securityDomainContext.pushSubjectContext(subject, principal, null)
+   }
+
+}
+
+
+
+
+
+
+

6. Client Authentication with Elytron Client

+
+
+

WildFly Elytron uses the Elytron Client project to enable remote clients +to authenticate using Elytron. Elytron Client has the following +components:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
ComponentDescription

Authentication Configuration

Contains authentication information such +as usernames, passwords, allowed SASL mechanisms, and the security realm +to use during digest authentication.

MatchRule

Rule used for deciding which authentication configuration to +use.

Authentication Context

Set of rules and authentication configurations +to use with a client for establishing a connection.

+
+

When a connection is established, the client makes use of an +authentication context, which gives rules that match which +authentication configuration is used with an outbound connection. For +example, you could have a rule that use one authentication +configuration when connecting to server1 and another authentication +configuration when connecting with server2. The authentication context +is comprised of a set of authentication configurations and a set of +rules that define how they are selected when establishing a connection. +An authentication context can also reference ssl-context and can be +matched with rules.

+
+
+

To create a client that uses security information when establishing a +connection:

+
+
+
    +
  • +

    Create one or more authentication configurations.

    +
  • +
  • +

    Create an authentication context by creating rule and authentication +configuration pairs.

    +
  • +
  • +

    Create a runnable for establishing your connection.

    +
  • +
  • +

    Use your authentication context to run your runnable.

    +
  • +
+
+
+

When you establish your connection, Elytron Client will use the set of +rules provided by the authentication context to match the correct +authentication configuration to use during authentication.

+
+
+

You can use one of the following approaches to use security information +when establishing a client connection.

+
+
+

IMPORTANT: When using Elytron Client to make Jakarta Enterprise Beans calls, any hard-coded +programatic authentication information, such as setting +Context.SECURITY_PRINCIPAL in the javax.naming.InitialContext, will +override the Elytron Client configuration.

+
+
+

6.1. The Configuration File Approach

+
+

The configuration file approach involves creating an XML file with your +authentication configuration, authentication context, and match rules.

+
+
+

custom-config.xml

+
+
+
+
<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <authentication-rules>
+            <rule use-configuration="monitor">
+                <match-host name="127.0.0.1" />
+            </rule>
+            <rule use-configuration="administrator">
+                <match-host name="localhost" />
+            </rule>
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="monitor">
+                <allow-sasl-mechanisms names="DIGEST-MD5" />
+                 <use-service-loader-providers />
+                 <set-user-name name="monitor" />
+                 <credentials>
+                     <clear-password password="password1!" />
+                 </credentials>
+                 <set-mechanism-realm name="ManagementRealm" />
+             </configuration>
+
+             <configuration name="administrator">
+                <allow-sasl-mechanisms names="DIGEST-MD5" />
+                 <use-service-loader-providers />
+                 <set-user-name name="administrator" />
+                 <credentials>
+                     <clear-password password="password1!" />
+                 </credentials>
+                 <set-mechanism-realm name="ManagementRealm" />
+             </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+

The above example shows how the password for authentication can be specified in the clear. However, it’s also possible +to use a masked password instead.

+
+
+

custom-config.xml

+
+
+
+
<configuration>
+    <authentication-client xmlns="urn:elytron:1.4">
+        <authentication-rules>
+            <rule use-configuration="monitor">
+                <match-host name="127.0.0.1" />
+            </rule>
+            <rule use-configuration="administrator">
+                <match-host name="localhost" />
+            </rule>
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="monitor">
+                <allow-sasl-mechanisms names="DIGEST-MD5" />
+                 <use-service-loader-providers />
+                 <set-user-name name="monitor" />
+                 <credentials>
+                     <masked-password iteration-count="100" salt="12345678" masked-password="/Nym2s/dssMrabfdIGsZfQ==" />
+                 </credentials>
+                 <set-mechanism-realm name="ManagementRealm" />
+             </configuration>
+
+             <configuration name="administrator">
+                <allow-sasl-mechanisms names="DIGEST-MD5" />
+                 <use-service-loader-providers />
+                 <set-user-name name="administrator" />
+                 <credentials>
+                     <masked-password iteration-count="100" salt="12345678" masked-password="/Nym2s/dssMrabfdIGsZfQ==" />
+                 </credentials>
+                 <set-mechanism-realm name="ManagementRealm" />
+             </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+

You can then reference that file in your client’s code by setting a system property when running your client.

+
+
+
+
$ java -Dwildfly.config.url=/path/to/the.xml .....
+
+
+
+

IMPORTANT: If you use the +The +Programmatic Approach, it will override any provided configuration +files even if the wildfly.config.url system property is set.

+
+
+

When creating rules, you can look for matches on various parameters such +as hostname, port, protocol, or username. A full list of options for +MatchRule are available in the +Javadocs. +Rules are evaluated in the order in which they are configured.

+
+
+

Common Rules

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RuleDescription

match-domain

Takes a single name attribute specifying the security +domain to match against.

match-host

Takes a single name attribute specifying the hostname to +match against. For example, the host 127.0.0.1 would match on +http://127.0.0.1:9990/my/path .

match-no-user

Matches against URIs with no user.

match-path

Takes a single name attribute specifying the path to match +against. For example, the path /my/path/ would match on +http://127.0.0.1:9990/my/path .

match-port

Takes a single name attribute specifying the port to match +against. For example, the port 9990 would match on +http://127.0.0.1:9990/my/path .

match-protocol

Takes a single name attribute specifying the protocol +to match against. For example, the protocol http would match on +http://127.0.0.1:9990/my/path .

match-purpose

Takes a names attribute specifying the list of purposes +to match against.

match-urn

Takes a single name attribute specifying the URN to match +against.

match-user

Takes a single name attribute specifying the user +to match against.

+
+
+

6.2. The Programmatic Approach

+
+

The programatic approach configures all the Elytron Client configuration +in the client’s code:

+
+
+
+
//create your authentication configuration
+AuthenticationConfiguration adminConfig =
+    AuthenticationConfiguration.empty()
+      .useProviders(() -> new Provider[] { new WildFlyElytronProvider() })
+      .allowSaslMechanisms("DIGEST-MD5")
+      .useRealm("ManagementRealm")
+      .useName("administrator")
+      .usePassword("password1!");
+ 
+//create your authentication context
+AuthenticationContext context = AuthenticationContext.empty();
+context = context.with(MatchRule.ALL.matchHost("127.0.0.1"), adminConfig);
+ 
+ 
+//create your runnable for establishing a connection
+Runnable runnable =
+    new Runnable() {
+      public void run() {
+        try {
+           //Establish your connection and do some work
+        } catch (Exception e) {
+          e.printStackTrace();
+        }
+      }
+    };
+ 
+//use your authentication context to run your client
+context.run(runnable);
+
+
+
+

The above example shows how the password for authentication can be specified in the clear. However, it’s also possible +to use a masked password instead.

+
+
+
+
//create your authentication configuration
+AuthenticationConfiguration adminConfig =
+    AuthenticationConfiguration.empty()
+      .useProviders(() -> new Provider[] { new WildFlyElytronProvider() })
+      .allowSaslMechanisms("DIGEST-MD5")
+      .useRealm("ManagementRealm")
+      .useName("administrator")
+      .usePassword("/Nym2s/dssMrabfdIGsZfQ==", null, null, "100", "12345678", null);
+ 
+//create your authentication context
+AuthenticationContext context = AuthenticationContext.empty();
+context = context.with(MatchRule.ALL.matchHost("127.0.0.1"), adminConfig);
+ 
+ 
+//create your runnable for establishing a connection
+Runnable runnable =
+    new Runnable() {
+      public void run() {
+        try {
+           //Establish your connection and do some work
+        } catch (Exception e) {
+          e.printStackTrace();
+        }
+      }
+    };
+ 
+//use your authentication context to run your client
+context.run(runnable);
+
+
+
+

When adding configuration details to AuthenticationConfiguration and +AuthenticationContext, each method call returns a new instance of that +object. For example, if you wanted separate configurations when +connecting over different hostnames, you could do the following:

+
+
+
+
//create your authentication configuration
+AuthenticationConfiguration commonConfig =
+    AuthenticationConfiguration.empty()
+      .useProviders(() -> new Provider[] { new WildFlyElytronProvider() })
+      .allowSaslMechanisms("DIGEST-MD5")
+      .useRealm("ManagementRealm");
+ 
+AuthenticationConfiguration administrator =
+    commonConfig
+      .useName("administrator")
+      .usePassword("password1!");
+
+
+AuthenticationConfiguration monitor =
+    commonConfig
+      .useName("monitor")
+      .usePassword("password1!");
+ 
+ 
+//create your authentication context
+AuthenticationContext context = AuthenticationContext.empty();
+context = context.with(MatchRule.ALL.matchHost("127.0.0.1"), administrator);
+context = context.with(MatchRule.ALL.matchHost("localhost"), monitor);
+
+
+
+

Common Rules

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RuleDescription

matchLocalSecurityDomain(String name)

This is the same as match-domain +in the configuration file approach.

matchNoUser()

This is the same as match-no-user in the configuration +file approach.

matchPath(String pathSpec)

This is the same as match-path in the +configuration file approach.

matchPort(int port)

This is the same as match-port in the +configuration file approach.

matchProtocol(String protoName)

This is the same as match-port in the +configuration file approach.

matchPurpose(String purpose)

Create a new rule which is the same as +this rule, but also matches the given purpose name.

matchPurposes(String…​ purposes)

This is the same as match-purpose in +the configuration file approach.

matchUrnName(String name)

This is the same as match-urn in the +configuration file approach.

matchUser(String userSpec)

This is the same as match-user in the +configuration file approach.

+
+

Also, instead of starting with an empty authentication configuration, +you can start with the current configured one by using +captureCurrent().

+
+
+
+
//create your authentication configuration
+AuthenticationConfiguration commonConfig = AuthenticationConfiguration.captureCurrent();
+
+
+
+

Using captureCurrent() will capture any previously established +authentication context and use it as your new base configuration. +An authentication context is established once it’s been activated by calling +run(). If captureCurrent() is called and no context is currently +active, it will try and use the default authentication if available. You +can find more details about this in +The +Configuration File Approach, +The +Default Configuration Approach, and +Using Elytron Client +with Clients Deployed to WildFly sections.

+
+
+

Using AuthenticationConfiguration.empty() should only be used as a base +to build a configuration on top of and should not be used on its own. It +provides a configuration that uses the JVM-wide registered providers and +enables anonymous authentication.

+
+
+

When specifying the providers on top of the +AuthenticationConfiguration.empty() configuration, you can specify a +custom list, but most users should use WildFlyElytronProvider() +providers.

+
+
+

When creating an authentication context, using the context.with(…​) +will create a new context that merges the rules and authentication +configuration from the current context with the provided rule and +authentication configuration. The provided rule and authentication +configuration will appear after the ones in the current context.

+
+
+
+

6.3. The Default Configuration Approach

+
+

The default configuration approach relies completely on the +configuration provided by Elytron Client:

+
+
+
+
//create your runnable for establishing a connection
+Runnable runnable =
+    new Runnable() {
+      public void run() {
+        try {
+           //Establish your connection and do some work
+        } catch (Exception e) {
+          e.printStackTrace();
+        }
+      }
+    };
+ 
+// run runnable directly
+runnable.run();
+
+
+
+

To provide a default configuration, Elytron Client tries to +auto-discover a wildfly-config.xml file on the filesystem. It looks in +the following locations:

+
+
+
    +
  • +

    Location specified by the wildfly.config.url system property set +outside of the client code.

    +
  • +
  • +

    The classpath root directory.

    +
  • +
  • +

    The META-INF directory on the classpath.

    +
  • +
+
+
+

If it does not find one, it will try and use the default +wildfly-config.xml provided in the +$WILDFLY_HOME/bin/client/jboss-client.jar.

+
+
+

default wildfly-config.xml

+
+
+
+
<configuration>
+  <authentication-client xmlns="urn:elytron:1.0">
+    <authentication-rules>
+      <rule use-configuration="default" />
+    </authentication-rules>
+    <authentication-configurations>
+      <configuration name="default">
+        <allow-all-sasl-mechanisms />
+        <set-mechanism-properties>
+          <property key="wildfly.sasl.local-user.quiet-auth" value="true" />
+        </set-mechanism-properties>
+        <use-service-loader-providers />
+      </configuration>
+    </authentication-configurations>
+  </authentication-client>
+</configuration>
+
+
+
+
+

6.4. Using Elytron Client with Clients Deployed to WildFly

+
+

Clients deployed to WildFly can also make use of Elytron Client. In +cases where you have included a wildfly-config.xml with your +deployment or the system property has been set, an +AuthenticationContext is automatically parsed and created from that +file.

+
+
+

To load a configuration file outside of the deployment, you can use the +parseAuthenticationClientConfiguration(URI) method. This method will +return an AuthenticationContext which you can then use in your client’s +code using the +The +Programmatic Approach.

+
+
+

Additionally, clients will also automatically parse and create an +AuthenticationContext from the client configuration provided by the +elytron subsystem. The client configuration in the elytron subsystem +can also take advantage of other components defined in the elytron +subsystem such as credential stores. If client configuration is provided +by BOTH the deployment and the elytron subsystem, the elytron +subsystem’s configuration is used.

+
+
+
+

6.5. Client configuration using wildfly-config.xml

+
+

Prior to WildFly 11, many WildFly client libraries used different configuration strategies. WildFly 11 introduces a new wildfly-config.xml file which unifies all client configuration in a single place. In addition to being able to configure authentication using Elytron as described in the previous section, a wildfly-config.xml file can also be used to:

+
+
+

6.5.1. Configure Jakarta Enterprise Beans client connections, global interceptors, and invocation timeout

+ +
+

Example configuration:

+
+
+
wildfly-config.xml
+
+
<configuration>
+...
+    <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
+        <invocation-timeout seconds="10"/>
+        <connections>
+            <connection uri="remote+http://10.20.30.40:8080"/>
+        </connections>
+        <global-interceptors>
+            <interceptor class="org.jboss.example.ExampleInterceptor"/>
+        </global-interceptors>
+    </jboss-ejb-client>
+...
+</configuration>
+
+
+
+
+

6.5.2. Configure HTTP client

+ +
+

Example configuration:

+
+
+
wildfly-config.xml
+
+
<configuration>
+...
+    <http-client xmlns="urn:wildfly-http-client:1.0">
+        <defaults>
+            <eagerly-acquire-session value="true" />
+            <buffer-pool buffer-size="2000" max-size="10" direct="true" thread-local-size="1" />
+        </defaults>
+    </http-client>
+...
+</configuration>
+
+
+
+
+

6.5.3. Configure a remoting endpoint

+ +
+

Example configuration:

+
+
+
wildfly-config.xml
+
+
<configuration>
+...
+    <endpoint xmlns="urn:jboss-remoting:5.0">
+        <connections>
+            <connection destination="remote+http://10.20.30.40:8080" read-timeout="50" write-timeout="50" heartbeat-interval="10000"/>
+        </connections>
+    </endpoint>
+...
+</configuration>
+
+
+
+
+

6.5.4. Configure the default XNIO worker

+ +
+

Example configuration:

+
+
+

wildfly-config.xml

+
+
+
+
<configuration>
+...
+    <worker xmlns="urn:xnio:3.5">
+        <io-threads value="10"/>
+        <task-keepalive value="100"/>
+        <stack-size value="5000"/>
+    </worker>
+...
+</configuration>
+
+
+
+
+

6.5.5. Configure RESTEasy client

+
+

RESTEasy client will automatically load credentials, bearer token and SSL context from wildfly-config.xml. Credentials will be used for HTTP Basic authentication and bearer token for Bearer token authentication.

+
+
+

Example configuration:

+
+
+

wildfly-config.xml

+
+
+
+
<configuration>
+    <authentication-client xmlns="urn:elytron:client:1.4">
+    ...
+        <set-user-name name="administrator" />
+        <credentials>
+            <bearer-token value="bearerTokenValue"/>
+        </credentials>
+        <key-stores>
+            <key-store name="truststore" type="PKCS12">
+                <file name="src/test/resources/org/jboss/resteasy/test/security/client-different-cert.truststore"/>
+            </key-store>
+        </key-stores>
+        <ssl-contexts>
+            <ssl-context name="client-context">
+                <trust-store key-store-name="truststore"/>
+            </ssl-context>
+        </ssl-contexts>
+        <ssl-context-rules>
+            <rule use-ssl-context="client-context"/>
+        </ssl-context-rules>
+    ...
+    </authentication-client>
+</configuration>
+
+
+
+ + + + + +
+ + +Note that WildFly client libraries do have reasonable default configuration. Thus, adding configuration for these clients to wildfly-config.xml isn’t mandatory. +
+
+
+
+
+
+
+

7. Elytron and Java Authorization Contract for Containers (JACC)

+
+
+
+This document will guide you on how to enable JACC for your deployments +using the default policy defined in the Elytron subsystem. +
+
+
+

7.1. Defining a JACC Policy Provider

+
+

Elytron subsystem provides a built-in policy provider based on JACC +specification. This policy provider is active by default in the +default configuration.

+
+
+
+

7.2. Enabling JACC to a Web Deployment

+
+

You can enable JACC to web +deployments by executing the following command:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=undertow/application-security-domain=other:add(http-authentication-factory=application-http-authentication,enable-jacc=true)
+
+
+
+

The command above defines a default security domain for applications if +none is provided in jboss-web.xml. In case you already have a +application-security-domain defined and just want to enable JACC you +can execute a command as follows:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=undertow/application-security-domain=my-security-domain:write-attribute(name=enable-jacc,value=true)
+
+
+
+
+

7.3. Enabling JACC to a EJB Deployment

+
+

You can enable JACC to EJB deployments by executing the following command:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=ejb3/application-security-domain=other:add(security-domain=ApplicationDomain,enable-jacc=true)
+
+
+
+

The command above defines a default security domain for EJBs. In case +you already have an application-security-domain defined and just want +to enable JACC you can execute a command as follows:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=ejb3/application-security-domain=my-security-domain:write-attribute(name=enable-jacc,value=true)
+
+
+
+ + + + + +
+ + +References in this document to Java Authorization Contract for Containers (JACC) refer to Jakarta Authorization unless otherwise noted. + References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +
+
+
+
+
+
+

8. Elytron and Java Authentication SPI for Containers (JASPI)

+
+
+
+Starting from WildFly 15 an implementation of the Servlet profile from the Java Authentication SPI for Containers (JSR-196 / JASPI) is also provided by the WildFly Elytron subsystem allowing tighter integration with the security features provided by WildFly Elytron. This JASPI implementation is available out of the box with minimal steps required to use it for deployments, this section of the documentation describes how to make use of it and the features it provides. +
+
+
+

8.1. Activation

+
+

Presently it is the Servlet profile from the JASPI specification which is supported by this integration, the following information applies to web applications deployed to WildFly.

+
+
+

For the JASPI integration to be enabled for a web application that web application needs to be associated with either an Elytron http-authentication-factory or a security-domain - by doing this the WildFly Elytron security handlers will be installed for the deployment and the WildFly Elytron security framework activated for the deployment. This is all that is required for a deployment to be 'securable' using a JASPI configuration.

+
+
+

Once the WildFly Elytron security framework is activate for a deployment at the time requests are being handled the globally registered AuthConfigFactory will be queried to identify if an AuthConfigProvider has been registered which should be used for that deployment - if an AuthConfigProvider is found then JASPI authentication will be used instead of the deployments authentication configuration. If no AuthConfigProvider is found then the authentication configuration for the deployment will be used instead, this could mean authentication mechanisms from a http-authentication-factory are used or mechanisms specified in the web.xml are used or it could even mean no authentication is performed if the application does not have any mechanisms defined.

+
+
+

Any updates made to the AuthConfigFactory are immediately available, this means that if an AuthConfigProvider is registered which is a match for an existing application it will start to be used immediately without requiring redeployment of the application.

+
+
+

All web applications deployed to WildFly have a security domain which will be resolved in the following order: -

+
+
+
    +
  1. +

    From the deployment descriptors / annotations of the deployment being deployed.

    +
  2. +
  3. +

    The value defined on the default-security-domain attribute on the Undertow subsystem.

    +
  4. +
  5. +

    Default to 'other'.

    +
  6. +
+
+
+

We assume that this security domain is a reference to a PicketBox security domain so the final step in activation is ensuring this is mapped to WildFly Elytron using an application-security-domain resource in the Undertow subsystem. This mapping can either reference a WildFly Elytron security domain directly or it can reference a http-authentication-factory resource to obtain instances of authentication mechanisms.

+
+
+

e.g.

+
+
+
+
/subsystem=undertow/application-security-domain=MyAppSecurity:add(security-domain=ApplicationDomain)
+
+
+
+

or

+
+
+
+
/subsystem=undertow/application-security-domain=MyAppSecurity:add(http-authentication-factory=application-http-authentication)
+
+
+
+

Although this latter form references a http-authentication-factory that in turn will reference a security domain - for both examples the referenced security domain is associated with the deployment.

+
+
+

The minimal steps to enable the JASPI integration are: - + . Leave the default-security-domain attribute on the Undertow subsystem undefined so it defaults to 'other'. + . Add an application-security-domain mapping from 'other' to a WildFly Elytron security domain.

+
+
+

All deployments that do not specify their own security domain will be assigned this default mapping automatically which will activate the WildFly Elytron handlers and subsequently make JASPI available for that deployment.

+
+
+

The security domain associated with a deployment in these steps is the security domain that will be wrapped in a CallbackHandler to be passed into the ServerAuthModule instances used for authentication.

+
+
+

8.1.1. Additional Options

+
+

On the application-security-domain resource two additional attributes have been added to allow some further control of the JASPI behaviour.

+
+
+
    +
  • +

    enable-jaspi - Can be set to false to disable JASPI support for all deployments using this mapping.

    +
  • +
  • +

    integrated-jaspi - By default all identities are loaded from the security domain, if set to false ad-hoc identities will be created instead.

    +
  • +
+
+
+
+
+

8.2. Subsystem Configuration

+
+

One way to register a configuration which will result in an AuthConfigProvider being returned for a deployment is to register a jaspi-configuration in the Elytron subsystem.

+
+
+

The following command demonstrates how to add a configuration containing two ServerAuthModule definitions: -

+
+
+
+
./subsystem=elytron/jaspi-configuration=simple-configuration:add(layer=HttpServlet, application-context="default-host /webctx", \
+        description="Elytron Test Configuration", \
+        server-auth-modules=[{class-name=org.wildfly.security.examples.jaspi.SimpleServerAuthModule, module=org.wildfly.security.examples.jaspi, flag=OPTIONAL, options={a=b, c=d}}, \
+            {class-name=org.wildfly.security.examples.jaspi.SecondServerAuthModule, module=org.wildfly.security.examples.jaspi}])
+
+
+
+

This results in the following configuration being persisted: -

+
+
+
+
<jaspi>
+    <jaspi-configuration name="simple-configuration" layer="HttpServlet" application-context="default-host /webctx" description="Elytron Test Configuration">
+        <server-auth-modules>
+            <server-auth-module class-name="org.wildfly.security.examples.jaspi.SimpleServerAuthModule" module="org.wildfly.security.examples.jaspi" flag="OPTIONAL">
+                <options>
+                    <property name="a" value="b"/>
+                    <property name="c" value="d"/>
+                </options>
+            </server-auth-module>
+            <server-auth-module class-name="org.wildfly.security.examples.jaspi.SecondServerAuthModule" module="org.wildfly.security.examples.jaspi"/>
+        </server-auth-modules>
+    </jaspi-configuration>
+</jaspi>
+
+
+
+

The name attribute is just a name that allows the resource to be referenced in the management model.

+
+
+

The layer and application-context attributes are used when registering this configuration with the AuthConfigFactory - both of these attributes can be omitted allowing wildcard matching. The description attribute is also optional and is used to provide a description to the AuthConfigFactory.

+
+
+

Within the configuration one or more server-auth-module instances can be defined with the following attributes. + * class-name - The fully qualified class name of the ServerAuthModule. + * module - The module to load the ServerAuthModule from. + * flag - The control flag to indicate how this module operates in relation to the other modules. + * options - Configuration options to be passed into the ServerAuthModule on initialisation.

+
+
+

Configuration defined in this way is immediately registered with the AuthConfigFactory so any existing deployments using the WildFly Elytron security framework that match against the layer and application-context will immediately start to make use of the configuration.

+
+
+
+

8.3. Programmatic Configuration

+
+

The APIs defined within the JASPI specification allow for applications to dynamically register custom AuthConfigProvider instances, however the specification does not provide the actual implementations to use or a standard way to create instances of the implementations, the WildFly Elytron project contains a simple utility that can be used by deployments to help with this: -

+
+
+

org.wildfly.security.auth.jaspi.JaspiConfigurationBuilder

+
+
+

The following piece of code illustrates how this API can be used to register a similar configuration to the one illustrated in the subsystem.

+
+
+
+
String registraionId = JaspiConfigurationBuilder.builder("HttpServlet", servletContext.getVirtualServerName() + " " + servletContext.getContextPath())
+    .addAuthModuleFactory(SimpleServerAuthModule::new, Flag.OPTIONAL, Collections.singletonMap("a", "b"))
+    .addAuthModuleFactory(SecondServerAuthModule::new)
+.register();
+
+
+
+

As an example this code could be executed within the init() method of a Servlet to register the AuthConfigProvider specific for that deployment, in this code example the application context has also been assembled by consulting the ServletContext.

+
+
+

The register method returns the resulting registration ID that can also be used to subsequently remove this registration directly from the AuthConfigFactory.

+
+
+

As with the subsystem configuration this call has an immediate effect and will be live for all web applications using the WildFly Elytron security framework immediately.

+
+
+
+

8.4. Authentication Process

+
+

8.4.1. CallbackHandler

+
+

Based on the configuration on the application-security-domain resource in the Undertow subsystem the CallbackHandler passed to the ServerAuthModule in an integrated or non-integrated mode.

+
+
+
+

8.4.2. Integrated

+
+

When operating in integrated mode although the ServerAuthModule instances will be handling the actual authentication the resulting identity will be loaded from the referenced SecurityDomain using the SecurityRealms referenced by that SecurityDomain, it is still possible in this mode to override the roles that will be assigned within the Servlet container.

+
+
+

The advantage of this mode is that ServerAuthModules are able to take advantage of the WildFly Elytron configuration for the loading of identities so identities stored in usual locations such as databases and LDAP can be loaded without the ServerAuthModule needing to be aware of these locations, additionally other WildFly Elytron configuration can be applied such as role and permission mapping. The referenced SecurityDomain can also be referenced in other places such as for SASL authentication or other non JASPI applications all backed by a common repository of identities.

+
+
+

In this mode the CallbackHandlers operate as follows: -

+
+
+
    +
  • +

    PasswordValidationCallback

    +
    +
    +
    The username and password will be used with the SecurityDomain to perform an authentication, if successful there is now an authenticated identity.
    +
    +
    +
  • +
  • +

    CallerPrincipalCallback

    +
    +
    +
    This Callback is used to establish the authorized identity / the identity that will be seen once the request reached the web application.
    +
    +
    +
    +
    +
    If an authenticated identity has already been established via the PasswordValidationCallback this Callback is interpreted as a run-as request and authorization checks are performed to ensure the authenticated identity is authorized to run as the identity specified in this Callback.  If no authenticated identity has been established by a PasswordValidationCallback it is assumed the ServerAuthModule has handled the authentication step so this Callback will cause the specified identity to be loaded from the SecurityDomain and an authorization check to verify this identity has the LoginPermission.
    +
    +
    +
    +
    +
    If a Callback is received with a null Principal and name then if an authenticated identity has already been established authorization will be performed as that identity, if no identity has been established then authorization of the anonymous identity will be performed.  Where authorization of the anonymous identity is performed the SecurityDomain must have been configured to grant the anonymous identity the LoginPermission otherwise authorization will fail.
    +
    +
    +
  • +
  • +

    GroupPrincipalCallback

    +
    +
    +
    By default in this mode the attribute loading, role decoding, and role mapping configured on the security domain will be used to establish the identity - if this Callback is received the groups specified will be taken as the roles that will be assigned to the identity whilst the request is in the servlet container.  These roles will be visible in the servlet container only.
    +
    +
    +
  • +
+
+
+
+

8.4.3. Non Integrated

+
+

When operating in non-integrated mode the ServerAuthModules are completely responsible for all authentication AND identity management, the Callbacks specified in the specification can be used to establish an identity. The resulting identity will be created on the SecurityDomain but it will be independent of any identities stored in referenced SecurityRealms.

+
+
+

The advantage of this mode is that JASPI configurations that are able to 100% handle the identities can be deployed to the application server without requiring anything beyond a simple SecurityDomain definitions, there is no need for this SecurityDomain to actually contain the identities that will be used at runtime. The disadvantage of this mode is that the ServerAuthModule is now reposible for all identity handling potenitally making the implementation much more complex.

+
+
+

In this mode the CallbackHandlers operate as follows: -

+
+
+
    +
  • +

    PasswordValidationCallback

    +
    +
    +
    The Callback is not supported in this mode, the purpose of this mode is for the ServerAuthModule to operate independently of the referenced SecurityDomain so requesting a password to be validated would not be suitable.
    +
    +
    +
  • +
  • +

    CallerPrincipalCallback

    +
    +
    +
    This Callback is used to establish the Principal for the resulting identity, as the ServerAuthModule is handling all of the identity checking requirements no checks are performed to verify if the identity exists in the security domain and no authorization checks are performed.
    +
    +
    +
    +
    +
    If a Callback is received with a null Principal and name then then the identity will be established as the anonymous identity, as the ServerAuthModule is making the decisions no authorizaton check will be performed with the SecurityDomain.
    +
    +
    +
  • +
  • +

    GroupPrincipalCallback

    +
    +
    +
    As the identity is created in this mode without loading from the SecurityDomain it will by default have no roles assigned, if this Callback is received the groups will be taken and assigned to the resulting identity whilst the request is in the servlet container. These roles will be visible in the servlet container only.
    +
    +
    +
  • +
+
+
+
+

8.4.4. validateRequest

+
+

During the call to validateRequest on the ServerAuthContext the individual ServerAuthModule instances will be called in the order they are defined. A control flag can also be specified for each module, this defines how the response should be interpreted and if processing should continue to the next auth module or return immediately.

+
+
+
Control Flags
+
+

Where the configuration was provided either within the WildFly Elytron subsystem or using the JaspiConfigurationBuilder API it is possible to associate a control flag with each ServerAuthModule - if one is not specified we assume REQUIRED. The flags have the following meanings depending on their result.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Flag

AuthStatus.SEND_SUCCESS

AuthStatus.SEND_FAILURE, AuthStatus.SEND_CONTINUE

Required

Validation will continue to the remaining modules, provided the requirements of the remaining modules are satisfied the request will be allowed to proceed to authorization.

Validation will continue to the remaining modules, however regardless of their outcome the validation is not successful so control will return to the client.

Requisite

Validation will continue to the remaining modules, provided the requirements of the remaining modules are satisfied the request will be allowed to proceed to authorization.

The request will return immediately to the client.

Sufficient

Validation is deemed successful and complete, provided no previous Required or Requisite module has returned an AuthStatus other than AuthStatus.SUCCESS the request will proceed to authorization of the secured resource.

Validation will continue down the list of remaining modules, this status will only affect the decision if there are no REQUIRED or REQUISITE modules.

Optional

Validation will continue to the remaining modules, provided no 'Required' or 'Requisite' modules have not returned SUCCESS this will be sufficient for validation to be deemed successful and for the request to proceed to the authorization stage and the secured resource.

Validation will continue down the list of remaining modules, this status will only affect the decision if there are no REQUIRED or REQUISITE modules.

+
+

For all ServerAuthModule instances if they throw an AuthException an error will be immediately reported to the client without further modules being called.

+
+
+
+
+

8.4.5. secureResponse

+
+

During the call to secureResponse each ServerAuthMdoule is called but this time in reverse order. Where a module only undertakes an action in secureResponse if it undertook an action in validateResponse it is the responsibility of the module to track this.

+
+
+

The control flag has no effect on secureResponse processing, processing ends when one of the following is true: - +. All of the ServerAuthModule instances have been called. +. A module returns AuthStatus.SEND_FAILURE. +. A module throws an AuthException.

+
+
+
+

8.4.6. SecurityIdentity

+
+

Once the authentication process has completed a org.wildfly.security.auth.server.SecurityIdentity for the deployments SecurityDomain will have been created as a result of the Callbacks to the CallbackHandler, depending on the Callbacks this will either be an identity loaded directly from the SecurityDomain or will be an ad-hoc identity described by the callbacks. This SecurityIdentity will be associated with the request as we do for other authentication mechanisms

+
+
+
+
+
+
+

9. Elytron and Jakarta EE Security

+
+
+
+Starting from WildFly 15 an implementation of the Servlet Profile from Java Authentication SPI for Containers (JSR-196 / JASPI) specification has been included in the application server, in addition to making JASPI available for deployments using WildFly Elytron it also makes it possible to make use of EE Security with WildFly Elytron. +
+
+
+

9.1. Activation

+
+

EE Security with WildFly Elytron is available out of the box with just a couple of small steps required.

+
+
+

9.1.1. Define JACC Policy

+
+

The SecurityContext API makes use of JACC to access the current authenticated identity, if deployments are going to make use of this API then a JACC policy needs to be activated in the WildFly Elytron subsystem. If this API is not being used then the activation can be skipped.

+
+
+
+
/subsystem=elytron/policy=jacc:add(jacc-policy={})
+:reload
+
+
+
+

As is shown in the example no specific configuration is required other than the presence of a default JACC policy, additionally after making these changes the server needs to be reloaded to ensure the new policy activates correctly.

+
+
+
+

9.1.2. Add application-security-domain mapping

+
+

As with all deployments a mapping is required from the security domain defined for the deployment to either a WildFly Elytron security domain or http authentication factory to activate security backed by WildFly Elytron.

+
+
+

All web applications deployed to WildFly have a security domain which will be resolved in the following order: -

+
+
+
    +
  1. +

    From the deployment descriptors / annotations of the deployment being deployed.

    +
  2. +
  3. +

    The value defined on the default-security-domain attribute on the Undertow subsystem.

    +
  4. +
  5. +

    Default to 'other'.

    +
  6. +
+
+
+

An application-security-domain resource then needs to be added to map from the deployment’s security domain.

+
+
+

The simplest approach is to add a mapping for other, then no further configuration will be required and provided the deployment does not define it’s own security domain and provided no alternative default is specified all deployments will match this mapping.

+
+
+
+
/subsystem=undertow/application-security-domain=other:add(security-domain=ApplicationDomain, integrated-jaspi=false)
+
+
+
+

The EE Security API is built on JASPI. Within JASPI we support two different modes of operation 'integrated', and 'non-integrated'. In integrated mode any identity being established during authentication is expected to exist in the associated security domain. With the EE Security APIs however it is quite likely an alternative store will be in use so configuration the mapping to use 'non-integrated' JASPI allows for identities to be dynamically created as required.

+
+
+ + + + + +
+ + +References in this document to Java Authorization Contract for Containers (JACC) refer to the Jakarta Authorization unless otherwise noted +
+
+
+
+
+
+
+

10. Using Keycloak SAML

+
+
+

To secure applications deployed to WildFly using Keycloak SAML, a Galleon feature pack provided +by the Keycloak project needs to be used. This feature pack automatically installs the Keycloak +SAML adapter that results in the keycloak-saml subsystem being added to WildFly.

+
+
+

There are a few ways to install the Keycloak Galleon Feature Pack that provides the SAML adapter.

+
+
+

10.1. Galleon CLI

+
+

A server installation can be provisioned using the Galleon CLI.

+
+
+

More information can be found in the Provisioning WildFly with Galleon +documentation, but assuming you have provisioned a WildFly installation containing the web-server layer +with a command similar to the following:

+
+
+
+
galleon.sh install wildfly:current \
+    --layers=web-server --dir=wildfly
+
+
+
+

The Keycloak SAML adapter can then be added to the WildFly installation with the following command:

+
+
+
+
galleon.sh install org.keycloak:keycloak-saml-adapter-galleon-pack:22.0.1 --layers=keycloak-client-saml --dir=wildfly
+
+
+
+ + + + + +
+ + +
+

Unlike the WildFly feature pack, this Keycloak feature pack is not part of a universe and so a fully +qualified group:artifact:version reference to the feature pack is required.

+
+
+
+
+

From this point, applications can be configured as described in the +Keycloak documentation.

+
+
+
+

10.2. Bootable JAR

+
+

The next installation option is if you are creating a bootable JAR for your deployment and want to +add the Keycloak SAML adapter to secure the deployment. More details about bootable JAR support can +be found in the Bootable JAR Guide.

+
+
+

The following is an example plug-in configuration to create a bootable JAR for a web application +using both the web-server and keycloak-client-saml layers:

+
+
+
+
<plugin>
+    <groupId>org.wildfly.plugins</groupId>
+    <artifactId>wildfly-jar-maven-plugin</artifactId>
+    <version>${version.wildfly.jar.maven.plugin}</version>
+    <configuration>
+        <feature-packs>
+            <feature-pack>
+                <location>wildfly@maven(org.jboss.universe:community-universe):current</location>
+            </feature-pack>
+            <feature-pack>
+                <groupId>org.keycloak</groupId>
+                <artifactId>keycloak-saml-adapter-galleon-pack</artifactId>
+                <version>22.0.1</version>
+            </feature-pack>
+        </feature-packs>
+        <layers>
+            <layer>web-server</layer>
+            <layer>keycloak-client-saml</layer>
+        </layers>
+        <context-root>simple-webapp</context-root>
+        <cli-sessions>
+            <cli-session>
+                <script-files>
+                    <script>configure-saml.cli</script>
+                </script-files>
+            </cli-session>
+        </cli-sessions>
+    </configuration>
+    <executions>
+        <execution>
+            <goals>
+                <goal>package</goal>
+            </goals>
+        </execution>
+    </executions>
+</plugin>
+
+
+
+ + + + + +
+ + +
+

As with using the CLI, the latest version of WildFly in the universe can be dynamically selected but the +Keycloak feature pack requires the complete groupId, artifactId, and version to be specified.

+
+
+
+
+

The approaches to configure the web application are the same as described in the +Keycloak documentation. +In this example, a CLI script, configure-saml.cli, is executed to update the Keycloak SAML subsystem +with relevant configuration.

+
+
+

A sample script is shown below:

+
+
+
+
/subsystem=keycloak-saml/secure-deployment=simple-webapp.war/:add
+
+/subsystem=keycloak-saml/secure-deployment=simple-webapp.war/SP="http://localhost:8090/simple-webapp"/:add(sslPolicy=EXTERNAL,logoutPage="logout")
+
+/subsystem=keycloak-saml/secure-deployment=simple-webapp.war/SP="http://localhost:8090/simple-webapp"/IDP=idp/:add( \
+    SingleSignOnService={ \
+        signRequest=false, \
+        validateResponseSignature=false, \
+        validateAssertionSignature=false, \
+        requestBinding=POST, \
+        bindingUrl=http://localhost:8080/realms/myrealm/protocol/saml}, \
+    SingleLogoutService={ \
+        signRequest=false, \
+        signResponse=false, \
+        validateRequestSignature=false, \
+        validateResponseSignature=false, \
+        requestBinding=POST, \
+        responseBinding=POST, \
+        postBindingUrl=http://localhost:8080/realms/myrealm/protocol/saml, \
+        redirectBindingUrl=http://localhost:8080/realms/myrealm/protocol/saml} \
+)
+
+
+
+

Instead of adding configuration in the Keycloak SAML subsystem, configuration can be added in the deployment +instead. In particular, the auth-method of the web application could be set to KEYCLOAK-SAML and +adapter configuration could be provided in a keycloak-saml.json descriptor placed within the WEB-INF directory +of the deployment.

+
+
+
+

10.3. WildFly Maven Plugin

+
+

The final installation option is to use the wildfly-maven-plugin to provision a server containing +the Keycloak SAML subsystem.

+
+
+

The following is an example plug-in configuration to create a server for a web application +using both the web-server and keycloak-client-saml layers:

+
+
+
+
<plugin>
+    <groupId>org.wildfly.plugins</groupId>
+    <artifactId>wildfly-maven-plugin</artifactId>
+    <version>4.0.0.Final</version>
+    <configuration>
+        <feature-packs>
+            <feature-pack>
+                <location>wildfly@maven(org.jboss.universe:community-universe):current</location>
+            </feature-pack>
+            <feature-pack>
+                <groupId>org.keycloak</groupId>
+                <artifactId>keycloak-saml-adapter-galleon-pack</artifactId>
+                <version>22.0.1</version>
+            </feature-pack>
+        </feature-packs>
+        <layers>
+            <layer>web-server</layer>
+            <layer>keycloak-client-saml</layer>
+        </layers>
+    </configuration>
+    <executions>
+        <execution>
+            <goals>
+                <goal>package</goal>
+            </goals>
+        </execution>
+    </executions>
+</plugin>
+
+
+
+ + + + + +
+ + +
+

As with the bootable JAR configuration, note that the latest version of WildFly in the universe can be dynamically +selected but the Keycloak feature pack requires the complete groupId, artifactId, and version to be +specified.

+
+
+
+
+
+

10.4. Propagating the Security Context to EJBs

+
+

The sample configuration in the above sections has referenced the keycloak-client-saml layer. +If the security context for the application that is being secured with Keycloak SAML needs to +be propagated to the EJB tier, the keycloak-client-saml-ejb layer should be used instead. +This layer adds an application-security-domain mapping in the EJB3 subsystem to map the default +security domain name other to the KeycloakDomain that is installed by the Keycloak feature pack.

+
+
+
+
+
+

11. Using Keycloak with WildFly Elytron

+
+
+

The ability to secure applications using OpenID Connect is provided by the elytron-oidc-client subsystem. For details about securing applications deployed on WildFly with OpenID Connect, by using Keycloak as the OpenID provider, see the Elytron OIDC Client documentation.

+
+
+
+
+

12. Bearer Token Authorization

+
+
+

Bearer Token Authorization is the process of authorizing HTTP requests based on the existence and validity of a bearer +token representing a subject and his access context, where the token provides valuable information to determine the subject of the call as well whether or not a HTTP resource +can be accessed.

+
+
+

Elytron supports bearer token authorization by providing a BEARER_TOKEN HTTP authentication mechanism based on RFC-6750 and +an specific realm implementation, the token-realm, to validate tokens using the JWT format (for instance, OpenID Connect ID Tokens) or opaque tokens issued by any OAuth2 compliant +authorization server.

+
+
+

12.1. How it Works

+
+

When a HTTP request arrives to your application, the BEARER_TOKEN mechanism will check if a bearer token was provided by checking the existence of an Authorization HTTP header with the following format:

+
+
+
+
GET /resource HTTP/1.1
+Host: server.example.com
+Authorization: Bearer mF_9.B5f-4.1JqM
+
+
+
+

If no bearer token was provided, the mechanism will respond with a 401 HTTP status code as follows:

+
+
+
+
HTTP/1.1 401 Unauthorized
+WWW-Authenticate: Bearer realm="example"
+
+
+
+

When a bearer token is provided, the mechanism will extract the token from the request (in the example above, the token is represented by the string mF_9.B5f-4.1JqM) and pass it over +to the token-realm in order to check if the token is valid and can be used to build a security context based on its information. Note that the BEARER_TOKEN mechanism is only responsible to +check and extract bearer tokens from an HTTP request, whereas the token-realm is the one responsible for validating the token.

+
+
+

If validation succeeds, a security context will be created based on the information represented by the token and the application can use the newly created +security context to obtain information about the subject making the request as well decide whether or not the request should be full filled. In case the validation fails, +the mechanism will respond with a 403 HTTP status code as follows:

+
+
+
+
HTTP/1.1 403 Forbidden
+
+
+
+
+

12.2. Validating JWT Tokens

+
+

Elytron provides built-in support for JWT tokens, which can be enabled by defining a realm in the Elytron subsystem as follows:

+
+
+
+
 <token-realm name="JwtRealm" principal-claim="sub">
+    <jwt issuer="as.example.com"
+         audience="api.example.com"
+         public-key="-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB-----END PUBLIC KEY-----"/>
+ </token-realm>
+
+
+
+

In the example above, the token-realm is defined with a principal-claim attribute. This attribute specifies which claim +within the token should be used to identity the principal. If you have a token as follows:

+
+
+
+
 {
+   "iss": "as.example.com",
+   "sub": "24400320",
+   "aud": "s6BhdRkqt3",
+   "exp": 1311281970,
+   "nbf": 1311280970,
+  }
+
+
+
+

Elytron will use the value associated with the sub claim as the identifier of the subject represented by the token.

+
+
+

The jwt element within the token-realm specifies that tokens should be validated as JWT and provides different configuration options on how they +should be validated:

+
+
+
    +
  • +

    issuer

    +
    +

    A list of strings representing the issuers supported by this configuration. During validation JWT tokens must have an "iss" claim that contains one of the values defined here

    +
    +
  • +
  • +

    audience

    +
    +

    A list of strings representing the audiences supported by this configuration. During validation JWT tokens must have an "aud" claim that contains one of the values defined here

    +
    +
  • +
  • +

    public-key

    +
    +

    A public key in PEM Format. During validation, if a public key is provided, signature will be verified based on the key you provided here. Alternatively, +you can define a key-store and certificate attributes to configure the public key. This key will be used to verify tokens without "kid" claim.

    +
    +
  • +
  • +

    key-store

    +
    +

    As an alternative to public-key, you can also define a key store from where the certificate with a public key should be loaded from

    +
    +
  • +
  • +

    certificate

    +
    +

    The name of the certificate with a public key to load from the key store in case you defined the key-store attribute

    +
    +
  • +
  • +

    client-ssl-context

    +
    +

    The SSL context to be used if if you want to use remote JSON Web Keys. This enables you to use url from "jku" token claim to +fetch public keys for token verification.

    +
    +
  • +
  • +

    host-name-verification-policy

    +
    +

    A policy that defines how host names should be verified when using remote JSON Web Keys. Allowed values: "ANY", "DEFAULT".

    +
    +
  • +
+
+
+

For being able to use different key pairs for signing / verification and for easier key rotation you can define key map. This will take the "kid" claim +from the token and use corresponding public key for verification.

+
+
+
+
 <token-realm name="JwtRealm" principal-claim="sub">
+    <jwt issuer="as.example.com" audience="api.example.com">
+        <key kid="1" public-key="-----BEGIN PUBLIC KEY-----MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANc4VlnN6oZwe1PoQQeJsTwu7LGS+eEbgYMNYXahidga4+BhdGKwzMZU54ABFQ11tUMJSENQ6o3n1YKVgMnxvcMCAwEAAQ==-----END PUBLIC KEY-----"/>
+        <key kid="2" public-key="-----BEGIN PUBLIC KEY-----MFswDQYJKoZIhvcNAQEBBQADSgAwRwJAcNpXy6psxC21DdnTtAdlgsEwEuJh/earH3q7xJPjmsygmrlpC66MG4/A/J9Gai2Hp+QdCSEVpBWkIoVff3sIlwIDAQAB-----END PUBLIC KEY-----"/>
+    </jwt>
+ </token-realm>
+
+
+
+

This token-realm will verify tokens with "kid" claims of value "1" or "2" using corresponding key.

+
+
+

Tokens without "kid" claim will be verified using the 'public-key' attribute of 'jwt', or in this case invalidated, as there is +no key specified.

+
+
+

The jwt validator performs different checks in order to determine the validity of a JWT:

+
+
+
    +
  • +

    Expiration checks based on the values of the exp and nbf claims

    +
  • +
  • +

    Signature checks based on the public key provided via public-key or certificate attributes, key map with named public keys, or by fetching remote JSON Web Key Set +using provided client-ssl-context. You can skip token signature verification by not defining any of these.

    +
  • +
+
+
+

It is strongly recommended that you use signed JWTs in order to guarantee authenticity of tokens and make sure they were not tampered.

+
+
+
+

12.3. Validating OAuth2 Bearer Tokens

+
+

Elytron provides built-in support for tokens issued by an OAuth2 compliant authorization server, where these tokens are validated +using a token introspection endpoint as defined by OAuth2 specification.

+
+
+
+
<token-realm name="OAuth2Realm" principal-claim="sub">
+    <oauth2-introspection client-id="my-client-id"
+                          client-secret="keep_it_secret"
+                          introspection-url="https://as.example.com/token/introspect"
+                          client-ssl-context="user-defined-ssl-context"
+                          host-name-verification-policy="ANY" />
+</token-realm>
+
+
+
+

The auth2-introspection element within the token-realm specifies that tokens should be validated using an OAuth2 Token Introspection Endpoint and provides different configuration options on how they +should be validated:

+
+
+
    +
  • +

    client-id

    +
    +

    The identifier of the client on the OAuth2 Authorization Server

    +
    +
  • +
  • +

    client-secret

    +
    +

    The secret of the client

    +
    +
  • +
  • +

    introspection-url

    +
    +

    The URL of token introspection endpoint

    +
    +
  • +
  • +

    client-ssl-context

    +
    +

    The SSL context to be used if the introspection endpoint is using HTTPS.

    +
    +
  • +
  • +

    host-name-verification-policy

    +
    +

    A policy that defines how host names should be verified when using HTTPS. Allowed values: "ANY", "DEFAULT".

    +
    +
  • +
+
+
+ +
+

12.5. CLI Examples on How to Create a Token Realm

+
+
Create a Token Realm to validate JWT tokens using a key store to retrieve the public key
+
+
# Create a Key Store
+/subsystem=elytron/key-store=my-keystore:add(path=/path/to/keystore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
+
+# Create the realm
+/subsystem=elytron/token-realm=jwt-realm:add(principal-claim=sub, jwt={issuer=["as.example.com"], audience=["api.example.com"], key-store=my-keystore, certificate=as.example.com})
+
+
+
+
Create a Token Realm to validate OAuth2 tokens
+
+
# Create a Client SSLContext
+/subsystem=elytron/key-store=default-trust-store:add(path=/path/to/keystore.pkcs12,credential-reference={clear-text=secret},type=PKCS12)
+/subsystem=elytron/trust-manager=default-trust-manager:add(algorithm=PKIX, key-store=default-trust-store)
+/subsystem=elytron/client-ssl-context=default-client-ssl-context:add(trust-manager=default-trust-manager)
+
+# Create the realm
+/subsystem=elytron/token-realm=oauth2-realm:add(principal-claim=preferred_username, oauth2-introspection={client-id=my-client-id, client-secret=keep_it_secret, client-ssl-context=default-client-ssl-context, introspection-url=https://as.example.com/token/introspect})
+
+
+
+
+
+
+

13. OpenSSL

+
+
+

13.1. Configuring WildFly to use the OpenSSL TLS provider

+
+

There are a couple ways you can configure WildFly to use the OpenSSL TLS provider.

+
+
+

13.1.1. Configure the Elytron subsystem to use the OpenSSL TLS provider by default

+
+

The following commands can be used to configure the Elytron subsystem so that the OpenSSL TLS +provider is used by default:

+
+
+
+
/subsystem=elytron:write-attribute(name=initial-providers, value=combined-providers)
+/subsystem=elytron:undefine-attribute(name=final-providers)
+reload
+
+
+
+
+

13.1.2. Configure the OpenSSL TLS provider on an SSL context

+
+

Instead of configuring the Elytron subsystem to use the OpenSSL TLS provider by default, +it is also possible to specify that the OpenSSL TLS provider should be used for a specific +SSL context. For example, the following command can be used to create a server-ssl-context +that will use the OpenSSL TLS provider:

+
+
+
+
/subsystem=elytron/server-ssl-context=httpsSSC:add(providers=openssl, ...)
+reload
+
+
+
+
+
+

13.2. OpenSSL Library Location

+
+

WildFly will search for the OpenSSL library using the standard system library search path. If you’d like to specify a +custom location for the OpenSSL library, the org.wildfly.openssl.path property can be specified during WildFly startup.

+
+
+

If OpenSSL was loaded successfully, a message similar to the one below will occur in the server.log file on startup:

+
+
+
+
15:37:59,814 INFO [org.wildfly.openssl.SSL] (MSC service thread 1-7) WFOPENSSL0002 OpenSSL Version OpenSSL 1.1.1d FIPS  10 Sep 2019
+
+
+
+
+

13.3. Enabling TLSv1.3

+
+

WARNING It is possible to use TLSv1.3 with the OpenSSL TLS provider when using OpenSSL 1.1.1 or higher and +when running against JDK 11 or higher. However, if JDK 11 is in use and if there is a very large number of +TLSv1.3 requests being made, it is possible that a drop in performance (throughput and response time) will occur +compared to TLSv1.2. For this reason, the use of TLSv1.3 is currently disabled by default. TLSv1.3 can be enabled +by configuring the cipher-suite-names attribute for an SSL context. See the sections on +Configuring a server SSLContext and +Configuring a client SSLContext for more details. It is recommended to test +for performance degradation prior to enabling TLSv1.3 in a production environment.

+
+
+
+

13.4. Adding Additional Native Libraries

+
+

By default, WildFly includes WildFly OpenSSL native libraries for commonly used platforms (Linux x86_64, Windows x86_64, +Mac OS X x86_64, and Linux s390). However, the WildFly OpenSSL Natives project +contains modules that can be used to build WildFly OpenSSL native libraries for other platforms as well. The steps needed to build and make +use of a WildFly OpenSSL native library for a different platform than the ones provided by default will be described below.

+
+
+

13.4.1. Building the Native Library

+
+

Make sure you have cloned the WildFly OpenSSL Natives project +locally. We’ll use $WILDFLY_OPENSSL_NATIVES to denote the path to this project. Next, cd to the module that you want +to build. In this example, we’ll use the linux-i386 module but similar steps can be used to build and make use of another +module instead.

+
+
+
+
cd $WILDFLY_OPENSSL_NATIVES/linux-i386
+mvn clean install
+
+
+
+

Notice that this now results in a wildfly-openssl-linux-i386-VERSION.jar in the $WILDFLY_OPENSSL_NATIVES/linux-i386/target directory. +We’ll make use of this in the next step.

+
+
+
+

13.4.2. Overriding the Existing WildFly OpenSSL Module

+
+

We’re going to add a new module that will override the existing WildFly OpenSSL module that’s found in the +$WILDFLY_HOME/modules/system/layers/base/org/wildfly/openssl directory. Notice that the existing module +contains a Java artifact in its main directory and native libraries for the default platforms in its +main/lib directory.

+
+
+

First, create a new module that contains the WildFly OpenSSL Java artifact from the existing module:

+
+
+
+
module add --name=org.wildfly.openssl --resources=$WILDFLY_HOME/modules/system/layers/base/org/wildfly/openssl/main/wildfly-openssl-java-VERSION.jar --dependencies=java.logging,jdk.unsupported
+
+
+
+

Next, add the native library that we already built to this newly created module:

+
+
+
+
mkdir $WILDFLY_HOME/modules/org/wildfly/openssl/main/lib
+cd $WILDFLY_HOME/modules/org/wildfly/openssl/main/lib
+jar xvf $WILDFLY_OPENSSL_NATIVES/linux-i386/target/wildfly-openssl-linux-i386-VERSION.jar linux-i386
+
+
+
+

You should now see a libwfssl.so file in the $WILDFLY_HOME/modules/org/wildfly/openssl/main/lib/linux-i386 directory.

+
+
+

That’s it, WildFly will now make use of the newly added WildFly OpenSSL module instead of the existing one, +allowing it to make use of the new native library when running on the Linux i386 platform. Additional +native libraries can be added to the $WILDFLY_HOME/modules/org/wildfly/openssl/main/lib directory +if desired.

+
+
+
+
+
+
+

14. Web Single Sign-On

+
+
+

This document will guide on how to enable single sign-on across different applications deployed into different servers, where these applications belong to same security domain.

+
+
+

14.1. Create a Server Configuration Template

+
+

For this document, you’ll need to run at least two server instances in order to check single sign-on and how it affect usability in your applications. Users should be able to log in once and have access to any application using the same security domain.

+
+
+

All configuration described in the next sections should be done with a server instance using standalone-ha.xml (or standalone-full-ha.xml).

+
+
+

Run a server instance using the following command:

+
+
+
+
bin/standalone.sh -c standalone-ha.xml
+
+
+
+

14.1.1. Create a HTTP Authentication Factory

+
+ + + + + +
+ + +If you already have a http-authentication-factory defined in Elytron subsystem and just want to use it to enable single sign-on to your applications, please skip this section.{info} +First, you need a security-domain which we’ll use to authenticate users. Please, execute the following CLI commands: +
+
+
+
+
# Creates a FileSystem Realm, an identity store where users are stored in the local filesystem
+/subsystem=elytron/filesystem-realm=example-realm:add(path=/tmp/example-realm)
+
+# Creates a Security Domain
+/subsystem=elytron/security-domain=example-domain:add(default-realm=example-realm, permission-mapper=default-permission-mapper,realms=[{realm=example-realm, role-decoder=groups-to-roles}]
+
+# Creates an user that you can use to access your applications
+/subsystem=elytron/filesystem-realm=example-realm:add-identity(identity=alice)
+/subsystem=elytron/filesystem-realm=example-realm:add-identity-attribute(identity=alice, name=groups, value=["user"])
+/subsystem=elytron/filesystem-realm=example-realm:set-password(identity=alice, clear={password=alice})
+
+
+
+

Now you can create a http-authentication-factory that you’ll use to actually protect your web applications using Undertow:

+
+
+
+
# Create a Http Authentication Factory
+/subsystem=elytron/http-authentication-factory=example-http-authentication:add(security-domain=example-domain, http-server-mechanism-factory=global, mechanism-configurations=[{mechanism-name=FORM}]
+
+
+
+
+

14.1.2. Create a Application Security Domain in Undertow

+
+ + + + + +
+ + +If you already have a _application-security-domain_ defined in Undertow subsystem and just want to use it to enable single sign-on to your applications, please skip this section. +
+
+
+

In order to protect applications using the configuration defined in Elytron subsystem, you should create a application-security-domain definition in Undertow subsystem as follows:

+
+
+
+
/subsystem=undertow/application-security-domain=other:add(http-authentication-factory=example-http-authentication)
+
+
+
+

By default, if your application does not define any specific security-domain in jboss-web.xml, the application server will choose one with a name other.

+
+
+
+

14.1.3. Create a Key Store

+
+

In order to create a key-store in Elytron subsystem, first create a Java Key Store as follows:

+
+
+
+
keytool -genkeypair -alias localhost -keyalg RSA -keysize 2048 -validity 365 -keystore keystore.pkcs12 -dname "CN=localhost" -keypass secret -storepass secret
+
+
+
+

Once the keystore.pkcs12 file is created, execute the following CLI commands to create a key-store definition in Elytron:

+
+
+
+
/subsystem=elytron/key-store=example-keystore:add(path=keystore.pkcs12, relative-to=jboss.server.config.dir, credential-reference={clear-text=secret}, type=PKCS12)
+
+
+
+
+

14.1.4. Enable Single Sign-On

+
+

Single Sign-On is enabled to a specific application-security-domain definition in Undertow subsystem. It is important that the servers you will be using to deploy applications are using the same configuration.

+
+
+

To enable single-sign on, just change an existing application-security-domain in Undertow subsystem as follows:

+
+
+
+
/subsystem=undertow/application-security-domain=other/setting=single-sign-on:add(key-store=example-keystore, key-alias=localhost, domain=localhost, credential-reference={clear-text=secret})
+
+
+
+

After restarting the servers, users should be able to log in once and have access to any application using the same application-security-domain.

+
+
+
+
+

14.2. Create Two Server Instances

+
+

All configuration you did so far should be reflected in $JBOSS_HOME/standalone/standalone-ha.xml. You can now create two distinct server configuration directories_:\_

+
+
+
+
cp -r standalone standalone-a
+cp -r standalone standalone-b
+
+
+
+

And you can run the two instances using the command below:

+
+
+
+
$JBOSS_HOME/bin/standalone.sh -c standalone-ha.xml -Djboss.node.name=node-a -Djboss.socket.binding.port-offset=200 -Djboss.server.base.dir=$JBOSS_HOME/standalone-a
+$JBOSS_HOME/bin/standalone.sh -c standalone-ha.xml -Djboss.node.name=node-b -Djboss.socket.binding.port-offset=300 -Djboss.server.base.dir=$JBOSS_HOME/standalone-b ----
+
+
+
+
+

14.3. Deploy an Application

+
+

For the sake of simplicity, these are the minimum files you need in your application:

+
+
+
WEB-INF/web.xml
+
+
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
+
+    <security-constraint>
+        <display-name>SecurityConstraint</display-name>
+        <web-resource-collection>
+            <web-resource-name>All Resources</web-resource-name>
+            <url-pattern>/*</url-pattern>
+        </web-resource-collection>
+        <auth-constraint>
+            <role-name>user</role-name>
+        </auth-constraint>
+    </security-constraint>
+
+    <login-config>
+        <auth-method>FORM</auth-method>
+        <form-login-config>
+            <form-login-page>/login.html</form-login-page>
+            <form-error-page>/login.html</form-error-page>
+        </form-login-config>
+    </login-config>
+
+    <security-role>
+        <role-name>user</role-name>
+    </security-role>
+</web-app>
+
+
+
+
login.html
+
+
<html>
+    <body>
+        <form method="post" action="j_security_check">
+            <input type="text" name="j_username">
+            <input type="password" name="j_password">
+            <input type="submit" value="Log In">
+        </form>
+    </body>
+</html>
+
+
+
+ + + + + +
+ + +Make sure you have at least a welcome file (e.g.: index.html\|jsp). +
+
+
+
+
+

Deploy your application into both server instances and try to log in using the user you created at the beginning of this document:

+
+
+
    +
  • +

    Username: alice

    +
  • +
  • +

    Password: alice

    +
  • +
+
+
+
+
+
+
+
+

15. Audit

+
+
+

WildFly Elytron supports audit using security event listeners - components +which captures security events, like successful or unsuccessful login attempts.

+
+
+

15.1. File audit log

+
+

File audit log logs security events into a local file. +It requires to define path to the log file, which can be relative-to a system property. +It also allows to set the file format - human readable SIMPLE or JSON. +The encoding used by the audit file can be set using encoding. The default value is UTF-8. Possible values: UTF-8, UTF-16BE, UTF-16LE, UTF-16, US-ASCII or ISO-8859-1. +While in WildFly 14 there was only one attribute synchronized, which had influence on data reliability, now there is possible more fine grained performance and reliability tunning: +* autoflush defines whether should be output stream flushed after every audit event (guarantees that the log message is passed to the operating system immediately) +* synchonized defines whether should be file descriptor synchronized after every audit event (guarantees that all system buffers are synchronized with the underlying device)

+
+
+
+

15.2. Syslog Audit Logging

+
+

Syslog audit logging logs security events to a syslog server using a transmission protocol. +WildFly Elytron supports using UDP, TCP, or TCP with SSL, with the latter protocol requiring +a SSLContext to be defined. When syslog audit logging is first defined, Elytron will send +an INFORMATIONAL priority event to the defined syslog server containing the message +"Elytron audit logging enabled with RFC format: <format>", where <format> is the +RFC format that the audit logging handler has been defined with, defaulting to RFC5424. +If the given syslog server is not defined, resulting in Elytron being unable to send the +message, then Elytron will keep track of the amount of attempts that sending a message has +failed, up to a maximum defined by the reconnect-attempts parameter, before +closing the endpoint and reporting an error. It is possible to define this value +as infinite, by specifying -1, in which case Elytron will never close the +endpoint and so will always attempt to send audit messages despite previous failures.

+
+
+

15.2.1. Required Parameters

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterValue

server-address

String consisting of the IP address, or a name recognized by Java’s InetAddress.getByName(), of the syslog server

port

int of the listening port on the syslog server

host-name

String of the host name that will be embedded into all events sent to the syslog server

ssl-context

The SSLContext used to connect to the syslog server, only required if transport is set to SSL_TCP

+
+
+

15.2.2. Optional Parameters

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescriptionPossible ValuesDefault Value

transport

The transport protocol to be used to connect to the syslog server

String of: UDP, TCP, or SSL_TCP

TCP

format

The format that audit events should be recorded in

String of SIMPLE or JSON

SIMPLE

syslog-format

The RFC format to be used for describing the audit event

String of RFC5424 or RFC3164

RFC5424

reconnect-attempts

The maximum number of times that elytron will attempt to send successive messages to a syslog server before closing the endpoint to disallow further attempts to send messages.

int of -1 (infinite attempts) or higher

0

+
+
+

15.2.3. Defining Syslog Audit Logging

+
+

Syslog audit logging can be defined under the elytron subsystem resource. Some +examples syslog audit logging resources can be created with the following commands:

+
+
+
Minimum Resource Definition
+
+

Using the following command will generate a syslog audit logging resource that connects with +TCP, records audit events in a simple format, and uses RFC5424 to describe the audit event.

+
+
+
+
/subsystem=elytron/syslog-audit-log=syslog-example:add(
+    server-address=127.0.0.1,
+    port=10857,
+    host-name=localhost
+)
+
+
+
+
+
Default Format and Reconnect Attempts with UDP and RFC3164
+
+

Using the following command will generate a syslog audit logging resource that connects with +UDP, does not send any further messages to the syslog server if there is an error sending, +records audit events in a simple format, and uses RFC3164 to describe the audit event.

+
+
+
+
/subsystem=elytron/syslog-audit-log=syslog-example:add(
+    server-address=127.0.0.1,
+    port=10837,
+    host-name=localhost,
+    transport=UDP,
+    syslog-format=RFC3164
+)
+
+
+
+
+
Full UDP Definition with RFC5424 Explicitly Set and 10 Reconnect Attempts
+
+

Using the following command will generate a syslog audit logging resource that connects with +UDP, attempts to send messages 10 times if there is an error sending before no longer sending messages, +records audit events in a simple format, and uses RFC5424 to describe the audit event.

+
+
+
+
/subsystem=elytron/syslog-audit-log=syslog-example:add(
+    server-address=127.0.0.1,
+    port=10837,
+    host-name=localhost,
+    transport=UDP,
+    syslog-format=RFC5424,
+    reconnect-attempts=10
+)
+
+
+
+
+
Full UDP Definition with Infinite Reconnect Attempts and JSON Format
+
+

Using the following command will generate a syslog audit logging resource that connects with +UDP, always attempts to send messages despite previous failures sending messages, records audit +events in a JSON format, and uses RFC5424 to describe the audit event.

+
+
+
+
/subsystem=elytron/syslog-audit-log=syslog-example:add(
+    server-address=127.0.0.1,
+    port=10837,
+    host-name=localhost,
+    transport=UDP,
+    format=JSON,
+    reconnect-attempts=-1
+)
+
+
+
+
+
+
+
+
+

16. Credential Store

+
+
+

One new component included with WildFly Elytron for the secure storage of credentials is the Credential Store. Previous versions of the application server made use of the Vault which was used for the secure storage of clear text strings; the credential store moves forward a step to focus on the secure storage of credentials. As with the Vault the stored credentials could be clear text passwords however other formats are also supported.

+
+
+

WildFly Elytron contains two default credential store implementations. The first implementation is the KeyStoreCredentialStore which is an +implementation backed by a KeyStore. The KeyStoreCredentialStore implementation supports the storage of various credential types, +PasswordCredential, KeyPairCredential, and SecretKeyCredential. The second implementation is the PropertiesCredentialStore. This credential +store is dedicated to the storage of SecretKeyCredential instances using a properties file. The PropertiesCredentialStore does not offer any protection +of the credentials it stores so its primary purpose is to provide an initial key to a server environment.

+
+
+

This documentation is primarily focused on the KeyStoreCredentialStore and PropertiesCredentialStore; however the section Custom CredentialStore describes the SPIs for implementing a custom credential store and the section Migrating Existing Vaults describes how to convert a vault to a credential store.

+
+
+

It is possible to operate on credential stores using either a standalone command line tool elytron-tool.sh which is included with WildFly or by using management operations through the jboss-cli.sh, management console or other management client calling the management interface directly.

+
+
+

The elytron-tool.sh script to execute the command line tool can be found within the bin folder of the application server installation.

+
+
+

The WildFly Elytron tool supports a number of commands, one of which being credential-store which operates on a credential store. The commands in this documentation are making use of the .sh script on linux; the elytron-tool.bat and elytron-tools.ps1 scripts can be used on Microsoft Windows.

+
+
+

The following command provides a summary of the command line arguments which can be used with the credential-store command:

+
+
+
+
]$ bin/elytron-tool.sh credential-store
+
+
+
+

16.1. Credential Store Creation

+
+

16.1.1. KeyStoreCredentialStore / credential-store

+
+

The KeyStoreCredentialStore supports the largest number of credential types which can be stored within a credential store, additionally as the implementation is backed by a Java KeyStore the storage is protected using the mechanisms provided by the KeyStore implementations.

+
+
+
Command Line
+
+

When using the credential-store command of the elytron-tool.sh script by default, this command assumes the type of the store is a KeyStoreCredentialStore backed by a JCEKS KeyStore.

+
+
+

A new credential store can be created using the following command: -

+
+
+
+
]$ bin/elytron-tool.sh credential-store --create --location=standalone/configuration/mycredstore.cs
+Credential store password:
+Confirm credential store password:
+Credential Store has been successfully created
+
+
+
+

This command prompts twice for the password that should be used to secure the store. Alternatively the password can be passed in using the --password argument however that may mean the password is cached in the local command history or visible to other users viewing the list of running processes.

+
+
+ + + + + +
+ + +The command line tool only creates the instance of the credential store on the underlying file system; the management operation is still required to define the credential store in the elytron subsystem. +
+
+
+
+
Management Operation
+
+

It is also possible to operate on a credential store using management operations against a running server using the application server’s CLI.

+
+
+

The following operation can be used to add a credential-store resource to the elytron subsystem referencing this newly created credential store.

+
+
+
+
/] /subsystem=elytron/credential-store=mycredstore:add(path=mycredstore.cs, relative-to=jboss.server.config.dir, credential-reference={clear-text=StorePassword})
+{"outcome" => "success"}
+
+
+
+

In this example the resource was added to reference an existing credential store, however with a small change this command can also automatically create the store if it does not exist.

+
+
+
+
/] /subsystem=elytron/credential-store=mycredstore:add(path=mycredstore.cs, relative-to=jboss.server.config.dir, credential-reference={clear-text=StorePassword}, create=true)
+{"outcome" => "success"}
+
+
+
+ + + + + +
+ + +The file representing the credential store is not created immediately, it will instead be created the first time a credential is added. +
+
+
+

Previous versions of the application server supported a single vault definition only; credential stores however are cross-referenced by name so multiple credential stores can be defined simultaneously.

+
+
+
+
+

16.1.2. PropertiesCredentialStore / secret-key-credential-store

+
+

This is a simple credential store implementation which can only be used to store SecretKey instances. This credential store also does not offer any protection of the contents. +Within an application server environment it is always possible to get into a cycle of how is an initial secret provided to unlock further resources, this is primarily the purpose +of this credential store. The strategy in the past had been to use masking of a password using password based encryption, the down side of this approach was the password used for +the masking was stored in the source code and being an open source project this means the password is well known. By using the PropertiesCredentialStore installations are back +in control of the initial secret. Although this credential store does not offer its own protection filesystem level access control can still be used to restrict access ideally to +just the application server process.

+
+
+
Command Line
+
+

A new credential store can be created using the following command: -

+
+
+
+
]$ bin/elytron-tool.sh credential-store --create --location=standalone/configuration/propcredstore.cs --type PropertiesCredentialStore
+Credential Store has been successfully created
+
+
+
+
+
Management Operation
+
+

It is also possible to operate on a credential store using management operations against a running server using the application server’s CLI.

+
+
+

The following operation can be used to add a secret-key-credential-store resource to the elytron subsystem referencing this newly created credential store.

+
+
+
+
/] /subsystem=elytron/secret-key-credential-store=mycredstore:add(path=propcredstore.cs, relative-to=jboss.server.config.dir, create=false, populate=false)
+{"outcome" => "success"}
+
+
+
+

In this example the resource was added to reference an existing credential store, however with a small change this command can also automatically create the store if it does not exist, and +populate it with a generated SecretKey under the alias key if it does not already exist.

+
+
+
+
/] /subsystem=elytron/secret-key-credential-store=mycredstore:add(path=propcredstore.cs, relative-to=jboss.server.config.dir)
+{"outcome" => "success"}
+
+
+
+ + + + + +
+ + +If you rely on automatic generation of a SecretKey be sure to create a backup of the key as soon as possible. If you were to loose the key we do not have a mechanism to decrypt anything +encrypted with the lost key. +
+
+
+
+
+
+

16.2. Credential Manipulation

+
+

The contents of the credential stores can be manipulated using either the command line tool or by using management operations. Unlike key stores the credential store APIs allow for multiple entries to be stored under a single alias provided each entry is of a different credential type.

+
+
+

16.2.1. Adding Credentials

+
+

The different credential store implementations support different credential types as illustrated in this table.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Credential TypeKeyStoreCredentialStorePropertiesCredentialStore

PasswordCredential

Supported

Unsupported

KeyPairCredential

Supported

Unsupported

SecretKeyCredential

Supported

Supported

+
+

As with all the manipulation options it is possible to use either the command line tool or management operations against a running server to modify the contents of the store.

+
+
+ + + + + +
+ + +Care should be taken when using the command line tool to ensure the store is not currently in use by any other processes. If the store is in use by another process which updates the contents of the store changes made by the tool could be lost. +
+
+
+
PasswordCredential
+
+

Using the tooling it is possible to add a clear text password as a credential.

+
+
+
Command Line
+
+

The following command adds a new credential with an alias of example to the store using the command line tool: -

+
+
+
+
]$ bin/elytron-tool.sh credential-store --add=example --location=standalone/configuration/mycredstore.cs
+Credential store password:
+Secret to store:
+Confirm secret to store:
+Alias "example" has been successfully stored
+
+
+
+
+
Management Operation
+
+

Using a management operation the following command can be used to add a new alias of example to the credential store.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=elytron/credential-store=mycredstore:add-alias(alias=example, secret-value=ExamplePassword)
+{
+    "outcome" => "success",
+    "result" => undefined
+}
+
+
+
+
+
+
KeyPairCredential
+
+
Command Line
+
+

The following command allows you to import a key pair credential with an alias of example from a file containing +a private key in OpenSSH format:

+
+
+
+
]$ bin/elytron-tool.sh credential-store --import-key-pair example --private-key-location /home/user/.ssh/id_rsa --location=standalone/configuration/mycredstore.cs
+Credential store password:
+Confirm credential store password:
+Passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key): secret
+Confirm passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key): secret
+Alias "example" has been successfully stored
+
+
+
+

The following command allows you to import a key pair credential with an alias of example by specifying a private key in OpenSSH format :

+
+
+
+
]$ bin/elytron-tool.sh credential-store --import-key-pair example --private-key-string="-----BEGIN OPENSSH PRIVATE KEY-----
+                                                   b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCdRswttV
+                                                   UNQ6nKb6ojozTGAAAAEAAAAAEAAABoAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlz
+                                                   dHAyNTYAAABBBAKxnsRT7n6qJLKoD3mFfAvcH5ZFUyTzJVW8t60pNgNaXO4q5S4qL9yCCZ
+                                                   cKyg6QtVgRuVxkUSseuR3fiubyTnkAAADQq3vrkvuSfm4n345STr/i/29FZEFUd0qD++B2
+                                                   ZoWGPKU/xzvxH7S2GxREb5oXcIYO889jY6mdZT8LZm6ZZig3rqoEAqdPyllHmEadb7hY+y
+                                                   jwcQ4Wr1ekGgVwNHCNu2in3cYXxbrYGMHc33WmdNrbGRDUzK+EEUM2cwUiM7Pkrw5s88Ff
+                                                   IWI0V+567Ob9LxxIUO/QvSbKMJGbMM4jZ1V9V2Ti/GziGJ107CBudZr/7wNwxIK86BBAEg
+                                                   hfnrhYBIaOLrtP8R+96i8iu4iZAvcIbQ==
+                                                   -----END OPENSSH PRIVATE KEY-----"
+                                                   --location=standalone/configuration/mycredstore.cs
+Credential store password:
+Confirm credential store password:
+Passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key): secret
+Confirm passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key): secret
+Alias "example" has been successfully stored
+
+
+
+ + + + + +
+ + +If specifying your key in PKCS format rather than OpenSSH format, you must specify both the private and public key. The +PKCS private key must also not be encrypted with a passphrase. +
+
+
+

Alternatively to importing, you may use the command line tool to generate and store a key pair credential in a credential store. +The following command allows you to generate and store a key pair credential under the alias example using the ecdsa algorithm:

+
+
+
+
]$ bin/elytron-tool.sh credential-store --generate-key-pair example --algorithm EC --location=standalone/configuration/mycredstore.cs
+Credential store password:
+Confirm credential store password:
+Alias "example" has been successfully stored
+
+
+
+

You can then export the public key generated in OpenSSH format using the following command:

+
+
+
+
]$ bin/elytron-tool.sh credential-store --export-key-pair-public-key example
+Credential store password:
+Confirm credential store password:
+ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMfncZuHmR7uglb0M96ieArRFtp42xPn9+ugukbY8dyjOXoi
+cZrYRyy9+X68fylEWBMzyg+nhjWkxJlJ2M2LAGY=
+
+
+
+
+
+
SecretKeyCredential
+
+
Command Line
+
+

Each of the examples in this section uses the KeyStoreCredentialStore to use the PropertiesCredentialStore this can be specified on the command line by adding the --type PropertiesCredentialStore parameter to the command line.

+
+
+

A new secret key can be generated with the following command.

+
+
+
+
]$ bin/elytron-tool.sh credential-store --generate-secret-key=example --location=standalone/configuration/mycredstore.cs
+Credential store password:
+Alias "example" has been successfully stored
+
+
+
+

By default this will create a 256 bit secret key, if either a 128 bit or 192 bit secret key is desired this can be specified with the --size=128 or --size=192 parameters respectively.

+
+
+

An existing secret key can be exported with the following command.

+
+
+
+
]$ bin/elytron-tool.sh credential-store --export-secret-key=example --location=standalone/configuration/mycredstore.cs
+Credential store password:
+Exported SecretKey for alias example=RUxZAUucgH8RSMNvoUj/rMz+pBZddttGCuT9of4TgfYLnN5Z1w==
+
+
+
+ + + + + +
+ + +The exported key uses a custom representation to allow Elytron to recognise exported keys. +
+
+
+

Finally a previously exported secret key can be imported with the following command.

+
+
+
+
]$ bin/elytron-tool.sh credential-store --import-secret-key=imported --location=standalone/configuration/mycredstore.cs
+Credential store password:
+SecretKey to import: RUxZAUucgH8RSMNvoUj/rMz+pBZddttGCuT9of4TgfYLnN5Z1w==
+Alias "imported" has been successfully stored
+
+
+
+

It is possible to also specify the key to import on the command line e.g. --key=RUxZAUucgH8RSMNvoUj/rMz+pBZddttGCuT9of4TgfYLnN5Z1w== but this would be vieweable by others users that can consult running processes and might also be cached in the history of the shell executing the commands.

+
+
+
+
Management Operations
+
+

For secret key manipulation the same set of command are available for both the credential-store resource and the secret-key-credential-store resource.

+
+
+

A new secret key can be generated with the following command.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=elytron/credential-store=mycredstore:generate-secret-key(alias=example)
+{"outcome" => "success"}
+
+
+
+

To generate either a 128 bit key or 192 bit key the parameter key-size=128 or key-size=192 can be specified respectively.

+
+
+

An existing secret key can be exported with the following command.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=elytron/credential-store=mycredstore:export-secret-key(alias=example)
+{
+    "outcome" => "success",
+    "result" => {"key" => "RUxZAUs+Y1CzEPw0g2AHHOZ+oTKhT9osSabWQtoxR+O+42o11g=="}
+}
+
+
+
+
+
Finally a previously exported secret key can be imported with the following commands.
+
+[standalone@localhost:9990 /] history --disable
+[standalone@localhost:9990 /] /subsystem=elytron/credential-store=mycredstore:import-secret-key(alias=imported, key="RUxZAUs+Y1CzEPw0g2AHHOZ+oTKhT9osSabWQtoxR+O+42o11g==")
+{"outcome" => "success"}
+[standalone@localhost:9990 /] history --enable
+
+
+
+

In this last example we also temporarily disable the history in the CLI to prevent the key from being cached in the CLI hisory.

+
+
+
+
+
+

16.2.2. Listing Aliases

+
+

It is possible to list the aliases contained within the credential store, however it is not possible to list the actual values stored.

+
+
+
Command Line
+
+

Using the command line tool will show a list of aliases stored within the credential store:

+
+
+
+
]$ bin/elytron-tool.sh credential-store --aliases --location=standalone/configuration/mycredstore.cs
+Credential store password:
+Credential store contains following aliases: example
+
+
+
+
+
Management Operation
+
+

The following management operation will also show the aliases contained within the credential store.

+
+
+
+
/] /subsystem=elytron/credential-store=mycredstore:read-aliases
+{
+    "outcome" => "success",
+    "result" => ["example"]
+}
+
+
+
+
+
+

16.2.3. Removing Credentials

+
+

Finally, it is also possible to remove an alias from the credential store.

+
+
+
Command Line
+
+

Using the WildFly Elytron Tool the following command will remove an alias from the store.

+
+
+
+
]$ bin/elytron-tool.sh credential-store --remove=example --location=standalone/configuration/mycredstore.cs
+Credential store password:
+Confirm credential store password:
+Alias "example" has been successfully removed
+
+
+
+
+
Management Operation
+
+

The following management operation can be used to remove an alias from the credential store.

+
+
+
+
/] /subsystem=elytron/credential-store=mycredstore:remove-alias(alias=example)
+{
+    "outcome" => "success",
+    "result" => undefined,
+    "response-headers" => {"warnings" => [{
+        "warning" => "Update dependent resources as alias 'example' does not exist anymore",
+        "level" => "WARNING",
+        "operation" => {
+            "address" => [
+                ("subsystem" => "elytron"),
+                ("credential-store" => "mycredstore")
+            ],
+            "operation" => "remove-alias"
+        }
+    }]}
+}
+
+
+
+

By default the credential-store resource assumes the type to be removed is PasswordCredential. If a different type is to be removed it can be specified with the entry-type=SecretKeyCredential parameter. The secret-key-credential-store only holds secret keys so the entry type never needs to be specified.

+
+
+
+
+
+

16.3. Referencing Credentials

+
+

After being able to populate and manipulate a credential store the next step is being able to reference the stored credential so that it can be used.

+
+
+

16.3.1. Management Model References

+
+

Various resources that make use of credentials across the application server’s management model contain credential-reference attributes that can be used either to specify a clear-password or to cross-reference a credential from within a configured credential store.

+
+
+

The following is an example of how to define a key-store within the Elytron subsystem specifying a clear text password to access the store.

+
+
+
+
/] /subsystem=elytron/key-store=exampleKS:add(relative-to=jboss.server.config.dir, path=example.keystore,    \
+                                              type=JCEKS, credential-reference={clear-text=ExamplePassword})
+{"outcome" => "success"}
+
+
+
+

To reference a credential from the previously defined credential store the following command could be used instead.

+
+
+
+
/] /subsystem=elytron/key-store=exampleKS:add(relative-to=jboss.server.config.dir, path=example.keystore, type=JCEKS, credential-reference={store=mycredstore, alias=example})
+{"outcome" => "success"}
+
+
+
+

The above command assumes that the referenced credential already exists in the previously defined credential store. +The next section will describe how credentials can automatically be added to the previously defined credential store.

+
+
+
+

16.3.2. Automatic Updates of Credential Stores

+
+

Instead of needing to add a credential to a previously defined credential store in order to reference it from a credential-reference, +it is possible to have the credential get added automatically to the previously defined credential store by specifying both +the store and clear-text attributes for the credential-reference. In particular, when adding a new credential-reference +with both the store and clear-text attributes specified:

+
+
+
    +
  • +

    If the alias attribute is also specified, then one of the following will occur:

    +
    +
      +
    • +

      If the previously defined credential store does not contain an entry for the given alias, a new entry will be added +to the credential store to hold the clear text password that was specified. The clear-text attribute will then be +removed from the management model.

      +
    • +
    • +

      If the credential store does contain an entry for the given alias, the existing credential will be replaced with the +clear text password that was specified. The clear-text attribute will then be removed from the management model.

      +
    • +
    +
    +
  • +
  • +

    If the alias attribute is not specified, an alias will be generated and a new entry will be added to the credential +store to hold the clear text password that was specified. The clear-text attribute will then be removed from the +management model.

    +
  • +
+
+
+

As an example, the following CLI command will result in a new entry being added to the previously defined credential +store, mycredstore, with alias myNewAlias and credential myNewPassword:

+
+
+
+
/subsystem=elytron/key-store=exampleKS:add(relative-to=jboss.server.config.dir, path=example.keystore, type=JCEKS, credential-reference={store=mycredstore, alias=myNewAlias, clear-text=myNewPassword})
+{
+    "outcome" => "success",
+    "result" => {"credential-store-update" => {
+        "status" => "new-entry-added",
+        "new-alias" => "myNewAlias"
+    }}
+}
+
+
+
+

When updating an existing credential-reference that contains both the alias and store attributes to also specify +the clear-text attribute:

+
+
+
    +
  • +

    The existing credential in the previously defined credential store will be replaced with the clear text password that +was specified. The clear-text attribute will then be removed from the management model.

    +
  • +
+
+
+

As an example, the following CLI command will result in updating the credential for the myNewAlias entry that was just +added to the previously defined credential store:

+
+
+
+
/subsystem=elytron/key-store=exampleKS:write-attribute(name=credential-reference.clear-text,value=myUpdatedPassword)
+{
+    "outcome" => "success",
+    "result" => {"credential-store-update" => {"status" => "existing-entry-updated"}},
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+ + + + + +
+ + +If an operation that includes a credential-reference parameter fails for any reason, + no automatic credential store update will take place, i.e., any credential store that was + specified via the credential-reference attribute will contain the same contents as it + did before the operation was executed. +
+
+
+
+

16.3.3. wildfly-config.xml

+
+

If you are making use of the wildfly-config.xml descriptor it is also possible to define a credential store within this descriptor to obtain credentials without requiring them to be in-lined within the configuration.

+
+
+

As an example the CLI can be executed with a configuration:

+
+
+
+
]$ bin/jboss-cli.sh -c -Dwildfly.config.url=bin/wildfly-config.xml
+
+
+
+

Without using a credential store the username and credential can be specified in the clear e.g.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <authentication-rules>
+                    <rule use-configuration="default" />
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="default">
+                <sasl-mechanism-selector selector="DIGEST-MD5" />
+                <providers>
+                    <use-service-loader/>
+                </providers>
+                <set-user-name name="User" />
+                <credentials>
+                    <clear-password password="UserPassword" />
+                </credentials>
+             </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+

However, it is possible to move this password to the credential store and update the configuration to load it from the store e.g.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <credential-stores>
+            <credential-store name="mycredstore">
+                <attributes>
+                    <attribute name="keyStoreType" value="JCEKS" />
+                    <attribute name="location" value="standalone/configuration/mycredstore.cs" />
+                </attributes>
+                <protection-parameter-credentials>
+                    <clear-password password="StorePassword" />
+                </protection-parameter-credentials>
+            </credential-store>
+        </credential-stores>
+
+        <authentication-rules>
+            <rule use-configuration="default" />
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="default">
+                <sasl-mechanism-selector selector="DIGEST-MD5" />
+                <providers>
+                    <use-service-loader/>
+                </providers>
+                <set-user-name name="User" />
+                <credentials>
+                    <credential-store-reference store="mycredstore" alias="User" />
+                </credentials>
+             </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+

Within this second example the key changes being the addition of the <credential-stores /> section and updating the <credentials/> section to use a <credential-store-reference/> to specify which credential store should be used and which alias from that credential store should be used.

+
+
+

In the above example, the credential store’s protection parameter is specified as a clear password, but it is also possible +to specify it as a masked password.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.4">
+        <credential-stores>
+            <credential-store name="mycredstore">
+                <attributes>
+                    <attribute name="keyStoreType" value="JCEKS" />
+                    <attribute name="location" value="standalone/configuration/mycredstore.cs" />
+                </attributes>
+                <protection-parameter-credentials>
+                    <masked-password masked-password="M3loEZ7uua1X1PiYCYJDpg==" iteration-count="100" salt="12345678"/>
+                </protection-parameter-credentials>
+            </credential-store>
+        </credential-stores>
+
+        <authentication-rules>
+                    <rule use-configuration="default" />
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="default">
+                <sasl-mechanism-selector selector="DIGEST-MD5" />
+                <providers>
+                    <use-service-loader/>
+                </providers>
+                <set-user-name name="User" />
+                <credentials>
+                    <credential-store-reference store="mycredstore" alias="User" />
+                </credentials>
+             </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+
+
+

16.4. CredentialStore APIs

+
+

It is also possible to make use of the CredentialStore APIs directly. This could be useful for applications that require access to securely stored credentials. This could also be an option for an application to populate a credential store for use elsewhere.

+
+
+

The following code demonstrates how to obtain an initialised instance of KeyStoreCredentialStore so it can be used to store and retrieve credentials.

+
+
+
+
Password storePassword = ClearPassword.createRaw(ClearPassword.ALGORITHM_CLEAR, "StorePassword".toCharArray());
+ProtectionParameter protectionParameter = new CredentialSourceProtectionParameter(IdentityCredentials.NONE.withCredential(new PasswordCredential(storePassword)));
+
+CredentialStore credentialStore = CredentialStore.getInstance("KeyStoreCredentialStore", CREDENTIAL_STORE_PROVIDER);
+
+Map<String, String> configuration = new HashMap<>();
+configuration.put("location", "mystore.cs");
+configuration.put("create", "true");
+
+credentialStore.initialize(configuration, protectionParameter);
+
+
+
+

The following code illustrates how a couple of different credential types can be added to a credential store:

+
+
+
+
Password clearPassword = ClearPassword.createRaw(ClearPassword.ALGORITHM_CLEAR, "ExamplePassword".toCharArray());
+credentialStore.store("clearPassword", new PasswordCredential(clearPassword));
+
+KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
+keyGenerator.init(256);
+SecretKey secretKey = keyGenerator.generateKey();
+credentialStore.store("secretKey", new SecretKeyCredential(secretKey));
+
+
+
+

These credentials can then be obtained again from the store:

+
+
+
+
Password password = credentialStore.retrieve("clearPassword", PasswordCredential.class).getPassword();
+SecretKey secretKey = credentialStore.retrieve("secretKey", SecretKeyCredential.class).getSecretKey();
+
+
+
+ + + + + +
+ + +As the type is specified when retrieving a credential it is possible to store multiple credentials under the same alias. +
+
+
+

Please use the published javadoc for more information in relation to the APIs and the credential types supported within WildFly Elytron.

+
+
+
+

16.5. Migrating Existing Vaults

+
+

If migrating from a prior version of the application server it is possible that you already are making use of a PicketBox vault for the storage of clear text passwords. The tooling provided can be used to convert the vault to the format used by the KeyStoreCredentialStore.

+
+
+

Within the WildFly Elytron command line tool an additional command vault is available specifically for the conversion of legacy vaults to a credential store. A complete vault can be converted to a credential store with the following command: -

+
+
+
+
]$ bin/elytron-tool.sh vault --enc-dir standalone/configuration/vault --keystore standalone/configuration/vault.keystore --iteration 44 --salt 00000000 --alias vault \
+    --location standalone/configuration/newcredstore.cs
+Vault password:
+Confirm vault password:
+Vault (enc-dir="standalone/configuration/vault";keystore="standalone/configuration/vault.keystore") converted to credential store "standalone/configuration/newcredstore.cs"
+
+
+
+

When executing this command the destination credential store must not already exist. The password used for the credential store will be the password originally used for the vault.

+
+
+

Entries stored within the vault would have been stored specifying a "block" and "alias" value; within the credential store the new alias will be block::alias.

+
+
+
+

16.6. Custom Credential Store

+
+

It is also possible to provide custom credential store implementations. Overall the pattern to implementing a custom credential store is very similar to the pattern that would be followed to implement a custom key store.

+
+
+
    +
  • +

    Extend the SPI

    +
  • +
  • +

    Implement a java.security.Provider to register the implementation.

    +
  • +
+
+
+

The SPI to be extended is org.wildfly.security.credential.store.CredentialStoreSpi. The custom implementation will be required to implement the following methods.

+
+
+
+
public abstract void initialize(Map<String, String> attributes, CredentialStore.ProtectionParameter protectionParameter, Provider[] providers) throws CredentialStoreException;
+
+
+
+

This method is required to perform the initialisation of the credential store, by taking in a Map of attributes it allows for custom configuration to be provided as required by the store.

+
+
+
+
public abstract boolean isModifiable();
+
+
+
+

A credential store needs to advertise if it supports modifications so clients can determine if the modification APIs can be used.

+
+
+
+
public abstract <C extends Credential> C retrieve(String credentialAlias, Class<C> credentialType, String credentialAlgorithm, AlgorithmParameterSpec parameterSpec, CredentialStore.ProtectionParameter protectionParameter) throws CredentialStoreException;
+
+
+
+

The retrieve method is essential for all credential store implementations to retrieve credentials of a specific type using the alias specified.

+
+
+

In addition to retrieve there are two more methods that can optionally be implemented.

+
+
+
+
public boolean exists(String credentialAlias, Class<? extends Credential> credentialType) throws CredentialStoreException;
+
+public Set<String> getAliases() throws UnsupportedOperationException, CredentialStoreException;
+
+
+
+

A default implementation of exists already is implemented which checks if a call to retrieve returns a credential as requested. However it could be optimal to check the existence of a credential without actually loading it. The getAliases method is optional as some implementations may only be able to retrieve a credential by name rather than query all available credentials.

+
+
+

The next set of methods to implement are the methods needed for updates to be applied to the underlying credential store.

+
+
+
+
public abstract void store(String credentialAlias, Credential credential, CredentialStore.ProtectionParameter protectionParameter)
+            throws CredentialStoreException, UnsupportedCredentialTypeException;
+
+public abstract void remove(String credentialAlias, Class<? extends Credential> credentialType, String credentialAlgorithm, AlgorithmParameterSpec parameterSpec) throws CredentialStoreException;
+
+public void flush() throws CredentialStoreException;
+
+
+
+

The store and remove methods either add credentials to a credential store or remove them. Implementing the flush method is optional but this method can be used as a trigger for a store to persist its state.

+
+
+

The final stage is to provide an implementation of java.security.Provider which can return an instance of the SPI for the CredentialStore service type. The WildFly Elytron provider which makes the Elytron implementations available is org.wildfly.security.credential.store.WildFlyElytronCredentialStoreProvider. The source code for this provider can be used as an example.

+
+
+
+

16.7. Reference

+
+

The previous sections have made use of either the WildFly Elytron Tool or the management operations and specified the arguments and configuration options required for the action being performed. These operations and tools however support a variety of other options so this section provides some additional detail.

+
+
+

16.7.1. Elytron Tool - credential-store Command

+
+

Examples of how to structure calling the credential-store command were provided earlier. When using the credential-store command the following actions are possible: -

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 12. credential-store Actions
ActionDescription

-a,--add <alias>

Add a new entry to the credential store using the specified alias.

-c,--create

Create a new credential store instance.

-e,--exists <alias>

Test if the specified alias already exists in the credential store.

-r,--remove <alias>

Remove the alias specified from the credential store.

-g,--generate-key-pair <alias>

Generate a new key pair credential and add it as an entry to the credential store using the specified alias.

--generate-secret-key <alias>

Generate a new secret key credential and add it as an entry to the credential store using the specified alias.

--export-secret-key <alias>

Export a secret key credential identified using the specified alias.

-xp,--export-key-pair-public-key <alias>

Display the public key of a key pair credential entry under the specified alias in OpenSSH format.

--import-secret-key <alias>

Import a secret key credential and add it as an entry to the credential store using the specified alias.

-ikp,--import-key-pair <alias>

Add a new key pair credential entry to the credential store using the specified alias.

--encrypt <alias>

Encrypt a clear text string using the secret key stored under the specified alias.

-v,--aliases

Display all aliases

-f,--summary

Print summary, especially command how to create this credential store

-h,--help

Get help with usage of this command

+
+

The following parameters can be provided for each action to specify how to load the store.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 13. credential-store Parameters
ParameterDescription

-d,--debug

Print stack trace when error occurs.

-i,--iteration <arg>

Iteration count for final masked password of the credential store

-l,--location <loc>

Location of credential store storage file

-n,--entry-type <type>

Type of entry in credential store

-o,--other-providers <providers>

Comma separated list of Jakarta Connectors provider names. Providers will be supplied to the credential store instance. Each provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.

-p,--password <pwd>

Password for credential store

-q,--credential-store-provider <cs-provider>

Provider name containing CredentialStoreSpi implementation. Provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.

-s,--salt <arg>

Salt to apply for final masked password of the credential store

-t,--type <type>

Credential store type

-u,--properties <arg>

Implementation properties for credential store type in form of "prop1=value1; …​ ;propN=valueN"

-x,--secret <secret to store>

Password credential value

+
+

The following parameters can be provided for the generate-key-pair command:

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 14. generate-key-pair Parameters
ParameterDescriptionDefault Value

-k, --algorithm <algorithm name>

The encryption algorithm to be used. One of: RSA, DSA, or EC

RSA

-j,--size <size in bytes>

Size of the private key in bytes

RSA: 2048, DSA: 2048, EC: 256

+
+

The following parameter can be provided for the generate-secret-key command:

+
+ + +++++ + + + + + + + + + + + + + + +
Table 15. generate-secret-key Parameter
ParameterDescriptionDefault Value

--size

Size of the secret key in bits, can be one of 128, 192, or 256.

256

+
+

The following parameters can be provided for the import-key-pair command:

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 16. import-key-pair Parameters
ParameterDescription

-pvk, --private-key-string <private key to store>

The private key as a string. Alternative to private-key-location

-pvl, --private-key-location <path>

The path to a file containing a private key. Alternative to private-key-string

-pbk, --public-key-string <public key to store>

The public key as a string. Alternative to public-key-location

-pbl, --public-key-location <path>

The path to a file containing a public key. Alternative to public-key-string

-kp, --key-passphrase <passphrase>

The passphrase used to decrypt the private key if needed. Can also be specified via prompt

+
+

The following parameter can be provided for the import-secret-key command:

+
+ + +++++ + + + + + + + + + + + + + + +
Table 17. import-secret-key Parameter
ParameterDescriptionDefault Value

--key

The secret key to be imported, if not specified the key will be prompted for.

N/A

+
+

The following parameters can be provided for the encrypt command:

+
+ + +++++ + + + + + + + + + + + + + + +
Table 18. encrypt Parameters
ParameterDescriptionDefault Value

--clear-text <clear text>

The clear text string to encrypt, if omitted this wil be prompted for.

N/AThe following parameters can be provided for the generate-key-pair command:

+

.generate-key-pair Parameters

+
+

|Parameter |Description |Default Value

+
+
+

|-k, --algorithm <algorithm name> +|The encryption algorithm to be used. One of: RSA, DSA, or EC +|RSA

+
+
+
+

16.7.2. Elytron Tool - vault Command

+
+

The vault command is used to convert a legacy vault to a credential store and supports the following parameters.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 19. vault Parameters
ParameterDescription

-b,--bulk-convert <description file>

Bulk conversion with options listed in description file.

-d,--debug

Print stack trace when error occurs.

-e,--enc-dir <dir>

Vault directory containing encrypted files (defaults to "vault")

-f,--summary

Print summary of conversion

-h,--help

Get help with usage of this command

-i,--iteration <arg>

Iteration count (defaults to "23")

-k,--keystore <keystore>

Vault keystore URL (defaults to "vault.keystore")

-l,--location <loc>

Location of credential store storage file (defaults to "converted-vault.cr-store" in vault encryption directory)

-o,--other-providers <providers>

Comma separated list of Jakarta Connectors provider names. Providers will be supplied to the credential store instance. Each provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.

-p,--keystore-password <pwd>

Vault keystore password, used to open original vault key store, and used as password for new converted credential store

-q,--credential-store-provider <cs-provider>

Provider name containing CredentialStoreSpi implementation. Provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.

-s,--salt <salt>

8 character salt (defaults to "12345678")

-t,--type <type>

Converted credential store type (defaults to "KeyStoreCredentialStore")

-u,--properties <arg>

Configuration parameters for credential store in form of: "parameter1=value1; …​ ;parameterN=valueN"

-v,--alias <arg>

Vault key alias within key store (defaults to "vault")

+
+
+

16.7.3. KeyStoreCredentialStore

+
+

When configuring the KeyStoreCredentialStore the following configuration options are supported.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 20. KeyStoreCredentialStore Configuration
NameDefaultDescription

create

false

If the credential store does not exist should it be created?

cryptographicAlgorithm

AES/CBC/NoPadding

The algorithm to use when using an external store.

external

false

Should external storage be used?

externalPath

N/A

Path to external storage.

keyAlias

cs_key

The alias to use from the KeyStore when working with external storage.

keyStoreType

KeyStore.getDefault()

The type of the key store used for the credential store.

location

N/A

The location of the credential store.

modifiable

true

Should the store be modifiable via the exposed API.

+
+
+
+
+
+

17. Encrypted Expressions

+
+
+

WildFly Elytron provides support for handling encrypted expressions in the management model using a SecretKey from a CredentialStore to decrypt the expression at runtime.

+
+
+

For information regarding how to create, configure, and populate credential stores including the manipulation of secret keys please refer to the Credential Store chapter.

+
+
+

Within the elytron subsystem one or more resolvers can be defined to handle the decryption of a previously encrypted expression. Each resolver will reference a single secret key in a +single credential store which it will use to decrypt the expressions. Encrypted expressions can take one of two forms:

+
+
+
    +
  • +

    ${ENC::ResolverName:RUxZAUMQXUj3qP1hbXyO5PpmsbgkepjoscIf3tKXvGiPDXYqNAc=}

    +
  • +
  • +

    ${ENC::RUxZAUMQXUj3qP1hbXyO5PpmsbgkepjoscIf3tKXvGiPDXYqNAc=}

    +
  • +
+
+
+

In both cases the ENC prefix is used to identify the expression is an encrypted expression. This prefix is the default however it is possible to define an alternative prefix for use +across the configuration.

+
+
+

Within the first example the ResolverName is the name of an individual resolver definition. The name of the resolver has been omitted in the second example as it is also possible +to define a default resolver which will be used if no resolver is specified within the expression.

+
+
+

17.1. expression=encryption resource

+
+

Support for decrypting expressions is enabled by defining a singleton expression=encryption resource within the elytron subsystem.

+
+
+

This resource can be defined with the following attributes.

+
+
+
    +
  • +

    prefix (Default ENC) - The prefix used within the encrypted expressions.

    +
  • +
  • +

    default-resolver (Optional) - For expressions that do not define a resolver, the default resolver to use.

    +
  • +
  • +

    resolvers - A lit of one more named resolver definitions.

    +
  • +
+
+
+

An individual resolver is defined with three attributes:

+
+
+
    +
  • +

    name - The name of the individual configuration used to reference it.

    +
  • +
  • +

    credential-store - Reference to the credential store instance that contains the secret key this resolver will use.

    +
  • +
  • +

    secret-key - The alias of the secret key within the credential store to use.

    +
  • +
+
+
+

The following is an example CLI command to define an expression=encryption resource in the elytron subsystem with two resolver definitions one if which is a +default and an alternative prefix.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=elytron/expression=encryption:add(prefix=ENCRYPTED, default-resolver=one, \
+    resolvers=[{name=one, credential-store=store-one, secret-key=key}, \
+               {name=two, credential-store=store-two,secret-key=key}])
+{"outcome" => "success"}
+
+
+
+
+

17.2. Creating Expressions

+
+ + + + + +
+ + +The following section illustrates how to create an encrypted expression. If you repeat the same command for the same clear text it is normal that a different +result is returned for the same key. This is because a unique initialisation vector is used for each call. +
+
+
+

17.2.1. Management Operation

+
+

Once the expression=encryption resource has been defined the create-expression management operation can be called to generate an expression using the referenced +secret key.

+
+
+ + + + + +
+ + +When using management operations to create expressions from a clear-text string remember to disable the history in the CLI first otherwise the clear text string will be cached. +
+
+
+

In these examples the expression=encryption resource has been configured to use the default prefix.

+
+
+
+
[standalone@localhost:9990 /] history --disable
+[standalone@localhost:9990 /] /subsystem=elytron/expression=encryption:create-expression(resolver=two, clear-text=MyPassword)
+{
+    "outcome" => "success",
+    "result" => {"expression" => "${ENC::two:RUxZAUMQcUVLxqjt8zh8FabcA+wcnux+mqfLE27sfmHfKNG9BcY=}"}
+}
+
+[standalone@localhost:9990 /] history --enable
+
+
+
+

When using the create-expression operation the resolver attribute can be ommited, in that case the default-resolver will be used instead.

+
+
+
+
[standalone@localhost:9990 /] history --disable
+[standalone@localhost:9990 /] /subsystem=elytron/expression=encryption:create-expression(clear-text=MyPassword)
+{
+    "outcome" => "success",
+    "result" => {"expression" => "${ENC::RUxZAUMQu7biKBAwtUi+to+BlQnbjK3URUHMUDh8ReTlN0Alao0=}"}
+}
+
+[standalone@localhost:9990 /] history --enable
+
+
+
+

In both cases the resulting expression can be used on any attribute of a resource which supports the use of expressions.

+
+
+
+

17.2.2. Command Line Tool

+
+

Once a credential store has been populated with a secret key the credential-store command of the elytron-tool can also be used to create the encrypted string to include in an expression.

+
+
+
+
]$ bin/elytron-tool.sh credential-store --location standalone/configuration/store-one.cs --type PropertiesCredentialStore --encrypt key
+Clear text value:
+Confirm clear text value:
+Clear text encrypted to token 'RUxZAUMQvGzk6Vaadp2cahhZ6rlPhHOZcWyjXALlAthrENvRTvQ=' using alias 'key'.
+
+
+
+

The --encrypt action is used with the credential-store command, the argument to this action is the alias of the secret key to use. In this form the tool will prompt +twice for the clear text which is being encrypted. When using the command line tool the output is just the Base64 encoded encrypted ciphertext. To use this in the management model +it will need to be included in an expression as described earlier i.e. using the appropriate prefix and if required resolver name.

+
+
+

When using the --encrypt action it is also possible to pass in --clear-text parameter to pass in the clear text directly but this may be visible to other users and may also +be cached in the command history of your shell.

+
+
+
+
+

17.3. Domain Mode

+
+

When using encrypted expressions in domain mode things are slightly different to how the legacy vault may have been used in the past.

+
+
+

To make use of encrypted expressions in the host controller configuration the expression=encryption resource and relevant *credential-store definitions must be defined +within the elytron subsystem definition of the host controller i.e. in the same host.xml configuration.

+
+
+

For expressions within a domain profile being used to configure one or more servers the expression=encryption resource and relevant *credential-store definitions must be defined within the elytron subsystem +definition of the same profile.

+
+
+

The runtime management operations are not supported against the expression=encryption or *credential-store when defined within a domain profile so for these environments the credential store and relevant +expressions should be created offline before defining in the model. It is possible to reference a common credential store file shared between the host controller management model and the domain profile but after making +any updates to the credential store from the host controller the application server processes will need to be restarted to force them to reload the credential store.

+
+
+
+
+
+

18. Custom Components

+
+
+

WildFly Elytron subsystem allows adding custom implementation of different +components in form of WildFly modules into the WildFly instance and use them +by the same way as built-in Elytron subsystem components. +For example, you can create custom security event listener to develop custom +audit mechanisms and store information about user authentication attempts in +custom storage structure. Or you can create custom security realm to +authenticate users against your own identities storage.

+
+
+

To find what types of custom components you can implement you can use Tab +completion:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=elytron/custom-
+custom-credential-security-factory  custom-realm
+custom-evidence-decoder             custom-realm-mapper
+custom-modifiable-realm             custom-role-decoder
+custom-permission-mapper            custom-role-mapper
+custom-principal-decoder            custom-security-event-listener
+custom-principal-transformer
+
+
+
+

18.1. Security event listener

+
+

This section describes how to add a custom security event listener. Similar steps can be followed to add another +custom component type.

+
+
+

To create custom security event listener you need to implement java.util.function.Consumer<org.wildfly.security.auth.server.event.SecurityEvent> interface. +Resulting class needs to be packed into JAR and WildFly module created. +You can create appropriate directory structure and module descriptor manually, or you can use following command of WildFly CLI:

+
+
+
+
bin/jboss-cli.sh
+module add --name=my.module --resources=my-listener.jar --dependencies=org.wildfly.security.elytron
+
+
+
+

Check +Class loading doc +for more information how to create WildFly module.

+
+
+

When appropriate module is on place, you can start using it by adding Elytron subsystem resource:

+
+
+
+
/subsystem=elytron/custom-security-event-listener=myListener:add(
+        module=my.module, class-name=my.module.MyAuditListener)
+
+
+
+

Now you can start to use it as any other security event listener - typically to set it as listener of ApplicationDomain:

+
+
+
+
/subsystem=elytron/security-domain=ApplicationDomain:write-attribute(name=security-event-listener, value=myListener)
+
+
+
+

After server reload the listener will receive all security events from given security domain.

+
+
+
+

18.2. Configurable custom components

+
+

You can also provide some component configuration from the subsystem, if class of your component will implement following method:

+
+
+
+
public void initialize(Map<String, String> configuration)
+
+
+
+

Afterwards you can provide configuration into your component from the subsystem using attribute configuration:

+
+
+
+
/subsystem=elytron/custom-...=my-component:add(module=..., class-name=..., configuration={myAttribute="myValue"})
+
+
+
+

After the component construction, the initialize method will be called with the configuration.

+
+
+
+
+
+

19. Elytron WildFly Java Security Manager

+
+
+

19.1. Overview

+
+

19.1.1. General introduction

+
+

The Elytron WildFly Java Security Manager is build on top of and within the Java SE Platform Security Architecture.

+
+
+

The Java Enterprise Edition (EE) 7 specification introduced a new feature which allows application developers to specify a Java Security Manager (JSM) policy for their Java EE applications, when deployed to a compliant Java EE Application Server such as WildFly. Until now, writing JSM policies has been pretty tedious. Now a new tool has been developed which allows the generation of a JSM policy for deployments running on WildFly. It is possible that running with JSM enabled may affect performance, JEP 232 indicates the performance impact would be 10-15%, but it is still recommended to test the impact per application.

+
+
+

Elytron WildFly Java Security Manager basic enhancements are

+
+
+
    +
  • +

    Support of JavaEE 7 (and newer) Java EE application permissions schema to allow declarative security per application deployment.

    +
  • +
  • +

    Support of minimum and maximum permissions per server instance.

    +
  • +
  • +

    Support of a "log-only" mode to ease development and testing of permissions.

    +
  • +
  • +

    Output of debug information to detect missing permissions.

    +
  • +
  • +

    Output of trace information to analyse special situations with protection domains, classloaders, and codesources.

    +
  • +
+
+
+
Why Run with the Java Security Manager Enabled?
+
+

Running a JSM will not fully protect the server from malicious attackers exploiting security vulnerabilities. It does, however, offer another layer of protection which can help reduce the impact of serious security vulnerabilities, such as deserialization attacks. For example, most of the recent attacks against Jackson Databind rely on making a Socket connection to an attacker-controlled JNDI Server to load malicious code. This article provides information on how this issue potentially affects an application written for JBoss EAP, which would be same for WildFly. The Security Manager could block the socket creation, and potentially thwart the attack.

+
+
+
+
JavaSE 17 Deprecate the Security Manager for Removal
+
+

The community decided to deprecate the Java Security Manager with Java 17. The full details are described in JEP 411: Deprecate the Security Manager for Removal. WildFly 29 still tests and actively supports the Security Manager. Used in conjunction with other tools such as Serialization Filtering the JSM is still a good defense in depth measure.

+
+
+
+
Multi-Layer Security
+
+

The Elytron WildFly Java Security Manager is just one piece in a multi-layer security with Defense in depth. Take care to harden your environment and minimize rights of the process for example with SELinux and systemd service hardening.

+
+
+
+
+
+

19.2. The Security manager subsystem

+
+

19.2.1. Enabling the Security Manager

+
+

You can enable the security manager with one of the following options:

+
+
+
+
./standalone.sh -secmgr # command line argument or
+./standalone.sh SECMGR=true
+
+
+
+

The server startup log should indicate this

+
+
+
+
INFO  [org.jboss.as] (MSC service thread 1-8) WFLYSRV0235: Security Manager is enabled
+
+
+
+

The use of -Djava.security.manager as described in Managing Applets and Applications has been removed from WildFly.

+
+
+
+

19.2.2. Security Policy Support

+
+

You can still utilize a custom security policy file with the -Djava.security.policy option. This is useful for special cases, for example a java agent. The default is the JVM provided policy.

+
+
+
+
./standalone.sh -secmgr -Djava.security.policy=file://$JBOSS_HOME/standalone/configuration/customjsm.policy
+
+
+
+

-Djava.security.policy= with one equal sign (=) utilizes the default policy plus the custom policy. +-Djava.security.policy== with two equal signs (==) utilizes only the custom policy, take care for the necessary rights of the JVM in this case.

+
+
+
Property replacement in security policies
+
+

You can use variables in custom security policies which are resolved at runtime. You have to specify them on the command line or in the $JBOSS_HOME/bin/standalone.conf file. Properties in the server configuration are not available at the time of variable resolution on startup for the JSM.

+
+
+
+
+

19.2.3. Log-only mode

+
+

The log-only mode could be described as JSM simulation mode: Every permission check will be done but the result will not be propagated to the system - no SecurityException will be thrown. It is NOT about enabling or disabling log entries, which is solely driven by the logging configuration. The log-only mode is controlled with the -Dorg.wildfly.security.manager.log-only option. The default is false.

+
+
+
+
./standalone.sh -secmgr -Dorg.wildfly.security.manager.log-only=true
+
+
+
+

Do NOT use this option in production environments.

+
+
+
+

19.2.4. Logging Debug and trace

+
+

You can find a detailed description and how to about the command line interface and the logging configuration in the Admin Guide. The logger name to configure for the Elytron WildFly Security Manager is org.wildfly.security.access.

+
+
+
WildFly Security Manager Debug logging
+
+

Debug is enabled via the following CLI commands

+
+
+
+
/subsystem=logging/logger=org.wildfly.security.access:add
+/subsystem=logging/logger=org.wildfly.security.access:write-attribute(name=level,value=DEBUG)
+
+
+
+

A sample output will look like this:

+
+
+
+
DEBUG [org.wildfly.security.access] (Batch Thread - 1) Permission check failed (permission "("java.util.PropertyPermission" "java.io.tmpdir" "read")" in code source "(vfs:/content/batch-processing.war/WEB-INF/classes <no signer certificates>)" of "ModuleClassLoader for Module "deployment.batch-processing.war" from Service Module Loader")
+
+
+
+
+
WildFly Security Manager Trace logging
+
+

You might have a case where you need to find out what exactly caused a certain permission request. Or you have an error case with an null classloader or null codesource. To get a stacktrace you can enable org.wildfly.security.access on log level TRACE.

+
+
+
+
/subsystem=logging/logger=org.wildfly.security.access:add
+/subsystem=logging/logger=org.wildfly.security.access:write-attribute(name=level,value=TRACE)
+
+
+
+

Attention: This generates a lot of log output and has a severe performance impact. It’s not intended for permanent activation in development or testing but for special cases only.

+
+
+
+
Logging Profiles
+
+

If you are using one or more logging profiles it is strongly recommended to configure the org.wildfly.security.access logger for the server AND all logging profiles. If not, you might miss a relevant output.

+
+
+
+
+

19.2.5. Minimum and maximum permissions

+
+

The security-manager subsystem configures a maximum-set with the AllPermission by default:

+
+
+
+
            <deployment-permissions>
+                <maximum-set>
+                    <permission class="java.security.AllPermission"/>
+                </maximum-set>
+            </deployment-permissions>
+
+
+
+

If you cannot configure a third-party blackbox deployment unit or you want to share a common set of permissions across multiple deployments you can add a minimum-set of permissions. +You could modify the maximum-set, remove the AllPermission and setup further restrictions to permissions you are willing to grant to deployments.

+
+
+
+

19.2.6. Property replacement in permissions.xml

+
+

Expression resolution in EE security manager deployment descriptors (permissions.xml and jboss-permissions.xml) is supported since WildFly 19. You can use the familiar ${foo:true} syntax in these deployment descriptors to allow customization of settings at runtime.

+
+
+

Enable in standalone mode

+
+
+
+
[standalone@localhost:9990 /] /subsystem=ee:write-attribute(name=jboss-descriptor-property-replacement,value=TRUE)
+[standalone@localhost:9990 /] /subsystem=ee:write-attribute(name=spec-descriptor-property-replacement,value=TRUE)
+
+
+
+

Enable in domain mode

+
+
+
+
[domain@localhost:9990 /] /profile=*/subsystem=ee:write-attribute(name=jboss-descriptor-property-replacement, value=TRUE)
+[domain@localhost:9990 /] /profile=*/subsystem=ee:write-attribute(name=spec-descriptor-property-replacement, value=TRUE)
+
+
+
+
+

19.2.7. Sample permissions.xml

+
+

The permissions.xml file has to be placed below META-INF of deployment unit. The following example shows some entries, including +property replacement. This is especially useful for immutable artifacts.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<permissions xmlns="https://jakarta.ee/xml/ns/jakartaee"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
+             https://jakarta.ee/xml/ns/jakartaee/permissions_10.xsd"
+             version="10">
+    <permission>
+        <class-name>java.util.PropertyPermission</class-name>
+        <name>*</name> <!-- many 3rd party APIs cache and require access to all properties -->
+        <actions>read, write</actions>
+    </permission>
+    <permission>
+        <class-name>java.lang.RuntimePermission</class-name>
+        <name>getClassLoader</name>
+    </permission>
+    <permission>
+        <class-name>java.io.FilePermission</class-name>
+        <name>${install.app.home}/a/folder/-</name> <!-- recursive in and below folder -->
+        <actions>read</actions> <!-- but not write, delete, execute -->
+    </permission>
+    <permission>
+        <class-name>java.io.FilePermission</class-name>
+        <name>${install.app.home}/b/folder</name> <!-- folder itself -->
+        <actions>read, write, delete</actions> <!-- but not execute -->
+    </permission>
+    <permission>
+        <class-name>java.io.FilePermission</class-name>
+        <name>${install.app.home}/b/folder/*</name> <!-- all IN the folder -->
+        <actions>read, write, delete</actions> <!-- but not execute -->
+    </permission>
+    <permission>
+        <class-name>java.net.URLPermission</class-name>
+        <name>${myserver.prot}://${myserver.hostname}:${myserver.port}/c/path/-</name> <!-- recursive in and below path -->
+        <actions>POST,GET,DELETE:*</actions> <!-- refer to JavaDoc for more samples -->
+    </permission>
+</permissions>
+
+
+
+
+
+

19.3. How to generate a Java Security Manager Policy

+
+

19.3.1. Prerequisites

+
+
    +
  • +

    Java EE EAR or WAR file to add policies to;

    +
  • +
  • +

    Targeting WildFly 11 or later;

    +
  • +
  • +

    the Gradle build tool https://gradle.org/install/

    +
  • +
  • +

    Comprehensive test plan which exercises every "normal" function of the application.

    +
  • +
+
+
+

If a comprehensive test plan isn’t available, a policy could be generated in a production environment, as long as some extra disk space for logging is available and there is confidence the security of the application is not going to be compromised while generating policies.

+
+
+
+

19.3.2. Setup 'Log Only' mode and 'debug' logging for the Security Manager

+
+

Please enable the log-only mode and debug logging.

+
+
+
+

19.3.3. Test the application to generate policy violations

+
+

For this example we’ll use the batch-processing quickstart. Follow the README to deploy the application and access it running on the application server at http://localhost:8080/batch-processing. Click the 'Generate a new file and start import job' button in the Web UI and notice some policy violations are logged to the $JBOSS_HOME/standalone/log/server.log file, for example:

+
+
+
+
DEBUG [org.wildfly.security.access] (Batch Thread - 1) Permission check failed (permission "("java.util.PropertyPermission" "java.io.tmpdir" "read")" in code source "(vfs:/content/batch-processing.war/WEB-INF/classes <no signer certificates>)" of "ModuleClassLoader for Module "deployment.batch-processing.war" from Service Module Loader")
+
+
+
+
+

19.3.4. Generate a policy file for the application

+
+

Checkout the source code for the wildfly-policygen project written by Red Hat Product Security.

+
+
+
+
git clone git@github.com:jasinner/wildfly-policygen.git
+
+
+
+

Set the location of the server.log file which contains the generated security violations in the build.gradle script, i.e.:

+
+
+
+
task runScript (dependsOn: 'classes', type: JavaExec) {
+    main = 'com.redhat.prodsec.eap.EntryPoint'
+    classpath = sourceSets.main.runtimeClasspath
+    args '$JBOSS_HOME/standalone/log/server.log'
+}
+
+
+
+

Run wildfly-policygen using gradle, i.e.:

+
+
+
+
gradle runScript
+
+
+
+

A permissions.xml file should be generated in the current directory. Using the example application, the file is called batch-processing.war.permissions.xml. Copy that file to src/main/webapp/META-INF/permissions.xml, build, and redeploy the application, for example:

+
+
+
+
cp batch-processing.war.permissions.xml $APP_HOME/src/main/webapp/META-INF/permissions.xml
+
+
+
+

Where APP_HOME is an environment variable pointing to the batch-processing application’s home directory.

+
+
+
+

19.3.5. Run with the security manager in enforcing mode

+
+

Recall that we set the org.wildfly.security.manager.log-only system property in order to log permission violations. Remove that system property or set it to false in order to enforce the JSM policy that’s been added to the deployment. Once that line has been changed or removed from bin/standalone.conf, restart the application server, build, and redeploy the application.

+
+
+

Also go ahead and remove the extra logging category that was added previously using the CLI, e.g.:

+
+
+
+
/subsystem=logging/logger=org.wildfly.security.access:remove
+
+
+
+

This time there shouldn’t be any permission violations logged in the server.log file.

+
+
+
+
+

19.4. Conclusion

+
+

While the Java Security Manager will not prevent all security vulnerabilities possible against an application deployed to WildFly, it will add another layer of protection, which could mitigate the impact of serious security vulnerabilities such as deserialization attacks. If running with Security Manager enabled, be sure to check the impact on the performance of the application to make sure it’s within acceptable limits. Finally, use of the wildfly-policygen tool is not officially supported by Red Hat, however issues can be raised for the project in Github or in the WildFly User Forum.

+
+
+
+

19.5. Further background

+
+

Additionally to the documentation of JBoss Modules and the Security Manager the following explanations have been extracted from an WildFly developer conversation.

+
+
+

19.5.1. Elytron WildFly Security Manager and Protection Domains

+
+

Within WildFly there are two types of ProtectionDomain:

+
+
+
    +
  • +

    Server module (everything under the modules folder).

    +
  • +
  • +

    Deployment.

    +
  • +
+
+
+

Server modules automatically have the AllPermission granted. +Deployments have a combination of their permission.xml as well as possibly the minimal permission set from the security manager subsystem.

+
+
+
Permission checks
+
+

As a call progresses from class to class, module to module, deployment to module a list of all of the protection domains of each of these builds up. +When a permission check is performed it will only succeed if each and every protection domain on the call stack has been granted the permission.

+
+
+

This is where doPrivileged comes in, this is effectively saying "At this point in the callstack it is verified safe, forget the protection domains that called me." +So when a deployment calls into a server module and that server module calls doPrivileged then the deployments module will not longer be a part of the permission check.

+
+
+

Adding a doPrivileged seems an obvious solution but when added one also need to think about how deployments could abuse this to get their protection domain dropped from the permissions check.

+
+
+
+
Privileged blocks in dependencies
+
+

Adding the privileged block in a dependency used by WildFly works because the protection domain of the server modules has all the permissions. It is important to understand how module all permissions and doPrivileged checks work combined for a deployment.

+
+
+

One point to start with there is nothing special about a PrivilegedAction: PrivilegedAction is an interface which allows a Runnable class to be passed in and also has a return type. If this was added later it could have been implemented with the functional interfaces. The special part is the doPrivileged call. +Under normal circumstances every jar would be represented by it’s own protection domain and each jar could be assigned it’s own permissions. When the security manager performs it’s permissions check it would make sure every protection domain in the call stack has been granted that permission.

+
+
+

The WildFly modules case is slightly special as all the modules just get granted AllPermission, so we end up in a situation where deployments have a defined set of permissions and the WildFly modules have all - by default the security manager checks the permissions of both of these during a permission check that spans them - the WildFly module will of course always pass.

+
+
+

Because of WildFly’s model it is easy to get into the assumption that it is the doPrivileged call which is doing something special to bypass the security manager permissions check, it is not - all it is doing is dropping the protection domains from the call stack prior to that point, so we just end up with the protection domains for WildFly modules on the call stack which have the all permission.

+
+
+

So where you say the current protection domain where the dependency is has all permissions granted - yes that is it - the remaining protections domains on the call stack have the appropriate permissions granted.

+
+
+

The documentation might lead to the view the doPriviledge does some magical things that allowed your code run as trusted code that can bypass the permissions, for example at What It Means to Have Privileged Code, with sentences as:

+
+
+
+
+

Marking code as "privileged" enables a piece of trusted code to temporarily enable access to more resources than are available directly to the code that called it. This is necessary in some situations. For example, an application may not be allowed direct access to files that contain fonts, but the system utility to display a document must obtain those fonts, on behalf of the user. In order to do this, the system utility becomes privileged while obtaining the fonts.

+
+
+
+
+

This is all part of the argument for removing it, the confusion around how to apply the APIs - one could say the following sentence is correct but hides the important detail. "Marking code as "privileged" enables a piece of trusted code to temporarily enable access to more resources than are available directly to the code that called it."

+
+
+

If we have module A calling module B - by default the permissions check checks both. +If module B contains a doPrivileged before the permission check then only module B’s protection domain will be checked.

+
+
+

The reason for using the doPrivileged is the assumption module B has the greater (or more appropriate permissions) and just want these compared without those from A.

+
+
+

But it is also possible that A actually had the required permissions and B does not do even though one adds a doPrivileged it still fails as B does not have sufficient permissions anyway.

+
+
+

The reason for using the doPrivileged is the assumption module B has the greater (or more appropriate permissions) and just want these compared without those from A.

+
+
+
+
Privileged blocks implications for third party libraries
+
+

It is not a requirement for a developer of a third-party library to add a doProviledge block and configure the corresponding protection domain with the permissions the library requires for doing the work.

+
+
+

A third-party developer of a library could add a doPrivileged block to allow the consumers of the library to have the freedom to not require all the permissions needed available on all the protection domains. However, consumers have to at least give the required permissions to the protection domain where the third-party library is. This is just to add a possibility for the consumers of the library.

+
+
+
+
Privileged blocks implications for WildFly modules
+
+

Without WildFly’s special AllPermission assignment each module should specify the permissions that it needs.

+
+
+

But this is where the permissions get even more complex. Let’s say in that example module B needs to read a file, the developer of module B may not know where that file will exist as it is not until the module is used in another project (like an app server we know file locations).

+
+
+

One way is avoiding doPrivileged:

+
+
+
    +
  • +

    Module B has the permission to access all files.

    +
  • +
  • +

    Module A has the permission to access just a specific file.

    +
  • +
+
+
+

Combined a permission check would pass.

+
+
+

Second is module B contains a doPrivileged.

+
+
+

If module B still has the permission to access all files but module A has no file permission. If module A can pass the path of the file to module B one now has the problem that modules can potentially use this to bypass permissions and get access to all files.

+
+
+

The next variation is the permissions for module B need adjusting in context, i.e. it now needs to specify which file module B can access so there is no way for A to abuse it.

+
+
+

WildFly developers should not need to specify permissions for all modules in the app server, and if they need context that would be even more difficult.

+
+
+

The first example would be the equivalent of all deployments now needing the permissions granted but deployments are not supposed to need to be aware of the inner workings of the application server to decide what permissions they need.

+
+
+

So it ends up in that middle ground where if WildFly developers are not careful it could be open to abuse from deployments.

+
+
+
+
+
+
+
+

20. Migrate Legacy Security to Elytron Security

+
+
+

20.1. Authentication Configuration

+ +
+
+

20.2. Properties Based Authentication / Authorization

+
+

20.2.1. PicketBox Based Configuration

+
+

This migration example assumes a deployed web application is configured +to require authentication using FORM based authentication and is +referencing a PicketBox based security domain using the +UsersRolesLoginModule to load user information from a pair or properties +files.

+
+
+
Original Configuration
+
+

A security domain can be defined in the legacy security subsystem using +the following management operations: -

+
+
+
+
./subsystem=security/security-domain=application-security:add
+./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=UsersRoles, flag=Required, module-options={usersProperties=file://${jboss.server.config.dir}/example-users.properties, rolesProperties=file://${jboss.server.config.dir}/example-roles.properties}}])
+
+
+
+

This would result in a security domain definition: -

+
+
+
+
  <security-domain name="application-security">
+    <authentication>
+      <login-module code="UsersRoles" flag="required">
+        <module-option name="usersProperties" value="file://${jboss.server.config.dir}/example-users.properties"/>
+        <module-option name="rolesProperties" value="file://${jboss.server.config.dir}/example-roles.properties"/>
+      </login-module>
+    </authentication>
+  </security-domain>
+
+
+
+
+
Intermediate Configuration
+
+

It is possible to take a previously defined PicketBox security domain +and expose it as an Elytron security realm so it can be wired into a +complete Elytron based configuration, if only properties based +authentication was to be migrated it would be recommended to jump to the +fully migration configuration and avoid the unnecessary dependency on +the legacy security subsystem but for situations where that is not +immediately possible these commands illustrate an intermediate solution.

+
+
+

These steps assume the original configuration is already in place.

+
+
+

The first step is to add a mapping to an Elytron security realm within +the legacy security subsystem.

+
+
+
+
./subsystem=security/elytron-realm=application-security:add(legacy-jaas-config=application-security)
+
+
+
+

This results in the following configuration.

+
+
+
+
  <subsystem xmlns="urn:jboss:domain:security:2.0">
+    ...
+    <elytron-integration>
+      <security-realms>
+        <elytron-realm name="application-security" legacy-jaas-config="application-security"/>
+      </security-realms>
+    </elytron-integration>
+    ...
+  </subsystem>
+
+
+
+

Within the Elytron subsystem a security domain can be defined which +references the exported security realm and also a http authentication +factory which supports FORM based authentication.

+
+
+
+
./subsystem=elytron/security-domain=application-security:add(realms=[{realm=application-security}], default-realm=application-security, permission-mapper=default-permission-mapper)
+./subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=FORM}])
+
+
+
+

And the resulting configuration: -

+
+
+
+
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+    ...
+    <security-domains>
+      ...
+      <security-domain name="application-security" default-realm="application-security" permission-mapper="default-permission-mapper">
+        <realm name="application-security"/>
+      </security-domain>
+    </security-domains>
+    ...
+    <http>
+      ...
+      <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
+        <mechanism-configuration>
+          <mechanism mechanism-name="FORM"/>
+        </mechanism-configuration>
+      </http-authentication-factory>
+      ...
+    </http>
+    ...
+  </subsystem>
+
+
+
+

Finally configuration needs to be added to the Undertow subsystem to map +the security domain referenced by the deployment to the newly defined +http authentication factory.

+
+
+
+
./subsystem=undertow/application-security-domain=application-security:add(http-authentication-factory=application-security-http)
+
+
+
+

Which results in: -

+
+
+
+
  <subsystem xmlns="urn:jboss:domain:undertow:4.0">
+    ...
+    <application-security-domains>
+      <application-security-domain name="application-security" http-authentication-factory="application-security-http"/>
+    </application-security-domains>
+    ...
+  </subsystem>
+
+
+
+

Note: If the deployment was already deployed at this point the +application server should be reloaded or the deployment redeployed for +the application security domain mapping to take effect.

+
+
+

The following command can then be used to verify the mapping was applied +to the deployment.

+
+
+
+
[standalone@localhost:9990 /] ./subsystem=undertow/application-security-domain=application-security:read-resource(include-runtime=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "enable-jacc" => false,
+        "http-authentication-factory" => "application-security-http",
+        "override-deployment-config" => false,
+        "referencing-deployments" => ["HelloWorld.war"],
+        "setting" => undefined
+    }
+}
+
+
+
+

The deployment being tested here is 'HelloWorld.war' and the output from +the previous command shows this deployment is referencing the mapping.

+
+
+

At this stage the previously defined security domain is used for it’s +LoginModule configuration but this is wrapped by Elytron components +which take over authentication.

+
+
+
+
Fully Migrated Configuration
+
+

Alternatively the configuration can be completely defined within the +Elytron subsystem, in this case it is assumed none of the previous +commands have been executed and this is started from a clean +configuration - however if the security domain definition does exist in +the legacy security subsystem that will remain completely independent.

+
+
+

First a new security realm can be defined within the Elytron subsystem +referencing the files referenced previously: -

+
+
+
+
./subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"}, groups-properties={path=example-roles.properties, relative-to=jboss.server.config.dir}, groups-attribute=Roles)
+
+
+
+

As before a security domain and http authentication factory can be +defined.

+
+
+
+
./subsystem=elytron/security-domain=application-security:add(realms=[{realm=application-properties}], default-realm=application-properties, permission-mapper=default-permission-mapper)
+./subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=FORM}])
+
+
+
+

This results in the following overall configuration.

+
+
+
+
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+    ...
+    <security-domains>
+      ...
+      <security-domain name="application-security" default-realm="application-properties" permission-mapper="default-permission-mapper">
+        <realm name="application-properties"/>
+      </security-domain>
+    </security-domains>
+    <security-realms>
+      ...
+      <properties-realm name="application-properties" groups-attribute="Roles">
+        <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/>
+        <groups-properties path="example-roles.properties" relative-to="jboss.server.config.dir"/>
+      </properties-realm>
+    </security-realms>
+    ...
+    <http>
+      ...
+      <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
+        <mechanism-configuration>
+          <mechanism mechanism-name="FORM"/>
+        </mechanism-configuration>
+      </http-authentication-factory>
+      ...
+    </http>
+    ...
+  </subsystem>
+
+
+
+

As before the application-security-domain mapping should be added to the +Undertow subsystem and the server reloaded or the deployment redeployed +as required.

+
+
+
+
./subsystem=undertow/application-security-domain=application-security:add(http-authentication-factory=application-security-http)
+
+
+
+

Which results in: -

+
+
+
+
  <subsystem xmlns="urn:jboss:domain:undertow:4.0">
+    ...
+    <application-security-domains>
+      <application-security-domain name="application-security" http-authentication-factory="application-security-http"/>
+    </application-security-domains>
+    ...
+  </subsystem>
+
+
+
+

At this stage the authentication is the equivalent of the original +configuration however now Elytron components are used exclusively.

+
+
+
+
+

20.2.2. Migrating to FileSystemRealm Based Authentication

+
+

An alternative to using a legacy properties-realm in Elytron is to use +the new filesystem-realm. An Elytron filesystem-realm will use file-backed +authentication methods to secure the server. It is now easy to migrate from a +legacy properties-realm to an Elytron filesystem-realm by using the +Elytron Tool. The new Elytron Tool command, FileSystemRealmCommand, will convert +the given properties files and create an Elytron FileSystemRealm, along with a script +with the WildFly CLI commands for registering the FileSystemRealm and Security Domain +on the WildFly server. After using the tool, it will still be necessary to configure +an authentication-factory and an application-security-domain, as in the steps +above.

+
+
+
Single User-Roles Conversion
+
+

To convert a single user-roles properties files combination, the parameters +can be passed directly into the command:

+
+
+
+
./bin/elytron-tool.sh filesystem-realm --users-file users.properties --roles-file roles.properties --output-location filesystem_realm_dir
+
+
+
+

This will then configure a filesystem-realm in filesystem_realm_dir and +will create a script converted-properties-filesystem-realm.sh in +filesystem_realm_dir with the WildFly CLI commands to register the filesystem-realm +and the security-domain, with the security-domain named +converted-properties-security-domain. To customize the filesystem-realm name +and the security-domain name, the --filesystem-realm-name and +--security-domain-name parameters can be used.

+
+
+

Use elytron-tool.sh filesystem-realm --help to get description of all parameters.

+
+
+
Notes:
+
+
    +
  • +

    The short form options, as shown in the --help option, can be used, such as +-u in place of --users-file.

    +
  • +
  • +

    When the --summary parameter is specified, an output of operations performed +during conversion, including warnings and errors, will be shown once the +command finishes conversion.

    +
  • +
  • +

    When the --silent parameter is specified, Elytron Tool will not give no +information output, as compared to normal operation where warnings are shown. +The --silent command will not override --summary, resulting in the ability to +hide output until the command finishes conversion.

    +
  • +
  • +

    Elytron Tool will not configure the filesystem-realm and security-domain +within WildFly itself, it will just provide the necessary commands in the +output script file.

    +
  • +
+
+
+
+
+
Bulk User-Roles Conversion
+
+

It is possible to convert multiple users-roles files combinations at once +by using --bulk-convert parameter with a descriptor file.

+
+
+

An example descriptor-file from our tests is:

+
+
+
+
users-file:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/users/users-5.properties
+roles-file:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/roles/roles-5.properties
+output-location:./target/test-classes/filesystem-realm/output-5-bulk
+filesystem-realm-name:nameOfFileSystemRealm5
+security-domain-name:nameOfSecurityDomain5
+
+users-file:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/users/users-6.properties
+roles-file:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/roles/roles-6.properties
+output-location:/home/jucook/Documents/WildFly/Git_Projects/WildFly-Elytron/wildfly-elytron-tool/target/test-classes/filesystem-realm/output-6-bulk
+filesystem-realm-name:nameOfFileSystemRealm6
+security-domain-name:nameOfSecurityDomain6
+
+
+
+

Each blank line starts a new conversion operation. As with a single conversion, +the users-file, roles-file, and output-location are required parameters while +the filesystem-realm-name and security-domain-name are optional parameters.

+
+
+

Execute the following command to convert with the descriptor file:

+
+
+
+
./bin/elytron-tool.sh filesystem-realm --bulk-convert descriptor-file
+
+
+
+
Notes:
+
+
    +
  • +

    For bulk conversion, only the long form option can be used, unlike the CLI +mode where both long and short form options can be used.

    +
  • +
  • +

    The --summary and --silent parameters can be used here too. However, they +must be specified while executing the command and apply to all conversions +specified in the descriptor file.

    +
  • +
  • +

    If the --summary parameter is used, then a summary will be provided +after each execution as opposed to after the command finishes all conversions.

    +
  • +
  • +

    As with the single conversion, absolute or relative paths can be used for +users-file, roles-file, and output-location.

    +
  • +
  • +

    Each execution of the command will produce a separate script in the given +output-location directory.

    +
  • +
  • +

    Repeated output-location paths can result in an error

    +
  • +
  • +

    If there is an error in one users-roles files combination then Elytron Tool +will report the issue, such as a missing required parameter, and continue +with the conversion of all remaining combinations.

    +
  • +
+
+
+
+
+
+

20.2.3. Legacy Security Realm

+
+
Original Configuration
+
+

A legacy security realm can be defined using the following commands to +load users passwords and group information from properties files.

+
+
+
+
./core-service=management/security-realm=ApplicationSecurity:add
+./core-service=management/security-realm=ApplicationSecurity/authentication=properties:add(relative-to=jboss.server.config.dir, path=example-users.properties, plain-text=true)
+./core-service=management/security-realm=ApplicationSecurity/authorization=properties:add(relative-to=jboss.server.config.dir, path=example-roles.properties)
+
+
+
+

This results in the following realm definition.

+
+
+
+
  <security-realm name="ApplicationSecurity">
+    <authentication>
+      <properties path="example-users.properties" relative-to="jboss.server.config.dir" plain-text="true"/>
+    </authentication>
+    <authorization>
+      <properties path="example-roles.properties" relative-to="jboss.server.config.dir"/>
+    </authorization>
+  </security-realm>
+
+
+
+

A legacy security realm would typically be used to secure either the +management interfaces or remoting connectors.

+
+
+
+
Migrated Configuration
+
+

One of the motivations for adding the Elytron based security to the +application server is to allow a consistent security solution to be used +across the server, to replace the security realm the same steps as +described in the previous 'Fully Migrated' section can be followed again +up until the http-authentication-factory is defined.

+
+
+

A legacy security realm can also be used for SASL based authentication +so a sasl-authentication-factory should also be defined.

+
+
+
+
./subsystem=elytron/sasl-authentication-factory=application-security-sasl:add(sasl-server-factory=elytron, security-domain=application-security, mechanism-configurations=[{mechanism-name=PLAIN}])
+
+
+
+
+
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+    ...
+    <sasl>
+      ...
+      <sasl-authentication-factory name="application-security-sasl" sasl-server-factory="elytron" security-domain="application-security">
+        <mechanism-configuration>
+          <mechanism mechanism-name="PLAIN"/>
+        </mechanism-configuration>
+      </sasl-authentication-factory>
+      ...
+    </sasl>
+  </subsystem>
+
+
+
+

This can be associated with a Remoting connector to use for +authentication and the existing security realm reference cleared.

+
+
+
+
./subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=sasl-authentication-factory, value=application-security-sasl)
+./subsystem=remoting/http-connector=http-remoting-connector:undefine-attribute(name=security-realm)
+
+
+
+
+
  <subsystem xmlns="urn:jboss:domain:remoting:4.0">
+    ...
+    <http-connector name="http-remoting-connector" connector-ref="default" sasl-authentication-factory="application-security-sasl"/>
+  </subsystem>
+
+
+
+

If this new configuration was to be used to secure the management +interfaces more suitable names should be chosen but the following +commands illustrate how to set the two authentication factories and +clear the existing security realm reference.

+
+
+
+
./core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=application-security-http)
+./core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=application-security-sasl)
+./core-service=management/management-interface=http-interface:undefine-attribute(name=security-realm)
+
+
+
+
+
  <management-interfaces>
+    <http-interface http-authentication-factory="application-security-http">
+      <http-upgrade enabled="true" sasl-authentication-factory="application-security-sasl"/>
+      <socket-binding http="management-http"/>
+    </http-interface>
+  </management-interfaces>
+
+
+
+
+
+
+

20.3. LDAP Authentication Migration

+
+

The section describing how to migrate from properties based +authentication using either PicketBox or legacy security realms to +Elytron also contained a lot of additional information regarding +defining security domains, authentication factories, and how these are +mapped to be used for authentication. This section will illustrate some +equivalent LDAP configuration using legacy security realms and PicketBox +security domains and show the equivalent configuration using Elytron but +will not repeat the steps to wire it all together covered in the +previous section.

+
+
+

These configuration examples are developed against a test LDAP sever +with user entries like: -

+
+
+
+
dn: uid=TestUserOne,ou=users,dc=group-to-principal,dc=wildfly,dc=org
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: uidObject
+objectClass: person
+objectClass: organizationalPerson
+cn: Test User One
+sn: Test User One
+uid: TestUserOne
+userPassword: {SSHA}UG8ov2rnrnBKakcARVvraZHqTa7mFWJZlWt2HA==
+
+
+
+

The group entries then look like: -

+
+
+
+
dn: uid=GroupOne,ou=groups,dc=group-to-principal,dc=wildfly,dc=org
+objectClass: top
+objectClass: groupOfUniqueNames
+objectClass: uidObject
+cn: Group One
+uid: GroupOne
+uniqueMember: uid=TestUserOne,ou=users,dc=group-to-principal,dc=wildfly,dc=org
+
+
+
+

For authentication purposes the username will be matched against the +'uid' attribute, also the resulting group name will be taken from the +'uid' attribute of the group entry.

+
+
+

20.3.1. Legacy Security Realm

+
+

A connection to the LDAP server and related security realm can be +created with the following commands: -

+
+
+
+
batch
+./core-service=management/ldap-connection=MyLdapConnection:add(url="ldap://localhost:10389", search-dn="uid=admin,ou=system", search-credential="secret")
+ 
+./core-service=management/security-realm=LDAPRealm:add
+./core-service=management/security-realm=LDAPRealm/authentication=ldap:add(connection="MyLdapConnection", username-attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org")
+ 
+ 
+./core-service=management/security-realm=LDAPRealm/authorization=ldap:add(connection=MyLdapConnection)
+./core-service=management/security-realm=LDAPRealm/authorization=ldap/username-to-dn=username-filter:add(attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org")
+./core-service=management/security-realm=LDAPRealm/authorization=ldap/group-search=group-to-principal:add(base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", iterative=true, prefer-original-connection=true, principal-attribute=uniqueMember, search-by=DISTINGUISHED_NAME, group-name=SIMPLE, group-name-attribute=uid)
+run-batch
+
+
+
+

This results in the following configuration.

+
+
+
+
  <management>
+    <security-realms>
+      ...
+      <security-realm name="LDAPRealm">
+        <authentication>
+          <ldap connection="MyLdapConnection" base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
+            <username-filter attribute="uid"/>
+          </ldap>
+        </authentication>
+        <authorization>
+          <ldap connection="MyLdapConnection">
+            <username-to-dn>
+              <username-filter base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org" attribute="uid"/>
+            </username-to-dn>
+            <group-search group-name="SIMPLE" iterative="true" group-name-attribute="uid">
+              <group-to-principal search-by="DISTINGUISHED_NAME" base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org" prefer-original-connection="true">
+                <membership-filter principal-attribute="uniqueMember"/>
+              </group-to-principal>
+            </group-search>
+          </ldap>
+        </authorization>
+      </security-realm>
+    </security-realms>
+    <outbound-connections>
+      <ldap name="MyLdapConnection" url="ldap://localhost:10389" search-dn="uid=admin,ou=system" search-credential="secret"/>
+    </outbound-connections>
+    ...
+  </management>
+
+
+
+
+

20.3.2. PicketBox LdapExtLoginModule

+
+

The following commands can create a PicketBox security domain configured +to use the LdapExtLoginModule to verify a username and password.

+
+
+
+
./subsystem=security/security-domain=application-security:add
+./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=LdapExtended, flag=Required, module-options={ \
+java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, \
+java.naming.provider.url=ldap://localhost:10389, \
+java.naming.security.authentication=simple, \
+bindDN="uid=admin,ou=system", \
+bindCredential=secret, \
+baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
+baseFilter="(uid={0})", \
+rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",\
+roleFilter="(uniqueMember={1})", \
+roleAttributeID="uid" \
+}}])
+
+
+
+

This results in the following configuration.

+
+
+
+
  <subsystem xmlns="urn:jboss:domain:security:2.0">
+    ...
+    <security-domains>
+      ...
+      <security-domain name="application-security">
+        <authentication>
+          <login-module code="LdapExtended" flag="required">
+            <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
+            <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/>
+            <module-option name="java.naming.security.authentication" value="simple"/>
+            <module-option name="bindDN" value="uid=admin,ou=system"/>
+            <module-option name="bindCredential" value="secret"/>
+            <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/>
+            <module-option name="baseFilter" value="(uid={0})"/>
+            <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
+            <module-option name="roleFilter" value="(uniqueMember={1})"/>
+            <module-option name="roleAttributeID" value="uid"/>
+          </login-module>
+        </authentication>
+      </security-domain>
+    </security-domains>
+  </subsystem>
+
+
+
+
+

20.3.3. Migrated

+
+

Within the Elytron subsystem a directory context can be defined for the +connection to LDAP: -

+
+
+
+
./subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret})
+
+
+
+

Then a security realm can be created to search LDAP and verify the +supplied password: -

+
+
+
+
./subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, \
+direct-verification=true, \
+identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
+rdn-identifier="uid", \
+attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]})
+
+
+
+

In the prior two examples information is loaded from LDAP to use +directly as groups or roles, in the Elytron case information can be +loaded from LDAP to associate with the identity as attributes - these +can subsequently be mapped to roles but attributes can be loaded for +other purposes as well.

+
+
+ + + + + +
+ + +By default, if no role-decoder is defined for given security-domain, +identity attribute " `Roles`" is mapped to the identity roles. +
+
+
+

This leads to the following configuration.

+
+
+
+
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+    ...
+    <security-realms>
+      ...
+      <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true">
+        <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
+          <attribute-mapping>
+            <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
+          </attribute-mapping>
+        </identity-mapping>
+      </ldap-realm>
+    </security-realms>
+    ...
+    <dir-contexts>
+      <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system">
+        <credential-reference clear-text="secret"/>
+      </dir-context>
+    </dir-contexts>
+  </subsystem>
+
+
+
+
+
+

20.4. Composite Stores Migration

+
+

When using either PicketBox or the legacy security realms it is possible to define a configuration where authentication is performed against one identity store whilst the information used for authorization is loaded from a different store, when using WildFly Elytron this can be achieved by using an aggregate security realm.

+
+
+

The example here makes use of a properties file for authentication and then searches LDAP to load group / role information. Both of these are based on the previous examples within this document so the environmental information is not repeated here.

+
+
+

20.4.1. PicketBox Based Configuration

+
+
+
./subsystem=security/security-domain=application-security:add
+./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[ \
+{code=UsersRoles, flag=Required, module-options={ \
+password-stacking=useFirstPass, \
+usersProperties=file://${jboss.server.config.dir}/example-users.properties, \
+rolesProperties=file://${jboss.server.config.dir}/example-roles.properties}} \
+{code=LdapExtended, flag=Required, module-options={ \
+password-stacking=useFirstPass, \
+java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, \
+java.naming.provider.url=ldap://localhost:10389, \
+java.naming.security.authentication=simple, \
+bindDN="uid=admin,ou=system", \
+bindCredential=secret, \
+baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
+baseFilter="(uid={0})", \
+rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",\
+roleFilter="(uniqueMember={1})", \
+roleAttributeID="uid" \
+}}])
+
+
+
+

This results in the following domain definition

+
+
+
+
<security-domain name="application-security">
+  <authentication>
+    <login-module code="UsersRoles" flag="required">
+      <module-option name="password-stacking" value="useFirstPass"/>
+      <module-option name="usersProperties" value="file://${jboss.server.config.dir}/example-users.properties"/>
+      <module-option name="rolesProperties" value="file://${jboss.server.config.dir}/example-roles.properties"/>
+    </login-module>
+    <login-module code="LdapExtended" flag="required">
+      <module-option name="password-stacking" value="useFirstPass"/>
+      <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
+      <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/>
+      <module-option name="java.naming.security.authentication" value="simple"/>
+      <module-option name="bindDN" value="uid=admin,ou=system"/>
+      <module-option name="bindCredential" value="secret"/>
+      <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/>
+      <module-option name="baseFilter" value="(uid={0})"/>
+      <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
+      <module-option name="roleFilter" value="(uniqueMember={1})"/>
+      <module-option name="roleAttributeID" value="uid"/>
+    </login-module>
+  </authentication>
+</security-domain>
+
+
+
+

During an authentication attempt the 'UsersRoles' login module will first be called to perform authentication based on the supplied credential, then the 'LdapExtLoginModule' will be called which will proceed to query LDAP to load the roles for the identity.

+
+
+
+
./core-service=management/ldap-connection=MyLdapConnection:add(url="ldap://localhost:10389", search-dn="uid=admin,ou=system", search-credential="secret")
+
+./core-service=management/security-realm=ApplicationSecurity:add
+./core-service=management/security-realm=ApplicationSecurity/authentication=properties:add(path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true)
+
+batch
+./core-service=management/security-realm=ApplicationSecurity/authorization=ldap:add(connection=MyLdapConnection)
+./core-service=management/security-realm=ApplicationSecurity/authorization=ldap/username-to-dn=username-filter:add(attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org")
+./core-service=management/security-realm=ApplicationSecurity/authorization=ldap/group-search=group-to-principal:add(base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", iterative=true, prefer-original-connection=true, principal-attribute=uniqueMember, search-by=DISTINGUISHED_NAME, group-name=SIMPLE, group-name-attribute=uid)
+run-batch
+
+
+
+

This results in the following realm definition:

+
+
+
+
<security-realm name="ApplicationSecurity">
+  <authentication>
+    <properties path="example-users.properties" relative-to="jboss.server.config.dir" plain-text="true"/>
+  </authentication>
+  <authorization>
+    <ldap connection="MyLdapConnection">
+      <username-to-dn>
+        <username-filter base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org" attribute="uid"/>
+      </username-to-dn>
+      <group-search group-name="SIMPLE" iterative="true" group-name-attribute="uid">
+        <group-to-principal search-by="DISTINGUISHED_NAME" base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org" prefer-original-connection="true">
+          <membership-filter principal-attribute="uniqueMember"/>
+        </group-to-principal>
+      </group-search>
+    </ldap>
+  </authorization>
+</security-realm>
+
+<outbound-connections>
+  <ldap name="MyLdapConnection" url="ldap://localhost:10389" search-dn="uid=admin,ou=system" search-credential="secret"/>
+</outbound-connections>
+
+
+
+

As with the PicketBox example, authentication is first performed using the properties file - then group searching is performed against LDAP.

+
+
+
+

20.4.2. Migrated WildFly Elytron Configuration

+
+

The equivalent WildFly Elytron configuration can be defined with the following commands:

+
+
+
+
./subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret})
+
+./subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, \
+direct-verification=true, \
+identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
+rdn-identifier="uid", \
+attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]})
+
+./subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"}, groups-properties={path=example-roles.properties, relative-to=jboss.server.config.dir}, groups-attribute=Roles)
+
+./subsystem=elytron/aggregate-realm=combined-realm:add(authentication-realm=application-properties, authorization-realm=ldap-realm)
+
+./subsystem=elytron/security-domain=application-security:add(realms=[{realm=combined-realm}], default-realm=combined-realm, permission-mapper=default-permission-mapper)
+./subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=BASIC}])
+
+
+
+

This results in the following realm definition:

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+  ...
+  <security-domains>
+    ...
+    <security-domain name="application-security" default-realm="combined-realm" permission-mapper="default-permission-mapper">
+      <realm name="combined-realm"/>
+    </security-domain>
+  </security-domains>
+  <security-realms>
+    <aggregate-realm name="combined-realm" authentication-realm="application-properties" authorization-realm="ldap-realm"/>
+      ...
+      <properties-realm name="application-properties" groups-attribute="Roles">
+        <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/>
+        <groups-properties path="example-roles.properties" relative-to="jboss.server.config.dir"/>
+      </properties-realm>
+      <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true">
+        <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
+          <attribute-mapping>
+            <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
+          </attribute-mapping>
+        </identity-mapping>
+      </ldap-realm>
+  </security-realms>
+  ...
+  <http>
+    ...
+    <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
+      <mechanism-configuration>
+        <mechanism mechanism-name="BASIC"/>
+      </mechanism-configuration>
+    </http-authentication-factory>
+    ...
+  </http>
+  ...
+  <dir-contexts>
+    <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system">
+      <credential-reference clear-text="secret"/>
+    </dir-context>
+  </dir-contexts>
+</subsystem>
+
+
+
+

Within the WildFly Elytron example a new security realm 'aggregate-realm' has been defined, this definition specifies which of the defined security realms should be used for the authentication step and which of the security realms should be used for the loading of the identity used for subsequent authorization decisions.

+
+
+
+
+

20.5. Database Authentication

+
+

The section describing how to migrate from database accessible via JDBC +datasource based authentication using PicketBox to Elytron. This section +will illustrate some equivalent configuration using PicketBox security +domains and show the equivalent configuration using Elytron but will not +repeat the steps to wire it all together covered in the previous +sections.

+
+
+

These configuration examples are developed against a test database with +users table like:

+
+
+
+
CREATE TABLE User (
+    id BIGINT NOT NULL,
+    username VARCHAR(255),
+    password VARCHAR(255),
+    role ENUM('admin', 'manager', 'user'),
+    PRIMARY KEY (id),
+    UNIQUE (username)
+)
+
+
+
+

For authentication purposes the username will be matched against the ' +`username’ column, password will be expected in hex-encoded MD5 hash in +' `password’ column. User role for authorization purposes will be taken +from ' `role’ column.

+
+
+

20.5.1. PicketBox Database LoginModule

+
+

The following commands can create a PicketBox security domain configured +to use database accessible via JDBC datasource to verify a username and +password and to assign roles.

+
+
+
+
./subsystem=security/security-domain=application-security/:add
+./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=Database, flag=Required, module-options={ \
+    dsJndiName="java:jboss/datasources/ExampleDS", \
+    principalsQuery="SELECT password FROM User WHERE username = ?", \
+    rolesQuery="SELECT role, 'Roles' FROM User WHERE username = ?", \
+    hashAlgorithm=MD5, \
+    hashEncoding=base64 \
+}}])
+
+
+
+

This results in the following configuration.

+
+
+
+
        <subsystem xmlns="urn:jboss:domain:security:2.0">
+            <security-domains>
+                ...
+                <security-domain name="application-security">
+                    <authentication>
+                        <login-module code="Database" flag="required">
+                            <module-option name="dsJndiName" value="java:jboss/datasources/ExampleDS"/>
+                            <module-option name="principalsQuery" value="SELECT password FROM User WHERE username = ?"/>
+                            <module-option name="rolesQuery" value="SELECT role, 'Roles' FROM User WHERE username = ?"/>
+                            <module-option name="hashAlgorithm" value="MD5"/>
+                            <module-option name="hashEncoding" value="base64"/>
+                        </login-module>
+                    </authentication>
+                </security-domain>
+            </security-domains>
+        </subsystem>
+
+
+
+
+

20.5.2. Migrated

+
+

Within the Elytron subsystem to use database accesible via JDBC you need +to define jdbc-realm:

+
+
+
+
./subsystem=elytron/jdbc-realm=jdbc-realm:add(principal-query=[{ \
+    data-source=ExampleDS, \
+    sql="SELECT role, password FROM User WHERE username = ?", \
+    attribute-mapping=[{index=1, to=Roles}] \
+    simple-digest-mapper={algorithm=simple-digest-md5, password-index=2}, \
+}])
+
+
+
+

This results in the following overall configuration:

+
+
+
+
        <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+            ...
+            <security-realms>
+                ...
+                <jdbc-realm name="jdbc-realm">
+                    <principal-query sql="SELECT role, password FROM User WHERE username = ?" data-source="ExampleDS">
+                        <attribute-mapping>
+                            <attribute to="Roles" index="1"/>
+                        </attribute-mapping>
+                        <simple-digest-mapper password-index="2"/>
+                    </principal-query>
+                </jdbc-realm>
+                ...
+            </security-realms>
+            ...
+        </subsystem>
+
+
+
+

In comparison with PicketBox solution, Elytron jdbc-realm use one SQL +query to obtain all user attributes and credentials. Their extraction +from SQL result specifies mappers.

+
+
+
+

20.5.3. N-M relation beetween user and roles

+
+

When using a n:m-relation beetween user and roles (which means: the user has multiple roles), the previous configuration does not work.

+
+
+

The database:

+
+
+
+
CREATE TABLE User (
+id BIGINT NOT NULL,
+username VARCHAR(255),
+password VARCHAR(255),
+PRIMARY KEY (id),
+UNIQUE (username)
+)
+
+CREATE TABLE Role(
+id BIGINT NOT NULL,
+rolename VARCHAR(255),
+PRIMARY KEY (id),
+UNIQUE (rolename)
+)
+
+CREATE TABLE Userrole(
+userid BIGINT not null,
+roleid BIGINT not null,
+PRIMARY KEY (userid, roleid),
+FOREIGN KEY (userid) references User(id,
+FOREIGN KEY (roleid) references Role(id)
+)
+
+
+
+

Here you need two configure two principal queries:

+
+
+
+
<jdbc-realm name="jdbc-realm">
+    <principal-query sql="SELECT PASSWORD FROM USER WHERE USERNAME = ?" data-source="ExampleDS">
+        <clear-password-mapper password-index="1"/>
+    </principal-query>
+    <principal-query sql="SELECT R.ROLENAME from ROLE AS R, USERROLE AS UR, USER AS U WHERE U.USERNAME=? AND UR.ROLEID = R.ID AND UR.USERID = U.ID" data-source="ExampleDS">
+        <attribute-mapping>
+            <attribute to="roles" index="1"/>
+        </attribute-mapping>
+    </principal-query>
+</jdbc-realm>
+
+
+
+

The second query needs an attribute mapping to decode the selected rolename column (index 1):

+
+
+
+
<mappers>
+...
+<simple-role-decoder name="from-roles-attribute" attribute="roles"/>
+...
+</mappers>
+
+
+
+

The role decoder is referenced by the security domain:

+
+
+
+
<security-domain name="MyDomain" default-realm="jdbc-realm" permission-mapper="default-permission-mapper">
+<realm name="MyDbRealm" role-decoder="from-roles-attribute"/>
+</security-domain>
+
+
+
+
+
+

20.6. Kerberos Authentication Migration

+
+

When working with Kerberos configuration it is possible for the +application server to rely on configuration from the environment or the +key configuration can be specified using system properties, for the +purpose of these examples I define system properties - these properties +are applicable to both the legacy configuration and the migrated Elytron +configuration.

+
+
+
+
./system-property=sun.security.krb5.debug:add(value=true)
+./system-property=java.security.krb5.realm:add(value=ELYTRON.ORG)
+./system-property=java.security.krb5.kdc:add(value=kdc.elytron.org)
+
+
+
+

The first line makes debugging easier but the last two lines specify the +Kerberos realm in use and the address of the KDC.

+
+
+
+
  <system-properties>
+    <property name="sun.security.krb5.debug" value="true"/>
+    <property name="java.security.krb5.realm" value="ELYTRON.ORG"/>
+    <property name="java.security.krb5.kdc" value="kdc.elytron.org"/>
+  </system-properties>
+
+
+
+

20.6.1. HTTP Authentication

+
+
Legacy Security Realm
+
+

A legacy security realm can be define so that SPNEGO authentication can +be enabled for the HTTP management interface.

+
+
+
+
./core-service=management/security-realm=Kerberos:add
+./core-service=management/security-realm=Kerberos/server-identity=kerberos:add
+./core-service=management/security-realm=Kerberos/server-identity=kerberos/keytab=HTTP\/test-server.elytron.org@ELYTRON.ORG:add(path=/home/darranl/src/kerberos/test-server.keytab, debug=true)
+./core-service=management/security-realm=Kerberos/authentication=kerberos:add(remove-realm=true)
+
+
+
+

This results in the following configuration: -

+
+
+
+
  <security-realms>
+    ...
+    <security-realm name="Kerberos">
+      <server-identities>
+        <kerberos>
+          <keytab principal="HTTP/test-server.elytron.org@ELYTRON.ORG" path="/home/darranl/src/kerberos/test-server.keytab" debug="true"/>
+        </kerberos>
+      </server-identities>
+      <authentication>
+        <kerberos remove-realm="true"/>
+      </authentication>
+    </security-realm>
+  </security-realms>
+
+
+
+
+
Application SPNEGO
+
+

Alternatively deployed applications would make use of a pair of security +domains.

+
+
+
+
./subsystem=security/security-domain=host:add
+./subsystem=security/security-domain=host/authentication=classic:add
+./subsystem=security/security-domain=host/authentication=classic/login-module=1:add(code=Kerberos, flag=Required, module-options={storeKey=true, useKeyTab=true, principal=HTTP/test-server.elytron.org@ELYTRON.ORG, keyTab=/home/darranl/src/kerberos/test-server.keytab, debug=true}
+
+
+
+
+
./subsystem=security/security-domain=SPNEGO:add
+./subsystem=security/security-domain=SPNEGO/authentication=classic:add
+./subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=1:add(code=SPNEGO, flag=requisite,  module-options={password-stacking=useFirstPass, serverSecurityDomain=host})
+./subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=1:write-attribute(name=module, value=org.jboss.security.negotiation)
+./subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=2:add(code=UsersRoles, flag=required, module-options={password-stacking=useFirstPass, usersProperties=file:///home/darranl/src/kerberos/spnego-users.properties, rolesProperties=file:///home/darranl/src/kerberos/spnego-roles.properties, defaultUsersProperties=file:///home/darranl/src/kerberos/spnego-users.properties, defaultRolesProperties=file:///home/darranl/src/kerberos/spnego-roles.properties})
+
+
+
+

This results in: -

+
+
+
+
  <subsystem xmlns="urn:jboss:domain:security:2.0">
+    <security-domains>
+      ...
+      <security-domain name="host">
+        <authentication>
+          <login-module name="1" code="Kerberos" flag="required">
+            <module-option name="storeKey" value="true"/>
+            <module-option name="useKeyTab" value="true"/>
+            <module-option name="principal" value="HTTP/test-server.elytron.org@ELYTRON.ORG"/>
+            <module-option name="keyTab" value="/home/darranl/src/kerberos/test-server.keytab"/>
+            <module-option name="debug" value="true"/>
+          </login-module>
+        </authentication>
+      </security-domain>
+      <security-domain name="SPNEGO">
+        <authentication>
+          <login-module name="1" code="SPNEGO" flag="requisite" module="org.jboss.security.negotiation">
+            <module-option name="password-stacking" value="useFirstPass"/>
+            <module-option name="serverSecurityDomain" value="host"/>
+          </login-module>
+          <login-module name="2" code="UsersRoles" flag="required">
+            <module-option name="password-stacking" value="useFirstPass"/>
+            <module-option name="usersProperties" value="file:///home/darranl/src/kerberos/spnego-users.properties"/>
+            <module-option name="rolesProperties" value="file:///home/darranl/src/kerberos/spnego-roles.properties"/>
+            <module-option name="defaultUsersProperties" value="file:///home/darranl/src/kerberos/spnego-users.properties"/>
+            <module-option name="defaultRolesProperties" value="file:///home/darranl/src/kerberos/spnego-roles.properties"/>
+          </login-module>
+        </authentication>
+      </security-domain>
+    </security-domains>
+  </subsystem>
+
+
+
+

An application can now be deployed referencing the SPNEGO security +domain and secured with SPNEGO mechanism.

+
+
+
+
Migrated SPNEGO
+
+

The equivalent configuration can be achieved with WildFly Elytron by +first defining a security realm which will be used to load identity +information.

+
+
+
+
./subsystem=elytron/properties-realm=spnego-properties:add(users-properties={path=/home/darranl/src/kerberos/spnego-users.properties, plain-text=true, digest-realm-name=ELYTRON.ORG}, groups-properties={path=/home/darranl/src/kerberos/spnego-roles.properties})
+
+
+
+

Next a Kerberos security factory is defined which allows the server to +load it’s own Kerberos identity.

+
+
+
+
./subsystem=elytron/kerberos-security-factory=test-server:add(path=/home/darranl/src/kerberos/test-server.keytab, principal=HTTP/test-server.elytron.org@ELYTRON.ORG, debug=true)
+
+
+
+

As with the previous examples we define a security realm to pull +together the policy as well as a HTTP authentication factory for the +authentication policy.

+
+
+
+
./subsystem=elytron/security-domain=SPNEGODomain:add(default-realm=spnego-properties, realms=[{realm=spnego-properties, role-decoder=groups-to-roles}], permission-mapper=default-permission-mapper)
+./subsystem=elytron/http-authentication-factory=spnego-http-authentication:add(security-domain=SPNEGODomain, http-server-mechanism-factory=global,mechanism-configurations=[{mechanism-name=SPNEGO, credential-security-factory=test-server}])
+
+
+
+

Overall this results in the following configuration: -

+
+
+
+
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+    ...
+    <security-domains>
+    ...
+      <security-domain name="SPNEGODomain" default-realm="spnego-properties" permission-mapper="default-permission-mapper">
+        <realm name="spnego-properties" role-decoder="groups-to-roles"/>
+      </security-domain>
+    </security-domains>
+    <security-realms>
+      ...
+      <properties-realm name="spnego-properties">
+        <users-properties path="/home/darranl/src/kerberos/spnego-users.properties" digest-realm-name="ELYTRON.ORG" plain-text="true"/>
+        <groups-properties path="/home/darranl/src/kerberos/spnego-roles.properties"/>
+      </properties-realm>
+    </security-realms>
+    <credential-security-factories>
+      <kerberos-security-factory name="test-server" principal="HTTP/test-server.elytron.org@ELYTRON.ORG" path="/home/darranl/src/kerberos/test-server.keytab" debug="true"/>
+    </credential-security-factories>
+    ...
+    <http>
+      ...
+      <http-authentication-factory name="spnego-http-authentication" http-server-mechanism-factory="global" security-domain="SPNEGODomain">
+        <mechanism-configuration>
+          <mechanism mechanism-name="SPNEGO" credential-security-factory="test-server"/>
+        </mechanism-configuration>
+      </http-authentication-factory>
+      ...
+    </http>
+    ...
+  </subsystem>
+
+
+
+

Now, to enable SPNEGO authentication for the HTTP management interface, +update this interface to reference the http-authentication-factory +defined above, as described in the +properties +authentication section.

+
+
+

Alternatively, to secure an application using SPNEGO authentication, an +application security domain can be defined in the Undertow subsystem to +map security domains to the http-authentication-factory defined above, +as described in the +properties +authentication section.

+
+
+
+
+

20.6.2. Remoting / SASL Authentication

+
+
Legacy Security Realm
+
+

It is also possible to define a legacy security realm for Kerberos / +GSSAPI SASL authenticatio for Remoting authentication such as the native +management interface.

+
+
+
+
./core-service=management/security-realm=Kerberos:add
+./core-service=management/security-realm=Kerberos/server-identity=kerberos:add
+./core-service=management/security-realm=Kerberos/server-identity=kerberos/keytab=remote\/test-server.elytron.org@ELYTRON.ORG:add(path=/home/darranl/src/kerberos/remote-test-server.keytab, debug=true)
+./core-service=management/security-realm=Kerberos/authentication=kerberos:add(remove-realm=true)
+
+
+
+
+
  <management>
+    <security-realms>
+      ...
+      <security-realm name="Kerberos">
+        <server-identities>
+          <kerberos>
+            <keytab principal="remote/test-server.elytron.org@ELYTRON.ORG" path="/home/darranl/src/kerberos/remote-test-server.keytab" debug="true"/>
+          </kerberos>
+        </server-identities>
+        <authentication>
+          <kerberos remove-realm="true"/>
+        </authentication>
+      </security-realm>
+    </security-realms>
+    ...
+  </management>
+
+
+
+
+
Migrated GSSAPI
+
+

The steps to define the equivalent Elytron configuration are very +similar to the HTTP example.

+
+
+

First define the security realm to load the identity from: -

+
+
+
+
./path=kerberos:add(relative-to=user.home, path=src/kerberos)
+./subsystem=elytron/properties-realm=kerberos-properties:add(users-properties={path=kerberos-users.properties, relative-to=kerberos, digest-realm-name=ELYTRON.ORG}, groups-properties={path=kerberos-groups.properties, relative-to=kerberos})
+
+
+
+

Then define the Kerberos security factory for the server’s identity.

+
+
+
+
./subsystem=elytron/kerberos-security-factory=test-server:add(relative-to=kerberos, path=remote-test-server.keytab, principal=remote/test-server.elytron.org@ELYTRON.ORG)
+
+
+
+

Finally define the security domain and this time a SASL authentication +factory.

+
+
+
+
./subsystem=elytron/security-domain=KerberosDomain:add(default-realm=kerberos-properties, realms=[{realm=kerberos-properties, role-decoder=groups-to-roles}], permission-mapper=default-permission-mapper)
+./subsystem=elytron/sasl-authentication-factory=gssapi-authentication-factory:add(security-domain=KerberosDomain, sasl-server-factory=elytron, mechanism-configurations=[{mechanism-name=GSSAPI, credential-security-factory=test-server}])
+
+
+
+

This results in the following subsystem configuration: -

+
+
+
+
  <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+    ...
+    <security-domains>
+      ...
+      <security-domain name="KerberosDomain" default-realm="kerberos-properties" permission-mapper="default-permission-mapper">
+        <realm name="kerberos-properties" role-decoder="groups-to-roles"/>
+      </security-domain>
+    </security-domains>
+    <security-realms>
+     ...
+       <properties-realm name="kerberos-properties">
+         <users-properties path="kerberos-users.properties" relative-to="kerberos" digest-realm-name="ELYTRON.ORG"/>
+         <groups-properties path="kerberos-groups.properties" relative-to="kerberos"/>
+       </properties-realm>
+     </security-realms>
+     <credential-security-factories>
+       <kerberos-security-factory name="test-server" principal="remote/test-server.elytron.org@ELYTRON.ORG" path="remote-test-server.keytab" relative-to="kerberos"/>
+     </credential-security-factories>
+     ...
+     <sasl>
+       ...
+       <sasl-authentication-factory name="gssapi-authentication-factory" sasl-server-factory="elytron" security-domain="KerberosDomain">
+         <mechanism-configuration>
+           <mechanism mechanism-name="GSSAPI" credential-security-factory="test-server"/>
+         </mechanism-configuration>
+       </sasl-authentication-factory>
+       ...
+     </sasl>
+   </subsystem>
+
+
+
+

The management interface or Remoting connectors can now be updated to +reference the SASL authentication factory.

+
+
+

The two Elytron examples defined here could also be combined into one to +use a shared security domain and security realm and just use protocol +specific authentication factories each referencing their own Kerberos +security factory.

+
+
+
+
+
+

20.7. Caching Migration

+
+

Where a PicketBox based security domain is defined it is possible to enable caching for that security domain, this enables subsequent hits to the identity store to be avoided as an in memory cache can be used instead, this example demonstrates how caching can be used with a WildFly Elytron based configuration.

+
+
+

The purpose of this chapter is to highlight the migration of a configuration with caching enabled, this example is based in the previous LDAP example but with caching enabled.

+
+
+

20.7.1. PicketBox Example

+
+

A PicketBox based security domain can be defined with the following commands.

+
+
+
+
./subsystem=security/security-domain=application-security:add(cache-type=default)
+./subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=LdapExtended, flag=Required, module-options={ \
+java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, \
+java.naming.provider.url=ldap://localhost:10389, \
+java.naming.security.authentication=simple, \
+bindDN="uid=admin,ou=system", \
+bindCredential=secret, \
+baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
+baseFilter="(uid={0})", \
+rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",\
+roleFilter="(uniqueMember={1})", \
+roleAttributeID="uid" \
+}}])
+
+
+
+

Resulting in the following security domain definition:

+
+
+
+
<subsystem xmlns="urn:jboss:domain:security:2.0">
+  <security-domains>
+    ...
+    <security-domain name="application-security" cache-type="default">
+      <authentication>
+        <login-module code="LdapExtended" flag="required">
+          <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
+          <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/>
+          <module-option name="java.naming.security.authentication" value="simple"/>
+          <module-option name="bindDN" value="uid=admin,ou=system"/>
+          <module-option name="bindCredential" value="secret"/>
+          <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/>
+          <module-option name="baseFilter" value="(uid={0})"/>
+          <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
+          <module-option name="roleFilter" value="(uniqueMember={1})"/>
+          <module-option name="roleAttributeID" value="uid"/>
+        </login-module>
+      </authentication>
+    </security-domain>
+  </security-domains>
+</subsystem>
+
+
+
+
+

20.7.2. Migrated Example

+
+

When using WildFly Elytron where caching is required the individual security realm is wrapped using a cache, a migrated configuration can be defined with the following commands:

+
+
+
+
./subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret})
+./subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, \
+direct-verification=true, \
+identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", \
+rdn-identifier="uid", \
+attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]})
+./subsystem=elytron/caching-realm=cached-ldap:add(realm=ldap-realm)
+
+
+
+

These can then be used in a security domain and subsequently an authentication factory.

+
+
+
+
./subsystem=elytron/security-domain=application-security:add(realms=[{realm=cached-ldap}], default-realm=cached-ldap, permission-mapper=default-permission-mapper)
+./subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=BASIC}])
+
+
+
+

In this final step it is very important that the caching-realm is referenced rather than the original realm otherwise caching will be bypassed.

+
+
+

This results in the following definitions:

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+  ...
+  <security-domains>
+    ...
+    <security-domain name="application-security" default-realm="cached-ldap" permission-mapper="default-permission-mapper">
+      <realm name="cached-ldap"/>
+    </security-domain>
+  </security-domains>
+  <security-realms>
+    ...
+    <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true">
+      <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
+        <attribute-mapping>
+          <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
+        </attribute-mapping>
+      </identity-mapping>
+    </ldap-realm>
+    <caching-realm name="cached-ldap" realm="ldap-realm"/>
+  </security-realms>
+  ...
+  <http>
+    ...
+    <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
+      <mechanism-configuration>
+        <mechanism mechanism-name="BASIC"/>
+      </mechanism-configuration>
+    </http-authentication-factory>
+    ...
+  </http>
+  ...
+  <dir-contexts>
+    <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system">
+      <credential-reference clear-text="secret"/>
+    </dir-context>
+  </dir-contexts>
+</subsystem>
+
+
+
+
+
+

20.8. Clients

+ +
+
+

20.9. Application Client Migration

+
+

20.9.1. Naming Client

+
+

This migration example assumes a client application performs a remote +JNDI lookup using an  InitialContext backed by the +org.wildfly.naming.client.WildFlyInitialContextFactory class.

+
+
+
Original Configuration
+
+

An InitialContext backed by the +org.wildfly.naming.client.WildFlyInitialContextFactory class can be +created by specifying properties that contain the URL of the naming +provider to connect to along with appropriate user credentials:

+
+
+
+
Properties properties = new Properties();
+properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
+properties.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080");
+properties.put(Context.SECURITY_PRINCIPAL, "bob");
+properties.put(Context.SECURITY_CREDENTIALS, "secret");
+InitialContext context = new InitialContext(properties);
+Bar bar = (Bar) context.lookup("foo/bar");
+...
+
+
+
+
+
Migrated Configuration
+
+

An InitialContext backed by the +org.wildfly.naming.client.WildFlyInitialContextFactory class can be +created by specifying a property that contains the URL of the naming +provider to connect to. The user credentials can be specified using a +WildFly client configuration file or programmatically.

+
+
+
Configuration File Approach
+
+

A wildfly-config.xml file that contains the user credentials to use +when establishing a connection to the naming provider can be added to +the client application’s META-INF directory:

+
+
+

wildfly-config.xml

+
+
+
+
<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <authentication-rules>
+            <rule use-configuration="namingConfig">
+                <match-host name="127.0.0.1"/>
+            </rule>
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="namingConfig">
+                <set-user-name name="bob"/>
+                <credentials>
+                    <clear-password password="secret"/>
+                </credentials>
+            </configuration>
+        </authentication-configurations>
+    </authentication-client>
+</configuration>
+
+
+
+

An InitialContext can then be created as follows:

+
+
+
+
Properties properties = new Properties();
+properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
+properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
+InitialContext context = new InitialContext(properties);
+Bar bar = (Bar) context.lookup("foo/bar");
+...
+
+
+
+
+
Programmatic Approach
+
+

The user credentials to use when establishing a connection to the naming +provider can be specified directly in the client application’s code:

+
+
+
+
// create your authentication configuration
+AuthenticationConfiguration namingConfig = AuthenticationConfiguration.empty().useName("bob").usePassword("secret");
+ 
+// create your authentication context
+AuthenticationContext context = AuthenticationContext.empty().with(MatchRule.ALL.matchHost("127.0.0.1"), namingConfig);
+ 
+// create a callable that creates and uses an InitialContext
+Callable<Void> callable = () -> {
+    Properties properties = new Properties();
+    properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
+    properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
+    InitialContext context = new InitialContext(properties);
+    Bar bar = (Bar) context.lookup("foo/bar");
+    ...
+    return null;
+};
+ 
+// use your authentication context to run your callable
+context.runCallable(callable);
+
+
+
+
+
+
+

20.9.2. EJB Client

+
+

This migration example assumes a client application is configured to +invoke an EJB deployed on a remote server using a +jboss-ejb-client.properties file.

+
+
+
Original Configuration
+
+

A jboss-ejb-client.properties file that contains the information +needed to connect to the remote server can be specified in a client +application’s META-INF directory:

+
+
+

jboss-ejb-client.properties

+
+
+
+
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
+remote.connections=default
+remote.connection.default.host=127.0.0.1
+remote.connection.default.port = 8080
+remote.connection.default.username=bob
+remote.connection.default.password=secret
+
+
+
+

An EJB can then be looked up and a method can be invoked on it as +follows:

+
+
+
+
// create an InitialContext
+Properties properties = new Properties();
+properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
+properties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
+InitialContext context = new InitialContext(properties);
+ 
+// look up an EJB and invoke one of its methods
+RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
+    "ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
+int sum = statelessRemoteCalculator.add(101, 202);
+
+
+
+
+
Migrated Configuration
+
+

The information needed to connect to the remote server can be specified +using a WildFly client configuration file or programmatically.

+
+
+
Configuration File Approach
+
+

A wildfly-config.xml file that contains the information needed to +connect to the remote server can be added to the client application’s +META-INF directory:

+
+
+

wildfly-config.xml

+
+
+
+
<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <authentication-rules>
+            <rule use-configuration="ejbConfig">
+                <match-host name="127.0.0.1"/>
+            </rule>
+        </authentication-rules>
+        <authentication-configurations>
+            <configuration name="ejbConfig">
+                <set-user-name name="bob"/>
+                <credentials>
+                    <clear-password password="secret"/>
+                </credentials>
+            </configuration>
+        </authentication-configurations>
+    </authentication-client>
+    <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
+        <connections>
+            <connection uri="remote+http://127.0.0.1:8080" />
+        </connections>
+    </jboss-ejb-client>
+</configuration>
+
+
+
+

An EJB can then be looked up and a method can be invoked on it as +follows:

+
+
+
+
// create an InitialContext
+Properties properties = new Properties();
+properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
+InitialContext context = new InitialContext(properties);
+ 
+// look up an EJB and invoke one of its methods (same as before)
+RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
+    "ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
+int sum = statelessRemoteCalculator.add(101, 202);
+
+
+
+
+
Programmatic Approach
+
+

The information needed to connect to the remote server can be specified +directly in the client application’s code:

+
+
+
+
// create your authentication configuration
+AuthenticationConfiguration ejbConfig = AuthenticationConfiguration.empty().useName("bob").usePassword("secret");
+ 
+// create your authentication context
+AuthenticationContext context = AuthenticationContext.empty().with(MatchRule.ALL.matchHost("127.0.0.1"), ejbConfig);
+ 
+// create a callable that invokes an EJB
+Callable<Void> callable = () -> {
+ 
+    // create an InitialContext
+    Properties properties = new Properties();
+    properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
+    properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
+    InitialContext context = new InitialContext(properties);
+ 
+    // look up an EJB and invoke one of its methods (same as before)
+    RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
+        "ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
+    int sum = statelessRemoteCalculator.add(101, 202);
+    ...
+    return null;
+};
+ 
+// use your authentication context to run your callable
+context.runCallable(callable);
+
+
+
+ + + + + +
+ + +References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted. +:leveloffset: -1 +
+
+
+
+
+
+

20.9.3. General Utilities

+ +
+
+

20.9.4. Security Vault Migration

+
+

Security Vault is primarily used in legacy configurations, a vault is +used to store sensitive strings outside of the configuration files. +WildFly server may only contain a single security vault.

+
+
+

Credential Store introduced in WildFly 11 is meant to expand Security +Vault in terms of storing different credential types and introduce easy +to implemnent SPI which allows to deploy custom implemenations of +CredentialStore SPI. Credentials are stored safely encrypted in storage +file outside WildFly configuration files. Each WildFly server may +contain multiple credential stores.

+
+
+

To easily migrate vault content into credential store we have added +"vault" command into WildFly Elytron Tool. The tool could be found at +$JBOSS_HOME/bin directory. It has several scripts named "elytron-tool.*" +dependent on your platform of choice.

+
+
+
Single Security Vault Conversion
+
+

To convert single security vault credential store use following +example:

+
+
+
    +
  • +

    to get sample vault use testing resources of Elytron Tool project from +GitHub

    +
  • +
+
+
+

Command to run actual conversion:

+
+
+
+
+

./bin/elytron-tool.sh vault --enc-dir vault_data/ --keystore vault-jceks.keystore --keystore-password MASK-2hKo56F1a3jYGnJwhPmiF5 --iteration 34 --salt 12345678 --alias test --location cs-v1.store --summary

+
+
+
+
+

Output:

+
+
+
+
+

Vault (enc-dir="vault_data/";keystore="vault-jceks.keystore") converted to credential store "cs-v1.store"
+Vault Conversion summary:
+--------------------------------------
+Vault Conversion Successful
+CLI command to add new credential store:
+/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="cs-v1.store",implementation-properties={"keyStoreType"⇒"JCEKS"},credential-reference={clear-text="MASK-2hKo56F1a3jYGnJwhPmiF5;12345678;34"})

+
+
+
+
+

Use elytron-tool.sh vault --help to get description of all parameters.

+
+
+
Notes:
+
+
    +
  • +

    Elytron Tool cannot handle very first version of Security Vault data +file.

    +
  • +
  • +

    --keystore-password can come in two forms (1) masked as shown in the +example or (2) clear text. Parameter --salt and --iteration are there to +supply information to decrypt the masked password or to generate masked +password in output. In case --salt and --iteration are omitted default +values are used.

    +
  • +
  • +

    When --summary parameter is specified, one can see nice output with +CLI command to be used in WildFly console to add converted credential +store to the configuration.

    +
  • +
+
+
+
+
+
Bulk Security Vault Conversion
+
+

There is possibility to convert multiple vaults to credential store +using --bulk-convert parameter with description file.
+Example of description file from our tests:

+
+
+
+
+

# Bulk conversion descriptor
+keystore:target/test-classes/vault-v1/vault-jceks.keystore
+keystore-password:MASK-2hKo56F1a3jYGnJwhPmiF5
+enc-dir:target/test-classes/vault-v1/vault_data/
+salt:12345678
+iteration:34
+location:target/v1-cs-1.store
+alias:test

+
+
+

keystore:target/test-classes/vault-v1/vault-jceks.keystore
+keystore-password:secretsecret
+enc-dir:target/test-classes/vault-v1/vault_data/
+location:target/v1-cs-2.store
+alias:test

+
+
+

# different vault vault-v1-more
+keystore:target/test-classes/vault-v1-more/vault-jceks.keystore
+keystore-password:MASK-2hKo56F1a3jYGnJwhPmiF5
+enc-dir:target/test-classes/vault-v1-more/vault_data/
+salt:12345678
+iteration:34
+location:target/v1-cs-more.store
+alias:test

+
+
+
+
+

After each "keystore:" option new conversion starts. All options are +mandatory except "salt:", "iteration:" and "properties:"

+
+
+

Execute following command:

+
+
+
+
+

./bin/elytron-tool.sh vault --bulk-convert bulk-vault-conversion-desc --summary

+
+
+
+
+

Output:

+
+
+
+
+

Vault (enc-dir="vault-v1/vault_data/";keystore="vault-v1/vault-jceks.keystore") converted to credential store "v1-cs-1.store"
+Vault Conversion summary:
+--------------------------------------
+Vault Conversion Successful
+CLI command to add new credential store:
+/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="v1-cs-1.store",implementation-properties={"keyStoreType"⇒"JCEKS"},credential-reference={clear-text="MASK-2hKo56F1a3jYGnJwhPmiF5;12345678;34"})
+--------------------------------------

+
+
+

Vault (enc-dir="vault-v1/vault_data/";keystore="vault-v1/vault-jceks.keystore") converted to credential store "v1-cs-2.store"
+Vault Conversion summary:
+--------------------------------------
+Vault Conversion Successful
+CLI command to add new credential store:
+/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="v1-cs-2.store",implementation-properties={"keyStoreType"⇒"JCEKS"},credential-reference={clear-text="secretsecret"})
+--------------------------------------

+
+
+

Vault (enc-dir="vault-v1-more/vault_data/";keystore="vault-v1-more/vault-jceks.keystore") converted to credential store "v1-cs-more.store"
+Vault Conversion summary:
+--------------------------------------
+Vault Conversion Successful
+CLI command to add new credential store:
+/subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="v1-cs-more.store",implementation-properties={"keyStoreType"⇒"JCEKS"},credential-reference={clear-text="MASK-2hKo56F1a3jYGnJwhPmiF5;12345678;34"})
+--------------------------------------

+
+
+
+
+

The result is conversion of all vaults with proper CLI commands.

+
+
+
+
+

20.9.5. Security Properties

+
+

Lets suppose security properties "a" and "c" defined in legacy security:

+
+
+
+
        <subsystem xmlns="urn:jboss:domain:security:2.0">
+            ...
+            <security-properties>
+                <property name="a" value="b" />
+                <property name="c" value="d" />
+            </security-properties>
+        </subsystem>
+
+
+
+

To define security properties in Elytron subsystem you need to set +attribute security-properties of the subsystem:

+
+
+
+
./subsystem=elytron:write-attribute(name=security-properties, value={ \
+    a = "b", \
+    c = "d" \
+})
+
+
+
+

You can also add or change one another property without modification of +others using map operations. Following command will set property "e":

+
+
+
+
./subsystem=elytron:map-put(name=security-properties, key=e, value=f)
+
+
+
+

By the same way you can also remove one of properties - in example newly +created property "e":

+
+
+
+
./subsystem=elytron:map-remove(name=security-properties, key=e)
+
+
+
+

Output XML configuration will be:

+
+
+
+
        <subsystem xmlns="urn:wildfly:elytron:1.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+            <security-properties>
+                <security-property name="a" value="b"/>
+                <security-property name="c" value="d"/>
+            </security-properties>
+            ...
+        </subsystem>
+
+
+
+
+

20.9.6. SSL Migration

+ +
+
+

20.9.7. Simple SSL Migration

+
+
Simple SSL Migration
+
+

This section describe securing HTTP connections to the server using SSL +using Elytron.
+It suppose you have already configured SSL using legacy +security-realm, for example by +Admin Guide#Enable +SSL, and your configuration looks like:

+
+
+
+
<security-realm name="ApplicationRealm">
+  <server-identities>
+    <ssl>
+      <keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore_password" alias="server" key-password="key_password" />
+    </ssl>
+  </server-identities>
+</security-realm>
+
+
+
+

To switch to Elytron you need to:

+
+
+
    +
  1. +

    Create Elytron key-store - specifying where is the keystore file stored and password by which it is encrypted. Default type of keystore generated using keytool is PKCS12:

    +
    +
    +
    /subsystem=elytron/key-store=LocalhostKeyStore:add(path=server.keystore,relative-to=jboss.server.config.dir,credential-reference={clear-text="keystore_password"},type=PKCS12)
    +
    +
    +
  2. +
  3. +

    Create Elytron key-manager - specifying keystore, alias (using +alias-filter) and password of key:

    +
    +
    +
    /subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})
    +
    +
    +
  4. +
  5. +

    Create Elytron server-ssl-context - specifying only reference to +key-manager defined above:

    +
    +
    +
    /subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager)
    +
    +
    +
  6. +
  7. +

    Switch https-listener from legacy security-realm to newly +created Elytron ssl-context:

    +
    +
    +
    /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
    +/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=LocalhostSslContext)
    +
    +
    +
  8. +
  9. +

    And reload the server:

    +
    +
    +
    reload
    +
    +
    +
  10. +
+
+
+

Output XML configuration of Elytron subsystem should look like:

+
+
+
+
        <subsystem xmlns="urn:wildfly:elytron:1.0" ...>
+            ...
+            <tls>
+                <key-stores>
+                    <key-store name="LocalhostKeyStore">
+                        <credential-reference clear-text="keystore_password"/>
+                        <implementation type="PKCS12"/>
+                        <file path="server.keystore" relative-to="jboss.server.config.dir"/>
+                    </key-store>
+                </key-stores>
+                <key-managers>
+                    <key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore">
+                        <credential-reference clear-text="key_password"/>
+                    </key-manager>
+                </key-managers>
+                <server-ssl-contexts>
+                    <server-ssl-context name="LocalhostSslContext" key-manager="LocalhostKeyManager"/>
+                </server-ssl-contexts>
+            </tls>
+        </subsystem>
+
+
+
+

Output https-listener in Undertow subsystem should be:

+
+
+
+
<https-listener name="https" socket-binding="https" ssl-context="LocalhostSslContext" enable-http2="true"/>
+
+
+
+
+
Client-Cert SSL Authentication Migration
+
+

This suppose you have already configured Client-Cert SSL authentication +using truststore in legacy security-realm, for example by +Admin +Guide#Add Client-Cert to SSL, and your configuration looks like:

+
+
+
+
<security-realm name="ApplicationRealm">
+  <server-identities>
+    <ssl>
+      <keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore_password" alias="server" key-password="key_password" />
+    </ssl>
+  </server-identities>
+  <authentication>
+    <truststore path="server.truststore" relative-to="jboss.server.config.dir" keystore-password="truststore_password" />
+    <local default-user="$local"/>
+    <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
+  </authentication>
+</security-realm>
+
+
+
+ + + + + +
+ + +Following configuration is sufficient to prevent users without valid +certificate and private key to access the server, but it does not +provide user identity to the application. That require to define +CLIENT_CERT HTTP mechanism / EXTERNAL SASL mechanism, which will be +described later.) +
+
+
+

At first use steps above to migrate basic part of the configuration. +Then continue by following:

+
+
+
    +
  1. +

    Create key-store of truststore - like for keystore above:

    +
    +
    +
    /subsystem=elytron/key-store=TrustStore:add(path=server.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text="truststore_password"},type=PKCS12)
    +
    +
    +
  2. +
  3. +

    Create trust-manager - specifying key-store of trustore, created +above:

    +
    +
    +
    /subsystem=elytron/trust-manager=TrustManager:add(key-store=TrustStore)
    +
    +
    +
  4. +
  5. +

    Modify server-ssl-context to use newly created trustmanager:

    +
    +
    +
    /subsystem=elytron/server-ssl-context=LocalhostSslContext:write-attribute(name=trust-manager,value=TrustManager)
    +
    +
    +
  6. +
  7. +

    Enable client authentication for server-ssl-context:

    +
    +
    +
    /subsystem=elytron/server-ssl-context=LocalhostSslContext:write-attribute(name=need-client-auth,value=true)
    +
    +
    +
  8. +
  9. +

    And reload the server:

    +
    +
    +
    reload
    +
    +
    +
  10. +
+
+
+

Output XML configuration of Elytron subsystem should look like:

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron:1.0" ...>
+    ...
+    <tls>
+        <key-stores>
+            <key-store name="LocalhostKeyStore">
+                <credential-reference clear-text="keystore_password"/>
+                <implementation type="PKCS12"/>
+                <file path="server.keystore" relative-to="jboss.server.config.dir"/>
+            </key-store>
+            <key-store name="TrustStore">
+                <credential-reference clear-text="truststore_password"/>
+                <implementation type="PKCS12"/>
+                <file path="server.truststore" relative-to="jboss.server.config.dir"/>
+            </key-store>
+        </key-stores>
+        <key-managers>
+            <key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server">
+                <credential-reference clear-text="key_password"/>
+            </key-manager>
+        </key-managers>
+        <trust-managers>
+            <trust-manager name="TrustManager" key-store="TrustStore"/>
+        </trust-managers>
+        <server-ssl-contexts>
+            <server-ssl-context name="LocalhostSslContext" need-client-auth="true" key-manager="LocalhostKeyManager" trust-manager="TrustManager"/>
+        </server-ssl-contexts>
+    </tls>
+</subsystem>
+
+
+
+
+
+

20.9.8. SSL with Client Cert Migration

+
+

As this documentation is primarily intended for users migrating to WildFly Elytron I am going to jump straight into the configuration required with WildFly Elytron.

+
+
+

This section will cover how to create the various resources required to achieve CLIENT_CERT authentication with fallback to username / password authentication for both HTTP and SASL (i.e. Remoting) - both are being covered at the same time as predominantly they require the same core configuration, it is not until the definition of the authentication factories that the configuration becomes really specific.

+
+
+

This suppose you have configured legacy Client-Cert SSL authentication using truststore in legacy security-realm, for example by Admin Guide#Add Client-Cert to SSL, and your configuration looks like:

+
+
+
+
<security-realm name="ManagementRealm">
+  <server-identities>
+    <ssl>
+      <keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore_password" alias="server" key-password="key_password" />
+    </ssl>
+  </server-identities>
+  <authentication>
+    <truststore path="server.truststore" relative-to="jboss.server.config.dir" keystore-password="truststore_password" />
+    <local default-user="$local"/>
+    <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
+  </authentication>
+</security-realm>
+
+
+
+

This also suppose you have already followed Simple SSL Migration section, so your partialy migrated configuration looks like:

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron:1.0" ...>
+    ...
+    <tls>
+        <key-stores>
+            <key-store name="LocalhostKeyStore">
+                <credential-reference clear-text="keystore_password"/>
+                <implementation type="PKCS12"/>
+                <file path="server.keystore" relative-to="jboss.server.config.dir"/>
+            </key-store>
+            <key-store name="TrustStore">
+                <credential-reference clear-text="truststore_password"/>
+                <implementation type="PKCS12"/>
+                <file path="server.truststore" relative-to="jboss.server.config.dir"/>
+            </key-store>
+        </key-stores>
+        <key-managers>
+            <key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server">
+                <credential-reference clear-text="key_password"/>
+            </key-manager>
+        </key-managers>
+        <trust-managers>
+            <trust-manager name="TrustManager" key-store="TrustStore"/>
+        </trust-managers>
+        <server-ssl-contexts>
+            <server-ssl-context name="LocalhostSslContext" need-client-auth="true" key-manager="LocalhostKeyManager" trust-manager="TrustManager"/>
+        </server-ssl-contexts>
+    </tls>
+</subsystem>
+
+
+
+

However following steps are needed to be user identity provided to your applications or management console.

+
+
+
Realms and Domains
+
+

We use users stored in standard properties files, so we can predefined Elytron security domain ManagementDomain and realm ManagementRealm:

+
+
+
+
    <security-domains>
+        <security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper">
+            <realm name="ManagementRealm" role-decoder="groups-to-roles"/>
+            <realm name="local"/>
+        </security-domain>
+    </security-domains>
+    <security-realms>
+        <properties-realm name="ManagementRealm">
+            <users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/>
+            <groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
+        </properties-realm>
+    </security-realms>
+
+
+
+

The security realm will be used in two situations: +* Authentication in password fallback case, when certificate authentication fails +* Authorization in both - password and certificate auth - cases - the realm will provide roles of individual users

+
+
+

This mean, for any client certificate there have to exists user in the security realm.

+
+
+
+
Principal decoder
+
+

When certificate authentication is used and the security realm accepts usernames to resolve an identity, there have to be defined way to obtain username from a client certificate. +In this case we will use first CN attribute in certificate subject:

+
+
+
+
./subsystem=elytron/x500-attribute-principal-decoder=x500-decoder:add(attribute-name=CN, maximum-segments=1)
+
+
+
+

Resulting in: -

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+  ...
+  <mappers>
+    ...
+    <x500-attribute-principal-decoder name="x500-decoder" attribute-name="CN" maximum-segments="1"/>
+    ...
+  </mappers>
+  ...
+</subsystem>
+
+
+
+
+
HTTP Authentication Factory
+
+

For the HTTP connections we now define a HTTP authentication factory using the previously defined resources and it is configured to support CLIENT_CERT and DIGEST authentication.

+
+
+

Because our security realm is not able to verify client certificates (properties realm verifies passwords only), we need to add configuring mechanism factory first, which will disable certificate verification against the security realm:

+
+
+
+
/subsystem=elytron/configurable-http-server-mechanism-factory=configured-cert:add(http-server-mechanism-factory=global, properties={org.wildfly.security.http.skip-certificate-verification=true})
+
+
+
+

As following, we can create HTTP authentication alone:

+
+
+
+
./subsystem=elytron/http-authentication-factory=client-cert-digest:add(http-server-mechanism-factory=configured-cert, \
+  security-domain=ManagementDomain, \
+ mechanism-configurations=[{ \
+  mechanism-name=CLIENT_CERT, \
+  pre-realm-principal-transformer=x500-decoder}, \
+ {mechanism-name=DIGEST, mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])
+
+
+
+

Resulting in: -

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+  ...
+  <http>
+    ...
+    <http-authentication-factory name="client-cert-digest" http-server-mechanism-factory="global" security-domain="ManagementDomain">
+      <mechanism-configuration>
+        <mechanism mechanism-name="CLIENT_CERT" pre-realm-principal-transformer="x500-decoder"/>
+        <mechanism mechanism-name="DIGEST">
+          <mechanism-realm realm-name="ManagementRealm"/>
+        </mechanism>
+      </mechanism-configuration>
+    </http-authentication-factory>
+    ...
+    <configurable-http-server-mechanism-factory name="configured-cert" http-server-mechanism-factory="global">
+        <properties>
+            <property name="org.wildfly.security.http.skip-certificate-verification" value="true"/>
+        </properties>
+    </configurable-http-server-mechanism-factory>
+    ...
+  </http>
+  ...
+</subsystem>
+
+
+
+
+
SASL Authentication Factory
+
+

The architecture of the two authentication factories if very similar so a SASL authentication factory can be defined in the same way as the HTTP equivalent. +However, as EXTERNAL SASL mechanism does not do any certificate verification, there is no need for configuring SASL server factory.

+
+
+
+
./subsystem=elytron/sasl-authentication-factory=client-cert-digest:add(sasl-server-factory=elytron, \
+  security-domain=ManagementDomain, \
+  mechanism-configurations=[{mechanism-name=EXTERNAL, \
+  pre-realm-principal-transformer=x500-decoder}, \
+  {mechanism-name=DIGEST-MD5, mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])
+
+
+
+

This results in: -

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+  ...
+  <sasl>
+    ...
+    <sasl-authentication-factory name="client-cert-digest" sasl-server-factory="elytron" security-domain="ManagementDomain">
+      <mechanism-configuration>
+        <mechanism mechanism-name="EXTERNAL" pre-realm-principal-transformer="x500-decoder"/>
+        <mechanism mechanism-name="DIGEST-MD5">
+          <mechanism-realm realm-name="ManagementRealm"/>
+        </mechanism>
+      </mechanism-configuration>
+    </sasl-authentication-factory>
+    ...
+  </sasl>
+  ...
+</subsystem>
+
+
+
+

There is used the same principal transformer as defined for HTTP.

+
+
+
+
SSL Context
+
+

The SSL context was already defined, but we need to modify it to not fail on client certificate authentication failure, but to fallback to password authentication.

+
+
+
+
./subsystem=elytron/server-ssl-context=LocalhostSslContext:write-attribute(name=need-client-auth, value=false)
+./subsystem=elytron/server-ssl-context=LocalhostSslContext:write-attribute(name=want-client-auth, value=true)
+
+
+
+

Resulting in: -

+
+
+
+
<subsystem xmlns="urn:wildfly:elytron:1.1" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+  ...
+  <tls>
+    ...
+    <server-ssl-contexts>
+      <server-ssl-context name="LocalhostSslContext" want-client-auth="true" need-client-auth="false" key-manager="LocalhostKeyManager" trust-manager="TrustManager"/>
+    </server-ssl-contexts>
+  </tls>
+</subsystem>
+
+
+
+

As we will be supporting fallback to username/password authentication need-client-auth is set to false. This allows connections to be established but an alternative form of authentication will be required.

+
+
+
+
Using for Management
+
+

At this point the management interfaces can be updated to use the newly defined resources, we need to add references to the two new authentication factories and the SSL context, we can also remove the existing reference to the legacy security realm. As this is modifying existing interfaces a server reload will also be required.

+
+
+
+
./core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=LocalhostSslContext)
+./core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
+./core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=client-cert-digest)
+./core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=client-cert-digest)
+./core-service=management/management-interface=http-interface:undefine-attribute(name=security-realm)
+:reload
+
+
+
+

The management interface configuration then becomes: -

+
+
+
+
<management>
+  ...
+  <management-interfaces>
+    <http-interface http-authentication-factory="client-cert-digest" ssl-context="LocalhostSslContext">
+      <http-upgrade enabled="true" sasl-authentication-factory="client-cert-digest"/>
+      <socket-binding http="management-http" https="management-https"/>
+    </http-interface>
+  </management-interfaces>
+  ...
+</management>
+
+
+
+
Admin Clients
+
+

At this stage assuming the same files have been used as in this example it should be possible to connect to the management interface of the server either using a web browser or the JBoss CLI with username and password from your original mgmt-users.properties file.

+
+
+

For certificate based authentication certificates signed by your CA, whose subject DN resolves to username existing in properties realm will be accepted.

+
+
+CLI Client Configuration +
+

This suppose you have used following configuration in bin/jboss-cli.xml:

+
+
+
+
<ssl>
+  <alias>adminalias</alias>
+  <key-store>admin.keystore</key-store>
+  <key-store-password>keystore_password</key-store-password>
+  <trust-store>ca.truststore</trust-store>
+  <trust-store-password>truststore_password</trust-store-password>
+</ssl>
+
+
+
+

You can stay using this configuration, but since the integration of WildFly Elytron it is possible with the CLI to use a configuration file wildfly-config.xml to define the security settings including the settings for the client side SSL context.

+
+
+

In such case, following wildfly-config.xml can be created in the location the JBoss CLI is being started from: -

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <authentication-client xmlns="urn:elytron:1.0">
+        <key-stores>
+            <key-store name="admin" type="PKCS12" >
+                <file name="admin.keystore"/>
+                <key-store-clear-password password="keystore_password" />
+            </key-store>
+            <key-store name="ca" type="PKCS12">
+                <file name="ca.truststore"/>
+                <key-store-clear-password password="truststore_password" />
+            </key-store>
+        </key-stores>
+        <ssl-context-rules>
+            <rule use-ssl-context="default" />
+        </ssl-context-rules>
+        <ssl-contexts>
+            <ssl-context name="default">
+                <key-store-ssl-certificate key-store-name="admin" alias="adminalias">
+                    <key-store-clear-password password="key_password" />
+                </key-store-ssl-certificate>
+                <trust-store key-store-name="ca" />
+            </ssl-context>
+        </ssl-contexts>
+    </authentication-client>
+</configuration>
+
+
+
+

The CLI can now be started using the following command: -

+
+
+
+
./jboss-cli.sh -c -Dwildfly.config.url=wildfly-config.xml
+
+
+
+

The :whoami command can be used within the CLI to double check the current identity.

+
+
+
+
[standalone@localhost:9993 /] :whoami(verbose=true)
+{
+    "outcome" => "success",
+    "result" => {
+        "identity" => {"username" => "admin"},
+        "mapped-roles" => ["SuperUser"]
+    }
+}
+
+
+
+
+
+
+
+

20.9.9. Documentation Still Needed

+
+
    +
  • +

    How to migrate application which uses different identity store for +authentication and authorization (migration to Elytron aggregate-realm).

    +
  • +
  • +

    How migrate to using cache (migration to caching-realm)

    +
  • +
  • +

    Limitations for migration from PicketBox/legacy security to Elytron, +for example, Infinispan cache cannot be used, any others?

    +
  • +
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/WildFly_and_WildFly_Preview.html b/latest/WildFly_and_WildFly_Preview.html new file mode 100644 index 000000000..fea1c8181 --- /dev/null +++ b/latest/WildFly_and_WildFly_Preview.html @@ -0,0 +1,641 @@ + + + + + + + + +WildFly and WildFly Preview + + + + + + +
+
+
+
+

© 2021 The original authors.

+
+ +
+
+

Different flavors of WildFly

+
+
+
+

Beginning with the WildFly 22 release, the WildFly project began producing two variants of +its landmark application server — the standard "WildFly" variant and the new "WildFly Preview".

+
+
+

The standard "WildFly" variant is the classic server that users have been familiar with for many +years now. It’s a very mature server, with a lot of care taken to ensure new features are fully +realized and to limit the number of incompatible changes between releases.

+
+
+

WildFly Preview is a tech preview variant of the server. The goal of WildFly Preview is to give +the WildFly community a look at changes that are likely to appear in future releases of the standard +WildFly server. The aim is to get feedback on in-progress work, so it is more likely that features +will not be fully realized, and a greater number of incompatible changes may appear from release +to release. The amount of testing WildFly Preview undergoes will generally not be as high as the +standard WildFly variant.

+
+
+

The expectation is on any given release date, both standard WildFly and WildFly Preview will be released.

+
+
+ + + + + +
+ + +
+

A WildFly Preview release will have the same version number and suffix (Beta, Final, etc) as the +main WildFly release, but regardless of the suffix, a WildFly Preview release should be treated +as a Technical Preview release.

+
+
+
+
+
+
+

1. Getting WildFly Preview

+
+
+

The zip or tar.gz file for WildFly Preview is available at https://wildfly.org/downloads +right next to the main WildFly release files for the same version.

+
+
+

For bootable jar users and Galleon CLI users, we provide a Galleon feature pack for WildFly Preview. The +Galleon feature pack location for the feature pack is wildfly-preview@maven(org.jboss.universe:community-universe). +This feature pack is the WildFly Preview analogue to main WildFly’s wildfly@maven(org.jboss.universe:community-universe).

+
+
+
+
+

2. WildFly Preview and Jakarta EE

+
+
+

Prior to WildFly 27, the primary difference between standard WildFly and WildFly Preview was that standard WildFly +supported Jakarta EE 8, while WildFly Preview supported Jakarta EE 9. However, beginning with the 27 release both +standard WildFly and WildFly Preview support Jakarta EE 10, so this is no longer a difference between the two variants.

+
+
+

Note that formally certifying WildFly Preview as compatible implementation of Jakarta EE is not a priority +for the WildFly project and may not happen at the time of a release, or ever. Users interested in formal EE +compliance of WildFly Preview should check the WildFly Certifications repository.

+
+
+

2.1. WildFly Preview Support for EE 8 Deployments

+
+

The APIs that WildFly Preview exposes to deployments are the EE 10 APIs, so all the classes and interfaces are in the +jakarta.* packages. But you may be able to run an existing EE 8 application on WildFly Preview.

+
+
+

What we’ve done is we’ve added to the server’s handling of managed deployments a bytecode and text file transformation +process to convert EE 8 content into EE 9. It bytecode transforms deployment jars to alter +references to EE 8 packages in the class file constant tables to change from javax.* to jakarta.*. The transformation +goes beyond simple package renames; a number of other known differences between EE 8 and EE 9 are handled. We owe a +great deal of thanks to the community behind the Eclipse Transformer +project for their work on the underlying transformation tool.

+
+
+

As noted above, this handling is only applied to managed deployments. A managed deployment is one where a management +client (the CLI, HAL console or the deployment scanner) presents deployment content to the server and the server makes +a copy of it in its internal deployment content repository. The content that gets installed into the runtime is that internal copy. +Unmanaged deployments that use EE 8 APIs will not work. We transform managed deployments when we copy the deployment +content into the internal content repo. For unmanaged deployments we use the original content file(s) the user provides, +and WildFly Preview won’t modify those files as we don’t regard them as being 'owned' by the server.

+
+
+

Note that the deployment transformation feature will not update the deployment to adapt to any API differences between +Jakarta EE 9 and EE 10. It only covers the javax to jakarta name changes that came with EE 9.

+
+
+

In the long run it’s better for users if they either convert their application source to EE 10 APIs, or use build-time +tooling that we expect the Jakarta ecosystem to provide over time to do transformation at build time. But some +applications just can’t be changed, so the server-side solution WildFly Preview provides can handle those cases.

+
+
+

This deployment transformation feature will be removed from WildFly Preview in a future release. However it is likely +that the WildFly developers will offer a separate Galleon feature pack that can be used to add this behavior into both +standard WildFly and WildFly Preview.

+
+
+
+
+
+

3. Other Differences in WildFly Preview

+
+
+

WildFly Preview is intended to help get community exposure for other changes we plan to +make in the server. Here are the key differencs between standard WildFly and WildFly Preview:

+
+
+
    +
  • +

    WildFly Preview is not a Jakarta EE 10 compatible implementation. It also is not a MicroProfile platform compatible +implementation. Most EE 10 and MicroProfile applications are expected to run well on WildFly Preview, but it is not +certified compatible.

    +
  • +
  • +

    The standard configuration files do not configure an embedded messaging broker. Instead they configure the +messaging-activemq subsystem to provide connections to a remote ActiveMQ Artemis broker. (It’s a task for the user to +run such a broker or to update the config to integrate with a different broker.) We want WildFly out-of-the-box to be +more of a cloud native appserver and having an embedded messaging broker in the default configuration is not cloud native. +A WildFly container in the cloud running an embedded broker is not scalable, as multiple broker instances need separate +configuration to act as a primary or backup. An embedded messaging broker also has more advanced persistent storage +requirements than a server primarily dedicated to handling HTTP requests would have. Note however that running an +embedded broker is still supported. We’ve added to the $WILDFLY_HOME/docs/examples/configs folder an example +standalone-activemq-embedded.xml configuration showing its use.

    +
  • +
  • +

    WildFly Preview includes a tech preview version of a new Micrometer subsystem.

    +
  • +
  • +

    The Hibernate ORM integration used by the JPA subsystem’s Hibernate Search feature supports using outbox polling as coordination strategy for automatic indexing.

    +
  • +
  • +

    The jaxrs Galleon layer depends on (and thus brings in) the microprofile-rest-client layer. This dependency is optional, so it can be excluded when provisioning a custom WildFly Preview installation.

    +
  • +
  • +

    RESTEasy Spring support only comes with WildFly Preview. Typically standard WildFly provides RESTEasy Spring support, but at the time of the WildFly 27 release the Spring libraries it integrates with had not yet +produced final releases. So to avoid possible incompatible changes in a future standard WildFly release, support +for RESTEasy Spring was moved to WildFly Preview only.

    +
  • +
  • +

    The extensions providing the legacy subsystems 'cmp', 'config-admin', 'jacorb', 'jaxr', 'jsr-77', 'messaging' (HornetQ based), +'security' (not 'elytron'), and 'web' (not 'undertow') are removed. These were only used for domain mode to allow a Domain Controller to control +hosts running much earlier WildFly versions where servers using these subsystems were supported.

    +
  • +
  • +

    Alternate JPA and JSF providers that you can install with standard WildFly are not supported.

    +
  • +
+
+
+
+
+ + + \ No newline at end of file diff --git a/latest/common_attributes.html b/latest/common_attributes.html new file mode 100644 index 000000000..03612f711 --- /dev/null +++ b/latest/common_attributes.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /14/common_attributes.html

+ + \ No newline at end of file diff --git a/29/downloads/acme-subsystem.zip b/latest/downloads/acme-subsystem.zip similarity index 100% rename from 29/downloads/acme-subsystem.zip rename to latest/downloads/acme-subsystem.zip diff --git a/29/downloads/test1.zip b/latest/downloads/test1.zip similarity index 100% rename from 29/downloads/test1.zip rename to latest/downloads/test1.zip diff --git a/29/downloads/test2.zip b/latest/downloads/test2.zip similarity index 100% rename from 29/downloads/test2.zip rename to latest/downloads/test2.zip diff --git a/29/images/250px-Public_key_making.svg.png b/latest/images/250px-Public_key_making.svg.png similarity index 100% rename from 29/images/250px-Public_key_making.svg.png rename to latest/images/250px-Public_key_making.svg.png diff --git a/29/images/DC-HC-Server.png b/latest/images/DC-HC-Server.png similarity index 100% rename from 29/images/DC-HC-Server.png rename to latest/images/DC-HC-Server.png diff --git a/29/images/Public_key_encryption-mod.svg.png b/latest/images/Public_key_encryption-mod.svg.png similarity index 100% rename from 29/images/Public_key_encryption-mod.svg.png rename to latest/images/Public_key_encryption-mod.svg.png diff --git a/29/images/Public_key_making.png b/latest/images/Public_key_making.png similarity index 100% rename from 29/images/Public_key_making.png rename to latest/images/Public_key_making.png diff --git a/29/images/add-app-user-interactive.png b/latest/images/add-app-user-interactive.png similarity index 100% rename from 29/images/add-app-user-interactive.png rename to latest/images/add-app-user-interactive.png diff --git a/29/images/add-app-user-non-interactive.png b/latest/images/add-app-user-non-interactive.png similarity index 100% rename from 29/images/add-app-user-non-interactive.png rename to latest/images/add-app-user-non-interactive.png diff --git a/29/images/add-mgmt-user-interactive.png b/latest/images/add-mgmt-user-interactive.png similarity index 100% rename from 29/images/add-mgmt-user-interactive.png rename to latest/images/add-mgmt-user-interactive.png diff --git a/29/images/add-mgmt-user-non-interactive.png b/latest/images/add-mgmt-user-non-interactive.png similarity index 100% rename from 29/images/add-mgmt-user-non-interactive.png rename to latest/images/add-mgmt-user-non-interactive.png diff --git a/29/images/add-user.png b/latest/images/add-user.png similarity index 100% rename from 29/images/add-user.png rename to latest/images/add-user.png diff --git a/29/images/addscopedrole.png b/latest/images/addscopedrole.png similarity index 100% rename from 29/images/addscopedrole.png rename to latest/images/addscopedrole.png diff --git a/29/images/callersroles.png b/latest/images/callersroles.png similarity index 100% rename from 29/images/callersroles.png rename to latest/images/callersroles.png diff --git a/29/images/clustering/Clustering.jpg b/latest/images/clustering/Clustering.jpg similarity index 100% rename from 29/images/clustering/Clustering.jpg rename to latest/images/clustering/Clustering.jpg diff --git a/29/images/clustering/JBoss_Management.png b/latest/images/clustering/JBoss_Management.png similarity index 100% rename from 29/images/clustering/JBoss_Management.png rename to latest/images/clustering/JBoss_Management.png diff --git a/29/images/clustering/JBoss_Management_2.png b/latest/images/clustering/JBoss_Management_2.png similarity index 100% rename from 29/images/clustering/JBoss_Management_2.png rename to latest/images/clustering/JBoss_Management_2.png diff --git a/29/images/clustering/http---10.211.55.2-8330-cluster-demo-.png b/latest/images/clustering/http---10.211.55.2-8330-cluster-demo-.png similarity index 100% rename from 29/images/clustering/http---10.211.55.2-8330-cluster-demo-.png rename to latest/images/clustering/http---10.211.55.2-8330-cluster-demo-.png diff --git a/29/images/clustering/http---10.211.55.7-8330-cluster-demo-.png b/latest/images/clustering/http---10.211.55.7-8330-cluster-demo-.png similarity index 100% rename from 29/images/clustering/http---10.211.55.7-8330-cluster-demo-.png rename to latest/images/clustering/http---10.211.55.7-8330-cluster-demo-.png diff --git a/29/images/clustering/http---10.211.55.7-cluster-demo-get.jsp.png b/latest/images/clustering/http---10.211.55.7-cluster-demo-get.jsp.png similarity index 100% rename from 29/images/clustering/http---10.211.55.7-cluster-demo-get.jsp.png rename to latest/images/clustering/http---10.211.55.7-cluster-demo-get.jsp.png diff --git a/29/images/clustering/http---10.211.55.7-cluster-demo-put.jsp.png b/latest/images/clustering/http---10.211.55.7-cluster-demo-put.jsp.png similarity index 100% rename from 29/images/clustering/http---10.211.55.7-cluster-demo-put.jsp.png rename to latest/images/clustering/http---10.211.55.7-cluster-demo-put.jsp.png diff --git a/29/images/clustering/test_scenario.jpg b/latest/images/clustering/test_scenario.jpg similarity index 100% rename from 29/images/clustering/test_scenario.jpg rename to latest/images/clustering/test_scenario.jpg diff --git a/29/images/ejb/mdb-management-resource.png b/latest/images/ejb/mdb-management-resource.png similarity index 100% rename from 29/images/ejb/mdb-management-resource.png rename to latest/images/ejb/mdb-management-resource.png diff --git a/29/images/ejb/singleton-management-resource.png b/latest/images/ejb/singleton-management-resource.png similarity index 100% rename from 29/images/ejb/singleton-management-resource.png rename to latest/images/ejb/singleton-management-resource.png diff --git a/29/images/ejb/stateful-management-resource.png b/latest/images/ejb/stateful-management-resource.png similarity index 100% rename from 29/images/ejb/stateful-management-resource.png rename to latest/images/ejb/stateful-management-resource.png diff --git a/29/images/ejb/stateless-management-resource.png b/latest/images/ejb/stateless-management-resource.png similarity index 100% rename from 29/images/ejb/stateless-management-resource.png rename to latest/images/ejb/stateless-management-resource.png diff --git a/29/images/excludemapping.png b/latest/images/excludemapping.png similarity index 100% rename from 29/images/excludemapping.png rename to latest/images/excludemapping.png diff --git a/29/images/gfx/Activator.png b/latest/images/gfx/Activator.png similarity index 100% rename from 29/images/gfx/Activator.png rename to latest/images/gfx/Activator.png diff --git a/29/images/gfx/Eclipse_Deploy_2.jpg b/latest/images/gfx/Eclipse_Deploy_2.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Deploy_2.jpg rename to latest/images/gfx/Eclipse_Deploy_2.jpg diff --git a/29/images/gfx/Eclipse_Detect_Servers_1.png b/latest/images/gfx/Eclipse_Detect_Servers_1.png similarity index 100% rename from 29/images/gfx/Eclipse_Detect_Servers_1.png rename to latest/images/gfx/Eclipse_Detect_Servers_1.png diff --git a/29/images/gfx/Eclipse_Detect_Servers_2.png b/latest/images/gfx/Eclipse_Detect_Servers_2.png similarity index 100% rename from 29/images/gfx/Eclipse_Detect_Servers_2.png rename to latest/images/gfx/Eclipse_Detect_Servers_2.png diff --git a/29/images/gfx/Eclipse_Detect_Servers_3.png b/latest/images/gfx/Eclipse_Detect_Servers_3.png similarity index 100% rename from 29/images/gfx/Eclipse_Detect_Servers_3.png rename to latest/images/gfx/Eclipse_Detect_Servers_3.png diff --git a/29/images/gfx/Eclipse_Detect_Servers_4.png b/latest/images/gfx/Eclipse_Detect_Servers_4.png similarity index 100% rename from 29/images/gfx/Eclipse_Detect_Servers_4.png rename to latest/images/gfx/Eclipse_Detect_Servers_4.png diff --git a/29/images/gfx/Eclipse_Greeter_Deploy_1.png b/latest/images/gfx/Eclipse_Greeter_Deploy_1.png similarity index 100% rename from 29/images/gfx/Eclipse_Greeter_Deploy_1.png rename to latest/images/gfx/Eclipse_Greeter_Deploy_1.png diff --git a/29/images/gfx/Eclipse_Greeter_Deploy_3.png b/latest/images/gfx/Eclipse_Greeter_Deploy_3.png similarity index 100% rename from 29/images/gfx/Eclipse_Greeter_Deploy_3.png rename to latest/images/gfx/Eclipse_Greeter_Deploy_3.png diff --git a/29/images/gfx/Eclipse_Helloworld_Deploy_1.jpg b/latest/images/gfx/Eclipse_Helloworld_Deploy_1.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Helloworld_Deploy_1.jpg rename to latest/images/gfx/Eclipse_Helloworld_Deploy_1.jpg diff --git a/29/images/gfx/Eclipse_Helloworld_Deploy_3.jpg b/latest/images/gfx/Eclipse_Helloworld_Deploy_3.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Helloworld_Deploy_3.jpg rename to latest/images/gfx/Eclipse_Helloworld_Deploy_3.jpg diff --git a/29/images/gfx/Eclipse_JBoss_Central_1.png b/latest/images/gfx/Eclipse_JBoss_Central_1.png similarity index 100% rename from 29/images/gfx/Eclipse_JBoss_Central_1.png rename to latest/images/gfx/Eclipse_JBoss_Central_1.png diff --git a/29/images/gfx/Eclipse_JBoss_Central_2.png b/latest/images/gfx/Eclipse_JBoss_Central_2.png similarity index 100% rename from 29/images/gfx/Eclipse_JBoss_Central_2.png rename to latest/images/gfx/Eclipse_JBoss_Central_2.png diff --git a/29/images/gfx/Eclipse_JavaEEWebProject_1.png b/latest/images/gfx/Eclipse_JavaEEWebProject_1.png similarity index 100% rename from 29/images/gfx/Eclipse_JavaEEWebProject_1.png rename to latest/images/gfx/Eclipse_JavaEEWebProject_1.png diff --git a/29/images/gfx/Eclipse_JavaEEWebProject_2.png b/latest/images/gfx/Eclipse_JavaEEWebProject_2.png similarity index 100% rename from 29/images/gfx/Eclipse_JavaEEWebProject_2.png rename to latest/images/gfx/Eclipse_JavaEEWebProject_2.png diff --git a/29/images/gfx/Eclipse_JavaEEWebProject_3.png b/latest/images/gfx/Eclipse_JavaEEWebProject_3.png similarity index 100% rename from 29/images/gfx/Eclipse_JavaEEWebProject_3.png rename to latest/images/gfx/Eclipse_JavaEEWebProject_3.png diff --git a/29/images/gfx/Eclipse_JavaEEWebProject_4.png b/latest/images/gfx/Eclipse_JavaEEWebProject_4.png similarity index 100% rename from 29/images/gfx/Eclipse_JavaEEWebProject_4.png rename to latest/images/gfx/Eclipse_JavaEEWebProject_4.png diff --git a/29/images/gfx/Eclipse_KitchenSink_Deploy_1.jpg b/latest/images/gfx/Eclipse_KitchenSink_Deploy_1.jpg similarity index 100% rename from 29/images/gfx/Eclipse_KitchenSink_Deploy_1.jpg rename to latest/images/gfx/Eclipse_KitchenSink_Deploy_1.jpg diff --git a/29/images/gfx/Eclipse_KitchenSink_Deploy_3.jpg b/latest/images/gfx/Eclipse_KitchenSink_Deploy_3.jpg similarity index 100% rename from 29/images/gfx/Eclipse_KitchenSink_Deploy_3.jpg rename to latest/images/gfx/Eclipse_KitchenSink_Deploy_3.jpg diff --git a/29/images/gfx/Eclipse_Login_Deploy_1.jpg b/latest/images/gfx/Eclipse_Login_Deploy_1.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Login_Deploy_1.jpg rename to latest/images/gfx/Eclipse_Login_Deploy_1.jpg diff --git a/29/images/gfx/Eclipse_Login_Deploy_3.jpg b/latest/images/gfx/Eclipse_Login_Deploy_3.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Login_Deploy_3.jpg rename to latest/images/gfx/Eclipse_Login_Deploy_3.jpg diff --git a/29/images/gfx/Eclipse_New_Server_1.jpg b/latest/images/gfx/Eclipse_New_Server_1.jpg similarity index 100% rename from 29/images/gfx/Eclipse_New_Server_1.jpg rename to latest/images/gfx/Eclipse_New_Server_1.jpg diff --git a/29/images/gfx/Eclipse_New_Server_2.jpg b/latest/images/gfx/Eclipse_New_Server_2.jpg similarity index 100% rename from 29/images/gfx/Eclipse_New_Server_2.jpg rename to latest/images/gfx/Eclipse_New_Server_2.jpg diff --git a/29/images/gfx/Eclipse_New_Server_3.jpg b/latest/images/gfx/Eclipse_New_Server_3.jpg similarity index 100% rename from 29/images/gfx/Eclipse_New_Server_3.jpg rename to latest/images/gfx/Eclipse_New_Server_3.jpg diff --git a/29/images/gfx/Eclipse_New_Server_4.jpg b/latest/images/gfx/Eclipse_New_Server_4.jpg similarity index 100% rename from 29/images/gfx/Eclipse_New_Server_4.jpg rename to latest/images/gfx/Eclipse_New_Server_4.jpg diff --git a/29/images/gfx/Eclipse_New_Server_5.jpg b/latest/images/gfx/Eclipse_New_Server_5.jpg similarity index 100% rename from 29/images/gfx/Eclipse_New_Server_5.jpg rename to latest/images/gfx/Eclipse_New_Server_5.jpg diff --git a/29/images/gfx/Eclipse_New_Server_6.jpg b/latest/images/gfx/Eclipse_New_Server_6.jpg similarity index 100% rename from 29/images/gfx/Eclipse_New_Server_6.jpg rename to latest/images/gfx/Eclipse_New_Server_6.jpg diff --git a/29/images/gfx/Eclipse_Numberguess_Deploy_1.jpg b/latest/images/gfx/Eclipse_Numberguess_Deploy_1.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Numberguess_Deploy_1.jpg rename to latest/images/gfx/Eclipse_Numberguess_Deploy_1.jpg diff --git a/29/images/gfx/Eclipse_Numberguess_Deploy_3.jpg b/latest/images/gfx/Eclipse_Numberguess_Deploy_3.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Numberguess_Deploy_3.jpg rename to latest/images/gfx/Eclipse_Numberguess_Deploy_3.jpg diff --git a/29/images/gfx/Eclipse_Server_Start_1.jpg b/latest/images/gfx/Eclipse_Server_Start_1.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Server_Start_1.jpg rename to latest/images/gfx/Eclipse_Server_Start_1.jpg diff --git a/29/images/gfx/Eclipse_Server_Start_2.jpg b/latest/images/gfx/Eclipse_Server_Start_2.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Server_Start_2.jpg rename to latest/images/gfx/Eclipse_Server_Start_2.jpg diff --git a/29/images/gfx/Eclipse_Server_Tab_1.jpg b/latest/images/gfx/Eclipse_Server_Tab_1.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Server_Tab_1.jpg rename to latest/images/gfx/Eclipse_Server_Tab_1.jpg diff --git a/29/images/gfx/Eclipse_Server_Tab_2.jpg b/latest/images/gfx/Eclipse_Server_Tab_2.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Server_Tab_2.jpg rename to latest/images/gfx/Eclipse_Server_Tab_2.jpg diff --git a/29/images/gfx/Eclipse_Server_Tab_3.jpg b/latest/images/gfx/Eclipse_Server_Tab_3.jpg similarity index 100% rename from 29/images/gfx/Eclipse_Server_Tab_3.jpg rename to latest/images/gfx/Eclipse_Server_Tab_3.jpg diff --git a/29/images/gfx/Export.png b/latest/images/gfx/Export.png similarity index 100% rename from 29/images/gfx/Export.png rename to latest/images/gfx/Export.png diff --git a/29/images/gfx/Import_Quickstarts_1.jpg b/latest/images/gfx/Import_Quickstarts_1.jpg similarity index 100% rename from 29/images/gfx/Import_Quickstarts_1.jpg rename to latest/images/gfx/Import_Quickstarts_1.jpg diff --git a/29/images/gfx/Import_Quickstarts_2.jpg b/latest/images/gfx/Import_Quickstarts_2.jpg similarity index 100% rename from 29/images/gfx/Import_Quickstarts_2.jpg rename to latest/images/gfx/Import_Quickstarts_2.jpg diff --git a/29/images/gfx/Import_Quickstarts_3.jpg b/latest/images/gfx/Import_Quickstarts_3.jpg similarity index 100% rename from 29/images/gfx/Import_Quickstarts_3.jpg rename to latest/images/gfx/Import_Quickstarts_3.jpg diff --git a/29/images/gfx/Import_Quickstarts_4.jpg b/latest/images/gfx/Import_Quickstarts_4.jpg similarity index 100% rename from 29/images/gfx/Import_Quickstarts_4.jpg rename to latest/images/gfx/Import_Quickstarts_4.jpg diff --git a/29/images/gfx/Import_Quickstarts_5.jpg b/latest/images/gfx/Import_Quickstarts_5.jpg similarity index 100% rename from 29/images/gfx/Import_Quickstarts_5.jpg rename to latest/images/gfx/Import_Quickstarts_5.jpg diff --git a/29/images/gfx/Manifest.png b/latest/images/gfx/Manifest.png similarity index 100% rename from 29/images/gfx/Manifest.png rename to latest/images/gfx/Manifest.png diff --git a/29/images/gfx/Template.png b/latest/images/gfx/Template.png similarity index 100% rename from 29/images/gfx/Template.png rename to latest/images/gfx/Template.png diff --git a/29/images/gfx/console.png b/latest/images/gfx/console.png similarity index 100% rename from 29/images/gfx/console.png rename to latest/images/gfx/console.png diff --git a/29/images/gfx/eclipse_arquillian_0.png b/latest/images/gfx/eclipse_arquillian_0.png similarity index 100% rename from 29/images/gfx/eclipse_arquillian_0.png rename to latest/images/gfx/eclipse_arquillian_0.png diff --git a/29/images/gfx/eclipse_arquillian_1.png b/latest/images/gfx/eclipse_arquillian_1.png similarity index 100% rename from 29/images/gfx/eclipse_arquillian_1.png rename to latest/images/gfx/eclipse_arquillian_1.png diff --git a/29/images/gfx/eclipse_arquillian_11.png b/latest/images/gfx/eclipse_arquillian_11.png similarity index 100% rename from 29/images/gfx/eclipse_arquillian_11.png rename to latest/images/gfx/eclipse_arquillian_11.png diff --git a/29/images/gfx/eclipse_arquillian_12.png b/latest/images/gfx/eclipse_arquillian_12.png similarity index 100% rename from 29/images/gfx/eclipse_arquillian_12.png rename to latest/images/gfx/eclipse_arquillian_12.png diff --git a/29/images/gfx/eclipse_arquillian_2.png b/latest/images/gfx/eclipse_arquillian_2.png similarity index 100% rename from 29/images/gfx/eclipse_arquillian_2.png rename to latest/images/gfx/eclipse_arquillian_2.png diff --git a/29/images/gfx/eclipse_arquillian_3.png b/latest/images/gfx/eclipse_arquillian_3.png similarity index 100% rename from 29/images/gfx/eclipse_arquillian_3.png rename to latest/images/gfx/eclipse_arquillian_3.png diff --git a/29/images/gfx/eclipse_arquillian_4.png b/latest/images/gfx/eclipse_arquillian_4.png similarity index 100% rename from 29/images/gfx/eclipse_arquillian_4.png rename to latest/images/gfx/eclipse_arquillian_4.png diff --git a/29/images/gfx/icons/callouts/1.png b/latest/images/gfx/icons/callouts/1.png similarity index 100% rename from 29/images/gfx/icons/callouts/1.png rename to latest/images/gfx/icons/callouts/1.png diff --git a/29/images/gfx/icons/callouts/10.png b/latest/images/gfx/icons/callouts/10.png similarity index 100% rename from 29/images/gfx/icons/callouts/10.png rename to latest/images/gfx/icons/callouts/10.png diff --git a/29/images/gfx/icons/callouts/11.png b/latest/images/gfx/icons/callouts/11.png similarity index 100% rename from 29/images/gfx/icons/callouts/11.png rename to latest/images/gfx/icons/callouts/11.png diff --git a/29/images/gfx/icons/callouts/12.png b/latest/images/gfx/icons/callouts/12.png similarity index 100% rename from 29/images/gfx/icons/callouts/12.png rename to latest/images/gfx/icons/callouts/12.png diff --git a/29/images/gfx/icons/callouts/13.png b/latest/images/gfx/icons/callouts/13.png similarity index 100% rename from 29/images/gfx/icons/callouts/13.png rename to latest/images/gfx/icons/callouts/13.png diff --git a/29/images/gfx/icons/callouts/14.png b/latest/images/gfx/icons/callouts/14.png similarity index 100% rename from 29/images/gfx/icons/callouts/14.png rename to latest/images/gfx/icons/callouts/14.png diff --git a/29/images/gfx/icons/callouts/15.png b/latest/images/gfx/icons/callouts/15.png similarity index 100% rename from 29/images/gfx/icons/callouts/15.png rename to latest/images/gfx/icons/callouts/15.png diff --git a/29/images/gfx/icons/callouts/2.png b/latest/images/gfx/icons/callouts/2.png similarity index 100% rename from 29/images/gfx/icons/callouts/2.png rename to latest/images/gfx/icons/callouts/2.png diff --git a/29/images/gfx/icons/callouts/3.png b/latest/images/gfx/icons/callouts/3.png similarity index 100% rename from 29/images/gfx/icons/callouts/3.png rename to latest/images/gfx/icons/callouts/3.png diff --git a/29/images/gfx/icons/callouts/4.png b/latest/images/gfx/icons/callouts/4.png similarity index 100% rename from 29/images/gfx/icons/callouts/4.png rename to latest/images/gfx/icons/callouts/4.png diff --git a/29/images/gfx/icons/callouts/5.png b/latest/images/gfx/icons/callouts/5.png similarity index 100% rename from 29/images/gfx/icons/callouts/5.png rename to latest/images/gfx/icons/callouts/5.png diff --git a/29/images/gfx/icons/callouts/6.png b/latest/images/gfx/icons/callouts/6.png similarity index 100% rename from 29/images/gfx/icons/callouts/6.png rename to latest/images/gfx/icons/callouts/6.png diff --git a/29/images/gfx/icons/callouts/7.png b/latest/images/gfx/icons/callouts/7.png similarity index 100% rename from 29/images/gfx/icons/callouts/7.png rename to latest/images/gfx/icons/callouts/7.png diff --git a/29/images/gfx/icons/callouts/8.png b/latest/images/gfx/icons/callouts/8.png similarity index 100% rename from 29/images/gfx/icons/callouts/8.png rename to latest/images/gfx/icons/callouts/8.png diff --git a/29/images/gfx/icons/callouts/9.png b/latest/images/gfx/icons/callouts/9.png similarity index 100% rename from 29/images/gfx/icons/callouts/9.png rename to latest/images/gfx/icons/callouts/9.png diff --git a/29/images/gfx/icons/caution.png b/latest/images/gfx/icons/caution.png similarity index 100% rename from 29/images/gfx/icons/caution.png rename to latest/images/gfx/icons/caution.png diff --git a/29/images/gfx/icons/example.png b/latest/images/gfx/icons/example.png similarity index 100% rename from 29/images/gfx/icons/example.png rename to latest/images/gfx/icons/example.png diff --git a/29/images/gfx/icons/home.png b/latest/images/gfx/icons/home.png similarity index 100% rename from 29/images/gfx/icons/home.png rename to latest/images/gfx/icons/home.png diff --git a/29/images/gfx/icons/important.png b/latest/images/gfx/icons/important.png similarity index 100% rename from 29/images/gfx/icons/important.png rename to latest/images/gfx/icons/important.png diff --git a/29/images/gfx/icons/next.png b/latest/images/gfx/icons/next.png similarity index 100% rename from 29/images/gfx/icons/next.png rename to latest/images/gfx/icons/next.png diff --git a/29/images/gfx/icons/note.png b/latest/images/gfx/icons/note.png similarity index 100% rename from 29/images/gfx/icons/note.png rename to latest/images/gfx/icons/note.png diff --git a/29/images/gfx/icons/prev.png b/latest/images/gfx/icons/prev.png similarity index 100% rename from 29/images/gfx/icons/prev.png rename to latest/images/gfx/icons/prev.png diff --git a/29/images/gfx/icons/tip.png b/latest/images/gfx/icons/tip.png similarity index 100% rename from 29/images/gfx/icons/tip.png rename to latest/images/gfx/icons/tip.png diff --git a/29/images/gfx/icons/up.png b/latest/images/gfx/icons/up.png similarity index 100% rename from 29/images/gfx/icons/up.png rename to latest/images/gfx/icons/up.png diff --git a/29/images/gfx/icons/warning.png b/latest/images/gfx/icons/warning.png similarity index 100% rename from 29/images/gfx/icons/warning.png rename to latest/images/gfx/icons/warning.png diff --git a/29/images/gfx/new.png b/latest/images/gfx/new.png similarity index 100% rename from 29/images/gfx/new.png rename to latest/images/gfx/new.png diff --git a/29/images/groupmapping.png b/latest/images/groupmapping.png similarity index 100% rename from 29/images/groupmapping.png rename to latest/images/groupmapping.png diff --git a/29/images/includeall.png b/latest/images/includeall.png similarity index 100% rename from 29/images/includeall.png rename to latest/images/includeall.png diff --git a/29/images/jaxrs/2_2_HVGA_Final.png b/latest/images/jaxrs/2_2_HVGA_Final.png similarity index 100% rename from 29/images/jaxrs/2_2_HVGA_Final.png rename to latest/images/jaxrs/2_2_HVGA_Final.png diff --git a/29/images/jaxrs/2_2_HVGA_Initial.png b/latest/images/jaxrs/2_2_HVGA_Initial.png similarity index 100% rename from 29/images/jaxrs/2_2_HVGA_Initial.png rename to latest/images/jaxrs/2_2_HVGA_Initial.png diff --git a/29/images/jaxrs/2_2_HVGA_Next.png b/latest/images/jaxrs/2_2_HVGA_Next.png similarity index 100% rename from 29/images/jaxrs/2_2_HVGA_Next.png rename to latest/images/jaxrs/2_2_HVGA_Next.png diff --git a/29/images/jaxrs/AndroidLibraries.png b/latest/images/jaxrs/AndroidLibraries.png similarity index 100% rename from 29/images/jaxrs/AndroidLibraries.png rename to latest/images/jaxrs/AndroidLibraries.png diff --git a/29/images/jaxrs/CreateAVD_.png b/latest/images/jaxrs/CreateAVD_.png similarity index 100% rename from 29/images/jaxrs/CreateAVD_.png rename to latest/images/jaxrs/CreateAVD_.png diff --git a/29/images/jaxrs/HostSettings.png b/latest/images/jaxrs/HostSettings.png similarity index 100% rename from 29/images/jaxrs/HostSettings.png rename to latest/images/jaxrs/HostSettings.png diff --git a/29/images/jaxrs/ImportExistingMavenProject.png b/latest/images/jaxrs/ImportExistingMavenProject.png similarity index 100% rename from 29/images/jaxrs/ImportExistingMavenProject.png rename to latest/images/jaxrs/ImportExistingMavenProject.png diff --git a/29/images/jaxrs/ListOfBooks.png b/latest/images/jaxrs/ListOfBooks.png similarity index 100% rename from 29/images/jaxrs/ListOfBooks.png rename to latest/images/jaxrs/ListOfBooks.png diff --git a/29/images/jaxrs/NewAndroidProject.png b/latest/images/jaxrs/NewAndroidProject.png similarity index 100% rename from 29/images/jaxrs/NewAndroidProject.png rename to latest/images/jaxrs/NewAndroidProject.png diff --git a/29/images/jaxrs/NoBooks.png b/latest/images/jaxrs/NoBooks.png similarity index 100% rename from 29/images/jaxrs/NoBooks.png rename to latest/images/jaxrs/NoBooks.png diff --git a/29/images/jaxrs/ProjectExplorerA.png b/latest/images/jaxrs/ProjectExplorerA.png similarity index 100% rename from 29/images/jaxrs/ProjectExplorerA.png rename to latest/images/jaxrs/ProjectExplorerA.png diff --git a/29/images/jaxrs/ProjectExplorerB.png b/latest/images/jaxrs/ProjectExplorerB.png similarity index 100% rename from 29/images/jaxrs/ProjectExplorerB.png rename to latest/images/jaxrs/ProjectExplorerB.png diff --git a/29/images/jaxrs/RunConfiguration.png b/latest/images/jaxrs/RunConfiguration.png similarity index 100% rename from 29/images/jaxrs/RunConfiguration.png rename to latest/images/jaxrs/RunConfiguration.png diff --git a/29/images/jsf/05222f3059e387df96ce04d2aea156c82af15096.jpg b/latest/images/jsf/05222f3059e387df96ce04d2aea156c82af15096.jpg similarity index 100% rename from 29/images/jsf/05222f3059e387df96ce04d2aea156c82af15096.jpg rename to latest/images/jsf/05222f3059e387df96ce04d2aea156c82af15096.jpg diff --git a/29/images/jsf/0b3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg b/latest/images/jsf/0b3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg similarity index 100% rename from 29/images/jsf/0b3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg rename to latest/images/jsf/0b3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg diff --git a/29/images/jsf/1096ebbbf2b29e694e300e02a48d0fa4207cb746.jpg b/latest/images/jsf/1096ebbbf2b29e694e300e02a48d0fa4207cb746.jpg similarity index 100% rename from 29/images/jsf/1096ebbbf2b29e694e300e02a48d0fa4207cb746.jpg rename to latest/images/jsf/1096ebbbf2b29e694e300e02a48d0fa4207cb746.jpg diff --git a/29/images/jsf/1231420c938f087030cb3dcd37237b5585beb154.jpg b/latest/images/jsf/1231420c938f087030cb3dcd37237b5585beb154.jpg similarity index 100% rename from 29/images/jsf/1231420c938f087030cb3dcd37237b5585beb154.jpg rename to latest/images/jsf/1231420c938f087030cb3dcd37237b5585beb154.jpg diff --git a/29/images/jsf/2._java.jpg b/latest/images/jsf/2._java.jpg similarity index 100% rename from 29/images/jsf/2._java.jpg rename to latest/images/jsf/2._java.jpg diff --git a/29/images/jsf/2499d43c0dce2cab72ba472c8452a2b57999ac84.jpg b/latest/images/jsf/2499d43c0dce2cab72ba472c8452a2b57999ac84.jpg similarity index 100% rename from 29/images/jsf/2499d43c0dce2cab72ba472c8452a2b57999ac84.jpg rename to latest/images/jsf/2499d43c0dce2cab72ba472c8452a2b57999ac84.jpg diff --git a/29/images/jsf/2f192d02993248c97e2ac42ea8f3105d855e5cdf.jpg b/latest/images/jsf/2f192d02993248c97e2ac42ea8f3105d855e5cdf.jpg similarity index 100% rename from 29/images/jsf/2f192d02993248c97e2ac42ea8f3105d855e5cdf.jpg rename to latest/images/jsf/2f192d02993248c97e2ac42ea8f3105d855e5cdf.jpg diff --git a/29/images/jsf/30bbef45137c7d45ae300ba8d551423d1feefc96.png b/latest/images/jsf/30bbef45137c7d45ae300ba8d551423d1feefc96.png similarity index 100% rename from 29/images/jsf/30bbef45137c7d45ae300ba8d551423d1feefc96.png rename to latest/images/jsf/30bbef45137c7d45ae300ba8d551423d1feefc96.png diff --git a/29/images/jsf/359484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg b/latest/images/jsf/359484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg similarity index 100% rename from 29/images/jsf/359484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg rename to latest/images/jsf/359484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg diff --git a/29/images/jsf/3a3ee36eb581930822c4a66362795345f5d2f9a7.jpg b/latest/images/jsf/3a3ee36eb581930822c4a66362795345f5d2f9a7.jpg similarity index 100% rename from 29/images/jsf/3a3ee36eb581930822c4a66362795345f5d2f9a7.jpg rename to latest/images/jsf/3a3ee36eb581930822c4a66362795345f5d2f9a7.jpg diff --git a/29/images/jsf/52369d67f9117c924213de24dd6642b48e47a436.png b/latest/images/jsf/52369d67f9117c924213de24dd6642b48e47a436.png similarity index 100% rename from 29/images/jsf/52369d67f9117c924213de24dd6642b48e47a436.png rename to latest/images/jsf/52369d67f9117c924213de24dd6642b48e47a436.png diff --git a/29/images/jsf/5ad5d0216d3326e9bc29705042db59f11c3c1e70.png b/latest/images/jsf/5ad5d0216d3326e9bc29705042db59f11c3c1e70.png similarity index 100% rename from 29/images/jsf/5ad5d0216d3326e9bc29705042db59f11c3c1e70.png rename to latest/images/jsf/5ad5d0216d3326e9bc29705042db59f11c3c1e70.png diff --git a/29/images/jsf/5ea6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png b/latest/images/jsf/5ea6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png similarity index 100% rename from 29/images/jsf/5ea6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png rename to latest/images/jsf/5ea6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png diff --git a/29/images/jsf/6802fb7e29283d0e064a7cc4466b918995ba5645.jpg b/latest/images/jsf/6802fb7e29283d0e064a7cc4466b918995ba5645.jpg similarity index 100% rename from 29/images/jsf/6802fb7e29283d0e064a7cc4466b918995ba5645.jpg rename to latest/images/jsf/6802fb7e29283d0e064a7cc4466b918995ba5645.jpg diff --git a/29/images/jsf/6b2296be1bb2d8a81952caef0f025a139a39b381.jpg b/latest/images/jsf/6b2296be1bb2d8a81952caef0f025a139a39b381.jpg similarity index 100% rename from 29/images/jsf/6b2296be1bb2d8a81952caef0f025a139a39b381.jpg rename to latest/images/jsf/6b2296be1bb2d8a81952caef0f025a139a39b381.jpg diff --git a/29/images/jsf/7103da6b6323e515a03a04cafe111aa7c6b3169d.jpg b/latest/images/jsf/7103da6b6323e515a03a04cafe111aa7c6b3169d.jpg similarity index 100% rename from 29/images/jsf/7103da6b6323e515a03a04cafe111aa7c6b3169d.jpg rename to latest/images/jsf/7103da6b6323e515a03a04cafe111aa7c6b3169d.jpg diff --git a/29/images/jsf/8108c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg b/latest/images/jsf/8108c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg similarity index 100% rename from 29/images/jsf/8108c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg rename to latest/images/jsf/8108c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg diff --git a/29/images/jsf/8327bbe0e83cb7170dd84767631c98956e91c42c.jpg b/latest/images/jsf/8327bbe0e83cb7170dd84767631c98956e91c42c.jpg similarity index 100% rename from 29/images/jsf/8327bbe0e83cb7170dd84767631c98956e91c42c.jpg rename to latest/images/jsf/8327bbe0e83cb7170dd84767631c98956e91c42c.jpg diff --git a/29/images/jsf/8b8d0051f4f15033f17cb859c65f2d8481914678.jpg b/latest/images/jsf/8b8d0051f4f15033f17cb859c65f2d8481914678.jpg similarity index 100% rename from 29/images/jsf/8b8d0051f4f15033f17cb859c65f2d8481914678.jpg rename to latest/images/jsf/8b8d0051f4f15033f17cb859c65f2d8481914678.jpg diff --git a/29/images/jsf/91e40cd0b1545cff4622857d6dc9959f96faf056.jpg b/latest/images/jsf/91e40cd0b1545cff4622857d6dc9959f96faf056.jpg similarity index 100% rename from 29/images/jsf/91e40cd0b1545cff4622857d6dc9959f96faf056.jpg rename to latest/images/jsf/91e40cd0b1545cff4622857d6dc9959f96faf056.jpg diff --git a/29/images/jsf/97d781c6be9db755aef80a110f1d9b29590610d6.jpg b/latest/images/jsf/97d781c6be9db755aef80a110f1d9b29590610d6.jpg similarity index 100% rename from 29/images/jsf/97d781c6be9db755aef80a110f1d9b29590610d6.jpg rename to latest/images/jsf/97d781c6be9db755aef80a110f1d9b29590610d6.jpg diff --git a/29/images/jsf/9988c572bad281146f405e9287f645a3da201885.jpg b/latest/images/jsf/9988c572bad281146f405e9287f645a3da201885.jpg similarity index 100% rename from 29/images/jsf/9988c572bad281146f405e9287f645a3da201885.jpg rename to latest/images/jsf/9988c572bad281146f405e9287f645a3da201885.jpg diff --git a/29/images/jsf/a96b7d32e04aa67956bd00a187f09b75a5af241e.jpg b/latest/images/jsf/a96b7d32e04aa67956bd00a187f09b75a5af241e.jpg similarity index 100% rename from 29/images/jsf/a96b7d32e04aa67956bd00a187f09b75a5af241e.jpg rename to latest/images/jsf/a96b7d32e04aa67956bd00a187f09b75a5af241e.jpg diff --git a/29/images/jsf/b8323caf6980c40c3d635db5e308b03847618d06.jpg b/latest/images/jsf/b8323caf6980c40c3d635db5e308b03847618d06.jpg similarity index 100% rename from 29/images/jsf/b8323caf6980c40c3d635db5e308b03847618d06.jpg rename to latest/images/jsf/b8323caf6980c40c3d635db5e308b03847618d06.jpg diff --git a/29/images/jsf/d68a0cdbc8c90db3db8af998f34616f73c7fe809.jpg b/latest/images/jsf/d68a0cdbc8c90db3db8af998f34616f73c7fe809.jpg similarity index 100% rename from 29/images/jsf/d68a0cdbc8c90db3db8af998f34616f73c7fe809.jpg rename to latest/images/jsf/d68a0cdbc8c90db3db8af998f34616f73c7fe809.jpg diff --git a/29/images/jsf/d7e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg b/latest/images/jsf/d7e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg similarity index 100% rename from 29/images/jsf/d7e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg rename to latest/images/jsf/d7e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg diff --git a/29/images/jsf/dc0550785aae11f9d3eb439fdc0c51069affd25d.jpg b/latest/images/jsf/dc0550785aae11f9d3eb439fdc0c51069affd25d.jpg similarity index 100% rename from 29/images/jsf/dc0550785aae11f9d3eb439fdc0c51069affd25d.jpg rename to latest/images/jsf/dc0550785aae11f9d3eb439fdc0c51069affd25d.jpg diff --git a/29/images/jsf/e6947b84a56a698ca1392a440081bddfb5cae284.jpg b/latest/images/jsf/e6947b84a56a698ca1392a440081bddfb5cae284.jpg similarity index 100% rename from 29/images/jsf/e6947b84a56a698ca1392a440081bddfb5cae284.jpg rename to latest/images/jsf/e6947b84a56a698ca1392a440081bddfb5cae284.jpg diff --git a/29/images/jsf/eaac5cb1a836809ab29513346b527fe051b7c7ac.png b/latest/images/jsf/eaac5cb1a836809ab29513346b527fe051b7c7ac.png similarity index 100% rename from 29/images/jsf/eaac5cb1a836809ab29513346b527fe051b7c7ac.png rename to latest/images/jsf/eaac5cb1a836809ab29513346b527fe051b7c7ac.png diff --git a/29/images/jsf/f7b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg b/latest/images/jsf/f7b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg similarity index 100% rename from 29/images/jsf/f7b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg rename to latest/images/jsf/f7b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg diff --git a/29/images/no-users.png b/latest/images/no-users.png similarity index 100% rename from 29/images/no-users.png rename to latest/images/no-users.png diff --git a/29/images/runasrole.png b/latest/images/runasrole.png similarity index 100% rename from 29/images/runasrole.png rename to latest/images/runasrole.png diff --git a/29/images/scopedroles.png b/latest/images/scopedroles.png similarity index 100% rename from 29/images/scopedroles.png rename to latest/images/scopedroles.png diff --git a/29/images/splash_wildflylogo_small.png b/latest/images/splash_wildflylogo_small.png similarity index 100% rename from 29/images/splash_wildflylogo_small.png rename to latest/images/splash_wildflylogo_small.png diff --git a/29/images/update-app-user-interactive.png b/latest/images/update-app-user-interactive.png similarity index 100% rename from 29/images/update-app-user-interactive.png rename to latest/images/update-app-user-interactive.png diff --git a/29/images/update-mgmt-user-interactive.png b/latest/images/update-mgmt-user-interactive.png similarity index 100% rename from 29/images/update-mgmt-user-interactive.png rename to latest/images/update-mgmt-user-interactive.png diff --git a/29/images/usermapping.png b/latest/images/usermapping.png similarity index 100% rename from 29/images/usermapping.png rename to latest/images/usermapping.png diff --git a/29/images/wildfly.png b/latest/images/wildfly.png similarity index 100% rename from 29/images/wildfly.png rename to latest/images/wildfly.png diff --git a/latest/index.html b/latest/index.html new file mode 100644 index 000000000..4ee30c1e3 --- /dev/null +++ b/latest/index.html @@ -0,0 +1,696 @@ + + + + + + + +WildFly Documentation + + + + + + +
+
+
+
+

WildFly

+
+
+

Welcome to the WildFly documentation. The documentation for WildFly is +split into multiple categories:

+
+
+
    +
  • +

    Installation Guides for those wanting to understand the flexibility +that WildFly offers when it comes to server installation and application deployment.

    +
  • +
  • +

    Administrator Guides for those wanting to understand how to install +and configure the server.

    +
  • +
  • +

    Developer Guides for those wanting to understand how to develop +applications for the server.

    +
  • +
  • +

    Migration Guide for information related to migrating away from removed features.

    +
  • +
  • +

    Model Reference for those wanting information about all +of configuration options available via the WildFly management model.

    +
  • +
  • +

    Security Guide for those wanting to understand how to secure the WildFly server and applications.

    +
  • +
  • +

    Client Guide for those wanting to understand configuration of WildFly clients.

    +
  • +
  • +

    Quickstarts for those wanting to jump into code and start using WildFly.

    +
  • +
+
+
+
+
+

Installation Guides

+
+
+
    +
  • +

    The WildFly and WildFly Preview document introduces the different +appserver variants produced by the WildFly project: the standard WildFly variant and the early-look tech preview +WildFly Preview variant.

    +
  • +
  • +

    The Installation Guide helps you identify +the kind of WildFly installation that best fits your application’s deployment needs: +a WildFly zip installation, a WildFly server provisioned with Galleon or a WildFly bootable JAR.

    +
  • +
  • +

    The Bootable JAR Guide shows you how to package your application and the WildFly server +into a bootable JAR.

    +
  • +
  • +

    The Galleon Provisioning Guide shows you how to +provision a customized WildFly server using Galleon.

    +
  • +
  • +

    The Getting Started with WildFly on OpenShift Guide shows you how to use WildFly on OpenShift.

    +
  • +
+
+
+
+
+

Administrator Guides

+
+
+
    +
  • +

    The Getting Started Guide shows you +how to install and start the server, how to configure logging, how to +deploy an application, how to deploy a datasource, and how to get +started using the command line interface and web management interface.

    +
  • +
  • +

    The Admin Guide provides detailed information +on using the CLI and web management interface, shows you how to administer a WildFly managed +domain, and shows you how to configure key subsystems.

    +
  • +
  • +

    The High Availability Guide shows +you how to create a cluster, how to configure the web container and Jakarta Enterprise Beans +container for clustering and how to configure load balancing +and failover.

    +
  • +
+
+
+
+
+

Developer Guides

+
+
+
    +
  • +

    The Getting +Started Developing Applications Guide shows you how to build Jakarta EE +applications and deploy them to WildFly. The guide starts by showing you +the simplest helloworld application using just Servlet and Jakarta Contexts and Dependency Injection, and +then adds in Jakarta Faces, persistence and transactions, Jakarta Enterprise Beans, Bean Validation, +RESTful web services and more. Finally, you’ll get the opportunity to create +your own skeleton project. Each tutorial is accompanied by a quickstart, +which contains the source code, deployment descriptors and a Maven based +build.

    +
  • +
  • +

    The Developer Guide ( in progress) takes +you through every deployment descriptor and every annotation offered by +WildFly.

    +
  • +
  • +

    The Extending WildFly guide walks you +through creating a new WildFly subsystem extension, in order to add more +functionality to WildFly, and shows how to test it before plugging it +into WildFly.

    +
  • +
  • +

    The WildFly Testsuite guide walks you through testing WildFly.

    +
  • +
  • +

    The Hacking on WildFly guide walks you through contributing to WildFly.

    +
  • +
+
+
+
+
+

Migration Guide

+
+
+
    +
  • +

    The Migration Guide describes alternative options for +features which have been removed from WildFly.

    +
  • +
+
+
+
+
+

Model Reference

+
+
+
    +
  • +

    The WildFly model reference provides information about all standalone server and managed domain +configuration options, using information generated directly from the WildFly management model.

    +
  • +
+
+
+
+
+

Security Guide

+
+
+ +
+
+
+
+

Client Guide

+
+
+ +
+
+
+
+

Quickstarts

+
+
+
    +
  • +

    The WildFly Quickstarts describe how to use the WildFly examples, which introduce a particular technology or feature of the application server.

    +
  • +
+
+
+
+
+

More Resources

+ +
+
+ + + \ No newline at end of file diff --git a/latest/wildscribe/core-service/capability-registry/index.html b/latest/wildscribe/core-service/capability-registry/index.html new file mode 100644 index 000000000..d120e90fb --- /dev/null +++ b/latest/wildscribe/core-service/capability-registry/index.html @@ -0,0 +1,37 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Capability registry


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/file-handler/index.html b/latest/wildscribe/core-service/management/access/audit/file-handler/index.html new file mode 100644 index 000000000..bc3d9407b --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/file-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

A file handler for use with the management audit logging service.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/in-memory-handler/index.html b/latest/wildscribe/core-service/management/access/audit/in-memory-handler/index.html new file mode 100644 index 000000000..87df1b8ce --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/in-memory-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A in-memory handler for use with the management audit logging service.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/index.html b/latest/wildscribe/core-service/management/access/audit/index.html new file mode 100644 index 000000000..810fb1be8 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

The management audit logging top-level resource.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/json-formatter/index.html b/latest/wildscribe/core-service/management/access/audit/json-formatter/index.html new file mode 100644 index 000000000..81a1c6bce --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/json-formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

A json formatter for audit log messages.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/logger/audit-log/handler/index.html b/latest/wildscribe/core-service/management/access/audit/logger/audit-log/handler/index.html new file mode 100644 index 000000000..2d0d1b205 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/logger/audit-log/handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

A reference to a file or syslog audit log handler. The name of the handler is denoted by the value of the address.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/logger/audit-log/index.html b/latest/wildscribe/core-service/management/access/audit/logger/audit-log/index.html new file mode 100644 index 000000000..7da3f4044 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/logger/audit-log/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

The management audit logging top-level resource.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/periodic-rotating-file-handler/index.html b/latest/wildscribe/core-service/management/access/audit/periodic-rotating-file-handler/index.html new file mode 100644 index 000000000..6d18e08ae --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/periodic-rotating-file-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A management audit log handler which writes to a file, rotating the log after a time period derived from the given suffix string, which should be in a format understood by java.text.SimpleDateFormat.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/size-rotating-file-handler/index.html b/latest/wildscribe/core-service/management/access/audit/size-rotating-file-handler/index.html new file mode 100644 index 000000000..fe96dc4a9 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/size-rotating-file-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A management audit log handler which writes to a file, rotating the log after the size of the file grows beyond a certain point and keeping a fixed number of backups.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/syslog-handler/index.html b/latest/wildscribe/core-service/management/access/audit/syslog-handler/index.html new file mode 100644 index 000000000..b76d8ade0 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/syslog-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

A syslog handler for use with the management audit logging service.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tcp/index.html b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tcp/index.html new file mode 100644 index 000000000..9ed6518fb --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tcp/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

Configuration to append to syslog over tcp/ip.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/client-certificate-store/index.html b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/client-certificate-store/index.html new file mode 100644 index 000000000..fac349b50 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/client-certificate-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration for the keystore containing the client certificate if the syslog server requires authentication.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/truststore/index.html b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/truststore/index.html new file mode 100644 index 000000000..488478e0b --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/truststore/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration for the truststore for the server certificate, if not signed by an authority.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/index.html b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/index.html new file mode 100644 index 000000000..071017250 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

Configuration to append to syslog over tls over tcp/ip.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/udp/index.html b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/udp/index.html new file mode 100644 index 000000000..53b48cc68 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/audit/syslog-handler/protocol/udp/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The management audit log configuration is deprecated and may be removed or moved in future versions.

Configuration to append to syslog over udp/ip.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/index.html b/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/index.html new file mode 100644 index 000000000..6f5f43b55 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of the application classification constraints.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/applies-to/index.html b/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/applies-to/index.html new file mode 100644 index 000000000..abfe7e883 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/applies-to/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the resources, attributes and operations to which an access control constraint applies.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/index.html b/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/index.html new file mode 100644 index 000000000..5c09a956b --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of an application classification constraint.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/index.html b/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/index.html new file mode 100644 index 000000000..06ead99eb --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The application classification constraints by type. Type is either 'core' or the name of a subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/index.html b/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/index.html new file mode 100644 index 000000000..f9ebda911 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The sensitivity classification constraints.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/applies-to/index.html b/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/applies-to/index.html new file mode 100644 index 000000000..7e6629345 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/applies-to/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the resources, attributes and operations to which an access control constraint applies.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/index.html b/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/index.html new file mode 100644 index 000000000..8b12ff632 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of a sensitivity constraint.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/index.html b/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/index.html new file mode 100644 index 000000000..6d14d70ae --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The sensitivity classifications by type. Type is either 'core' or the name of a subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/constraint/vault-expression/index.html b/latest/wildscribe/core-service/management/access/authorization/constraint/vault-expression/index.html new file mode 100644 index 000000000..c2fbd69fd --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/constraint/vault-expression/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of whether vault expressions should be considered sensitive.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/index.html b/latest/wildscribe/core-service/management/access/authorization/index.html new file mode 100644 index 000000000..ac790e5aa --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The access control definitions defining the access management restrictions.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/role-mapping/exclude/index.html b/latest/wildscribe/core-service/management/access/authorization/role-mapping/exclude/index.html new file mode 100644 index 000000000..a35c84a6d --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/role-mapping/exclude/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual principal used within a role mapping.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/role-mapping/include/index.html b/latest/wildscribe/core-service/management/access/authorization/role-mapping/include/index.html new file mode 100644 index 000000000..9b47ca3ed --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/role-mapping/include/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual principal used within a role mapping.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/authorization/role-mapping/index.html b/latest/wildscribe/core-service/management/access/authorization/role-mapping/index.html new file mode 100644 index 000000000..62dd5e554 --- /dev/null +++ b/latest/wildscribe/core-service/management/access/authorization/role-mapping/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A mapping of users and groups to a specific role.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/access/identity/index.html b/latest/wildscribe/core-service/management/access/identity/index.html new file mode 100644 index 000000000..983a5d8db --- /dev/null +++ b/latest/wildscribe/core-service/management/access/identity/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Identity definition for management actions.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/index.html b/latest/wildscribe/core-service/management/index.html new file mode 100644 index 000000000..b62468f50 --- /dev/null +++ b/latest/wildscribe/core-service/management/index.html @@ -0,0 +1,88 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management services used to control a server or a host's host controller.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/ldap-connection/index.html b/latest/wildscribe/core-service/management/ldap-connection/index.html new file mode 100644 index 000000000..4eb49064c --- /dev/null +++ b/latest/wildscribe/core-service/management/ldap-connection/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/ldap-connection/property/index.html b/latest/wildscribe/core-service/management/ldap-connection/property/index.html new file mode 100644 index 000000000..feec56c55 --- /dev/null +++ b/latest/wildscribe/core-service/management/ldap-connection/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/ldap-connection/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/management-interface/http-interface/index.html b/latest/wildscribe/core-service/management/management-interface/http-interface/index.html new file mode 100644 index 000000000..ad9221e2b --- /dev/null +++ b/latest/wildscribe/core-service/management/management-interface/http-interface/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The http-interface configuration is deprecated and may be removed or moved in future versions.

Configuration of the server's HTTP management interface


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/management-interface/native-interface/index.html b/latest/wildscribe/core-service/management/management-interface/native-interface/index.html new file mode 100644 index 000000000..c3dbbfc63 --- /dev/null +++ b/latest/wildscribe/core-service/management/management-interface/native-interface/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The native-interface configuration is deprecated and may be removed or moved in future versions.

Configuration of the server's native management interface


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/management-interface/native-remoting-interface/index.html b/latest/wildscribe/core-service/management/management-interface/native-remoting-interface/index.html new file mode 100644 index 000000000..4401243fe --- /dev/null +++ b/latest/wildscribe/core-service/management/management-interface/native-remoting-interface/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 1.7.0
The native-remoting-interface configuration is deprecated and may be removed or moved in future versions.

Configuration of the server's native management interface using a connector from the remoting subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/jaas/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/jaas/index.html new file mode 100644 index 000000000..d4e8f6401 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/jaas/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/jaas/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html new file mode 100644 index 000000000..1d313a5ec --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/kerberos/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html new file mode 100644 index 000000000..73a97a268 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html new file mode 100644 index 000000000..e0999d319 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/ldap/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/ldap/index.html new file mode 100644 index 000000000..6f7d6b49a --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/ldap/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/local/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/local/index.html new file mode 100644 index 000000000..1dded6e4b --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/local/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/local/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html new file mode 100644 index 000000000..636315784 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html new file mode 100644 index 000000000..ccf854e96 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/properties/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/properties/index.html new file mode 100644 index 000000000..bb5e4911c --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/properties/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/truststore/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/truststore/index.html new file mode 100644 index 000000000..8645f26ec --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/truststore/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/truststore/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/users/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/users/index.html new file mode 100644 index 000000000..0e3e8fd85 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/users/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authentication/users/user/index.html b/latest/wildscribe/core-service/management/security-realm/authentication/users/user/index.html new file mode 100644 index 000000000..272195ec9 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authentication/users/user/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authentication/users/user/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html new file mode 100644 index 000000000..7fc793d5b --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html new file mode 100644 index 000000000..f93222673 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html new file mode 100644 index 000000000..136d0376d --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/group-to-principal/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html new file mode 100644 index 000000000..e8cf43aad --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html new file mode 100644 index 000000000..15b40896e --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html new file mode 100644 index 000000000..16d9d657a --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/group-search/principal-to-group/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/index.html new file mode 100644 index 000000000..b27613910 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..2b378e2d4 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..0214c61e4 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html new file mode 100644 index 000000000..107ed6791 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/advanced-filter/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html new file mode 100644 index 000000000..be16bef4c --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html new file mode 100644 index 000000000..d07d5690f --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html new file mode 100644 index 000000000..7c795f655 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-filter/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html new file mode 100644 index 000000000..eae5454f6 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-access-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html new file mode 100644 index 000000000..6dd52324c --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/cache/by-search-time/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html new file mode 100644 index 000000000..f1340bade --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/ldap/username-to-dn/username-is-dn/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html new file mode 100644 index 000000000..05e927850 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html new file mode 100644 index 000000000..99b013b15 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/plug-in/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/authorization/properties/index.html b/latest/wildscribe/core-service/management/security-realm/authorization/properties/index.html new file mode 100644 index 000000000..fb0c38bfd --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/authorization/properties/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/authorization/properties/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/index.html b/latest/wildscribe/core-service/management/security-realm/index.html new file mode 100644 index 000000000..022b8aeae --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/plug-in/index.html b/latest/wildscribe/core-service/management/security-realm/plug-in/index.html new file mode 100644 index 000000000..b224b9cfe --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/plug-in/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/plug-in/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html b/latest/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html new file mode 100644 index 000000000..f336b07c9 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html b/latest/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html new file mode 100644 index 000000000..9b2474387 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/kerberos/keytab/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/server-identity/secret/index.html b/latest/wildscribe/core-service/management/security-realm/server-identity/secret/index.html new file mode 100644 index 000000000..01995b663 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/server-identity/secret/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/secret/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html b/latest/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html new file mode 100644 index 000000000..2023147d9 --- /dev/null +++ b/latest/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/management/security-realm/server-identity/ssl/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/management/service/configuration-changes/index.html b/latest/wildscribe/core-service/management/service/configuration-changes/index.html new file mode 100644 index 000000000..a0a2143b5 --- /dev/null +++ b/latest/wildscribe/core-service/management/service/configuration-changes/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Service to store and list configuration changes.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/service/management-operations/active-operation/index.html b/latest/wildscribe/core-service/management/service/management-operations/active-operation/index.html new file mode 100644 index 000000000..a9ee30204 --- /dev/null +++ b/latest/wildscribe/core-service/management/service/management-operations/active-operation/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A currently executing operation.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/management/service/management-operations/index.html b/latest/wildscribe/core-service/management/service/management-operations/index.html new file mode 100644 index 000000000..bcf4cb4b4 --- /dev/null +++ b/latest/wildscribe/core-service/management/service/management-operations/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Execution of management operations.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/module-loading/index.html b/latest/wildscribe/core-service/module-loading/index.html new file mode 100644 index 000000000..5d9986bbd --- /dev/null +++ b/latest/wildscribe/core-service/module-loading/index.html @@ -0,0 +1,132 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The modular classloading system.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/patching/addon/index.html b/latest/wildscribe/core-service/patching/addon/index.html new file mode 100644 index 000000000..ea6637bce --- /dev/null +++ b/latest/wildscribe/core-service/patching/addon/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/addon/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/patching/index.html b/latest/wildscribe/core-service/patching/index.html new file mode 100644 index 000000000..60a949532 --- /dev/null +++ b/latest/wildscribe/core-service/patching/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/patching/layer/index.html b/latest/wildscribe/core-service/patching/layer/index.html new file mode 100644 index 000000000..70d136817 --- /dev/null +++ b/latest/wildscribe/core-service/patching/layer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/layer/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/patching/patch-stream/addon/index.html b/latest/wildscribe/core-service/patching/patch-stream/addon/index.html new file mode 100644 index 000000000..93621514f --- /dev/null +++ b/latest/wildscribe/core-service/patching/patch-stream/addon/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/patch-stream/addon/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/patching/patch-stream/index.html b/latest/wildscribe/core-service/patching/patch-stream/index.html new file mode 100644 index 000000000..c034ab458 --- /dev/null +++ b/latest/wildscribe/core-service/patching/patch-stream/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/patch-stream/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/patching/patch-stream/layer/index.html b/latest/wildscribe/core-service/patching/patch-stream/layer/index.html new file mode 100644 index 000000000..21ac7549a --- /dev/null +++ b/latest/wildscribe/core-service/patching/patch-stream/layer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /28/wildscribe/core-service/patching/patch-stream/layer/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/index.html b/latest/wildscribe/core-service/platform-mbean/index.html new file mode 100644 index 000000000..d7082f828 --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Provides the management interface for monitoring and management of the Java virtual machine as well as the operating system on which the Java virtual machine is running. Exposes the JDK-provided JMX MBeans in the java.lang and java.nio JMX domains.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/buffer-pool/index.html b/latest/wildscribe/core-service/platform-mbean/type/buffer-pool/index.html new file mode 100644 index 000000000..fae510b08 --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/buffer-pool/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a buffer pool, for example a pool of direct or mapped buffers.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/buffer-pool/name/index.html b/latest/wildscribe/core-service/platform-mbean/type/buffer-pool/name/index.html new file mode 100644 index 000000000..c230dc5b0 --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/buffer-pool/name/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a buffer pool, for example a pool of direct or mapped buffers.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/class-loading/index.html b/latest/wildscribe/core-service/platform-mbean/type/class-loading/index.html new file mode 100644 index 000000000..70bb67621 --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/class-loading/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the class loading system of the Java virtual machine.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/compilation/index.html b/latest/wildscribe/core-service/platform-mbean/type/compilation/index.html new file mode 100644 index 000000000..15a8de7e3 --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/compilation/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the compilation system of the Java virtual machine


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/garbage-collector/index.html b/latest/wildscribe/core-service/platform-mbean/type/garbage-collector/index.html new file mode 100644 index 000000000..597cc937c --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/garbage-collector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Parent resource for the resources providing the management interface for the garbage collection of the Java virtual machine.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/garbage-collector/name/index.html b/latest/wildscribe/core-service/platform-mbean/type/garbage-collector/name/index.html new file mode 100644 index 000000000..fa5a7789d --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/garbage-collector/name/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for one of the garbage collectors in the Java virtual machine.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/memory-manager/index.html b/latest/wildscribe/core-service/platform-mbean/type/memory-manager/index.html new file mode 100644 index 000000000..0c84b7a78 --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/memory-manager/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a memory manager. A memory manager manages one or more memory pools of the Java virtual machine.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/memory-manager/name/index.html b/latest/wildscribe/core-service/platform-mbean/type/memory-manager/name/index.html new file mode 100644 index 000000000..849372453 --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/memory-manager/name/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a memory manager. A memory manager manages one or more memory pools of the Java virtual machine.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/memory-pool/index.html b/latest/wildscribe/core-service/platform-mbean/type/memory-pool/index.html new file mode 100644 index 000000000..158f312ad --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/memory-pool/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a memory pool. A memory pool represents the memory resource managed by the Java virtual machine and is managed by one or more memory managers.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/memory-pool/name/index.html b/latest/wildscribe/core-service/platform-mbean/type/memory-pool/name/index.html new file mode 100644 index 000000000..3a371bacb --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/memory-pool/name/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for a memory pool. A memory pool represents the memory resource managed by the Java virtual machine and is managed by one or more memory managers.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/memory/index.html b/latest/wildscribe/core-service/platform-mbean/type/memory/index.html new file mode 100644 index 000000000..5b900e186 --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/memory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the memory system of the Java virtual machine.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/operating-system/index.html b/latest/wildscribe/core-service/platform-mbean/type/operating-system/index.html new file mode 100644 index 000000000..7c293704e --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/operating-system/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the operating system on which the Java virtual machine is running.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/runtime/index.html b/latest/wildscribe/core-service/platform-mbean/type/runtime/index.html new file mode 100644 index 000000000..c7a134d2b --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/runtime/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the runtime system of the Java virtual machine.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/platform-mbean/type/threading/index.html b/latest/wildscribe/core-service/platform-mbean/type/threading/index.html new file mode 100644 index 000000000..90d63d266 --- /dev/null +++ b/latest/wildscribe/core-service/platform-mbean/type/threading/index.html @@ -0,0 +1,808 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management interface for the thread system of the Java virtual machine.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/server-environment/index.html b/latest/wildscribe/core-service/server-environment/index.html new file mode 100644 index 000000000..005b94a86 --- /dev/null +++ b/latest/wildscribe/core-service/server-environment/index.html @@ -0,0 +1,210 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The server environment.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/service-container/index.html b/latest/wildscribe/core-service/service-container/index.html new file mode 100644 index 000000000..259a6b53b --- /dev/null +++ b/latest/wildscribe/core-service/service-container/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The central container that manages all services in a running standalone server or in a host controller in a management domain.


\ No newline at end of file diff --git a/latest/wildscribe/core-service/vault/index.html b/latest/wildscribe/core-service/vault/index.html new file mode 100644 index 000000000..e80276b00 --- /dev/null +++ b/latest/wildscribe/core-service/vault/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/core-service/vault/index.html

+ + \ No newline at end of file diff --git a/29/wildscribe/css/bootstrap-grid.css.map b/latest/wildscribe/css/bootstrap-grid.css.map similarity index 100% rename from 29/wildscribe/css/bootstrap-grid.css.map rename to latest/wildscribe/css/bootstrap-grid.css.map diff --git a/29/wildscribe/css/bootstrap-grid.min.css b/latest/wildscribe/css/bootstrap-grid.min.css similarity index 100% rename from 29/wildscribe/css/bootstrap-grid.min.css rename to latest/wildscribe/css/bootstrap-grid.min.css diff --git a/29/wildscribe/css/bootstrap-reboot.min.css b/latest/wildscribe/css/bootstrap-reboot.min.css similarity index 100% rename from 29/wildscribe/css/bootstrap-reboot.min.css rename to latest/wildscribe/css/bootstrap-reboot.min.css diff --git a/29/wildscribe/css/bootstrap-reboot.min.css.map b/latest/wildscribe/css/bootstrap-reboot.min.css.map similarity index 100% rename from 29/wildscribe/css/bootstrap-reboot.min.css.map rename to latest/wildscribe/css/bootstrap-reboot.min.css.map diff --git a/29/wildscribe/css/bootstrap.min.css b/latest/wildscribe/css/bootstrap.min.css similarity index 100% rename from 29/wildscribe/css/bootstrap.min.css rename to latest/wildscribe/css/bootstrap.min.css diff --git a/29/wildscribe/css/bootstrap.min.css.map b/latest/wildscribe/css/bootstrap.min.css.map similarity index 100% rename from 29/wildscribe/css/bootstrap.min.css.map rename to latest/wildscribe/css/bootstrap.min.css.map diff --git a/29/wildscribe/css/main.css b/latest/wildscribe/css/main.css similarity index 100% rename from 29/wildscribe/css/main.css rename to latest/wildscribe/css/main.css diff --git a/latest/wildscribe/deployment-overlay/content/index.html b/latest/wildscribe/deployment-overlay/content/index.html new file mode 100644 index 000000000..1aed8c5aa --- /dev/null +++ b/latest/wildscribe/deployment-overlay/content/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The content of the deployment overlay


\ No newline at end of file diff --git a/latest/wildscribe/deployment-overlay/deployment/index.html b/latest/wildscribe/deployment-overlay/deployment/index.html new file mode 100644 index 000000000..2c16ce1d2 --- /dev/null +++ b/latest/wildscribe/deployment-overlay/deployment/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The deployment that this deployment overlay is linked to


\ No newline at end of file diff --git a/latest/wildscribe/deployment-overlay/index.html b/latest/wildscribe/deployment-overlay/index.html new file mode 100644 index 000000000..d9ac65db0 --- /dev/null +++ b/latest/wildscribe/deployment-overlay/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A deployment overlay


\ No newline at end of file diff --git a/latest/wildscribe/deployment/index.html b/latest/wildscribe/deployment/index.html new file mode 100644 index 000000000..c8c87aaae --- /dev/null +++ b/latest/wildscribe/deployment/index.html @@ -0,0 +1,26 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A deployment represents anything that can be deployed (e.g. an application such as Jakarta Enterprise Beans-JAR, WAR, EAR, any kind of standard archive such as RAR or JBoss-specific deployment) into a server.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/index.html b/latest/wildscribe/deployment/subdeployment/index.html new file mode 100644 index 000000000..7e1595b82 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A deployment represents anything that can be deployed (e.g. an application such as Jakarta Enterprise Beans-JAR, WAR, EAR, any kind of standard archive such as RAR or JBoss-specific deployment) into a server.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/index.html new file mode 100644 index 000000000..999ec6597 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the batch subsystem for the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/execution/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/execution/index.html new file mode 100644 index 000000000..413cecd89 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/execution/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The execution information for the job with the value of the path being the execution id.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/index.html new file mode 100644 index 000000000..09cc65e57 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about a specific batch job.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/connection-properties/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/connection-properties/index.html new file mode 100644 index 000000000..77b383da8 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/connection-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The connection-properties element allows you to pass in arbitrary connection properties to the Driver.connect(url, props) method


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/index.html new file mode 100644 index 000000000..c2e1c0fc1 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC data-source configuration


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/datasources/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/index.html new file mode 100644 index 000000000..c0bb2b7c1 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The data-sources subsystem, used to declare JDBC data-sources


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/index.html new file mode 100644 index 000000000..f42b152ef --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC XA data-source configuration


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html new file mode 100644 index 000000000..7060abd5c --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

List of xa-datasource-property


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/index.html new file mode 100644 index 000000000..683d77bfd --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by Jakarta Enterprise Beans components included in this deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/index.html new file mode 100644 index 000000000..a0a4d4baa --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Message driven bean component included in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html new file mode 100644 index 000000000..cdc03e039 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..ec83d23ea --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/index.html new file mode 100644 index 000000000..9d57b548f --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Singleton bean component included in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html new file mode 100644 index 000000000..d12b97469 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..1379d9e76 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/index.html new file mode 100644 index 000000000..ab6345eb9 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Stateful session bean component included in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..e10bde101 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..db3c92e24 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/index.html new file mode 100644 index 000000000..ebbf0c897 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Stateless session bean component included in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..16e1df1cc --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..6a67426f5 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/jaxrs/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/jaxrs/index.html new file mode 100644 index 000000000..b422de235 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/jaxrs/index.html @@ -0,0 +1,37 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta RESTful Web Services subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/jaxrs/rest-resource/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/jaxrs/rest-resource/index.html new file mode 100644 index 000000000..93e56428e --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/jaxrs/rest-resource/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta RESTful Web Services deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/jpa/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/jpa/index.html new file mode 100644 index 000000000..3dc12ab46 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/jpa/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta Persistence subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/error-manager/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/error-manager/index.html new file mode 100644 index 000000000..119004c14 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/error-manager/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured error managers being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/filter/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/filter/index.html new file mode 100644 index 000000000..6af901110 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/filter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured filters being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/formatter/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/formatter/index.html new file mode 100644 index 000000000..de58040a6 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured formatters being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/handler/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/handler/index.html new file mode 100644 index 000000000..9e73f4121 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured handlers being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/index.html new file mode 100644 index 000000000..307d3c844 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the logging configuration for this deployment. Note that this may not be accurate if the deployment is using some other means of configuring a log manager such as logback. The resolved configuration is what loggers not covered by the deployments specific log manager would use.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/logger/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/logger/index.html new file mode 100644 index 000000000..2b505ee97 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/logger/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured loggers being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/pojo/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/pojo/index.html new file mode 100644 index 000000000..6f17dae04 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/logging/configuration/pojo/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured POJO's being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/logging/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/logging/index.html new file mode 100644 index 000000000..55e4caed0 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/logging/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the logging configuration for this deployment. Note that this may not be accurate if the deployment is using some other means of configuring a log manager such as logback. The resolved configuration is what loggers not covered by the deployments specific log manager would use.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/connection-factory/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/connection-factory/index.html new file mode 100644 index 000000000..cf2fe725b --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-queue/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-queue/index.html new file mode 100644 index 000000000..4b75b1665 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-queue/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue to a remote broker.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-topic/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-topic/index.html new file mode 100644 index 000000000..ed7a4abd1 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-topic/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic to a remote broker.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/index.html new file mode 100644 index 000000000..3fb034b60 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by messaging resources included in this deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/pooled-connection-factory/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/pooled-connection-factory/index.html new file mode 100644 index 000000000..7edffd093 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/pooled-connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/index.html new file mode 100644 index 000000000..a132c17bd --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An ActiveMQ server instance.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-queue/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-queue/index.html new file mode 100644 index 000000000..20baf634a --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-queue/index.html @@ -0,0 +1,159 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-topic/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-topic/index.html new file mode 100644 index 000000000..93bdb31b9 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-topic/index.html @@ -0,0 +1,377 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html new file mode 100644 index 000000000..b9ee3c36a --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html new file mode 100644 index 000000000..f657ffaf9 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/deployment/subdeployment/subsystem/microprofile-opentracing-smallrye/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/index.html new file mode 100644 index 000000000..14384dcd7 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime statistics provided by the resource adapter.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html new file mode 100644 index 000000000..ed8bc5682 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Model representing resource adapters activated by ironjacamar.xml file inside rar.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html new file mode 100644 index 000000000..5cee86f61 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html new file mode 100644 index 000000000..a2fdf5ccc --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies an administration object.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html new file mode 100644 index 000000000..636979ec4 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html new file mode 100644 index 000000000..6ee798745 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html new file mode 100644 index 000000000..f40df83f2 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies a connection definition.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html new file mode 100644 index 000000000..adc722042 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a resource adapter.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/undertow/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/undertow/index.html new file mode 100644 index 000000000..589992046 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/undertow/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the web container handling of this deployment


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/undertow/servlet/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/undertow/servlet/index.html new file mode 100644 index 000000000..c460b1b0a --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/undertow/servlet/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the status and configuration of this servlet


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/undertow/websocket/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/undertow/websocket/index.html new file mode 100644 index 000000000..a5bf9abb0 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/undertow/websocket/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the status and configuration of this websocket


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/webservices/endpoint/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/webservices/endpoint/index.html new file mode 100644 index 000000000..ba7da7947 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/webservices/endpoint/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WS endpoint


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subdeployment/subsystem/webservices/index.html b/latest/wildscribe/deployment/subdeployment/subsystem/webservices/index.html new file mode 100644 index 000000000..5f97c63a2 --- /dev/null +++ b/latest/wildscribe/deployment/subdeployment/subsystem/webservices/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by web service components in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/batch-jberet/index.html b/latest/wildscribe/deployment/subsystem/batch-jberet/index.html new file mode 100644 index 000000000..928aabd0b --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/batch-jberet/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the batch subsystem for the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/batch-jberet/job/execution/index.html b/latest/wildscribe/deployment/subsystem/batch-jberet/job/execution/index.html new file mode 100644 index 000000000..7eb57ab56 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/batch-jberet/job/execution/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The execution information for the job with the value of the path being the execution id.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/batch-jberet/job/index.html b/latest/wildscribe/deployment/subsystem/batch-jberet/job/index.html new file mode 100644 index 000000000..bbc7f179f --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/batch-jberet/job/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about a specific batch job.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/datasources/data-source/connection-properties/index.html b/latest/wildscribe/deployment/subsystem/datasources/data-source/connection-properties/index.html new file mode 100644 index 000000000..d7f0e60da --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/datasources/data-source/connection-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The connection-properties element allows you to pass in arbitrary connection properties to the Driver.connect(url, props) method


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/datasources/data-source/index.html b/latest/wildscribe/deployment/subsystem/datasources/data-source/index.html new file mode 100644 index 000000000..3fccedb5b --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/datasources/data-source/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC data-source configuration


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/datasources/index.html b/latest/wildscribe/deployment/subsystem/datasources/index.html new file mode 100644 index 000000000..96b05d851 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/datasources/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The data-sources subsystem, used to declare JDBC data-sources


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/datasources/xa-data-source/index.html b/latest/wildscribe/deployment/subsystem/datasources/xa-data-source/index.html new file mode 100644 index 000000000..de3ea999a --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/datasources/xa-data-source/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC XA data-source configuration


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html b/latest/wildscribe/deployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html new file mode 100644 index 000000000..81892aa26 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

List of xa-datasource-property


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/index.html b/latest/wildscribe/deployment/subsystem/ejb3/index.html new file mode 100644 index 000000000..407be74cd --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by Jakarta Enterprise Beans components included in this deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/index.html b/latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/index.html new file mode 100644 index 000000000..0344306dd --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Message driven bean component included in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html b/latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html new file mode 100644 index 000000000..1a701cb7e --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html b/latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..4c86f08f0 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/index.html b/latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/index.html new file mode 100644 index 000000000..dcc1baceb --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Singleton bean component included in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html b/latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html new file mode 100644 index 000000000..69d679d30 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html b/latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..c08462335 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/index.html b/latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/index.html new file mode 100644 index 000000000..09164d352 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Stateful session bean component included in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html b/latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..aa4317d42 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html b/latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..af799ba2a --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /25/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/service/timer-service/timer/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/index.html b/latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/index.html new file mode 100644 index 000000000..9d5e0f825 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Stateless session bean component included in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html b/latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html new file mode 100644 index 000000000..0e5527893 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html b/latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html new file mode 100644 index 000000000..aa0dd66b7 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Actual timer running for Jakarta Enterprise Beans


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/jaxrs/index.html b/latest/wildscribe/deployment/subsystem/jaxrs/index.html new file mode 100644 index 000000000..05062c727 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/jaxrs/index.html @@ -0,0 +1,37 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta RESTful Web Services subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/jaxrs/rest-resource/index.html b/latest/wildscribe/deployment/subsystem/jaxrs/rest-resource/index.html new file mode 100644 index 000000000..b4e8d7fa5 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/jaxrs/rest-resource/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta RESTful Web Services deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/jpa/index.html b/latest/wildscribe/deployment/subsystem/jpa/index.html new file mode 100644 index 000000000..2a3bede6f --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/jpa/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta Persistence subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/logging/configuration/error-manager/index.html b/latest/wildscribe/deployment/subsystem/logging/configuration/error-manager/index.html new file mode 100644 index 000000000..dfa021d4d --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/logging/configuration/error-manager/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured error managers being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/logging/configuration/filter/index.html b/latest/wildscribe/deployment/subsystem/logging/configuration/filter/index.html new file mode 100644 index 000000000..e923048eb --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/logging/configuration/filter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured filters being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/logging/configuration/formatter/index.html b/latest/wildscribe/deployment/subsystem/logging/configuration/formatter/index.html new file mode 100644 index 000000000..8ef12e6a5 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/logging/configuration/formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured formatters being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/logging/configuration/handler/index.html b/latest/wildscribe/deployment/subsystem/logging/configuration/handler/index.html new file mode 100644 index 000000000..91b456556 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/logging/configuration/handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured handlers being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/logging/configuration/index.html b/latest/wildscribe/deployment/subsystem/logging/configuration/index.html new file mode 100644 index 000000000..18db31319 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/logging/configuration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the logging configuration for this deployment. Note that this may not be accurate if the deployment is using some other means of configuring a log manager such as logback. The resolved configuration is what loggers not covered by the deployments specific log manager would use.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/logging/configuration/logger/index.html b/latest/wildscribe/deployment/subsystem/logging/configuration/logger/index.html new file mode 100644 index 000000000..8302a87f7 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/logging/configuration/logger/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured loggers being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/logging/configuration/pojo/index.html b/latest/wildscribe/deployment/subsystem/logging/configuration/pojo/index.html new file mode 100644 index 000000000..443a450c3 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/logging/configuration/pojo/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Describes the configured POJO's being used on a deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/logging/index.html b/latest/wildscribe/deployment/subsystem/logging/index.html new file mode 100644 index 000000000..13a5d9b57 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/logging/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the logging configuration for this deployment. Note that this may not be accurate if the deployment is using some other means of configuring a log manager such as logback. The resolved configuration is what loggers not covered by the deployments specific log manager would use.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/messaging-activemq/connection-factory/index.html b/latest/wildscribe/deployment/subsystem/messaging-activemq/connection-factory/index.html new file mode 100644 index 000000000..8d144cbf2 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/messaging-activemq/connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/messaging-activemq/external-jms-queue/index.html b/latest/wildscribe/deployment/subsystem/messaging-activemq/external-jms-queue/index.html new file mode 100644 index 000000000..c063ef652 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/messaging-activemq/external-jms-queue/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue to a remote broker.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/messaging-activemq/external-jms-topic/index.html b/latest/wildscribe/deployment/subsystem/messaging-activemq/external-jms-topic/index.html new file mode 100644 index 000000000..f035d5b8c --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/messaging-activemq/external-jms-topic/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic to a remote broker.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/messaging-activemq/index.html b/latest/wildscribe/deployment/subsystem/messaging-activemq/index.html new file mode 100644 index 000000000..6e5daad68 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/messaging-activemq/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by messaging resources included in this deployment.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/messaging-activemq/pooled-connection-factory/index.html b/latest/wildscribe/deployment/subsystem/messaging-activemq/pooled-connection-factory/index.html new file mode 100644 index 000000000..b65611bf2 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/messaging-activemq/pooled-connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/messaging-activemq/server/index.html b/latest/wildscribe/deployment/subsystem/messaging-activemq/server/index.html new file mode 100644 index 000000000..77d13f947 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/messaging-activemq/server/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An ActiveMQ server instance.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/messaging-activemq/server/jms-queue/index.html b/latest/wildscribe/deployment/subsystem/messaging-activemq/server/jms-queue/index.html new file mode 100644 index 000000000..2898569bf --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/messaging-activemq/server/jms-queue/index.html @@ -0,0 +1,159 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/messaging-activemq/server/jms-topic/index.html b/latest/wildscribe/deployment/subsystem/messaging-activemq/server/jms-topic/index.html new file mode 100644 index 000000000..62e921a61 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/messaging-activemq/server/jms-topic/index.html @@ -0,0 +1,377 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html b/latest/wildscribe/deployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html new file mode 100644 index 000000000..70bf35df4 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html b/latest/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html new file mode 100644 index 000000000..ed82c622d --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/deployment/subsystem/microprofile-opentracing-smallrye/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/resource-adapters/index.html b/latest/wildscribe/deployment/subsystem/resource-adapters/index.html new file mode 100644 index 000000000..c7a60909b --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/resource-adapters/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime statistics provided by the resource adapter.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html new file mode 100644 index 000000000..51e63969f --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Model representing resource adapters activated by ironjacamar.xml file inside rar.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html new file mode 100644 index 000000000..4989c8508 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html new file mode 100644 index 000000000..99e7f17ce --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies an administration object.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html new file mode 100644 index 000000000..9348e5255 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html new file mode 100644 index 000000000..93922ad5c --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html new file mode 100644 index 000000000..635422a64 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies a connection definition.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html new file mode 100644 index 000000000..d1c003613 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a resource adapter.


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/undertow/index.html b/latest/wildscribe/deployment/subsystem/undertow/index.html new file mode 100644 index 000000000..218342c12 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/undertow/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the web container handling of this deployment


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/undertow/servlet/index.html b/latest/wildscribe/deployment/subsystem/undertow/servlet/index.html new file mode 100644 index 000000000..0f2bfec4a --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/undertow/servlet/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the status and configuration of this servlet


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/undertow/websocket/index.html b/latest/wildscribe/deployment/subsystem/undertow/websocket/index.html new file mode 100644 index 000000000..b96be7927 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/undertow/websocket/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Information about the status and configuration of this websocket


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/webservices/endpoint/index.html b/latest/wildscribe/deployment/subsystem/webservices/endpoint/index.html new file mode 100644 index 000000000..9800dfee7 --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/webservices/endpoint/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WS endpoint


\ No newline at end of file diff --git a/latest/wildscribe/deployment/subsystem/webservices/index.html b/latest/wildscribe/deployment/subsystem/webservices/index.html new file mode 100644 index 000000000..8a5c4defa --- /dev/null +++ b/latest/wildscribe/deployment/subsystem/webservices/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resources exposed by web service components in the deployment.


\ No newline at end of file diff --git a/latest/wildscribe/extension/index.html b/latest/wildscribe/extension/index.html new file mode 100644 index 000000000..89ad29ef6 --- /dev/null +++ b/latest/wildscribe/extension/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A module that extends the standard capabilities of a domain or a standalone server.


\ No newline at end of file diff --git a/latest/wildscribe/extension/subsystem/index.html b/latest/wildscribe/extension/subsystem/index.html new file mode 100644 index 000000000..fdb9bd851 --- /dev/null +++ b/latest/wildscribe/extension/subsystem/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A subsystem provided by the extension. What is provided here is information about the xml schema and management interface provided by the subsystem, not the configuration of the subsystem itself.


\ No newline at end of file diff --git a/29/wildscribe/favicon.ico b/latest/wildscribe/favicon.ico similarity index 100% rename from 29/wildscribe/favicon.ico rename to latest/wildscribe/favicon.ico diff --git a/latest/wildscribe/index.html b/latest/wildscribe/index.html new file mode 100644 index 000000000..7dad92891 --- /dev/null +++ b/latest/wildscribe/index.html @@ -0,0 +1,232 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The root node of the server-level management model.


\ No newline at end of file diff --git a/latest/wildscribe/interface/index.html b/latest/wildscribe/interface/index.html new file mode 100644 index 000000000..3a1e20b18 --- /dev/null +++ b/latest/wildscribe/interface/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Interface definition


\ No newline at end of file diff --git a/29/wildscribe/js/main.js b/latest/wildscribe/js/main.js similarity index 100% rename from 29/wildscribe/js/main.js rename to latest/wildscribe/js/main.js diff --git a/29/wildscribe/js/vendor/bootstrap.bundle.min.js b/latest/wildscribe/js/vendor/bootstrap.bundle.min.js similarity index 100% rename from 29/wildscribe/js/vendor/bootstrap.bundle.min.js rename to latest/wildscribe/js/vendor/bootstrap.bundle.min.js diff --git a/29/wildscribe/js/vendor/bootstrap.bundle.min.js.map b/latest/wildscribe/js/vendor/bootstrap.bundle.min.js.map similarity index 100% rename from 29/wildscribe/js/vendor/bootstrap.bundle.min.js.map rename to latest/wildscribe/js/vendor/bootstrap.bundle.min.js.map diff --git a/29/wildscribe/js/vendor/ie10-viewport-bug-workaround.js b/latest/wildscribe/js/vendor/ie10-viewport-bug-workaround.js similarity index 100% rename from 29/wildscribe/js/vendor/ie10-viewport-bug-workaround.js rename to latest/wildscribe/js/vendor/ie10-viewport-bug-workaround.js diff --git a/29/wildscribe/js/vendor/jquery-3.4.1.slim.min.js b/latest/wildscribe/js/vendor/jquery-3.4.1.slim.min.js similarity index 100% rename from 29/wildscribe/js/vendor/jquery-3.4.1.slim.min.js rename to latest/wildscribe/js/vendor/jquery-3.4.1.slim.min.js diff --git a/latest/wildscribe/log-message-reference.html b/latest/wildscribe/log-message-reference.html new file mode 100644 index 000000000..adf21b8c3 --- /dev/null +++ b/latest/wildscribe/log-message-reference.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

AMQ

Code Level Return Type Message
AMQ022272 WARN Message ack in prepared tx for queue {0} which does not exist. This ack will be ignored.
AMQ022273 WARN Address "{0}" is full. Bridge {1} will disconnect
AMQ101000 INFO Starting ActiveMQ Artemis Server
AMQ101001 INFO Stopping ActiveMQ Artemis Server
AMQ101002 INFO Starting Naming server on {0}:{1,number,#} (rmi {2}:{3,number,#})
AMQ101003 INFO Halting ActiveMQ Artemis Server after user request
AMQ101005 DEBUG Using broker configuration: {0}
AMQ102000 WARN Error during undeployment: {0}
AMQ104000 ERROR Failed to delete file {0}
AMQ104001 ERROR Failed to start server
AMQ104002 ERROR The print data operation failed: {0}
AMQ111000 WARN Scheduled task can't be removed from scheduledPool.
AMQ111001 WARN ******************************************************************************************************************************* Could not re-establish AMQP Server Connection {0} on {1} after {2} retries *******************************************************************************************************************************
AMQ111002 INFO ******************************************************************************************************************************* Retrying Server AMQP Connection {0} on {1} retry {2} of {3} *******************************************************************************************************************************
AMQ111003 INFO ******************************************************************************************************************************* Connected on Server AMQP Connection {0} on {1} after {2} retries *******************************************************************************************************************************
AMQ111004 WARN AddressFullPolicy clash on an anonymous producer between destinations {0}(addressFullPolicy={1}) and {2}(addressFullPolicy={3}). This could lead to semantic inconsistencies on your clients. Notice you could have other instances of this scenario however this message will only be logged once. log.debug output would show all instances of this event.
AMQ121003 INFO JMS Server Manager Running cached command for {0}
AMQ121004 INFO JMS Server Manager Caching command for {0} since the JMS Server is not active yet
AMQ121004 INFO JMS Server Manager Caching command for {0} since the JMS Server is not active.
AMQ121005 INFO Invalid "host" value "0.0.0.0" detected for "{0}" connector. Switching to "{1}". If this new address is incorrect please manually configure the connector to use the proper one.
AMQ122005 WARN Invalid "host" value "0.0.0.0" detected for "{0}" connector. Switching to "{1}". If this new address is incorrect please manually configure the connector to use the proper one.
AMQ122007 WARN Queue {0} does not exist on the topic {1}. It was deleted manually probably.
AMQ122007 WARN Queue {0} does not exist on the topic {1}. It was deleted manually probably.
AMQ122008 WARN XA Recovery can not connect to any ActiveMQ server on recovery {0}
AMQ122008 WARN XA Recovery can not connect to any broker on recovery {0}
AMQ122011 WARN error unbinding {0} from JNDI
AMQ122011 WARN error unbinding {0} from Registry
AMQ122012 WARN JMS Server Manager error
AMQ122012 WARN JMS Server Manager error
AMQ122013 WARN Error in XA Recovery recover
AMQ122013 WARN Error in XA Recovery recover
AMQ122014 WARN Notified of connection failure in xa recovery connectionFactory for provider {0} will attempt reconnect on next pass
AMQ122014 WARN Notified of connection failure in xa recovery connectionFactory for provider {0} will attempt reconnect on next pass
AMQ122015 WARN Can not connect to {0} on auto-generated resource recovery
AMQ122016 DEBUG Error in XA Recovery
AMQ122016 DEBUG Error in XA Recovery
AMQ122017 WARN Tried to correct invalid "host" value "0.0.0.0" for "{0}" connector, but received an exception.
AMQ122017 WARN Tried to correct invalid "host" value "0.0.0.0" for "{0}" connector, but received an exception.
AMQ122018 WARN Could not start recovery discovery on {0}, we will retry every recovery scan until the server is available
AMQ122018 WARN Failed to send notification: {0}
AMQ122019 WARN Unable to deactivate server
AMQ123000 DEBUG JMS Server Manager Running cached command for {0}.(In the event of failover after failback has occurred, this message may be output multiple times.)
AMQ124000 ERROR key attribute missing for JMS configuration {0}
AMQ124000 ERROR key attribute missing for JMS configuration {0}
AMQ124002 ERROR Failed to start JMS deployer
AMQ124002 ERROR Failed to start JMS deployer
AMQ131001 INFO Security Context Setting Subject = {0}
AMQ132000 WARN I''m closing a JMS connection you left open. Please make sure you close all JMS connections explicitly before letting them go out of scope! see stacktrace to find out where it was created
AMQ132001 WARN An error happened while setting the context
AMQ132001 WARN Unhandled exception thrown from onMessage
AMQ134000 ERROR Failed to call JMS exception listener
AMQ134002 ERROR Queue Browser failed to create message {0}
AMQ134003 ERROR Message Listener failed to prepare message for receipt, message={0}
AMQ134004 ERROR Message Listener failed to process message
AMQ134005 ERROR Message Listener failed to recover session
AMQ134006 ERROR Failed to call Failover listener
AMQ141000 INFO *** running direct journal blast: {0}
AMQ141002 INFO starting thread for sync speed test
AMQ141003 INFO Write rate = {0} bytes / sec or {1} MiB / sec
AMQ141004 INFO Flush rate = {0} flushes / sec
AMQ141005 INFO Check Data Files:
AMQ141006 INFO Sequence out of order on journal
AMQ141007 INFO Current File on the journal is <= the sequence file.getFileID={0} on the dataFiles Currentfile.getFileId={1} while the file.getFileID()={2} Is same = ({3})
AMQ141008 INFO Free File ID out of order
AMQ141009 INFO A Free File is less than the maximum data
AMQ141010 INFO Initialising JDBC data source {0} with properties {1}
AMQ142000 WARN You have a native library with a different version than expected
AMQ142001 WARN Could not get lock after 60 seconds on closing Asynchronous File: {0}
AMQ142002 WARN Asynchronous File: {0} being finalized with opened state
AMQ142003 WARN AIO Callback Error: {0}
AMQ142004 WARN Inconsistency during compacting: CommitRecord ID = {0} for an already committed transaction during compacting
AMQ142005 WARN Inconsistency during compacting: Delete record being read on an existent record (id={0})
AMQ142006 WARN Could not find add Record information for record {0} during compacting
AMQ142007 WARN Can not find record {0} during compact replay
AMQ142008 WARN Could not remove file {0} from the list of data files
AMQ142009 WARN ******************************************************************************************************************************* The File Storage Attic is full, as the file {0} does not have the configured size, and the file will be removed *******************************************************************************************************************************
AMQ142010 WARN Failed to add file to opened files queue: {0}. This should NOT happen!
AMQ142011 WARN Error on reading compacting for {0}
AMQ142012 WARN Couldn''t find tx={0} to merge after compacting
AMQ142013 WARN Prepared transaction {0} was not considered completed, it will be ignored
AMQ142014 WARN Transaction {0} is missing elements so the transaction is being ignored
AMQ142015 WARN Uncommitted transaction with id {0} found and discarded
AMQ142016 WARN Could not stop compactor executor after 120 seconds
AMQ142017 WARN Could not stop journal executor after 60 seconds
AMQ142018 WARN Temporary files were left unattended after a crash on journal directory, deleting invalid files now
AMQ142019 WARN Deleting orphaned file {0}
AMQ142020 WARN Could not get lock after 60 seconds on closing Asynchronous File: {0}
AMQ142021 WARN Error on IO callback, {0}
AMQ142022 WARN Timed out on AIO poller shutdown
AMQ142023 WARN Executor on file {0} couldn''t complete its tasks in 60 seconds.
AMQ142024 WARN Error completing callback
AMQ142025 WARN Error calling onError callback
AMQ142026 WARN Timed out on AIO writer shutdown
AMQ142027 WARN Error on writing data! {0} code - {1}
AMQ142028 WARN Error replaying pending commands after compacting
AMQ142029 WARN Error closing file
AMQ142030 WARN Could not open a file in 60 Seconds
AMQ142031 WARN Error retrieving ID part of the file name {0}
AMQ142032 WARN Error reading journal file
AMQ142033 WARN Error reinitializing file {0}
AMQ142034 WARN Exception on submitting write
AMQ142035 WARN Could not stop journal append executor after 60 seconds
AMQ144000 ERROR Failed to delete file {0}
AMQ144001 ERROR Error starting poller
AMQ144002 ERROR Error pushing opened file
AMQ144003 ERROR Error compacting
AMQ144004 ERROR Error scheduling compacting
AMQ144005 ERROR Failed to performance blast
AMQ144006 ERROR IOError code {0}, {1}
AMQ144007 WARN Ignoring journal file {0}: file is shorter then minimum header size. This file is being removed.
AMQ144008 WARN ******************************************************************************************************************************* File {0}: was moved under attic, please review it and remove it. *******************************************************************************************************************************
AMQ144009 WARN Could not get a file in {0} seconds, System will retry the open but you may see increased latency in your system
AMQ144010 WARN Critical IO Exception happened: {0}
AMQ151000 INFO awaiting topic/queue creation {0}
AMQ151001 INFO Attempting to reconnect {0}
AMQ151002 INFO Reconnected with broker
AMQ151003 INFO resource adaptor stopped
AMQ151004 INFO Instantiating {0} "{1}" directly since UseJNDI=false.
AMQ151005 INFO awaiting server availability
AMQ151006 INFO Cluster topology change detected. Re-balancing connections on even {0}.
AMQ151007 INFO Resource adaptor started
AMQ152001 WARN problem resetting xa session after failure
AMQ152002 WARN Unable to roll local transaction back
AMQ152003 WARN unable to reset session after failure, we will place the MDB Inflow now in setup mode for activation={0}
AMQ152004 WARN Handling JMS exception failure
AMQ152005 WARN Failure in broker activation {0}
AMQ152006 WARN Unable to call after delivery
AMQ152007 WARN Thread {0} could not be finished
AMQ152008 WARN Error interrupting handler on endpoint {0} handler = {1}
AMQ152009 WARN Unable to validate properties
AMQ152010 WARN Unable to clear the transaction
AMQ152011 WARN Unable to close the factory
AMQ153001 DEBUG using different ActiveMQRAConnectionFactory
AMQ153002 jakarta.jms.IllegalStateException Cannot create a subscriber on the durable subscription since it already has subscriber(s)
AMQ153003 WARN Unsupported acknowledgement mode {0}
AMQ153004 WARN Invalid number of session (negative) {0}, defaulting to {1}.
AMQ153005 WARN Unable to retrieve "{0}" from JNDI. Creating a new "{1}" named "{2}" to be used by the MDB.
AMQ154000 ERROR Error while creating object Reference.
AMQ154001 ERROR Unable to stop resource adapter.
AMQ154003 ERROR Unable to reconnect {0}
AMQ154004 ERROR Failed to deliver message
AMQ171003 INFO JMS Server Manager Running cached command for {0}
AMQ171004 INFO JMS Server Manager Caching command for {0} since the JMS Server is not active.
AMQ172005 WARN Invalid "host" value "0.0.0.0" detected for "{0}" connector. Switching to "{1}". If this new address is incorrect please manually configure the connector to use the proper one.
AMQ172007 WARN Queue {0} does not exist on the topic {1}. It was deleted manually probably.
AMQ172008 WARN XA Recovery can not connect to any broker on recovery {0}
AMQ172011 WARN error unbinding {0} from JNDI
AMQ172012 WARN JMS Server Manager error
AMQ172013 WARN Error in XA Recovery recover
AMQ172014 WARN Notified of connection failure in xa recovery connectionFactory for provider {0} will attempt reconnect on next pass
AMQ172015 WARN Can not connect to {0} on auto-generated resource recovery
AMQ172016 DEBUG Error in XA Recovery
AMQ172017 WARN Tried to correct invalid "host" value "0.0.0.0" for "{0}" connector, but received an exception.
AMQ172018 WARN Could not start recovery discovery on {0}, we will retry every recovery scan until the server is available
AMQ174000 ERROR key attribute missing for JMS configuration {0}
AMQ174002 ERROR Failed to start JMS deployer
AMQ201000 INFO Network is healthy, starting service {0}
AMQ201001 INFO Network is unhealthy, stopping service {0}
AMQ202000 WARN Missing privileges to set Thread Context Class Loader on Thread Factory. Using current Thread Context Class Loader
AMQ202001 WARN {0} is a loopback address and will be discarded.
AMQ202002 WARN Ping Address {0} wasn't reacheable.
AMQ202003 WARN Ping Url {0} wasn't reacheable.
AMQ202004 WARN Error starting component {0}
AMQ202005 WARN Error stopping component {0}
AMQ202006 WARN Failed to check Url {0}.
AMQ202007 WARN Failed to check Address {0}.
AMQ202008 WARN Failed to check Address list {0}.
AMQ202009 WARN Failed to check Url list {0}.
AMQ202010 WARN Failed to set NIC {0}.
AMQ202011 WARN Failed to read from stream {0}.
AMQ202012 WARN Object cannot be serialized.
AMQ202013 WARN Unable to deserialize object.
AMQ202014 WARN Unable to encode byte array into Base64 notation.
AMQ202015 WARN Failed to clean up file {0}
AMQ202016 WARN Could not list files to clean up in {0}
AMQ211000 INFO **** Dumping session creation stacks ****
AMQ211001 INFO session created
AMQ211002 DEBUG Started {0} Netty Connector version {1} to {2}:{3,number,#}
AMQ211003 DEBUG Started InVM Connector
AMQ212000 WARN {0}
AMQ212001 WARN Error on clearing messages
AMQ212002 WARN Timed out waiting for handler to complete processing
AMQ212003 WARN Unable to close session
AMQ212004 WARN Failed to connect to server.
AMQ212005 WARN Tried {0} times to connect. Now giving up on reconnecting it.
AMQ212007 WARN connector.create or connectorFactory.createConnector should never throw an exception, implementation is badly behaved, but we will deal with it anyway.
AMQ212008 WARN I am closing a core ClientSessionFactory you left open. Please make sure you close all ClientSessionFactories explicitly before letting them go out of scope! {0}
AMQ212009 WARN resetting session after failure
AMQ212010 WARN Server is starting, retry to create the session {0}
AMQ212011 WARN committing transaction after failover occurred, any non persistent messages may be lost
AMQ212012 WARN failure occurred during commit throwing XAException
AMQ212014 WARN failover occurred during prepare rolling back
AMQ212015 WARN failover occurred during prepare rolling back
AMQ212016 WARN I am closing a core ClientSession you left open. Please make sure you close all ClientSessions explicitly before letting them go out of scope! {0}
AMQ212017 WARN error adding packet
AMQ212018 WARN error calling cancel
AMQ212019 WARN error reading index
AMQ212020 WARN error setting index
AMQ212021 WARN error resetting index
AMQ212022 WARN error reading LargeMessage file cache
AMQ212023 WARN error closing LargeMessage file cache
AMQ212024 WARN Exception during finalization for LargeMessage file cache
AMQ212025 WARN did not connect the cluster connection to other nodes
AMQ212026 WARN Timed out waiting for pool to terminate
AMQ212027 WARN Timed out waiting for scheduled pool to terminate
AMQ212028 WARN error starting server locator
AMQ212029 DEBUG Closing a Server Locator left open. Please make sure you close all Server Locators explicitly before letting them go out of scope! {0}
AMQ212030 WARN error sending topology
AMQ212031 WARN error sending topology
AMQ212032 WARN Timed out waiting to stop discovery thread
AMQ212033 WARN unable to send notification when discovery group is stopped
AMQ212034 WARN There are more than one servers on the network broadcasting the same node id. You will see this message exactly once (per node) if a node is restarted, in which case it can be safely ignored. But if it is logged continuously it means you really do have more than one node on the same network active concurrently with the same node id. This could occur if you have a backup node active at the same time as its live node. nodeID={0}
AMQ212035 WARN error receiving packet in discovery
AMQ212036 WARN Can not find packet to clear: {0} last received command id first stored command id {1}
AMQ212037 WARN Connection failure to {0} has been detected: {1} [code={2}]
AMQ212038 WARN Failure in calling interceptor: {0}
AMQ212040 WARN Timed out waiting for netty ssl close future to complete
AMQ212041 WARN Timed out waiting for netty channel to close
AMQ212042 WARN Timed out waiting for packet to be flushed
AMQ212043 WARN Property {0} must be an Integer, it is {1}
AMQ212044 WARN Property {0} must be a Long, it is {1}
AMQ212045 WARN Property {0} must be a Boolean, it is {1}
AMQ212046 WARN Cannot find activemq-version.properties on classpath: {0}
AMQ212047 WARN Warning: JVM allocated more data what would make results invalid {0}:{1}
AMQ212048 WARN Random address ({0}) was already in use, trying another time
AMQ212049 WARN Could not bind to {0} ({1} address); make sure your discovery group-address is of the same type as the IP stack (IPv4 or IPv6). Ignoring discovery group-address, but this may lead to cross talking.
AMQ212050 WARN Compressed large message tried to read {0} bytes from stream {1}
AMQ212051 WARN Invalid concurrent session usage. Sessions are not supposed to be used by more than one thread concurrently.
AMQ212052 WARN Packet {0} was answered out of sequence due to a previous server timeout and it''s being ignored
AMQ212053 WARN CompletionListener/SendAcknowledgementHandler used with confirmationWindowSize=-1. Enable confirmationWindowSize to receive acks from server!
AMQ212054 WARN Destination address={0} is blocked. If the system is configured to block make sure you consume messages on this configuration.
AMQ212055 WARN Unable to close consumer
AMQ212056 WARN local-bind-address specified for broadcast group but no local-bind-port. Using random port for UDP Broadcast ({0})
AMQ212057 WARN Large Message Streaming is taking too long to flush on back pressure.
AMQ212058 WARN Unable to get a message.
AMQ212059 WARN Failed to clean up: {0}
AMQ212060 WARN Unexpected null data received from DiscoveryEndpoint
AMQ212061 WARN Failed to perform force close
AMQ212062 WARN Failed to perform post actions on message processing
AMQ212063 WARN Unable to handle connection failure
AMQ212064 WARN Unable to receive cluster topology
AMQ212065 WARN {0} getting exception when receiving broadcasting
AMQ212066 WARN failed to parse int property
AMQ212067 WARN failed to get system property
AMQ212068 WARN Couldn't finish the client globalThreadPool in less than 10 seconds, interrupting it now
AMQ212069 WARN Couldn't finish the client scheduled in less than 10 seconds, interrupting it now
AMQ212070 WARN Unable to initialize VersionLoader
AMQ212071 WARN Unable to check Epoll availability
AMQ212072 WARN Failed to change channel state to ReadyForWriting
AMQ212073 WARN Unable to check KQueue availability
AMQ212074 WARN SendAcknowledgementHandler will not be asynchronous without setting up confirmation window size
AMQ212074 WARN channel group did not completely close
AMQ212075 WARN KQueue is not available, please add to the classpath or configure useKQueue=false to remove this warning
AMQ212076 WARN Epoll is not available, please add to the classpath or configure useEpoll=false to remove this warning
AMQ212077 WARN Timed out waiting to receive initial broadcast from cluster. Retry {0} of {1}
AMQ212079 WARN The upstream connector from the downstream federation will ignore url parameter {0}
AMQ212080 WARN Using legacy SSL store provider value: {0}. Please use either ''keyStoreType'' or ''trustStoreType'' instead as appropriate.
AMQ214000 ERROR Failed to call onMessage
AMQ214001 ERROR failed to cleanup session
AMQ214002 ERROR Failed to execute failure listener
AMQ214003 ERROR Failed to handle failover
AMQ214004 ERROR XA end operation failed
AMQ214005 ERROR XA start operation failed {0} code:{1}
AMQ214006 ERROR Session is not XA
AMQ214007 ERROR Received exception asynchronously from server
AMQ214008 ERROR Failed to handle packet
AMQ214009 ERROR Failed to stop discovery group
AMQ214010 ERROR Failed to receive datagram
AMQ214011 ERROR Failed to call discovery listener
AMQ214012 ERROR Unexpected error handling packet {0}
AMQ214013 ERROR Failed to decode packet
AMQ214014 ERROR Failed to execute failure listener
AMQ214015 ERROR Failed to execute connection life cycle listener
AMQ214016 ERROR Failed to create netty connection
AMQ214017 ERROR Caught unexpected Throwable
AMQ214018 ERROR Failed to invoke getTextContent() on node {0}
AMQ214019 ERROR Invalid configuration
AMQ214020 ERROR Exception happened while stopping Discovery BroadcastEndpoint {0}
AMQ214021 ERROR Invalid cipher suite specified. Supported cipher suites are: {0}
AMQ214022 ERROR Invalid protocol specified. Supported protocols are: {0}
AMQ214023 DEBUG HTTP Handshake failed, received %s
AMQ214024 ERROR HTTP upgrade not supported by remote acceptor
AMQ214025 ERROR Invalid type {0}, Using default connection factory at {1}
AMQ214026 TRACE Failure captured on connectionID={0}, performing failover or reconnection now
AMQ214027 DEBUG Replaying commands for channelID={0} with lastCommandID from the server={1}
AMQ214028 DEBUG Couldn't reattach session {0}, performing as a failover operation now and recreating objects
AMQ214029 ERROR Unexpected response from HTTP server: %s
AMQ214030 ERROR Failed to bind {0}={1}
AMQ214031 ERROR Failed to decode buffer, disconnect immediately.
AMQ214032 ERROR Unable to initialize VersionLoader
AMQ214033 ERROR Cannot resolve host
AMQ221000 INFO {0} Message Broker is starting with configuration {1}
AMQ221001 INFO Apache ActiveMQ Artemis Message Broker version {0} [{1}, nodeID={2}] {3}
AMQ221002 INFO Apache ActiveMQ Artemis Message Broker version {0} [{1}] stopped, uptime {2}
AMQ221003 INFO Deploying {2} queue {0} on address {1}
AMQ221004 INFO {0}
AMQ221005 INFO Deleting pending large message as it was not completed: {0}
AMQ221006 INFO Waiting to obtain live lock
AMQ221007 INFO Server is now live
AMQ221008 INFO live server wants to restart, restarting server in backup
AMQ221010 INFO Backup Server is now live
AMQ221011 INFO Server {0} is now live
AMQ221012 INFO Using AIO Journal
AMQ221013 INFO Using NIO Journal
AMQ221014 INFO {0}% loaded
AMQ221015 INFO Can not find queue {0} while reloading ACKNOWLEDGE_CURSOR, deleting record now
AMQ221016 INFO Can not find queue {0} while reloading PAGE_CURSOR_COUNTER_VALUE, deleting record now
AMQ221017 INFO Can not find queue {0} while reloading PAGE_CURSOR_COUNTER_INC, deleting record now
AMQ221018 INFO Large message: {0} did not have any associated reference, file will be deleted
AMQ221019 INFO Deleting unreferenced message id={0} from the journal
AMQ221020 INFO Started {0} Acceptor at {1}:{2,number,#} for protocols [{3}]
AMQ221021 INFO failed to remove connection
AMQ221022 INFO unable to start connector service: {0}
AMQ221023 INFO unable to stop connector service: {0}
AMQ221024 INFO Backup server {0} is synchronized with live server, nodeID={1}.
AMQ221025 INFO Replication: sending {0} (size={1}) to replica.
AMQ221026 INFO Bridge {0} connected to forwardingAddress={1}. {2} does not have any bindings. Messages will be ignored until a binding is created.
AMQ221027 INFO Bridge {0} is connected
AMQ221028 INFO Bridge is stopping, will not retry
AMQ221029 INFO stopped bridge {0}
AMQ221030 INFO paused bridge {0}
AMQ221031 INFO backup announced
AMQ221032 INFO Waiting to become backup node
AMQ221033 INFO ** got backup lock
AMQ221034 INFO Waiting {0} to obtain live lock
AMQ221035 INFO Live Server Obtained live lock
AMQ221036 INFO Message with duplicate ID {0} was already set at {1}. Move from {2} being ignored and message removed from {3}
AMQ221037 INFO {0} to become ''live''
AMQ221038 INFO Configuration option ''{0}'' is deprecated. Consult the manual for details.
AMQ221039 INFO Restarting as Replicating backup server after live restart
AMQ221040 INFO Remote group coordinators has not started.
AMQ221041 INFO Cannot find queue {0} while reloading PAGE_CURSOR_COMPLETE, deleting record now
AMQ221042 INFO Bridge {0} timed out waiting for the completion of {1} messages, we will just shutdown the bridge after 10 seconds wait
AMQ221043 INFO Protocol module found: [{1}]. Adding protocol support for: {0}
AMQ221045 INFO libaio is not available, switching the configuration into NIO
AMQ221046 INFO Unblocking message production on address ''{0}''; {1}
AMQ221047 INFO Backup Server has scaled down to live server
AMQ221048 INFO Consumer {0}:{1} attached to queue ''{2}'' from {3} identified as ''slow.'' Expected consumption rate: {4} msgs/second; actual consumption rate: {5} msgs/second.
AMQ221049 INFO Activating Replica for node: {0}
AMQ221050 INFO Activating Shared Store Slave
AMQ221051 INFO Populating security roles from LDAP at: {0}
AMQ221052 INFO Deploying topic {0}
AMQ221053 INFO Disallowing use of vulnerable protocol ''{0}'' on acceptor ''{1}''. See http://www.oracle.com/technetwork/topics/security/poodlecve-2014-3566-2339408.html for more details.
AMQ221054 INFO libaio was found but the filesystem does not support AIO. Switching the configuration into NIO. Journal path: {0}
AMQ221055 INFO There were too many old replicated folders upon startup, removing {0}
AMQ221056 INFO Reloading configuration: {0}
AMQ221057 INFO Global Max Size is being adjusted to 1/2 of the JVM max size (-Xmx). being defined as {0}
AMQ221058 INFO resetting Journal File size from {0} to {1} to fit with alignment of {2}
AMQ221059 INFO Deleting old data directory {0} as the max folders is set to 0
AMQ221060 INFO Sending quorum vote request to {0}: {1}
AMQ221061 INFO Received quorum vote response from {0}: {1}
AMQ221062 INFO Received quorum vote request: {0}
AMQ221063 INFO Sending quorum vote response: {0}
AMQ221064 INFO Node {0} found in cluster topology
AMQ221065 INFO Node {0} not found in cluster topology
AMQ221066 INFO Initiating quorum vote: {0}
AMQ221067 INFO Waiting {0} {1} for quorum vote results.
AMQ221068 INFO Received all quorum votes.
AMQ221069 INFO Timeout waiting for quorum vote responses.
AMQ221070 INFO Restarting as backup based on quorum vote results.
AMQ221071 INFO Failing over based on quorum vote results.
AMQ221072 INFO Can't find roles for the subject.
AMQ221073 INFO Can't add role principal.
AMQ221074 INFO Debug started : size = {0} bytes, messages = {1}
AMQ221075 INFO Usage of wildcardRoutingEnabled configuration property is deprecated, please use wildCardConfiguration.enabled instead
AMQ221076 INFO {0}
AMQ221077 INFO There is no queue with ID {0}, deleting record {1}
AMQ221078 INFO Scaled down {0} messages total.
AMQ221079 INFO Ignoring prepare on xid as already called : {0}
AMQ221080 INFO Deploying address {0} supporting {1}
AMQ221081 INFO There is no address with ID {0}, deleting record {1}
AMQ221082 INFO Initializing metrics plugin {0} with properties: {1}
AMQ221083 INFO ignoring quorum vote as max cluster size is {0}.
AMQ221084 INFO Requested {0} quorum votes
AMQ221085 INFO Route {0} to {1}
AMQ221086 INFO Cannot route {0}
AMQ221109 INFO Apache ActiveMQ Artemis Backup Server version {0} [{1}] started, waiting live to fail before it gets active
AMQ222000 WARN ActiveMQServer is being finalized and has not been stopped. Please remember to stop the server before letting it go out of scope
AMQ222001 WARN Error closing sessions while stopping server
AMQ222002 WARN Timed out waiting for pool to terminate {0}. Interrupting all its threads!
AMQ222004 WARN Must specify an address for each divert. This one will not be deployed.
AMQ222005 WARN Must specify a forwarding address for each divert. This one will not be deployed.
AMQ222006 WARN Binding already exists with name {0}, divert will not be deployed
AMQ222007 WARN Security risk! Apache ActiveMQ Artemis is running with the default cluster admin user and default password. Please see the cluster chapter in the ActiveMQ Artemis User Guide for instructions on how to change this.
AMQ222008 WARN unable to restart server, please kill and restart manually
AMQ222009 WARN Unable to announce backup for replication. Trying to stop the server.
AMQ222010 ERROR Critical IO Error, shutting down the server. file={1}, message={0}
AMQ222011 WARN Error stopping server
AMQ222012 WARN Timed out waiting for backup activation to exit
AMQ222013 WARN Error when trying to start replication
AMQ222014 WARN Error when trying to stop replication
AMQ222016 WARN Cannot deploy a connector with no name specified.
AMQ222017 WARN There is already a connector with name {0} deployed. This one will not be deployed.
AMQ222018 WARN AIO was not located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal
AMQ222019 WARN There is already a discovery group with name {0} deployed. This one will not be deployed.
AMQ222020 WARN error scanning for URL''s
AMQ222021 WARN problem undeploying {0}
AMQ222022 WARN Timed out waiting for paging cursor to stop {0}
AMQ222023 WARN problem cleaning page address {0}
AMQ222024 WARN Could not complete operations on IO context {0}
AMQ222025 WARN Problem cleaning page subscription counter
AMQ222026 WARN Error on cleaning up cursor pages
AMQ222027 WARN Timed out flushing executors for paging cursor to stop {0}
AMQ222028 WARN Could not find page cache for page {0}, on queue {1}/{2} removing it from the journal
AMQ222029 WARN Could not locate page transaction {0}, ignoring message on position {1} on address={2} queue={3}
AMQ222030 WARN File {0} being renamed to {1}.invalidPage as it was loaded partially. Please verify your data.
AMQ222031 WARN Error while deleting page file
AMQ222032 WARN page finalise error
AMQ222033 WARN Page file {0} had incomplete records at position {1} at record number {2}
AMQ222034 WARN Can not delete page transaction id={0}
AMQ222035 WARN Directory {0} did not have an identification file {1}
AMQ222036 WARN Timed out on waiting PagingStore {0} to shutdown
AMQ222037 WARN IO Error, impossible to start paging
AMQ222038 INFO Starting paging on address ''{0}''; {1}
AMQ222039 WARN Messages sent to address ''{0}'' are being dropped; {1}
AMQ222040 WARN Server is stopped
AMQ222041 WARN Cannot find queue {0} to update delivery count
AMQ222042 WARN Cannot find message {0} to update delivery count
AMQ222043 WARN Message for queue {0} which does not exist. This message will be ignored.
AMQ222044 WARN It was not possible to delete message {0}
AMQ222045 WARN Message in prepared tx for queue {0} which does not exist. This message will be ignored.
AMQ222046 WARN Failed to remove reference for {0}
AMQ222047 WARN Can not find queue {0} while reloading ACKNOWLEDGE_CURSOR
AMQ222048 WARN PAGE_CURSOR_COUNTER_VALUE record used on a prepared statement, invalid state
AMQ222049 WARN InternalError: Record type {0} not recognized. Maybe you are using journal files created on a different version
AMQ222050 WARN Can not locate recordType={0} on loadPreparedTransaction//deleteRecords
AMQ222051 WARN Journal Error
AMQ222052 WARN error incrementing delay detection
AMQ222053 WARN Error on copying large message {0} for DLA or Expiry
AMQ222054 WARN Error on executing IOCallback
AMQ222055 WARN Error on deleting duplicate cache
AMQ222056 WARN Did not route to any bindings for address {0} and sendToDLAOnNoRoute is true but there is no DLA configured for the address, the message will be ignored.
AMQ222057 WARN It was not possible to add references due to an IO error code {0} message = {1}
AMQ222059 WARN Duplicate message detected - message will not be routed. Message information: {0}
AMQ222060 WARN Error while confirming large message completion on rollback for recordID={0}
AMQ222061 WARN Client connection failed, clearing up resources for session {0}
AMQ222062 WARN Cleared up resources for session {0}
AMQ222063 WARN Error processing IOCallback code = {0} message = {1}
AMQ222065 DEBUG Client is not being consistent on the request versioning. It just sent a version id={0} while it informed {1} previously
AMQ222066 WARN Reattach request from {0} failed as there is no confirmationWindowSize configured, which may be ok for your system
AMQ222067 WARN Connection failure has been detected: {0} [code={1}]
AMQ222069 WARN error cleaning up stomp connection
AMQ222070 WARN Stomp Transactional acknowledgement is not supported
AMQ222071 WARN Interrupted while waiting for stomp heartbeat to die
AMQ222072 WARN Timed out flushing channel on InVMConnection
AMQ222075 WARN {0} is still connected to {1}
AMQ222076 WARN channel group did not completely unbind
AMQ222077 WARN {0} is still bound to {1}
AMQ222078 WARN Error instantiating remoting interceptor {0}
AMQ222079 WARN The following keys are invalid for configuring the acceptor: {0} the acceptor will not be started.
AMQ222080 WARN Error instantiating remoting acceptor {0}
AMQ222081 WARN Timed out waiting for remoting thread pool to terminate
AMQ222082 WARN error on connection failure check
AMQ222083 WARN The following keys are invalid for configuring the connector service: {0} the connector will not be started.
AMQ222084 WARN The following keys are required for configuring the connector service: {0} the connector will not be started.
AMQ222085 WARN Packet {0} can not be processed by the ReplicationEndpoint
AMQ222086 WARN error handling packet {0} for replication
AMQ222087 WARN Replication Error while closing the page on backup
AMQ222088 WARN Journal comparison mismatch: {0}
AMQ222089 WARN Replication Error deleting large message ID = {0}
AMQ222090 WARN Replication Large MessageID {0} is not available on backup server. Ignoring replication message
AMQ222091 WARN The backup node has been shut-down, replication will now stop
AMQ222092 WARN Connection to the backup node failed, removing replication now
AMQ222093 WARN Timed out waiting to stop Bridge
AMQ222094 WARN Bridge unable to send message {0}, will try again once bridge reconnects
AMQ222095 WARN Connection failed with failedOver={0}
AMQ222096 WARN Error on querying binding on bridge {0}. Retrying in 100 milliseconds
AMQ222097 WARN Address {0} does not have any bindings, retry #({1})
AMQ222098 WARN Server is starting, retry to create the session for bridge {0}
AMQ222099 WARN Bridge {0} is unable to connect to destination. It will be disabled.
AMQ222100 WARN ServerLocator was shutdown, can not retry on opening connection for bridge
AMQ222101 WARN Bridge {0} achieved {1} maxattempts={2} it will stop retrying to reconnect
AMQ222102 WARN Unexpected exception while trying to reconnect
AMQ222103 WARN transaction with xid {0} timed out
AMQ222104 WARN IO Error completing the transaction, code = {0}, message = {1}
AMQ222106 WARN Replacing incomplete LargeMessage with ID={0}
AMQ222107 WARN Cleared up resources for session {0}
AMQ222108 WARN unable to send notification when broadcast group is stopped
AMQ222109 WARN Timed out waiting for write lock on consumer {0} from {1}. Check the Thread dump
AMQ222110 WARN no queue IDs defined!, originalMessage = {0}, copiedMessage = {1}, props={2}
AMQ222111 TRACE exception while invoking {0} on {1}
AMQ222112 WARN exception while retrieving attribute {0} on {1}
AMQ222113 WARN On ManagementService stop, there are {0} unexpected registered MBeans: {1}
AMQ222114 WARN Unable to delete group binding info {0}
AMQ222115 WARN Error closing serverLocator={0}
AMQ222116 WARN unable to start broadcast group {0}
AMQ222117 WARN unable to start cluster connection {0}
AMQ222118 WARN unable to start Bridge {0}
AMQ222119 WARN No connector with name {0}. backup cannot be announced.
AMQ222120 WARN no cluster connections defined, unable to announce backup
AMQ222121 WARN Must specify a unique name for each bridge. This one will not be deployed.
AMQ222122 WARN Must specify a queue name for each bridge. This one {0} will not be deployed.
AMQ222123 WARN Forward address is not specified on bridge {0}. Will use original message address instead
AMQ222124 WARN There is already a bridge with name {0} deployed. This one will not be deployed.
AMQ222125 WARN No queue found with name {0} bridge {1} will not be deployed.
AMQ222126 WARN No discovery group found with name {0} bridge will not be deployed.
AMQ222127 WARN Must specify a unique name for each cluster connection. This one will not be deployed.
AMQ222128 WARN Must specify an address for each cluster connection. This one will not be deployed.
AMQ222129 WARN No connector with name {0}. The cluster connection will not be deployed.
AMQ222130 WARN Cluster Configuration {0} already exists. The cluster connection will not be deployed.
AMQ222131 WARN No discovery group with name {0}. The cluster connection will not be deployed.
AMQ222132 WARN There is already a broadcast-group with name {0} deployed. This one will not be deployed.
AMQ222133 WARN There is no connector deployed with name {0}. The broadcast group with name {1} will not be deployed.
AMQ222134 WARN No connector defined with name {0}. The bridge will not be deployed.
AMQ222135 WARN Stopping Redistributor, Timed out waiting for tasks to complete
AMQ222136 WARN IO Error during redistribution, errorCode = {0} message = {1}
AMQ222137 WARN Unable to announce backup, retrying
AMQ222138 WARN Local Member is not set at on ClusterConnection {0}
AMQ222139 WARN {0}::Remote queue binding {1} has already been bound in the post office. Most likely cause for this is you have a loop in your cluster due to cluster max-hops being too large or you have multiple cluster connections to the same nodes using overlapping addresses
AMQ222141 WARN Node Manager can not open file {0}
AMQ222142 WARN Error on resetting large message deliver - {0}
AMQ222143 WARN Timed out waiting for executor to complete
AMQ222144 WARN Queue could not finish waiting executors. Try increasing the thread pool size
AMQ222145 WARN Error expiring reference {0} on queue
AMQ222146 WARN Message has expired. No bindings for Expiry Address {0} so dropping it
AMQ222147 WARN Messages are being expired on queue {0}, but there is no Expiry Address configured so messages will be dropped.
AMQ222148 WARN Message {0} has exceeded max delivery attempts. No bindings for Dead Letter Address {1} so dropping it
AMQ222149 WARN Message {0} has reached maximum delivery attempts, sending it to Dead Letter Address {1} from {2}
AMQ222150 WARN Message {0} has exceeded max delivery attempts. No Dead Letter Address configured for queue {1} so dropping it
AMQ222151 WARN removing consumer which did not handle a message, consumer={0}, message={1}
AMQ222152 WARN Unable to decrement reference counting on queue
AMQ222153 WARN Cannot locate record for message id = {0} on Journal
AMQ222154 WARN Error checking DLQ
AMQ222155 WARN Failed to register as backup. Stopping the server.
AMQ222156 WARN Less than {0}% {1} You are in danger of running out of RAM. Have you set paging parameters on your addresses? (See user manual "Paging" chapter)
AMQ222157 WARN Error completing callback on replication manager
AMQ222158 WARN {0} activation thread did not finish.
AMQ222159 WARN unable to send notification when broadcast group is stopped
AMQ222160 WARN unable to send notification when broadcast group is stopped
AMQ222161 WARN Group Handler timed-out waiting for sendCondition
AMQ222162 INFO Moving data directory {0} to {1}
AMQ222163 WARN Server is being completely stopped, since this was a replicated backup there may be journal files that need cleaning up. The Apache ActiveMQ Artemis broker will have to be manually restarted.
AMQ222164 WARN Error when trying to start replication {0}
AMQ222165 WARN No Dead Letter Address configured for queue {0} in AddressSettings
AMQ222166 WARN No Expiry Address configured for queue {0} in AddressSettings
AMQ222167 WARN Group Binding not available so deleting {0} groups from {1}, groups will be bound to another node
AMQ222168 WARN The ''protocol'' property is deprecated. If you want this Acceptor to support multiple protocols, use the ''protocols'' property, e.g. with value ''CORE,AMQP,STOMP''
AMQ222169 WARN You have old legacy clients connected to the queue {0} and we can''t disconnect them, these clients may just hang
AMQ222170 WARN Bridge {0} forwarding address {1} has confirmation-window-size ({2}) greater than address'' max-size-bytes'' ({3})
AMQ222171 WARN Bridge {0} forwarding address {1} could not be resolved on address-settings configuration
AMQ222172 WARN Queue {0} was busy for more than {1} milliseconds. There are possibly consumers hanging on a network operation
AMQ222173 WARN Queue {0} is duplicated during reload. This queue will be renamed as {1}
AMQ222174 WARN Queue {0}, on address={1}, is taking too long to flush deliveries. Watch out for frozen clients.
AMQ222175 WARN Bridge {0} could not find configured connectors
AMQ222176 WARN A session that was already doing XA work on {0} is replacing the xid by {1} . This was most likely caused from a previous communication timeout
AMQ222177 WARN Wrong configuration for role, {0} is not a valid permission
AMQ222178 WARN Error during recovery of page counters
AMQ222181 WARN Unable to scaleDown messages
AMQ222182 WARN Missing cluster-configuration for scale-down-clustername {0}
AMQ222183 WARN Blocking message production on address ''{0}''; {1}
AMQ222184 WARN Unable to recover group bindings in SCALE_DOWN mode, only FULL backup server can do this
AMQ222185 WARN no cluster connection for specified replication cluster
AMQ222186 WARN unable to authorise cluster control: {0}
AMQ222187 WARN Failed to activate replicated backup
AMQ222188 WARN Unable to find target queue for node {0}
AMQ222189 WARN Failed to activate shared store slave
AMQ222191 WARN Could not find any configured role for user {0}.
AMQ222192 WARN Could not delete: {0}
AMQ222193 WARN Memory Limit reached. Producer ({0}) stopped to prevent flooding {1} (blocking for {2}s). See http://activemq.apache.org/producer-flow-control.html for more info.
AMQ222194 WARN PageCursorInfo == null on address {0}, pos = {1}, queue = {2}.
AMQ222195 WARN Large message {0} wasn''t found when dealing with add pending large message
AMQ222196 WARN Could not find binding with id={0} on routeFromCluster for message={1} binding = {2}
AMQ222197 WARN Internal error! Delivery logic has identified a non delivery and still handled a consumer!
AMQ222198 WARN Could not flush ClusterManager executor ({0}) in 10 seconds, verify your thread pool size
AMQ222199 WARN Thread dump: {0}
AMQ222200 WARN Could not finish executor on {0}
AMQ222201 WARN Timed out waiting for activation to exit
AMQ222202 WARN {0}: <{1}> should not be set to the same value as <{2}>. If a system is under high load, or there is a minor network delay, there is a high probability of a cluster split/failure due to connection timeout.
AMQ222203 WARN Classpath lacks a protocol-manager for protocol {0}, Protocol being ignored on acceptor {1}
AMQ222204 WARN Duplicated Acceptor {0} with parameters {1} classFactory={2} duplicated on the configuration
AMQ222205 WARN OutOfMemoryError possible! There are currently {0} addresses with a total max-size-bytes of {1} bytes, but the maximum memory available is {2} bytes.
AMQ222206 WARN Connection limit of {0} reached. Refusing connection from {1}.
AMQ222207 WARN The backup server is not responding promptly introducing latency beyond the limit. Replication server being disconnected now.
AMQ222208 WARN SSL handshake failed for client from {0}: {1}.
AMQ222209 WARN Could not contact group handler coordinator after 10 retries, message being routed without grouping information
AMQ222210 WARN Free storage space is at {0} of {1} total. Usage rate is {2} which is beyond the configured . System will start blocking producers.
AMQ222211 INFO Free storage space is at {0} of {1} total. Usage rate is {2} which is below the configured .
AMQ222212 WARN Disk Full! Blocking message production on address ''{0}''. Clients will report blocked.
AMQ222213 WARN There was an issue on the network, server is isolated!
AMQ222214 WARN Destination {1} has an inconsistent and negative address size={0}.
AMQ222215 WARN Global Address Size has negative and inconsistent value as {0}
AMQ222216 WARN Security problem while authenticating: {0}
AMQ222217 WARN Cannot find connector-ref {0}. The cluster-connection {1} will not be deployed.
AMQ222218 WARN Server disconnecting: {0}
AMQ222219 WARN File {0} does not exist
AMQ222220 WARN Error while cleaning paging on queue {0}
AMQ222221 WARN Error while cleaning page, during the commit
AMQ222222 WARN Error while deleting page-complete-record
AMQ222223 WARN Failed to calculate message memory estimate
AMQ222224 WARN Failed to calculate scheduled delivery time
AMQ222225 WARN Sending unexpected exception to the client
AMQ222226 WARN Connection configuration is null for connectorName {0}
AMQ222227 WARN Failed to process an event
AMQ222228 WARN Missing replication token on queue
AMQ222229 WARN Failed to perform rollback
AMQ222230 WARN Failed to send notification
AMQ222231 WARN Failed to flush outstanding data from the connection
AMQ222232 WARN Unable to acquire lock
AMQ222233 WARN Unable to destroy connection with session metadata
AMQ222234 WARN Unable to invoke a callback
AMQ222235 WARN Unable to inject a monitor
AMQ222236 WARN Unable to flush deliveries
AMQ222237 WARN Unable to stop redistributor
AMQ222238 WARN Unable to commit transaction
AMQ222239 WARN Unable to delete Queue status
AMQ222240 WARN Unable to pause a Queue
AMQ222241 WARN Unable to resume a Queue
AMQ222242 WARN Unable to obtain message priority, using default
AMQ222243 WARN Unable to extract GroupID from message
AMQ222244 WARN Unable to check if message expired
AMQ222245 WARN Unable to perform post acknowledge
AMQ222246 WARN Unable to rollback on close
AMQ222247 WARN Unable to close consumer
AMQ222248 WARN Unable to remove consumer
AMQ222249 WARN Unable to rollback on TX timed out
AMQ222250 WARN Unable to delete heuristic completion from storage manager
AMQ222251 WARN Unable to start replication
AMQ222252 WARN Unable to calculate file size
AMQ222253 WARN Error while syncing data on largeMessageInSync:: {0}
AMQ222254 WARN Invalid record type {0}
AMQ222255 WARN Unable to calculate file store usage
AMQ222256 WARN Failed to unregister acceptors
AMQ222257 WARN Failed to decrement message reference count
AMQ222258 WARN Error on deleting queue {0}
AMQ222259 WARN Failed to flush the executor
AMQ222260 WARN Failed to perform rollback
AMQ222261 WARN Failed to activate a backup
AMQ222262 WARN Failed to stop cluster manager
AMQ222263 WARN Failed to stop cluster connection
AMQ222264 WARN Failed to process message reference after rollback
AMQ222265 WARN Failed to finish delivery, unable to lock delivery
AMQ222266 WARN Failed to send request to the node
AMQ222267 WARN Failed to disconnect bindings
AMQ222268 WARN Failed to remove a record
AMQ222269 WARN Please use a fixed value for "journal-pool-files". Default changed per https://issues.apache.org/jira/browse/ARTEMIS-1628
AMQ222270 WARN Unable to create management notification address: {0}
AMQ222274 WARN Failed to deploy address {0}: {1}
AMQ222275 WARN Failed to deploy queue {0}: {1}
AMQ222276 WARN Failed to process changes to the logging configuration file: {0}
AMQ222277 WARN Problem initializing automatic logging configuration reload for {0}
AMQ222278 WARN Unable to extract GroupSequence from message
AMQ222279 WARN Federation upstream {0} policy ref {1} could not be resolved in federation configuration
AMQ222280 WARN Federation upstream {0} policy ref {1} is of unknown type in federation configuration
AMQ222281 WARN Federation upstream {0} policy ref {1} are too self referential, avoiding stack overflow ,
AMQ222282 WARN Federation downstream {0} upstream transport configuration ref {1} could not be resolved in federation configuration
AMQ222283 INFO Federation downstream {0} has been deployed
AMQ222284 INFO Federation downstream {0} has been undeployed
AMQ222285 WARN File {0} at {1} is empty. Delete the empty file to stop this message.
AMQ222286 WARN Error executing {0} federation plugin method.
AMQ222287 WARN Error looking up bindings for address {}.
AMQ222288 WARN Page {0}, message {1} could not be found on offset {2}, with starting message {3}. This represents a logic error or inconsistency on the data, and the system will try once again from the beggining of the page file.
AMQ222289 WARN Did not route to any matching bindings on dead-letter-address {0} and auto-create-dead-letter-resources is true; dropping message: {1}
AMQ222290 WARN Failed to find cluster-connection when handling cluster-connect packet. Ignoring: {0}
AMQ222291 WARN The metrics-plugin element is deprecated and replaced by the metrics element
AMQ222292 WARN The metrics-plugin element is ignored because the metrics element is defined
AMQ222294 WARN There is a possible split brain on nodeID {0}, coming from connectors {1}. Topology update ignored.
AMQ222295 WARN There is a possible split brain on nodeID {0}. Topology update ignored
AMQ222296 WARN Unable to deploy Hawtio MBeam, console client side RBAC not available
AMQ222297 WARN Unable to start Management Context, RBAC not available
AMQ222298 WARN Failed to create bootstrap user "{0}". User management may not function.
AMQ222299 WARN No bootstrap credentials found. User management may not function.
AMQ222300 WARN Getting SSL handler failed when serving client from {0}: {1}.
AMQ222301 WARN Duplicate address-setting match found: {0}. These settings will be ignored! Please review your broker.xml and consolidate any duplicate address-setting elements.
AMQ222302 WARN Failed to deal with property {0} when converting message from core to OpenWire: {1}
AMQ222303 WARN Redistribution by {0} of messageID = {1} failed
AMQ222304 WARN Unable to load message from journal
AMQ222305 WARN Error federating message {0}.
AMQ222306 WARN Failed to load prepared TX and it will be rolled back: {0}
AMQ222307 WARN The queues element is deprecated and replaced by the addresses element
AMQ222308 WARN Unable to listen for incoming fail-back request because {0} is null. Ensure the broker has the proper cluster-connection configuration.
AMQ223000 DEBUG Received Interrupt Exception whilst waiting for component to shutdown: {0}
AMQ223001 DEBUG Ignored quorum vote due to quorum reached or vote casted: {0}
AMQ224000 ERROR Failure in initialisation
AMQ224001 ERROR Error deploying URI {0}
AMQ224002 ERROR Error deploying URI
AMQ224003 ERROR Error undeploying URI {0}
AMQ224005 ERROR Unable to deploy node {0}
AMQ224006 ERROR Invalid filter: {0}
AMQ224007 ERROR page subscription = {0} error={1}
AMQ224008 ERROR Failed to store id
AMQ224009 ERROR Cannot find message {0}
AMQ224010 ERROR Cannot find queue messages for queueID={0} on ack for messageID={1}
AMQ224011 ERROR Cannot find queue messages {0} for message {1} while processing scheduled messages
AMQ224012 ERROR error releasing resources
AMQ224014 ERROR Failed to close session
AMQ224015 ERROR Caught XA exception
AMQ224016 ERROR Caught exception
AMQ224017 ERROR Invalid packet {0}
AMQ224018 ERROR Failed to create session
AMQ224019 ERROR Failed to reattach session
AMQ224020 ERROR Failed to handle create queue
AMQ224021 ERROR Failed to decode packet
AMQ224022 ERROR Failed to execute failure listener
AMQ224024 ERROR Stomp Error, tx already exist! {0}
AMQ224027 ERROR Failed to write to handler on invm connector {0}
AMQ224028 ERROR Failed to stop acceptor {0}
AMQ224029 ERROR large message sync: largeMessage instance is incompatible with it, ignoring data
AMQ224030 ERROR Could not cancel reference {0}
AMQ224032 ERROR Failed to pause bridge
AMQ224033 ERROR Failed to broadcast connector configs
AMQ224034 ERROR Failed to close consumer
AMQ224035 ERROR Failed to close cluster connection flow record
AMQ224036 ERROR Failed to update cluster connection topology
AMQ224037 ERROR cluster connection Failed to handle message
AMQ224038 ERROR Failed to ack old reference
AMQ224039 ERROR Failed to expire message reference
AMQ224040 ERROR Failed to remove consumer
AMQ224041 ERROR Failed to deliver
AMQ224042 ERROR Error while restarting the backup server: {0}
AMQ224043 ERROR Failed to send forced delivery message
AMQ224044 ERROR error acknowledging message
AMQ224045 ERROR Failed to run large message deliverer
AMQ224046 ERROR Exception while browser handled from {0}
AMQ224047 ERROR Failed to delete large message file
AMQ224048 ERROR Failed to remove temporary queue {0}
AMQ224049 ERROR Cannot find consumer with id {0}
AMQ224050 ERROR Failed to close connection {0}
AMQ224051 ERROR Failed to call notification listener
AMQ224052 ERROR Unable to call Hierarchical Repository Change Listener
AMQ224053 ERROR failed to timeout transaction, xid:{0}
AMQ224054 ERROR exception while stopping the replication manager
AMQ224055 ERROR Bridge Failed to ack
AMQ224056 ERROR Live server will not fail-back automatically
AMQ224057 ERROR Backup server that requested fail-back was not announced. Server will not stop for fail-back.
AMQ224058 ERROR Stopping ClusterManager. As it failed to authenticate with the cluster: {0}
AMQ224059 ERROR Invalid cipher suite specified. Supported cipher suites are: {0}
AMQ224060 ERROR Invalid protocol specified. Supported protocols are: {0}
AMQ224061 ERROR Setting both <{0}> and is invalid. Please use exclusively as <{0}> is deprecated. Ignoring <{0}> value.
AMQ224062 ERROR Failed to send SLOW_CONSUMER notification: {0}
AMQ224063 ERROR Failed to close consumer connections for address {0}
AMQ224064 ERROR Setting <{0}> is invalid with this HA Policy Configuration. Please use exclusively or remove. Ignoring <{0}> value.
AMQ224065 ERROR Failed to remove auto-created {1} {0}
AMQ224066 ERROR Error opening context for LDAP
AMQ224067 ERROR Error populating security roles from LDAP
AMQ224068 ERROR Unable to stop component: {0}
AMQ224069 ERROR Change detected in broker configuration file, but reload failed
AMQ224072 WARN Message Counter Sample Period too short: {0}
AMQ224073 INFO Using MAPPED Journal
AMQ224074 ERROR Failed to purge queue {0} on no consumers
AMQ224075 ERROR Cannot find pageTX id = {0}
AMQ224076 INFO Undeploying address {0}
AMQ224077 INFO Undeploying queue {0}
AMQ224078 WARN The size of duplicate cache detection () appears to be too large {0}. It should be no greater than the number of messages that can be squeezed into confirmation window buffer () {1}.
AMQ224079 ERROR The process for the virtual machine will be killed, as component {0} is not responsive
AMQ224080 ERROR The server process will now be stopped, as component {0} is not responsive
AMQ224081 WARN The component {0} is not responsive
AMQ224082 ERROR Failed to invoke an interceptor
AMQ224083 ERROR Failed to close context
AMQ224084 ERROR Failed to open context
AMQ224085 ERROR Failed to load property {0}, reason: {1}
AMQ224086 ERROR Caught unexpected exception
AMQ224087 ERROR Error announcing backup: backupServerLocator is null. {0}
AMQ224088 ERROR Timeout ({0} seconds) on acceptor "{1}" during protocol handshake with {2} has occurred.
AMQ224089 WARN Failed to calculate persistent size
AMQ224090 WARN This node is not configured for Quorum Voting, all nodes must be configured for HA
AMQ224091 WARN Bridge {0} is unable to connect to destination. Retrying
AMQ224092 INFO Despite disabled persistence, page files will be persisted.
AMQ224093 ERROR Reference to message is null
AMQ224094 TRACE Quorum vote result await is interrupted
AMQ224095 ERROR Error updating Consumer Count: {0}
AMQ224096 ERROR Error setting up connection from {0} to {1}; protocol {2} not found in map: {3}
AMQ224097 ERROR Failed to start server
AMQ224098 INFO Received a vote saying the backup is live with connector: {0}
AMQ224099 WARN Message with ID {0} has a header too large. More information available on debug level for class {1}
AMQ224100 INFO Timed out waiting for large messages deletion with IDs {0}, might not be deleted if broker crashes atm
AMQ224101 WARN Apache ActiveMQ Artemis is using a scheduled pool without remove on cancel policy, so a cancelled task could be not automatically removed from the work queue, it may also cause unbounded retention of cancelled tasks.
AMQ224102 INFO unable to undeploy address {0} : reason {1}
AMQ224103 INFO unable to undeploy queue {0} : reason {1}
AMQ224104 ERROR Error starting the Acceptor {0} {1}
AMQ224105 WARN Connecting to cluster failed
AMQ224106 ERROR failed to remove transaction, xid:{0}
AMQ224107 INFO The Critical Analyzer detected slow paths on the broker. It is recommended that you enable trace logs on org.apache.activemq.artemis.utils.critical while you troubleshoot this issue. You should disable the trace logs when you have finished troubleshooting.
AMQ224108 INFO Stopped paging on address ''{0}''; {1}
AMQ224109 WARN ConnectionRouter {0} not found
AMQ224110 WARN Configuration 'whitelist' is deprecated, please use the 'allowlist' configuration
AMQ224111 WARN Both 'whitelist' and 'allowlist' detected. Configuration 'whitelist' is deprecated, please use only the 'allowlist' configuration
AMQ224112 INFO Auto removing Queue {0} with queueID={1} on address={2}
AMQ224113 INFO Auto removing Address {0}
AMQ224114 INFO Address control block, blocking message production on address ''{0}''. Clients will not get further credit.
AMQ224115 INFO Address control unblock of address ''{0}''. Clients will be granted credit as normal.
AMQ224116 WARN The component {0} is not responsive during start up. The Server may be taking too long to start
AMQ224117 INFO "page-max-cache-size" being used on broker.xml. This configuration attribute is no longer used and it will be ignored.
AMQ332068 WARN connection closed {0}
AMQ332069 WARN Sent ERROR frame to STOMP client {0}: {1}
AMQ334023 ERROR Unable to send frame {0}
AMQ341000 INFO Failed to set up JMS bridge {1} connections. Most probably the source or target servers are unavailable. Will retry after a pause of {0} ms
AMQ341001 INFO JMS Bridge {0} succeeded in reconnecting to servers
AMQ341002 INFO JMSBridge {0} succeeded in connecting to servers
AMQ342000 WARN Attempt to start JMS Bridge {0}, but is already started
AMQ342001 WARN Failed to start JMS Bridge {0}
AMQ342002 WARN Failed to unregisted JMS Bridge {0} - {1}
AMQ342003 WARN JMS Bridge {0} unable to set up connections, bridge will be stopped
AMQ342004 WARN JMS Bridge {1}, will retry after a pause of {0} ms
AMQ342005 WARN JMS Bridge {0} unable to set up connections, bridge will not be started
AMQ342006 WARN JMS Bridge {0}, detected failure on bridge connection
AMQ342009 WARN JMS Bridge {0} failed to send + acknowledge batch, closing JMS objects
AMQ342010 WARN Failed to connect JMS Bridge {0}
AMQ342011 WARN Transaction rolled back, retrying TX
AMQ344001 ERROR JMS Bridge {0}, failed to start source connection
AMQ344002 ERROR Failed to start JMS Bridge {1}. QoS Mode: {0} requires a Transaction Manager, none found
AMQ352000 WARN Attempted to locate a Transaction Manager but none found.
AMQ601000 INFO User {0} is getting routing type property on target resource: {1} {2}
AMQ601001 INFO User {0} is getting routing type property as json on target resource: {1} {2}
AMQ601002 INFO User {0} is getting queue names on target resource: {1} {2}
AMQ601003 INFO User {0} is getting binding names on target resource: {1} {2}
AMQ601004 INFO User {0} is getting roles on target resource: {1} {2}
AMQ601005 INFO User {0} is getting roles as json on target resource: {1} {2}
AMQ601006 INFO User {0} is getting number of bytes per page on target resource: {1} {2}
AMQ601007 INFO User {0} is getting address size on target resource: {1} {2}
AMQ601008 INFO User {0} is getting number of messages on target resource: {1} {2}
AMQ601009 INFO User {0} is getting isPaging on target resource: {1} {2}
AMQ601010 INFO User {0} is getting number of pages on target resource: {1} {2}
AMQ601011 INFO User {0} is getting routed message count on target resource: {1} {2}
AMQ601012 INFO User {0} is getting unrouted message count on target resource: {1} {2}
AMQ601013 INFO User {0} is sending a message on target resource: {1} {2}
AMQ601014 INFO User {0} is getting name on target resource: {1} {2}
AMQ601015 INFO User {0} is getting address on target resource: {1} {2}
AMQ601016 INFO User {0} is getting filter on target resource: {1} {2}
AMQ601017 INFO User {0} is getting durable property on target resource: {1} {2}
AMQ601018 INFO User {0} is getting message count on target resource: {1} {2}
AMQ601019 INFO User {0} is getting mbean info on target resource: {1} {2}
AMQ601020 INFO User {0} is getting factory class name on target resource: {1} {2}
AMQ601021 INFO User {0} is getting parameters on target resource: {1} {2}
AMQ601022 INFO User {0} is doing reload on target resource: {1} {2}
AMQ601023 INFO User {0} is querying isStarted on target resource: {1} {2}
AMQ601024 INFO User {0} is starting an acceptor on target resource: {1} {2}
AMQ601025 INFO User {0} is stopping an acceptor on target resource: {1} {2}
AMQ601026 INFO User {0} is getting version on target resource: {1} {2}
AMQ601027 INFO User {0} is querying isBackup on target resource: {1} {2}
AMQ601028 INFO User {0} is querying isSharedStore on target resource: {1} {2}
AMQ601029 INFO User {0} is getting bindings directory on target resource: {1} {2}
AMQ601030 INFO User {0} is getting incoming interceptor class names on target resource: {1} {2}
AMQ601031 INFO User {0} is getting outgoing interceptor class names on target resource: {1} {2}
AMQ601032 INFO User {0} is getting journal buffer size on target resource: {1} {2}
AMQ601033 INFO User {0} is getting journal buffer timeout on target resource: {1} {2}
AMQ601034 INFO User {0} is setting failover on server shutdown on target resource: {1} {2}
AMQ601035 INFO User {0} is querying is-failover-on-server-shutdown on target resource: {1} {2}
AMQ601036 INFO User {0} is getting journal's max io on target resource: {1} {2}
AMQ601037 INFO User {0} is getting journal directory on target resource: {1} {2}
AMQ601038 INFO User {0} is getting journal file size on target resource: {1} {2}
AMQ601039 INFO User {0} is getting journal min files on target resource: {1} {2}
AMQ601040 INFO User {0} is getting journal compact min files on target resource: {1} {2}
AMQ601041 INFO User {0} is getting journal compact percentage on target resource: {1} {2}
AMQ601042 INFO User {0} is querying persistence enabled on target resource: {1} {2}
AMQ601043 INFO User {0} is getting journal type on target resource: {1} {2}
AMQ601044 INFO User {0} is getting paging directory on target resource: {1} {2}
AMQ601045 INFO User {0} is getting scheduled threadpool max size on target resource: {1} {2}
AMQ601046 INFO User {0} is getting threadpool max size on target resource: {1} {2}
AMQ601047 INFO User {0} is getting security invalidation interval on target resource: {1} {2}
AMQ601048 INFO User {0} is querying is-clustered on target resource: {1} {2}
AMQ601049 INFO User {0} is querying is-create-bindings-dir on target resource: {1} {2}
AMQ601050 INFO User {0} is querying is-create-journal-dir on target resource: {1} {2}
AMQ601051 INFO User {0} is querying is-journal-sync-non-transactional on target resource: {1} {2}
AMQ601052 INFO User {0} is querying is-journal-sync-transactional on target resource: {1} {2}
AMQ601053 INFO User {0} is querying is-security-enabled on target resource: {1} {2}
AMQ601054 INFO User {0} is query is-async-connection-execution-enabled on target resource: {1} {2}
AMQ601055 INFO User {0} is getting disk scan period on target resource: {1} {2}
AMQ601056 INFO User {0} is getting max disk usage on target resource: {1} {2}
AMQ601057 INFO User {0} is getting global max size on target resource: {1} {2}
AMQ601058 INFO User {0} is getting address memory usage on target resource: {1} {2}
AMQ601059 INFO User {0} is getting address memory usage percentage on target resource: {1} {2}
AMQ601060 INFO User {0} is freezing replication on target resource: {1} {2}
AMQ601061 INFO User {0} is creating an address on target resource: {1} {2}
AMQ601062 INFO User {0} is updating an address on target resource: {1} {2}
AMQ601063 INFO User {0} is deleting an address on target resource: {1} {2}
AMQ601064 INFO User {0} is creating a queue on target resource: {1} {2}
AMQ601065 INFO User {0} is creating a queue on target resource: {1} {2}
AMQ601066 INFO User {0} is updating a queue on target resource: {1} {2}
AMQ601067 INFO User {0} is getting cluster connection names on target resource: {1} {2}
AMQ601068 INFO User {0} is getting uptime on target resource: {1} {2}
AMQ601069 INFO User {0} is getting uptime in milliseconds on target resource: {1} {2}
AMQ601070 INFO User {0} is querying is-replica-sync on target resource: {1} {2}
AMQ601071 INFO User {0} is getting address names on target resource: {1} {2}
AMQ601072 INFO User {0} is deleting a queue on target resource: {1} {2}
AMQ601073 INFO User {0} is getting address info on target resource: {1} {2}
AMQ601074 INFO User {0} is listing bindings for address on target resource: {1} {2}
AMQ601075 INFO User {0} is listing addresses on target resource: {1} {2}
AMQ601076 INFO User {0} is getting connection count on target resource: {1} {2}
AMQ601077 INFO User {0} is getting total connection count on target resource: {1} {2}
AMQ601078 INFO User {0} is getting total message count on target resource: {1} {2}
AMQ601079 INFO User {0} is getting total messages added on target resource: {1} {2}
AMQ601080 INFO User {0} is getting total messages acknowledged on target resource: {1} {2}
AMQ601081 INFO User {0} is getting total consumer count on target resource: {1} {2}
AMQ601082 INFO User {0} is enabling message counters on target resource: {1} {2}
AMQ601083 INFO User {0} is disabling message counters on target resource: {1} {2}
AMQ601084 INFO User {0} is resetting all message counters on target resource: {1} {2}
AMQ601085 INFO User {0} is resetting all message counter histories on target resource: {1} {2}
AMQ601086 INFO User {0} is querying is-message-counter-enabled on target resource: {1} {2}
AMQ601087 INFO User {0} is getting message counter sample period on target resource: {1} {2}
AMQ601088 INFO User {0} is setting message counter sample period on target resource: {1} {2}
AMQ601089 INFO User {0} is getting message counter max day count on target resource: {1} {2}
AMQ601090 INFO User {0} is setting message counter max day count on target resource: {1} {2}
AMQ601091 INFO User {0} is listing prepared transactions on target resource: {1} {2}
AMQ601092 INFO User {0} is listing prepared transaction details as json on target resource: {1} {2}
AMQ601093 INFO User {0} is listing prepared transaction details as HTML on target resource: {1} {2}
AMQ601094 INFO User {0} is listing heuristic committed transactions on target resource: {1} {2}
AMQ601095 INFO User {0} is listing heuristic rolled back transactions on target resource: {1} {2}
AMQ601096 INFO User {0} is commiting prepared transaction on target resource: {1} {2}
AMQ601097 INFO User {0} is rolling back prepared transaction on target resource: {1} {2}
AMQ601098 INFO User {0} is listing remote addresses on target resource: {1} {2}
AMQ601099 INFO User {0} is closing connections for address on target resource: {1} {2}
AMQ601100 INFO User {0} is closing consumer connections for address on target resource: {1} {2}
AMQ601101 INFO User {0} is closing connections for user on target resource: {1} {2}
AMQ601102 INFO User {0} is closing a connection by ID on target resource: {1} {2}
AMQ601103 INFO User {0} is closing session with id on target resource: {1} {2}
AMQ601104 INFO User {0} is closing consumer with id on target resource: {1} {2}
AMQ601105 INFO User {0} is listing connection IDs on target resource: {1} {2}
AMQ601106 INFO User {0} is listing sessions on target resource: {1} {2}
AMQ601107 INFO User {0} is listing producers info as json on target resource: {1} {2}
AMQ601108 INFO User {0} is listing connections on target resource: {1} {2}
AMQ601109 INFO User {0} is listing consumers on target resource: {1} {2}
AMQ601110 INFO User {0} is listing queues on target resource: {1} {2}
AMQ601111 INFO User {0} is listing producers on target resource: {1} {2}
AMQ601112 INFO User {0} is listing connections as json on target resource: {1} {2}
AMQ601113 INFO User {0} is listing sessions as json on target resource: {1} {2}
AMQ601114 INFO User {0} is listing all sessions as json on target resource: {1} {2}
AMQ601115 INFO User {0} is listing consumers as json on target resource: {1} {2}
AMQ601116 INFO User {0} is listing all consumers as json on target resource: {1} {2}
AMQ601117 INFO User {0} is getting connectors on target resource: {1} {2}
AMQ601118 INFO User {0} is getting connectors as json on target resource: {1} {2}
AMQ601119 INFO User {0} is adding security settings on target resource: {1} {2}
AMQ601120 INFO User {0} is removing security settings on target resource: {1} {2}
AMQ601121 INFO User {0} is getting address settings as json on target resource: {1} {2}
AMQ601122 INFO User {0} is adding addressSettings on target resource: {1} {2}
AMQ601123 INFO User {0} is removing address settings on target resource: {1} {2}
AMQ601124 INFO User {0} is getting divert names on target resource: {1} {2}
AMQ601125 INFO User {0} is creating a divert on target resource: {1} {2}
AMQ601126 INFO User {0} is destroying a divert on target resource: {1} {2}
AMQ601127 INFO User {0} is getting bridge names on target resource: {1} {2}
AMQ601128 INFO User {0} is creating a bridge on target resource: {1} {2}
AMQ601129 INFO User {0} is destroying a bridge on target resource: {1} {2}
AMQ601130 INFO User {0} is creating connector service on target resource: {1} {2}
AMQ601131 INFO User {0} is destroying connector service on target resource: {1} {2}
AMQ601132 INFO User {0} is getting connector services on target resource: {1} {2}
AMQ601133 INFO User {0} is forceing a failover on target resource: {1} {2}
AMQ601134 INFO User {0} is performing scale down on target resource: {1} {2}
AMQ601135 INFO User {0} is listing network topology on target resource: {1} {2}
AMQ601136 INFO User {0} is removing notification listener on target resource: {1} {2}
AMQ601137 INFO User {0} is adding notification listener on target resource: {1} {2}
AMQ601138 INFO User {0} is getting notification info on target resource: {1} {2}
AMQ601139 INFO User {0} is getting connection ttl override on target resource: {1} {2}
AMQ601140 INFO User {0} is getting ID cache size on target resource: {1} {2}
AMQ601141 INFO User {0} is getting large message directory on target resource: {1} {2}
AMQ601142 INFO User {0} is getting management address on target resource: {1} {2}
AMQ601143 INFO User {0} is getting node ID on target resource: {1} {2}
AMQ601144 INFO User {0} is getting management notification address on target resource: {1} {2}
AMQ601145 INFO User {0} is getting message expiry scan period on target resource: {1} {2}
AMQ601146 INFO User {0} is getting message expiry thread priority on target resource: {1} {2}
AMQ601147 INFO User {0} is getting transaction timeout on target resource: {1} {2}
AMQ601148 INFO User {0} is getting transaction timeout scan period on target resource: {1} {2}
AMQ601149 INFO User {0} is querying is-persist-delivery-before-delivery on target resource: {1} {2}
AMQ601150 INFO User {0} is querying is-persist-id-cache on target resource: {1} {2}
AMQ601151 INFO User {0} is querying is-wildcard-routing-enabled on target resource: {1} {2}
AMQ601152 INFO User {0} is adding a user on target resource: {1} {2}
AMQ601153 INFO User {0} is listing a user on target resource: {1} {2}
AMQ601154 INFO User {0} is removing a user on target resource: {1} {2}
AMQ601155 INFO User {0} is resetting a user on target resource: {1} {2}
AMQ601156 INFO User {0} is getting user property on target resource: {1} {2}
AMQ601157 INFO User {0} is getting routing type property on target resource: {1} {2}
AMQ601158 INFO User {0} is getting temporary property on target resource: {1} {2}
AMQ601159 INFO User {0} is getting persistent size on target resource: {1} {2}
AMQ601160 INFO User {0} is getting durable message count on target resource: {1} {2}
AMQ601161 INFO User {0} is getting durable persist size on target resource: {1} {2}
AMQ601162 INFO User {0} is getting consumer count on target resource: {1} {2}
AMQ601163 INFO User {0} is getting delivering count on target resource: {1} {2}
AMQ601164 INFO User {0} is getting delivering size on target resource: {1} {2}
AMQ601165 INFO User {0} is getting durable delivering count on target resource: {1} {2}
AMQ601166 INFO User {0} is getting durable delivering size on target resource: {1} {2}
AMQ601167 INFO User {0} is getting messages added on target resource: {1} {2}
AMQ601168 INFO User {0} is getting messages acknowledged on target resource: {1} {2}
AMQ601169 INFO User {0} is getting messages expired on target resource: {1} {2}
AMQ601170 INFO User {0} is getting messages killed on target resource: {1} {2}
AMQ601171 INFO User {0} is getting ID on target resource: {1} {2}
AMQ601172 INFO User {0} is getting scheduled count on target resource: {1} {2}
AMQ601173 INFO User {0} is getting scheduled size on target resource: {1} {2}
AMQ601174 INFO User {0} is getting durable scheduled count on target resource: {1} {2}
AMQ601175 INFO User {0} is getting durable scheduled size on target resource: {1} {2}
AMQ601176 INFO User {0} is getting dead letter address on target resource: {1} {2}
AMQ601177 INFO User {0} is getting expiry address on target resource: {1} {2}
AMQ601178 INFO User {0} is getting max consumers on target resource: {1} {2}
AMQ601179 INFO User {0} is getting purge-on-consumers property on target resource: {1} {2}
AMQ601180 INFO User {0} is getting configuration-managed property on target resource: {1} {2}
AMQ601181 INFO User {0} is getting exclusive property on target resource: {1} {2}
AMQ601182 INFO User {0} is getting last-value property on target resource: {1} {2}
AMQ601183 INFO User {0} is listing scheduled messages on target resource: {1} {2}
AMQ601184 INFO User {0} is listing scheduled messages as json on target resource: {1} {2}
AMQ601185 INFO User {0} is listing delivering messages on target resource: {1} {2}
AMQ601186 INFO User {0} is listing delivering messages as json on target resource: {1} {2}
AMQ601187 INFO User {0} is listing messages on target resource: {1} {2}
AMQ601188 INFO User {0} is listing messages as json on target resource: {1} {2}
AMQ601189 INFO User {0} is getting first message on target resource: {1} {2}
AMQ601190 INFO User {0} is getting first message as json on target resource: {1} {2}
AMQ601191 INFO User {0} is getting first message's timestamp on target resource: {1} {2}
AMQ601192 INFO User {0} is getting first message's age on target resource: {1} {2}
AMQ601193 INFO User {0} is counting messages on target resource: {1} {2}
AMQ601194 INFO User {0} is counting delivery messages on target resource: {1} {2}
AMQ601195 INFO User {0} is removing a message on target resource: {1} {2}
AMQ601196 INFO User {0} is removing messages on target resource: {1} {2}
AMQ601197 INFO User {0} is expiring messages on target resource: {1} {2}
AMQ601198 INFO User {0} is expiring messages on target resource: {1} {2}
AMQ601199 INFO User {0} is retry sending message on target resource: {1} {2}
AMQ601200 INFO User {0} is retry sending messages on target resource: {1} {2}
AMQ601201 INFO User {0} is moving a message to another queue on target resource: {1} {2}
AMQ601202 INFO User {0} is moving messages to another queue on target resource: {1} {2}
AMQ601203 INFO User {0} is sending messages to dead letter address on target resource: {1} {2}
AMQ601204 INFO User {0} is sending messages to dead letter address on target resource: {1} {2}
AMQ601205 INFO User {0} is changing message's priority on target resource: {1} {2}
AMQ601206 INFO User {0} is changing a message's priority on target resource: {1} {2}
AMQ601207 INFO User {0} is listing message counter on target resource: {1} {2}
AMQ601208 INFO User {0} is resetting message counter on target resource: {1} {2}
AMQ601209 INFO User {0} is listing message counter as HTML on target resource: {1} {2}
AMQ601210 INFO User {0} is listing message counter history on target resource: {1} {2}
AMQ601211 INFO User {0} is listing message counter history as HTML on target resource: {1} {2}
AMQ601212 INFO User {0} is pausing on target resource: {1} {2}
AMQ601213 INFO User {0} is resuming on target resource: {1} {2}
AMQ601214 INFO User {0} is getting paused property on target resource: {1} {2}
AMQ601215 INFO User {0} is browsing a queue on target resource: {1} {2}
AMQ601216 INFO User {0} is flushing executor on target resource: {1} {2}
AMQ601217 INFO User {0} is resetting all groups on target resource: {1} {2}
AMQ601218 INFO User {0} is resetting group on target resource: {1} {2}
AMQ601219 INFO User {0} is getting group count on target resource: {1} {2}
AMQ601220 INFO User {0} is listing groups as json on target resource: {1} {2}
AMQ601221 INFO User {0} is resetting added messages on target resource: {1} {2}
AMQ601222 INFO User {0} is resetting acknowledged messages on target resource: {1} {2}
AMQ601223 INFO User {0} is resetting expired messages on target resource: {1} {2}
AMQ601224 INFO User {0} is resetting killed messages on target resource: {1} {2}
AMQ601225 INFO User {0} is getting static connectors on target resource: {1} {2}
AMQ601226 INFO User {0} is getting forwarding address on target resource: {1} {2}
AMQ601227 INFO User {0} is getting the queue name on target resource: {1} {2}
AMQ601228 INFO User {0} is getting discovery group name on target resource: {1} {2}
AMQ601229 INFO User {0} is getting filter string on target resource: {1} {2}
AMQ601230 INFO User {0} is getting reconnect attempts on target resource: {1} {2}
AMQ601231 INFO User {0} is getting retry interval on target resource: {1} {2}
AMQ601232 INFO User {0} is getting retry interval multiplier on target resource: {1} {2}
AMQ601233 INFO User {0} is getting transformer class name on target resource: {1} {2}
AMQ601234 INFO User {0} is getting transformer properties as json on target resource: {1} {2}
AMQ601235 INFO User {0} is getting transformer properties on target resource: {1} {2}
AMQ601236 INFO User {0} is checking if bridge started on target resource: {1} {2}
AMQ601237 INFO User {0} is querying use duplicate detection on target resource: {1} {2}
AMQ601238 INFO User {0} is querying isHA on target resource: {1} {2}
AMQ601239 INFO User {0} is starting a bridge on target resource: {1} {2}
AMQ601240 INFO User {0} is stopping a bridge on target resource: {1} {2}
AMQ601241 INFO User {0} is getting messages pending acknowledgement on target resource: {1} {2}
AMQ601242 INFO User {0} is getting metrics on target resource: {1} {2}
AMQ601243 INFO User {0} is getting broadcast period on target resource: {1} {2}
AMQ601244 INFO User {0} is getting connector pairs on target resource: {1} {2}
AMQ601245 INFO User {0} is getting connector pairs as json on target resource: {1} {2}
AMQ601246 INFO User {0} is getting group address on target resource: {1} {2}
AMQ601247 INFO User {0} is getting group port on target resource: {1} {2}
AMQ601248 INFO User {0} is getting local binding port on target resource: {1} {2}
AMQ601249 INFO User {0} is starting broadcasting group on target resource: {1} {2}
AMQ601250 INFO User {0} is stopping broadcasting group on target resource: {1} {2}
AMQ601251 INFO User {0} is getting max hops on target resource: {1} {2}
AMQ601252 INFO User {0} is geting static connectors as json on target resource: {1} {2}
AMQ601253 INFO User {0} is querying use duplicate detection on target resource: {1} {2}
AMQ601254 INFO User {0} is getting message loadbalancing type on target resource: {1} {2}
AMQ601255 INFO User {0} is getting topology on target resource: {1} {2}
AMQ601256 INFO User {0} is getting nodes on target resource: {1} {2}
AMQ601257 INFO User {0} is start cluster connection on target resource: {1} {2}
AMQ601258 INFO User {0} is stop cluster connection on target resource: {1} {2}
AMQ601259 INFO User {0} is getting bridge metrics on target resource: {1} {2}
AMQ601260 INFO User {0} is getting routing name on target resource: {1} {2}
AMQ601261 INFO User {0} is getting unique name on target resource: {1} {2}
AMQ601262 INFO User {0} is creating address on target resource: {1} {2}
AMQ601263 INFO User {0} is handling a management message on target resource {1} {2}
AMQ601264 INFO User {0} gets security check failure
AMQ601265 INFO User {0} is creating a core consumer on target resource {1} {2}
AMQ601266 INFO User {0} is creating a shared queue on target resource {1} {2}
AMQ601267 INFO User {0} is creating a core session on target resource {1} {2}
AMQ601269 INFO User {0} is getting messages acknowledged attempts on target resource: {1} {2}
AMQ601270 INFO User {0} is getting ring size on target resource: {1} {2}
AMQ601271 INFO User {0} is getting retroactiveResource property on target resource: {1} {2}
AMQ601272 INFO User {0} is getting disk store usage on target resource: {1} {2}
AMQ601273 INFO User {0} is getting disk store usage percentage on target resource: {1} {2}
AMQ601274 INFO User {0} is getting group rebalance property on target resource: {1} {2}
AMQ601275 INFO User {0} is getting group buckets on target resource: {1} {2}
AMQ601276 INFO User {0} is getting group first key on target resource: {1} {2}
AMQ601500 INFO User {0} sent a message {1}, context: {2}, transaction: {3}
AMQ601501 INFO User {0} is consuming a message from {1}: {2}
AMQ601502 INFO User {0} acknowledged message from {1}: {2}, transaction: {3}
AMQ601509 INFO User {0} is getting currentDuplicateIdCacheSize property on target resource: {1} {2}
AMQ601510 INFO User {0} is clearing duplicate ID cache on target resource: {1} {2}
AMQ601511 INFO User {0} is getting channelName property on target resource: {1} {2}
AMQ601512 INFO User {0} is getting fileContents property on target resource: {1} {2}
AMQ601513 INFO User {0} is getting file property on target resource: {1} {2}
AMQ601514 INFO User {0} is getting preparedTransactionMessageCount property on target resource: {1} {2}
AMQ601701 INFO User {0} successfully created address: {1} with routing types {2}
AMQ601702 INFO User {0} failed to created address: {1} with routing types {2}
AMQ601703 INFO User {0} successfully updated address: {1} with routing types {2}
AMQ601704 INFO User {0} successfully updated address: {1} with routing types {2}
AMQ601705 INFO User {0} successfully deleted address: {1}
AMQ601706 INFO User {0} failed to deleted address: {1}
AMQ601707 INFO User {0} successfully created queue: {1} on address: {2} with routing type {3}
AMQ601708 INFO User {0} failed to create queue: {1} on address: {2} with routing type {3}
AMQ601709 INFO User {0} successfully updated queue: {1} with routing type {2}
AMQ601710 INFO User {0} failed to update queue: {1} with routing type {2}
AMQ601711 INFO User {0} successfully deleted queue: {1}
AMQ601712 INFO User {0} failed to delete queue: {1}
AMQ601713 INFO User {0} has removed {1} messages from queue: {2}
AMQ601714 INFO User {0} failed to remove messages from queue: {1}
AMQ601715 INFO User {0} successfully authenticated
AMQ601716 INFO User {0} failed authentication, reason: {1}
AMQ601717 INFO User {0} accessed {2} on management object {1}
AMQ601718 INFO User {0} does not have correct role to access {2} on management object {1}
AMQ601719 INFO User {0} has paused queue {1}
AMQ601720 INFO User {0} failed to pause queue {1}
AMQ601721 INFO User {0} has resumed queue {1}
AMQ601722 INFO User {0} failed to resume queue {1}
AMQ601723 INFO User {0} sent message to {1} as user {2}
AMQ601724 INFO User {0} failed to send message to {1} as user {2}
AMQ601725 INFO User {0} browsed {2} messages from queue {1}
AMQ601726 INFO User {0} failed to browse messages from queue {1}
AMQ601727 INFO User {0} is updating a divert on target resource: {1} {2}
AMQ601728 INFO User {0} is getting enabled property on target resource: {1} {2}
AMQ601729 INFO User {0} is disabling on target resource: {1} {2}
AMQ601730 INFO User {0} is enabling on target resource: {1} {2}
AMQ601731 INFO User {0} has paused address {1}
AMQ601732 INFO User {0} failed to pause address {1}
AMQ601733 INFO User {0} has resumed address {1}
AMQ601734 INFO User {0} failed to resume address {1}
AMQ601735 INFO User {0} is getting group rebalance pause dispatch property on target resource: {1} {2}
AMQ601736 INFO User {0} is getting authentication cache size on target resource: {1} {2}
AMQ601737 INFO User {0} is getting authorization cache size on target resource: {1} {2}
AMQ601738 INFO User {0} is requesting a list of broker connections
AMQ601739 INFO User {0} is requesting to stop broker connection {1}
AMQ601740 INFO User {0} is requesting to start broker connection {1}
AMQ601741 INFO User {0} is getting address count on target resource: {1} {2}
AMQ601742 INFO User {0} is getting the queue count on target resource: {1} {2}
AMQ601743 INFO User {0} is getting last-value-key property on target resource: {1} {2}
AMQ601744 INFO User {0} is getting consumers-before-dispatch property on target resource: {1} {2}
AMQ601745 INFO User {0} is getting delay-before-dispatch property on target resource: {1} {2}
AMQ601746 INFO User {0} is getting internal property on target resource: {1} {2}
AMQ601747 INFO User {0} is getting auto-created property on target resource: {1} {2}
AMQ601748 INFO User {0} is getting max retry interval on target resource: {1} {2}
AMQ601749 INFO User {0} is getting activation sequence on target resource: {1} {2}
AMQ601750 INFO User {0} is purging target resource: {1} {2}
AMQ601751 INFO User {0} has purged address {1}
AMQ601752 INFO User {0} failed to purge address {1}
AMQ601753 INFO User {0} is getting address limit % on target resource: {1} {2}
AMQ601754 INFO User {0} is blocking target resource: {1}
AMQ601755 INFO User {0} is unblocking target resource: {1}
AMQ601756 INFO User {0} is getting acceptors on target resource: {1} {2}
AMQ601757 INFO User {0} is getting acceptors as json on target resource: {1} {2}
AMQ601758 INFO User {0} is calling schedulePageCleanup on address: {1}
AMQ601759 INFO User {0} added acknowledgement of a message from {1}: {2} to transaction: {3}
AMQ601760 INFO User {0} added a message send for: {1} to transaction: {2}
AMQ601761 INFO User {0} rolled back transaction {1} involving {2}
AMQ601762 INFO User {0} is adding a connector on target resource: {1} {2}
AMQ601763 INFO User {0} is removing a connector on target resource: {1} {2}
AMQ601764 INFO User {0} is calling deliverScheduledMessage on queue: {1} {2}
AMQ601765 INFO User {0} is getting status on target resource: {1}
AMQ841000 INFO created connection: {0}
AMQ841001 INFO destroyed connection: {0}
AMQ841002 INFO created session name: {0}, session connectionID: {1}
AMQ841003 INFO closed session with session name: {0}, failed: {1}
AMQ841004 INFO added session metadata for session name : {0}, key: {1}, data: {2}
AMQ841005 INFO created consumer with ID: {0}, with session name: {1}
AMQ841006 INFO closed consumer ID: {0}, with consumer Session: {1}, failed: {2}
AMQ841007 INFO created queue: {0}
AMQ841008 INFO destroyed queue: {0}, with args address: {1}, session: {2}, checkConsumerCount: {3}, removeConsumers: {4}, autoDeleteAddress: {5}
AMQ841009 INFO sent message with ID: {0}, result: {1}, transaction: {2}
AMQ841010 INFO routed message with ID: {0}, result: {1}
AMQ841011 INFO delivered message with message ID: {0}, consumer info UNAVAILABLE
AMQ841012 INFO delivered message with message ID: {0}, to consumer on address: {1}, queue: {2}, consumer sessionID: {3}, consumerID: {4}
AMQ841013 INFO expired message: {0}, messageExpiryAddress: {1}
AMQ841014 INFO messageAcknowledged: {0}, with transaction: {2}
AMQ841015 INFO deployed bridge: {0}
AMQ841016 INFO criticalFailure called with criticalComponent: {0}
AMQ841017 INFO error sending message with ID: {0}, session name: {1}, session connectionID: {2}, exception: {3}
AMQ841018 INFO error routing message with ID: {0}, exception: {1}
AMQ843000 DEBUG beforeCreateSession called with name: {0}, username: {1}, minLargeMessageSize: {2}, connection: {3}, autoCommitSends: {4}, autoCommitAcks: {5}, preAcknowledge: {6}, xa: {7}, publicAddress: {8}
AMQ843001 DEBUG beforeCloseSession called with session name : {0}, session: {1}, failed: {2}
AMQ843002 DEBUG beforeSessionMetadataAdded called with session name: {0} , session: {1}, key: {2}, data: {3}
AMQ843003 DEBUG added session metadata for session name : {0}, session: {1}, key: {2}, data: {3}
AMQ843004 DEBUG beforeCreateConsumer called with ConsumerID: {0}, QueueBinding: {1}, filterString: {2}, browseOnly: {3}, supportLargeMessage: {4}
AMQ843005 DEBUG beforeCloseConsumer called with consumer: {0}, consumer sessionID: {1}, failed: {2}
AMQ843006 DEBUG beforeCreateQueue called with queueConfig: {0}
AMQ843007 DEBUG beforeDestroyQueue called with queueName: {0}, session: {1}, checkConsumerCount: {2}, removeConsumers: {3}, autoDeleteAddress: {4}
AMQ843008 DEBUG beforeSend called with message: {0}, tx: {1}, session: {2}, direct: {3}, noAutoCreateQueue: {4}
AMQ843009 DEBUG afterSend message: {0}, result: {1}, transaction: {2}, session: {3}, connection: {4}, direct: {5}, noAutoCreateQueue: {6}
AMQ843010 DEBUG beforeMessageRoute called with message: {0}, context: {1}, direct: {2}, rejectDuplicates: {3}
AMQ843011 DEBUG afterMessageRoute message: {0}, with context: {1}, direct: {2}, rejectDuplicates: {3}
AMQ843012 DEBUG beforeDeliver called with consumer: {0}, reference: {1}
AMQ843013 DEBUG delivered message with message ID: {0} to consumer on address: {1}, queue: {2}, consumer sessionID: {3}, consumerID: {4}, full message reference: {5}, full consumer: {6}
AMQ843014 DEBUG messageAcknowledged ID: {0}, sessionID: {1}, consumerID: {2}, queue: {3}, transaction: {4}, ackReason: {5}
AMQ843015 DEBUG beforeDeployBridge called with bridgeConfiguration: {0}
AMQ843016 DEBUG onSendError message ID: {0}, message {1}, session name: {2} with tx: {3}, session: {4}, direct: {5}, noAutoCreateQueue: {6}
AMQ843017 DEBUG onMessageRouteError message: {0}, with context: {1}, direct: {2}, rejectDuplicates: {3}
AMQ843020 DEBUG rolled back transaction {0} involving {1}

ARJUNA

Code Level Return Type Message
ARJUNA012001 WARN ActivationRecord::set_value() called illegally
ARJUNA012002 WARN Invocation of ActivationRecord::restore_state for {0} inappropriate - ignored for {1}
ARJUNA012003 WARN Attempted abort operation on deleted object id {0} of type {1} ignored
ARJUNA012005 WARN DisposeRecord::save_state - failed
ARJUNA012006 WARN DisposeRecord::save_state - no object store defined.
ARJUNA012008 WARN DisposeRecord::topLevelCommit - exception while deleting state
ARJUNA012009 WARN PersistenceRecord::restore_state: Failed to unpack object store type
ARJUNA012011 WARN PersistenceRecord::save_state - packing top level state failed
ARJUNA012012 WARN PersistenceRecord::save_state - failed
ARJUNA012013 WARN PersistenceRecord::save_state - no object store defined for object
ARJUNA012015 WARN PersistenceRecord::topLevelAbort() - Could not remove state from object store!
ARJUNA012016 WARN PersistenceRecord::topLevelCommit - commit_state call failed for {0}
ARJUNA012017 WARN PersistenceRecord::topLevelAbort() - Received ObjectStoreException
ARJUNA012018 WARN PersistenceRecord.topLevelPrepare - write_uncommitted error
ARJUNA012019 WARN PersistenceRecord::topLevelCommit - no state to commit!
ARJUNA012020 WARN PersistenceRecord::topLevelCommit - caught exception
ARJUNA012021 WARN PersistenceRecord::topLevelCommit - no object store specified!
ARJUNA012022 WARN PersistenceRecord::topLevelCommit - commit_state error
ARJUNA012023 WARN PersistenceRecord deactivate error, object probably already deactivated!
ARJUNA012024 WARN PersistenceRecord.topLevelPrepare - setup error!
ARJUNA012025 WARN RecoveryRecord::setValue not given OutputObjectState.
ARJUNA012026 WARN RecoveryRecord::nestedAbort - restore_state on object failed!
ARJUNA012027 WARN LockManager::terminate() should be invoked in every destructor
ARJUNA012028 WARN StateManager::modified() invocation on an object whose state has not been restored - activating object
ARJUNA012029 WARN Delete called on object with uid {0} and type {1} within atomic action.
ARJUNA012030 WARN StateManager.cleanup - could not save_state from terminate!
ARJUNA012031 WARN Attempt to use volatile store.
ARJUNA012032 java.lang.String Volatile store not implemented!
ARJUNA012033 java.lang.String Invalid object state.
ARJUNA012035 WARN Activate of object with id = {0} and type {1} unexpectedly failed
ARJUNA012036 WARN StateManager::deactivate - object store error
ARJUNA012037 WARN StateManager::deactivate - save_state error
ARJUNA012038 WARN StateManager.destroy - failed to add abstract record to transaction {0}; check transaction status.
ARJUNA012039 WARN StateManager.destroy - caught object store exception
ARJUNA012040 WARN StateManager.destroy - called on non-persistent or new object!
ARJUNA012041 WARN StateManager.restore_state - could not find StateManager state in object state!
ARJUNA012043 WARN Mutex.unlock - called by non-owning thread!
ARJUNA012044 WARN cannot get local host.
ARJUNA012046 java.lang.String Uid.Uid recreate constructor could not recreate Uid!
ARJUNA012047 java.lang.String Uid.Uid string constructor could not create nullUid
ARJUNA012048 WARN Uid general parsing error: {0}
ARJUNA012049 FATAL Uid.Uid string constructor could not create nullUid for incorrect string: {0}
ARJUNA012050 java.lang.String Uid.Uid string constructor incorrect: {0}
ARJUNA012051 WARN Uid.generateHash called for invalid Uid. Will ignore.
ARJUNA012055 WARN Exception thrown creating Uid from bytes!
ARJUNA012056 WARN Exception thrown getting bytes!
ARJUNA012057 WARN Uid.Uid string constructor {0} caught other throwable
ARJUNA012058 WARN AbstractRecord.create {0} failed to find record.
ARJUNA012059 java.lang.String Memory exhausted.
ARJUNA012060 WARN Action nesting error - deletion of action id {0} invoked while child actions active
ARJUNA012061 WARN Aborting child {0}
ARJUNA012062 WARN BasicAction.restore_state - could not recover {0}
ARJUNA012063 WARN BasicAction.restore_state - error unpacking action status.
ARJUNA012065 WARN BasicAction.Begin of action {0} ignored - incorrect invocation sequence {1}
ARJUNA012066 WARN Destructor of still running action id {0} invoked - Aborting
ARJUNA012067 WARN BasicAction.Begin of action {0} ignored - no parent and set as nested action!
ARJUNA012068 WARN BasicAction.Begin of action {0} ignored - parent action {1} is not running: {2}
ARJUNA012070 WARN End called on non-running atomic action {0}
ARJUNA012071 WARN End called on already committed atomic action {0}
ARJUNA012072 WARN End called illegally on atomic action {0}
ARJUNA012073 WARN BasicAction.End() - prepare phase of action-id {0} failed.
ARJUNA012074 WARN Received heuristic: {0} .
ARJUNA012075 WARN Action Aborting
ARJUNA012076 WARN Abort called on non-running atomic action {0}
ARJUNA012077 WARN Abort called on already aborted atomic action {0}
ARJUNA012078 WARN Abort called illegaly on atomic action {0}
ARJUNA012079 WARN BasicAction {0} - non-empty ( {1} ) pendingList {2}
ARJUNA012080 WARN Transaction {0} marked as rollback only. Will abort.
ARJUNA012081 WARN Cannot force parent to rollback - no handle!
ARJUNA012082 WARN BasicAction::prepare - creating intentions list failed for {0}
ARJUNA012083 WARN BasicAction::prepare - intentions list write failed for {0}
ARJUNA012084 WARN One-phase commit of action {0} received heuristic decision: {1}
ARJUNA012085 FATAL BasicAction.onePhaseCommit failed - no object store for atomic action state!
ARJUNA012086 WARN Prepare phase of nested action {0} received inconsistent outcomes.
ARJUNA012087 WARN Activate of atomic action with id {0} and type {1} unexpectedly failed, could not load state.
ARJUNA012088 WARN Prepare phase of action {0} received heuristic decision: {1}
ARJUNA012089 WARN Top-level abort of action {0} received heuristic decision: {1}
ARJUNA012090 WARN Nested abort of action {0} received heuristic decision: {1}
ARJUNA012091 WARN Top-level abort of action {0} received {1} from {2}
ARJUNA012092 WARN Nested abort of action {0} received {1} from {2}
ARJUNA012093 WARN BasicAction.checkIsCurrent {0} - terminating non-current transaction: {1}
ARJUNA012094 WARN Commit of action id {0} invoked while multiple threads active within it.
ARJUNA012095 WARN Abort of action id {0} invoked while multiple threads active within it.
ARJUNA012096 WARN Commit of action id {0} invoked while child actions active
ARJUNA012097 WARN Deactivate of atomic action with id {0} and type {1} unexpectedly failed, could not save state.
ARJUNA012098 WARN Abort of action id {0} invoked while child actions active
ARJUNA012099 WARN Aborting child: {0}
ARJUNA012100 WARN Now aborting self: {0}
ARJUNA012101 WARN BasicAction.updateState - Could not create ObjectState for failedList
ARJUNA012102 WARN BasicAction.End - Could not write failed list
ARJUNA012103 WARN (Internal) BasicAction.merge - record rejected
ARJUNA012104 java.lang.String No object store for:
ARJUNA012105 WARN Could not remove intentions list:
ARJUNA012107 WARN CheckedAction::check - atomic action {0} commiting with {1} threads active!
ARJUNA012108 WARN CheckedAction::check - atomic action {0} aborting with {1} threads active!
ARJUNA012109 java.lang.String TransactionReaper - attempting to insert an element that is already present.
ARJUNA012110 WARN TransactionReaper::check successfuly marked TX {0} as rollback only
ARJUNA012111 WARN TransactionReaper::check failed to mark TX {0} as rollback only
ARJUNA012112 WARN TransactionReaper::check exception while marking TX {0} as rollback only
ARJUNA012113 WARN TransactionReaper::doCancellations worker {0} missed interrupt when cancelling TX {1} -- exiting as zombie (zombie count decremented to {2})
ARJUNA012114 WARN TransactionReaper::doCancellations worker {0} successfuly marked TX {1} as rollback only
ARJUNA012115 WARN TransactionReaper::doCancellations worker {0} failed to mark TX {1} as rollback only
ARJUNA012116 WARN TransactionReaper::doCancellations worker {0} exception while marking TX {1} as rollback only
ARJUNA012117 WARN TransactionReaper::check processing TX {0} in state {1}
ARJUNA012118 WARN TransactionReaper NORMAL mode is deprecated. Update config to use PERIODIC for equivalent behaviour.
ARJUNA012119 ERROR TransactionReaper::check worker zombie count {0} exceeds specified limit
ARJUNA012120 WARN TransactionReaper::check worker {0} not responding to interrupt when cancelling TX {1} -- worker marked as zombie and TX scheduled for mark-as-rollback
ARJUNA012121 WARN TransactionReaper::doCancellations worker {0} successfully canceled TX {1}
ARJUNA012122 WARN TransactionReaper::doCancellations worker {0} failed to cancel TX {1} -- rescheduling for mark-as-rollback
ARJUNA012123 WARN TransactionReaper::doCancellations worker {0} exception during cancel of TX {1} -- rescheduling for mark-as-rollback
ARJUNA012124 WARN TwoPhaseCoordinator.beforeCompletion - attempted rollback_only failed!
ARJUNA012125 WARN TwoPhaseCoordinator.beforeCompletion - failed for {0}
ARJUNA012126 WARN TwoPhaseCoordinator.beforeCompletion TwoPhaseCoordinator.afterCompletion called on still running transaction!
ARJUNA012127 WARN TwoPhaseCoordinator.afterCompletion - returned failure for {0}
ARJUNA012128 WARN TwoPhaseCoordinator.afterCompletion - failed for {0} with exception
ARJUNA012129 WARN TwoPhaseCoordinator.afterCompletion - failed for {0} with error
ARJUNA012130 WARN Name of XA node not defined. Using {0}
ARJUNA012131 WARN Supplied name of node is too long. Using {0}
ARJUNA012132 WARN Supplied name of node contains reserved character ''-''. Using {0}
ARJUNA012135 java.lang.String Could not create Store type:
ARJUNA012136 WARN Could not recreate abstract record {0}
ARJUNA012137 WARN Cannot begin new transaction as TM is disabled. Marking as rollback-only.
ARJUNA012138 WARN Node name cannot exceed {0} bytes!
ARJUNA012139 WARN You have chosen to disable the Multiple Last Resources warning. You will see it only once.
ARJUNA012140 WARN Adding multiple last resources is disallowed. Trying to add {0}, but already have {1}
ARJUNA012141 WARN Multiple last resources have been added to the current transaction. This is transactionally unsafe and should not be relied upon. Current resource is {0}
ARJUNA012142 WARN You have chosen to enable multiple last resources in the transaction manager. This is transactionally unsafe and should not be relied upon.
ARJUNA012143 WARN unknown store: {0}
ARJUNA012144 java.lang.String unknown store:
ARJUNA012146 WARN ActionStatusService: searching for uid: {0}
ARJUNA012147 INFO transactionType: {0} uid: {1} Status is {2}
ARJUNA012148 WARN Other Exception
ARJUNA012149 WARN Exception retrieving action status
ARJUNA012150 INFO matching Uid {0} found
ARJUNA012151 WARN Exception when accessing transaction store
ARJUNA012152 WARN Connection Lost to Recovery Manager
ARJUNA012153 WARN RecoverAtomicAction.replayPhase2: Unexpected status: {0}
ARJUNA012154 WARN RecoverAtomicAction: transaction {0} not activated, unable to replay phase 2 commit. Check state has not already been completed.
ARJUNA012155 WARN RecoverAtomicAction - tried to move failed activation log {0}
ARJUNA012159 INFO Connected to recovery manager on {0}:{1}
ARJUNA012161 WARN Exception when accessing data store
ARJUNA012162 WARN Object store exception
ARJUNA012163 INFO Starting service {0} on port {1}
ARJUNA012167 java.lang.String Invalid host or port
ARJUNA012168 WARN Failed to create server socket on address {0} and port: {1}
ARJUNA012169 WARN Listener failed
ARJUNA012170 INFO TransactionStatusManager started on port {0} and host {1} with service {2}
ARJUNA012171 WARN Failed to setup class for {0}
ARJUNA012176 java.lang.String Could not get unique port.
ARJUNA012177 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_1 - Invalid input buffer: byte.
ARJUNA012178 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_10 - Invalid input buffer: string.
ARJUNA012179 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_11 - Invalid from buffer
ARJUNA012180 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_2 - Invalid input buffer: bytes.
ARJUNA012181 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_3 - Invalid input buffer: boolean.
ARJUNA012182 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_4 - Invalid input buffer: char.
ARJUNA012183 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_5 - Invalid input buffer: short.
ARJUNA012184 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_6 - Invalid input buffer: int.
ARJUNA012185 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_7 - Invalid input buffer: long.
ARJUNA012186 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_8 - Invalid input buffer: float.
ARJUNA012187 java.lang.String com.arjuna.ats.arjuna.state.InputBuffer_9 - Invalid input buffer: double
ARJUNA012188 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_1 - Invalid input buffer: byte.
ARJUNA012189 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_10 - Invalid input buffer: string.
ARJUNA012190 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_11 - Invalid from buffer
ARJUNA012191 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_2 - Invalid input buffer: bytes.
ARJUNA012192 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_3 - Invalid input buffer: boolean.
ARJUNA012193 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_4 - Invalid input buffer: char.
ARJUNA012194 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_5 - Invalid input buffer: short.
ARJUNA012195 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_6 - Invalid input buffer: int.
ARJUNA012196 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_7 - Invalid input buffer: long.
ARJUNA012197 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_8 - Invalid input buffer: float.
ARJUNA012198 java.lang.String com.arjuna.ats.arjuna.state.OutputBuffer_9 - Invalid input buffer: double
ARJUNA012202 INFO registering bean {0}.
ARJUNA012203 INFO Instance already exists: {0}.
ARJUNA012204 WARN Error registering {0}
ARJUNA012206 WARN Unable to unregister bean {0}
ARJUNA012207 WARN Unable to unregister bean {0}
ARJUNA012208 WARN An error occurred while creating file {0}
ARJUNA012209 WARN Utility.getDefaultProcess failed
ARJUNA012210 WARN Unable to use InetAddress.getLocalHost() to resolve address.
ARJUNA012211 WARN Attempt to suspend a non-AtomicAction transaction. Type is {0}
ARJUNA012212 WARN StateManagerFriend.forgetAction
ARJUNA012213 WARN StateManagerFriend.destroyed
ARJUNA012214 WARN StateManagerFriend.rememberAction
ARJUNA012215 WARN className is null
ARJUNA012216 WARN attempt to load {0} threw ClassNotFound. Wrong classloader?
ARJUNA012217 WARN class {0} does not implement {1}
ARJUNA012218 WARN cannot create new instance of {0}
ARJUNA012219 WARN cannot access {0}
ARJUNA012220 WARN cannot initialize from string {0}
ARJUNA012221 WARN Commit state failed for {0} and {1}
ARJUNA012222 WARN Remove state failed for {0} and {1} and {2}
ARJUNA012223 WARN Write state failed for {0} and {1} and {2} and {3}
ARJUNA012224 WARN Unknown work type {0}
ARJUNA012225 java.lang.String FileSystemStore::setupStore - cannot access root of object store: {0}
ARJUNA012226 WARN FileSystemStore.removeFromCache - no entry for {0}
ARJUNA012227 WARN FileSystemStore.renameFromTo - from {0} not present. Possibly renamed by crash recovery.
ARJUNA012228 java.lang.String FileSystemStore::allObjUids - could not pack Uid.
ARJUNA012229 java.lang.String FileSystemStore::allObjUids - could not pack end of list Uid.
ARJUNA012230 java.lang.String FileSytemStore::allTypes - could not pack entry string.
ARJUNA012231 java.lang.String FileSystemStore::allTypes - could not pack end of list string.
ARJUNA012232 java.lang.String FileSystemStore::setupStore - error from unpack object store.
ARJUNA012233 java.lang.String FileSystemStore::allTypes - could not pack entry string.
ARJUNA012234 java.lang.String FileSystemStore::createHierarchy - null directory name.
ARJUNA012236 WARN invalid number of hash directories: {0}. Will use default.
ARJUNA012237 java.lang.String HashedStore.allObjUids - could not pack Uid.
ARJUNA012238 java.lang.String HashedStore.allObjUids - could not pack end of list Uid.
ARJUNA012239 WARN hide_state caught exception
ARJUNA012240 WARN remove_state - type() operation of object with uid {0} returns NULL
ARJUNA012241 WARN invalid initial pool size: {0}
ARJUNA012242 WARN invalid maximum pool size: {0}
ARJUNA012243 WARN initialise caught exceptionatorLoader_3
ARJUNA012244 WARN getState caught exception
ARJUNA012245 WARN removeFromCache - no entry for {0}
ARJUNA012246 WARN getPool caught exception
ARJUNA012247 INFO getPool - interrupted while waiting for a free connection
ARJUNA012248 WARN freePool - freeing a connection which is already free!
ARJUNA012249 WARN reveal_state caught exception
ARJUNA012250 WARN currentState caught exception
ARJUNA012251 WARN allObjUids caught exception
ARJUNA012252 WARN allObjUids - pack of Uid failed
ARJUNA012253 WARN allTypes caught exception
ARJUNA012254 WARN allTypes - pack of Uid failed
ARJUNA012255 WARN remove_state caught exception
ARJUNA012256 WARN remove_state() attempted removal of {0} state for object with uid {1}
ARJUNA012257 WARN JDBCImple:read_state failed
ARJUNA012258 WARN JDBCImple:write_state caught exception
ARJUNA012259 FATAL JDBCStore could not setup store < {0} , {1}>
ARJUNA012260 FATAL Received exception for {0}
ARJUNA012261 WARN JDBCStore.setupStore failed to initialise!
ARJUNA012263 java.lang.String No JDBCAccess implementation provided!
ARJUNA012265 WARN ShadowingStore::remove_state() - state {0} does not exist for type {1}
ARJUNA012266 WARN ShadowingStore::remove_state() - unlink failed on {0}
ARJUNA012267 WARN ShadowingStore.remove_state() - fd error for {0}
ARJUNA012269 INFO UNKNOWN state for object with uid {0} , type {1}
ARJUNA012270 INFO HIDDEN state for object with uid {0} , type {1}
ARJUNA012272 WARN ShadowingStore.remove_state - type() operation of object with uid {0} returns NULL
ARJUNA012273 WARN ShadowingStore::write_state() - openAndLock failed for {0}
ARJUNA012274 WARN ShadowingStore::write_state - unlock or close of {0} failed.
ARJUNA012275 WARN ShadowStore::commit_state - failed to rename {0} to {1}
ARJUNA012278 WARN ShadowStore::hide_state - failed to rename {0} to {1}
ARJUNA012279 WARN ShadowStore::reveal_state - failed to rename {0} to {1}
ARJUNA012280 WARN ShadowingStore::read_state() - openAndLock failed for {0}
ARJUNA012282 WARN ShadowingStore::read_state() failed
ARJUNA012283 WARN ShadowingStore::read_state - unlock or close of {0} failed
ARJUNA012284 WARN ShadowingStore::remove_state() - access problems on {0} and {1}
ARJUNA012285 WARN oracle:read_state failed
ARJUNA012286 WARN oracle:write_state caught exception
ARJUNA012287 java.lang.String No typename for object:
ARJUNA012288 java.lang.String allTypes - could not pack end of list string.
ARJUNA012289 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA012290 WARN failed to recover Transaction {0}
ARJUNA012291 WARN failed to access transaction store {0}
ARJUNA012292 WARN Connection error on running a work on the socket. IOException: {0}
ARJUNA012293 WARN Setting timeout exception.
ARJUNA012297 INFO ExpiredEntryMonitor - no scans on first iteration
ARJUNA012301 WARN ExpiredTransactionScanner - exception during attempted move {0}
ARJUNA012303 INFO ExpiredTransactionScanner - log {0} is assumed complete and will be moved.
ARJUNA012310 INFO Recovery manager listening on endpoint {0}:{1}
ARJUNA012318 WARN Could not create recovery listener
ARJUNA012326 WARN socket I/O exception
ARJUNA012327 WARN TransactionStatusConnector.delete called erroneously
ARJUNA012328 WARN Connection lost to TransactionStatusManagers'' process
ARJUNA012329 WARN Connection lost to TransactionStatusManagers'' process
ARJUNA012330 INFO TransactionStatusManager process for uid {0} is ALIVE. connected to host: {1}, port: {2} on socket: {3}
ARJUNA012331 INFO TransactionStatusManager process for uid {0} is DEAD.
ARJUNA012332 INFO Failed to establish connection to server
ARJUNA012333 WARN Problem with removing host/port item
ARJUNA012334 WARN Problem with storing host/port
ARJUNA012335 WARN Problem retrieving host/port
ARJUNA012336 WARN Failed to obtain host
ARJUNA012338 WARN Other Exception:
ARJUNA012339 WARN Cannot read line from the socket. IOException: {0}
ARJUNA012340 INFO RecoveryManager scan scheduled to begin.
ARJUNA012341 INFO RecoveryManager scan completed.
ARJUNA012342 FATAL RecoveryManagerImple: cannot bind to socket on address {0} and port {1}
ARJUNA012344 INFO RecoveryManagerImple is ready on port {0}
ARJUNA012345 WARN Transaction {0} and {1} not activate.
ARJUNA012346 WARN Error - could not get resource to forget heuristic. Left on Heuristic List.
ARJUNA012347 java.lang.String Could not get back a valid pid.
ARJUNA012348 java.lang.String Problem executing getpids utility:
ARJUNA012349 java.lang.String Problem executing command:
ARJUNA012350 java.lang.String Problem getting pid information from stream:
ARJUNA012351 WARN Encountered a problem when closing the data stream
ARJUNA012352 java.lang.String FileProcessId.getpid - could not locate temporary directory.
ARJUNA012353 java.lang.String FileProcessId.getpid could not create unique file.
ARJUNA012354 java.lang.String Could not get back a valid pid.
ARJUNA012355 java.lang.String getName returned unrecognized format:
ARJUNA012356 java.lang.String Could not get back a valid pid.
ARJUNA012359 java.lang.String SocketProcessId.getpid could not get unique port.
ARJUNA012361 INFO Error constructing mbean
ARJUNA012362 INFO Failed to create StateManagerWrapper
ARJUNA012363 java.lang.String Invalid rootName. Expected {0} but was {1}
ARJUNA012364 java.lang.String RecoveryActivator init failed for {0}
ARJUNA012365 java.lang.String Method not implemented
ARJUNA012366 WARN Unexpected data read from journal - file may be corrupt.
ARJUNA012367 java.lang.String Failed to create store dir {0}
ARJUNA012368 java.lang.String Node identifiers must be an integer and must be 1 or greater: {0}
ARJUNA012369 java.lang.String The node identifier was already set
ARJUNA012370 TRACE Previously committed row(s) deleted {0}
ARJUNA012371 WARN Image size {0} is greater than max allowed {1}
ARJUNA012372 FATAL The node identifier {0} was too long {1}, aborting initialization
ARJUNA012373 java.lang.String The node identifier {0} was too long {1}, aborting initialization
ARJUNA012374 FATAL The node identifier cannot be null, aborting initialization
ARJUNA012375 java.lang.String The node identifier cannot be null, aborting initialization
ARJUNA012376 WARN ObjectStore remove_state caught exception:
ARJUNA012377 WARN HornetqObjectStore remove_state caught exception:
ARJUNA012378 WARN ReaperElement appears to be wedged: {0}
ARJUNA012379 WARN ExpiredTransactionScanner - {0} is assumed complete and will be moved.
ARJUNA012380 INFO OSB: Error constructing record header reader
ARJUNA012381 WARN Action id {0} completed with multiple threads - thread {1} was in progress with {2}
ARJUNA012382 WARN Action id {0} could not be transitioned to committed
ARJUNA012383 WARN Action id {0} could not be updated during write_state
ARJUNA012384 WARN Action id {0} could not be inserted during write_state
ARJUNA012385 java.lang.String Could not read from object store
ARJUNA012386 java.lang.String Unexpected state type {0}
ARJUNA012387 FATAL Encoding {0} is not supported
ARJUNA012388 java.lang.String Encoding {0} is not supported
ARJUNA012389 INFO OSB: Error constructing record header reader: {0}
ARJUNA012390 WARN Error constructing mbean
ARJUNA012391 java.lang.String Could not initialize object store ''{0}'' of type ''{1}''
ARJUNA012392 WARN AbstractRecord.create {0} failed to create record class {1}.
ARJUNA012393 WARN The Artemis journal was requested to be AIO version but this is not available on your machine
ARJUNA012394 WARN Could not close transaction listener server socket ''{0}''
ARJUNA012395 WARN Could not close transaction listener socket connection ''{0}''
ARJUNA012396 WARN Cannot activate type ''{0}'' at object store ''{1}''
ARJUNA012397 WARN Could not extract elements from the cache store list
ARJUNA012398 WARN ObjectStoreException in doWork of CacheStore trying to perform state management
ARJUNA012399 WARN Problem in doWork of CacheStore trying to perform state management
ARJUNA012400 java.lang.String Cannot terminate the recovery manager as the implementation is not known. Could be the recovery manager was not started yet?
ARJUNA012401 java.lang.String There is already started a recovery manager in mode ''{0}'' which is different from the requested mode ''{1}''.If you consider starting in a different mode then first terminate the currently running recovery manager.
ARJUNA012402 java.lang.String PMemSlots instance already initialized, can't call init again
ARJUNA012403 java.lang.String Can't create pmem store in ''{0}'' - may not be an fs-dax location
ARJUNA012404 INFO Action id {0} - thread {1} at time {2} had stackTrace {3}
ARJUNA012405 INFO The asyncIO mode for the Artemis journal does not support maxIO=1, using the nearest value which is 2
ARJUNA012406 WARN Invalid class type in system property ObjStoreBrowserHandlers: ''{0}''
ARJUNA015001 WARN LockManagerFriend.getLink
ARJUNA015002 WARN LockManagerFriend.setLink
ARJUNA015004 WARN Object store exception on committing {0}
ARJUNA015009 WARN RecoveredTransactionalObject tried to access object store
ARJUNA015011 WARN RecoveredTransactionalObject::findHoldingTransaction - exception
ARJUNA015012 WARN Object store exception on removing uncommitted state: {0}
ARJUNA015017 WARN TORecoveryModule: searching for TOs:
ARJUNA015022 java.lang.String CadaverLockRecord::nestedAbort - no Current!
ARJUNA015023 java.lang.String CadaverLockRecord::nestedCommit - no Current!
ARJUNA015024 java.lang.String CadaverLockRecord::topLevelAbort - no Current!
ARJUNA015025 java.lang.String CadaverLockRecord::topLevelCommit - no Current!
ARJUNA015026 WARN LockManager: lock propagation failed
ARJUNA015027 WARN LockManager::unloadState() failed to remove empty lock state for object {0} of type {1}
ARJUNA015028 WARN LockManager.unloadState - could not save lock state: {0}
ARJUNA015029 WARN LockManager::unloadState() failed to write new state for object {0} of type {1}
ARJUNA015030 WARN LockManager::unloadState() failed to pack up new state for object {0} of type {1}
ARJUNA015031 WARN LockManager::setlock() no lock!
ARJUNA015032 WARN LockManager::setlock() cannot find action hierarchy
ARJUNA015033 WARN LockManager::setlock() cannot load existing lock states
ARJUNA015034 WARN LockManager::setlock() cannot activate object
ARJUNA015035 WARN LockManager::setlock() cannot save new lock states
ARJUNA015036 WARN Lockmanager::releaselock() could not load old lock states
ARJUNA015037 WARN Lockmanager::releaselock() could not unload new lock states
ARJUNA015038 WARN LockRecord::set_value() called illegally
ARJUNA015039 WARN LockRecord - release failed for action {0}
ARJUNA015040 WARN LockRecord::nestedAbort - no current action
ARJUNA015041 WARN LockRecord::nestedCommit - no current action
ARJUNA015042 WARN LockRecord - release failed for action {0}
ARJUNA015043 WARN LockRecord::topLevelCommit - no current action
ARJUNA015044 WARN Invocation of LockRecord::restore_state for {0} inappropriate - ignored for {1}
ARJUNA015050 WARN OptimisticLockRecord.topLevelPrepare state check failed for {0} will force rollback.
ARJUNA015051 WARN OptimisticLockRecord.topLevelCommit state check failed for {0} will force rollback.
ARJUNA015052 WARN LockManager::initialise() could not initialise lock store
ARJUNA016001 WARN could not get all object Uids.
ARJUNA016002 WARN Cannot add resource to table: no XID value available.
ARJUNA016004 WARN XARecoveryModule setup failed
ARJUNA016005 WARN {0} - failed to recover XAResource. status is {1}
ARJUNA016006 WARN {0} - forget threw exception
ARJUNA016008 WARN {0} - caught exception
ARJUNA016009 WARN Caught:
ARJUNA016013 INFO Rolling back {0}
ARJUNA016016 INFO {0} not an Arjuna XID
ARJUNA016017 INFO No XA recovery nodes specified. May not recover orphans.
ARJUNA016018 WARN XARecoveryModule periodicWork failed
ARJUNA016019 WARN {0} exception
ARJUNA016020 WARN {0} exception
ARJUNA016021 INFO JTA recovery delayed for {0}; got status {1} so waiting for coordinator driven recovery
ARJUNA016022 WARN Recovery threw:
ARJUNA016023 WARN JTA failed to recovery {0}; got status {1}
ARJUNA016025 WARN Unexpected recovery error
ARJUNA016027 WARN {0} got XA exception {1}
ARJUNA016028 WARN {0} got exception
ARJUNA016029 WARN SynchronizationImple.afterCompletion - failed for {0} with exception
ARJUNA016030 java.lang.String XAOnePhaseResource.pack failed to serialise resource
ARJUNA016031 WARN XAOnePhaseResource.rollback for {0} failed with exception
ARJUNA016032 java.lang.String failed to deserialise resource
ARJUNA016033 java.lang.String Unknown recovery type {0}
ARJUNA016034 INFO Being told to assume complete on Xid {0}
ARJUNA016035 WARN {0} - null transaction!
ARJUNA016036 WARN commit on {0} ({1}) failed with exception ${2}
ARJUNA016037 WARN Could not find new XAResource to use for recovering non-serializable XAResource {0}
ARJUNA016038 WARN No XAResource to recover {0}
ARJUNA016039 WARN onePhaseCommit on {0} ({1}) failed with exception {2}
ARJUNA016040 WARN {0} - null transaction!
ARJUNA016041 WARN prepare on {0} ({1}) failed with exception {2}
ARJUNA016042 WARN {0} - null transaction!
ARJUNA016043 WARN Exception on attempting to restore XAResource
ARJUNA016044 WARN An error occurred during restore_state for XAResource {0} and transaction {1}
ARJUNA016045 WARN attempted rollback of {0} ({1}) failed with exception code {2}
ARJUNA016046 WARN {0} - null transaction!
ARJUNA016047 WARN Could not serialize a Serializable XAResource!
ARJUNA016048 WARN An error occurred during save_state for XAResource {0} and transaction {1}
ARJUNA016049 WARN {0} called illegally.
ARJUNA016051 java.lang.String thread is already associated with a transaction!
ARJUNA016053 java.lang.String Could not commit transaction.
ARJUNA016054 java.lang.String could not register transaction
ARJUNA016055 WARN {0} caught exception
ARJUNA016056 WARN {0} - caught exception during delist : {1}
ARJUNA016058 WARN Ending suspended RMs failed when rolling back the transaction!
ARJUNA016059 java.lang.String Ending suspended RMs failed when rolling back the transaction, but transaction rolled back.
ARJUNA016060 WARN {0} - caught: {1}
ARJUNA016061 WARN {0} - XAResource.start returned: {2} for {1}
ARJUNA016062 java.lang.String illegal resource state
ARJUNA016063 java.lang.String The transaction is not active!
ARJUNA016064 java.lang.String The transaction is in an invalid state!
ARJUNA016066 ERROR Failed to create instance of TransactionImporter
ARJUNA016067 ERROR Failed to create instance of XATerminator
ARJUNA016068 java.lang.String Work already active!
ARJUNA016069 WARN failed to load Last Resource Optimisation Interface {0}
ARJUNA016070 WARN {0} - could not mark {1} as rollback only
ARJUNA016071 WARN {0} caught XAException: {1}
ARJUNA016072 java.lang.String No such transaction!
ARJUNA016073 WARN Current transaction is not an AtomicAction!
ARJUNA016074 java.lang.String no transaction!
ARJUNA016075 java.lang.String null synchronization parameter!
ARJUNA016076 java.lang.String Resource paramater is null!
ARJUNA016078 java.lang.String resource already suspended.
ARJUNA016079 java.lang.String Transaction rollback status is:
ARJUNA016080 java.lang.String Not allowed to terminate subordinate transaction directly.
ARJUNA016081 java.lang.String The transaction implementation threw a RollbackException
ARJUNA016082 java.lang.String Synchronizations are not allowed! Transaction status is
ARJUNA016083 java.lang.String Cannot register synchronization because the transaction is in aborted state
ARJUNA016084 java.lang.String The transaction implementation threw a SystemException
ARJUNA016085 WARN Caught the following error
ARJUNA016086 WARN {0} setTransactionTimeout on XAResource {1} threw: {2}
ARJUNA016087 WARN {0} - unknown resource
ARJUNA016088 WARN Could not call end on a suspended resource!
ARJUNA016089 WARN {0} - caught: {2} for {1}
ARJUNA016091 WARN Failed to lookup transaction manager in JNDI context
ARJUNA016093 WARN Failed to lookup user transaction in JNDI context
ARJUNA016096 java.lang.String Unable to instantiate TransactionSynchronizationRegistry implementation class!
ARJUNA016098 java.lang.String Null exception!
ARJUNA016099 java.lang.String Unknown error code:
ARJUNA016100 java.lang.String Xid unset
ARJUNA016101 java.lang.String Could not pack XidImple {0}
ARJUNA016102 java.lang.String The transaction is not active! Uid is {0}
ARJUNA016103 java.lang.String Error getting the status of the current transaction
ARJUNA016104 java.lang.String Error getting the current transaction
ARJUNA016105 java.lang.String Could not lookup the TransactionManager
ARJUNA016106 java.lang.String Could not lookup the TransactionSynchronizationRegistry
ARJUNA016107 java.lang.String Expected an @Transactional annotation at class and/or method level
ARJUNA016108 java.lang.String Wrong transaction on thread
ARJUNA016109 java.lang.String Contextual is null
ARJUNA016110 java.lang.String Transaction is required for invocation
ARJUNA016111 java.lang.String The node identifier cannot be null
ARJUNA016112 WARN Could not determine commit status of CMR resource {0} and transaction {1}
ARJUNA016113 INFO Xid {0} was committed by resource manager
ARJUNA016114 WARN Could not load {0} will try to get XAResource from the recovery helpers
ARJUNA016115 WARN Could not access object store to check for log so will leave record alone
ARJUNA016116 WARN Failed to create JMS connection
ARJUNA016117 WARN Failed to close JMS connection {0}
ARJUNA016118 WARN Failed to close JMS session {0}
ARJUNA016119 java.lang.String Failed to get transaction
ARJUNA016120 WARN Failed to get transaction
ARJUNA016121 java.lang.String Failed to get transaction status
ARJUNA016122 WARN Failed to get transaction status
ARJUNA016123 java.lang.String Failed to register synchronization
ARJUNA016124 WARN Failed to register synchronization
ARJUNA016125 java.lang.String Failed to enlist XA resource
ARJUNA016126 WARN Failed to enlist XA resource
ARJUNA016127 java.lang.String Failed to delist XA resource
ARJUNA016128 WARN Failed to delist XA resource
ARJUNA016129 WARN Could not end XA resource {0}
ARJUNA016130 FATAL Subordinate transaction was committed during prepare, this will look like a rollback {0}
ARJUNA016131 FATAL Subordinate transaction was not recovered successfully {0}
ARJUNA016132 WARN Cannot packt into output object state {0}
ARJUNA016133 WARN Cannot create a new instance of Xid of uid {0}, is branch: {1}, eisname: {2}
ARJUNA016134 WARN Cannot create a new instance of Xid of base xid {0}, is branch: {1}, eisname: {2}
ARJUNA016135 WARN Cannot read object {0} store for xid {1}
ARJUNA016136 WARN Cannot unpact state of the xid {0} loaded from recovery store {1} of txn type {2}
ARJUNA016137 ERROR Failed to get transaction status of {0}
ARJUNA016138 WARN Failed to enlist XA resource {0}
ARJUNA016139 ERROR Fail to cast class of transaction action {0}
ARJUNA016140 java.lang.String No subordinate transaction to drive for commit with xid: {0}
ARJUNA016141 java.lang.String Error committing transaction ''{0}'' for xid: {1}
ARJUNA016142 java.lang.String Not actived transaction ''{0}'' for xid: {1}
ARJUNA016143 WARN Problem during waiting for lock ''{0}'' whilst in state {1}
ARJUNA016144 java.lang.String No subordinate transaction to drive {0}, xid: {1}
ARJUNA016145 java.lang.String One phase commit for transaction ''{0}'' does not store data in the object store. Recovery is won''t able to decide about outcome. Transaction is marked as heuristic to be decided by administrator.
ARJUNA016146 java.lang.String Cannot work with the imported transaction as UID is null.
ARJUNA016147 java.lang.String Cannot recover imported transaction of UID ''{0}'' of transaction ''{1}'' as transaction base Xid is null.
ARJUNA016148 java.lang.String Cannot work further as the argument Xid is null.
ARJUNA016149 WARN Returned global transaction identifier and branch qualifier are null but format id is not -1. {0}
ARJUNA016150 INFO Returned global transaction identifier or branch qualifier is null. {0}
ARJUNA016151 java.lang.String Not supported for interception factory with non-weld CDI implementation for bean {0}.
ARJUNA016152 java.lang.String TransactionScoped context is not active as there is no active transaction on the thread
ARJUNA016153 java.lang.String Transaction is not allowed for invocation
ARJUNA017001 java.lang.String Rollback not allowed by transaction service.
ARJUNA017002 java.lang.String Connection is already associated with a different transaction! Obtain a new connection for this transaction.
ARJUNA017003 java.lang.String Checking transaction and found that this connection is already associated with a different transaction! Obtain a new connection for this transaction.
ARJUNA017004 java.lang.String AutoCommit is not allowed by the transaction service.
ARJUNA017005 java.lang.String An error occurred during close:
ARJUNA017006 java.lang.String Invalid transaction during close {0}
ARJUNA017007 DEBUG Connection will be closed now. Indications are that this db does not allow multiple connections in the same transaction {0}
ARJUNA017008 INFO No modifier information found for db. Connection will be closed immediately {0}
ARJUNA017009 java.lang.String Commit not allowed by transaction service.
ARJUNA017010 java.lang.String JDBC2 connection initialisation problem
ARJUNA017011 java.lang.String Delist of resource failed.
ARJUNA017013 WARN Caught exception
ARJUNA017016 java.lang.String Failed to load dynamic class
ARJUNA017017 java.lang.String enlist of resource failed
ARJUNA017018 WARN Failed to get modifier for driver:
ARJUNA017020 java.lang.String Transaction is not active on the thread!
ARJUNA017021 java.lang.String Could not get transaction information.
ARJUNA017024 WARN {0} - failed to set isolation level
ARJUNA017025 java.lang.String Could not resolve JNDI XADataSource
ARJUNA017027 WARN An exception occurred during initialisation.
ARJUNA017028 WARN {0} could not find information for connection!
ARJUNA017029 WARN An exception occurred during initialisation.
ARJUNA017031 java.lang.String rollback(Savepoint) not allowed inside distributed tx.
ARJUNA017032 WARN {0} - could not mark transaction rollback
ARJUNA017033 java.lang.String rollback(Savepoint) not allowed inside distributed tx.
ARJUNA017034 java.lang.String Cannot set readonly when within a transaction!
ARJUNA017035 java.lang.String setSavepoint not allowed inside distributed tx.
ARJUNA017037 java.lang.String Could not resolve JNDI XADataSource
ARJUNA017038 WARN ConnectionSynchronization could not close connection
ARJUNA017039 java.lang.String BasicXARecovery did not have enough connection configuration
ARJUNA017040 ERROR Cannot create JDBCXARecovery datasource of jndi name ''{0}''
ARJUNA017041 ERROR Cannot create JDBCXARecovery connection of datasource ''{0}'', user: {1}, password: {2}
ARJUNA017042 java.lang.String Could not resolve JNDI ''{0}'' of XADataSource from jndi properties ''{1}''
ARJUNA021001 WARN {0} caught exception whilst initialising Object Adapter.
ARJUNA021002 WARN {0}: exception caught for {1}
ARJUNA021003 WARN caught org.omg.CORBA.INITIALIZE whilst initialising Object Adapter. Check another ORB/service is not active on same port.
ARJUNA021004 WARN {0} - invalid POA: {1}
ARJUNA021005 WARN OA.createPOA - createPOA called without OA being initialised
ARJUNA021006 java.lang.String OA.initPOA called without initialised ORB.
ARJUNA021010 FATAL ORBInfo ORB specific class creation failed with exception
ARJUNA021013 WARN {0} - {1} option not supported by ORB.
ARJUNA021015 WARN Services.getService - could not find service: {0} in configuration file: {1}
ARJUNA021016 WARN {0} Suspect entry in configuration file: {1}
ARJUNA021017 WARN {0} - caught unexpected exception
ARJUNA021018 WARN Services.getService - {0} option not supported by ORB.
ARJUNA021019 WARN {0} - invalid bind mechanism in properties file
ARJUNA021021 WARN {0} - for: {1} threw exception
ARJUNA021023 WARN {0} called without root POA.
ARJUNA021025 WARN Exception whilst loading {1}
ARJUNA021026 WARN {0} - attempt to initialise {1} with null class name!
ARJUNA022003 INFO Removing old assumed complete transaction {0}
ARJUNA022006 FATAL The ORB has not been initialized yet
ARJUNA022008 WARN {0} caught exception
ARJUNA022009 WARN {0} does not support ORB: {1}
ARJUNA022010 java.lang.String Failed when getting a reference to PICurrent.
ARJUNA022011 WARN Failed to cancel transaction
ARJUNA022012 WARN Failed to mark transaction as rollback only
ARJUNA022013 WARN Failed to cancel transaction
ARJUNA022014 WARN {0} - default already set!
ARJUNA022015 WARN {0} - could not find {1} to remove.
ARJUNA022016 WARN Nested transactions not identical.
ARJUNA022017 WARN Interposed hierarchy is null!
ARJUNA022018 WARN TopLevel transactions not identical: {0} {1}
ARJUNA022019 WARN {0} - error, no child found!
ARJUNA022020 WARN {0} - not my child!
ARJUNA022021 WARN hierarchy: {0}
ARJUNA022022 WARN {0} for transaction {1} caught exception
ARJUNA022023 WARN {0} - no parent transaction given!
ARJUNA022024 WARN {0} caught exception
ARJUNA022025 WARN {0} attempt to mark transaction {1} as rollback only threw exception
ARJUNA022026 WARN Creation of RecoveryCoordinator for {0} threw exception
ARJUNA022027 java.lang.String not created!
ARJUNA022028 WARN {0} called on still running transaction!
ARJUNA022029 WARN {0} - could not get unique identifier of object.
ARJUNA022030 WARN {0} - none zero Synchronization list!
ARJUNA022031 java.lang.String could not destroy object:
ARJUNA022032 WARN {0} caught exception
ARJUNA022033 WARN {0} - synchronizations have not been called!
ARJUNA022034 WARN {0} - transaction not in prepared state: {1}
ARJUNA022035 WARN {0} could not destroy object
ARJUNA022036 WARN Could not remove child {0} from {1}
ARJUNA022037 WARN {0} caught exception
ARJUNA022038 WARN {0} caught exception
ARJUNA022039 WARN {0} - could not register interposed hierarchy!
ARJUNA022040 WARN {0} - could not register interposed hierarchy!
ARJUNA022041 WARN {0} - no coordinator to use!
ARJUNA022042 WARN {0} - no transaction!
ARJUNA022043 WARN {0} - attempt to commit with null control!
ARJUNA022044 WARN {0} - attempt to rollback transaction will null control!
ARJUNA022045 WARN {0} - could not register as no Coordinator has been given!
ARJUNA022046 WARN Failed to destroy server-side synchronization object!
ARJUNA022047 java.lang.String Concurrent children found for restricted interposition!
ARJUNA022048 java.lang.String {0} Concurrent children found for restricted interposition!
ARJUNA022049 WARN {0} - found concurrent ({1}) transactions!
ARJUNA022050 WARN {0} - found concurrent ({1}) transactions!
ARJUNA022051 WARN {0} status of transaction is different from our status: <{1}, {2}>
ARJUNA022052 WARN {0} - could not register interposed hierarchy!
ARJUNA022053 WARN {0} - could not register interposed hierarchy!
ARJUNA022054 java.lang.String Invalid Uid:
ARJUNA022069 WARN Failed to retreive the Object reference of the default RecoverCoordinator Object.
ARJUNA022071 WARN Failed to build service context with the ObjectId
ARJUNA022072 WARN Failed in ClientInitializer::post_init -
ARJUNA022075 WARN {0}.replay_completion got exception
ARJUNA022077 WARN RCManager.makeRC did not make rcvco reference
ARJUNA022078 WARN RCManager could not find file in object store.
ARJUNA022079 WARN RCManager could not find file in object store during setup.
ARJUNA022080 WARN Unexpected exception during IOR setup
ARJUNA022081 WARN Failed to create poa for recoverycoordinators
ARJUNA022083 WARN {0} - Failed to start RC service
ARJUNA022085 FATAL Unable to create file ObjectId - security problems
ARJUNA022087 INFO RecoveryServer using existing ORB
ARJUNA022089 WARN RootPOA is null. Initialization failed. Check no conflicting or duplicate service is running.
ARJUNA022091 WARN Failed in ServerInitializer::post_init -
ARJUNA022093 java.lang.String Cannot create a codec of the required encoding.
ARJUNA022094 WARN {0} - a failure occured when getting {1} codec - unknown encoding.
ARJUNA022095 WARN {0} - duplicate interceptor name for {1} when registering
ARJUNA022096 WARN Context interceptor caught an unexpected exception
ARJUNA022097 java.lang.String Invalid portable interceptor transaction parameter!
ARJUNA022098 java.lang.String A server-side request interceptor already exists with that name.
ARJUNA022099 WARN {0} caught an unexpected exception
ARJUNA022100 java.lang.String Cannot create a codec of the required encoding.
ARJUNA022101 WARN {0} - a failure occured when getting {1} codec - unknown encoding.
ARJUNA022102 WARN {0} - duplicate interceptor name for {1} when registering
ARJUNA022103 java.lang.String Invalid portable interceptor transaction parameter!
ARJUNA022104 java.lang.String A server-side request interceptor already exists with that name.
ARJUNA022105 WARN {0} caught an unexpected exception
ARJUNA022106 java.lang.String is not a valid unique identifier!
ARJUNA022107 WARN {0} for {1} caught exception
ARJUNA022108 WARN {0} attempt to clean up failed with exception
ARJUNA022109 WARN Resolution of OTS server failed
ARJUNA022110 WARN Resolution of OTS server failed - invalid name
ARJUNA022113 INFO Removing old contact item {0}
ARJUNA022116 WARN Could not locate supported ORB for RecoveryCoordinator initialisation.
ARJUNA022121 WARN The Recovery Service Initialisation failed
ARJUNA022125 FATAL RecoveryCoordinator service can only be provided in RecoveryManager
ARJUNA022127 WARN Problem with storing process/factory link
ARJUNA022128 WARN Attempted to read FactoryContactItem of different version
ARJUNA022129 WARN Stored IOR is not an ArjunaFactory
ARJUNA022130 WARN Problem with restoring process/factory link
ARJUNA022131 WARN Problem with restoring process/factory link
ARJUNA022132 WARN Problem with storing process/factory link
ARJUNA022133 WARN Problem with removing contact item
ARJUNA022138 WARN NoTransaction exception on trying to contact original process
ARJUNA022139 WARN CORBA exception on trying to contact original process
ARJUNA022140 WARN Exception on trying to contact original process
ARJUNA022142 WARN no known contactitem for {0}
ARJUNA022143 WARN surprise item in StatusChecker list for {0}
ARJUNA022145 WARN StatusChecked.getStatus - found intentions list for apparently unknown transaction: {0}
ARJUNA022151 WARN BAD_PARAM exception on trying to contact original process
ARJUNA022152 WARN {0} - being passed a null reference. Will ignore!
ARJUNA022156 WARN GenericRecoveryCreator: Missing params to create
ARJUNA022158 WARN System exception when creating RecoveryCoordinator object key
ARJUNA022159 WARN RecoveryCoordinatorId could not decode data {0}
ARJUNA022161 WARN Failure recovery not supported for this ORB.
ARJUNA022167 WARN Got TRANSIENT from ORB for tx {0}, unable determine status, will retry later
ARJUNA022169 WARN RecoveredServerTransaction: caught NotPrepared
ARJUNA022170 WARN RecoveredServerTransaction: caught unexpected exception
ARJUNA022171 WARN RecoveredServerTransaction: {0} is invalid
ARJUNA022175 WARN RecoveredServerTransaction - activate of {0} failed!
ARJUNA022178 INFO ServerTransaction {0} unable determine status - retry later
ARJUNA022179 WARN RecoveredServerTransaction.replayPhase2: unexpected Status: {0}
ARJUNA022183 WARN RecoveredTransaction activate of {0} failed
ARJUNA022184 WARN RecoveredTransaction activate of {0} failed
ARJUNA022186 WARN RecoveredTransaction.replayPhase2 for {0} failed
ARJUNA022188 WARN RecoveredTransaction.removeOldStoreEntry - problem
ARJUNA022190 INFO ServerTransactionRecoveryModule - First Pass
ARJUNA022191 INFO ServerTransactionRecoveryModule - Second Pass
ARJUNA022192 INFO ServerTransactionRecoveryModule - Transaction {0} still in ActionStore
ARJUNA022199 INFO TopLevelTransactionRecoveryModule First Pass
ARJUNA022200 INFO TopLevelTransactionRecoveryModule Second Pass
ARJUNA022202 WARN TransactionCacheItem.loadTransaction - unknown type: {0}
ARJUNA022206 INFO Transaction {0} assumed complete - will not poll any more
ARJUNA022207 INFO Transaction {0} recovery completed
ARJUNA022213 INFO TransactionRecoveryModule.periodicWorkFirstPass()
ARJUNA022214 INFO TransactionRecoveryModule.periodicWorkSecondPass()
ARJUNA022215 WARN TransactionRecoveryModule: transaction type not set
ARJUNA022217 WARN TransactionRecoveryModule: Object store exception
ARJUNA022219 INFO Transaction {0} still in ActionStore
ARJUNA022223 WARN {0} caught exception
ARJUNA022224 WARN {0} - no parent!
ARJUNA022225 WARN {0} called without a resource reference!
ARJUNA022226 WARN {0} failed. Returning default value: {1}
ARJUNA022227 WARN {0} called illegally!
ARJUNA022228 WARN {0} failed. Returning default value: {1}
ARJUNA022229 WARN {0} has no parent transaction!
ARJUNA022230 WARN {0} caught exception
ARJUNA022231 WARN {0} called illegally.
ARJUNA022232 WARN {0} called without a resource!
ARJUNA022233 WARN {0} caught unexpected exception
ARJUNA022234 WARN {0} called multiple times.
ARJUNA022235 WARN Could not rollback transaction {0}
ARJUNA022236 WARN Could not rollback transaction {0} as it does not exist!
ARJUNA022237 WARN {0} - cannot rollback {1}
ARJUNA022239 WARN {0} caught unexpected exception
ARJUNA022240 WARN {0} - no transaction!
ARJUNA022241 WARN {0} - terminated out of sequence {1}
ARJUNA022242 WARN {0} - running atomic transaction going out of scope. Will roll back. {1}
ARJUNA022243 WARN {0} - transaction unavailable.
ARJUNA022244 WARN Will roll back. Current transaction is {0}
ARJUNA022245 WARN Cannot determine transaction name!
ARJUNA022246 WARN {0} caught exception
ARJUNA022247 WARN Top-level transaction going out of scope with nested transaction {0} still set.
ARJUNA022248 WARN {0} - could not unregister from transaction!
ARJUNA022249 WARN {0} - could not resume transaction
ARJUNA022250 java.lang.String could not resume transaction:
ARJUNA022251 INFO The ORBManager is already associated with an ORB/OA.
ARJUNA022252 WARN Failed to remove old ObjectStore entry
ARJUNA022255 java.lang.String A client-side request interceptor already exists with that name.
ARJUNA022256 java.lang.String A client-side request interceptor already exists with that name.
ARJUNA022257 WARN {0} - unknown interposition type: {1}
ARJUNA022258 java.lang.String Transaction was inactive
ARJUNA022259 WARN ExtendedResourceRecord detected that the remote side had cleaned up, assuming 1PC resource
ARJUNA022260 DEBUG {0} caught exception
ARJUNA022261 WARN ServerTopLevelAction detected that the transaction was inactive
ARJUNA022262 java.lang.String The node identifier cannot be null
ARJUNA022263 INFO rollback for {0} was already rolled back
ARJUNA022264 INFO cannot read subordinate uid from object store {0} on input object state {1}
ARJUNA022265 INFO failure on processing doRecover for xid {0} and parent node name {1}
ARJUNA022266 WARN topLevelCommit of resource {0} failed
ARJUNA024001 INFO XA recovery committing {0}
ARJUNA024002 INFO XA recovery rolling back {0}
ARJUNA024004 WARN Caught the following error while trying to single phase complete resource
ARJUNA024005 WARN Committing of resource state failed.
ARJUNA024006 WARN {0} caused an error from resource {1} in transaction {2}
ARJUNA024007 WARN You have chosen to disable the Multiple Last Resources warning. You will see it only once.
ARJUNA024008 WARN Adding multiple last resources is disallowed. Current resource is {0}
ARJUNA024009 WARN Multiple last resources have been added to the current transaction. This is transactionally unsafe and should not be relied upon. Current resource is {0}
ARJUNA024010 WARN You have chosen to enable multiple last resources in the transaction manager. This is transactionally unsafe and should not be relied upon.
ARJUNA024011 WARN Reading state caught exception
ARJUNA024012 WARN Could not find new XAResource to use for recovering non-serializable XAResource {0}
ARJUNA024013 WARN {0} caught NotPrepared exception during recovery phase!
ARJUNA024014 WARN {0} - null or invalid transaction!
ARJUNA024015 WARN XAResource prepare failed on resource {0} for transaction {1} with: {2}
ARJUNA024016 WARN Recovery of resource failed when trying to call {0} got exception
ARJUNA024017 WARN Attempted shutdown of resource failed with exception
ARJUNA024018 WARN Exception on attempting to resource XAResource
ARJUNA024019 WARN Unexpected exception on attempting to resource XAResource
ARJUNA024020 WARN Could not serialize a serializable XAResource!
ARJUNA024021 WARN {0} caught unexpected exception during recovery phase!
ARJUNA024022 WARN Updating of resource state failed.
ARJUNA024023 WARN {0} caused an XA error: {1} from resource {2} in transaction {3}
ARJUNA024024 java.lang.String thread is already associated with a transaction and subtransaction support is not enabled!
ARJUNA024025 WARN Delist of resource failed with exception
ARJUNA024026 WARN Ending suspended RMs failed when rolling back the transaction!
ARJUNA024027 java.lang.String Ending suspended RMs failed when rolling back the transaction, but transaction rolled back.
ARJUNA024028 java.lang.String illegal resource state:
ARJUNA024029 java.lang.String Transaction is not active.
ARJUNA024031 java.lang.String Invalid transaction.
ARJUNA024032 java.lang.String Work already active!
ARJUNA024033 WARN failed to load Last Resource Optimisation Interface {0}
ARJUNA024034 java.lang.String Could not enlist resource because the transaction is marked for rollback.
ARJUNA024035 java.lang.String No such transaction!
ARJUNA024036 WARN Current transaction is not a TransactionImple
ARJUNA024037 java.lang.String no transaction!
ARJUNA024038 java.lang.String no transaction! Caught:
ARJUNA024040 java.lang.String paramater is null!
ARJUNA024042 java.lang.String is already suspended!
ARJUNA024043 WARN An error occurred while checking if this is a new resource manager:
ARJUNA024044 WARN {0} could not mark the transaction as rollback only
ARJUNA024046 WARN {0} returned XA error {1} for transaction {2}
ARJUNA024048 java.lang.String Synchronizations are not allowed!
ARJUNA024049 WARN cleanup synchronization failed to register:
ARJUNA024050 java.lang.String The transaction implementation threw a RollbackException
ARJUNA024051 java.lang.String The transaction implementation threw a SystemException
ARJUNA024052 WARN Active thread error:
ARJUNA024053 WARN {0} attempt to delist unknown resource!
ARJUNA024054 java.lang.String The current transaction does not match this transaction!
ARJUNA024055 WARN Could not call end on a suspended resource!
ARJUNA024056 WARN {0} caught XA exception: {1}
ARJUNA024057 WARN {0} setTransactionTimeout on XAResource {2} threw: {1}
ARJUNA024058 WARN Could not deserialize class. Will wait for bottom up recovery
ARJUNA024059 java.lang.String Inflow recovery is not supported for JTS mode
ARJUNA024060 WARN Could not end XA resource {0}
ARJUNA024061 WARN Could not enlist XA resource {0} with params {1}
ARJUNA024062 WARN ORB ''{0}'' occured on one phase commit for xid {1}
ARJUNA024063 WARN Cannot save state of xid {0}
ARJUNA024064 java.lang.String The current transaction {0} does not match this transaction
ARJUNA024065 WARN Cannot save state of output object state {0} of object type {1}
ARJUNA024066 WARN Cannot restore state of input object state {0} of object type {1}
ARJUNA032001 ERROR createConnection got exception
ARJUNA032002 ERROR createDataSource got exception during getXADataSource call
ARJUNA032003 WARN InstanceNotFound. Datasource {0} not deployed, or wrong name?
ARJUNA032004 ERROR createDataSource {0} got exception
ARJUNA032005 ERROR Unexpected exception occurred
ARJUNA032006 ERROR unknown Tx PropagationContext
ARJUNA032007 ERROR getCurrentTransaction() failed
ARJUNA032008 ERROR unknown Tx PropagationContext
ARJUNA032009 ERROR Unexpected exception occurred
ARJUNA032010 INFO JBossTS Recovery Service (tag: {0}) - JBoss Inc.
ARJUNA032011 java.lang.String No suitable recovery module in which to register XAResourceRecovery instance
ARJUNA032012 java.lang.String No recovery system in which to register XAResourceRecovery instance
ARJUNA032013 INFO Starting transaction recovery manager
ARJUNA032014 INFO Stopping transaction recovery manager
ARJUNA032015 java.lang.String Transaction has or will rollback.
ARJUNA032016 java.lang.String Unexpected error retrieving transaction status
ARJUNA032017 INFO JBossTS Transaction Service ({0} version - tag: {1}) - JBoss Inc.
ARJUNA032018 INFO Destroying TransactionManagerService
ARJUNA032019 WARN XAExceptionFormatters are not supported by the JBossTS Transaction Service - this warning can safely be ignored
ARJUNA032020 java.lang.String Transaction is completing!
ARJUNA032021 java.lang.String Transaction is inactive!
ARJUNA032022 java.lang.String Unexpected error!
ARJUNA032023 java.lang.String Work not registered!
ARJUNA032024 INFO JTS transaction recovery manager
ARJUNA032025 java.lang.String Transaction has or will rollback.
ARJUNA032026 java.lang.String Unexpected error retrieving transaction status
ARJUNA032027 java.lang.String Problem encountered while trying to register transaction manager with ORB!
ARJUNA032028 INFO registering transaction manager
ARJUNA032029 java.lang.String Transaction is completing!
ARJUNA032030 java.lang.String Transaction is inactive!
ARJUNA032031 java.lang.String Unexpected error!
ARJUNA032032 java.lang.String Work not registered!
ARJUNA032033 WARN AppServerJDBCXARecovery should no longer be used. See jira.jboss.org/browse/JBTM-756
ARJUNA032034 INFO Suspending transaction recovery manager
ARJUNA032035 INFO Resuming transaction recovery manager
ARJUNA032036 java.lang.String Unsupported transaction type. Transaction type is {0}
ARJUNA032037 java.lang.String Transaction listeners are disabled and should not be used. If you need them they can be enabled via -D{0}=true
ARJUNA032038 java.lang.String Invalid transaction local resource [{0}] associated with key {1}.
ARJUNA032039 java.lang.String Cannot lock a TransactionLocal after the Transaction [{0}] has ended
ARJUNA032040 java.lang.String Cannot store value in a TransactionLocal after the Transaction [{0}] has ended
ARJUNA032041 java.lang.String Unlock called from wrong thread. Locking thread: {0}, current thread: {1}
ARJUNA033001 ERROR Unable to get subordinate transaction id
ARJUNA033002 ERROR Unable to recover subordinate transaction id {0}
ARJUNA033003 WARN prepare on Xid={0} returning Aborted
ARJUNA033004 ERROR commit on Xid={0} failed
ARJUNA033005 ERROR rollback on Xid={0} failed
ARJUNA033006 INFO InboundBridgeRecoveryManager starting
ARJUNA033007 INFO InboundBridgeRecoveryManager stopping
ARJUNA033008 ERROR problem rolling back orphaned subordinate tx {0}
ARJUNA033009 ERROR Problem whilst scanning for in-doubt subordinate transactions
ARJUNA033010 WARN prepare on Xid={0} failed, setting RollbackOnly
ARJUNA033011 WARN setRollbackOnly failed
ARJUNA033012 WARN stop failed for Xid {0}
ARJUNA033013 INFO OutboundBridgeRecoveryManager starting
ARJUNA033014 INFO OutboundBridgeRecoveryManager stopping
ARJUNA033015 WARN unexpected Status {0}, treating as ROLLEDBACK
ARJUNA033016 ERROR Unable to recover subordinate transaction id={0},
ARJUNA033017 ERROR Unable to enlist BridgeXAResource or register BridgeSynchronization
ARJUNA033018 ERROR Error on prepareVolatile of bridge wrapper {0}
ARJUNA041001 WARN allHighLevelServices threw exception
ARJUNA041002 WARN assembling contexts and received exception
ARJUNA041004 java.lang.String Failed to create doc
ARJUNA041005 WARN Activity.start caught exception
ARJUNA041006 WARN currentActivity.end threw:
ARJUNA041007 WARN Activity.completed caught exception
ARJUNA041008 WARN Activity.suspended caught:
ARJUNA041009 WARN Activity.resumed caught exception
ARJUNA041010 java.lang.String Unknown activity implementation!
ARJUNA041011 java.lang.String State incompatible to start activity:
ARJUNA041012 java.lang.String Cannot remove child activity from parent as parent''s status is:
ARJUNA041013 java.lang.String Activity cannot complete as it has active children:
ARJUNA041014 java.lang.String Cannot complete activity in status:
ARJUNA041015 java.lang.String Cannot set completion status on activity as the status is incompatible:
ARJUNA041016 java.lang.String Cannot change completion status, value is incompatible:
ARJUNA041017 java.lang.String Cannot enlist null child!
ARJUNA041018 java.lang.String Cannot enlist child activity with parent as parent''s status is:
ARJUNA041019 java.lang.String Cannot remove null child!
ARJUNA041020 java.lang.String The following child activity is unknown to the parent:
ARJUNA041021 WARN ActivityReaper: could not terminate.
ARJUNA041022 java.lang.String HLS not found!
ARJUNA042001 ERROR Unhandled error executing task
ARJUNA042002 java.lang.String Invalid fault type enumeration: {0}
ARJUNA042003 java.lang.String setNamespaceContext unsupported
ARJUNA042004 java.lang.String writeEndDocument unsupported
ARJUNA042005 java.lang.String close unsupported
ARJUNA042006 java.lang.String writeComment unsupported
ARJUNA042007 java.lang.String writeProcessingInstruction unsupported
ARJUNA042008 java.lang.String writeProcessingInstruction unsupported
ARJUNA042009 java.lang.String writeEntityRef unsupported
ARJUNA042010 java.lang.String writeDTD unsupported
ARJUNA042011 java.lang.String writeStartDocument unsupported
ARJUNA042012 java.lang.String writeStartDocument unsupported
ARJUNA042013 java.lang.String writeStartDocument unsupported
ARJUNA042014 java.lang.String End of stream
ARJUNA042015 java.lang.String Unexpected child node: {0}
ARJUNA042016 java.lang.String Unexpected type: {0}
ARJUNA042017 java.lang.String Unexpected type: {0}
ARJUNA042018 java.lang.String Unexpected event type
ARJUNA042019 java.lang.String Unsupported operation
ARJUNA042020 java.lang.String Unsupported operation
ARJUNA042021 java.lang.String CData sections not currently supported.
ARJUNA042022 WARN Service {0} received unexpected fault: {1}
ARJUNA042023 java.lang.String Unexpected start element: {0}
ARJUNA042024 java.lang.String Unexpected start element: {0}
ARJUNA042025 java.lang.String NotUnderstood elements cannot have embedded elements.
ARJUNA042026 java.lang.String Unexpected element: {0}
ARJUNA042027 java.lang.String Unexpected body element: {0}
ARJUNA042028 java.lang.String Did not understand header: {0}
ARJUNA042029 java.lang.String Encountered unexpected event type: {0}
ARJUNA042030 java.lang.String Text elements cannot have embedded elements.
ARJUNA042031 java.lang.String No response from RPC request
ARJUNA042032 java.lang.String Invalid destination URL
ARJUNA042033 java.lang.String Unsupported URL type, not HTTP or HTTPS
ARJUNA042034 java.lang.String Invalid response code returned: {0}
ARJUNA042035 java.lang.String Unexpected end element: {0}
ARJUNA042036 java.lang.String Unexpected end of document reached
ARJUNA042037 java.lang.String Unexpected start element: {0}
ARJUNA042038 java.lang.String Addressing context is not valid
ARJUNA042039 java.lang.String Unexpected element name: {0}
ARJUNA042040 java.lang.String Invalid QName value for attributed QName
ARJUNA042041 java.lang.String Unexpected element name: {0}
ARJUNA042043 java.lang.String Unexpected element name: {0}
ARJUNA042044 java.lang.String Unexpected second element name: {0}
ARJUNA042045 java.lang.String Invalid QName value for attributed QName
ARJUNA042046 java.lang.String Unexpected element name: {0}
ARJUNA042047 java.lang.String Unexpected element name: {0}
ARJUNA042048 java.lang.String Addressing context does not specify destination.
ARJUNA042049 java.lang.String Invalid destination specified in addressing context.
ARJUNA042050 java.lang.String No SOAP client registered for scheme: {0}.
ARJUNA042051 java.lang.String Invalid replyTo specified in addressing context.
ARJUNA042052 java.lang.String Unexpected SOAP message type returned.
ARJUNA042053 ERROR Unhandled SOAP fault {0} during asynchronous execution of service.
ARJUNA042054 java.lang.String Arjuna context is not valid
ARJUNA042055 java.lang.String Unexpected element name: {0}
ARJUNA042056 java.lang.String InstanceIdentifier elements cannot have embedded elements.
ARJUNA042057 java.lang.String non numerical value: {0}
ARJUNA042058 java.lang.String Coordination Context is not valid
ARJUNA042059 java.lang.String Unexpected element name: {0}
ARJUNA042060 java.lang.String Create Coordination Context Response is not valid
ARJUNA042061 java.lang.String Unexpected element name: {0}
ARJUNA042062 java.lang.String Create Coordination Context is not valid
ARJUNA042063 java.lang.String Unexpected element name: {0}
ARJUNA042064 java.lang.String Register is not valid
ARJUNA042065 java.lang.String Unexpected element name: {0}
ARJUNA042066 java.lang.String Register is not valid
ARJUNA042067 java.lang.String Unexpected element name: {0}
ARJUNA042071 java.lang.String Callback execution failed
ARJUNA042072 java.lang.String Callback was not triggered
ARJUNA042073 java.lang.String Callback execution failed
ARJUNA042074 java.lang.String Callback was not triggered
ARJUNA042075 java.lang.String Invalid create coordination context parameters
ARJUNA042076 java.lang.String Participant already registered
ARJUNA042077 java.lang.String Invalid protocol identifier
ARJUNA042078 java.lang.String Invalid coordination context state
ARJUNA042079 java.lang.String Unknown activity identifier
ARJUNA042080 java.lang.String Invalid create coordination context parameters
ARJUNA042081 java.lang.String Participant already registered for this protocol identifier
ARJUNA042082 java.lang.String Invalid protocol identifier
ARJUNA042083 java.lang.String Invalid coordination context state
ARJUNA042084 java.lang.String Unknown activity identifier
ARJUNA042085 WARN Failed to create service instance: {0}
ARJUNA042086 ERROR Empty messageId received by an async endpoint
ARJUNA042087 ERROR Failure to register protocol {0} and instance {1}
ARJUNA042088 ERROR Failure to create coordination context of type {0}
ARJUNA043001 java.lang.String Invalid outcome enumeration: {0}
ARJUNA043002 java.lang.String PrepareResponse elements cannot have embedded elements.
ARJUNA043003 java.lang.String ReplayResponse elements cannot have embedded elements.
ARJUNA043004 java.lang.String Invalid fault type enumeration: {0}
ARJUNA043005 java.lang.String Invalid vote enumeration: {0}
ARJUNA043006 java.lang.String State elements cannot have embedded elements.
ARJUNA043007 java.lang.String Invalid state enumeration: {0}
ARJUNA043008 java.lang.String Invalid soap fault type
ARJUNA043009 java.lang.String Invalid fault type enumeration: {0}
ARJUNA043010 java.lang.String Invalid state enumeration: {0}
ARJUNA043011 java.lang.String Unknown transaction
ARJUNA043012 java.lang.String Unknown participant
ARJUNA043013 java.lang.String Unknown error
ARJUNA043014 java.lang.String Unknown participant
ARJUNA043015 java.lang.String Unknown transaction
ARJUNA043016 java.lang.String Unknown error
ARJUNA043017 INFO Unexpected exception while sending InvalidStateFault to participant {0}
ARJUNA043018 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043020 java.lang.String Complete called on unknown participant
ARJUNA043021 INFO Unexpected exception while sending InvalidStateFault to coordinator for participant {0}
ARJUNA043022 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043023 WARN Unexpected exception thrown from aborted:
ARJUNA043024 WARN Aborted called on unknown coordinator: {0}
ARJUNA043025 WARN Unexpected exception thrown from committed:
ARJUNA043026 WARN Committed called on unknown coordinator: {0}
ARJUNA043027 WARN Unexpected exception thrown from prepared
ARJUNA043028 WARN Prepared called on unknown coordinator: {0}
ARJUNA043029 WARN Ignoring prepared called on unidentified coordinator until recovery pass is complete: {0}
ARJUNA043030 WARN Unexpected exception thrown from readOnly
ARJUNA043031 WARN ReadOnly called on unknown coordinator: {0}
ARJUNA043032 WARN Unexpected exception thrown from replay
ARJUNA043033 WARN Replay called on unknown coordinator: {0}
ARJUNA043034 java.lang.String Unknown Transaction.
ARJUNA043035 WARN Unexpected exception thrown from soapFault
ARJUNA043036 WARN SoapFault called on unknown coordinator: {0}
ARJUNA043038 INFO Unexpected exception while sending InvalidStateFault to participant {0}
ARJUNA043039 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043041 INFO Unexpected exception while sending InvalidStateFault to coordinator for participant {0}
ARJUNA043042 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043043 WARN Unexpected exception thrown from commit
ARJUNA043044 WARN Commit called on unknown participant: {0}
ARJUNA043045 WARN Commit request dropped pending WS-AT participant recovery manager initialization for participant: {0}
ARJUNA043046 WARN Commit request dropped pending WS-AT participant recovery manager scan for unknown participant: {0}
ARJUNA043047 WARN Commit request dropped pending registration of application-specific recovery module for WS-AT participant: {0}
ARJUNA043048 WARN Unexpected exception thrown from prepare
ARJUNA043049 WARN Prepare called on unknown participant: {0}
ARJUNA043051 WARN Unexpected exception thrown from rollback
ARJUNA043052 WARN Rollback called on unknown participant: {0}
ARJUNA043053 WARN Rollback request dropped pending WS-AT participant recovery manager initialization for participant: {0}
ARJUNA043054 WARN Rollback request dropped pending WS-AT participant recovery manager scan for unknown participant: {0}
ARJUNA043055 WARN Rollback request dropped pending registration of application-specific recovery module for WS-AT participant: {0}
ARJUNA043056 WARN Unexpected exception thrown from soapFault
ARJUNA043057 WARN SoapFault called on unknown participant: {0}
ARJUNA043058 java.lang.String Unknown transaction
ARJUNA043059 java.lang.String Unknown participant
ARJUNA043060 java.lang.String Unknown transaction
ARJUNA043061 java.lang.String Unknown error
ARJUNA043062 java.lang.String Unknown participant
ARJUNA043063 java.lang.String Unknown error
ARJUNA043064 java.lang.String Unknown participant
ARJUNA043065 java.lang.String Unknown transaction
ARJUNA043066 java.lang.String Transaction rolled back
ARJUNA043067 java.lang.String Unknown error
ARJUNA043071 WARN Faulted exception from participant compensate for WS-BA participant {0}
ARJUNA043073 WARN Unable to write log record during participant complete for WS-BA parfticipant {0}
ARJUNA043074 WARN Unable to delete recovery record during faulted for WS-BA participant {0}
ARJUNA043076 WARN Unable to delete recovery record during soapFault processing for WS-BA participant {0}
ARJUNA043077 WARN Compensating participant {0}
ARJUNA043078 WARN Notifying unexpected error for participant {0}
ARJUNA043079 java.lang.String Inconsistent internal state.
ARJUNA043080 WARN Unable to write recovery record during completed for WS-BA participant {0}
ARJUNA043081 WARN Unable to delete recovery record during completed for WS-BA participant {0}
ARJUNA043082 WARN Unable to delete recovery record during close for WS-BA participant {0}
ARJUNA043083 WARN Faulted exception from participant compensate for WS-BA participant {0}
ARJUNA043084 WARN Unexpected exception from participant compensate for WS-BA participant {0}
ARJUNA043085 WARN Unable to delete recovery record during compensate for WS-BA participant {0}
ARJUNA043086 WARN Unable to delete recovery record during faulted for WS-BA participant {0}
ARJUNA043088 WARN Unable to delete recovery record during soapFault processing for WS-BA participant {0}
ARJUNA043089 WARN Cancelling participant {0}
ARJUNA043090 WARN Notifying unexpected error for participant {0}
ARJUNA043091 WARN Unable to delete recovery record during prepare for participant {0}
ARJUNA043092 WARN Unable to delete recovery record at commit for participant {0}
ARJUNA043094 WARN could not delete recovery record for participant {0}
ARJUNA043095 ERROR Unrecoverable error for participant {0} : {1} {2}
ARJUNA043096 ERROR Unable to delete recovery record at commit for participant {0}
ARJUNA043097 java.lang.String Unknown error
ARJUNA043098 ERROR Error persisting participant state
ARJUNA043099 ERROR Error restoring participant state
ARJUNA043100 WARN Error persisting participant state
ARJUNA043101 ERROR Error restoring participant state
ARJUNA043102 WARN Error persisting participant state
ARJUNA043103 WARN Error restoring participant state
ARJUNA043104 java.lang.String Unknown transaction
ARJUNA043105 java.lang.String Unknown participant
ARJUNA043106 java.lang.String Unknown error
ARJUNA043107 java.lang.String Unknown participant
ARJUNA043108 java.lang.String Unknown transaction
ARJUNA043109 java.lang.String Unknown error
ARJUNA043110 INFO Unexpected exception while sending InvalidStateFault to participant {0}
ARJUNA043111 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043112 WARN Cancel request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043113 WARN Cancel request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043114 WARN Cancel request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043115 WARN Close request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043116 WARN Close request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043117 WARN Close request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043118 WARN Compensate request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043119 WARN Compensate request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043120 WARN Compensate request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043122 WARN Complete request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043123 WARN Complete request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043124 WARN Complete request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043127 INFO Unexpected exception while sending InvalidStateFault to coordinator for participant {0}
ARJUNA043128 java.lang.String GetStatus requested for unknown coordinator completion participant
ARJUNA043129 WARN Unexpected exception thrown from aborted
ARJUNA043130 WARN Aborted called on unknown coordinator: {0}
ARJUNA043131 WARN Unexpected exception thrown from committed
ARJUNA043132 WARN Committed called on unknown coordinator: {0}
ARJUNA043133 WARN Unexpected exception thrown from prepared
ARJUNA043134 WARN Prepared called on unknown coordinator: {0}
ARJUNA043135 WARN Ignoring prepared called on unidentified coordinator until recovery pass is complete: {0}
ARJUNA043136 WARN Unexpected exception thrown from readOnly
ARJUNA043137 WARN ReadOnly called on unknown coordinator: {0}
ARJUNA043138 java.lang.String Unknown Transaction.
ARJUNA043139 WARN Unexpected exception thrown from soapFault
ARJUNA043140 WARN SoapFault called on unknown coordinator: {0}
ARJUNA043143 INFO Unexpected exception while sending InvalidStateFault to participant {0}
ARJUNA043144 java.lang.String GetStatus requested for unknown participant completion participant
ARJUNA043145 WARN Cancel request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043146 WARN Cancel request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043147 WARN Cancel request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043148 WARN Close request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043149 WARN Close request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043150 WARN Close request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043151 WARN Compensate request dropped pending WS-BA participant recovery manager initialization for participant: {0}
ARJUNA043152 WARN Compensate request dropped pending WS-BA participant recovery manager scan for unknown participant: {0}
ARJUNA043153 WARN Compensate request dropped pending registration of application-specific recovery module for WS-BA participant: {0}
ARJUNA043154 INFO Unexpected exception while sending InvalidStateFault to coordinator for participant {0}
ARJUNA043155 java.lang.String GetStatus requested for unknown participant completion participant
ARJUNA043156 WARN Unexpected exception thrown from commit
ARJUNA043157 WARN Commit called on unknown participant: {0}
ARJUNA043158 WARN Commit request dropped pending WS-AT participant recovery manager initialization for participant: {0}
ARJUNA043159 WARN Commit request dropped pending WS-AT participant recovery manager scan for unknown participant: {0}
ARJUNA043160 WARN Commit request dropped pending registration of application-specific recovery module for WS-AT participant: {0}
ARJUNA043161 WARN Unexpected exception thrown from prepare
ARJUNA043162 WARN Prepare called on unknown participant: {0}
ARJUNA043163 WARN Unexpected exception thrown from rollback
ARJUNA043164 WARN Rollback called on unknown participant: {0}
ARJUNA043165 WARN Rollback request dropped pending WS-AT participant recovery manager initialization for participant: {0}
ARJUNA043166 WARN Rollback request dropped pending WS-AT participant recovery manager scan for unknown participant: {0}
ARJUNA043167 WARN Rollback request dropped pending registration of application-specific recovery module for WS-AT participant: {0}
ARJUNA043168 WARN Unexpected exception thrown from soapFault
ARJUNA043169 WARN SoapFault called on unknown participant: {0}
ARJUNA043170 java.lang.String Unknown transaction
ARJUNA043171 java.lang.String Unknown participant
ARJUNA043172 java.lang.String Unknown transaction
ARJUNA043173 java.lang.String Unknown error
ARJUNA043174 java.lang.String Unknown participant
ARJUNA043175 java.lang.String Unknown error
ARJUNA043176 java.lang.String Unknown participant
ARJUNA043177 java.lang.String Unknown transaction
ARJUNA043178 java.lang.String Transaction rolled back
ARJUNA043179 java.lang.String Unknown error
ARJUNA043180 java.lang.String Invalid coordinator completion coordinator state
ARJUNA043185 WARN Unable to write log record during participant complete for WS-BA participant {0}
ARJUNA043186 WARN Unable to delete recovery record during failed for WS-BA participant {0}
ARJUNA043188 WARN Unable to delete recovery record during soapFault processing for WS-BA participant {0}
ARJUNA043189 WARN Cancelling participant {0}
ARJUNA043190 WARN Notifying unexpected error for participant {0}
ARJUNA043191 java.lang.String Unknown transaction
ARJUNA043192 WARN Unexpected exception while sending UnknownTransaction for participant {0}
ARJUNA043193 WARN Unable to write recovery record during completed for WS-BA participant {0}
ARJUNA043194 WARN Unable to delete recovery record during completed for WS-BA participant {0}
ARJUNA043195 WARN Unable to delete recovery record during close for WS-BA participant {0}
ARJUNA043196 WARN Unable to delete recovery record during compensate for WS-BA participant {0}
ARJUNA043197 WARN Unable to delete recovery record during failed for WS-BA participant {0}
ARJUNA043199 WARN Unable to delete recovery record during soapFault processing for WS-BA participant {0}
ARJUNA043200 WARN Compensating participant {0}
ARJUNA043201 WARN Notifying unexpected error for participant {0}
ARJUNA043203 WARN Unable to delete recovery record during prepare for participant {0}
ARJUNA043204 WARN Unable to delete recovery record at commit for participant {0}
ARJUNA043206 WARN could not delete recovery record for participant {0}
ARJUNA043207 ERROR Unrecoverable error for participant {0} : {1} {2}
ARJUNA043208 ERROR Unable to delete recovery record at commit for participant {0}
ARJUNA043209 java.lang.String Unknown error
ARJUNA043210 ERROR Error persisting participant state
ARJUNA043211 ERROR Error restoring participant state
ARJUNA043212 ERROR Error persisting participant state
ARJUNA043213 ERROR Error restoring participant state
ARJUNA043214 ERROR Error persisting participant state
ARJUNA043215 ERROR Error restoring participant state
ARJUNA043216 java.lang.String participant {0} has no saved recovery state to recover
ARJUNA043217 WARN XML stream exception restoring recovery state for participant {0}
ARJUNA043218 WARN I/O exception saving restoring state for participant {0}
ARJUNA043219 WARN Could not save recovery state for non-serializable durable WS-AT participant {0}
ARJUNA043220 WARN XML stream exception saving recovery state for participant {0}
ARJUNA043221 WARN I/O exception saving recovery state for participant {0}
ARJUNA043222 java.lang.String participant {0} has no saved recovery state to recover
ARJUNA043223 WARN XML stream exception restoring recovery state for participant {0}
ARJUNA043224 WARN I/O exception saving restoring state for participant {0}
ARJUNA043225 WARN Could not save recovery state for non-serializable WS-BA participant {0}
ARJUNA043226 WARN XML stream exception saving recovery state for participant {0}
ARJUNA043227 WARN I/O exception saving recovery state for participant {0}
ARJUNA043228 WARN SystemException thrown from rollback: {0}
ARJUNA043229 WARN Unexpected exception thrown from rollback: {0}
ARJUNA043230 WARN Unexpected exception thrown from commit: {0}
ARJUNA043231 WARN Faulted exception from participant cancel for WS-BA participant: {0}
ARJUNA043232 WARN Unexpected exception from participant cancel for WS-BA participant: {0}
ARJUNA043233 WARN Unexpected exception from participant close for WS-BA participant: {0}
ARJUNA043234 WARN Unexpected exception from participant compensate for WS-BA participant: {0}
ARJUNA043235 WARN Unexpected exception from participant complete for WS-BA participant: {0}
ARJUNA043236 WARN Faulted exception from participant cancel for WS-BA participant: {0}
ARJUNA043237 WARN Unexpected exception from participant cancel for WS-BA participant: {0}
ARJUNA043238 WARN Unexpected exception from participant close for WS-BA participant: {0}
ARJUNA044001 ERROR WSCF Initialisation: init failed
ARJUNA044002 ERROR WSCF11 Initialisation: init failed
ARJUNA044003 WARN Failed to create {0}
ARJUNA044004 WARN Failed to create {0}
ARJUNA044005 WARN Failed to create {0}
ARJUNA044006 WARN Failed to create {0}
ARJUNA044007 java.lang.String Could not find protocol:
ARJUNA044008 java.lang.String Failed to find document:
ARJUNA044009 WARN Failed to create {0}
ARJUNA044010 WARN Failed to create {0}
ARJUNA044011 WARN Failed to create {0}
ARJUNA044012 WARN Failed to create {0}
ARJUNA044013 java.lang.String Could not find protocol:
ARJUNA044014 java.lang.String Failed to find document:
ARJUNA044015 WARN Participant failed to complete in activity {1}
ARJUNA044016 java.lang.String Null is an invalid parameter.
ARJUNA044017 java.lang.String Wrong state for operation!
ARJUNA044018 java.lang.String Removal of business activity synchronization is not allowed
ARJUNA044019 java.lang.String Unknown response!
ARJUNA044020 java.lang.String CoordinatorControl.begin:
ARJUNA044021 WARN SynchronizationRecord {0} - null participant provided!
ARJUNA044022 WARN ParticipantRecord {0} - null participant provided!
ARJUNA044023 WARN ParticipantRecord.topLevelOnePhaseCommit {0} caught exception
ARJUNA044024 WARN ParticipantRecord.forgetHeuristic for {0} called without a resource!
ARJUNA044025 WARN ParticipantRecord.forgetHeuristic {0} caught exception
ARJUNA044026 WARN ParticipantRecord.complete {0} caught exception
ARJUNA044027 WARN ParticipantRecord.restore_state caught exception
ARJUNA044028 WARN ParticipantRecord.save_state caught exception
ARJUNA044029 WARN ParticipantRecord.setValue() called illegally.
ARJUNA044030 WARN ParticipantRecord.nestedAbort {0} caught exception
ARJUNA044031 WARN ParticipantRecord.nestedCommit {0} caught exception
ARJUNA044032 WARN ParticipantRecord.nestedPrepare {0} caught exception
ARJUNA044033 WARN ParticipantRecord.topLevelAbort {0} caught exception
ARJUNA044034 WARN ParticipantRecord.topLevelCommit {0} caught exception
ARJUNA044035 WARN ParticipantRecord.topLevelPrepare {0} caught exception
ARJUNA044036 WARN ParticipantRecord.nestedOnePhaseCommit {0} caught exception
ARJUNA044037 java.lang.String ArjunaCore does not support removal of participants
ARJUNA044038 java.lang.String Null is an invalid parameter!
ARJUNA044039 java.lang.String Wrong state for operation!
ARJUNA044040 java.lang.String Unknown response!
ARJUNA044041 java.lang.String CoordinatorControl.begin:
ARJUNA044042 WARN ParticipantRecord {0} - null participant provided!
ARJUNA044043 WARN ParticipantRecord.topLevelOnePhaseCommit {0} caught exception
ARJUNA044044 WARN ParticipantRecord.forgetHeuristic for {0} called without a resource!
ARJUNA044045 WARN ParticipantRecord.forgetHeuristic {0} caught exception
ARJUNA044046 WARN ParticipantRecord.restore_state caught exception
ARJUNA044047 WARN ParticipantRecord.save_state caught exception
ARJUNA044048 WARN ParticipantRecord.setValue() called illegally.
ARJUNA044049 WARN ParticipantRecord.nestedAbort {0} caught exception
ARJUNA044050 WARN ParticipantRecord.nestedCommit {0} caught exception
ARJUNA044051 WARN ParticipantRecord.nestedPrepare {0} caught exception
ARJUNA044052 WARN ParticipantRecord.topLevelAbort {0} caught exception
ARJUNA044053 WARN ParticipantRecord.topLevelCommit {0} caught exception
ARJUNA044054 WARN ParticipantRecord.topLevelPrepare {0} caught exception
ARJUNA044055 WARN ParticipantRecord.nestedOnePhaseCommit {0} caught exception
ARJUNA044056 WARN SynchronizationRecord {0} - null participant provided!
ARJUNA044057 java.lang.String Failed to create:
ARJUNA044058 java.lang.String First parameter is null!
ARJUNA044059 java.lang.String Second parameter is null!
ARJUNA044060 java.lang.String not found
ARJUNA044061 java.lang.String Failed to create:
ARJUNA044062 INFO No protocol implementations configured
ARJUNA044063 ERROR Unable to identify protocol type for class {0}
ARJUNA044064 ERROR Unable to load protocol implementation class {0} caught exception
ARJUNA044065 INFO Installed implementation class {0} for protocol type {1}
ARJUNA044066 ERROR Unable to instantiate protocol implementation class {0} caught exception
ARJUNA044067 WARN SynchronizationRecord.beforeCompletion caught exception
ARJUNA045001 WARN Error in {0}
ARJUNA045002 WARN Error in {0} Unknown context type: {1}
ARJUNA045004 ERROR WSTX Initialisation: init failed
ARJUNA045005 java.lang.String {0} not found.
ARJUNA045006 java.lang.String Failed to create document: {0}
ARJUNA045007 java.lang.String Missing WSTX Initialisation
ARJUNA045008 WARN Error in {0}
ARJUNA045009 WARN Error in {0} Unknown context type: {1}
ARJUNA045011 WARN Error in {0}
ARJUNA045012 WARN Error in {0} Unknown context type: {1}
ARJUNA045014 ERROR WSTX11 Initialisation: init failed
ARJUNA045015 java.lang.String {0} not found.
ARJUNA045016 java.lang.String Failed to create document: {0}
ARJUNA045017 java.lang.String Missing WSTX Initialisation
ARJUNA045018 WARN Error in {0}
ARJUNA045019 WARN Error in {0} Unknown context type: {1}
ARJUNA045021 WARN Invalid type URI: < {0} , {1}>
ARJUNA045022 java.lang.String Invalid type URI:
ARJUNA045023 WARN Invalid type URI: < {0} , {1}>
ARJUNA045024 java.lang.String Invalid type URI:
ARJUNA045025 WARN Invalid type URI: < {0} , {1}>
ARJUNA045026 WARN Invalid type URI: < {0} , {1}>
ARJUNA045027 WARN ignoring context {0}
ARJUNA045028 java.lang.String One context was null!
ARJUNA045029 WARN Invalid type URI: < {0} , {1}>
ARJUNA045030 java.lang.String Invalid type URI:
ARJUNA045031 WARN Invalid type URI: < {0} , {1}>
ARJUNA045032 java.lang.String Not implemented!
ARJUNA045033 ERROR comms timeout attempting to cancel WS-AT participant {0}
ARJUNA045034 WARN comms timeout attempting to commit WS-AT participant {0} : {1}
ARJUNA045035 WARN comms timeout attempting to prepare WS-AT participant {0} : {1}
ARJUNA045036 java.lang.String Not implemented!
ARJUNA045037 java.lang.String Not implemented!
ARJUNA045038 java.lang.String Received context is null!
ARJUNA045039 java.lang.String Received context is null!
ARJUNA045040 WARN Invalid type URI: < {0} , {1}>
ARJUNA045041 java.lang.String Invalid type URI:
ARJUNA045042 WARN Invalid type URI: < {0} , {1}>
ARJUNA045043 java.lang.String Invalid type URI:
ARJUNA045044 WARN Invalid type URI: < {0} , {1}>
ARJUNA045045 WARN Invalid type URI: < {0} , {1}>
ARJUNA045046 WARN Invalid type URI: < {0} , {1}>
ARJUNA045047 WARN ignoring context {0}
ARJUNA045048 java.lang.String One context was null!
ARJUNA045049 java.lang.String Invalid type URI:
ARJUNA045050 WARN Invalid type URI: < {0} , {1}>
ARJUNA045052 java.lang.String Received context is null!
ARJUNA045053 java.lang.String No termination context!
ARJUNA045054 ERROR Participant not persistable.
ARJUNA045055 ERROR Error persisting participant.
ARJUNA045056 ERROR Error restoring participant.
ARJUNA045057 WARN ignoring context {0}
ARJUNA045058 WARN ignoring context {0}
ARJUNA045060 java.lang.String Received context is null!
ARJUNA045061 java.lang.String No termination context!
ARJUNA045062 WARN Coordinator cancelled the activity
ARJUNA045063 ERROR Wrong vote type {0} on prepare of volatile 2PC participant {1}.Expecting one from {2}.
ARJUNA045064 ERROR Calling prepare on volatile participant but participant is null.
ARJUNA045065 ERROR Cannot prepare participant {0}.
ARJUNA045066 ERROR Calling confirm on volatile participant but participant is null.
ARJUNA045067 ERROR Calling cancel on volatile participant but participant is null.
ARJUNA045068 ERROR cannot commit durable participant {0} : {1}
ARJUNA045069 ERROR Calling confirm on durable participant but participant with id {0} is null.
ARJUNA045070 ERROR cannot prepare durable participant {0} : {1}
ARJUNA045071 WARN cannot commit one phase durable participant {0} : {1}
ARJUNA045072 ERROR Calling cancel on durable participant but participant with id {0} is null.
ARJUNA045073 WARN Durable participant {0} : {1} was cancelled.
ARJUNA045074 ERROR Confirm one phase call of durable participant {0} : {1} failed.
ARJUNA045075 ERROR Calling confirm one phase on durable participant but participant with id {0} is null.
ARJUNA045076 ERROR Unknown call of participant {0} : {1} failed.
ARJUNA045077 ERROR One phase confirm of participant {0} : {1} returned not expected vote {2}.
ARJUNA046002 WARN RecoveryATCoordinator.replayPhase2 transaction {0} not activated, unable to replay phase 2 commit
ARJUNA046004 WARN RecoverySubordinateATCoordinator.replayPhase2 transaction {0} not activated, unable to replay phase 2 commit
ARJUNA046006 WARN RecoverBASubordinateCoordinator.replayPhase2 transaction {0} not activated, unable to replay phase 2 commit
ARJUNA046008 WARN RecoveryBACoordinator.replayPhase2 transaction {0} not activated, unable to replay phase 2 commit
ARJUNA046010 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046011 WARN failed to recover Transaction {0}
ARJUNA046012 WARN failed to access transaction store {0}
ARJUNA046013 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046014 WARN failed to recover Transaction {0}
ARJUNA046015 WARN failed to access transaction store {0}
ARJUNA046016 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046017 WARN failed to recover Transaction {0}
ARJUNA046018 WARN failed to access transaction store {0}
ARJUNA046019 WARN failed to recover Transaction {0}
ARJUNA046020 WARN failed to access transaction store {0}
ARJUNA046021 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046022 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046023 WARN failed to access transaction store {0}
ARJUNA046024 ERROR unable to load recovery record implementation class {0} for WS-AT participant recovery record {1}
ARJUNA046025 ERROR unable to instantiate recovery record implementation class {0} for WS-AT participant recovery record {1}
ARJUNA046026 ERROR unable to unpack recovery record data for WS-AT participant recovery record {0}
ARJUNA046027 ERROR missing recovery record data for WS-AT participant recovery record {0}
ARJUNA046028 ERROR unable to read recovery record data for WS-AT participant recovery record {0}
ARJUNA046029 WARN exception writing recovery record for WS-AT participant {0}
ARJUNA046030 WARN exception removing recovery record {0} for WS-AT participant {1}
ARJUNA046031 WARN exception reactivating recovered WS-AT participant {0}
ARJUNA046032 WARN no XTS application recovery module found to help reactivate recovered WS-AT participant {0}
ARJUNA046033 WARN Compensating orphaned subordinate WS-AT transcation {0}
ARJUNA046034 WARN RecoveryManagerStatusModule: Object store exception
ARJUNA046035 WARN failed to access transaction store {0}
ARJUNA046036 ERROR unable to load recovery record implementation class {0} for WS-BA participant recovery record {1}
ARJUNA046037 ERROR unable to instantiate recovery record implementation class {0} for WS-BA participant recovery record {1}
ARJUNA046038 WARN unable to unpack recovery record data for WS-BA participant recovery record {0}
ARJUNA046039 ERROR missing recovery record data for WS-BA participant recovery record {0}
ARJUNA046040 ERROR unable to read recovery record data for WS-BA participant recovery record {0}
ARJUNA046041 WARN exception writing recovery record for WS-BA participant {0}
ARJUNA046042 WARN exception removing recovery record {0} for WS-BA participant {1}
ARJUNA046043 WARN exception reactivating recovered WS-BA participant {0}
ARJUNA046044 WARN no XTS application recovery module found to help reactivate recovered WS-BA participant {0}
ARJUNA046045 WARN Compensating orphaned subordinate WS-BA transcation {0}
ARJUNA046046 ERROR Unable to load recovery module class {0}
ARJUNA046047 ERROR Not a recovery module class {0}
ARJUNA046048 ERROR Unable to instantiate module class {0}
ARJUNA046049 ERROR Unable to access module class {0}
ARJUNA046050 ERROR Unable to load recovery module class {0}
ARJUNA046051 ERROR Not a recovery module class {0}
ARJUNA046052 ERROR Unable to instantiate module class {0}
ARJUNA046053 ERROR Unable to access module class {0}
ARJUNA047001 ERROR Unable to load XTS initialisation class {0}
ARJUNA047002 ERROR Not an XTS initialisation class {0}
ARJUNA047003 ERROR Unable to instantiate XTS initialisation class {0}
ARJUNA047004 ERROR Unable to access XTS initialisation class {0}
ARJUNA048001 WARN Could not find manifest {0}
ARJUNA048002 WARN Could not find configuration file, URL was: {0}
ARJUNA048003 WARN className is null
ARJUNA048004 WARN attempt to load {0} threw ClassNotFound. Wrong classloader?
ARJUNA048005 WARN class {0} does not implement {1}
ARJUNA048006 WARN cannot create new instance of {0}
ARJUNA048007 WARN cannot access {0}
ARJUNA048008 WARN cannot initialize from string {0}

AT

Code Level Return Type Message
AT027001 WARN Failure while removing participant information from the object store. '%s'
AT027002 WARN Failure while synchronizing participant url with RecoveryManager. '%s'
AT027003 WARN Failed to start the bridge. '%s'
AT027004 WARN Failed to stop the bridge. '%s'
AT027005 WARN Failed to enlist inbound bridge to the transaction '%s'
AT027006 WARN Failed to import transaction. '%s'
AT027007 ERROR FATAL System Exception '%s'
AT027008 WARN Exception while verifying/loading id isInStore InboundBridgeOrphanFilter.
AT027009 WARN Exception while verifying id isInStore InboundBridgeOrphanFilter.
AT027010 WARN XAException occured while subordinate rollback. '%s'
AT027011 WARN XAException occured while subordinate commit. '%s'
AT027012 WARN XAException occured while subordinate vote. '%s'
AT027013 WARN XAException occured while InboundBridgeRecoveryModule periodicWorkSecondPass. '%s'
AT027014 WARN XAException occured while InboundBridgeRecoveryModule addBridgesToMapping. '%s'
AT027015 WARN Exception occured while InboundBridgeRecoveryModule getUidsToRecover. '%s'
AT027016 WARN Exception occured while Tx Support getIntValue. '%s'
AT027017 DEBUG Exception occured while Tx Support HttpRequest. '%s'
AT027018 WARN Exception occured while Tx Support AddLocationHeader. '%s'
AT027019 WARN Exception occured while InboundBridgeParticipantDeserializer Participant deserialize. '%s'
AT027020 WARN Exception while recovering participant in Recovery Manager. '%s'
AT027021 WARN Exception while recovering participant in Recovery Manager. '%s'
AT027022 WARN Heuristic Exception while recreateParticipantInformation in Recovery Manager. '%s'
AT027023 WARN Participant Exception while recreateParticipantInformation in Recovery Manager. '%s'
AT027024 WARN Failure while persisting participant information. '%s'
AT027025 WARN Participant Exception while participant rollback in ParticipantResource. '%s'
AT027026 WARN Exception while participant rollback in ParticipantResource. '%s'
AT027027 WARN Exception while readOnly participant info in ParticipantResource. '%s'
AT027028 WARN ParticipantException while commitOnePhase in ParticipantResource. '%s'
AT027029 WARN ParticipantException while prepare in ParticipantResource. '%s'
AT027030 WARN Exception Before completion failed in VolatileParticipantResource. '%s'
AT027031 WARN Exception After completion failed in VolatileParticipantResource. '%s'
AT027032 WARN Exception while getUids in VolatileParticipantResource. '%s'
AT027033 WARN Exception could not reactivate pending transaction.'%s','%s'
AT027034 WARN Exception TM JAX-RS application failed to start.'%s'
AT027035 DEBUG Exception TM JAX-RS application failed to start.

COM

Code Level Return Type Message
COM03000 DEBUG Reaping a reference failed
COM03100 WARN Property or feature %s not supported by %s

EJBCLIENT

Code Level Return Type Message
EJBCLIENT-00001 INFO JBoss EJB Client version %s
EJBCLIENT-00001 java.lang.String No such EJB: %s
EJBCLIENT-00001 java.lang.String EJB is not stateful: %s
EJBCLIENT-00001 java.lang.String No such EJB method %s found on %s
EJBCLIENT-00001 java.lang.String Session is not active for invocation of method %s on %s
EJBCLIENT-00001 java.lang.String EJB view is not remote: %s
EJBCLIENT-00001 java.lang.IllegalStateException Context data under org.jboss.private.data was not of type Set
EJBCLIENT-00001 jakarta.ejb.EJBException IO channel timed out or closed. Check server endpoint read or write timeout settings
EJBCLIENT000000 java.lang.IllegalArgumentException Module name cannot be null or empty
EJBCLIENT000001 java.lang.IllegalArgumentException Bean name cannot be null or empty
EJBCLIENT000002 java.lang.IllegalArgumentException Bean interface type cannot be null
EJBCLIENT000003 INFO Incorrect max-allowed-connected-nodes value %s specified for cluster named %s. Defaulting to %s
EJBCLIENT000004 INFO Incorrect connection timeout value %s specified for cluster named %s. Defaulting to %s
EJBCLIENT000005 INFO Incorrect connection timeout value %s specified for node %s in cluster named %s. Defaulting to %s
EJBCLIENT000006 INFO No host/port configured for connection named %s. Skipping connection creation
EJBCLIENT000007 INFO Incorrect port value %s specified for connection named %s. Skipping connection creation
EJBCLIENT000008 INFO Incorrect connection timeout value %s specified for connection named %s. Defaulting to %s
EJBCLIENT000009 INFO Incorrect invocation timeout value %s specified. Defaulting to %s
EJBCLIENT000010 INFO Incorrect reconnect tasks timeout value %s specified. Defaulting to %s
EJBCLIENT000011 INFO Discarding result for invocation id %s since no waiting context found
EJBCLIENT000012 INFO Cannot create a EJB receiver for %s since there was no match for a target destination
EJBCLIENT000015 INFO Initial module availability report for %s wasn't received during the receiver context association
EJBCLIENT000016 INFO Channel %s can no longer process messages
EJBCLIENT000017 INFO Received server version %d and marshalling strategies %s
EJBCLIENT000022 java.lang.IllegalStateException No EJB client context is available
EJBCLIENT000024 jakarta.ejb.NoSuchEJBException No EJB receiver available for handling destination "%s"
EJBCLIENT000027 java.lang.IllegalStateException No EJBReceiver available for node name %s
EJBCLIENT000028 java.lang.IllegalStateException No EJB receiver contexts available in cluster %s
EJBCLIENT000029 java.lang.IllegalStateException No cluster context available for cluster named %s
EJBCLIENT000030 java.lang.IllegalStateException sendRequest() called during wrong phase
EJBCLIENT000031 java.lang.IllegalStateException No receiver associated with invocation
EJBCLIENT000032 java.lang.IllegalStateException Cannot retry a request which hasn't previously been completed
EJBCLIENT000033 java.lang.IllegalStateException getResult() called during wrong phase
EJBCLIENT000034 java.lang.IllegalStateException discardResult() called during wrong phase
EJBCLIENT000035 javax.naming.NamingException Not supported
EJBCLIENT000036 javax.naming.NamingException Read only naming context, operation not supported
EJBCLIENT000037 javax.naming.NamingException Could not load ejb proxy class %s
EJBCLIENT000038 java.lang.IllegalStateException Transaction enlistment did not yield a transaction ID
EJBCLIENT000039 java.lang.IllegalStateException Cannot enlist transaction
EJBCLIENT000041 java.lang.RuntimeException A session bean does not have a primary key class
EJBCLIENT000042 WARN Failed to load EJB client configuration file specified in %s system property: %s
EJBCLIENT000043 java.lang.RuntimeException Error reading EJB client properties file %s
EJBCLIENT000044 java.lang.IllegalStateException No transaction context available
EJBCLIENT000045 java.lang.IllegalStateException User transactions not supported by this context
EJBCLIENT000046 jakarta.transaction.NotSupportedException A transaction is already associated with this thread
EJBCLIENT000047 java.lang.IllegalStateException A transaction is not associated with this thread
EJBCLIENT000048 java.lang.IllegalStateException Transaction for this thread is not active
EJBCLIENT000049 java.lang.IllegalStateException Cannot proceed with invocation since transaction is pinned to node %s which has been excluded from handling invocation for the current invocation context %s
EJBCLIENT000050 java.lang.IllegalStateException Node of the current transaction %s does not accept %s
EJBCLIENT000051 java.lang.IllegalStateException Cannot proceed with invocation since the locator %s has an affinity on node %s which has been excluded from current invocation context %s
EJBCLIENT000052 java.lang.RuntimeException %s for cluster %s is not of type org.jboss.ejb.client.ClusterNodeSelector
EJBCLIENT000053 java.lang.RuntimeException Could not create the cluster node selector for cluster %s
EJBCLIENT000054 java.lang.IllegalStateException Cannot specify both a callback handler and a username/password
EJBCLIENT000055 java.lang.RuntimeException Could not decode base64 encoded password
EJBCLIENT000056 java.lang.IllegalStateException Cannot specify both a plain text and base64 encoded password
EJBCLIENT000058 java.lang.IllegalArgumentException Failed to instantiate deployment node selector class "%s"
EJBCLIENT000059 WARN Could not send a message over remoting channel, to cancel invocation for invocation id %s
EJBCLIENT000060 java.lang.RuntimeException Failed to create scoped EJB client context
EJBCLIENT000061 WARN Cannot send a transaction recovery message to the server since the protocol version of EJBReceiver %s doesn't support it
EJBCLIENT000062 javax.naming.CommunicationException Failed to look up "%s"
EJBCLIENT000063 java.lang.IllegalArgumentException EJB proxy is already stateful
EJBCLIENT000064 INFO org.jboss.ejb.client.naming.ejb.ejbURLContextFactory is deprecated; new applications should use org.wildfly.naming.client.WildFlyInitialContextFactory instead
EJBCLIENT000065 javax.naming.CommunicationException Null session was created for "%s", affinity %s, identifier %s
EJBCLIENT000066 jakarta.ejb.EJBException Operation interrupted
EJBCLIENT000067 java.lang.IllegalArgumentException Cannot convert %s to stateful
EJBCLIENT000068 java.lang.IllegalArgumentException Failed to instantiate callback handler class "%s"
EJBCLIENT000069 INFO Using legacy jboss-ejb-client.properties security configuration
EJBCLIENT000070 INFO Using legacy jboss-ejb-client.properties Remoting configuration
EJBCLIENT000071 INFO Using legacy jboss-ejb-client.properties discovery configuration
EJBCLIENT000072 INFO Using legacy jboss-ejb-client.properties EJB client configuration
EJBCLIENT000073 java.lang.IllegalStateException Failed to construct Remoting endpoint
EJBCLIENT000074 java.lang.IllegalStateException Configured selector "%s" returned null
EJBCLIENT000075 jakarta.ejb.NoSuchEJBException No transport provider available for URI scheme %2$s for locator %1$s
EJBCLIENT000076 java.lang.IllegalStateException Configured selector "%s" returned unknown node "%s"
EJBCLIENT000077 java.lang.IllegalArgumentException EJB receiver "%s" returned a null session ID for EJB "%s"
EJBCLIENT000078 java.lang.IllegalArgumentException EJB receiver "%s" returned a stateful locator with the wrong view type (expected %s, but actual was %s)
EJBCLIENT000079 jakarta.ejb.NoSuchEJBException Unable to discover destination for request for EJB %s
EJBCLIENT000080 java.lang.IllegalStateException Request not sent
EJBCLIENT000081 java.lang.IllegalArgumentException Failed to instantiate cluster node selector class "%s"
EJBCLIENT000082 jakarta.transaction.SystemException Cannot outflow the remote transaction "%s" as its timeout elapsed
EJBCLIENT000100 java.lang.IllegalArgumentException Object '%s' is not a valid proxy object
EJBCLIENT000101 java.lang.IllegalArgumentException Proxy object '%s' was not generated by %s
EJBCLIENT000102 java.lang.IllegalStateException No asynchronous operation in progress
EJBCLIENT000200 org.wildfly.client.config.ConfigXMLParseException Cannot load from a module when jboss-modules is not available
EJBCLIENT000300 java.lang.IllegalArgumentException No valid no-argument constructor on interceptor %s
EJBCLIENT000301 java.lang.IllegalArgumentException Constructor is not accessible on interceptor %s
EJBCLIENT000302 java.lang.IllegalStateException Construction of interceptor %s failed
EJBCLIENT000400 java.util.concurrent.ExecutionException Remote invocation failed due to an exception
EJBCLIENT000401 java.lang.IllegalStateException Result was discarded (one-way invocation)
EJBCLIENT000402 java.util.concurrent.CancellationException Remote invocation request was cancelled
EJBCLIENT000403 java.util.concurrent.TimeoutException Timed out
EJBCLIENT000408 jakarta.transaction.SystemException Inflowed transaction is no longer active
EJBCLIENT000409 org.jboss.ejb.client.RequestSendFailedException No more destinations are available
EJBCLIENT000500 java.io.InvalidObjectException Protocol error: mismatched method location
EJBCLIENT000501 DEBUG Protocol error: invalid message ID %02x received
EJBCLIENT000502 java.io.IOException Protocol error: invalid transaction type %02x received
EJBCLIENT000503 java.io.IOException Protocol error: unable to inflow remote transaction
EJBCLIENT000504 java.lang.IllegalStateException Server error: no session was created
EJBCLIENT000505 java.lang.IllegalStateException No remote transport is present on the current EJB client context
EJBCLIENT000506 jakarta.ejb.EJBException Server error (invalid view): %s
EJBCLIENT000507 jakarta.transaction.SystemException Internal server error occurred while processing a transaction
EJBCLIENT000508 ERROR Failed to execute Runnable %s
EJBCLIENT000509 ERROR Unexpected exception processing EJB request
EJBCLIENT000510 java.io.IOException Failed to configure SSL context
EJBCLIENT000511 java.lang.IllegalArgumentException Cannot automatically convert stateless EJB to stateful with this protocol version
EJBCLIENT000512 jakarta.ejb.EJBException Server error (remote EJB is not stateful): %s
EJBCLIENT000513 ERROR Exception occurred when trying to close the transport provider
EJBCLIENT000514 INFO No URI configured for HTTP connection named %s. Skipping connection creation
EJBCLIENT000515 INFO HTTP connection was configured with invalid URI: %s .
EJBCLIENT000516 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted
EJBCLIENT000517 WARN Exception occurred when writing EJB transaction response to invocation %s over channel %s
EJBCLIENT000518 WARN Exception occurred when writing EJB transaction recovery response for invocation %s over channel %s
EJBCLIENT000519 WARN Exception occurred when writing EJB response to invocation %s over channel %s
EJBCLIENT000520 WARN Exception occurred when writing EJB session open response to invocation %s over channel %s
EJBCLIENT000521 WARN Exception occurred when writing proceed async response to invocation %s over channel %s
EJBCLIENT000522 WARN Exception occurred when writing EJB cluster message to channel %s
EJBCLIENT000523 WARN Exception occurred when writing module availability message, closing channel %s
EJBCLIENT000524 DEBUG JavaEE to JakartaEE backward compatibility layer have been installed

ELY

Code Level Return Type Message
ELY00000 java.lang.String Unexpected value for azp (issued for) claim
ELY00001 INFO WildFly Elytron version %s
ELY00002 java.lang.IllegalArgumentException Parameter %s is empty
ELY00002 java.lang.IllegalArgumentException Parameter %s is empty
ELY00002 java.lang.IllegalArgumentException Parameter %s is empty
ELY00003 java.lang.IllegalStateException This builder has already been built
ELY00003 java.lang.IllegalStateException This builder has already been built
ELY00003 java.lang.IllegalStateException This builder has already been built
ELY00003 java.lang.IllegalStateException This builder has already been built
ELY00004 java.lang.IllegalArgumentException Unrecognized algorithm "%s"
ELY00004 java.lang.IllegalArgumentException Unrecognized algorithm "%s"
ELY00004 java.lang.IllegalArgumentException Unrecognized algorithm "%s"
ELY00005 java.lang.IllegalStateException Cannot instantiate self-referential factory
ELY00006 java.lang.IllegalArgumentException Unexpected trailing garbage in X.500 principal
ELY00007 WARN Credential destroying failed
ELY00007 WARN Credential destroying failed
ELY00008 java.lang.IllegalArgumentException The given credential is not supported here
ELY00009 java.lang.IllegalArgumentException Invalid name "%s"
ELY00011 java.security.NoSuchAlgorithmException Unable to create service for '%s.%s'
ELY00012 java.lang.IllegalStateException Unable to load OIDs database from properties file
ELY01000 java.lang.IllegalStateException Authentication name was already set on this context
ELY01001 org.wildfly.client.config.ConfigXMLParseException No module found for identifier "%s"
ELY01002 org.wildfly.client.config.ConfigXMLParseException Invalid port number "%s" specified for attribute "%s" of element "%s"; expected a numerical value between 1 and 65535 (inclusive)
ELY01003 java.lang.IllegalStateException No authentication is in progress
ELY01005 java.lang.IllegalArgumentException Realm map does not contain mapping for default realm '%s'
ELY01006 org.wildfly.security.auth.server.RealmUnavailableException No realm name found in users property file - non-plain-text users file must contain "#$REALM_NAME=RealmName$" line
ELY01007 DEBUG JAAS authentication failed for principal %s
ELY01008 org.wildfly.security.auth.server.RealmUnavailableException Failed to create login context
ELY01009 org.wildfly.security.auth.server.RealmUnavailableException Failed to instantiate custom CallbackHandler
ELY01012 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm unexpectedly failed to open path "%s" for identity name "%s"
ELY01013 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm unexpectedly failed to read path "%s" for identity name "%s"
ELY01015 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid file content in path "%s" line %d for identity name "%s"
ELY01016 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered missing required attribute "%s" in path "%s" line %d for identity name "%s"
ELY01017 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid password format "%s" in path "%s" line %d for identity name "%s"
ELY01018 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid password algorithm "%s" in path "%s" line %d for identity name "%s"
ELY01019 org.wildfly.security.auth.server.RealmUnavailableException Unable to obtain exclusive access to backing identity
ELY01020 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm failed to update identity "%s"
ELY01021 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm failed to delete identity "%s"
ELY01022 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm failed to find identity "%s"
ELY01023 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm failed to write to file "%s" for identity "%s"
ELY01024 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm cannot create duplicate identity for identity "%s"
ELY01025 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid certificate format "%s" in path "%s" line %d for identity name "%s"
ELY01026 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid key format "%s" in path "%s" line %d for identity name "%s"
ELY01027 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid key algorithm for format "%s" in path "%s" line %d for identity name "%s"
ELY01028 java.lang.IllegalArgumentException Invalid port number "%d"
ELY01029 java.lang.IllegalArgumentException Invalid host specification "%s"
ELY01030 java.io.IOException Unable to read credential
ELY01033 java.lang.IllegalStateException User does not exist
ELY01034 java.lang.IllegalStateException Invalid credential type specified
ELY01035 java.io.IOException Unable to create key manager
ELY01036 java.io.IOException Unable to create trust manager
ELY01037 java.lang.IllegalArgumentException Certificate chain is empty
ELY01041 java.lang.RuntimeException Could not obtain credential
ELY01041 java.lang.RuntimeException Could not obtain credential
ELY01042 java.lang.RuntimeException Could not obtain credential
ELY01043 java.lang.RuntimeException Invalid password key specification for algorithm "%s"
ELY01045 java.lang.RuntimeException Could not obtain PasswordFactory for algorithm "%s"
ELY01049 org.wildfly.security.auth.server.RealmUnavailableException Could not open connection
ELY01050 org.wildfly.security.auth.server.RealmUnavailableException Could not execute query "%s"
ELY01052 org.wildfly.security.auth.server.RealmUnavailableException Unexpected error when processing authentication query "%s"
ELY01053 java.security.spec.InvalidKeySpecException Insufficient data to form a digest and a salt
ELY01053 java.security.spec.InvalidKeySpecException Insufficient data to form a digest and a salt
ELY01054 java.lang.IllegalArgumentException Invalid salt "%s%s"
ELY01055 java.lang.IllegalArgumentException Invalid rounds "%s%s%s%s"
ELY01056 java.lang.IllegalArgumentException Invalid salt "%s%s%s%s"
ELY01057 java.lang.IllegalStateException No DirContext supplier set
ELY01058 java.lang.IllegalStateException No principal mapping definition
ELY01059 java.lang.IllegalArgumentException Public and private key algorithm names are mismatched
ELY01060 java.lang.RuntimeException Could not obtain principal
ELY01061 java.lang.IllegalArgumentException Public key is null
ELY01062 java.lang.IllegalStateException No provider URL has been set
ELY01063 java.lang.IllegalArgumentException Private key is null
ELY01064 java.lang.IllegalArgumentException Invalid identity name
ELY01064 java.lang.IllegalArgumentException Invalid identity name
ELY01064 java.lang.IllegalArgumentException Invalid identity name
ELY01064 java.lang.IllegalArgumentException Invalid identity name
ELY01065 java.lang.IllegalArgumentException Pattern requires a capture group
ELY01066 WARN Invalid string count for mechanism database entry "%s"
ELY01067 WARN Invalid key exchange "%s" for mechanism database entry "%s"
ELY01068 WARN Invalid authentication "%s" for mechanism database entry "%s"
ELY01069 WARN Invalid encryption "%s" for mechanism database entry "%s"
ELY01070 WARN Invalid digest "%s" for mechanism database entry "%s"
ELY01071 WARN Invalid protocol "%s" for mechanism database entry "%s"
ELY01072 WARN Invalid level "%s" for mechanism database entry "%s"
ELY01073 WARN Invalid strength bits "%s" for mechanism database entry "%s"
ELY01074 WARN Invalid algorithm bits "%s" for mechanism database entry "%s"
ELY01075 WARN Invalid duplicate mechanism database entry "%s"
ELY01076 WARN Invalid duplicate OpenSSL-style alias "%s" for mechanism database entry "%s" (original is "%s")
ELY01077 WARN Invalid alias "%s" for missing mechanism database entry "%s"
ELY01079 java.lang.RuntimeException Ldap-backed realm failed to obtain attributes for entry [%s]
ELY01080 java.lang.RuntimeException Attribute [%s] value [%s] must be in X.500 format in order to obtain RDN [%s].
ELY01081 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid OTP definition in path "%s" line %d for identity name "%s"
ELY01082 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm encountered invalid OTP algorithm "%s" in path "%s" line %d for identity name "%s"
ELY01083 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm cannot to obtain not existing identity "%s"
ELY01084 java.lang.RuntimeException Error while consuming results from search. SearchDn [%s], Filter [%s], Filter Args [%s].
ELY01085 org.wildfly.security.auth.server.RealmUnavailableException LDAP realm persister does not support given credential type
ELY01086 org.wildfly.security.auth.server.RealmUnavailableException Persisting credential %s into Ldap-backed realm failed. Identity dn: "%s"
ELY01087 org.wildfly.security.auth.server.RealmUnavailableException Clearing credentials from Ldap-backed realm failed. Identity dn: "%s"
ELY01088 org.wildfly.security.authz.AuthorizationFailureException Attempting to run as "%s" authorization operation failed
ELY01090 java.security.spec.InvalidKeySpecException Unknown LDAP password scheme
ELY01091 WARN Post-association peer context action failed
ELY01092 java.lang.IllegalArgumentException Invalid mechanism realm selection "%s"
ELY01093 java.lang.IllegalStateException Mechanism realm was already selected
ELY01094 ERROR An event handler threw an exception
ELY01095 org.wildfly.security.auth.server.RealmUnavailableException Unable to create identity
ELY01096 org.wildfly.security.auth.server.RealmUnavailableException No such identity
ELY01096 org.wildfly.security.auth.server.RealmUnavailableException No such identity
ELY01097 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm failed to delete identity from server
ELY01098 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm failed to create identity on server
ELY01099 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm is not configured to allow create new identities (new identity parent and attributes has to be set)
ELY01100 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm does not contain mapping to set Elytron attribute "%s" of identity "%s"
ELY01101 WARN Ldap-backed realm does not support setting of filtered attribute "%s" (identity "%s")
ELY01102 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm requires exactly one value of attribute "%s" mapped to RDN (identity "%s")
ELY01103 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm failed to set attributes of identity "%s"
ELY01104 java.lang.RuntimeException OAuth2-based realm failed to obtain principal
ELY01105 org.wildfly.security.auth.server.RealmUnavailableException OAuth2-based realm failed to introspect token
ELY01106 java.lang.IllegalStateException Could not obtain SSLContext
ELY01108 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm identity search failed
ELY01109 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm is not configured to allow iterate over identities (iterator filter has to be set)
ELY01112 java.lang.IllegalStateException Authentication cannot succeed; not authorized
ELY01113 java.lang.IllegalStateException Token-based realm failed to obtain principal from token using claim [%s]
ELY01114 java.lang.IllegalArgumentException Invalid token format. Tokens must have a signature part accordingly with JWS specification
ELY01115 java.lang.IllegalStateException Failed to parse token
ELY01116 java.lang.IllegalStateException Signature verification failed
ELY01117 java.lang.IllegalArgumentException Invalid signature algorithm [%s]
ELY01118 java.lang.IllegalArgumentException Public key could not be obtained. Probably due to an invalid PEM format.
ELY01119 java.lang.IllegalStateException Unable to resolve MechanismConfiguration for mechanismType='%s', mechanismName='%s', hostName='%s', protocol='%s'.
ELY01120 java.lang.IllegalStateException Too late to set mechanism information as authentication has already begun.
ELY01121 java.security.GeneralSecurityException Unable to perform initial JAAS login.
ELY01121 java.security.GeneralSecurityException Unable to perform initial JAAS login.
ELY01122 java.security.GeneralSecurityException No Kerberos principals found.
ELY01122 java.security.GeneralSecurityException No Kerberos principals found.
ELY01123 java.security.GeneralSecurityException Too many Kerberos principals found.
ELY01123 java.security.GeneralSecurityException Too many Kerberos principals found.
ELY01124 java.lang.UnsupportedOperationException The security realm does not support updating a credential
ELY01125 org.wildfly.security.auth.server.RealmUnavailableException Ldap-backed realm failed to obtain context
ELY01126 WARN Jwt-based token realm not configured with a list of valid issuers. Ignoring issuer verification.
ELY01127 WARN Jwt-based token not configured with a list of valid audiences. Ignoring audience verification.
ELY01128 WARN Jwt-based token not configured with a public key. Ignoring signature verification.
ELY01129 org.wildfly.client.config.ConfigXMLParseException Unknown SSL context "%s" specified
ELY01130 org.wildfly.client.config.ConfigXMLParseException Duplicate SSL context name "%s"
ELY01132 org.wildfly.client.config.ConfigXMLParseException Unknown authentication configuration "%s" specified
ELY01133 org.wildfly.client.config.ConfigXMLParseException Failed to create credential
ELY01134 org.wildfly.client.config.ConfigXMLParseException Duplicate authentication configuration name "%s"
ELY01135 org.wildfly.client.config.ConfigXMLParseException Failed to load keystore data
ELY01136 org.wildfly.client.config.ConfigXMLParseException Failed to create keystore
ELY01137 org.wildfly.client.config.ConfigXMLParseException Invalid key store entry type for alias "%s" (expected %s, got %s)
ELY01138 org.wildfly.security.auth.server.RealmUnavailableException Decoding hashed password from users property file failed - should not be set as plain-text property file?
ELY01139 org.wildfly.client.config.ConfigXMLParseException Failed to create credential store
ELY01140 org.wildfly.client.config.ConfigXMLParseException Wrong PEM content type; expected %s, actually was %s
ELY01141 org.wildfly.client.config.ConfigXMLParseException No PEM content found
ELY01143 org.wildfly.client.config.ConfigXMLParseException Invalid URL [%s]
ELY01145 java.lang.IllegalArgumentException Security realm [%s] must implement [%s]
ELY01146 INFO LDAP Realm unable to register listener, defering action.
ELY01147 java.lang.RuntimeException Invalid LDAP name [%s]
ELY01148 java.lang.IllegalStateException A SecurityDomain has already been associated with the specified ClassLoader
ELY01149 java.lang.IllegalArgumentException Can not use SecurityIdentity with SecurityIdentity from same SecurityDomain
ELY01150 javax.naming.NamingException Obtaining DirContext credentials from AuthenticationContext failed.
ELY01151 java.lang.SecurityException Evidence Verification Failed.
ELY01151 java.lang.SecurityException Evidence Verification Failed.
ELY01152 java.lang.SecurityException Authorization Check Failed.
ELY01153 org.wildfly.security.auth.server.RealmUnavailableException Direct LDAP verification failed with DN [%s] and absolute DN [%s]
ELY01154 org.wildfly.security.auth.server.RealmUnavailableException Failed to read key store
ELY01155 java.lang.IllegalArgumentException Security domain mismatch
ELY01156 java.io.IOException Cannot obtain a credential from a security factory
ELY01157 WARN Unable to resolve MechanismConfiguration for MechanismInformation
ELY01159 org.wildfly.client.config.ConfigXMLParseException Key store entry for alias "%s" is missing.
ELY01160 java.io.IOException KeyTab [%s] does not exists.
ELY01160 java.io.IOException KeyTab [%s] does not exists.
ELY01161 java.io.IOException No keys for Kerberos principal [%s] was found in KeyTab [%s].
ELY01161 java.io.IOException No keys for Kerberos principal [%s] was found in KeyTab [%s].
ELY01162 org.wildfly.client.config.ConfigXMLParseException Invalid GSS mechanism name "%s" - unable to convert to mechanism OID
ELY01163 org.wildfly.client.config.ConfigXMLParseException Mechanism OID conversion from string "%s" failed
ELY01164 org.wildfly.client.config.ConfigXMLParseException Unable to identify provider name=%s, for service type=%s, algorithm=%s
ELY01165 java.security.GeneralSecurityException Initial JAAS login skipped as it has failed in last %d seconds
ELY01165 java.security.GeneralSecurityException Initial JAAS login skipped as it has failed in last %d seconds
ELY01166 WARN %2$s: Element "%1$s" is deprecated
ELY01167 java.lang.SecurityException Unable to construct provider '%s'.
ELY01168 java.lang.IllegalStateException JASPIC Configuration for messageLayer=%s, and applicationContext=%s already registered.
ELY01169 java.lang.IllegalArgumentException Message type '%s' is not supported by authentication module '%s'
ELY01170 jakarta.security.auth.message.AuthException Unrecognised authContextId '%s'
ELY01171 java.lang.IllegalArgumentException Invalid message type '%s', expected '%s'.
ELY01172 java.lang.IllegalArgumentException Message does not wrap existing message of type '%s'
ELY01173 java.lang.IllegalArgumentException Message does not un-wrap existing message of type '%s'
ELY01174 java.lang.IllegalStateException Setting message of type '%s' not allowed at this time.
ELY01175 java.lang.IllegalStateException The wrapping or request / response messages is only allowed where AuthStatus==SUCCESS ServerAuthenticationModule=%s
ELY01176 java.lang.IllegalStateException Invalid AuthStatus %s returned from ServerAuthModule %s.
ELY01177 java.io.IOException Authorization failed.
ELY01178 WARN Unable to update jwk set from "%1$s".
ELY01179 WARN SSL not configured. jku claim will not be supported.
ELY01180 INFO Fetched jwk does not contain "%1$s" claim, ignoring...
ELY01181 WARN Not sending new request to jwks url "%s". Last request time was %d.
ELY02001 java.security.UnrecoverableKeyException Invalid key store entry password for alias "%s"
ELY02002 java.security.KeyStoreException Invalid key store entry type for alias "%s" (expected %s, got %s)
ELY02003 java.security.KeyStoreException Key store key for alias "%s" cannot be protected
ELY02004 java.io.IOException Key store failed to translate password for alias "%s"
ELY02005 java.security.NoSuchAlgorithmException Key store failed to identify a suitable algorithm for alias "%s"
ELY02006 java.io.IOException Unexpected whitespace in password file
ELY02007 java.io.EOFException Unexpected end of file
ELY02008 java.lang.IllegalStateException A reversible load is not possible until the KeyStore has first been initialized
ELY02009 java.io.IOException Unable to create a new KeyStore instance
ELY02009 java.io.IOException Unable to create a new KeyStore instance
ELY02010 org.wildfly.client.config.ConfigXMLParseException Unknown key store specified
ELY02012 java.lang.IllegalArgumentException An empty alias filter was supplied
ELY02013 java.lang.IllegalArgumentException Filter is missing '+' or '-' at offset %d
ELY02014 java.lang.IllegalArgumentException Invalid first word '%s', must be one of ALL/NONE
ELY02015 java.lang.IllegalStateException Failed to obtain DirContext
ELY02016 java.lang.IllegalStateException Failed to return DirContext
ELY02017 java.lang.IllegalStateException LdapKeyStore failed to obtain alias [%s]
ELY02018 java.lang.IllegalStateException LdapKeyStore failed to obtain certificate [%s]
ELY02019 java.lang.IllegalStateException LdapKeyStore failed to obtain certificate chain [%s]
ELY02020 java.lang.IllegalStateException LdapKeyStore failed to recover key of alias [%s]
ELY02021 java.lang.IllegalStateException LdapKeyStore failed to obtain alias by certificate
ELY02022 java.security.UnrecoverableKeyException LdapKeyStore failed to recover key of alias [%s]
ELY02023 java.lang.IllegalStateException LdapKeyStore failed to obtain creation date of alias [%s]
ELY02024 java.security.KeyStoreException Alias [%s] does not exist in LdapKeyStore and not configured for creation
ELY02025 java.security.KeyStoreException LdapKeyStore failed store alias [%s]
ELY02026 java.security.KeyStoreException LdapKeyStore failed to serialize certificate of alias [%s]
ELY02027 java.security.KeyStoreException LdapKeyStore failed to protect (pack into keystore) key of alias [%s]
ELY02028 java.security.KeyStoreException LdapKeyStore failed to delete alias [%s]
ELY02029 java.security.KeyStoreException LdapKeyStore failed to delete alias [%s] - alias not found
ELY02030 java.lang.IllegalStateException LdapKeyStore failed to test alias [%s] existence
ELY02031 java.lang.IllegalStateException LdapKeyStore failed to iterate aliases
ELY02032 java.security.spec.InvalidKeySpecException keySpec must be SecretKeySpect, given: [%s]
ELY02033 java.security.spec.InvalidKeySpecException key must implement SecretKeySpec and keySpec must be SecretKeySpec, given key, keySpec: [%s]
ELY02034 org.wildfly.client.config.ConfigXMLParseException Alias must be specified if more than one entry exist in keystore
ELY02035 java.security.KeyStoreException KeyStore type could not be detected
ELY03010 java.lang.IllegalArgumentException Malformed PEM content at offset %d
ELY03011 java.lang.IllegalArgumentException Invalid PEM type (expected "%s", got "%s"
ELY03012 java.lang.IllegalArgumentException Certificate parse error
ELY03013 java.lang.SecurityException Permission collection must be read-only
ELY03015 org.wildfly.security.permission.InvalidPermissionClassException Could not load permission class "%s"
ELY03016 org.wildfly.security.permission.InvalidPermissionClassException Could not instantiate permission class "%s"
ELY03017 org.wildfly.security.permission.InvalidPermissionClassException No valid permission constructor found on class "%s"
ELY03018 java.lang.SecurityException Cannot add permissions to a read-only permission collection
ELY03018 java.lang.SecurityException Cannot add permissions to a read-only permission collection
ELY03019 java.io.InvalidObjectException Failure to deserialize object: field "%s" is null
ELY03020 java.lang.IllegalArgumentException Expected empty actions string, got "%s"
ELY03021 java.lang.IllegalArgumentException Invalid permission type; expected %s, got %s
ELY03022 java.lang.SecurityException Permission check failed: %s is not implied by %s
ELY03023 java.lang.IllegalArgumentException PublicKey parse error
ELY03025 java.lang.IllegalArgumentException Iteration count not specified for password based encryption
ELY03026 java.lang.IllegalArgumentException Salt not specified for password based encryption
ELY03027 java.lang.IllegalArgumentException Initial key not specified for password based encryption
ELY03028 java.lang.IllegalArgumentException Security provider "%s" doesn't exist
ELY03029 java.lang.IllegalArgumentException No such key algorithm "%s"
ELY03030 java.io.IOException I/O operation failed: closed
ELY03031 java.security.GeneralSecurityException Too many KerberosTicket instances in private credentials
ELY03031 java.security.GeneralSecurityException Too many KerberosTicket instances in private credentials
ELY03032 java.lang.IllegalArgumentException Base64 string created with unsupported PicketBox version "%s"
ELY03033 java.lang.IllegalArgumentException PrivateKey parse error
ELY04001 java.security.NoSuchAlgorithmException No algorithm found matching TLS/SSL protocol selection criteria
ELY04002 java.security.cert.CertificateException Empty certificate chain is not trusted
ELY04003 java.security.cert.CertificateException Certificate not trusted due to realm failure for principal [%s]
ELY04004 java.security.cert.CertificateException Credential validation failed: certificate is not trusted for principal [%s]
ELY04005 java.security.NoSuchAlgorithmException No default trust manager available
ELY04005 java.security.NoSuchAlgorithmException No default trust manager available
ELY04006 javax.net.ssl.SSLHandshakeException No context for SSL connection
ELY04007 javax.net.ssl.SSLException SSL channel is closed
ELY04008 javax.net.ssl.SSLHandshakeException Initial SSL/TLS data is not a handshake record
ELY04009 javax.net.ssl.SSLHandshakeException Initial SSL/TLS handshake record is invalid
ELY04010 javax.net.ssl.SSLHandshakeException Initial SSL/TLS handshake spans multiple records
ELY04011 javax.net.ssl.SSLHandshakeException Expected "client hello" record
ELY04012 javax.net.ssl.SSLHandshakeException Unsupported SSL/TLS record
ELY04013 javax.net.ssl.SSLProtocolException Invalid TLS extension data
ELY04014 javax.net.ssl.SSLProtocolException Not enough data in record to fill declared item size
ELY04015 javax.net.ssl.SSLProtocolException Empty host name in SNI record data
ELY04016 javax.net.ssl.SSLProtocolException Duplicated SNI server name of type %d
ELY04017 java.lang.IllegalArgumentException Unknown authentication name "%s"
ELY04018 java.lang.IllegalArgumentException Unknown encryption name "%s"
ELY04019 java.lang.IllegalArgumentException Unknown key exchange name "%s"
ELY04020 java.lang.IllegalArgumentException Mechanism "%s" not supported by transformation mapper
ELY04024 java.lang.IllegalArgumentException Invalid client mode, expected %s, got %s
ELY04025 java.lang.IllegalStateException DirContext tries to connect without ThreadLocalSSLSocketFactory thread local setting
ELY04026 java.lang.IllegalStateException Could not create trust manager [%s]
ELY04027 java.lang.IllegalArgumentException SecurityDomain of SSLContext does not support X509PeerCertificateChainEvidence verification
ELY04028 java.security.NoSuchAlgorithmException No default key manager available
ELY04029 java.lang.IllegalStateException Default context cannot be null
ELY04030 javax.net.ssl.SSLException No context for SSL connection
ELY04031 java.lang.IllegalStateException TrustManagerFactory algorithm [%s] does not support certificate revocation
ELY05001 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism exchange received a message after authentication was already complete
ELY05001 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism exchange received a message after authentication was already complete
ELY05002 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism user name contains an invalid or disallowed character
ELY05004 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authorization failed
ELY05005 java.lang.IllegalStateException Authentication mechanism authentication is not yet complete
ELY05005 java.lang.IllegalStateException Authentication mechanism authentication is not yet complete
ELY05006 java.lang.IllegalStateException Authentication mechanism does not support security layer (wrapping/unwrapping)
ELY05007 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid authentication mechanism negotiation message received
ELY05008 org.wildfly.security.mechanism.AuthenticationMechanismException No authentication mechanism login name was given
ELY05009 org.wildfly.security.mechanism.AuthenticationMechanismException No authentication mechanism password was given
ELY05010 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authentication failed due to one or more malformed fields
ELY05011 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism message is too long
ELY05012 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism server-side authentication failed
ELY05013 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism password not verified
ELY05014 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authorization failed: "%s" running as "%s"
ELY05015 java.lang.IllegalArgumentException Unexpected character U+%04x at offset %d of mechanism selection string "%s"
ELY05015 java.lang.IllegalArgumentException Unexpected character U+%04x at offset %d of mechanism selection string "%s"
ELY05016 java.lang.IllegalArgumentException Unrecognized token "%s" in mechanism selection string "%s"
ELY05017 java.lang.IllegalArgumentException Token "%s" not allowed at offset %d of mechanism selection string "%s"
ELY05017 java.lang.IllegalArgumentException Token "%s" not allowed at offset %d of mechanism selection string "%s"
ELY05018 org.wildfly.security.mechanism.AuthenticationMechanismException Channel binding data changed
ELY05019 org.wildfly.security.mechanism.AuthenticationMechanismException No token was given
ELY05020 java.lang.IllegalArgumentException Unexpected end of mechanism selection string "%s"
ELY05022 org.wildfly.security.mechanism.AuthenticationMechanismException Initial challenge must be empty
ELY05023 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to set channel binding
ELY05024 org.wildfly.security.mechanism.AuthenticationMechanismException Failed to determine channel binding status
ELY05025 org.wildfly.security.mechanism.AuthenticationMechanismException Mutual authentication not enabled
ELY05026 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to map SASL mechanism name to a GSS-API OID
ELY05027 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to dispose of GSSContext
ELY05028 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create name for acceptor
ELY05029 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create GSSContext
ELY05030 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to set GSSContext request flags
ELY05031 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to accept SASL client message
ELY05032 org.wildfly.security.mechanism.AuthenticationMechanismException GSS-API mechanism mismatch between SASL client and server
ELY05033 org.wildfly.security.mechanism.AuthenticationMechanismException Channel binding not supported for this SASL mechanism
ELY05034 org.wildfly.security.mechanism.AuthenticationMechanismException Channel binding type mismatch between SASL client and server
ELY05035 org.wildfly.security.mechanism.AuthenticationMechanismException Channel binding not provided by client
ELY05036 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to determine peer name
ELY05037 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism client refuses to initiate authentication
ELY05038 org.wildfly.security.mechanism.AuthenticationMechanismException Nonces do not match
ELY05039 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid length of nonce received
ELY05040 org.wildfly.security.mechanism.AuthenticationMechanismException Iteration count %d is below the minimum of %d
ELY05041 org.wildfly.security.mechanism.AuthenticationMechanismException Iteration count %d is above the maximum of %d
ELY05043 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid server message
ELY05044 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid server message
ELY05045 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid client message
ELY05046 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid client message
ELY05047 org.wildfly.security.mechanism.AuthenticationMechanismException [%s] Authentication mechanism message is for mismatched mechanism "%s"
ELY05049 org.wildfly.security.mechanism.AuthenticationMechanismException Server authenticity cannot be verified
ELY05050 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler does not support user name
ELY05051 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler does not support credential acquisition
ELY05052 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler does not support authorization
ELY05053 javax.security.sasl.SaslException Callback handler failed for unknown reason
ELY05053 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler failed for unknown reason
ELY05053 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler failed for unknown reason
ELY05053 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler failed for unknown reason
ELY05055 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication rejected (invalid proof)
ELY05056 org.wildfly.security.mechanism.AuthenticationMechanismException Client sent extra message
ELY05057 org.wildfly.security.mechanism.AuthenticationMechanismException Server sent extra message
ELY05058 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication failed
ELY05058 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication failed
ELY05060 java.lang.NumberFormatException Empty number
ELY05061 java.lang.NumberFormatException Invalid numeric character
ELY05062 java.lang.NumberFormatException Too big number
ELY05063 org.wildfly.security.mechanism.AuthenticationMechanismException Cannot get clear password from two way password
ELY05064 org.wildfly.security.mechanism.AuthenticationMechanismException Hashing algorithm not supported
ELY05065 org.wildfly.security.mechanism.AuthenticationMechanismException keyword cannot be empty
ELY05066 org.wildfly.security.mechanism.AuthenticationMechanismException No value found for keyword: %s
ELY05067 org.wildfly.security.mechanism.AuthenticationMechanismException '=' expected after keyword: %s
ELY05068 org.wildfly.security.mechanism.AuthenticationMechanismException Unmatched quote found for value: %s
ELY05069 org.wildfly.security.mechanism.AuthenticationMechanismException Expecting comma or linear whitespace after quoted string: %s
ELY05070 org.wildfly.security.mechanism.AuthenticationMechanismException MessageType must equal to %d, but it is %d
ELY05071 org.wildfly.security.mechanism.AuthenticationMechanismException Bad sequence number while unwrapping: expected %d, but %d received
ELY05072 org.wildfly.security.mechanism.AuthenticationMechanismException Problem during crypt
ELY05073 org.wildfly.security.mechanism.AuthenticationMechanismException Problem during decrypt
ELY05074 org.wildfly.security.mechanism.AuthenticationMechanismException Unknown cipher "%s"
ELY05075 org.wildfly.security.mechanism.AuthenticationMechanismException Authorization ID changed unexpectedly
ELY05076 org.wildfly.security.mechanism.AuthenticationMechanismException Problem getting required cipher. Check your transformation mapper settings.
ELY05077 org.wildfly.security.mechanism.AuthenticationMechanismException No common protection layer between client and server
ELY05078 org.wildfly.security.mechanism.AuthenticationMechanismException No common cipher between client and server
ELY05079 org.wildfly.security.mechanism.AuthenticationMechanismException No ciphers offered by server
ELY05080 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler not provided user name
ELY05083 org.wildfly.security.mechanism.AuthenticationMechanismException Missing "%s" directive
ELY05084 org.wildfly.security.mechanism.AuthenticationMechanismException nonce-count must equal to %d, but it is %d
ELY05085 org.wildfly.security.mechanism.AuthenticationMechanismException Server is set to not support %s charset
ELY05086 org.wildfly.security.mechanism.AuthenticationMechanismException Charset can be only "utf-8" or unspecified (to use ISO 8859-1)
ELY05087 org.wildfly.security.mechanism.AuthenticationMechanismException Client selected realm not offered by server (%s)
ELY05088 org.wildfly.security.mechanism.AuthenticationMechanismException digest-uri "%s" not accepted
ELY05089 org.wildfly.security.mechanism.AuthenticationMechanismException Unexpected qop value: "%s"
ELY05090 java.lang.IllegalStateException Wrapping is not configured
ELY05090 java.lang.IllegalStateException Wrapping is not configured
ELY05091 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication name string is too long
ELY05092 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication name is empty
ELY05093 org.wildfly.security.mechanism.AuthenticationMechanismException Authorization for anonymous access is denied
ELY05094 java.lang.IllegalArgumentException Required padded length (%d) is less than length of conversion result (%d)
ELY05095 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid key provided for Digest HMAC computing
ELY05097 java.lang.IllegalStateException Unable to determine subject name from X.509 certificate
ELY05098 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to verify client signature
ELY05099 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to verify server signature
ELY05101 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler not provided server certificate
ELY05102 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler not provided client certificate
ELY05103 org.wildfly.security.mechanism.AuthenticationMechanismException Server identifier mismatch
ELY05104 org.wildfly.security.mechanism.AuthenticationMechanismException Client identifier mismatch
ELY05105 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to determine client name
ELY05106 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler not provided private key
ELY05107 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create signature
ELY05108 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create response token
ELY05109 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to create response token
ELY05110 java.lang.IllegalArgumentException Invalid value for trusted authority type; expected a value between 0 and 4 (inclusive)
ELY05111 java.lang.IllegalArgumentException Invalid value for a general name type; expected a value between 0 and 8 (inclusive)
ELY05112 org.wildfly.security.mechanism.AuthenticationMechanismException Getting authentication mechanisms supported by GSS-API failed
ELY05113 java.lang.RuntimeException Unable to initialize OID of Kerberos V5
ELY05114 org.wildfly.security.mechanism.AuthenticationMechanismException Receive buffer requested '%d' is greater than supported maximum '%d'
ELY05115 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to wrap message
ELY05116 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to unwrap message
ELY05117 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to unwrap security layer negotiation message
ELY05118 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid message of length %d on unwrapping
ELY05119 org.wildfly.security.mechanism.AuthenticationMechanismException Negotiated mechanism was not Kerberos V5
ELY05120 org.wildfly.security.mechanism.AuthenticationMechanismException Insufficient levels of protection available for supported security layers
ELY05121 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to generate security layer challenge
ELY05122 org.wildfly.security.mechanism.AuthenticationMechanismException Client selected a security layer that was not offered by server
ELY05123 org.wildfly.security.mechanism.AuthenticationMechanismException No security layer selected but message length received
ELY05124 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to get maximum size of message before wrap
ELY05125 javax.security.sasl.SaslException Unable to handle response from server
ELY05125 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to handle response from server
ELY05125 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to handle response from server
ELY05126 org.wildfly.security.mechanism.AuthenticationMechanismException Bad length of message for negotiating security layer
ELY05127 org.wildfly.security.mechanism.AuthenticationMechanismException No security layer supported by server but maximum message size received: "%d"
ELY05128 org.wildfly.security.mechanism.AuthenticationMechanismException Failed to read challenge file
ELY05129 org.wildfly.security.mechanism.AuthenticationMechanismException Failed to create challenge file
ELY05130 java.lang.IllegalArgumentException Invalid non-ASCII space "0x%X"
ELY05131 java.lang.IllegalArgumentException Invalid ASCII control "0x%X"
ELY05132 java.lang.IllegalArgumentException Invalid non-ASCII control "0x%X"
ELY05133 java.lang.IllegalArgumentException Invalid private use character "0x%X"
ELY05134 java.lang.IllegalArgumentException Invalid non-character code point "0x%X"
ELY05135 java.lang.IllegalArgumentException Invalid surrogate code point "0x%X"
ELY05136 java.lang.IllegalArgumentException Invalid plain text code point "0x%X"
ELY05137 java.lang.IllegalArgumentException Invalid non-canonical code point "0x%X"
ELY05138 java.lang.IllegalArgumentException Invalid control character "0x%X"
ELY05139 java.lang.IllegalArgumentException Invalid tagging character "0x%X"
ELY05140 java.lang.IllegalArgumentException Unassigned code point "0x%X"
ELY05141 java.lang.IllegalArgumentException Invalid surrogate pair (high at end of string) "0x%X"
ELY05142 java.lang.IllegalArgumentException Invalid surrogate pair (second is not low) "0x%X 0x%X"
ELY05143 java.lang.IllegalArgumentException Invalid surrogate pair (low without high) "0x%X"
ELY05144 java.lang.IllegalArgumentException Invalid code point "0x%X"
ELY05145 java.lang.IllegalArgumentException Disallowed R/AL directionality character in L string
ELY05146 java.lang.IllegalArgumentException Disallowed L directionality character in R/AL string
ELY05147 java.lang.IllegalArgumentException Missing trailing R/AL directionality character
ELY05148 java.lang.IllegalArgumentException Invalid escape sequence
ELY05150 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authorization ID is too long
ELY05151 javax.security.sasl.SaslException Invalid OTP algorithm "%s"
ELY05151 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP algorithm "%s"
ELY05151 javax.security.sasl.SaslException Invalid OTP algorithm "%s"
ELY05152 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP response type
ELY05153 org.wildfly.security.mechanism.AuthenticationMechanismException Incorrect parity in SASL client message
ELY05154 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid character in seed
ELY05155 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP seed, must be between 1 and 16 characters long
ELY05156 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP pass phrase, must be between 10 and 63 characters long
ELY05157 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP sequence number
ELY05158 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP
ELY05159 org.wildfly.security.mechanism.AuthenticationMechanismException OTP pass phrase and seed must not match
ELY05160 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP alternate dictionary
ELY05161 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to retrieve password for "%s"
ELY05162 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to update password for "%s"
ELY05163 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism server timed out
ELY05163 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism server timed out
ELY05164 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to obtain exclusive access for "%s"
ELY05165 org.wildfly.security.mechanism.AuthenticationMechanismException OTP re-initialization failed
ELY05166 org.wildfly.security.mechanism.ScramServerException Server rejected authentication
ELY05167 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid OTP password format type
ELY05168 org.wildfly.security.mechanism.AuthenticationMechanismException Unsupported algorithm selected "%s"
ELY05169 java.lang.String [%s] Clients response token does not match expected token
ELY05170 org.wildfly.security.mechanism.AuthenticationMechanismException Problem during crypt: The encrypted result is null. The input data has a length of zero or too short to result in a new block.
ELY05171 org.wildfly.security.mechanism.AuthenticationMechanismException Problem during decrypt: The decrypted result is null. The input data has a length of zero or too short to result in a new block.
ELY05172 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to locate MechanismConfiguration for mechanism.
ELY05173 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to obtain server credential.
ELY05174 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler has not chosen realm
ELY05175 org.wildfly.security.mechanism.AuthenticationMechanismException Unable to determine bound server name
ELY05176 org.wildfly.security.mechanism.AuthenticationMechanismException Unsupported callback
ELY05177 org.wildfly.security.mechanism.AuthenticationMechanismException One of "%s" and "%s" directives has to be defined
ELY06000 java.lang.IllegalStateException Status code can not be set at this time.
ELY06001 java.lang.String An incorrectly formatted '%s'header was encountered.
ELY06002 java.lang.String An authentication attempt for user '%s' failed validation using mechanism '%s'.
ELY06003 java.lang.String An authentication attempt failed validation.
ELY06005 java.lang.UnsupportedOperationException Attachments are not supported on this scope.
ELY06006 java.lang.String An authorization check for user '%s' failed.
ELY06007 java.lang.String Username or password missing from authentication attempt.
ELY06008 WARN Failed to logout participant [%s]. Participant will be removed from list of participants but its local session may still be active.
ELY06012 java.lang.IllegalStateException Invalid logout message received for local session [%s]
ELY06013 ERROR Failed to invalidate local session
ELY06014 org.wildfly.security.http.HttpAuthenticationException Authentication mechanism '%s' cannot be found
ELY06015 org.wildfly.security.http.HttpAuthenticationException Unable to authenticate using DIGEST mechanism - realm name needs to be specified
ELY06016 org.wildfly.security.http.HttpAuthenticationException HTTP authentication failed validating request, no mechanisms remain to continue authentication.
ELY06017 org.wildfly.security.http.HttpAuthenticationException HTTP authentication is required but no authentication mechansims are available.
ELY06018 org.wildfly.security.http.HttpAuthenticationException HTTP authentication none of the responders successfuly sent a response.
ELY06019 org.wildfly.security.http.HttpAuthenticationException Unable to authenticate using DIGEST mechanism - mechanism realm name (%s) is not valid
ELY06020 java.lang.IllegalArgumentException Scope unsuitable for use with authentication state '%s'
ELY06021 java.lang.IllegalArgumentException Unable to identify suitable HttpScope for mechanism state storage
ELY06022 org.wildfly.security.http.HttpAuthenticationException Invalid nonce count %s
ELY07001 org.wildfly.security.asn1.ASN1Exception Unrecognized encoding algorithm [%s]
ELY07001 org.wildfly.security.asn1.ASN1Exception Unrecognized encoding algorithm [%s]
ELY07002 org.wildfly.security.asn1.ASN1Exception Invalid general name type
ELY07004 org.wildfly.security.asn1.ASN1Exception Unexpected ASN.1 tag encountered
ELY07004 org.wildfly.security.asn1.ASN1Exception Unexpected ASN.1 tag encountered
ELY07004 org.wildfly.security.asn1.ASN1Exception Unexpected ASN.1 tag encountered
ELY07005 org.wildfly.security.asn1.ASN1Exception Unable to read X.509 certificate data
ELY07006 org.wildfly.security.asn1.ASN1Exception Invalid general name for URI type
ELY07007 org.wildfly.security.asn1.ASN1Exception Invalid general name for IP address type
ELY07008 org.wildfly.security.asn1.ASN1Exception IP address general name cannot be resolved
ELY07009 java.lang.IllegalStateException No sequence to end
ELY07010 java.lang.IllegalStateException No set to end
ELY07011 java.lang.IllegalStateException No explicitly tagged element to end
ELY07012 org.wildfly.security.asn1.ASN1Exception Unexpected end of input
ELY07013 org.wildfly.security.asn1.ASN1Exception Invalid number of unused bits
ELY07014 org.wildfly.security.asn1.ASN1Exception Non-zero length encountered for null type tag
ELY07015 org.wildfly.security.asn1.ASN1Exception Invalid high-tag-number form
ELY07016 org.wildfly.security.asn1.ASN1Exception Length encoding exceeds 4 bytes
ELY07017 org.wildfly.security.asn1.ASN1Exception Invalid OID character
ELY07018 org.wildfly.security.asn1.ASN1Exception OID must have at least 2 components
ELY07019 org.wildfly.security.asn1.ASN1Exception Invalid value for first OID component; expected 0, 1, or 2
ELY07020 org.wildfly.security.asn1.ASN1Exception Invalid value for second OID component; expected a value between 0 and 39 (inclusive)
ELY07021 org.wildfly.security.asn1.ASN1Exception Invalid length
ELY07022 org.wildfly.security.asn1.ASN1Exception Unknown tag type: %d
ELY07023 org.wildfly.security.asn1.ASN1Exception Unexpected character byte for printable string
ELY07024 org.wildfly.security.asn1.ASN1Exception Invalid length encountered for boolean type tag
ELY07025 org.wildfly.security.asn1.ASN1Exception Invalid general name for URI type: missing scheme
ELY08001 java.security.spec.InvalidKeySpecException Unrecognized key spec algorithm
ELY08002 java.security.spec.InvalidKeySpecException Password spec cannot be rendered as a string
ELY08003 java.security.spec.InvalidKeySpecException Unknown crypt string algorithm
ELY08004 java.security.spec.InvalidKeySpecException Invalid character encountered
ELY08005 java.security.spec.InvalidKeySpecException No iteration count terminator given
ELY08006 java.security.spec.InvalidKeySpecException Unexpected end of input string
ELY08007 java.security.spec.InvalidKeySpecException No salt terminator given
ELY08008 java.lang.IllegalArgumentException Invalid hash length
ELY08009 java.security.spec.InvalidKeySpecException Unexpected end of password string
ELY08010 java.security.spec.InvalidKeySpecException Unexpected end of password string
ELY08011 java.security.spec.InvalidKeySpecException Invalid minor version
ELY08012 java.security.spec.InvalidKeySpecException Invalid cost: must be a two digit integer
ELY08013 java.security.spec.InvalidKeySpecException No such MessageDigest algorithm for "%s"
ELY08013 java.security.spec.InvalidKeySpecException No such MessageDigest algorithm for "%s"
ELY08014 java.security.InvalidKeyException No such MessageDigest algorithm for "%s"
ELY08014 java.security.InvalidKeyException No such MessageDigest algorithm for "%s"
ELY08015 java.security.InvalidKeyException Cannot verify password
ELY08015 java.security.InvalidKeyException Cannot verify password
ELY08017 java.security.InvalidKeyException DES crypt password hash must be %d bytes
ELY08017 java.security.InvalidKeyException DES crypt password hash must be %d bytes
ELY08018 java.security.spec.InvalidParameterSpecException Salt must be %d bytes (%d bits)
ELY08018 java.security.spec.InvalidParameterSpecException Salt must be %d bytes (%d bits)
ELY08020 java.lang.IllegalArgumentException Invalid number of rounds. Must be an integer between %d and %d, inclusive
ELY08020 java.lang.IllegalArgumentException Invalid number of rounds. Must be an integer between %d and %d, inclusive
ELY08021 java.lang.IllegalArgumentException Invalid salt: must be %d bytes long
ELY08021 java.lang.IllegalArgumentException Invalid salt: must be %d bytes long
ELY08022 java.security.spec.InvalidKeySpecException BSD DES crypt password hash must be %d bytes
ELY08022 java.security.spec.InvalidKeySpecException BSD DES crypt password hash must be %d bytes
ELY08023 java.security.spec.InvalidParameterSpecException Salt must be %d bytes
ELY08023 java.security.spec.InvalidParameterSpecException Salt must be %d bytes
ELY08024 java.security.InvalidKeyException BSD DES crypt password hash must be %d bytes
ELY08024 java.security.InvalidKeyException BSD DES crypt password hash must be %d bytes
ELY08025 java.security.spec.InvalidKeySpecException Expected to get a "%s" as spec, got "%s"
ELY08025 java.security.spec.InvalidKeySpecException Expected to get a "%s" as spec, got "%s"
ELY08026 java.security.spec.InvalidKeySpecException Unknown algorithm or incompatible PasswordSpec
ELY08026 java.security.spec.InvalidKeySpecException Unknown algorithm "%s" or incompatible PasswordSpec "%s"
ELY08027 java.security.InvalidKeyException Unknown password type or algorithm
ELY08027 java.security.InvalidKeyException Unknown password type or algorithm
ELY08027 java.security.InvalidKeyException Unknown password type or algorithm
ELY08028 java.security.NoSuchAlgorithmException Invalid algorithm "%s"
ELY08028 java.security.NoSuchAlgorithmException Invalid algorithm "%s"
ELY08029 java.lang.IllegalArgumentException Could not obtain key spec encoding identifier.
ELY08030 java.security.spec.InvalidParameterSpecException Failed to encode parameter specification
ELY08031 java.io.IOException Failed to decode parameter specification
ELY08032 java.security.spec.InvalidParameterSpecException Invalid parameter specification type (expected %s, got %s)
ELY08033 java.io.IOException Invalid format given (expected %s, got %s)
ELY08034 java.lang.IllegalStateException Algorithm parameters instance not initialized
ELY08500 ERROR Failed to check permissions for protection domain [%s] and permission [%s].
ELY08501 java.lang.UnsupportedOperationException Invalid state [%s] for operation.
ELY08502 java.lang.IllegalArgumentException Can't link policy configuration [%s] to itself.
ELY08503 java.lang.IllegalStateException ContextID not set. Check if the context id was set using PolicyContext.setContextID.
ELY08504 java.lang.IllegalArgumentException Invalid policy context identifier [%s].
ELY08505 jakarta.security.jacc.PolicyContextException Could not obtain PolicyConfiguration for contextID [%s].
ELY08506 java.lang.IllegalStateException Policy configuration with contextID [%s] is not in service state.
ELY08508 DEBUG Could not obtain authorized identity.
ELY08510 java.lang.IllegalStateException Role mapper has already been initialized.
ELY08511 java.lang.IllegalStateException Role mapper hasn't been initialized yet.
ELY09000 java.lang.IllegalArgumentException Public and private key parameters are mismatched
ELY09001 java.lang.IllegalStateException Client credentials not provided
ELY09500 org.wildfly.security.credential.store.CredentialStoreException External storage key under alias "%s" has to be a SecretKey
ELY09501 org.wildfly.client.config.ConfigXMLParseException Duplicate attribute ("%s") found in configuration.
ELY09502 org.wildfly.client.config.ConfigXMLParseException Duplicate credential store name found in configuration "%s"
ELY09503 org.wildfly.client.config.ConfigXMLParseException Credential store name "%s" not defined
ELY09504 org.wildfly.security.credential.store.CredentialStoreException Cannot acquire a credential from the credential store
ELY09505 org.wildfly.security.credential.store.CredentialStoreException Cannot perform operation '%s': Credential store is set non modifiable
ELY09506 java.io.InterruptedIOException Credential store command interrupted
ELY09507 org.wildfly.security.credential.store.CredentialStoreException Invalid protection parameter given: %s
ELY09508 org.wildfly.security.credential.store.CredentialStoreException Cannot write credential to store
ELY09509 org.wildfly.security.credential.store.UnsupportedCredentialTypeException Unsupported credential type %s
ELY09510 org.wildfly.security.credential.store.CredentialStoreException Invalid credential store keystore entry %s: expected %s
ELY09511 org.wildfly.security.credential.store.CredentialStoreException Unable to read credential %s from store
ELY09511 org.wildfly.security.credential.store.CredentialStoreException Unable to read credential %s from store
ELY09512 org.wildfly.security.credential.store.CredentialStoreException Unable to remove credential from store
ELY09513 org.wildfly.security.credential.store.CredentialStoreException Unable to flush credential store to storage
ELY09514 org.wildfly.security.credential.store.CredentialStoreException Unable to initialize credential store
ELY09515 DEBUG Ignored unrecognized key store entry "%s"
ELY09516 WARN Failed to read a credential entry from the key store
ELY09517 org.wildfly.security.credential.store.CredentialStoreException This credential store type requires a store-wide protection parameter
ELY09518 org.wildfly.security.credential.store.CredentialStoreException Automatic storage creation for the Credential Store is disabled "%s"
ELY09519 java.io.IOException Unexpected credential store external storage file version "%s"
ELY09520 java.io.IOException Unrecognized entry type "%s"
ELY09521 java.io.IOException Internal encryption problem while reading "%s"
ELY09522 org.wildfly.security.credential.store.CredentialStoreException "%s" is not a block based algorithm
ELY09523 org.wildfly.security.credential.store.CredentialStoreException Algorithm "%s" does not use an initialization vector (IV)
ELY09524 java.io.IOException The actual number of bytes read %d is different from the expected number of bytes %d to be read
ELY09525 org.wildfly.security.credential.store.CredentialStoreException location and externalPath initial attributes are the same. [location=%s, externalPath=%s]
ELY09526 org.wildfly.security.credential.store.CredentialStoreException Unable to initialize credential store as attribute %s is unsupported in %s
ELY09527 org.wildfly.client.config.ConfigXMLParseException Invalid credential store reference
ELY09528 org.wildfly.security.credential.store.CredentialStoreException The externalPath attribute for key store type %s is missing.
ELY09529 org.wildfly.client.config.ConfigXMLParseException Unsupported algorithm "%s" for %s type
ELY10000 java.lang.IllegalArgumentException X.509 certificate extension with OID %s already exists
ELY10001 java.lang.IllegalArgumentException No signature algorithm name given
ELY10002 java.lang.IllegalArgumentException Signature algorithm name "%s" is not recognized
ELY10003 java.lang.IllegalArgumentException No signing key given
ELY10004 java.lang.IllegalArgumentException Signing key algorithm name "%s" is not compatible with signature algorithm name "%s"
ELY10005 java.lang.IllegalArgumentException Not-valid-before date of %s is after not-valid-after date of %s
ELY10006 java.lang.IllegalArgumentException No issuer DN given
ELY10007 java.lang.IllegalArgumentException No public key given
ELY10008 java.lang.IllegalArgumentException Issuer and subject unique ID are only allowed in certificates with version 2 or higher
ELY10009 java.lang.IllegalArgumentException Extensions are only allowed in certificates with version 3 or higher
ELY10010 java.lang.IllegalArgumentException X.509 encoding of public key with algorithm "%s" failed
ELY10011 java.lang.IllegalArgumentException Failed to sign certificate
ELY10012 java.lang.IllegalArgumentException Certificate serial number must be positive
ELY10013 java.lang.IllegalArgumentException Certificate serial number too large (cannot exceed 20 octets)
ELY10014 java.lang.IllegalArgumentException Failed to sign certification request info
ELY10015 java.lang.IllegalArgumentException No certificate given
ELY10016 java.lang.IllegalArgumentException Unable to determine key size
ELY10016 java.lang.IllegalArgumentException Unable to determine key size
ELY10017 java.lang.IllegalArgumentException No DN given
ELY10018 java.lang.IllegalArgumentException Failed to generate self-signed X.509 certificate
ELY10019 java.lang.IllegalArgumentException Unable to determine default compatible signature algorithm name for key algorithm name "%s"
ELY10019 java.lang.IllegalArgumentException Unable to determine default compatible signature algorithm name for key algorithm name "%s"
ELY10020 java.lang.IllegalArgumentException Creating an X.509 certificate extension from a string value is not supported for extension name "%s"
ELY10021 java.lang.IllegalArgumentException Invalid X.509 certificate extension string value "%s"
ELY10022 java.lang.IllegalArgumentException Failed to create X.509 certificate extension from string value
ELY10023 java.lang.IllegalArgumentException X.509 certificate extension "%s" must be non-critical
ELY10024 java.lang.IllegalArgumentException Invalid X.509 certificate extension string value
ELY10025 java.lang.IllegalArgumentException Non-X.509 certificate found in certificate array
ELY10026 java.lang.IllegalArgumentException Starting public key not found in certificate array
ELY10027 java.lang.IllegalArgumentException Incomplete certificate array
ELY10028 java.lang.IllegalArgumentException Unable to create X.509 certificate chain from map of certificates
ELY10029 java.lang.IllegalArgumentException Failed to generate ACME account key pair
ELY10030 java.lang.IllegalArgumentException No ACME server URL given
ELY10031 java.lang.IllegalArgumentException Unsupported ACME account signature algorithm "%s"
ELY10032 java.lang.IllegalArgumentException Unable to create ACME signature
ELY10033 org.wildfly.security.x500.cert.acme.AcmeException Unable to retrieve ACME server directory URLs
ELY10034 org.wildfly.security.x500.cert.acme.AcmeException No nonce provided by ACME server
ELY10035 org.wildfly.security.x500.cert.acme.AcmeException No %s location URL provided by ACME server
ELY10036 org.wildfly.security.x500.cert.acme.AcmeException Unable to obtain new nonce from ACME server
ELY10037 org.wildfly.security.x500.cert.acme.AcmeException Unable to obtain JSON response from ACME server
ELY10038 org.wildfly.security.x500.cert.acme.AcmeException Unexpected HTTP status code in response from ACME server "%d": "%s"
ELY10039 org.wildfly.security.x500.cert.acme.AcmeException Bad ACME replay nonce, maximum retries attempted
ELY10040 org.wildfly.security.x500.cert.acme.AcmeException Unexpected content type in response from ACME server "%s"
ELY10041 org.wildfly.security.x500.cert.acme.AcmeException Invalid content type in response from ACME server
ELY10042 org.wildfly.security.x500.cert.acme.AcmeException Domain name is null
ELY10043 org.wildfly.security.x500.cert.acme.AcmeException Domain names is empty
ELY10044 org.wildfly.security.x500.cert.acme.AcmeException No certificate URL provided by ACME server
ELY10045 org.wildfly.security.x500.cert.acme.AcmeException No certificate will be issued by the ACME server
ELY10046 org.wildfly.security.x500.cert.acme.AcmeException Unable to get encoded form of certificate to be revoked
ELY10047 org.wildfly.security.x500.cert.acme.AcmeException Unable to determine key authorization string
ELY10048 org.wildfly.security.x500.cert.acme.AcmeException Challenge response failed validation by the ACME server
ELY10049 org.wildfly.security.x500.cert.acme.AcmeException Unable to download certificate chain from ACME server
ELY10050 org.wildfly.security.x500.cert.acme.AcmeException ACME account does not exist
ELY10051 org.wildfly.security.x500.cert.acme.AcmeException User action required since the ACME server's terms of service have changed, visit "%s" for details
ELY10052 org.wildfly.security.x500.cert.acme.AcmeException Rate limit has been exceeded, try again after "%s"
ELY10053 org.wildfly.security.x500.cert.acme.AcmeException Rate limit has been exceeded
ELY10054 org.wildfly.security.x500.cert.acme.AcmeException Resource not supported by the ACME server "%s"
ELY10055 java.lang.IllegalArgumentException Unsupported ACME account public key type "%s"
ELY10056 java.lang.IllegalArgumentException Unable to determine curve parameter from alg header "%s"
ELY10057 org.wildfly.security.x500.cert.acme.AcmeException No ACME server staging URL given
ELY11001 FATAL Endpoint unable to handle SecurityEvent priority=%s, message=%s
ELY11002 java.lang.IllegalArgumentException Invalid EventPriority '%s' passed to AuditEndpoint.
ELY11003 ERROR Unable to rotate log file
ELY11004 java.lang.IllegalArgumentException Invalid suffix "%s" - rotating by second or millisecond is not supported
ELY11005 java.io.IOException Invalid unicode endoding, offending sequence: %s.
ELY11006 org.wildfly.security.credential.store.CredentialStoreException External storage key under alias "%s" does not exist
ELY11007 FATAL Endpoint unable to accept SecurityEvent.
ELY12001 java.io.IOException The maximum reconnect attempts value of %s was reached. The syslog endpoint will be shutdown.
ELY12002 java.net.PortUnreachableException The configured UDP port is unavailable.
ELY12003 java.lang.IllegalArgumentException The reconnect attempts value of %s is invalid. Please use an integer value >= -1.
ELY13000 java.lang.IllegalStateException Authorization principal cannot be null after transformation
ELY13001 WARN Realm is failing over.
ELY13002 javax.security.auth.callback.UnsupportedCallbackException %s does not handle a callback of type %s
ELY13003 org.wildfly.security.auth.server.RealmUnavailableException Failed to load JAAS configuration file.
ELY13004 DEBUG JAAS logout failed for principal %s
ELY13005 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm unable to decrypt identity
ELY13006 org.wildfly.security.auth.server.RealmUnavailableException Filesystem-backed realm unable to encrypt identity
ELY13007 org.wildfly.security.auth.realm.IntegrityException Signature for the following identity is invalid: %s.
ELY13008 org.wildfly.security.auth.server.RealmUnavailableException Unable to create a signature for the file: %s.
ELY13009 org.wildfly.security.auth.server.RealmUnavailableException Unable to locate the signature element for the file: %s
ELY13010 java.lang.IllegalArgumentException Both PrivateKey and PublicKey must be defined for realm at: %s
ELY13011 java.lang.IllegalArgumentException Integrity has not been enabled for the realm at: %s
ELY13012 WARN A realm within the distributed realm is unavailable. This realm will be ignored.
ELY14000 org.wildfly.client.config.ConfigXMLParseException At least one of the '%s' and '%s' cipher-suite attributes must be provided
ELY14001 org.wildfly.client.config.ConfigXMLParseException Wrong Key content type; expected OpenSSH private key
ELY14002 org.wildfly.client.config.ConfigXMLParseException Unable to obtain SSLContext
ELY14003 org.wildfly.client.config.ConfigXMLParseException Name callback handling was unsuccessful
ELY14004 org.wildfly.client.config.ConfigXMLParseException Password callback handling was unsuccessful
ELY14005 java.security.NoSuchAlgorithmException Default SSL context in security provider creates infinite loop
ELY14006 java.lang.IllegalArgumentException Configuration file path passed to WildFlyElytronClientDefaultSSLContextProvider not found
ELY14007 java.lang.IllegalArgumentException Invalid path passed to WildFlyElytronClientDefaultSSLContextProvider
ELY14008 java.security.NoSuchAlgorithmException WildFlyElytronClientDefaultSSLContextProvider could not obtain client default SSLContext
ELY15000 java.lang.IllegalArgumentException Unknown cipher suite name '%s' in names string '%s'
ELY15001 java.security.NoSuchAlgorithmException No '%s' provided by the configured providers
ELY16000 java.lang.IllegalArgumentException Invalid replacement in regex role mapper.
ELY16001 java.lang.IllegalArgumentException Invalid pattern in regex role mapper.
ELY16002 java.lang.IllegalArgumentException Can not handle SecurityEvent with SecurityIdentity from other SecurityDomain
ELY17000 java.io.IOException Failed to create credential
ELY19000 java.security.GeneralSecurityException Invalid size value. Must be one of 128, 192, or 256
ELY19001 java.security.GeneralSecurityException Invalid prefix importing SecretKey
ELY19002 java.security.GeneralSecurityException Unsupported version '%d' the maximum supported version is '%d'
ELY19003 java.security.GeneralSecurityException Unexpected token type '%s', expected '%s'
ELY19004 java.security.GeneralSecurityException Unable to decode Base64 token.
ELY20000 org.wildfly.security.credential.store.CredentialStoreException The credential store file %s does not exist or cannot be accessed.
ELY20001 org.wildfly.security.credential.store.CredentialStoreException The credential store has not been initialised.
ELY20002 org.wildfly.security.credential.store.CredentialStoreException The required initialisation attribute '%s' has not been specified.
ELY20003 org.wildfly.security.credential.store.CredentialStoreException Invalid CredentialStore property '%s'.
ELY20004 org.wildfly.security.credential.store.CredentialStoreException Can not load SecretKey for '%s'.
ELY21000 java.security.InvalidAlgorithmParameterException Invalid algorithm parameter specification
ELY21001 java.security.InvalidAlgorithmParameterException Invalid sequence number algorithm parameter "%s"
ELY22000 WARN Changing the session ID has been disabled, ensure session tracking uses cookies only to avoid session fixation.
ELY22500 WARN Changing the session ID has been disabled, ensure session tracking uses cookies only to avoid session fixation.
ELY23000 org.wildfly.security.http.oidc.OidcException Unexpected HTTP status code in response from OIDC provider "%d"
ELY23001 org.wildfly.security.http.oidc.OidcException No entity in response from OIDC provider
ELY23002 org.wildfly.security.http.oidc.OidcException Unexpected error sending request to OIDC provider
ELY23003 java.lang.IllegalArgumentException Either provider-url or auth-server-url needs to be configured
ELY23004 INFO Loaded OpenID provider metadata from '%s'
ELY23005 WARN Unable to load OpenID provider metadata from %s
ELY23006 java.lang.RuntimeException Failed to decode request URI
ELY23007 java.lang.RuntimeException Failed to write to response output stream
ELY23008 java.lang.IllegalArgumentException Unable to parse token
ELY23009 java.lang.RuntimeException OIDC client configuration file not found
ELY23010 ERROR Failed to invoke remote logout
ELY23011 ERROR Refresh token failure
ELY23012 ERROR Refresh token failure status: %d %s
ELY23013 ERROR Failed verification of token: %s
ELY23014 ERROR Failed to refresh the token with a longer time-to-live than the minimum
ELY23015 java.lang.IllegalArgumentException No expected issuer given
ELY23016 java.lang.IllegalArgumentException No client ID given
ELY23017 java.lang.IllegalArgumentException No expected JWS algorithm given
ELY23018 java.lang.IllegalArgumentException No JWKS public key or client secret key given
ELY23019 org.wildfly.security.http.oidc.OidcException Invalid ID token
ELY23020 java.lang.IllegalArgumentException Invalid token claim value
ELY23021 org.wildfly.security.http.oidc.OidcException Invalid ID token claims
ELY23022 java.lang.RuntimeException Must set 'realm' in config
ELY23023 java.lang.RuntimeException Must set 'resource' or 'client-id'
ELY23024 java.lang.IllegalArgumentException For bearer auth, you must set the 'realm-public-key' or one of 'auth-server-url' and 'provider-url'
ELY23025 java.lang.RuntimeException Must set 'auth-server-url' or 'provider-url'
ELY23026 WARN Client '%s' does not have a secret configured
ELY23027 java.lang.IllegalArgumentException Unsupported public key
ELY23028 java.lang.IllegalArgumentException Unable to create signed token
ELY23029 java.lang.RuntimeException Configuration of jwt credentials is missing or incorrect for client '%s'
ELY23030 java.lang.RuntimeException Missing parameter '%s' in jwt credentials for client %s
ELY23031 java.lang.IllegalArgumentException Unable to parse key '%s' with value '%s'
ELY23032 java.lang.RuntimeException Unable to load key with alias '%s' from keystore
ELY23033 java.lang.RuntimeException Unable to load private key from keystore
ELY23034 java.lang.RuntimeException Unable to find keystore file '%s'
ELY23035 java.lang.RuntimeException Configuration of secret jwt client credentials is missing or incorrect for client '%s'
ELY23036 java.lang.RuntimeException Invalid value for 'algorithm' in secret jwt client credentials configuration for client '%s'
ELY23037 java.lang.RuntimeException Unable to determine client credentials provider type for client '%s'
ELY23038 java.lang.RuntimeException Unable to find client credentials provider '%s'
ELY23039 java.lang.RuntimeException Unable to load keystore
ELY23040 java.lang.RuntimeException Unable to load truststore
ELY23041 java.lang.RuntimeException Unable to find truststore file '%s'
ELY23042 java.lang.String Unexpected value for at_hash claim
ELY23043 java.lang.IllegalArgumentException Uknown algorithm: '%s'
ELY23044 WARN Failed to parse token from cookie
ELY23045 java.lang.IllegalArgumentException Unable to create redirect response
ELY23046 java.lang.RuntimeException Unable to set auth server URL
ELY23047 java.lang.RuntimeException Unable resolve a relative URL
ELY23048 java.lang.RuntimeException Invalid URI: '%s'
ELY23049 WARN Invalid 'auth-server-url' or 'provider-url': '%s'
ELY23050 org.wildfly.security.http.oidc.OidcException Invalid bearer token claims
ELY23051 org.wildfly.security.http.oidc.OidcException Invalid bearer token
ELY23052 WARN No trusted certificates in token
ELY23053 WARN No peer certificates established on the connection
ELY23054 java.lang.String Unexpected value for typ claim
ELY23055 java.io.IOException Unable to obtain token: %d
ELY23056 java.io.IOException No message entity
ELY24000 java.lang.IllegalArgumentException Unable to parse string JWK
ELY24001 java.lang.IllegalArgumentException Unsupported key type for JWK: "%s"
ELY24002 java.lang.IllegalArgumentException Unsupported curve
ELY24003 java.lang.RuntimeException Unable to create public key from JWK
ELY24004 java.lang.RuntimeException Unable to generate thumbprint for the certificate
ELY26000 java.lang.RuntimeException JsonNode ["%s"] is not a object.
ELY40000 java.lang.IllegalArgumentException Malformed OpenSSH Private Key: %s
ELY40001 java.lang.IllegalArgumentException Unable to Generate Key: %s
ELY40002 java.lang.IllegalArgumentException Malformed PEM content when parsing SSH at offset %d

ELYEE

Code Level Return Type Message
ELYEE00001 java.lang.IllegalStateException No ThreadLocal CallbackHandler available.
ELYEE00002 java.lang.IllegalStateException Unrecognised context type '%s'.
ELYEE00003 java.lang.IllegalStateException No registration for '%s'.

ELYTOOL

Code Level Return Type Message
ELYTOOL00000 java.lang.String Command or alias "%s" not found.
ELYTOOL00000 java.lang.String Input data not confirmed. Exiting.
ELYTOOL00000 java.lang.String %s %s
ELYTOOL00000 java.lang.String Exception encountered executing the command:
ELYTOOL00000 java.lang.String Printing general help message:
ELYTOOL00000 java.lang.String Location of credential store storage file
ELYTOOL00000 java.lang.String "credential-store" command is used to perform various operations on credential store.
ELYTOOL00000 java.lang.String Implementation properties for credential store type in form of "prop1=value1; ... ;propN=valueN" .%nSupported properties are dependent on credential store type%nKeyStoreCredentialStore (default implementation) supports following additional properties (all are optional):%nkeyStoreType - specifies the key store type to use (defaults to "JCEKS")%nkeyAlias - specifies the secret key alias within the key store to use for encrypt/decrypt of data in external storage (defaults to "cs_key")%nexternal - specifies whether to store data to external storage and encrypted by keyAlias key (defaults to "false")%ncryptoAlg - cryptographic algorithm name to be used to encrypt/decrypt entries at external storage "external" has to be set to "true"
ELYTOOL00000 java.lang.String Password for credential store
ELYTOOL00000 java.lang.String Password for KeyStore. Can also be provided by console prompt.
ELYTOOL00000 java.lang.String Name of an environment variable from which to resolve the KeyStore password.
ELYTOOL00000 java.lang.String Salt to apply for final masked password of the credential store
ELYTOOL00000 java.lang.String Iteration count for final masked password of the credential store
ELYTOOL00000 java.lang.String Password credential value
ELYTOOL00000 java.lang.String The alias of the existing password entry to encrypt
ELYTOOL00000 java.lang.String Type of entry in credential store
ELYTOOL00000 java.lang.String Comma separated list of JCA provider names. Providers will be supplied to the credential store instance.%nEach provider must be installed through java.security file or through service loader from properly packaged jar file on classpath.
ELYTOOL00000 java.lang.String Provider name containing CredentialStoreSpi implementation.%nProvider must be installed through java.security file or through service loader from properly packaged jar file on classpath.
ELYTOOL00000 java.lang.String Create credential store (Action)
ELYTOOL00000 java.lang.String Credential store type
ELYTOOL00000 java.lang.String Add new alias to the credential store (Action)
ELYTOOL00000 java.lang.String Remove alias from the credential store (Action)
ELYTOOL00000 java.lang.String Check if alias exists within the credential store (Action)
ELYTOOL00000 java.lang.String Display all aliases (Action)
ELYTOOL00000 java.lang.String Display all types of stored credentials for given alias (Action)
ELYTOOL00000 java.lang.String Generate private and public key pair and store them as a KeyPairCredential
ELYTOOL00000 java.lang.String Size (number of bytes) of the keys when generating a KeyPairCredential.
ELYTOOL00000 java.lang.String Encryption algorithm to be used when generating a KeyPairCredential: RSA, DSA, or EC. Default RSA
ELYTOOL00000 java.lang.String Prints the public key stored under a KeyPairCredential as Base64 encoded String, in OpenSSH format.
ELYTOOL00000 java.lang.String Import a KeyPairCredential into the credential store.
ELYTOOL00000 java.lang.String The location of a file containing a private key.
ELYTOOL00000 java.lang.String The location of a file containing a public key.
ELYTOOL00000 java.lang.String The passphrase used to decrypt the private key.
ELYTOOL00000 java.lang.String A private key specified as a String.
ELYTOOL00000 java.lang.String A public key specified as a String.
ELYTOOL00000 java.lang.String Print summary, especially command how to create this credential store
ELYTOOL00000 java.lang.String Get help with usage of this command (Action)
ELYTOOL00000 java.lang.String Alias "%s" exists
ELYTOOL00000 java.lang.String Alias "%s" does not exist
ELYTOOL00000 java.lang.String Alias "%s" of type "%s" does not exist
ELYTOOL00000 java.lang.String Alias "%s" has been successfully stored
ELYTOOL00000 java.lang.String Alias "%s" of type "%s" has been successfully stored
ELYTOOL00000 java.lang.String Alias "%s" has been successfully removed
ELYTOOL00000 java.lang.String Alias "%s" of type "%s" has been successfully removed
ELYTOOL00000 java.lang.String Credential store command summary:%n--------------------------------------%n%s
ELYTOOL00000 java.lang.String Credential store contains following aliases: %s
ELYTOOL00000 java.lang.String Credential store contains no aliases
ELYTOOL00000 java.lang.Exception Action to perform on the credential store is not defined
ELYTOOL00000 java.lang.String Credential store password:
ELYTOOL00000 java.lang.String Confirm credential store password:
ELYTOOL00000 java.lang.String Passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key):
ELYTOOL00000 java.lang.String Confirm passphrase to be used to decrypt private key (can be nothing if no passphrase was used to encrypt the key):
ELYTOOL00000 java.lang.String Secret to store:
ELYTOOL00000 java.lang.String Confirm secret to store:
ELYTOOL00000 java.lang.String The retrieved PasswordCredential does not contain a ClearTextPassword
ELYTOOL00000 java.lang.String "mask" command is used to get MASK- string encrypted using PBEWithMD5AndDES in PicketBox compatible way.
ELYTOOL00000 java.lang.String Salt to apply to masked string
ELYTOOL00000 java.lang.String Iteration count for masked string
ELYTOOL00000 java.lang.String Secret to be encrypted
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Secret not specified.
ELYTOOL00000 java.lang.String "vault" command is used convert PicketBox Security Vault to credential store using default implementation (KeyStoreCredentialStore) or custom implementation set with the "type" option.
ELYTOOL00000 java.lang.String Vault keystore URL (defaults to "vault.keystore")
ELYTOOL00000 java.lang.String Vault keystore password:%n- used to open original vault key store%n- used as password for new converted credential store
ELYTOOL00000 java.lang.String Vault directory containing encrypted files (defaults to "vault")
ELYTOOL00000 java.lang.String 8 character salt (defaults to "12345678")
ELYTOOL00000 java.lang.String Iteration count (defaults to "23")
ELYTOOL00000 java.lang.String Vault key alias within key store (defaults to "vault")
ELYTOOL00000 java.lang.String Configuration parameters for credential store in form of: "parameter1=value1; ... ;parameterN=valueN"%nSupported parameters are dependent on credential store type%nGenerally supported parameters for default credential store implementation (all are optional):%ncreate - automatically creates credential store file (true/false)%nmodifiable - is the credential modifiable (true/false)%nlocation - file location of credential store%nkeyStoreType - specify the key store type to use
ELYTOOL00000 java.lang.String Vault Conversion summary:%n--------------------------------------%n%s%n--------------------------------------%n
ELYTOOL00000 java.lang.String Vault Conversion Successful%n
ELYTOOL00000 java.lang.String CLI command to add new credential store:%n
ELYTOOL00000 java.lang.String Bulk conversion with options listed in description file. All options have no default value and should be set in the file. (Action)%nAll options are required with the exceptions:%n - "properties" option%n - "type" option (defaults to "KeyStoreCredentialStore")%n - "credential-store-provider" option%n - "other-providers" option%n - "salt" and "iteration" options can be omitted when plain-text password is used%nEach set of options must start with the "keystore" option in the following format:%n keystore:%nkeystore-password:%nenc-dir:%nsalt:%niteration:%nlocation:%nalias:%nproperties:=; ... ;=%ntype:%ncredential-store-provider:%nother-providers:
ELYTOOL00000 java.lang.String Print summary of conversion
ELYTOOL00000 java.lang.String Converted credential store type (defaults to "KeyStoreCredentialStore")
ELYTOOL00000 java.lang.String Location of credential store storage file (defaults to "converted-vault.cr-store" in vault encryption directory)
ELYTOOL00000 java.lang.String Vault (enc-dir="%s";keystore="%s") converted to credential store "%s"
ELYTOOL00000 java.lang.String Credential Store has been successfully created
ELYTOOL00000 java.lang.String Vault password:
ELYTOOL00000 java.lang.String Mask secret:
ELYTOOL00000 java.lang.String Confirm mask secret:
ELYTOOL00000 java.lang.String Print stack trace when error occurs.
ELYTOOL00000 java.lang.String Exception encountered executing the command. Use option "--debug" for complete exception stack trace.
ELYTOOL00000 java.lang.String In the message below, option '%s' refers to long option '%s'.
ELYTOOL00000 java.lang.String 'FileSystemRealm' command is used to convert legacy properties files and scripts to an Elytron FileSystemRealm.
ELYTOOL00000 java.lang.String The relative or absolute path to the users file.
ELYTOOL00000 java.lang.String The relative or absolute path to the credential store file that contains the secret key.
ELYTOOL00000 java.lang.String The alias of the secret key stored in the credential store file. Set to key by default
ELYTOOL00000 java.lang.String Whether or not the credential store should be populated with a Secret Key. Set to true by default.
ELYTOOL00000 java.lang.String Whether or not the credential store should be dynamically created if it doesn't exist. Set to true by default.
ELYTOOL00000 java.lang.String The relative or absolute path to the KeyStore file that contains the key pair. Only %napplicable if the filesystem realm has integrity verification enabled.
ELYTOOL00000 java.lang.String The type of KeyStore to be used. Optional, only applicable if the filesystem %nrealm has integrity verification enabled.
ELYTOOL00000 java.lang.String The alias of the key pair to be used, within the KeyStore. Set to integrity-key by default, only %napplicable if the filesystem realm has integrity verification enabled.
ELYTOOL00000 java.lang.String Password for KeyStore. Can also be provided by console prompt. Only applicable if %nthe filesystem realm has integrity verification enabled.
ELYTOOL00000 java.lang.String Name of an environment variable from which to resolve the KeyStore password. Only %napplicable if the filesystem realm has integrity verification enabled.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Input Realm location not specified.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Input Realm location directory does not exist.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Output Realm location not specified.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException Credential Store location not specified.
ELYTOOL00000 java.lang.String A required parameter is not specified.
ELYTOOL00000 java.lang.String The hash encoding to be used in the filesystem realm. Set to BASE64 by default.
ELYTOOL00000 java.lang.String If the original realm has encoded set to true. Set to true by default.
ELYTOOL00000 java.lang.String The levels to be used in the filesystem realm. Set to 2 by default.
ELYTOOL00000 java.lang.String The absolute or relative location of the original filesystem realm.
ELYTOOL00000 java.lang.String The directory where the new filesystem realm resides.
ELYTOOL00000 java.lang.String The name of the new filesystem-realm.
ELYTOOL00000 java.lang.String The relative or absolute path to the roles file.
ELYTOOL00000 java.lang.String The relative or absolute path to the output directory.
ELYTOOL00000 java.lang.String Name of the filesystem-realm to be configured.
ELYTOOL00000 java.lang.String Name of the security-domain to be configured.
ELYTOOL00000 java.lang.String Bulk conversion with options listed in description file. Optional options have default values, required options do not. (Action) %nThe options fileSystemRealmName and securityDomainName are optional. %nThese optional options have default values of: converted-properties-filesystem-realm and converted-properties-security-domain. %nValues are required for the following options: users-file, roles-file, and output-location. %nIf one or more these required values are not set, the corresponding block is skipped. %nEach option must be specified in the following format:
ELYTOOL00000 java.lang.String Bulk conversion with options listed in description file. Optional options have default values, required options do not. (Action) %nThe options realm-name, hash-encoding, levels, secret-key, create, populate, keystore, type, password, password-env, and key-pair are optional. %nValues are required for the following options: input-location, output-location, and credential-store. %nThe default values of realm-name, hash-encoding, hash-charset, levels, secret-key, create, and populate are encrypted-filesystem-realm, BASE64, UTF-8, 2, key, true, and true respectively. %nIf one or more these required values are not set, the corresponding block is skipped. %nIf keystore is provided, then either password or password-env are required. %nEach option must be specified in the following format:
ELYTOOL00000 java.lang.String Bulk conversion with options listed in description file. (Action)Optional options have defaults and can be skipped ([type, default_or_NULL]), required options do not (). %nOne of either password or password-env is required. %nBlocks of options must be separated by a blank line; order is not important. Syntax: %ninput-location:%noutput-location:[directory,NULL]%nrealm-name:[name,filesystem-realm-with-integrity]%nkeystore:%ntype:[name,NULL]%npassword:[password,NULL]%npassword-env:[name,NULL]%nkey-pair:[name,integrity-key]%ncredential-store:[file,NULL]%nsecret-key:[name,NULL]%nlevels:[number,2]%nhash-encoding:[name,BASE64]%nhash-charset:[name,UTF-8]%nencoded:[bool,true]
ELYTOOL00000 java.lang.String 'FileSystemRealmEncrypt' command is used to convert non-empty, un-encrypted FileSystemSecurityRealm(s) to encrypted FileSystemSecurityRealm(s) with a SecretKey.
ELYTOOL00000 java.lang.String Secret Key was not found in the Credential Store at %s, and populate option was not set. Skipping descriptor file block number %d.
ELYTOOL00000 java.lang.String The directory where the new filesystem realm resides. If not provided, realm will be upgraded in-place (with backup), %nand realm-name option will not be used in file path.
ELYTOOL00000 java.lang.String The name of the new filesystem-realm. Will be appended to output-location path (if output-location is provided). %nWhen not set, nothing is appended to the path, and `filesystem-realm-with-integrity` is used for the WildFly resource name.%n
ELYTOOL00000 java.lang.String The relative or absolute path to the KeyStore file that contains the key pair.
ELYTOOL00000 java.lang.String The type of KeyStore to be used. Optional.
ELYTOOL00000 java.lang.String The alias of the key pair to be used, within the KeyStore. Set to integrity-key by default.
ELYTOOL00000 java.lang.String The relative or absolute path to the secret-key-credential-store file. Only %napplicable if the filesystem realm is encrypted.
ELYTOOL00000 java.lang.String The alias of the secret key stored in the credential store file. Set to key by default, only %napplicable if the filesystem realm is encrypted.
ELYTOOL00000 java.lang.String The number of levels used in the input filesystem realm. Set to 2 by default.
ELYTOOL00000 java.lang.String The hash encoding used in the input filesystem realm. Set to BASE64 by default.%nRegardless of setting, the output realm will always be BASE64-encoded.
ELYTOOL00000 java.lang.String The character set used to convert the password string to a byte array. Defaults to UTF-8.
ELYTOOL00000 java.lang.String Indicates if the original realm used Base32-encoded identities as file names.%nSet to true by default. Regardless of setting, the output realm will always use Base32-encoding in file names.
ELYTOOL00000 org.apache.commons.cli.MissingOptionException Both --bulk-convert and at least one other realm configuration option was specified. %nThe bulk-convert option may only be used with --help, --debug, --silent, and --summary options.
ELYTOOL00000 java.lang.String 'FileSystem Realm Integrity' command is used to sign existing, non-empty FileSystem Security Realms with a key pair, for future integrity validation.
ELYTOOL00000 java.lang.String KeyStore password:
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException KeyStore path not specified.
ELYTOOL00000 org.apache.commons.cli.MissingArgumentException KeyStore does not exist.
ELYTOOL00000 java.lang.IllegalArgumentException Encoded option must be set to 'true' or 'false'.
ELYTOOL00000 java.lang.String Suppresses all output except errors and prompts.
ELYTOOL00000 java.lang.String Provides a detailed summary of all operations performed, once the command finishes.
ELYTOOL00000 org.apache.commons.cli.MissingOptionException No users file specified. Please use either --bulk-convert or specify a users file using --users-file
ELYTOOL00000 org.apache.commons.cli.MissingOptionException No roles file specified. Please use either --bulk-convert or specify a roles file using --roles-file
ELYTOOL00000 org.apache.commons.cli.MissingOptionException No output location specified. Please use either --bulk-convert or specify an output location using --output-location
ELYTOOL00000 org.apache.commons.cli.MissingOptionException Both --bulk-convert and one or more of --users-file, --roles-file, and/or --output-location were specified. Please only use --bulk-convert or all of --users-file, --roles-file, and --output-location.
ELYTOOL00000 org.apache.commons.cli.MissingOptionException Both --bulk-convert and one or more of --old-realm-name, --new-realm-name, --input-location, --output-location, --credential-store, --secret-key, --keystore, --type, --key-pair, --password and/or --password-env were specified. Please only use --bulk-convert or all of the other others.
ELYTOOL00000 java.lang.String No value found for %s.
ELYTOOL00000 java.io.FileNotFoundException Could not find the specified file %s.
ELYTOOL00000 java.lang.String Could not copy input filesystem realm at %s for in-place upgrade.%nOutput filesystem will be placed at %s
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to %s.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing input realm location.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing credential store location.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing output realm location.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing KeyStore path.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing KeyStore password.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to invalid KeyStore path.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to failure to load KeyStore.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to failure to load key pair.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing private key.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing public key.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to missing new filesystem realm name.
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to no identities present in filesystem realm.%nKeys for this realm can be added via the management client.
ELYTOOL00000 java.lang.String Creating encrypted realm for: %s
ELYTOOL00000 java.lang.String Creating filesystem realm with integrity verification for: %s
ELYTOOL00000 java.lang.String In-place upgrade for descriptor block %d: filesystem realm backed up at %s%nRealm name will not be used in output realm path.
ELYTOOL00000 java.lang.String Should file %s be overwritten? (y/n)
ELYTOOL00000 java.lang.String Some of the parameters below are mutually exclusive actions which are marked with (Action) in the description.
ELYTOOL00000 java.lang.String Key size (bits).
ELYTOOL00000 java.lang.String Generate a new SecretKey and store it in the credential store.
ELYTOOL00000 java.lang.String Export existing SecretKey stored in the credential store.
ELYTOOL00000 java.lang.String Exported SecretKey for alias %s=%s
ELYTOOL00000 java.lang.String The encoded Key to import.
ELYTOOL00000 java.lang.String Import an existing encoded SecretKey to the credential store.
ELYTOOL00000 java.lang.String SecretKey to import:
ELYTOOL00000 java.lang.String Encrypt a clear text string using the SecretKey specified by .
ELYTOOL00000 java.lang.String The clear text to encrypt.
ELYTOOL00000 java.lang.String Clear text value:
ELYTOOL00000 java.lang.String Confirm clear text value:
ELYTOOL00000 java.lang.String Clear text encrypted to token '%s' using alias '%s'.
ELYTOOL00000 java.lang.IllegalArgumentException Location that has been specified '%s' does not exist and automatic storage creation for the Credential Store is disabled.
ELYTOOL00000 java.lang.String Credential store contains credentials of types:%s for alias '%s'
ELYTOOL00000 java.lang.String Invalid "%s" parameter. Default value "%s" will be used.
ELYTOOL00000 java.lang.String Invalid "%s" parameter. Generated value "%s" will be used.
ELYTOOL00000 java.lang.String Mask password operation is not allowed in FIPS mode.
ELYTOOL00000 java.lang.String Found credential store and alias, using pre-existing key
ELYTOOL00000 java.lang.String Skipping descriptor file block number %d due to failure to load Credential Store.
ELYTOOL00000 java.lang.String Credential Store at %s does not support SecretKey. Skipping descriptor file block number %d.
ELYTOOL00000 java.lang.String Exception was thrown while populating Credential Store at %s. Skipping descriptor file block number %d.
ELYTOOL00000 org.apache.commons.cli.MissingOptionException No Credential Store location or Secret Key Alias specified.
ELYTOOL00006 org.apache.commons.cli.MissingArgumentException Salt not specified.
ELYTOOL00007 java.lang.IllegalArgumentException Invalid "%s" value. Must be an integer between %d and %d, inclusive
ELYTOOL00008 java.lang.RuntimeException Cannot locate admin key with alias "%s" or it is of improper type
ELYTOOL00009 java.lang.RuntimeException Cannot parse credential store implementation properties from supplied parameter
ELYTOOL00010 java.io.IOException Cannot parse conversion descriptor file "%s" missing colon at line %s
ELYTOOL00011 java.io.IOException Unrecognized descriptor attribute at line %s
ELYTOOL00012 java.lang.Exception Problem converting vault (enc-dir="%s";keystore="%s")
ELYTOOL00013 java.lang.Exception Invalid option "%s" when performing bulk conversion. Use bulk conversion descriptor file.
ELYTOOL00014 java.lang.IllegalArgumentException Unknown entry-type "%s"
ELYTOOL00015 java.lang.IllegalArgumentException Unknown provider "%s"
ELYTOOL00016 org.apache.commons.cli.MissingArgumentException Option "%s" is not specified.
ELYTOOL00017 java.lang.String Option "%s" specified more than once. Only the first occurrence will be used.
ELYTOOL00018 org.apache.commons.cli.MissingArgumentException Option "%s" does not expect any arguments.
ELYTOOL00019 java.lang.IllegalArgumentException Encryption directory "%s" does not contain "VAULT.dat" file.
ELYTOOL00020 org.apache.commons.cli.MissingArgumentException Alias was not defined.
ELYTOOL00021 org.apache.commons.cli.MissingArgumentException Location of the output file was not defined.
ELYTOOL00022 org.apache.commons.cli.MissingArgumentException Encryption directory was not defined.
ELYTOOL00023 org.apache.commons.cli.MissingArgumentException Vault password was not defined
ELYTOOL00024 java.io.IOException Cannot parse conversion descriptor file "%s". No keystore specified.
ELYTOOL00025 java.lang.IllegalArgumentException Credential store storage file "%s" does not exist.
ELYTOOL00026 java.lang.IllegalArgumentException Credential store storage file "%s" already exists.
ELYTOOL00027 java.lang.IllegalArgumentException Wrong masked password format. Expected format is "MASK-;;"
ELYTOOL00028 org.apache.commons.cli.MissingArgumentException Location parameter is not specified for filebased keystore type '%s'
ELYTOOL00029 java.security.NoSuchAlgorithmException Key Pair Algorithm: '%s' is not supported.
ELYTOOL00030 java.lang.IllegalArgumentException Key file '%s' does not exist.
ELYTOOL00031 org.apache.commons.cli.MissingArgumentException No private key specified for importing.
ELYTOOL00032 org.apache.commons.cli.MissingArgumentException No public key specified for importing.
ELYTOOL00033 org.apache.commons.cli.MissingArgumentException No PEM content found
ELYTOOL00034 java.security.InvalidParameterException Invalid keysize provided: %s
ELYTOOL00035 java.lang.IllegalArgumentException Only one of '%s' and '%s' can be specified at the same time

HHH

Code Level Return Type Message
HHH000002 WARN Already session bound on call to bind(); make sure you clean up your sessions
HHH000006 INFO Autocommit mode: %s
HHH000008 WARN JTASessionContext being used with JDBC transactions; auto-flush will not operate correctly with getCurrentSession()
HHH000010 INFO On release of batch it still contained JDBC statements
HHH000021 INFO Bytecode provider name : %s
HHH000022 WARN c3p0 properties were encountered, but the %s provider class was not found on the classpath; these properties are going to be ignored.
HHH000023 WARN I/O reported cached file could not be found : %s : %s
HHH000024 INFO Cache provider: %s
HHH000027 WARN Calling joinTransaction() on a non JTA EntityManager
HHH000031 DEBUG Closing
HHH000032 INFO Collections fetched (minimize this): %s
HHH000033 INFO Collections loaded: %s
HHH000034 INFO Collections recreated: %s
HHH000035 INFO Collections removed: %s
HHH000036 INFO Collections updated: %s
HHH000037 INFO Columns: %s
HHH000038 WARN Composite-id class does not override equals(): %s
HHH000039 WARN Composite-id class does not override hashCode(): %s
HHH000040 INFO Configuration resource: %s
HHH000041 INFO Configured SessionFactory: %s
HHH000042 INFO Configuring from file: %s
HHH000043 INFO Configuring from resource: %s
HHH000044 INFO Configuring from URL: %s
HHH000045 INFO Configuring from XML document
HHH000048 INFO Connections obtained: %s
HHH000050 ERROR Container is providing a null PersistenceUnitRootUrl: discovery impossible
HHH000051 WARN Ignoring bag join fetch [%s] due to prior collection join fetch
HHH000053 INFO Creating subcontext: %s
HHH000059 WARN Defining %s=true ignored in HEM
HHH000065 WARN DEPRECATED : use [%s] instead with custom [%s] implementation
HHH000067 INFO Disallowing insert statement comment for select-identity due to Oracle driver bug
HHH000069 WARN Duplicate generator name %s
HHH000070 WARN Duplicate generator table: %s
HHH000071 INFO Duplicate import: %s -> %s
HHH000072 WARN Duplicate joins for class: %s
HHH000073 INFO entity-listener duplication, first event definition will be used: %s
HHH000074 WARN Found more than one , subsequent ignored
HHH000076 INFO Entities deleted: %s
HHH000077 INFO Entities fetched (minimize this): %s
HHH000078 INFO Entities inserted: %s
HHH000079 INFO Entities loaded: %s
HHH000080 INFO Entities updated: %s
HHH000082 WARN Entity Manager closed by someone else (%s must not be used)
HHH000084 WARN Entity [%s] is abstract-class/interface explicitly mapped as non-abstract; be sure to supply entity-names
HHH000085 INFO %s %s found
HHH000086 INFO %s No %s found
HHH000087 ERROR Exception in interceptor afterTransactionCompletion()
HHH000088 ERROR Exception in interceptor beforeTransactionCompletion()
HHH000089 INFO Sub-resolver threw unexpected exception, continuing to next : %s
HHH000091 ERROR Expected type: %s, actual value: %s
HHH000092 WARN An item was expired by the cache while it was locked (increase your cache timeout): %s
HHH000094 INFO Bound factory to JNDI name: %s
HHH000096 INFO A factory was renamed from [%s] to [%s] in JNDI
HHH000097 INFO Unbound factory from JNDI name: %s
HHH000098 INFO A factory was unbound from name: %s
HHH000099 ERROR an assertion failure occurred (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): %s
HHH000102 INFO Fetching database metadata
HHH000105 INFO Flushes: %s
HHH000106 INFO Forcing container resource cleanup on transaction completion
HHH000107 INFO Forcing table use for sequence-style generator due to pooled optimizer selection where db does not support pooled sequences
HHH000108 INFO Foreign keys: %s
HHH000109 INFO Found mapping document in jar: %s
HHH000113 WARN GUID identifier generated: %s
HHH000114 INFO Handling transient entity in delete processing
HHH000116 WARN Config specified explicit optimizer of [%s], but [%s=%s]; using optimizer [%s] increment default of [%s].
HHH000117 DEBUG HQL: %s, time: %sms, rows: %s
HHH000118 WARN HSQLDB supports only READ_UNCOMMITTED isolation
HHH000119 WARN On EntityLoadContext#clear, hydratingEntities contained [%s] entries
HHH000120 WARN Ignoring unique constraints specified on table generator [%s]
HHH000122 ERROR IllegalArgumentException in class: %s, getter method of property: %s
HHH000123 ERROR IllegalArgumentException in class: %s, setter method of property: %s
HHH000124 WARN @Immutable used on a non root entity: ignored for %s
HHH000125 WARN Mapping metadata cache was not completely processed
HHH000126 INFO Indexes: %s
HHH000127 DEBUG Could not bind JNDI listener
HHH000130 INFO Instantiating explicit connection provider: %s
HHH000132 ERROR Array element type error %s
HHH000133 WARN Discriminator column has to be defined in the root entity, it will be ignored in subclass: %s
HHH000134 ERROR Application attempted to edit read only item: %s
HHH000135 ERROR Invalid JNDI name: %s
HHH000136 WARN Inapropriate use of @OnDelete on entity, annotation ignored: %s
HHH000137 WARN Root entity should not hold a PrimaryKeyJoinColum(s), will be ignored: %s
HHH000138 WARN Mixing inheritance strategy in a entity hierarchy is not allowed, ignoring sub strategy in: %s
HHH000139 WARN Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: %s
HHH000140 INFO JACC contextID: %s
HHH000141 INFO java.sql.Types mapped the same code [%s] multiple times; was [%s]; now [%s]
HHH000142 java.lang.String Bytecode enhancement failed: %s
HHH000143 java.lang.String Bytecode enhancement failed because no public, protected or package-private default constructor was found for entity: %s. Private constructors don't work with runtime proxies
HHH000144 WARN %s = false breaks the EJB3 specification
HHH000151 java.lang.String JDBC rollback failed
HHH000154 INFO JNDI InitialContext properties:%s
HHH000155 ERROR JNDI name %s does not handle a session factory reference
HHH000157 INFO Lazy property fetching available for: %s
HHH000159 WARN In CollectionLoadContext#endLoadingCollections, localLoadingCollectionKeys contained [%s], but no LoadingCollectionEntry was found in loadContexts
HHH000160 WARN On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [%s] entries
HHH000161 INFO Logging statistics....
HHH000162 DEBUG *** Logical connection closed ***
HHH000163 DEBUG Logical connection releasing its physical connection
HHH000173 INFO Max query time: %sms
HHH000174 WARN Function template anticipated %s arguments, but %s arguments encountered
HHH000177 ERROR Error in named query: %s
HHH000178 WARN Naming exception occurred accessing factory: %s
HHH000179 WARN Narrowing proxy to %s - this operation breaks ==
HHH000180 WARN FirstResult/maxResults specified on polymorphic query; applying in memory
HHH000181 WARN No appropriate connection provider encountered, assuming application will be supplying connections
HHH000182 INFO No default (no-argument) constructor for class: %s (class must be instantiated by Interceptor)
HHH000183 WARN no persistent classes found for query class: %s
HHH000184 ERROR No session factory with JNDI name %s
HHH000187 INFO Optimistic lock failures: %s
HHH000189 WARN @OrderBy not allowed for an indexed collection, annotation ignored.
HHH000193 WARN Overriding %s is dangerous, this might break the EJB3 specification implementation
HHH000194 DEBUG Package not found or wo package-info.java: %s
HHH000196 ERROR Error parsing XML (%s) : %s
HHH000197 ERROR Error parsing XML: %s(%s) %s
HHH000198 ERROR Warning parsing XML (%s) : %s
HHH000199 WARN Warning parsing XML: %s(%s) %s
HHH000200 WARN Persistence provider caller does not implement the EJB3 spec correctly.PersistenceUnitInfo.getNewTempClassLoader() is null.
HHH000201 INFO Pooled optimizer source reported [%s] as the initial value; use of 1 or greater highly recommended
HHH000202 ERROR PreparedStatement was already in the batch, [%s].
HHH000203 WARN processEqualityExpression() : No expression to process
HHH000204 INFO Processing PersistenceUnitInfo [name: %s]
HHH000205 INFO Loaded properties from resource hibernate.properties: %s
HHH000206 DEBUG hibernate.properties not found
HHH000207 WARN Property %s not found in class but described in (possible typo error)
HHH000209 WARN proxool properties were encountered, but the %s provider class was not found on the classpath; these properties are going to be ignored.
HHH000210 INFO Queries executed to database: %s
HHH000213 INFO Query cache hits: %s
HHH000214 INFO Query cache misses: %s
HHH000215 INFO Query cache puts: %s
HHH000218 INFO RDMSOS2200Dialect version: 1.0
HHH000219 INFO Reading mappings from cache file: %s
HHH000220 INFO Reading mappings from file: %s
HHH000221 INFO Reading mappings from resource: %s
HHH000222 WARN read-only cache configured for mutable collection [%s]
HHH000223 WARN Recognized obsolete hibernate namespace %s. Use namespace %s instead. Refer to Hibernate 3.6 Migration Guide
HHH000225 WARN Property [%s] has been renamed to [%s]; update your properties appropriately
HHH000226 INFO Required a different provider: %s
HHH000227 INFO Running hbm2ddl schema export
HHH000228 INFO Running hbm2ddl schema update
HHH000229 INFO Running schema validator
HHH000230 INFO Schema export complete
HHH000231 ERROR Schema export unsuccessful
HHH000232 INFO Schema update complete
HHH000233 WARN Scoping types to session factory %s after already scoped %s
HHH000235 INFO Searching for mapping documents in jar: %s
HHH000237 INFO Second level cache hits: %s
HHH000238 INFO Second level cache misses: %s
HHH000239 INFO Second level cache puts: %s
HHH000240 INFO Service properties: %s
HHH000241 INFO Sessions closed: %s
HHH000242 INFO Sessions opened: %s
HHH000244 WARN @Sort not allowed for an indexed collection, annotation ignored.
HHH000245 WARN Manipulation query [%s] resulted in [%s] split queries
HHH000247 WARN SQL Error: %s, SQLState: %s
HHH000248 INFO Starting query cache at region: %s
HHH000249 INFO Starting service at JNDI name: %s
HHH000250 INFO Starting update timestamps cache at region: %s
HHH000251 INFO Start time: %s
HHH000252 INFO Statements closed: %s
HHH000253 INFO Statements prepared: %s
HHH000255 INFO Stopping service
HHH000257 INFO sub-resolver threw unexpected exception, continuing to next : %s
HHH000258 INFO Successful transactions: %s
HHH000259 INFO Synchronization [%s] was already registered
HHH000260 ERROR Exception calling user Synchronization [%s] : %s
HHH000261 INFO Table found: %s
HHH000262 INFO Table not found: %s
HHH000263 INFO More than one table found: %s
HHH000266 INFO Transactions: %s
HHH000267 WARN Transaction started on non-root session
HHH000268 INFO Transaction strategy: %s
HHH000269 WARN Type [%s] defined no registration keys; ignoring
HHH000270 DEBUG Type registration key [%s] overrode previous key : %s
HHH000271 WARN Naming exception occurred accessing Ejb3Configuration
HHH000272 ERROR Error while accessing session factory with JNDI name %s
HHH000273 WARN Error accessing type info result set : %s
HHH000274 WARN Unable to apply constraints on DDL for %s
HHH000276 WARN Could not bind Ejb3Configuration to JNDI
HHH000277 WARN Could not bind factory to JNDI
HHH000278 INFO Could not bind value '%s' to parameter: %s; %s
HHH000279 ERROR Unable to build enhancement metamodel for %s
HHH000280 INFO Could not build SessionFactory using the MBean classpath - will try again using client classpath: %s
HHH000281 WARN Unable to clean up callable statement
HHH000282 WARN Unable to clean up prepared statement
HHH000283 WARN Unable to cleanup temporary id table after use [%s]
HHH000285 INFO Error closing InitialContext [%s]
HHH000286 ERROR Error closing input files: %s
HHH000287 WARN Could not close input stream
HHH000288 WARN Could not close input stream for %s
HHH000289 INFO Unable to close iterator
HHH000290 ERROR Could not close jar: %s
HHH000291 ERROR Error closing output file: %s
HHH000292 WARN IOException occurred closing output stream
HHH000294 ERROR Could not close session
HHH000295 ERROR Could not close session during rollback
HHH000296 WARN IOException occurred closing stream
HHH000297 ERROR Could not close stream on hibernate.properties: %s
HHH000298 java.lang.String JTA commit failed
HHH000299 ERROR Could not complete schema update
HHH000300 ERROR Could not complete schema validation
HHH000301 WARN Unable to configure SQLExceptionConverter : %s
HHH000302 ERROR Unable to construct current session context [%s]
HHH000303 WARN Unable to construct instance of specified SQLExceptionConverter : %s
HHH000304 WARN Could not copy system properties, system properties will be ignored
HHH000305 WARN Could not create proxy factory for:%s
HHH000306 ERROR Error creating schema
HHH000307 WARN Could not deserialize cache file: %s : %s
HHH000308 WARN Unable to destroy cache: %s
HHH000309 WARN Unable to destroy query cache: %s: %s
HHH000310 WARN Unable to destroy update timestamps cache: %s: %s
HHH000312 java.lang.String Could not determine transaction status
HHH000313 java.lang.String Could not determine transaction status after commit
HHH000314 WARN Unable to evictData temporary id table after use [%s]
HHH000315 ERROR Exception executing batch [%s], SQL: %s
HHH000316 WARN Error executing resolver [%s] : %s
HHH000318 INFO Could not find any META-INF/persistence.xml file in the classpath
HHH000319 ERROR Could not get database metadata
HHH000320 WARN Unable to instantiate configured schema name resolver [%s] %s
HHH000321 WARN Unable to interpret specified optimizer [%s], falling back to noop
HHH000322 WARN Unable to instantiate specified optimizer [%s], falling back to noop
HHH000325 WARN Unable to instantiate UUID generation strategy class : %s
HHH000326 WARN Cannot join transaction: do not override %s
HHH000327 INFO Error performing load command
HHH000328 WARN Unable to load/access derby driver class sysinfo to check versions : %s
HHH000329 ERROR Problem loading properties from hibernate.properties
HHH000330 java.lang.String Unable to locate config file: %s
HHH000331 WARN Unable to locate configured schema name resolver class [%s] %s
HHH000332 WARN Unable to locate MBeanServer on JMX service shutdown
HHH000334 WARN Unable to locate requested UUID generation strategy class : %s
HHH000335 WARN Unable to log SQLWarnings : %s
HHH000336 WARN Could not log warnings
HHH000337 ERROR Unable to mark for rollback on PersistenceException:
HHH000338 ERROR Unable to mark for rollback on TransientObjectException:
HHH000339 WARN Could not obtain connection metadata: %s
HHH000342 WARN Could not obtain connection to query metadata
HHH000343 ERROR Could not obtain initial context
HHH000344 ERROR Could not parse the package-level metadata [%s]
HHH000345 java.lang.String JDBC commit failed
HHH000346 ERROR Error during managed flush [%s]
HHH000347 java.lang.String Unable to query java.sql.DatabaseMetaData
HHH000348 ERROR Unable to read class: %s
HHH000349 INFO Could not read column value from result set: %s; %s
HHH000350 java.lang.String Could not read a hi value - you need to populate the table: %s
HHH000351 ERROR Could not read or init a hi value
HHH000352 ERROR Unable to release batch statement...
HHH000353 ERROR Could not release a cache lock : %s
HHH000354 INFO Unable to release initial context: %s
HHH000355 WARN Unable to release created MBeanServer : %s
HHH000356 INFO Unable to release isolated connection [%s]
HHH000357 WARN Unable to release type info result set
HHH000358 WARN Unable to erase previously added bag join fetch
HHH000359 INFO Could not resolve aggregate function [%s]; using standard definition
HHH000360 INFO Unable to resolve mapping file [%s]
HHH000361 INFO Unable to retrieve cache from JNDI [%s]: %s
HHH000362 WARN Unable to retrieve type info result set : %s
HHH000363 INFO Unable to rollback connection on exception [%s]
HHH000364 INFO Unable to rollback isolated transaction on error [%s] : [%s]
HHH000365 java.lang.String JTA rollback failed
HHH000366 ERROR Error running schema update
HHH000367 ERROR Could not set transaction to rollback only
HHH000368 WARN Exception while stopping service
HHH000369 INFO Error stopping service [%s]
HHH000370 WARN Exception switching from method: [%s] to a method using the column index. Reverting to using: [%
HHH000371 ERROR Could not synchronize database state with session: %s
HHH000372 ERROR Could not toggle autocommit
HHH000373 ERROR Unable to transform class: %s
HHH000374 WARN Could not unbind factory from JNDI
HHH000375 java.lang.String Could not update hi value in: %s
HHH000376 ERROR Could not updateQuery hi value in: %s
HHH000377 INFO Error wrapping result set
HHH000378 WARN I/O reported error writing cached file : %s: %s
HHH000380 WARN Unexpected literal token type [%s] passed for numeric processing
HHH000381 WARN JDBC driver did not return the expected number of row counts
HHH000382 WARN Unrecognized bytecode provider [%s]; using the default implementation [%s]
HHH000383 WARN Unknown Ingres major version [%s]; using Ingres 9.2 dialect
HHH000384 WARN Unknown Oracle major version [%s]
HHH000385 WARN Unknown Microsoft SQL Server major version [%s] using [%s] dialect
HHH000386 WARN ResultSet had no statement associated with it, but was not yet registered
HHH000387 DEBUG ResultSet's statement was not registered
HHH000388 ERROR Unsuccessful: %s
HHH000390 WARN Overriding release mode as connection provider does not support 'after_statement'
HHH000391 WARN Ingres 10 is not yet fully supported; using Ingres 9.3 dialect
HHH000392 WARN Hibernate does not support SequenceGenerator.initialValue() unless '%s' set
HHH000393 WARN The %s.%s.%s version of H2 implements temporary table creation such that it commits current transaction; multi-table, bulk hql/jpaql will not work properly
HHH000394 WARN Oracle 11g is not yet fully supported; using Oracle 10g dialect
HHH000396 INFO Updating schema
HHH000398 INFO Explicit segment value for id generator [%s.%s] suggested; using default [%s]
HHH000399 INFO Using default transaction strategy (direct JDBC transactions)
HHH000400 DEBUG Using dialect: %s
HHH000404 ERROR Don't use old DTDs, read the Hibernate 3.x Migration Guide
HHH000406 INFO Using bytecode reflection optimizer
HHH000409 WARN Using %s which does not generate IETF RFC 4122 compliant UUID values; consider using %s instead
HHH000410 INFO Hibernate Validator not found: ignoring
HHH000412 INFO Hibernate ORM core version %s
HHH000413 WARN Warnings creating temp table : %s
HHH000414 INFO Property hibernate.search.autoregister_listeners is set to false. No attempt will be made to register Hibernate Search event listeners.
HHH000416 WARN Write locks via update not supported for non-versioned entities [%s]
HHH000417 INFO Writing generated schema to file: %s
HHH000418 INFO Adding override for %s: %s
HHH000419 WARN Resolved SqlTypeDescriptor is for a different SQL code. %s has sqlCode=%s; type override %s has sqlCode=%s
HHH000420 DEBUG Closing un-released batch
HHH000421 DEBUG Disabling contextual LOB creation as %s is true
HHH000422 DEBUG Disabling contextual LOB creation as connection was null
HHH000423 DEBUG Disabling contextual LOB creation as JDBC driver reported JDBC version [%s] less than 4
HHH000424 DEBUG Disabling contextual LOB creation as createClob() method threw error : %s
HHH000425 INFO Could not close session; swallowing exception[%s] as transaction completed
HHH000426 WARN You should set hibernate.transaction.jta.platform if cache is enabled
HHH000428 INFO Encountered legacy TransactionManagerLookup specified; convert to newer %s contract specified via %s setting
HHH000429 WARN Setting entity-identifier value binding where one already existed : %s.
HHH000432 WARN There were not column names specified for index %s on table %s
HHH000433 INFO update timestamps cache puts: %s
HHH000434 INFO update timestamps cache hits: %s
HHH000435 INFO update timestamps cache misses: %s
HHH000436 WARN Entity manager factory name (%s) is already registered. If entity manager will be clustered or passivated, specify a unique value for property '%s'
HHH000437 WARN Attempting to save one or more entities that have a non-nullable association with an unsaved transient entity. The unsaved transient entity must be saved in an operation prior to saving these dependent entities. Unsaved transient entity: (%s) Dependent entities: (%s) Non-nullable association(s): (%s)
HHH000438 INFO NaturalId cache puts: %s
HHH000439 INFO NaturalId cache hits: %s
HHH000440 INFO NaturalId cache misses: %s
HHH000441 INFO Max NaturalId query time: %sms
HHH000442 INFO NaturalId queries executed to database: %s
HHH000443 WARN Dialect [%s] limits the number of elements in an IN predicate to %s entries. However, the given parameter list [%s] contained %s entries, which will likely cause failures to execute the query in the database
HHH000444 WARN Encountered request for locking however dialect reports that database prefers locking be done in a separate select (follow-on locking); results will be locked after initial query executes
HHH000445 WARN Alias-specific lock modes requested, which is not currently supported with follow-on locking; all acquired locks will be [%s]
HHH000446 WARN embed-xml attributes were intended to be used for DOM4J entity mode. Since that entity mode has been removed, embed-xml attributes are no longer supported and should be removed from mappings.
HHH000447 WARN Explicit use of UPGRADE_SKIPLOCKED in lock() calls is not recommended; use normal UPGRADE locking instead
HHH000448 INFO 'jakarta.persistence.validation.mode' named multiple values : %s
HHH000449 WARN @Convert annotation applied to Map attribute [%s] did not explicitly specify attributeName using 'key'/'value' as required by spec; attempting to DoTheRightThing
HHH000450 WARN Encountered request for Service by non-primary service role [%s -> %s]; please update usage
HHH000451 WARN Transaction afterCompletion called by a background thread; delaying afterCompletion processing until the original thread can handle it. [status=%s]
HHH000452 WARN Exception while loading a class or resource found during scanning
HHH000453 WARN Exception while discovering OSGi service implementations : %s
HHH000456 WARN Named parameters are used for a callable statement, but database metadata indicates named parameters are not supported.
HHH000457 WARN Joined inheritance hierarchy [%1$s] defined explicit @DiscriminatorColumn. Legacy Hibernate behavior was to ignore the @DiscriminatorColumn. However, as part of issue HHH-6911 we now apply the explicit @DiscriminatorColumn. If you would prefer the legacy behavior, enable the `%2$s` setting (%2$s=true)
HHH000467 DEBUG Creating pooled optimizer (lo) with [incrementSize=%s; returnClass=%s]
HHH000468 WARN Unable to interpret type [%s] as an AttributeConverter due to an exception : %s
HHH000469 org.hibernate.HibernateException The ClassLoaderService can not be reused. This instance was stopped already.
HHH000470 WARN An unexpected session is defined for a collection, but the collection is not connected to that session. A persistent collection may only be associated with one session at a time. Overwriting session. %s
HHH000471 WARN Cannot unset session in a collection because an unexpected session is defined. A persistent collection may only be associated with one session at a time. %s
HHH000472 WARN Hikari properties were encountered, but the Hikari ConnectionProvider was not found on the classpath; these properties are going to be ignored.
HHH000473 INFO Omitting cached file [%s] as the mapping file is newer
HHH000474 java.lang.String Ambiguous persistent property methods detected on %s; mark one as @Transient : [%s] and [%s]
HHH000475 INFO Cannot locate column information using identifier [%s]; ignoring index [%s]
HHH000476 DEBUG Executing script '%s'
HHH000477 DEBUG Starting delayed evictData of schema as part of SessionFactory shut-down'
HHH000478 ERROR Unsuccessful: %s
HHH000479 java.lang.String Collection [%s] was not processed by flush(). This is likely due to unsafe use of the session (e.g. used in multiple threads concurrently, updates during entity lifecycle hooks).
HHH000480 WARN A ManagedEntity was associated with a stale PersistenceContext. A ManagedEntity may only be associated with one PersistenceContext at a time; %s
HHH000481 WARN Encountered Java type [%s] for which we could not locate a JavaType and which does not appear to implement equals and/or hashCode. This can lead to significant performance problems when performing equality/dirty checking involving this Java type. Consider registering a custom JavaType or at least implementing equals/hashCode.
HHH000482 WARN @org.hibernate.annotations.Cache used on a non-root entity: ignored for [%s]. Please see the Hibernate documentation for proper usage.
HHH000483 WARN An experimental - and now also deprecated - feature has been enabled (hibernate.create_empty_composites.enabled=true) that instantiates empty composite/embedded objects when all of its attribute values are null. This feature has known issues and should not be used in production. See Hibernate Jira issue HHH-11936 for details.
HHH000484 WARN Vibur properties were encountered, but the Vibur ConnectionProvider was not found on the classpath; these properties are going to be ignored.
HHH000485 ERROR Illegally attempted to associate a proxy for entity [%s] with id [%s] with two open sessions.
HHH000486 WARN Agroal properties were encountered, but the Agroal ConnectionProvider was not found on the classpath; these properties are going to be ignored.
HHH000487 WARN The query: [%s] attempts to update an immutable entity: %s
HHH000488 java.lang.String Bytecode enhancement failed for class: %1$s. It might be due to the Java module system preventing Hibernate ORM from defining an enhanced class in the same package as class %1$s. In this case, the class should be opened and exported to Hibernate ORM.
HHH000490 INFO Using JtaPlatform implementation: [%s]
HHH000491 WARN '%1$s.%2$s' uses both @NotFound and FetchType.LAZY. @ManyToOne and @OneToOne associations mapped with @NotFound are forced to EAGER fetching.
HHH000492 INFO Query plan cache hits: %s
HHH000493 INFO Query plan cache misses: %s
HHH000494 WARN Attempt to merge an uninitialized collection with queued operations; queued operations will be ignored: %s
HHH000495 WARN Attaching an uninitialized collection with queued operations to a session: %s
HHH000496 INFO Detaching an uninitialized collection with queued operations from a session: %s
HHH000497 WARN The increment size of the [%s] sequence is set to [%d] in the entity mapping while the associated database sequence increment size is [%d]. The database sequence increment size will take precedence to avoid identifier allocation conflicts.
HHH000498 DEBUG Detaching an uninitialized collection with queued operations from a session due to rollback: %s
HHH000499 WARN Using @AttributeOverride or @AttributeOverrides in conjunction with entity inheritance is not supported: %s. The overriding definitions are ignored.
HHH000502 WARN The [%s] property of the [%s] entity was modified, but it won't be updated because the property is immutable.
HHH000503 WARN A class should not be annotated with both @Inheritance and @MappedSuperclass. @Inheritance will be ignored for: %s.
HHH000504 WARN Multiple configuration properties defined to create schema. Choose at most one among 'jakarta.persistence.create-database-schemas' or 'hibernate.hbm2ddl.create_namespaces'.
HHH000505 WARN Ignoring ServiceConfigurationError caught while trying to instantiate service '%s'.
HHH000506 WARN Detaching an uninitialized collection with enabled filters from a session: %s
HHH000508 org.hibernate.HibernateException The Javassist based BytecodeProvider has been removed: remove the `hibernate.bytecode.provider` configuration property to switch to the default provider
HHH000509 WARN Multi-table insert is not available due to missing identity and window function support for: %s
HHH000510 WARN Association with `fetch="join"`/`@Fetch(FetchMode.JOIN)` and `lazy="true"`/`FetchType.LAZY` found. This will be interpreted as lazy: %s
HHH000511 WARN The %2$s version for [%s] is no longer supported, hence certain features may not work properly. The minimum supported version is %3$s. Check the community dialects project for available legacy versions.
HHH000512 WARN The database version version for the Cockroach Dialect could not be determined. The minimum supported version (%s) has been set instead.
HHH000513 DEBUG Unable to create the ReflectionOptimizer for [%s]
HHH000514 WARN PostgreSQL JDBC driver classes are inaccessible and thus, certain DDL types like JSONB, JSON, GEOMETRY can not be used.
HHH000515 org.hibernate.HibernateException Can't retrieve the generated identity value, because the dialect does not support selecting the last generated identity and 'hibernate.jdbc.use_get_generated_keys' was disabled
HHH015001 INFO Bound Ejb3Configuration to JNDI name: %s
HHH015002 INFO Ejb3Configuration name: %s
HHH015003 INFO An Ejb3Configuration was renamed from name: %s
HHH015004 INFO An Ejb3Configuration was unbound from name: %s
HHH015005 WARN Exploded jar file does not exist (ignored): %s
HHH015006 WARN Exploded jar file not a directory (ignored): %s
HHH015007 ERROR Illegal argument on static metamodel field injection : %s#%s; expected type : %s; encountered type : %s
HHH015008 ERROR Malformed URL: %s
HHH015009 WARN Malformed URL: %s
HHH015010 WARN Unable to find file (ignored): %s
HHH015011 WARN Unable to locate static metamodel field : %s#%s; this may or may not indicate a problem with the static metamodel
HHH015012 INFO Using provided datasource
HHH015013 DEBUG Returning null (as required by JPA spec) rather than throwing EntityNotFoundException, as the entity (type=%s, id=%s) does not exist
HHH015014 WARN DEPRECATION - attempt to refer to JPA positional parameter [?%1$s] using String name ["%1$s"] rather than int position [%1$s] (generally in Query#setParameter, Query#getParameter or Query#getParameterValue calls). Hibernate previously allowed such usage, but it is considered deprecated.
HHH015015 INFO Encountered a MappedSuperclass [%s] not used in any entity hierarchy
HHH015016 WARN Encountered a deprecated jakarta.persistence.spi.PersistenceProvider [%s]; [%s] will be used instead.
HHH015017 WARN 'hibernate.ejb.use_class_enhancer' property is deprecated. Use 'hibernate.enhance.enable[...]' properties instead to enable each individual feature.
HHH015018 WARN Encountered multiple persistence-unit stanzas defining same name [%s]; persistence-unit names must be unique
HHH025001 org.hibernate.cache.CacheException Pending-puts cache must not be clustered!
HHH025002 org.hibernate.cache.CacheException Pending-puts cache must not be transactional!
HHH025003 WARN Pending-puts cache configuration should be a template.
HHH025004 org.hibernate.cache.CacheException Pending-puts cache must have expiration.max-idle set
HHH025005 WARN Property 'hibernate.cache.infinispan.use_synchronization' is deprecated; 2LC with transactional cache must always use synchronizations.
HHH025006 ERROR Custom cache configuration '%s' was requested for type %s but it was not found!
HHH025007 ERROR Custom cache configuration '%s' was requested for region %s but it was not found - using configuration by type (%s).
HHH025008 org.hibernate.cache.CacheException Timestamps cache must not use eviction!
HHH025009 org.hibernate.cache.CacheException Unable to start region factory
HHH025010 org.hibernate.cache.CacheException Unable to create default cache manager
HHH025011 org.hibernate.cache.CacheException Infinispan custom cache command factory not installed (possibly because the classloader where Infinispan lives couldn't find the Hibernate Infinispan cache provider)
HHH025012 WARN Requesting TRANSACTIONAL cache concurrency strategy but the cache is not configured as transactional.
HHH025013 WARN Requesting READ_WRITE cache concurrency strategy but the cache was configured as transactional.
HHH025014 WARN Setting eviction on cache using tombstones can introduce inconsistencies!
HHH025015 ERROR Failure updating cache in afterCompletion, will retry
HHH025016 ERROR Failed to end invalidating pending putFromLoad calls for key %s from region %s; the key won't be cached until invalidation expires.
HHH025017 org.hibernate.cache.CacheException Unable to retrieve CacheManager from JNDI [%s]
HHH025018 WARN Unable to release initial context
HHH025019 WARN Use non-transactional query caches for best performance!
HHH025020 ERROR Unable to broadcast invalidations as a part of the prepare phase. Rolling back.
HHH025021 org.hibernate.cache.CacheException Could not suspend transaction
HHH025022 org.hibernate.cache.CacheException Could not resume transaction
HHH025023 org.hibernate.cache.CacheException Unable to get current transaction
HHH025024 org.hibernate.cache.CacheException Failed to invalidate pending putFromLoad calls for key %s from region %s
HHH025025 ERROR Failed to invalidate pending putFromLoad calls for region %s
HHH025026 org.hibernate.cache.CacheException Property 'hibernate.cache.infinispan.cachemanager' not set
HHH025027 org.hibernate.cache.CacheException Timestamp cache cannot be configured with invalidation
HHH025028 WARN Ignoring deprecated property '%s'
HHH025029 WARN Property '%s' is deprecated, please use '%s' instead
HHH025030 WARN Transactional caches are not supported. The configuration option will be ignored; please unset.
HHH025031 WARN Configuration for pending-puts cache '%s' is already defined - another instance of SessionFactory was not closed properly.
HHH025032 WARN Cache configuration '%s' is present but the use has not been defined through hibernate.cache.infinispan.%s.cfg=%s
HHH025033 WARN Configuration properties contain record for unqualified region name '%s' but it should contain qualified region name '%s'
HHH025034 WARN Configuration for unqualified region name '%s' is defined but the cache will use qualified name '%s'
HHH025035 ERROR Operation #%d scheduled to complete before transaction completion failed
HHH025036 ERROR Operation #%d scheduled after transaction completion failed (transaction successful? %s)
HHH035001 DEBUG Using dialect: %s
HHH100001 WARN JDBC driver did not return the expected number of row counts (%s) - expected %s, but received %s
HHH100501 ERROR Exception executing batch [%s], SQL: %s
HHH100502 ERROR Unable to release batch statement...
HHH100503 INFO On release of batch it still contained JDBC statements
HHH10000001 WARN Malformed URL: %s
HHH10000002 WARN File or directory named by URL [%s] could not be found. URL will be ignored
HHH10000003 WARN File or directory named by URL [%s] did not exist. URL will be ignored
HHH10000004 WARN Expecting resource named by URL [%s] to be a directory, but it was not. URL will be ignored
HHH10000005 java.lang.String File [%s] referenced by given URL [%s] does not exist
HHH10001001 INFO Connection properties: %s
HHH10001002 WARN Using built-in connection pool (not intended for production use)
HHH10001003 INFO Autocommit mode: %s
HHH10001004 java.lang.String No JDBC URL specified by property %s
HHH10001005 INFO Loaded JDBC driver class: %s
HHH10001006 WARN No JDBC Driver class was specified by property %s
HHH10001007 INFO JDBC isolation level: %s
HHH10001008 INFO Cleaning up connection pool [%s]
HHH10001009 WARN Problem closing pooled connection
HHH10001010 INFO No JDBC driver class specified by %s
HHH10001011 INFO Loaded JDBC drivers: %s
HHH10001012 INFO Connecting with JDBC URL [%s]
HHH10001115 INFO Connection pool size: %s (min=%s)
HHH10001284 ERROR Error closing connection
HHH10001501 INFO Connection obtained from JdbcConnectionAccess [%s] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
HHH10005001 WARN An explicit CDI BeanManager reference [%s] was passed to Hibernate, but CDI is not available on the Hibernate ClassLoader. This is likely going to lead to exceptions later on in bootstrap
HHH10005002 INFO No explicit CDI BeanManager reference was passed to Hibernate, but CDI is available on the Hibernate ClassLoader.
HHH10005003 INFO Stopping ManagedBeanRegistry : %s
HHH10005004 INFO Stopping BeanContainer : %s
HHH10010001 DEBUG Disabling contextual LOB creation as %s is true
HHH10010002 DEBUG Disabling contextual LOB creation as connection was null
HHH10010003 DEBUG Disabling contextual LOB creation as JDBC driver reported JDBC version [%s] less than 4
HHH10010004 DEBUG Disabling contextual LOB creation as Dialect reported it is not supported
HHH10010005 DEBUG Disabling contextual LOB creation as createClob() method threw error : %s
HHH10010006 DEBUG Disabling contextual NCLOB creation as createNClob() method threw error : %s
HHH90000004 WARN embed-xml attributes were intended to be used for DOM4J entity mode. Since that entity mode has been removed, embed-xml attributes are no longer supported and should be removed from mappings.
HHH90000005 WARN Defining an entity [%s] with no physical id attribute is no longer supported; please map the identifier to a physical entity attribute
HHH90000007 WARN Attempted to specify unsupported NamingStrategy via command-line argument [--naming]. NamingStrategy has been removed in favor of the split ImplicitNamingStrategy and PhysicalNamingStrategy; use [--implicit-naming] or [--physical-naming], respectively, instead.
HHH90000008 WARN Attempted to specify unsupported NamingStrategy via Ant task argument. NamingStrategy has been removed in favor of the split ImplicitNamingStrategy and PhysicalNamingStrategy.
HHH90000009 WARN The outer-join attribute on has been deprecated. Instead of outer-join="false", use lazy="extra" with , , , , or , which will only initialize entities (not as a proxy) as needed.
HHH90000010 WARN The fetch attribute on has been deprecated. Instead of fetch="select", use lazy="extra" with , , , , or , which will only initialize entities (not as a proxy) as needed.
HHH90000012 WARN Recognized obsolete hibernate namespace %s. Use namespace %s instead. Support for obsolete DTD/XSD namespaces may be removed at any time.
HHH90000013 WARN Named ConnectionProvider [%s] has been deprecated in favor of %s; that provider will be used instead. Update your settings
HHH90000014 WARN Found use of deprecated [%s] sequence-based id generator; use org.hibernate.id.enhanced.SequenceStyleGenerator instead. See Hibernate Domain Model Mapping Guide for details.
HHH90000015 WARN Found use of deprecated [%s] table-based id generator; use org.hibernate.id.enhanced.TableGenerator instead. See Hibernate Domain Model Mapping Guide for details.
HHH90000018 WARN Found use of deprecated transaction factory setting [%s]; use the new TransactionCoordinatorBuilder settings [%s] instead
HHH90000021 WARN Encountered deprecated setting [%s], use [%s] instead
HHH90000026 WARN %s has been deprecated
HHH90000026 WARN %s has been deprecated; use %s instead
HHH90000027 WARN Encountered deprecated setting [%s]; instead %s
HHH90000028 WARN Support for `` is deprecated [%s : %s]; migrate to orm.xml or mapping.xml, or enable `hibernate.transform_hbm_xml.enabled` for on the fly transformation
HHH90000029 WARN The [%s] configuration is deprecated and will be removed. Set the value to [%s] to get rid of this warning
HHH90000030 WARN The [%s] configuration is deprecated and will be removed.
HHH90001001 WARN Attempt to restart an already started RegionFactory. Use sessionFactory.close() between repeated calls to buildSessionFactory. Using previously created RegionFactory.
HHH90001002 WARN Attempt to restop an already stopped JCacheRegionFactory.
HHH90001003 WARN Read-only caching was requested for mutable entity [%s]
HHH90001004 WARN Read-only caching was requested for mutable natural-id for entity [%s]
HHH90001005 INFO Cache[%s] Key[%s] A soft-locked cache entry was expired by the underlying cache. If this happens regularly you should consider increasing the cache timeouts and/or capacity limits
HHH90001006 WARN Missing cache[%1$s] was created on-the-fly. The created cache will use a provider-specific default configuration: make sure you defined one. You can disable this warning by setting '%2$s' to '%3$s'.
HHH90001007 WARN Using legacy cache name [%2$s] because configuration could not be found for cache [%1$s]. Update your configuration to rename cache [%2$s] to [%1$s].
HHH90001008 WARN Cache [%1$s] uses the [%2$s] access type, but [%3$s] does not support it natively. Make sure your cache implementation supports JTA transactions.
HHH90003001 ERROR Error in named query: %s
HHH90003002 INFO Unable to determine lock mode value : %s -> %s
HHH90003003 INFO Ignoring unrecognized query hint [%s]
HHH90003004 WARN firstResult/maxResults specified with collection fetch; applying in memory
HHH90003501 ERROR Error in named query: %s
HHH90005601 INFO Envers-generated HBM mapping...%n%s
HHH90005901 WARN `%s#%s` was mapped with explicit lazy-group (`%s`). Hibernate will ignore the lazy-group - this is generally not a good idea for to-one associations as it would lead to 2 separate SQL selects to initialize the association. This is expected to be improved in future versions of Hibernate
HHH90006001 WARN Encountered incubating setting [%s]. See javadoc on corresponding `org.hibernate.cfg.AvailableSettings` constant for details.

HSEARCH

Code Level Return Type Message
HSEARCH-00001 java.lang.String MassIndexer operation
HSEARCH-00001 java.lang.String Indexing instance of entity '%s' during mass indexing
HSEARCH-00001 java.lang.String Fetching identifiers of entities to index for entity '%s' during mass indexing
HSEARCH-00001 java.lang.String Loading and extracting entity data for entity '%s' during mass indexing
HSEARCH-00001 org.hibernate.search.mapper.pojo.common.annotation.impl.SearchProcessingWithContextException %1$s
HSEARCH-00001 java.lang.String Background indexing of entities
HSEARCH-00001 java.lang.String Index Merge operation on index '%1$s'
HSEARCH-00001 java.lang.String This multi-valued field has a 'FLATTENED' structure, which means the structure of objects is not preserved upon indexing, making object projections impossible. Try setting the field structure to 'NESTED' and reindexing all your data.
HSEARCH-00001 java.lang.String The default backend can be retrieved
HSEARCH-00001 java.lang.String The default backend cannot be retrieved, because no entity is mapped to that backend
HSEARCH-00001 java.lang.String Failed to resolve bean from Hibernate Search's internal registry with exception: %1$s
HSEARCH-00001 java.lang.String Failed to resolve bean from bean manager with exception: %1$s
HSEARCH-00001 java.lang.String Failed to resolve bean using reflection with exception: %1$s
HSEARCH-00001 java.lang.String Make sure the field is marked as searchable/sortable/projectable/aggregable/highlightable (whichever is relevant). If it already is, then '%1$s' is not available for fields of this type.
HSEARCH-00001 java.lang.String Some object field features require a nested structure; try setting the field structure to 'NESTED' and reindexing all your data. If you are trying to use another feature, it probably isn't available for this field.
HSEARCH-00001 java.lang.String Make sure the field is marked as searchable/sortable/projectable/aggregable/highlightable (whichever is relevant) in all indexes, and that the field has the same type in all indexes.
HSEARCH-00001 java.lang.String If you are trying to use the 'nested' predicate, set the field structure is to 'NESTED' in all indexes, then reindex all your data.
HSEARCH000017 ERROR Work discarded, thread was interrupted while waiting for space to schedule: %1$s
HSEARCH000027 INFO Mass indexing is going to index %d entities.
HSEARCH000028 INFO Mass indexing complete. Indexed %1$d entities.
HSEARCH000030 INFO Mass indexing progress: indexed %1$d entities in %2$d ms.
HSEARCH000031 INFO Mass indexing progress: %3$.2f%%. Mass indexing speed: %1$f documents/second since last message, %2$f documents/second since start.
HSEARCH000034 INFO Hibernate Search version %1$s
HSEARCH000036 WARN Unable to guess the transaction status: not starting a JTA transaction.
HSEARCH000039 WARN Unable to properly close scroll in ScrollableResults.
HSEARCH000041 INFO Index directory does not exist, creating: '%1$s'
HSEARCH000052 WARN An index writer operation failed. Resetting the index writer and forcing release of locks. %1$s
HSEARCH000055 WARN Unable to close the index reader. %1$s
HSEARCH000058 ERROR %1$s
HSEARCH000062 ERROR Mass indexing received interrupt signal: aborting.
HSEARCH000075 WARN Missing value for configuration property '%1$s': using LATEST (currently '%2$s'). %3$s
HSEARCH000114 org.hibernate.search.util.common.SearchException Resource does not exist in classpath: '%1$s'
HSEARCH000135 org.hibernate.search.util.common.SearchException No default value bridge implementation for type '%1$s'. Use a custom bridge.
HSEARCH000159 org.hibernate.search.util.common.SearchException No property annotated with %1$s(markerSet = "%3$s"). There must be exactly one such property in order to map it to geo-point field '%2$s'.
HSEARCH000160 org.hibernate.search.util.common.SearchException Multiple properties annotated with %1$s(markerSet = "%3$s"). There must be exactly one such property in order to map it to geo-point field '%2$s'.
HSEARCH000177 org.hibernate.search.util.common.SearchException Unable to define a document identifier for indexed type '%1$s', The property representing the entity identifier is unknown. Define the document identifier explicitly by annotating a property whose values are unique with @DocumentId.
HSEARCH000216 org.hibernate.search.util.common.SearchException %1$s defines includePaths filters that do not match anything. Non-matching includePaths filters: %2$s. Encountered field paths: %3$s. Check the filters for typos, or remove them if they are not useful.
HSEARCH000221 org.hibernate.search.util.common.SearchException Infinite embedded recursion involving path '%2$s' on type '%1$s'
HSEARCH000225 WARN Unable to acquire lock on the index while initializing directory '%s'. Either the directory wasn't properly closed last time it was used due to a critical failure, or another instance of Hibernate Search is using it concurrently (which is not supported). If you experience indexing failures on this index you will need to remove the lock, and might need to rebuild the index.
HSEARCH000226 TRACE %s: %s
HSEARCH000228 org.hibernate.search.util.common.SearchException Unable to parse '%1$ss' into a Lucene version: %2$s
HSEARCH000230 DEBUG Starting executor '%1$s'
HSEARCH000231 DEBUG Stopping executor '%1$s'
HSEARCH000234 org.hibernate.search.util.common.SearchException No matching indexed entity types for types: %1$s These types are not indexed entity types, nor is any of their subtypes. Valid indexed entity classes, superclasses and superinterfaces are: %2$s.
HSEARCH000237 org.hibernate.search.util.common.SearchException Invalid range: at least one bound in range predicates must be non-null.
HSEARCH000242 org.hibernate.search.util.common.SearchException Invalid type '%1$s': missing constructor. The type must expose a public, no-arguments constructor.
HSEARCH000274 TRACE Executing Lucene query: %s
HSEARCH000276 org.hibernate.search.util.common.SearchException No transaction active. Consider increasing the connection time-out.
HSEARCH000284 org.hibernate.search.util.common.SearchException Unable to open index readers: %1$s
HSEARCH000295 org.hibernate.search.util.common.SearchException Invalid value for type '$2%s': '$1%s'. %3$s
HSEARCH000297 org.hibernate.search.util.common.SearchException Unable to convert '%2$s' into type '%1$s': value is too large.
HSEARCH000329 org.hibernate.search.util.common.SearchException Unable to apply analysis configuration: %1$s
HSEARCH000337 org.hibernate.search.util.common.SearchException Conflicting usage of @Param annotation for parameter name: '%1$s'. Can't assign both value '%2$s' and '%3$s'
HSEARCH000337 org.hibernate.search.util.common.SearchException Ambiguous value for parameter '%1$s': this parameter is set to two different values '%2$s' and '%3$s'.
HSEARCH000342 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and normalizer '%2$s' are assigned to this type. Either an analyzer or a normalizer can be assigned, but not both.
HSEARCH000344 WARN Invalid normalizer implementation: the normalizer for definition '%s' produced %d tokens. Normalizers should never produce more than one token. The tokens have been concatenated by Hibernate Search, but you should fix your normalizer definition.
HSEARCH000345 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and sorts are enabled. Sorts are not supported on analyzed fields. If you need an analyzer simply to transform the text (lowercasing, ...) without splitting it into tokens, use a normalizer instead. If you need an actual analyzer (with tokenization), define two separate fields: one with an analyzer that is not sortable, and one with a normalizer that is sortable.
HSEARCH000353 org.hibernate.search.util.common.SearchException Unknown analyzer: '%1$s'. Make sure you defined this analyzer.
HSEARCH000501 org.hibernate.search.util.common.SearchException Invalid value for configuration property '%1$s': '%2$s'. %3$s
HSEARCH000502 org.hibernate.search.util.common.SearchException Invalid value: expected either an instance of '%1$s' or a String that can be parsed into that type. %2$s
HSEARCH000503 org.hibernate.search.util.common.SearchException Invalid Boolean value: expected either a Boolean, the String 'true' or the String 'false'. %1$s
HSEARCH000504 org.hibernate.search.util.common.SearchException Invalid Integer value: expected either a Number or a String that can be parsed into an Integer. %1$s
HSEARCH000505 org.hibernate.search.util.common.SearchException Invalid Long value: expected either a Number or a String that can be parsed into a Long. %1$s
HSEARCH000506 org.hibernate.search.util.common.SearchException Invalid multi value: expected either a single value of the correct type, a Collection, or a String, and interpreting as a single value failed with the following exception. %1$s
HSEARCH000514 org.hibernate.search.util.common.SearchException Invalid index field name '%1$s': field names cannot be null or empty.
HSEARCH000515 org.hibernate.search.util.common.SearchException Invalid index field name '%1$s': field names cannot contain a dot ('.'). Remove the dot from your field name, or if you are declaring the field in a bridge and want a tree of fields, declare an object field using the objectField() method.
HSEARCH000516 java.lang.IllegalArgumentException Invalid polygon: the first point '%1$s' should be identical to the last point '%2$s' to properly close the polygon.
HSEARCH000519 java.lang.String Hibernate Search encountered %3$s failures during %1$s. Only the first %2$s failures are displayed here. See the logs for extra failures.
HSEARCH000520 org.hibernate.search.util.common.SearchException Hibernate Search encountered failures during %1$s. Failures: %2$s
HSEARCH000521 ERROR Hibernate Search encountered a failure during %1$s; continuing for now to list all problems, but the process will ultimately be aborted. Context: %2$s Failure:
HSEARCH000522 WARN Exception while collecting a failure -- this may indicate a bug or a missing test in Hibernate Search. Please report it: https://hibernate.org/community/ Nested exception: %1$s
HSEARCH000525 org.hibernate.search.util.common.SearchException Invalid call of ifSupported(...) after orElse(...). Use a separate extension() context, or move the orElse(...) call last.
HSEARCH000526 org.hibernate.search.util.common.SearchException None of the provided extensions can be applied to the current context. Attempted extensions: %1$s. If you want to ignore this, use .extension().ifSupported(...).orElse(ignored -> { }).
HSEARCH000528 org.hibernate.search.util.common.SearchException Security manager does not allow access to the constructor of type '%1$s': %2$s
HSEARCH000530 org.hibernate.search.engine.environment.classpath.spi.ClassLoadingException Unable to load class '%1$s': %2$s
HSEARCH000533 org.hibernate.search.util.common.SearchException No backend with name '%1$s'. Check that at least one entity is configured to target that backend. The following backends can be retrieved by name: %2$s. %3$s
HSEARCH000534 org.hibernate.search.util.common.SearchException No index manager with name '%1$s'. Check that at least one entity is configured to target that index. The following indexes can be retrieved by name: %2$s.
HSEARCH000540 org.hibernate.search.util.common.SearchException Unable to instantiate class '%1$s': %2$s
HSEARCH000542 org.hibernate.search.util.common.SearchException Invalid type '%1$s': this type cannot be assigned to type '%2$s'.
HSEARCH000543 org.hibernate.search.util.common.SearchException Invalid type '%1$s': this type is an interface. An implementation class is required.
HSEARCH000544 org.hibernate.search.util.common.SearchException Invalid type '%1$s': missing constructor. The type must expose a public constructor with a single parameter of type Map.
HSEARCH000546 org.hibernate.search.util.common.SearchException Cyclic recursion starting from '%1$s' on %2$s. Index field path starting from that location and ending with a cycle: '%3$s'. A type cannot declare an unrestricted @IndexedEmbedded to itself, even indirectly. To break the cycle, you should consider adding filters to your @IndexedEmbedded: includePaths, includeDepth, excludePaths, ...
HSEARCH000547 org.hibernate.search.util.common.SearchException Invalid BeanReference value: expected an instance of '%1$s', BeanReference, String or Class. %2$s
HSEARCH000551 org.hibernate.search.util.common.SearchException Invalid use of per-field boost: the predicate score is constant. Cannot assign a different boost to each field when the predicate score is constant.
HSEARCH000553 org.hibernate.search.util.common.SearchException Invalid slop: %1$d. The slop must be positive or zero.
HSEARCH000554 org.hibernate.search.util.common.SearchException Invalid maximum edit distance: %1$d. The value must be 0, 1 or 2.
HSEARCH000555 org.hibernate.search.util.common.SearchException Invalid exact prefix length: %1$d. The value must be positive or zero.
HSEARCH000557 org.hibernate.search.util.common.SearchException Invalid value for type '%1$s': '%2$s'. The expected format is '%3$s'.
HSEARCH000558 org.hibernate.search.util.common.SearchException Invalid %1$s value: expected either a Number or a String that can be parsed into a %1$s. %2$s
HSEARCH000559 org.hibernate.search.util.common.SearchException Invalid string for type '%2$s': '%1$s'. %3$s
HSEARCH000560 org.hibernate.search.util.common.SearchException Invalid value for enum '%2$s': '%1$s'.
HSEARCH000561 org.hibernate.search.util.common.SearchException Multiple hits when a single hit was expected.
HSEARCH000562 org.hibernate.search.util.common.SearchException Unable to submit work to '%1$s': thread received interrupt signal. The work has been discarded.
HSEARCH000563 org.hibernate.search.util.common.SearchException Unable to submit work to '%1$s': this orchestrator is stopped. The work has been discarded.
HSEARCH000564 org.hibernate.search.util.common.SearchException Invalid geo-point value: '%1$s'. The expected format is ', '.
HSEARCH000565 org.hibernate.search.util.common.SearchException Unknown aggregation key '%1$s'. This key was not used when building the search query.
HSEARCH000566 org.hibernate.search.util.common.SearchException Invalid configuration property checking strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH000567 INFO Configuration property tracking is disabled; unused properties will not be logged.
HSEARCH000568 WARN Invalid configuration passed to Hibernate Search: some properties in the given configuration are not used. There might be misspelled property keys in your configuration. Unused properties: %1$s. To disable this warning, set the property '%2$s' to '%3$s'.
HSEARCH000569 ERROR The background failure handler threw an exception while handling a previous failure. The failure may not have been reported.
HSEARCH000570 org.hibernate.search.util.common.SearchException Invalid index field template name '%1$s': field template names cannot be null or empty.
HSEARCH000571 org.hibernate.search.util.common.SearchException Invalid index field template name '%1$s': field template names cannot contain a dot ('.').
HSEARCH000572 org.hibernate.search.util.common.SearchException Inconsistent index data: a supposedly single-valued field returned multiple values. Values: [%1$s, %2$s].
HSEARCH000573 org.hibernate.search.util.common.SearchException Invalid configuration passed to Hibernate Search: some properties in the given configuration are obsolete.Configuration properties changed between Hibernate Search 5 and Hibernate Search 6 Check out the reference documentation and upgrade your configuration. Obsolete properties: %1$s.
HSEARCH000575 org.hibernate.search.util.common.SearchException No default backend. Check that at least one entity is configured to target the default backend. The following backends can be retrieved by name: %1$s.
HSEARCH000576 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Ambiguous bean reference to type '%1$s': multiple beans are explicitly defined for this type in Hibernate Search's internal registry. Explicitly defined beans: %2$s.
HSEARCH000577 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException No beans defined for type '%1$s' in Hibernate Search's internal registry.
HSEARCH000578 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException No beans defined for type '%1$s' and name '%2$s' in Hibernate Search's internal registry.
HSEARCH000579 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Unable to resolve bean reference to type '%1$s' and name '%2$s'. %3$s
HSEARCH000580 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Unable to resolve bean reference to type '%1$s'. %2$s
HSEARCH000581 org.hibernate.search.util.common.SearchException Unable to resolve backend type: configuration property '%1$s' is not set, and there isn't any backend in the classpath. Check that you added the desired backend to your project's dependencies.
HSEARCH000582 org.hibernate.search.util.common.SearchException Ambiguous backend type: configuration property '%1$s' is not set, and multiple backend types are present in the classpath. Set property '%1$s' to one of the following to select the backend type: %2$s
HSEARCH000583 org.hibernate.search.util.common.SearchException Invalid type for DSL arguments: '%1$s'. Expected '%2$s' or a subtype.
HSEARCH000584 org.hibernate.search.util.common.SearchException Invalid type for returned values: '%1$s'. Expected '%2$s' or a supertype.
HSEARCH000586 org.hibernate.search.util.common.SearchTimeoutException Operation exceeded the timeout of %1$s.
HSEARCH000587 org.hibernate.search.util.common.SearchException Unable to provide the exact total hit count: only a lower-bound approximation is available. This is generally the result of setting query options such as a timeout or the total hit count threshold. Either unset these options, or retrieve the lower-bound hit count approximation through '.total().hitCountLowerBound()'.
HSEARCH000588 org.hibernate.search.util.common.SearchException Multiple entity types mapped to index '%1$s': '%2$s', '%3$s'. Each indexed type must be mapped to its own, dedicated index.
HSEARCH000589 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Unable to create bean using reflection: %1$s
HSEARCH000590 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException No configured bean manager.
HSEARCH000591 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Unable to resolve '%2$s' to a class extending '%1$s': %3$s
HSEARCH000592 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException Invalid bean reference: '%1$s'. The reference is prefixed with '%2$s', which is not a valid bean retrieval prefix. If you want to reference a bean by name, and the name contains a colon, use 'bean:%1$s'. Otherwise, use a valid bean retrieval prefix among the following: %3$s.
HSEARCH000593 org.hibernate.search.util.common.SearchException Named predicate name '%1$s' is invalid: field names cannot be null or empty.
HSEARCH000594 org.hibernate.search.util.common.SearchException Named predicate name '%1$s' is invalid: field names cannot contain a dot ('.'). Remove the dot from your named predicate name.
HSEARCH000596 org.hibernate.search.util.common.SearchException Different mappings trying to define two backends with the same name '%1$s' but having different expectations on multi-tenancy.
HSEARCH000597 org.hibernate.search.util.common.SearchException Different mappings trying to define default backends having different expectations on multi-tenancy.
HSEARCH000598 org.hibernate.search.util.common.SearchException Invalid type: %1$s is not composite.
HSEARCH000599 org.hibernate.search.util.common.SearchException Invalid type: %1$s is not an object field.
HSEARCH000600 org.hibernate.search.util.common.SearchException Invalid type: %1$s is not a value field.
HSEARCH000601 org.hibernate.search.util.common.SearchException Inconsistent configuration for %1$s in a search query across multiple indexes: %2$s
HSEARCH000602 org.hibernate.search.util.common.SearchException Inconsistent support for '%1$s': %2$s
HSEARCH000603 org.hibernate.search.util.common.SearchException Attribute '%1$s' differs: '%2$s' vs. '%3$s'.
HSEARCH000604 org.hibernate.search.util.common.SearchException Cannot use '%2$s' on %1$s: %3$s
HSEARCH000606 org.hibernate.search.util.common.SearchException '%1$s' can be used in some of the targeted indexes, but not all of them. %2$s
HSEARCH000609 org.hibernate.search.util.common.SearchException This field is a value field in some indexes, but an object field in other indexes.
HSEARCH000610 org.hibernate.search.util.common.SearchException Unknown field '%1$s'.
HSEARCH000611 org.hibernate.search.util.common.SearchException Invalid target fields: fields [%1$s, %3$s] are in different nested documents (%2$s vs. %4$s). All target fields must be in the same document.
HSEARCH000612 org.hibernate.search.util.common.SearchException Unable to close saved value for key %1$s: %2$s
HSEARCH000613 org.hibernate.search.util.common.SearchException Unable to access the Search integration: initialization hasn't completed yet.
HSEARCH000614 org.hibernate.search.util.common.SearchException Cannot project on entity type '%1$s': this type cannot be loaded from an external datasource, and the documents from the index cannot be projected to its Java class '%2$s'. %3$s
HSEARCH000615 org.hibernate.search.util.common.SearchException Unable to resolve field '%1$s': %2$s
HSEARCH000616 DEBUG Ignoring ServiceConfigurationError caught while trying to instantiate service '%s'.
HSEARCH000617 org.hibernate.search.util.common.SearchException Parameter with name '%1$s' was not defined on projection definition '%2$s'.
HSEARCH000618 org.hibernate.search.util.common.SearchException Invalid type for entity projection on type '%1$s': the entity type's Java class '%2$s' does not extend the requested projection type '%3$s'.
HSEARCH000619 org.hibernate.search.util.common.SearchException 'includePaths' and 'excludePaths' cannot be used together in the same filter. Use either `includePaths` or `excludePaths` leaving the other one empty. Included paths are: '%1$s', excluded paths are: '%2$s'.
HSEARCH400007 org.hibernate.search.util.common.SearchException Elasticsearch request failed: %3$s Request: %1$s Response: %2$s
HSEARCH400008 org.hibernate.search.util.common.SearchException Elasticsearch bulked request failed: %3$s Request metadata: %1$sResponse: %2$s
HSEARCH400010 org.hibernate.search.util.common.SearchException Elasticsearch response indicates a timeout (HTTP status 408)
HSEARCH400020 org.hibernate.search.util.common.SearchException Unable to update mapping for index '%1$s': %2$s
HSEARCH400022 org.hibernate.search.util.common.SearchException Invalid index status: '%1$s'. Valid statuses are: %2$s.
HSEARCH400024 org.hibernate.search.util.common.SearchException Index '%1$s' failed to reach status '%2$s' after %3$sms.
HSEARCH400034 org.hibernate.search.util.common.SearchException Unable to retrieve index metadata from Elasticsearch: %1$s
HSEARCH400035 org.hibernate.search.util.common.SearchException Unable to update schema for index '%1$s': %2$s
HSEARCH400050 org.hibernate.search.util.common.SearchException Missing index: index names [%1$s, %2$s] do not point to any index in the Elasticsearch cluster.
HSEARCH400053 TRACE Executing Elasticsearch query on '%s' with parameters '%s': <%s>
HSEARCH400055 org.hibernate.search.util.common.SearchException Duplicate tokenizer definitions: '%1$s'. Tokenizer names must be unique.
HSEARCH400056 org.hibernate.search.util.common.SearchException Duplicate char filter definitions: '%1$s'. Char filter names must be unique.
HSEARCH400057 org.hibernate.search.util.common.SearchException Duplicate token filter definitions: '%1$s'. Token filter names must be unique.
HSEARCH400067 org.hibernate.search.util.common.SearchException Unable to update settings for index '%1$s': %2$s
HSEARCH400069 INFO Closed Elasticsearch index '%1$s' automatically.
HSEARCH400070 INFO Opened Elasticsearch index '%1$s' automatically.
HSEARCH400073 WARN Hibernate Search will connect to Elasticsearch with authentication over plain HTTP (not HTTPS). The password will be sent in clear text over the network.
HSEARCH400075 org.hibernate.search.util.common.SearchException Unable to apply analysis configuration: %1$s
HSEARCH400076 org.hibernate.search.util.common.SearchException Invalid analyzer definition for name '%1$s'. Analyzer definitions must at least define the tokenizer.
HSEARCH400077 org.hibernate.search.util.common.SearchException Invalid tokenizer definition for name '%1$s'. Tokenizer definitions must at least define the tokenizer type.
HSEARCH400078 org.hibernate.search.util.common.SearchException Invalid char filter definition for name '%1$s'. Char filter definitions must at least define the char filter type.
HSEARCH400079 org.hibernate.search.util.common.SearchException Invalid token filter definition for name '%1$s'. Token filter definitions must at least define the token filter type.
HSEARCH400080 org.hibernate.search.util.common.SearchException Unable to detect the Elasticsearch version running on the cluster: %s
HSEARCH400081 org.hibernate.search.util.common.SearchException Incompatible Elasticsearch version running on the cluster: '%s'. Refer to the documentation to know which versions of Elasticsearch are compatible with Hibernate Search.
HSEARCH400082 DEBUG Executed Elasticsearch HTTP %s request to '%s' with path '%s', query parameters %s and %d objects in payload in %dms. Response had status %d '%s'. Request body: <%s>. Response body: <%s>
HSEARCH400085 WARN Unknown Elasticsearch version running on the cluster: '%s'. Hibernate Search may not work correctly. Consider updating to a newer version of Hibernate Search, if any.
HSEARCH400089 org.hibernate.search.util.common.SearchException Unable to parse Elasticsearch response. Status code was '%1$d', status phrase was '%2$s'. Nested exception: %3$s
HSEARCH400090 org.hibernate.search.util.common.SearchException Elasticsearch response indicates a failure.
HSEARCH400093 TRACE Executed Elasticsearch HTTP %s request to '%s' with path '%s', query parameters %s and %d objects in payload in %dms. Response had status %d '%s'. Request body: <%s>. Response body: <%s>
HSEARCH400502 org.hibernate.search.util.common.SearchException Invalid multi-index scope: a scope cannot span both a Elasticsearch index and another type of index. Base scope: '%1$s', incompatible (Elasticsearch) index: '%2$s'.
HSEARCH400503 org.hibernate.search.util.common.SearchException Invalid multi-index scope: a scope cannot span multiple Elasticsearch backends. Base scope: '%1$s', incompatible index (from another backend): '%2$s'.
HSEARCH400506 org.hibernate.search.util.common.SearchException Invalid target for Elasticsearch extension: '%1$s'. This extension can only be applied to components created by an Elasticsearch backend.
HSEARCH400508 org.hibernate.search.util.common.SearchException Invalid search predicate: '%1$s'. You must build the predicate from an Elasticsearch search scope.
HSEARCH400511 org.hibernate.search.util.common.SearchException Invalid search sort: '%1$s'. You must build the sort from an Elasticsearch search scope.
HSEARCH400515 org.hibernate.search.util.common.SearchException Invalid multi-tenancy strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH400516 org.hibernate.search.util.common.SearchException Invalid tenant identifiers: '%1$s'. No tenant identifier is expected, because multi-tenancy is disabled for this backend.
HSEARCH400517 org.hibernate.search.util.common.SearchException Missing tenant identifier. A tenant identifier is expected, because multi-tenancy is enabled for this backend.
HSEARCH400518 org.hibernate.search.util.common.SearchException Invalid requested type for client: '%1$s'. The Elasticsearch low-level client can only be unwrapped to '%2$s'.
HSEARCH400519 org.hibernate.search.util.common.SearchException Invalid requested type for this backend: '%1$s'. Elasticsearch backends can only be unwrapped to '%2$s'.
HSEARCH400520 org.hibernate.search.util.common.SearchException Duplicate index field definition: '%1$s'. Index field names must be unique. Look for two property mappings with the same field name, or two indexed-embeddeds with prefixes that lead to conflicting index field names, or two custom bridges declaring index fields with the same name.
HSEARCH400525 org.hibernate.search.util.common.SearchException Invalid field reference for this document element: this document element has path '%1$s', but the referenced field has a parent with path '%2$s'.
HSEARCH400526 org.hibernate.search.util.common.AssertionFailure Missing data in the Elasticsearch response.
HSEARCH400529 org.hibernate.search.util.common.SearchException Multiple conflicting minimumShouldMatch constraints for ceiling '%1$s'
HSEARCH400530 org.hibernate.search.util.common.SearchException Conflicting index names: Hibernate Search indexes '%1$s' and '%2$s' both target the Elasticsearch index name or alias '%3$s'
HSEARCH400531 org.hibernate.search.util.common.SearchException Unable to resolve index name '%1$s' to an entity type: %2$s
HSEARCH400532 org.hibernate.search.util.common.SearchException Unable to convert DSL argument: %1$s
HSEARCH400533 org.hibernate.search.util.common.SearchException Invalid requested type for this index manager: '%1$s'. Elasticsearch index managers can only be unwrapped to '%2$s'.
HSEARCH400534 org.hibernate.search.util.common.SearchException Invalid typed analyzer definition for name '%1$s'. Typed analyzer definitions must at least define the analyzer type.
HSEARCH400535 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and normalizer '%2$s' are assigned to this type. Either an analyzer or a normalizer can be assigned, but not both.
HSEARCH400536 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and sorts are enabled. Sorts are not supported on analyzed fields. If you need an analyzer simply to transform the text (lowercasing, ...) without splitting it into tokens, use a normalizer instead. If you need an actual analyzer (with tokenization), define two separate fields: one with an analyzer that is not sortable, and one with a normalizer that is sortable.
HSEARCH400537 org.hibernate.search.util.common.SearchException Ambiguous value for parameter '%1$s': this parameter is set to two different values '%2$s' and '%3$s'.
HSEARCH400538 org.hibernate.search.util.common.SearchException Invalid search projection: '%1$s'. You must build the projection from an Elasticsearch search scope.
HSEARCH400544 org.hibernate.search.util.common.SearchException Unable to shut down the Elasticsearch client: %1$s
HSEARCH400545 org.hibernate.search.util.common.SearchException No built-in index field type for class: '%1$s'.
HSEARCH400553 org.hibernate.search.util.common.SearchException Full-text features (analysis, fuzziness) are not supported for fields of this type.
HSEARCH400554 org.hibernate.search.util.common.SearchException Incomplete field definition. You must call toReference() to complete the field definition.
HSEARCH400555 org.hibernate.search.util.common.SearchException Multiple calls to toReference() for the same field definition. You must call toReference() exactly once.
HSEARCH400556 org.hibernate.search.util.common.SearchException Invalid Elasticsearch version: '%1$s'. Expected format is 'x.y.z-qualifier', where 'x', 'y' and 'z' are integers, and 'qualifier' is an string of word characters (alphanumeric or '_'). Incomplete versions are allowed, for example '7.0' or just '7'.
HSEARCH400557 org.hibernate.search.util.common.SearchException Invalid Elasticsearch version: '%1$s'. Expected format is 'x.y.z-qualifier' or ':x.y.z-qualifier', where '' is one of %2$s (defaults to '%3$s'), 'x', 'y' and 'z' are integers, and 'qualifier' is an string of word characters (alphanumeric or '_'). Incomplete versions are allowed, for example 'elastic:7.0', '7.0' or just '7'.
HSEARCH400558 org.hibernate.search.util.common.SearchException Invalid Elasticsearch distribution name: '%1$s'. Valid names are: %2$s.
HSEARCH400559 org.hibernate.search.util.common.SearchException Unexpected Elasticsearch version running on the cluster: '%2$s'. Hibernate Search was configured for Elasticsearch '%1$s'.
HSEARCH400560 org.hibernate.search.util.common.SearchException Cannot skip analysis on field '%1$s': the Elasticsearch backend will always normalize arguments before attempting matches on normalized fields.
HSEARCH400561 org.hibernate.search.util.common.SearchException Ambiguous Elasticsearch version: '%s'. This version matches multiple dialects. Please use a more precise version to remove the ambiguity.
HSEARCH400562 org.hibernate.search.util.common.SearchException Invalid index field type: both null token '%2$s' ('indexNullAs') and analyzer '%1$s' are assigned to this type. 'indexNullAs' is not supported on analyzed fields.
HSEARCH400563 org.hibernate.search.util.common.SearchException Multiple values assigned to field '%1$s': this field is single-valued. Declare the field as multi-valued in order to allow this.
HSEARCH400564 org.hibernate.search.util.common.SearchException Invalid use of explain(Object id) on a query targeting multiple types. Use explain(String typeName, Object id) and pass one of %1$s as the type name.
HSEARCH400565 org.hibernate.search.util.common.SearchException Invalid mapped type name: '%2$s'. This type is not among the mapped types targeted by this query: %1$s.
HSEARCH400566 org.hibernate.search.util.common.SearchException Invalid document identifier: '%2$s'. No such document in index '%1$s'.
HSEARCH400567 org.hibernate.search.util.common.SearchException Invalid index field type: missing decimal scale. Define the decimal scale explicitly. %1$s
HSEARCH400569 org.hibernate.search.util.common.SearchException Unable to encode value '%1$s': this field type only supports values ranging from '%2$s' to '%3$s'. If you want to encode values that are outside this range, change the decimal scale for this field. Do not forget to reindex all your data after changing the decimal scale.
HSEARCH400570 org.hibernate.search.util.common.SearchException Invalid index field type: decimal scale '%1$s' is positive. The decimal scale of BigInteger fields must be zero or negative.
HSEARCH400572 org.hibernate.search.util.common.SearchException Invalid search predicate: '%1$s'. You must build the predicate from a scope targeting indexes %3$s, but the given predicate was built from a scope targeting indexes %2$s.
HSEARCH400573 org.hibernate.search.util.common.SearchException Invalid search sort: '%1$s'. You must build the sort from a scope targeting indexes %3$s, but the given sort was built from a scope targeting indexes %2$s.
HSEARCH400574 org.hibernate.search.util.common.SearchException Invalid search projection: '%1$s'. You must build the projection from a scope targeting indexes %3$s, but the given projection was built from a scope targeting indexes %2$s.
HSEARCH400576 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and aggregations are enabled. Aggregations are not supported on analyzed fields. If you need an analyzer simply to transform the text (lowercasing, ...) without splitting it into tokens, use a normalizer instead. If you need an actual analyzer (with tokenization), define two separate fields: one with an analyzer that is not aggregable, and one with a normalizer that is aggregable.
HSEARCH400580 org.hibernate.search.util.common.SearchException Invalid range: '%1$s'. Elasticsearch range aggregations only accept ranges in the canonical form: (-Infinity, ) or [, ) or [, +Infinity). Call Range.canonical(...) to be sure to create such a range.
HSEARCH400581 org.hibernate.search.util.common.SearchException Invalid search aggregation: '%1$s'. You must build the aggregation from an Elasticsearch search scope.
HSEARCH400582 org.hibernate.search.util.common.SearchException Invalid search aggregation: '%1$s'. You must build the aggregation from a scope targeting indexes %3$s, but the given aggregation was built from a scope targeting indexes %2$s.
HSEARCH400585 org.hibernate.search.util.common.SearchException Duplicate aggregation definitions for key: '%1$s'
HSEARCH400587 org.hibernate.search.util.common.SearchException Invalid index field type: search analyzer '%1$s' is assigned to this type, but the indexing analyzer is missing. Assign an indexing analyzer and a search analyzer, or remove the search analyzer.
HSEARCH400588 org.hibernate.search.util.common.SearchException Call to the bulk REST API failed: %1$s
HSEARCH400589 org.hibernate.search.util.common.SearchException Invalid host/port: '%1$s'. The host/port string must use the format 'host:port', for example 'mycompany.com:9200' The URI scheme ('http://', 'https://') must not be included.
HSEARCH400590 org.hibernate.search.util.common.SearchTimeoutException Request execution exceeded the timeout of %1$s. Request was %2$s
HSEARCH400591 org.hibernate.search.util.common.SearchException Invalid name for the type-name mapping strategy: '%1$s'. Valid names are: %2$s.
HSEARCH400592 org.hibernate.search.util.common.SearchException Missing field '%1$s' for one of the search hits. The document was probably indexed with a different configuration: full reindexing is necessary.
HSEARCH400593 org.hibernate.search.util.common.SearchException Invalid Elasticsearch index layout: index names [%1$s, %2$s] resolve to multiple distinct indexes %3$s. These names must resolve to a single index.
HSEARCH400594 org.hibernate.search.util.common.SearchException Invalid Elasticsearch index layout: primary (non-alias) name for existing Elasticsearch index '%1$s' does not match the expected pattern '%2$s'.
HSEARCH400595 org.hibernate.search.util.common.SearchException Invalid Elasticsearch index layout: unique key '%1$s' extracted from the index name does not match any of %2$s.
HSEARCH400596 org.hibernate.search.util.common.SearchException Invalid Elasticsearch index layout: the write alias and read alias are set to the same value: '%1$s'. The write alias and read alias must be different.
HSEARCH400597 org.hibernate.search.util.common.SearchException Missing or imprecise Elasticsearch version: when configuration property '%1$s' is set to 'false', the version is mandatory and must be at least as precise as 'x.y', where 'x' and 'y' are integers.
HSEARCH400598 org.hibernate.search.util.common.SearchException The lifecycle strategy cannot be set at the index level anymore. Set the schema management strategy via the property 'hibernate.search.schema_management.strategy' instead.
HSEARCH400600 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for fields in nested documents.
HSEARCH400601 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for String fields. Only MIN and MAX are supported.
HSEARCH400602 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for temporal fields. Only MIN, MAX, AVG and MEDIAN are supported.
HSEARCH400603 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for a distance sort. Only MIN, MAX, AVG and MEDIAN are supported.
HSEARCH400604 org.hibernate.search.util.common.SearchException Invalid sort filter: field '%1$s' is not contained in a nested object. Sort filters are only available if the field to sort on is contained in a nested object.
HSEARCH400605 org.hibernate.search.util.common.SearchException Invalid search predicate: %1$s. This predicate targets fields %3$s, but only fields that are contained in the nested object with path '%2$s' are allowed here.
HSEARCH400606 org.hibernate.search.util.common.SearchException Invalid aggregation filter: field '%1$s' is not contained in a nested object. Aggregation filters are only available if the field to aggregate on is contained in a nested object.
HSEARCH400607 org.hibernate.search.util.common.SearchException Duplicate index field template definition: '%1$s'. Multiple bridges may be trying to access the same index field template, or two indexed-embeddeds may have prefixes that lead to conflicting field names, or you may have declared multiple conflicting mappings. In any case, there is something wrong with your mapping and you should fix it.
HSEARCH400608 org.hibernate.search.util.common.SearchException Invalid value type. This field's values are of type '%1$s', which is not assignable from '%2$s'.
HSEARCH400609 org.hibernate.search.util.common.SearchException Unknown field '%1$s'.
HSEARCH400613 org.hibernate.search.util.common.SearchException Invalid cardinality for projection on field '%1$s': the projection is single-valued, but this field is multi-valued. Make sure to call '.multi()' when you create the projection.
HSEARCH400617 org.hibernate.search.util.common.SearchException Implementation class differs: '%1$s' vs. '%2$s'.
HSEARCH400618 org.hibernate.search.util.common.SearchException Field codec differs: '%1$s' vs. '%2$s'.
HSEARCH400621 org.hibernate.search.util.common.SearchException Invalid dynamic type: '%1$s'. Valid values are: %2$s.
HSEARCH400625 org.hibernate.search.util.common.SearchException Unable to update aliases for index '%1$s': %2$s
HSEARCH400626 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: both the 'uris' property and the 'protocol' property are set. Uris: '%1$s'. Protocol: '%2$s'. Either set the protocol and hosts simultaneously using the 'uris' property, or set them separately using the 'protocol' property and the 'hosts' property.
HSEARCH400627 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: both the 'uris' property and the 'hosts' property are set. Uris: '%1$s'. Hosts: '%2$s'. Either set the protocol and hosts simultaneously using the 'uris' property, or set them separately using the 'protocol' property and the 'hosts' property.
HSEARCH400628 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: the 'uris' use different protocols (http, https). All URIs must use the same protocol. Uris: '%1$s'.
HSEARCH400629 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: the list of hosts must not be empty.
HSEARCH400630 org.hibernate.search.util.common.SearchException Invalid target hosts configuration: the list of URIs must not be empty.
HSEARCH400631 org.hibernate.search.util.common.SearchException Unable to find the given custom index settings file: '%1$s'.
HSEARCH400632 org.hibernate.search.util.common.SearchException Error on loading the given custom index settings file '%1$s': %2$s
HSEARCH400633 org.hibernate.search.util.common.SearchException There are some JSON syntax errors on the given custom index settings file '%1$s': %2$s
HSEARCH400634 org.hibernate.search.util.common.SearchException Invalid use of 'missing().first()' for an ascending distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400635 org.hibernate.search.util.common.SearchException Invalid use of 'missing().last()' for a descending distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400636 org.hibernate.search.util.common.SearchException Invalid use of 'missing().use(...)' for a distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400637 org.hibernate.search.util.common.SearchException The index schema named predicate '%1$s' was added twice.
HSEARCH400638 org.hibernate.search.util.common.SearchException Predicate definition differs: '%1$s' vs. '%2$s'.
HSEARCH400640 WARN A search query fetching all hits was requested, but only '%2$s' hits were retrieved because the maximum result window size forces a limit of '%1$s' hits. Refer to Elasticsearch's 'max_result_window_size' setting for more information.
HSEARCH400641 org.hibernate.search.util.common.SearchException Incompatible Elasticsearch version: version '%2$s' does not match version '%1$s' that was provided when the backend was created. You can provide a more precise version on startup, but you cannot override the version that was provided when the backend was created.
HSEARCH400648 org.hibernate.search.util.common.SearchException Invalid backend configuration: mapping requires multi-tenancy but no multi-tenancy strategy is set.
HSEARCH400649 org.hibernate.search.util.common.SearchException Invalid backend configuration: mapping requires single-tenancy but multi-tenancy strategy is set.
HSEARCH400650 org.hibernate.search.util.common.SearchException Param with name '%1$s' has not been defined for the named predicate '%2$s'.
HSEARCH400651 org.hibernate.search.util.common.SearchException Unable to find the given custom index mapping file: '%1$s'.
HSEARCH400652 org.hibernate.search.util.common.SearchException Error on loading the given custom index mapping file '%1$s': %2$s
HSEARCH400653 org.hibernate.search.util.common.SearchException There are some JSON syntax errors on the given custom index mapping file '%1$s': %2$s
HSEARCH400654 org.hibernate.search.util.common.SearchException Invalid context for projection on field '%1$s': the surrounding projection is executed for each object in field '%2$s', which is not a parent of field '%1$s'. Check the structure of your projections.
HSEARCH400655 org.hibernate.search.util.common.SearchException Invalid cardinality for projection on field '%1$s': the projection is single-valued, but this field is effectively multi-valued in this context, because parent object field '%2$s' is multi-valued. Either call '.multi()' when you create the projection on field '%1$s', or wrap that projection in an object projection like this: 'f.object("%2$s").from().as(...).multi()'.
HSEARCH400656 org.hibernate.search.util.common.SearchException Unexpected mapped type name extracted from hits: '%1$s'. Expected one of: %2$s. The document was probably indexed with a different configuration: full reindexing is necessary.
HSEARCH400657 org.hibernate.search.util.common.SearchException Unable to export the schema for '%1$s' index: %2$s
HSEARCH400658 org.hibernate.search.util.common.SearchException Invalid use of 'missing().lowest()' for an ascending distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400659 org.hibernate.search.util.common.SearchException Invalid use of 'missing().lowest()' for a descending distance sort. Elasticsearch always assumes missing values have a distance of '+Infinity', and this behavior cannot be customized.
HSEARCH400660 org.hibernate.search.util.common.SearchException Invalid highlighter: '%1$s'. You must build the highlighter from an Elasticsearch search scope.
HSEARCH400661 org.hibernate.search.util.common.SearchException Invalid highlighter: '%1$s'. You must build the highlighter from a scope targeting indexes %3$s, but the given highlighter was built from a scope targeting indexes %2$s.
HSEARCH400662 WARN No fields were added to be highlighted, but some query level highlighters were provided. These highlighters will be ignored.
HSEARCH400663 org.hibernate.search.util.common.SearchException Cannot find a highlighter with name '%1$s'. Available highlighters are: %2$s. Was it configured with `highlighter("%1$s", highlighterContributor)`?
HSEARCH400664 org.hibernate.search.util.common.SearchException Named highlighters cannot use a blank string as name.
HSEARCH400665 org.hibernate.search.util.common.SearchException Highlighter with name '%1$s' is already defined. Use a different name to add another highlighter.
HSEARCH400666 org.hibernate.search.util.common.SearchException '%1$s' highlighter type cannot be applied to '%2$s' field. '%2$s' must have either 'ANY' or '%1$s' among the configured highlightable values.
HSEARCH400667 org.hibernate.search.util.common.SearchException Cannot use 'NO' in combination with other highlightable values. Applied values are: '%1$s'
HSEARCH400668 org.hibernate.search.util.common.SearchException The '%1$s' term vector storage strategy is not compatible with the fast vector highlighter. Either change the strategy to one of `WITH_POSITIONS_PAYLOADS`/`WITH_POSITIONS_OFFSETS_PAYLOADS` or remove the requirement for the fast vector highlighter support.
HSEARCH400669 org.hibernate.search.util.common.SearchException Setting the `highlightable` attribute to an empty array is not supported. Set the value to `NO` if the field does not require the highlight projection.
HSEARCH400670 org.hibernate.search.util.common.SearchException Highlight projection cannot be applied within nested context of '%1$s'.
HSEARCH400671 org.hibernate.search.util.common.SearchException The highlight projection cannot be applied to a field from an object using `ObjectStructure.NESTED` structure.
HSEARCH400672 org.hibernate.search.util.common.SearchException '%1$s' cannot be nested in an object projection. %2$s
HSEARCH600001 org.hibernate.search.util.common.SearchException Path '%1$s' exists but does not point to a writable directory.
HSEARCH600005 org.hibernate.search.util.common.SearchException Invalid target for Lucene extension: '%1$s'. This extension can only be applied to components created by a Lucene backend.
HSEARCH600010 org.hibernate.search.util.common.SearchException Invalid search predicate: '%1$s'. You must build the predicate from a Lucene search scope.
HSEARCH600014 org.hibernate.search.util.common.SearchException Invalid search sort: '%1$s'. You must build the sort from a Lucene search scope.
HSEARCH600015 org.hibernate.search.util.common.SearchException Unable to initialize index directory: %1$s
HSEARCH600016 org.hibernate.search.util.common.SearchException Unable to index entity of type '%2$s' with identifier '%3$s' and tenant identifier '%1$s': %4$s
HSEARCH600017 org.hibernate.search.util.common.SearchException Unable to delete entity of type '%2$s' with identifier '%3$s' and tenant identifier '%1$s': %4$s
HSEARCH600019 org.hibernate.search.util.common.SearchException Unable to commit: %1$s
HSEARCH600024 org.hibernate.search.util.common.SearchException Invalid multi-index scope: a scope cannot span both a Lucene index and another type of index. Base scope: '%1$s', incompatible (Lucene) index: '%2$s'.
HSEARCH600025 org.hibernate.search.util.common.SearchException Invalid multi-index scope: a scope cannot span multiple Lucene backends. Base scope: '%1$s', incompatible index (from another backend): '%2$s'.
HSEARCH600027 org.hibernate.search.util.common.SearchException Unable to execute search query '%1$s': %2$s
HSEARCH600030 org.hibernate.search.util.common.SearchException Invalid multi-tenancy strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH600031 org.hibernate.search.util.common.SearchException Invalid tenant identifiers: '%1$s'. No tenant identifier is expected, because multi-tenancy is disabled for this backend.
HSEARCH600032 org.hibernate.search.util.common.SearchException Missing tenant identifier. A tenant identifier is expected, because multi-tenancy is enabled for this backend.
HSEARCH600033 org.hibernate.search.util.common.SearchException Invalid requested type for this backend: '%1$s'. Lucene backends can only be unwrapped to '%2$s'.
HSEARCH600034 org.hibernate.search.util.common.SearchException Duplicate index field definition: '%1$s'. Index field names must be unique. Look for two property mappings with the same field name, or two indexed-embeddeds with prefixes that lead to conflicting index field names, or two custom bridges declaring index fields with the same name.
HSEARCH600039 org.hibernate.search.util.common.SearchException Invalid field reference for this document element: this document element has path '%1$s', but the referenced field has a parent with path '%2$s'.
HSEARCH600044 org.hibernate.search.util.common.SearchException Computed minimum for minimumShouldMatch constraint is out of bounds: expected a number between '1' and '%1$s', got '%2$s'.
HSEARCH600045 org.hibernate.search.util.common.SearchException Multiple conflicting minimumShouldMatch constraints for ceiling '%1$s'
HSEARCH600049 org.hibernate.search.util.common.SearchException Invalid field path; expected path '%1$s', got '%2$s'.
HSEARCH600050 org.hibernate.search.util.common.SearchException Unable to convert DSL argument: %1$s
HSEARCH600051 org.hibernate.search.util.common.SearchException Invalid requested type for this index manager: '%1$s'. Lucene index managers can only be unwrapped to '%2$s'.
HSEARCH600052 org.hibernate.search.util.common.SearchException Unable to create analyzer for name '%1$s': %2$s
HSEARCH600053 org.hibernate.search.util.common.SearchException Unable to create normalizer for name '%1$s': %2$s
HSEARCH600054 org.hibernate.search.util.common.SearchException Unknown normalizer: '%1$s'. Make sure you defined this normalizer.
HSEARCH600055 org.hibernate.search.util.common.SearchException Invalid search projection: '%1$s'. You must build the projection from a Lucene search scope.
HSEARCH600061 org.hibernate.search.util.common.SearchException Unable to shut down index: %1$s
HSEARCH600062 org.hibernate.search.util.common.SearchException No built-in index field type for class: '%1$s'.
HSEARCH600067 org.hibernate.search.util.common.SearchException Unable to delete all entries matching query '%1$s': %2$s
HSEARCH600070 org.hibernate.search.util.common.SearchException Full-text features (analysis, fuzziness) are not supported for fields of this type.
HSEARCH600071 org.hibernate.search.util.common.SearchException Incomplete field definition. You must call toReference() to complete the field definition.
HSEARCH600072 org.hibernate.search.util.common.SearchException Multiple calls to toReference() for the same field definition. You must call toReference() exactly once.
HSEARCH600073 org.hibernate.search.util.common.SearchException Invalid index field type: both null token '%2$s' ('indexNullAs') and analyzer '%1$s' are assigned to this type. 'indexNullAs' is not supported on analyzed fields.
HSEARCH600074 org.hibernate.search.util.common.SearchException Multiple values assigned to field '%1$s': this field is single-valued. Declare the field as multi-valued in order to allow this.
HSEARCH600075 org.hibernate.search.util.common.SearchException Invalid use of explain(Object id) on a query targeting multiple types. Use explain(String typeName, Object id) and pass one of %1$s as the type name.
HSEARCH600076 org.hibernate.search.util.common.SearchException Invalid mapped type name: '%2$s'. This type is not among the mapped types targeted by this query: %1$s.
HSEARCH600077 org.hibernate.search.util.common.SearchException Invalid document identifier: '%2$s'. No such document for type '%1$s'.
HSEARCH600078 org.hibernate.search.util.common.SearchException Unable to merge index segments: %1$s
HSEARCH600079 org.hibernate.search.util.common.SearchException Unable to close the index writer after write failures: %1$s
HSEARCH600080 org.hibernate.search.util.common.SearchException Invalid index field type: missing decimal scale. Define the decimal scale explicitly. %1$s
HSEARCH600081 org.hibernate.search.util.common.SearchException Unable to encode value '%1$s': this field type only supports values ranging from '%2$s' to '%3$s'. If you want to encode values that are outside this range, change the decimal scale for this field. Do not forget to reindex all your data after changing the decimal scale.
HSEARCH600082 org.hibernate.search.util.common.SearchException Invalid index field type: decimal scale '%1$s' is positive. The decimal scale of BigInteger fields must be zero or negative.
HSEARCH600084 org.hibernate.search.util.common.SearchException Invalid search predicate: '%1$s'. You must build the predicate from a scope targeting indexes %3$s, but the given predicate was built from a scope targeting indexes %2$s.
HSEARCH600085 org.hibernate.search.util.common.SearchException Invalid search sort: '%1$s'. You must build the sort from a scope targeting indexes %3$s, but the given sort was built from a scope targeting indexes %2$s.
HSEARCH600086 org.hibernate.search.util.common.SearchException Invalid search projection: '%1$s'. You must build the projection from a scope targeting indexes %3$s, but the given projection was built from a scope targeting indexes %2$s.
HSEARCH600087 org.hibernate.search.util.common.SearchException Invalid filesystem access strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH600088 org.hibernate.search.util.common.SearchException Invalid locking strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH600089 org.hibernate.search.util.common.SearchException Incorrect sharding strategy implementation: strategy '%1$s' did not declare any shard identifiers during initialization. Declare shard identifiers using context.shardIdentifiers(...) or, if sharding is disabled, call context.disableSharding().
HSEARCH600090 org.hibernate.search.util.common.SearchException When using sharding strategy '%1$s', this configuration property must be set.
HSEARCH600091 org.hibernate.search.util.common.SearchException Invalid routing key: '%1$s'. Valid keys are: %2$s.
HSEARCH600094 org.hibernate.search.util.common.SearchException Invalid index field type: both analyzer '%1$s' and aggregations are enabled. Aggregations are not supported on analyzed fields. If you need an analyzer simply to transform the text (lowercasing, ...) without splitting it into tokens, use a normalizer instead. If you need an actual analyzer (with tokenization), define two separate fields: one with an analyzer that is not aggregable, and one with a normalizer that is aggregable.
HSEARCH600098 org.hibernate.search.util.common.SearchException Invalid search aggregation: '%1$s'. You must build the aggregation from a Lucene search scope.
HSEARCH600099 org.hibernate.search.util.common.SearchException Invalid search aggregation: '%1$s'. You must build the aggregation from a scope targeting indexes %3$s, but the given aggregation was built from a scope targeting indexes %2$s.
HSEARCH600102 org.hibernate.search.util.common.SearchException Duplicate aggregation definitions for key: '%1$s'
HSEARCH600104 org.hibernate.search.util.common.SearchException Invalid index field type: search analyzer '%1$s' is assigned to this type, but the indexing analyzer is missing. Assign an indexing analyzer and a search analyzer, or remove the search analyzer.
HSEARCH600108 org.hibernate.search.util.common.SearchException Invalid I/O strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH600109 org.hibernate.search.util.common.SearchException Index does not exist for directory '%1$s'
HSEARCH600110 org.hibernate.search.util.common.SearchException Unable to validate index directory: %1$s
HSEARCH600111 org.hibernate.search.util.common.SearchException Unable to drop index directory: %1$s
HSEARCH600114 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for fields in nested documents.
HSEARCH600115 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for String fields. Only MIN and MAX are supported.
HSEARCH600116 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for temporal fields. Only MIN, MAX, AVG and MEDIAN are supported.
HSEARCH600117 org.hibernate.search.util.common.SearchException Invalid sort mode: %1$s. This sort mode is not supported for a distance sort. Only MIN, MAX, AVG and MEDIAN are supported.
HSEARCH600118 org.hibernate.search.util.common.SearchException A failure occurred during a low-level write operation and the index writer had to be reset. Some write operations may have been lost as a result. Failure: %1$s
HSEARCH600120 org.hibernate.search.util.common.SearchException Invalid sort filter: field '%1$s' is not contained in a nested object. Sort filters are only available if the field to sort on is contained in a nested object.
HSEARCH600121 org.hibernate.search.util.common.SearchException Invalid search predicate: %1$s. This predicate targets fields %3$s, but only fields that are contained in the nested object with path '%2$s' are allowed here.
HSEARCH600122 org.hibernate.search.util.common.SearchException Invalid aggregation filter: field '%1$s' is not contained in a nested object. Aggregation filters are only available if the field to aggregate on is contained in a nested object.
HSEARCH600123 org.hibernate.search.util.common.SearchException Invalid value for IndexWriter setting '%1$s': '%2$s'. %3$s
HSEARCH600124 org.hibernate.search.util.common.SearchException Invalid value for merge policy setting '%1$s': '%2$s'. %3$s
HSEARCH600125 org.hibernate.search.util.common.SearchException Duplicate index field template definition: '%1$s'. Multiple bridges may be trying to access the same index field template, or two indexed-embeddeds may have prefixes that lead to conflicting field names, or you may have declared multiple conflicting mappings. In any case, there is something wrong with your mapping and you should fix it.
HSEARCH600126 org.hibernate.search.util.common.SearchException Invalid value type. This field's values are of type '%1$s', which is not assignable from '%2$s'.
HSEARCH600127 org.hibernate.search.util.common.SearchException Unknown field '%1$s'.
HSEARCH600131 org.hibernate.search.util.common.SearchException Invalid cardinality for projection on field '%1$s': the projection is single-valued, but this field is multi-valued. Make sure to call '.multi()' when you create the projection.
HSEARCH600135 org.hibernate.search.util.common.SearchException Implementation class differs: '%1$s' vs. '%2$s'.
HSEARCH600136 org.hibernate.search.util.common.SearchException Field codec differs: '%1$s' vs. '%2$s'.
HSEARCH600138 WARN Using deprecated filesystem access strategy '%1$s', which will be removed in a future version of Lucene. %2$s
HSEARCH600141 org.hibernate.search.util.common.SearchException Unable to compute size of index: %1$s
HSEARCH600142 org.hibernate.search.util.common.SearchException Unable to create instance of analysis component '%1$s': %2$s
HSEARCH600143 org.hibernate.search.util.common.SearchException The index schema named predicate '%1$s' was added twice.
HSEARCH600144 org.hibernate.search.util.common.SearchException Predicate definition differs: '%1$s' vs. '%2$s'.
HSEARCH600146 org.hibernate.search.util.common.SearchException Unable to apply query caching configuration: %1$s
HSEARCH600148 org.hibernate.search.util.common.SearchException Invalid backend configuration: mapping requires multi-tenancy but no multi-tenancy strategy is set.
HSEARCH600149 org.hibernate.search.util.common.SearchException Invalid backend configuration: mapping requires single-tenancy but multi-tenancy strategy is set.
HSEARCH600150 org.hibernate.search.util.common.SearchException Param with name '%1$s' has not been defined for the named predicate '%2$s'.
HSEARCH600151 java.io.IOException Offset + limit should be lower than Integer.MAX_VALUE, offset: '%1$s', limit: '%2$s'.
HSEARCH600152 org.hibernate.search.util.common.SearchException Invalid context for projection on field '%1$s': the surrounding projection is executed for each object in field '%2$s', which is not a parent of field '%1$s'. Check the structure of your projections.
HSEARCH600153 org.hibernate.search.util.common.SearchException Invalid cardinality for projection on field '%1$s': the projection is single-valued, but this field is effectively multi-valued in this context, because parent object field '%2$s' is multi-valued. Either call '.multi()' when you create the projection on field '%1$s', or wrap that projection in an object projection like this: 'f.object("%2$s").from().as(...).multi()'.
HSEARCH600154 org.hibernate.search.util.common.SearchException Unable to start index: %1$s
HSEARCH600155 org.hibernate.search.util.common.SearchException Unexpected mapped type name extracted from hits: '%1$s'. Expected one of: %2$s. The document was probably indexed with a different configuration: full reindexing is necessary.
HSEARCH600156 org.hibernate.search.util.common.SearchException Nonblocking operation submitter is not supported.
HSEARCH600157 org.hibernate.search.util.common.SearchException Unable to export the schema for '%1$s' index: %2$s
HSEARCH600158 org.hibernate.search.util.common.SearchException Invalid highlighter: '%1$s'. You must build the highlighter from a Lucene search scope.
HSEARCH600159 org.hibernate.search.util.common.SearchException Invalid highlighter: '%1$s'. You must build the highlighter from a scope targeting indexes %3$s, but the given highlighter was built from a scope targeting indexes %2$s.
HSEARCH600160 org.hibernate.search.util.common.SearchException Overriding a '%2$s' highlighter with a '%1$s' is not supported. Overriding highlighters should be of the same type as the global is if the global highlighter was configured.
HSEARCH600161 org.hibernate.search.util.common.SearchException Cannot find a highlighter with name '%1$s'. Available highlighters are: %2$s. Was it configured with `highlighter("%1$s", highlighterContributor)`?
HSEARCH600162 org.hibernate.search.util.common.SearchException '%1$s' highlighter does not support '%2$s' boundary scanner type.
HSEARCH600163 org.hibernate.search.util.common.SearchException Named highlighters cannot use a blank string as name.
HSEARCH600164 org.hibernate.search.util.common.SearchException Highlighter with name '%1$s' is already defined. Use a different name to add another highlighter.
HSEARCH600165 org.hibernate.search.util.common.SearchException '%1$s' highlighter type cannot be applied to '%2$s' field. '%2$s' must have either 'ANY' or '%1$s' among the configured highlightable values.
HSEARCH600166 org.hibernate.search.util.common.SearchException Cannot use 'NO' in combination with other highlightable values. Applied values are: '%1$s'
HSEARCH600167 org.hibernate.search.util.common.SearchException The '%1$s' term vector storage strategy is not compatible with the fast vector highlighter. Either change the strategy to one of `WITH_POSITIONS_PAYLOADS`/`WITH_POSITIONS_OFFSETS_PAYLOADS` or remove the requirement for the fast vector highlighter support.
HSEARCH600168 org.hibernate.search.util.common.SearchException Setting the `highlightable` attribute to an empty array is not supported. Set the value to `NO` if the field does not require the highlight projection.
HSEARCH600169 WARN Lucene's unified highlighter cannot limit the size of a fragment returned when no match is found. Instead if no match size was set to any positive integer - all text will be returned. Configured value '%1$s' will be ignored, and the fragment will not be limited. If you don't want to see this warning set the value to Integer.MAX_VALUE.
HSEARCH600170 org.hibernate.search.util.common.SearchException Lucene's unified highlighter does not support the size fragment setting. Either use a plain or fast vector highlighters, or do not set this setting.
HSEARCH600171 org.hibernate.search.util.common.SearchException Highlight projection cannot be applied within nested context of '%1$s'.
HSEARCH600172 org.hibernate.search.util.common.SearchException The highlight projection cannot be applied to a field from an object using `ObjectStructure.NESTED` structure.
HSEARCH600173 org.hibernate.search.util.common.SearchException '%1$s' cannot be nested in an object projection. %2$s
HSEARCH600174 org.hibernate.search.util.common.SearchException Invalid Lucene schema ID strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH700001 org.hibernate.search.util.common.SearchException No default identifier bridge implementation for type '%1$s'. Implement a custom bridge and assign it to the identifier property with @DocumentId(identifierBridge = ...). See the reference documentation for more information about bridges.
HSEARCH700003 org.hibernate.search.util.common.SearchException Empty binder reference.
HSEARCH700005 org.hibernate.search.util.common.SearchException Ambiguous value bridge reference: both 'valueBridge' and 'valueBinder' are set. Only one can be set.
HSEARCH700006 org.hibernate.search.util.common.SearchException Ambiguous identifier bridge reference: both 'identifierBridge' and 'identifierBinder' are set. Only one can be set.
HSEARCH700007 org.hibernate.search.util.common.SearchException Empty scope. If you want to target all indexes, pass 'Object.class' as the target type.
HSEARCH700010 org.hibernate.search.util.common.SearchException Invalid bridge for input type '%2$s': '%1$s'. This bridge expects an input of type '%3$s'.
HSEARCH700011 org.hibernate.search.util.common.SearchException Missing field name for @GeoPointBinding on type %1$s. The field name is mandatory when the bridge is applied to a type, optional when applied to a property.
HSEARCH700015 org.hibernate.search.util.common.SearchException Unable to interpret the type arguments to the ContainerExtractor interface in implementation '%1$s'. Only the following implementations of ContainerExtractor are valid: 1) implementations setting both type parameters to *raw* types, e.g. class MyExtractor implements ContainerExtractor; 2) implementations setting the first type parameter to an array of an unbounded type variable, and setting the second parameter to the same type variable, e.g. MyExtractor implements ContainerExtractor 3) implementations setting the first type parameter to a parameterized type with one argument set to an unbounded type variable and the other to unbounded wildcards, and setting the second type parameter to the same type variable, e.g. MyExtractor implements ContainerExtractor, T>
HSEARCH700016 org.hibernate.search.util.common.SearchException Invalid container extractor for type '%3$s': '%1$s' (implementation class: '%2$s')
HSEARCH700017 DEBUG Type manager for indexed type '%1$s': %2$s
HSEARCH700018 DEBUG Detected entity types: %1$s, indexed types: %2$s, initial mapped types: %3$s.
HSEARCH700019 DEBUG Type manager for contained type '%1$s': %2$s
HSEARCH700020 org.hibernate.search.util.common.SearchException Unable to find the inverse side of the association on type '%2$s' at path '%3$s'. Hibernate Search needs this information in order to reindex '%2$s' when '%1$s' is modified. You can solve this error by defining the inverse side of this association, either with annotations specific to your integration (@OneToMany(mappedBy = ...) in Hibernate ORM) or with the Hibernate Search @AssociationInverseSide annotation. Alternatively, if you do not need to reindex '%2$s' when '%1$s' is modified, you can disable automatic reindexing with @IndexingDependency(reindexOnUpdate = ReindexOnUpdate.SHALLOW).
HSEARCH700021 org.hibernate.search.util.common.SearchException Unable to apply path '%2$s' to type '%1$s'. This path was resolved as the inverse side of the association '%4$s' on type '%3$s'. Hibernate Search needs to apply this path in order to reindex '%3$s' when '%1$s' is modified. Nested exception: %5$s
HSEARCH700022 org.hibernate.search.util.common.SearchException The inverse association targets type '%1$s', but a supertype or subtype of '%2$s' was expected.
HSEARCH700023 org.hibernate.search.util.common.SearchException @AssociationInverseSide.inversePath is empty.
HSEARCH700027 org.hibernate.search.util.common.SearchException Unable to index type '%1$s': this type is not an entity type. If you only expect subtypes to be instantiated, make this type abstract. If you expect this exact type to be instantiated and want it to be indexed, make it an entity type. Otherwise, ensure this type and its subtypes are never indexed by removing the @Indexed annotation or by annotating the type with @Indexed(enabled = false).
HSEARCH700029 org.hibernate.search.util.common.SearchException @IndexingDependency.derivedFrom contains an empty path.
HSEARCH700030 org.hibernate.search.util.common.SearchException Unable to resolve dependencies of a derived property: there is a cyclic dependency starting from type '%1$s'. Derivation chain starting from that type and ending with a cycle:%2$s A derived property cannot be marked as derived from itself, even indirectly through other derived properties. If your model actually contains such cyclic dependency, you should consider disabling automatic reindexing, at least partially using @IndexingDependency(reindexOnUpdate = ReindexOnUpdate.NO) on one of the properties in the cycle.
HSEARCH700031 org.hibernate.search.util.common.SearchException Unable to apply property mapping: this property mapping must target an index field of standard String type, but the resolved field type is non-standard or non-String. This generally means you need to use a different field annotation or to convert property values using a custom ValueBridge or ValueBinder. If you are already using a custom ValueBridge or ValueBinder, check its field type. Details: encountered type DSL step '%1$s', which does not extend the expected interface '%2$s'.
HSEARCH700037 org.hibernate.search.util.common.SearchException No matching entity type for type identifier '%1$s'. Either this type is not an entity type, or the entity type is not mapped in Hibernate Search. Valid identifiers for mapped entity types are: %2$s
HSEARCH700038 org.hibernate.search.util.common.SearchException The entity identifier must not be null.
HSEARCH700039 org.hibernate.search.util.common.SearchException '%1$s' cannot be assigned to '%2$s'
HSEARCH700040 org.hibernate.search.util.common.SearchException No matching indexed entity type for type identifier '%1$s'. Either this type is not an entity type, or the entity type is not indexed in Hibernate Search. Valid identifiers for indexed entity types are: %2$s
HSEARCH700041 org.hibernate.search.util.common.SearchException Invalid reference to default extractors: a chain of multiple container extractors must not include the default extractors. Either use only the default extractors, or explicitly reference every single extractor to be applied.
HSEARCH700042 org.hibernate.search.util.common.SearchException %1$s failure(s) occurred during mass indexing. See the logs for details. First failure: %2$s
HSEARCH700043 org.hibernate.search.util.common.SearchException Exception creating URL from String '%1$s'.
HSEARCH700044 org.hibernate.search.util.common.SearchException Exception creating URI from String '%1$s'.
HSEARCH700045 org.hibernate.search.util.common.SearchException A PojoModelPath must include at least one property.
HSEARCH700046 org.hibernate.search.util.common.SearchException Unable to apply path '%2$s' to type '%1$s'. This path was declared as a path to collect entities of type '%3$s' to be reindexed. Hibernate Search needs to apply this path in order to reindex '%3$s' when '%1$s' is modified. Nested exception: %4$s
HSEARCH700047 org.hibernate.search.util.common.SearchException Invalid use of 'fromOtherEntity': this method can only be used when the bridged element has an entity type, but the bridged element has type '%1$s', which is not an entity type.
HSEARCH700048 org.hibernate.search.util.common.SearchException Invalid type passed to 'fromOtherEntity': the type must be an entity type. Type '%1$s' is not an entity type.
HSEARCH700049 org.hibernate.search.util.common.SearchException Incorrect binder implementation: the binder did not declare any dependency to the entity model during binding. Declare dependencies using context.dependencies().use(...) or, if the bridge really does not depend on the entity model, context.dependencies().useRootOnly().
HSEARCH700050 org.hibernate.search.util.common.SearchException Incorrect binder implementation: the binder called context.dependencies().useRootOnly() during binding, but also declared extra dependencies to the entity model.
HSEARCH700051 org.hibernate.search.util.common.SearchException Unable to apply property mapping: this property mapping must target an index field of standard, scaled-number type (BigDecimal or BigInteger), but the resolved field type is non-standard or non-scaled. This generally means you need to use a different field annotation or to convert property values using a custom ValueBridge or ValueBinder. If you are already using a custom ValueBridge or ValueBinder, check its field type. Details: encountered type DSL step '%1$s', which does not extend the expected interface '%2$s'.
HSEARCH700052 org.hibernate.search.util.common.SearchException Unexpected extractor references: extractors cannot be defined explicitly when extract = ContainerExtract.NO. Either leave 'extract' to its default value to define extractors explicitly or leave the 'extractor' list to its default, empty value to disable extraction.
HSEARCH700053 org.hibernate.search.util.common.SearchException No container extractor with name '%1$s'. Check that this name matches a container extractor, either a builtin one whose name is a constant in '%2$s' or a custom one that was properly registered.
HSEARCH700058 org.hibernate.search.util.common.SearchException Incorrect binder implementation: binder '%1$s' did not call context.bridge(...).
HSEARCH700059 org.hibernate.search.util.common.SearchException Incorrect binder implementation: binder '%1$s' did not call context.marker(...).
HSEARCH700060 org.hibernate.search.util.common.SearchException Unable to trigger entity processing while already processing entities. Make sure you do not change entities within an entity getter or a custom bridge used for indexing, and avoid any event that could trigger entity processing. Hibernate ORM flushes, in particular, must be avoided in entity getters and bridges.
HSEARCH700061 org.hibernate.search.util.common.SearchException Unable to index-embed type '%1$s': no index mapping (@GenericField, @FullTextField, custom bridges, ...) is defined for that type.
HSEARCH700064 org.hibernate.search.util.common.SearchException Multiple entity names assigned to the same type: '%1$s', '%2$s'.
HSEARCH700065 org.hibernate.search.util.common.SearchException Unable to apply property mapping: this property mapping must target an index field of standard type, but the resolved field type is non-standard. This generally means you need to use a different field annotation or to convert property values using a custom ValueBridge or ValueBinder. If you are already using a custom ValueBridge or ValueBinder, check its field type. Details: encountered type DSL step '%1$s', which does not extend the expected interface '%2$s'.
HSEARCH700066 org.hibernate.search.util.common.SearchException Unable to apply property mapping: this property mapping must target an index field of non-standard type, but the resolved field type is standard. Switch to a standard field annotation such as @GenericField. Details: encountered type DSL step '%1$s', which does extend the interface '%2$s'.
HSEARCH700067 org.hibernate.search.util.common.SearchException Invalid annotation processor: '%1$s'. This processor expects annotations of a different type: '%2$s'.
HSEARCH700068 org.hibernate.search.util.common.SearchException Empty annotation processor reference in meta-annotation '%1$s'.
HSEARCH700069 org.hibernate.search.util.common.SearchException Ambiguous @IndexedEmbedded name: both 'name' and 'prefix' are set. Only one can be set. Name is '%1$s', prefix is '%2$s'.
HSEARCH700070 org.hibernate.search.util.common.SearchException Invalid index field name '%1$s': field names cannot contain a dot ('.').
HSEARCH700071 org.hibernate.search.util.common.SearchException No property annotated with @Alternative(id = %1$s). There must be exactly one such property in order to map property '%2$s' to multi-alternative fields.
HSEARCH700072 org.hibernate.search.util.common.SearchException Multiple properties annotated with @Alternative(id = %1$s). There must be exactly one such property in order to map property '%2$s' to multi-alternative fields.
HSEARCH700073 org.hibernate.search.util.common.SearchException Invalid routing bridge for entity type '%2$s': '%1$s' This bridge expects an entity type extending '%3$s'.
HSEARCH700075 org.hibernate.search.util.common.SearchException Incorrect routing bridge implementation: routing bridge '%1$s' did not define any current route. In the implementation of RoutingBridge.route(...), define exactly one current route by calling 'routes.addRoute()', or explicitly indicate indexing is not required by calling 'routes.notIndexed()'.
HSEARCH700076 org.hibernate.search.util.common.SearchException Incorrect routing bridge implementation: routing bridge '%1$s' defined multiple current routes. In the implementation of RoutingBridge.route(...), define at most one current route by calling 'routes.addRoute()' at most once.
HSEARCH700077 org.hibernate.search.util.common.SearchException Incorrect routing bridge implementation: routing bridge '%1$s' did not define any previous route. In the implementation of RoutingBridge.previousRoutes(...), define at least one previous route by calling 'routes.addRoute()' at least once, or explicitly indicate no prior indexing was performed by calling 'routes.notIndexed()'.
HSEARCH700078 org.hibernate.search.util.common.SearchException No readable property named '%2$s' on type '%1$s'.
HSEARCH700079 org.hibernate.search.util.common.SearchException Exception while retrieving property type model for '%1$s' on '%2$s'.
HSEARCH700080 org.hibernate.search.util.common.SearchException Unable to infer index field type for value bridge '%1$s': this bridge implements ValueBridge, but sets the generic type parameter F to '%2$s'. The index field type can only be inferred automatically when this type parameter is set to a raw class. Use a ValueBinder to set the index field type explicitly, or set the type parameter F to a definite, raw type.
HSEARCH700081 org.hibernate.search.util.common.SearchException Unable to infer expected identifier type for identifier bridge '%1$s': this bridge implements IdentifierBridge, but sets the generic type parameter I to '%2$s'. The expected identifier type can only be inferred automatically when this type parameter is set to a raw class. Use an IdentifierBinder to set the expected identifier type explicitly, or set the type parameter I to a definite, raw type.
HSEARCH700082 org.hibernate.search.util.common.SearchException Unable to infer expected value type for value bridge '%1$s': this bridge implements ValueBridge, but sets the generic type parameter V to '%2$s'. The expected value type can only be inferred automatically when this type parameter is set to a raw class. Use a ValueBinder to set the expected value type explicitly, or set the type parameter V to a definite, raw type.
HSEARCH700083 org.hibernate.search.util.common.SearchException Exception while building document for entity '%1$s': %2$s
HSEARCH700084 org.hibernate.search.util.common.SearchException Exception while resolving other entities to reindex as a result of changes on entity '%1$s': %2$s
HSEARCH700085 WARN Multiple getters exist for property named '%2$s' on type '%1$s'. Hibernate Search will use '%3$s' and ignore %4$s. The selected getter may change from one startup to the next. To get rid of this warning, either remove the extra getters or configure the access type for this property to 'FIELD'.
HSEARCH700086 org.hibernate.search.util.common.SearchException Unexpected entity name for entity loading: '%1$s'. Expected one of %2$s.
HSEARCH700087 org.hibernate.search.util.common.SearchException Invalid indexing request: if the entity is null, the identifier must be provided explicitly.
HSEARCH700088 org.hibernate.search.util.common.SearchException Invalid indexing request: the add and update operations require a non-null entity.
HSEARCH700089 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. Either this is not the name of an entity type, or the entity type is not mapped in Hibernate Search. Valid names for mapped entity types are: %2$s
HSEARCH700090 org.hibernate.search.util.common.SearchException The required identifier type '%1$s' does not match the actual identifier type '%2$s': the required identifier must be a superclass of the actual identifier.
HSEARCH700101 org.hibernate.search.util.common.SearchException %1$s failure(s) occurred during mass indexing. See the logs for details. First failure on entity '%2$s': %3$s
HSEARCH700102 ERROR The mass indexing failure handler threw an exception while handling a previous failure. The failure may not have been reported.
HSEARCH700103 org.hibernate.search.util.common.SearchException Mass indexing received interrupt signal. The index is left in an unknown state!
HSEARCH700104 org.hibernate.search.util.common.SearchException Param with name '%1$s' has not been defined for the binder.
HSEARCH700105 org.hibernate.search.util.common.SearchException Cannot work with the identifier of entities of type '%1$s': identifier mapping (@DocumentId, ...) is not configured for this type.
HSEARCH700107 org.hibernate.search.util.common.SearchException No main constructor for type '%1$s': this type does not declare exactly one constructor.
HSEARCH700109 org.hibernate.search.util.common.SearchException No constructor with parameter types %2$s on type '%1$s'. Available constructors: %3$s
HSEARCH700110 org.hibernate.search.util.common.SearchException Exception while retrieving parameter type model for parameter #%1$s of '%2$s'.
HSEARCH700111 org.hibernate.search.util.common.SearchException Exception while retrieving constructor handle for '%1$s' on '%2$s'.
HSEARCH700112 org.hibernate.search.util.common.SearchException Invalid object class for projection: %1$s. Make sure that this class is mapped correctly, either through annotations (@ProjectionConstructor) or programmatic mapping. If it is, make sure the class is included in a Jandex index made available to Hibernate Search.
HSEARCH700113 org.hibernate.search.util.common.SearchException Invalid declaring type for projection constructor: type '%1$s' is abstract. Projection constructors can only be declared on concrete types.
HSEARCH700114 org.hibernate.search.util.common.SearchException Missing parameter names in Java metadata for projection constructor. When inferring inner projections from constructor parameters, constructor parameter names must be known. Either make sure this class was compiled with the '-parameters' compiler flag, or set the path explicitly with '@FieldProjection(path = ...)' or '@ObjectProjection(path = ...)'.
HSEARCH700115 org.hibernate.search.util.common.SearchException Invalid parameter type for projection constructor: %1$s. When inferring the cardinality of inner projections from constructor parameters, multi-valued constructor parameters must be lists (java.util.List<...>) or list supertypes (java.lang.Iterable<...>, java.util.Collection<...>)
HSEARCH700116 org.hibernate.search.util.common.SearchException Multiple projection constructor are mapped for type '%1$s'. At most one projection constructor is allowed for each type.
HSEARCH700117 DEBUG Constructor projection for type '%1$s': %2$s
HSEARCH700118 org.hibernate.search.util.common.SearchException Cyclic recursion starting from '%1$s' on %2$s. Index field path starting from that location and ending with a cycle: '%3$s'. A projection constructor cannot declare an unrestricted @ObjectProjection to itself, even indirectly. To break the cycle, you should consider adding filters to your @ObjectProjection: includePaths, includeDepth, excludePaths, ...
HSEARCH700119 org.hibernate.search.util.common.SearchException Exception while retrieving the Jandex index for code source location '%1$s': %2$s
HSEARCH700120 WARN Both "dropAndCreateSchemaOnStart()" and "purgeAllOnStart()" are enabled. Consider having just one setting enabled as after the index is recreated there is nothing to purge.
HSEARCH700121 org.hibernate.search.util.common.SearchException Invalid ObjectPath encountered '%1$s': %2$s
HSEARCH700122 WARN An unexpected failure occurred while configuring resolution of association inverse side for reindexing. This may lead to incomplete reindexing and thus out-of-sync indexes. The exception is being ignored to preserve backwards compatibility with earlier versions of Hibernate Search. Failure: %3$s %2$s Association inverse side: %1$s.
HSEARCH700123 org.hibernate.search.mapper.pojo.search.definition.impl.ConstructorProjectionApplicationException Could not apply projection constructor: %1$s
HSEARCH700124 org.hibernate.search.util.common.SearchException Indexing failure: %1$s. The following entities may not have been updated correctly in the index: %2$s.
HSEARCH700125 org.hibernate.search.util.common.SearchException %1$s failures went unreported for this operation to avoid flooding. To disable flooding protection, use 'massIndexer.failureFloodingThreshold(Long.MAX_VALUE)'.
HSEARCH700126 org.hibernate.search.util.common.SearchException Target path '%1$s' already exists and is not an empty directory. Use a path to an empty or non-existing directory.
HSEARCH700127 org.hibernate.search.util.common.SearchException Unable to export the schema: %1$s
HSEARCH700128 org.hibernate.search.util.common.SearchException Indexing plan for '%1$s' cannot be created as this type is excluded by the indexing plan filter.
HSEARCH700129 org.hibernate.search.util.common.SearchException '%1$s' cannot be included and excluded at the same time within one filter. Already included types: '%2$s'. Already excluded types: '%3$s'.
HSEARCH700130 org.hibernate.search.util.common.SearchException No matching entity type for class '%1$s'. This class is neither an entity type mapped in Hibernate Search nor a superclass of such entity type. Note interfaces are not considered superclasses and are not permitted here. Valid classes are: %2$s
HSEARCH700131 org.hibernate.search.util.common.SearchException No matching entity type for the name '%1$s'. This name represents neither an entity type mapped in Hibernate Search nor a superclass of such entity type. Valid entity type names are: %2$s
HSEARCH700132 org.hibernate.search.util.common.SearchException No matching supertype type for type identifier '%1$s'. Valid identifiers for indexed entity types are: %2$s
HSEARCH700133 org.hibernate.search.util.common.SearchException No parameter at index '%2$s' for constructor '%1$s'.
HSEARCH700134 org.hibernate.search.util.common.SearchException Multiple projections are mapped for this parameter. At most one projection is allowed for each parameter.
HSEARCH700135 org.hibernate.search.util.common.SearchException Incorrect binder implementation: binder '%1$s' did not call context.definition(...).
HSEARCH700136 org.hibernate.search.util.common.SearchException Invalid projection definition for constructor parameter type '%2$s': '%1$s'. This projection results in values of type '%3$s'.
HSEARCH700137 org.hibernate.search.util.common.SearchException Invalid multi-valued projection definition for constructor parameter type '%2$s': '%1$s'. This projection results in values of type '%3$s'.
HSEARCH700138 org.hibernate.search.util.common.SearchException Missing parameter names in Java metadata for projection constructor. When mapping a projection constructor parameter to a field projection without providing a field path, constructor parameter names must be known. Either make sure this class was compiled with the '-parameters' compiler flag, or set the path explicitly with '@FieldProjection(path = ...)'.
HSEARCH700139 org.hibernate.search.util.common.SearchException Missing parameter names in Java metadata for projection constructor. When mapping a projection constructor parameter to an object projection without providing a field path, constructor parameter names must be known. Either make sure this class was compiled with the '-parameters' compiler flag, or set the path explicitly with '@ObjectProjection(path = ...)'.
HSEARCH700140 org.hibernate.search.util.common.SearchException Missing parameter names in Java metadata for projection constructor. When mapping a projection constructor parameter to a highlight projection without providing a field path, constructor parameter names must be known. Either make sure this class was compiled with the '-parameters' compiler flag, or set the path explicitly with '@HighlightProjection(path = ...)'.
HSEARCH700141 org.hibernate.search.util.common.SearchException Invalid constructor parameter type: '%1$s'. The highlight projection results in values of type 'List'.
HSEARCH700142 org.hibernate.search.util.common.SearchException %1$s defines excludePaths filters that do not match anything. Non-matching excludePaths filters: %2$s. Encountered field paths: %3$s. Check the filters for typos, or remove them if they are not useful.
HSEARCH800001 org.hibernate.search.util.common.SearchException Hibernate Search was not initialized.
HSEARCH800003 org.hibernate.search.util.common.SearchException Invalid automatic indexing strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH800007 org.hibernate.search.util.common.SearchException Unable to resolve path '%1$s' to a persisted attribute in Hibernate ORM metadata. If this path points to a transient attribute, use @IndexingDependency(derivedFrom = ...) to specify which persisted attributes it is derived from. See the reference documentation for more information.
HSEARCH800008 org.hibernate.search.util.common.SearchException Path '%1$s' points to attribute '%2$s' that will never be reported as dirty by Hibernate ORM. Check that you didn't declare an invalid indexing dependency.
HSEARCH800009 org.hibernate.search.util.common.SearchException Unable to apply container value extractor with name '%2$s' to Hibernate ORM metadata node of type '%1$s'.
HSEARCH800011 org.hibernate.search.util.common.SearchException Unable to create a SearchSession for sessions created using a different session factory. Expected: '%1$s'. In use: '%2$s'.
HSEARCH800012 org.hibernate.search.util.common.SearchException Unable to retrieve property type model for '%1$s' on '%2$s': %3$s
HSEARCH800016 org.hibernate.search.util.common.SearchException Unable to access Hibernate ORM session: %1$s
HSEARCH800017 org.hibernate.search.util.common.SearchException Underlying Hibernate ORM Session is closed.
HSEARCH800018 org.hibernate.search.util.common.SearchException Invalid entity loading cache lookup strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH800019 DEBUG The entity loader for '%1$s' is ignoring the cache lookup strategy '%2$s', because document IDs are distinct from entity IDs and thus cannot be used for persistence context or second level cache lookups.
HSEARCH800020 DEBUG The entity loader for '%1$s' is ignoring the second-level cache even though it was instructed to use it, because caching is not enabled for this entity type.
HSEARCH800021 org.hibernate.search.util.common.SearchException Unable to access Hibernate ORM session factory: %1$s
HSEARCH800022 org.hibernate.search.util.common.SearchException Indexing failure: %1$s. The following entities may not have been updated correctly in the index: %2$s.
HSEARCH800023 org.hibernate.search.util.common.SearchException Unable to process entities for indexing before transaction completion: %1$s
HSEARCH800024 org.hibernate.search.util.common.SearchException Unable to index documents for indexing after transaction completion: %1$s
HSEARCH800025 org.hibernate.search.util.common.SearchException Unable to handle transaction: %1$s
HSEARCH800027 org.hibernate.search.util.common.SearchException Unknown type: '%1$s'. Available named types: %2$s. For entity types, the correct type name is the entity name. For component types (embeddeds, ...) in dynamic-map entities, the correct type name is name of the owner entity followed by a dot ('.') followed by the dot-separated path to the component, e.g. 'MyEntity.myEmbedded' or 'MyEntity.myEmbedded.myNestedEmbedded'.
HSEARCH800028 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. This is not the name of a Hibernate ORM entity type. Valid names for Hibernate ORM entity types are: %2$s
HSEARCH800029 org.hibernate.search.util.common.SearchException Invalid type for '%1$s': the entity type must extend '%2$s', but entity type '%3$s' does not.
HSEARCH800032 org.hibernate.search.util.common.SearchException Invalid schema management strategy name: '%1$s'. Valid names are: %2$s.
HSEARCH800033 org.hibernate.search.util.common.SearchException No matching indexed entity type for class '%1$s'. Either this class is not an entity type, or the entity type is not indexed in Hibernate Search. Valid classes for indexed entity types are: %2$s
HSEARCH800034 org.hibernate.search.util.common.SearchException No matching indexed entity type for name '%1$s'. Either this is not the name of an entity type, or the entity type is not indexed in Hibernate Search. Valid names for indexed entity types are: %2$s
HSEARCH800035 ERROR Unable to shut down Hibernate Search: %1$s
HSEARCH800036 org.hibernate.search.util.common.SearchException Cannot use scroll() with scroll mode '%1$s' with Hibernate Search queries: only ScrollMode.FORWARDS_ONLY is supported.
HSEARCH800037 org.hibernate.search.util.common.SearchException Cannot scroll backwards with Hibernate Search scrolls: they are forwards-only. Ensure you always increment the scroll position, and never decrement it.
HSEARCH800038 org.hibernate.search.util.common.SearchException Cannot set the scroll position relative to the end with Hibernate Search scrolls. Ensure you always pass a positive number to setRowNumber().
HSEARCH800039 org.hibernate.search.util.common.SearchException Cannot use this ScrollableResults instance: it is closed.
HSEARCH800040 org.hibernate.search.util.common.SearchException Multiple instances of entity type '%1$s' have their property '%2$s' set to '%3$s'. '%2$s' is the document ID and must be assigned unique values.
HSEARCH800041 org.hibernate.search.engine.environment.bean.spi.BeanNotFoundException No such bean in bean container '%1$s'.
HSEARCH800042 org.hibernate.search.util.common.SearchException Cannot customize the indexing plan synchronization strategy: the selected coordination strategy always processes events asynchronously, through a queue.
HSEARCH800053 WARN Configuration property '%1$s' is deprecated; use '%2$s' instead.
HSEARCH800054 org.hibernate.search.util.common.SearchException Cannot determine the set of all possible tenant identifiers. You must provide this information by setting configuration property '%1$s' to a comma-separated string containing all possible tenant identifiers.
HSEARCH800055 org.hibernate.search.util.common.SearchException Cannot target tenant '%1$s' because this tenant identifier was not listed in the configuration provided on startup. To target this tenant, you must provide the tenant identifier through configuration property '%3$s', which should be set to a comma-separated string containing all possible tenant identifiers. Currently configured tenant identifiers: %2$s.
HSEARCH800056 INFO Ignoring unrecognized query hint [%s]
HSEARCH800057 org.hibernate.search.util.common.SearchException Cannot set the fetch size of Hibernate Search ScrollableResults after having created them. If you want to define the size of batches for entity loading, set loading options when defining the query instead, for example with .loading(o -> o.fetchSize(50)). See the reference documentation for more information.
HSEARCH800058 org.hibernate.search.util.common.SearchException No matching entity type for type identifier '%1$s'. Either this type is not an entity type, or the entity type is not mapped in Hibernate Search. Valid identifiers for mapped entity types are: %2$s
HSEARCH800059 org.hibernate.search.util.common.SearchException No matching indexed entity type for type identifier '%1$s'. Either this type is not an entity type, or the entity type is not indexed in Hibernate Search. Valid identifiers for indexed entity types are: %2$s
HSEARCH800060 org.hibernate.search.util.common.SearchException No matching entity type for class '%1$s'. Either this class is not an entity type, or the entity type is not mapped in Hibernate Search. Valid classes for mapped entity types are: %2$s
HSEARCH800061 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. Either this is not the name of an entity type, or the entity type is not mapped in Hibernate Search. Valid names for mapped entity types are: %2$s
HSEARCH800062 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. Either this is not the JPA name of an entity type, or the entity type is not mapped in Hibernate Search. Valid JPA names for mapped entities are: %2$s
HSEARCH800063 org.hibernate.search.util.common.SearchException No matching indexed entity type for name '%1$s'. Either this is not the JPA name of an entity type, or the entity type is not indexed in Hibernate Search. Valid JPA names for indexed entities are: %2$s
HSEARCH800064 org.hibernate.search.util.common.SearchException No matching entity type for name '%1$s'. Either this is not the Hibernate ORM name of an entity type, or the entity type is not mapped in Hibernate Search. Valid Hibernate ORM names for mapped entities are: %2$s
HSEARCH800121 WARN An unexpected failure occurred while resolving the representation of path '%1$s' in the entity state array, which is necessary to configure resolution of association inverse side for reindexing. This may lead to incomplete reindexing and thus out-of-sync indexes. The exception is being ignored to preserve backwards compatibility with earlier versions of Hibernate Search. Failure: %3$s %2$s
HSEARCH800122 org.hibernate.search.util.common.SearchException Both '%1$s' and '%2$s' are configured. Use only '%1$s' to set the indexing plan synchronization strategy.
HSEARCH800123 WARN Configuration property '%1$s' is deprecated; use '%2$s' instead.
HSEARCH800124 org.hibernate.search.util.common.SearchException Unable to apply the given filter at the session level with the outbox polling coordination strategy. With this coordination strategy, applying a session-level indexing plan filter is only allowed if it excludes all types.
HSEARCH800125 WARN Configuration property '%1$s' is deprecated. This setting will be removed in a future version. There will be no alternative provided to replace it. A dirty check will always be performed when considering triggering the reindexing.
HSEARCH800126 org.hibernate.search.util.common.SearchException Both '%1$s' and '%2$s' are configured. Use only '%2$s' to enable indexing listeners.
HSEARCH900000 java.lang.IllegalArgumentException '%1$s' must not be null.
HSEARCH900001 java.lang.IllegalArgumentException '%1$s' must not be null or empty.
HSEARCH900002 java.lang.IllegalArgumentException '%1$s' must be positive or zero.
HSEARCH900003 java.lang.IllegalArgumentException '%1$s' must not be null or empty.
HSEARCH900004 java.lang.IllegalArgumentException '%1$s' must not be null or empty.
HSEARCH900005 org.hibernate.search.util.common.SearchException Exception while invoking '%1$s' on '%2$s': %3$s.
HSEARCH900006 java.lang.IllegalArgumentException Requested type argument %3$s to type %2$s in implementing type %1$s, but %2$s doesn't declare any type parameter.
HSEARCH900007 java.lang.IllegalArgumentException Requested type argument %3$s to type %2$s in implementing type %1$s, but %2$s only declares %4$s type parameter(s).
HSEARCH900008 java.lang.IllegalArgumentException Requested type argument index %3$s to type %2$s in implementing type %1$s should be 0 or greater.
HSEARCH900009 INFO Unable to access the value of containing annotation '%1$s'. Ignoring annotation.
HSEARCH900010 java.lang.IllegalArgumentException '%1$s' must be strictly positive.
HSEARCH900011 java.lang.IllegalArgumentException '%1$s' must not contain any null element.
HSEARCH900012 org.hibernate.search.util.common.SearchException Exception while invoking '%1$s' with arguments %2$s: %3$s
HSEARCH900013 org.hibernate.search.util.common.SearchException Exception while accessing Jandex index for '%1$s': %2$s
HSEARCH900014 org.hibernate.search.util.common.SearchException Exception while building Jandex index for '%1$s': %2$s
HSEARCH900015 java.lang.IllegalArgumentException Property name '%1$s' cannot contain dots.
HSEARCH900016 java.io.IOException Cannot open filesystem for code source at '%1$s': %2$s
HSEARCH900017 java.io.IOException Cannot interpret '%1$s' as a local directory or JAR.
HSEARCH900018 java.io.IOException Cannot open a ZIP filesystem for code source at '%1$s', because the URI points to content inside a nested JAR.

HV

Code Level Return Type Message
HV000001 INFO Hibernate Validator %s
HV000002 DEBUG Ignoring XML configuration.
HV000003 DEBUG Using %s as constraint validator factory.
HV000004 DEBUG Using %s as message interpolator.
HV000005 DEBUG Using %s as traversable resolver.
HV000006 DEBUG Using %s as validation provider.
HV000007 DEBUG %s found. Parsing XML based configuration.
HV000008 WARN Unable to close input stream.
HV000010 WARN Unable to close input stream for %s.
HV000011 WARN Unable to create schema for %1$s: %2$s
HV000012 jakarta.validation.ValidationException Unable to create annotation for configured constraint
HV000013 jakarta.validation.ValidationException The class %1$s does not have a property '%2$s' with access %3$s.
HV000016 java.lang.IllegalArgumentException %s does not represent a valid BigDecimal format.
HV000017 java.lang.IllegalArgumentException The length of the integer part cannot be negative.
HV000018 java.lang.IllegalArgumentException The length of the fraction part cannot be negative.
HV000019 java.lang.IllegalArgumentException The min parameter cannot be negative.
HV000020 java.lang.IllegalArgumentException The max parameter cannot be negative.
HV000021 java.lang.IllegalArgumentException The length cannot be negative.
HV000022 java.lang.IllegalArgumentException Invalid regular expression.
HV000023 jakarta.validation.ConstraintDeclarationException Error during execution of script "%s" occurred.
HV000024 jakarta.validation.ConstraintDeclarationException Script "%s" returned null, but must return either true or false.
HV000025 jakarta.validation.ConstraintDeclarationException Script "%1$s" returned %2$s (of type %3$s), but must return either true or false.
HV000026 jakarta.validation.ValidationException Assertion error: inconsistent ConfigurationImpl construction.
HV000027 jakarta.validation.ValidationException Unable to find provider: %s.
HV000028 jakarta.validation.ValidationException Unexpected exception during isValid call.
HV000029 jakarta.validation.ValidationException Constraint factory returned null when trying to create instance of %s.
HV000030 jakarta.validation.UnexpectedTypeException No validator could be found for constraint '%s' validating type '%s'. Check configuration for '%s'
HV000031 jakarta.validation.UnexpectedTypeException There are multiple validator classes which could validate the type %1$s. The validator classes are: %2$s.
HV000032 jakarta.validation.ValidationException Unable to initialize %s.
HV000033 jakarta.validation.ValidationException At least one custom message must be created if the default error message gets disabled.
HV000034 java.lang.IllegalArgumentException %s is not a valid Java Identifier.
HV000035 java.lang.IllegalArgumentException Unable to parse property path %s.
HV000036 jakarta.validation.ValidationException Type %s not supported for unwrapping.
HV000037 jakarta.validation.ValidationException Inconsistent fail fast configuration. Fail fast enabled via programmatic API, but explicitly disabled via properties.
HV000038 java.lang.IllegalArgumentException Invalid property path.
HV000039 java.lang.IllegalArgumentException Invalid property path. Either there is no property %2$s in entity %1$s or it is not possible to cascade to the property.
HV000040 java.lang.IllegalArgumentException Property path must provide index or map key.
HV000041 jakarta.validation.ValidationException Call to TraversableResolver.isReachable() threw an exception.
HV000042 jakarta.validation.ValidationException Call to TraversableResolver.isCascadable() threw an exception.
HV000043 jakarta.validation.GroupDefinitionException Unable to expand default group list %1$s into sequence %2$s.
HV000044 java.lang.IllegalArgumentException At least one group has to be specified.
HV000045 jakarta.validation.ValidationException A group has to be an interface. %s is not.
HV000046 jakarta.validation.GroupDefinitionException Sequence definitions are not allowed as composing parts of a sequence.
HV000047 jakarta.validation.GroupDefinitionException Cyclic dependency in groups definition
HV000048 jakarta.validation.GroupDefinitionException Unable to expand group sequence.
HV000052 jakarta.validation.GroupDefinitionException Default group sequence and default group sequence provider cannot be defined at the same time.
HV000053 jakarta.validation.GroupDefinitionException 'Default.class' cannot appear in default group sequence list.
HV000054 jakarta.validation.GroupDefinitionException %s must be part of the redefined default group sequence.
HV000055 jakarta.validation.GroupDefinitionException The default group sequence provider defined for %s has the wrong type
HV000056 java.lang.IllegalArgumentException Method or constructor %1$s doesn't have a parameter with index %2$d.
HV000059 jakarta.validation.ValidationException Unable to retrieve annotation parameter value.
HV000062 java.lang.IllegalArgumentException Method or constructor %1$s has %2$s parameters, but the passed list of parameter meta data has a size of %3$s.
HV000063 jakarta.validation.ValidationException Unable to instantiate %s.
HV000064 jakarta.validation.ValidationException Unable to instantiate %1$s: %2$s.
HV000065 jakarta.validation.ValidationException Unable to load class: %s from %s.
HV000068 java.lang.IllegalArgumentException Start index cannot be negative: %d.
HV000069 java.lang.IllegalArgumentException End index cannot be negative: %d.
HV000070 java.lang.IllegalArgumentException Invalid Range: %1$d > %2$d.
HV000071 java.lang.IllegalArgumentException A explicitly specified check digit must lie outside the interval: [%1$d, %2$d].
HV000072 java.lang.NumberFormatException '%c' is not a digit.
HV000073 jakarta.validation.ConstraintDefinitionException Parameters starting with 'valid' are not allowed in a constraint.
HV000074 jakarta.validation.ConstraintDefinitionException %2$s contains Constraint annotation, but does not contain a %1$s parameter.
HV000075 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the payload parameter default value is not the empty array.
HV000076 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the payload parameter is of wrong type.
HV000077 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the groups parameter default value is not the empty array.
HV000078 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the groups parameter is of wrong type.
HV000079 jakarta.validation.ConstraintDefinitionException %s contains Constraint annotation, but the message parameter is not of type java.lang.String.
HV000080 jakarta.validation.ConstraintDefinitionException Overridden constraint does not define an attribute with name %s.
HV000081 jakarta.validation.ConstraintDefinitionException The overriding type of a composite constraint must be identical to the overridden one. Expected %1$s found %2$s.
HV000082 jakarta.validation.ValidationException Wrong type for attribute '%2$s' of annotation %1$s. Expected: %3$s. Actual: %4$s.
HV000083 jakarta.validation.ValidationException The specified annotation %1$s defines no attribute '%2$s'.
HV000084 jakarta.validation.ValidationException Unable to get attribute '%2$s' from annotation %1$s.
HV000085 java.lang.IllegalArgumentException No value provided for attribute '%1$s' of annotation @%2$s.
HV000086 java.lang.RuntimeException Trying to instantiate annotation %1$s with unknown attribute(s): %2$s.
HV000087 java.lang.IllegalArgumentException Property name cannot be null or empty.
HV000088 java.lang.IllegalArgumentException Element type has to be FIELD or METHOD.
HV000089 java.lang.IllegalArgumentException Member %s is neither a field nor a method.
HV000090 jakarta.validation.ValidationException Unable to access %s.
HV000091 java.lang.IllegalArgumentException %s has to be a primitive type.
HV000093 jakarta.validation.ValidationException null is an invalid type for a constraint validator.
HV000094 java.lang.IllegalArgumentException Missing actual type argument for type parameter: %s.
HV000095 jakarta.validation.ValidationException Unable to instantiate constraint factory class %s.
HV000096 jakarta.validation.ValidationException Unable to open input stream for mapping file %s.
HV000097 jakarta.validation.ValidationException Unable to instantiate message interpolator class %s.
HV000098 jakarta.validation.ValidationException Unable to instantiate traversable resolver class %s.
HV000099 jakarta.validation.ValidationException Unable to instantiate validation provider class %s.
HV000100 jakarta.validation.ValidationException Unable to parse %s.
HV000101 jakarta.validation.ValidationException %s is not an annotation.
HV000102 jakarta.validation.ValidationException %s is not a constraint validator class.
HV000103 jakarta.validation.ValidationException %s is configured at least twice in xml.
HV000104 jakarta.validation.ValidationException %1$s is defined twice in mapping xml for bean %2$s.
HV000105 jakarta.validation.ValidationException %1$s does not contain the fieldType %2$s.
HV000106 jakarta.validation.ValidationException %1$s does not contain the property %2$s.
HV000107 jakarta.validation.ValidationException Annotation of type %1$s does not contain a parameter %2$s.
HV000108 jakarta.validation.ValidationException Attempt to specify an array where single value is expected.
HV000109 jakarta.validation.ValidationException Unexpected parameter value.
HV000110 jakarta.validation.ValidationException Invalid %s format.
HV000111 jakarta.validation.ValidationException Invalid char value: %s.
HV000112 jakarta.validation.ValidationException Invalid return type: %s. Should be a enumeration type.
HV000113 jakarta.validation.ValidationException %s, %s, %s are reserved parameter names.
HV000114 jakarta.validation.ValidationException Specified payload class %s does not implement jakarta.validation.Payload
HV000115 jakarta.validation.ValidationException Error parsing mapping file.
HV000116 java.lang.IllegalArgumentException %s
HV000118 java.lang.ClassCastException Unable to cast %s (with element kind %s) to %s
HV000119 DEBUG Using %s as parameter name provider.
HV000120 jakarta.validation.ValidationException Unable to instantiate parameter name provider class %s.
HV000121 jakarta.validation.ValidationException Unable to parse %s.
HV000122 jakarta.validation.ValidationException Unsupported schema version for %s: %s.
HV000124 jakarta.validation.ConstraintDeclarationException Found multiple group conversions for source group %s: %s.
HV000125 jakarta.validation.ConstraintDeclarationException Found group conversions for non-cascading element at: %s.
HV000127 jakarta.validation.ConstraintDeclarationException Found group conversion using a group sequence as source at: %s.
HV000129 WARN EL expression '%s' references an unknown property
HV000130 WARN Error in EL expression '%s'
HV000131 jakarta.validation.ConstraintDeclarationException A method return value must not be marked for cascaded validation more than once in a class hierarchy, but the following two methods are marked as such: %s, %s.
HV000132 jakarta.validation.ConstraintDeclarationException Void methods must not be constrained or marked for cascaded validation, but method %s is.
HV000133 jakarta.validation.ValidationException %1$s does not contain a constructor with the parameter types %2$s.
HV000134 jakarta.validation.ValidationException Unable to load parameter of type '%1$s' in %2$s.
HV000135 jakarta.validation.ValidationException %1$s does not contain a method with the name '%2$s' and parameter types %3$s.
HV000136 jakarta.validation.ValidationException The specified constraint annotation class %1$s cannot be loaded.
HV000137 jakarta.validation.ValidationException The method '%1$s' is defined twice in the mapping xml for bean %2$s.
HV000138 jakarta.validation.ValidationException The constructor '%1$s' is defined twice in the mapping xml for bean %2$s.
HV000139 jakarta.validation.ConstraintDefinitionException The constraint '%1$s' defines multiple cross parameter validators. Only one is allowed.
HV000141 jakarta.validation.ConstraintDeclarationException The constraint %1$s used ConstraintTarget#IMPLICIT where the target cannot be inferred.
HV000142 jakarta.validation.ConstraintDeclarationException Cross parameter constraint %1$s is illegally placed on a parameterless method or constructor '%2$s'.
HV000143 jakarta.validation.ConstraintDeclarationException Cross parameter constraint %1$s is illegally placed on class level.
HV000144 jakarta.validation.ConstraintDeclarationException Cross parameter constraint %1$s is illegally placed on field '%2$s'.
HV000146 java.lang.IllegalStateException No parameter nodes may be added since path %s doesn't refer to a cross-parameter constraint.
HV000147 jakarta.validation.ValidationException %1$s is configured multiple times (note, and nodes for the same method are not allowed)
HV000148 WARN An exception occurred during evaluation of EL expression '%s'
HV000149 jakarta.validation.ValidationException An exception occurred during message interpolation
HV000150 jakarta.validation.UnexpectedTypeException The constraint %1$s defines multiple validators for the type %2$s: %3$s, %4$s. Only one is allowed.
HV000151 jakarta.validation.ConstraintDeclarationException A method overriding another method must not redefine the parameter constraint configuration, but method %2$s redefines the configuration of %1$s.
HV000152 jakarta.validation.ConstraintDeclarationException Two methods defined in parallel types must not declare parameter constraints, if they are overridden by the same method, but methods %s and %s both define parameter constraints.
HV000153 jakarta.validation.ConstraintDeclarationException The constraint %1$s used ConstraintTarget#%2$s but is not specified on a method or constructor.
HV000154 jakarta.validation.ConstraintDefinitionException Cross parameter constraint %1$s has no cross-parameter validator.
HV000155 jakarta.validation.ConstraintDefinitionException Composed and composing constraints must have the same constraint type, but composed constraint %1$s has type %3$s, while composing constraint %2$s has type %4$s.
HV000156 jakarta.validation.ConstraintDefinitionException Constraints with generic as well as cross-parameter validators must define an attribute validationAppliesTo(), but constraint %s doesn't.
HV000157 jakarta.validation.ConstraintDefinitionException Return type of the attribute validationAppliesTo() of the constraint %s must be jakarta.validation.ConstraintTarget.
HV000158 jakarta.validation.ConstraintDefinitionException Default value of the attribute validationAppliesTo() of the constraint %s must be ConstraintTarget#IMPLICIT.
HV000159 jakarta.validation.ConstraintDefinitionException Only constraints with generic as well as cross-parameter validators must define an attribute validationAppliesTo(), but constraint %s does.
HV000160 jakarta.validation.ConstraintDefinitionException Validator for cross-parameter constraint %s does not validate Object nor Object[].
HV000161 jakarta.validation.ConstraintDeclarationException Two methods defined in parallel types must not define group conversions for a cascaded method return value, if they are overridden by the same method, but methods %s and %s both define parameter constraints.
HV000162 java.lang.IllegalArgumentException The validated type %1$s does not specify the constructor/method: %2$s
HV000163 java.lang.IllegalArgumentException The actual parameter type '%1$s' is not assignable to the expected one '%2$s' for parameter %3$d of '%4$s'
HV000164 java.lang.IllegalArgumentException %s has to be a auto-boxed type.
HV000165 java.lang.IllegalArgumentException Mixing IMPLICIT and other executable types is not allowed.
HV000166 jakarta.validation.ValidationException @ValidateOnExecution is not allowed on methods overriding a superclass method or implementing an interface. Check configuration for %1$s
HV000167 jakarta.validation.ValidationException A given constraint definition can only be overridden in one mapping file. %1$s is overridden in multiple files
HV000168 org.hibernate.validator.internal.engine.messageinterpolation.parser.MessageDescriptorFormatException The message descriptor '%1$s' contains an unbalanced meta character '%2$c'.
HV000169 org.hibernate.validator.internal.engine.messageinterpolation.parser.MessageDescriptorFormatException The message descriptor '%1$s' has nested parameters.
HV000170 jakarta.validation.ConstraintDeclarationException No JSR-223 scripting engine could be bootstrapped for language "%s".
HV000171 jakarta.validation.ValidationException %s is configured more than once via the programmatic constraint declaration API.
HV000172 jakarta.validation.ValidationException Property "%2$s" of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000173 jakarta.validation.ValidationException Method %2$s of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000174 jakarta.validation.ValidationException Parameter %3$s of method or constructor %2$s of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000175 jakarta.validation.ValidationException The return value of method or constructor %2$s of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000176 jakarta.validation.ValidationException Constructor %2$s of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000177 jakarta.validation.ValidationException Cross-parameter constraints for the method or constructor %2$s of type %1$s are declared more than once via the programmatic constraint declaration API.
HV000178 java.lang.IllegalArgumentException Multiplier cannot be negative: %d.
HV000179 java.lang.IllegalArgumentException Weight cannot be negative: %d.
HV000180 java.lang.IllegalArgumentException '%c' is not a digit nor a letter.
HV000181 java.lang.IllegalArgumentException Wrong number of parameters. Method or constructor %1$s expects %2$d parameters, but got %3$d.
HV000182 jakarta.validation.ValidationException No validation value unwrapper is registered for type '%1$s'.
HV000183 jakarta.validation.ValidationException Unable to initialize 'jakarta.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead
HV000185 WARN Message contains EL expression: %1s, which is not supported by the selected message interpolator
HV000189 jakarta.validation.ConstraintDeclarationException The configuration of value unwrapping for property '%s' of bean '%s' is inconsistent between the field and its getter.
HV000190 jakarta.validation.ValidationException Unable to parse %s.
HV000192 WARN Couldn't determine Java version from value %1s; Not enabling features requiring Java 8
HV000193 jakarta.validation.ValidationException %s is configured more than once via the programmatic constraint definition API.
HV000194 jakarta.validation.ValidationException An empty element is only supported when a CharSequence is expected.
HV000195 jakarta.validation.ValidationException Unable to reach the property to validate for the bean %s and the property path %s. A property is null along the way.
HV000196 jakarta.validation.ValidationException Unable to convert the Type %s to a Class.
HV000197 jakarta.validation.ConstraintDeclarationException No value extractor found for type parameter '%2$s' of type %1$s.
HV000198 jakarta.validation.ConstraintDeclarationException No suitable value extractor found for type %1$s.
HV000200 DEBUG Using %s as clock provider.
HV000201 jakarta.validation.ValidationException Unable to instantiate clock provider class %s.
HV000202 jakarta.validation.ValidationException Unable to get the current time from the clock provider
HV000203 jakarta.validation.valueextraction.ValueExtractorDefinitionException Value extractor type %1s fails to declare the extracted type parameter using @ExtractedValue.
HV000204 jakarta.validation.valueextraction.ValueExtractorDefinitionException Only one type parameter must be marked with @ExtractedValue for value extractor type %1s.
HV000205 jakarta.validation.ConstraintDeclarationException Invalid unwrapping configuration for constraint %2$s on %1$s. You can only define one of 'Unwrapping.Skip' or 'Unwrapping.Unwrap'.
HV000206 jakarta.validation.ValidationException Unable to instantiate value extractor class %s.
HV000207 DEBUG Adding value extractor %s.
HV000208 jakarta.validation.valueextraction.ValueExtractorDeclarationException Given value extractor %2$s handles the same type and type use as previously given value extractor %1$s.
HV000209 jakarta.validation.ConstraintDeclarationException A composing constraint (%2$s) must not be given directly on the composed constraint (%1$s) and using the corresponding List annotation at the same time.
HV000210 java.lang.IllegalArgumentException Unable to find the type parameter %2$s in class %1$s.
HV000211 jakarta.validation.ValidationException Given type is neither a parameterized nor an array type: %s.
HV000212 jakarta.validation.ValidationException Given type has no type argument with index %2$s: %1$s.
HV000213 jakarta.validation.ValidationException Given type has more than one type argument, hence an argument index must be specified: %s.
HV000214 jakarta.validation.ValidationException The same container element type of type %1$s is configured more than once via the programmatic constraint declaration API.
HV000215 jakarta.validation.ValidationException Calling parameter() is not allowed for the current element.
HV000216 jakarta.validation.ValidationException Calling returnValue() is not allowed for the current element.
HV000217 jakarta.validation.ValidationException The same container element type %2$s is configured more than once for location %1$s via the XML mapping configuration.
HV000218 jakarta.validation.valueextraction.ValueExtractorDefinitionException Having parallel definitions of value extractors on a given class is not allowed: %s.
HV000219 jakarta.validation.ConstraintDeclarationException Unable to get the most specific value extractor for type %1$s as several most specific value extractors are declared: %2$s.
HV000220 jakarta.validation.valueextraction.ValueExtractorDefinitionException When @ExtractedValue is defined on a type parameter of a container type, the type attribute may not be set: %1$s.
HV000221 jakarta.validation.ValidationException An error occurred while extracting values in value extractor %1$s.
HV000222 jakarta.validation.valueextraction.ValueExtractorDeclarationException The same value extractor %s is added more than once via the XML configuration.
HV000223 jakarta.validation.ConstraintDeclarationException Implicit unwrapping is not allowed for type %1$s as several maximally specific value extractors marked with @UnwrapByDefault are declared: %2$s.
HV000224 jakarta.validation.ValidationException Unwrapping of ConstraintDescriptor is not supported yet.
HV000225 jakarta.validation.valueextraction.ValueExtractorDefinitionException Only unbound wildcard type arguments are supported for the container type of the value extractor: %1$s.
HV000226 jakarta.validation.ValidationException Container element constraints and cascading validation are not supported on arrays: %1$s
HV000227 java.lang.IllegalArgumentException The validated type %1$s does not specify the property: %2$s
HV000228 jakarta.validation.ConstraintDeclarationException No value extractor found when narrowing down to the runtime type %3$s among the value extractors for type parameter '%2$s' of type %1$s.
HV000229 java.lang.ClassCastException Unable to cast %1$s to %2$s.
HV000230 DEBUG Using %s as script evaluator factory.
HV000231 jakarta.validation.ValidationException Unable to instantiate script evaluator factory class %s.
HV000232 org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException No JSR 223 script engine found for language "%s".
HV000233 org.hibernate.validator.spi.scripting.ScriptEvaluationException An error occurred while executing the script: "%s".
HV000234 DEBUG Using %1$s as ValidatorFactory-scoped %2$s.
HV000235 jakarta.validation.ValidationException Unable to create an annotation descriptor for %1$s.
HV000236 jakarta.validation.ValidationException Unable to find the method required to create the constraint annotation descriptor.
HV000237 jakarta.validation.ValidationException Unable to access method %3$s of class %2$s with parameters %4$s using lookup %1$s.
HV000238 DEBUG Temporal validation tolerance set to %1$s.
HV000239 jakarta.validation.ValidationException Unable to parse the temporal validation tolerance property %s. It should be a duration represented in milliseconds.
HV000240 DEBUG Constraint validator payload set to %1$s.
HV000241 jakarta.validation.ValidationException Encountered unsupported element %1$s while parsing the XML configuration.
HV000242 WARN Unable to load or instantiate JPA aware resolver %1$s. All properties will per default be traversable.
HV000243 jakarta.validation.ConstraintDefinitionException Constraint %2$s references constraint validator type %1$s, but this validator is defined for constraint type %3$s.
HV000244 java.lang.AssertionError ConstrainedElement expected class was %1$s, but instead received %2$s.
HV000245 java.lang.AssertionError Allowed constraint element types are FIELD and GETTER, but instead received %1$s.
HV000246 DEBUG Using %s as getter property selection strategy.
HV000247 jakarta.validation.ValidationException Unable to instantiate getter property selection strategy class %s.
HV000248 jakarta.validation.ValidationException Unable to get an XML schema named %s.
HV000250 jakarta.validation.ValidationException Uninitialized locale: %s. Please register your locale as a locale to initialize when initializing your ValidatorFactory.
HV000251 ERROR An error occurred while loading an instance of service %s.
HV000252 DEBUG Using %s as property node name provider.
HV000253 jakarta.validation.ValidationException Unable to instantiate property node name provider class %s.
HV000254 WARN Missing parameter metadata for %s, which declares implicit or synthetic parameters. Automatic resolution of generic type information for method parameters may yield incorrect results if multiple parameters have the same erasure. To solve this, compile your code with the '-parameters' flag.
HV000255 DEBUG Using %s as locale resolver.
HV000256 jakarta.validation.ValidationException Unable to instantiate locale resolver class %s.
HV000257 WARN Expression variables have been defined for constraint %1$s while Expression Language is not enabled.
HV000258 java.lang.IllegalStateException Expressions should not be resolved when Expression Language features are disabled.
HV000259 java.lang.IllegalStateException Provided Expression Language feature level is not supported.
HV000260 DEBUG Expression Language feature level for constraints set to %1$s.
HV000261 DEBUG Expression Language feature level for custom violations set to %1$s.
HV000262 jakarta.validation.ValidationException Unable to find an expression language feature level for value %s.
HV000263 WARN EL expression '%s' references an unknown method.
HV000264 ERROR Unable to interpolate EL expression '%s' as it uses a disabled feature.
HV000265 jakarta.validation.ValidationException Inconsistent show validation value in trace logs configuration. It is enabled via programmatic API, but explicitly disabled via properties.

IJ

Code Level Return Type Message
IJ000100 INFO Closing a connection for you. Please close them yourself: %s
IJ000102 INFO Throwable trying to close a connection for you, please close it yourself
IJ000103 INFO Could not find a close method on alleged connection object (%s). Please close your own connections
IJ000201 ERROR SecurityContext setup failed: %s
IJ000202 ERROR SecurityContext setup failed since CallbackSecurity was null
IJ000301 INFO Registered a null handle for managed connection: %s
IJ000302 INFO Unregistered handle that was not registered: %s for managed connection: %s
IJ000303 INFO Unregistered a null handle for managed connection: %s
IJ000305 WARN Connection error occured: %s
IJ000306 WARN Unknown connection error occured: %s
IJ000307 WARN Notified of error on a different managed connection
IJ000311 INFO Throwable from unregister connection
IJ000312 ERROR Error while closing connection handle
IJ000313 ERROR There is something wrong with the pooling
IJ000314 WARN Error during beforeCompletion: %s
IJ000315 ERROR Pool %s has %d active handles
IJ000316 ERROR Handle allocation: %s
IJ000317 ERROR Transaction boundary
IJ000318 ERROR Delisting resource in pool %s failed
IJ000401 WARN Error during tidy up connection: %s
IJ000402 WARN ResourceException in returning connection: %s
IJ000403 WARN Reconnecting a connection handle that still has a managed connection: %s %s
IJ000404 WARN Unchecked throwable in managedConnectionDisconnected() cl=%s
IJ000405 WARN Multiple LocalTransaction connection listeners enlisted for %s, cl=%s
IJ000406 ERROR Throwable in returning connection: %s
IJ000407 WARN No lazy enlistment available for %s
IJ000408 WARN Deprecated pool: %s, using %s instead
IJ000501 WARN Thread %s is not the enlisting thread %s
IJ000502 WARN Transaction %s error in beforeCompletion %s
IJ000503 WARN Transaction %s error in afterCompletion %s
IJ000504 WARN Transaction not found: %s
IJ000601 INFO ConnectionValidator has been interrupted
IJ000602 WARN ConnectionValidator ignored unexpected runtime exception
IJ000603 WARN ConnectionValidator ignored unexpected error
IJ000604 WARN Throwable while attempting to get a new connection: %s
IJ000605 WARN Destroying connection that could not be successfully matched %s for %s
IJ000606 WARN Throwable while trying to match managed connection, destroying connection: %s
IJ000607 WARN ResourceException cleaning up managed connection: %s
IJ000608 WARN Destroying returned connection, maximum pool size exceeded %s
IJ000609 WARN Attempt to return connection twice: %s
IJ000610 WARN Unable to fill pool: %s
IJ000611 WARN Warning: Background validation was specified with a non compliant ManagedConnectionFactory interface
IJ000612 WARN Destroying connection that could not be successfully matched: %s
IJ000613 WARN Throwable while trying to match managed connection, destroying connection: %s
IJ000614 ERROR Exception during createSubject() for %s: %s
IJ000615 WARN Destroying active connection in pool: %s (%s)
IJ000616 ERROR Leak detected in pool: %s (%s) (%d)
IJ000617 WARN Invalid incrementer capacity policy: %s
IJ000618 WARN Invalid decrementer capacity policy: %s
IJ000619 WARN Invalid property '%s' with value '%s' for %s
IJ000620 WARN Warning: ValidateOnMatch validation was specified with a non compliant ManagedConnectionFactory: %s
IJ000621 WARN Destroying connection that could not be validated: %s
IJ000622 WARN Unsupported pool implementation: %s
IJ000701 WARN Exception during unbind
IJ000901 WARN Error during connection close
IJ000902 ERROR Error during inflow crash recovery for '%s' (%s)
IJ000903 ERROR Error creating Subject for crash recovery: %s (%s)
IJ000904 WARN No security domain defined for crash recovery: %s
IJ000905 WARN Subject for crash recovery was null: %s
IJ000906 ERROR Error during crash recovery: %s (%s)
IJ001001 WARN No users.properties were found
IJ001002 ERROR Error while loading users.properties
IJ001003 WARN No roles.properties were found
IJ001004 ERROR Error while loading roles.properties
IJ001005 WARN No callback.properties were found
IJ001006 ERROR Error while loading callback.properties
IJ001101 WARN Prepare called on a local tx. Use of local transactions on a JTA transaction with more than one branch may result in inconsistent data in some cases of failure
IJ010001 ERROR Parsing error of ra.xml file: %s
IJ010002 ERROR Parsing error of ironjacamar.xml file: %s
IJ010003 ERROR No @Connector was found and no definition in the ra.xml metadata either
IJ010004 ERROR More than one @Connector was found but the correct one wasn't defined in the ra.xml metadata
IJ010005 WARN Datasource pools with allow-multiple-users cannot be prefilled. Prefill setting will be ignored.
IJ020001 INFO Required license terms for %s
IJ020002 INFO Deployed: %s
IJ020003 WARN Failure during validation report generation: %s
IJ020004 WARN Only one connection definition found with a mismatch in class-name: %s
IJ020005 WARN Only one admin object found with a mismatch in class-name: %s
IJ020006 ERROR ConnectionFactory is null
IJ020007 ERROR Exception during createSubject(): %s
IJ020008 WARN Invalid config-property: %s
IJ020009 WARN Invalid connection definition with class-name: %s
IJ020010 ERROR Connection definition with missing class-name
IJ020011 ERROR Admin object with missing class-name
IJ020012 WARN Admin object not bound: %s
IJ020013 WARN Connection factory not bound: %s
IJ020014 INFO Admin object not specification compliant. See 13.4.2.3 for additional details: %s
IJ020015 INFO Connection factory not specification compliant. See 6.5.1.3 for additional details: %s
IJ020016 WARN Missing element. XA recovery disabled for: %s
IJ020017 WARN Invalid archive: %s
IJ020018 INFO Enabling for %s
IJ020019 INFO Changed TransactionSupport for %s
IJ020020 WARN Connection Properties for DataSource: '%s' is empty, try to use driver-class: '%s' and connection-url: '%s' to connect database
IJ030000 WARN Unable to load connection listener: %s
IJ030001 WARN Disabling exception sorter for: %s
IJ030002 WARN Disabling exception sorter for: %s
IJ030003 WARN Error checking exception fatality for: %s
IJ030004 WARN Disabling validation connection checker for: %s
IJ030005 WARN Disabling validation connection checker for: %s
IJ030006 WARN Disabling stale connection checker for: %s
IJ030007 WARN Disabling stale connection checker for: %s
IJ030008 WARN HA setup detected for %s
IJ030020 WARN Detected queued threads during cleanup from: %s
IJ030021 WARN Queued thread: %s
IJ030022 WARN Lock owned during cleanup: %s
IJ030023 WARN Lock is locked during cleanup without an owner
IJ030024 WARN Error resetting transaction isolation for: %s
IJ030025 WARN Error during connection listener activation for: %s
IJ030026 WARN Error during connection listener passivation for: %s
IJ030027 WARN Destroying connection that is not valid, due to the following exception: %s
IJ030028 WARN Error notifying of connection error for listener: %s
IJ030040 WARN Closing a statement you left open, please do your own housekeeping for: %s
IJ030041 WARN Error during closing a statement for: %s
IJ030042 WARN Closing a result set you left open, please do your own housekeeping for: %s
IJ030043 WARN Error during closing a result set for: %s
IJ030050 WARN Error creating connection for: %s
IJ030051 ERROR Unable to load undefined URLSelectStrategy for: %s
IJ030052 ERROR Unable to load %s URLSelectStrategy for: %s
IJ030053 ERROR Unable to load %s URLSelectStrategy for: %s
IJ030054 WARN Error creating XA connection for: %s
IJ030055 ERROR Unable to load undefined URLXASelectStrategy for: %s
IJ030056 ERROR Unable to load %s URLXASelectStrategy for: %s
IJ030057 ERROR Unable to load %s URLXASelectStrategy for: %s
IJ030060 WARN Error checking state
IJ030061 WARN Error resetting auto-commit for: %s

IPROTO

Code Level Return Type Message
IPROTO000001 WARN Field %s was read out of sequence leading to sub-optimal performance
IPROTO000002 WARN Field %s was written out of sequence and will lead to sub-optimal read performance
IPROTO000003 org.infinispan.protostream.MalformedProtobufException Input data ended unexpectedly in the middle of a field. The message is corrupt.
IPROTO000004 org.infinispan.protostream.MalformedProtobufException Encountered a malformed varint.
IPROTO000005 org.infinispan.protostream.MalformedProtobufException Encountered a length delimited field with negative length.
IPROTO000006 org.infinispan.protostream.MalformedProtobufException Protobuf message appears to be larger than the configured limit. The message is possibly corrupt.
IPROTO000007 java.io.IOException Ran out of buffer space
IPROTO000008 org.infinispan.protostream.exception.ProtoStreamException The nested message depth appears to be larger than the configured limit of '%s'.It is possible that the entity to marshall with type '%s' can have some circular dependencies.

ISPN

Code Level Return Type Message
ISPN-00001 org.infinispan.commons.CacheConfigurationException Cannot instantiate class '%s'
ISPN000016 ERROR Problem encountered when applying state for key %s!
ISPN000021 WARN Expected just one response; got %s
ISPN000025 INFO wakeUpInterval is <= 0, not starting expired purge thread
ISPN000026 WARN Caught exception purging data container!
ISPN000028 WARN Unable to passivate entry under %s
ISPN000034 org.infinispan.jmx.JmxDomainConflictException The '%s' JMX domain is already in use.
ISPN000036 WARN Did not find attribute %s
ISPN000037 WARN Failed to update attribute name %s with value %s
ISPN000042 WARN Did not find queried attribute with name %s
ISPN000043 WARN Exception while writing value for attribute %s
ISPN000044 WARN Could not invoke set on attribute %s with value %s
ISPN000046 ERROR Unknown responses from remote cache: %s
ISPN000047 ERROR Error while doing remote call
ISPN000048 ERROR Interrupted or timeout while waiting for AsyncCacheWriter worker threads to push all state to the decorated store
ISPN000052 ERROR Interrupted on acquireLock for %d milliseconds!
ISPN000053 WARN Unable to process some async modifications after %d retries!
ISPN000055 ERROR Unexpected error in AsyncStoreCoordinator thread. AsyncCacheWriter is dead!
ISPN000065 ERROR Exception while marshalling object: %s
ISPN000071 WARN Caught exception when handling command %s
ISPN000073 ERROR Unexpected error while replicating
ISPN000078 INFO Starting JGroups channel `%s`
ISPN000078 INFO Starting JGroups channel `%s` with stack `%s`
ISPN000079 INFO Channel `%s` local address is `%s`, physical addresses are `%s`
ISPN000080 INFO Disconnecting JGroups channel `%s`
ISPN000081 ERROR Problem closing channel `%s`; setting it to null
ISPN000083 ERROR Class [%s] cannot be cast to JGroupsChannelLookup! Not using a channel lookup.
ISPN000084 ERROR Errors instantiating [%s]! Not using a channel lookup.
ISPN000085 org.infinispan.commons.CacheConfigurationException Error while trying to create a channel using the specified configuration file: %s
ISPN000086 org.infinispan.commons.CacheConfigurationException Error while trying to create a channel using the specified configuration XML: %s
ISPN000087 org.infinispan.commons.CacheConfigurationException Error while trying to create a channel using the specified configuration string: %s
ISPN000088 INFO Unable to use any JGroups configuration mechanisms provided in properties %s. Using default JGroups configuration!
ISPN000089 ERROR getCoordinator(): Interrupted while waiting for members to be set
ISPN000093 INFO Received new, MERGED cluster view for channel %s: %s
ISPN000094 INFO Received new cluster view for channel %s: %s
ISPN000097 ERROR Error while processing a prepare in a single-phase transaction
ISPN000098 ERROR Exception during rollback
ISPN000100 WARN Stopping, but there are %s local transactions and %s remote transactions that did not finish in time.
ISPN000101 WARN Failed synchronization registration
ISPN000102 WARN Unable to roll back global transaction %s
ISPN000104 INFO Using EmbeddedTransactionManager
ISPN000105 ERROR Failed creating initial JNDI context
ISPN000107 INFO Retrieving transaction manager %s
ISPN000108 ERROR Error enlisting resource
ISPN000109 ERROR beforeCompletion() failed for %s
ISPN000110 ERROR Unexpected error from resource manager!
ISPN000111 ERROR afterCompletion() failed for %s
ISPN000112 WARN exception while committing
ISPN000115 WARN Recovery call will be ignored as recovery is disabled. More on recovery: http://community.jboss.org/docs/DOC-16646
ISPN000116 WARN Missing the list of prepared transactions from node %s. Received response is %s
ISPN000117 ERROR There's already a prepared transaction with this xid: %s. New transaction is %s. Are there two different transactions having same Xid in the cluster?
ISPN000121 ERROR Unable to set value!
ISPN000126 WARN Attempted to stop() from FAILED state, but caught exception
ISPN000128 DEBUG Infinispan version: %s
ISPN000133 WARN Attempted to register listener of class %s, but no valid, public methods annotated with method-level event annotations found! Ignoring listener.
ISPN000134 WARN Unable to invoke method %s on Object instance %s - removing this target object from list of listeners!
ISPN000135 WARN Could not lock key %s in order to invalidate from L1 at node %s, skipping....
ISPN000136 ERROR Error executing command %s on %s, writing keys %s
ISPN000137 INFO Failed invalidating remote cache
ISPN000141 WARN Could not rollback prepared 1PC transaction. This transaction will be rolled back by the recovery process, if enabled. Transaction: %s
ISPN000144 WARN Failed loading value for key %s from cache store
ISPN000147 ERROR Error invalidating keys from L1 after rehash
ISPN000149 WARN Fetch persistent state and purge on startup are both disabled, cache may contain stale entries on startup
ISPN000152 INFO Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
ISPN000160 WARN Could not complete injected transaction.
ISPN000161 INFO Using a batchMode transaction manager
ISPN000162 INFO Could not instantiate transaction manager
ISPN000177 WARN %s has been deprecated as a synonym for %s. Use one of %s instead
ISPN000188 ERROR Error while processing a commit in a two-phase transaction
ISPN000189 WARN While stopping a cache or cache manager, one of its components failed to stop
ISPN000194 WARN Failed loading keys from cache store
ISPN000195 ERROR Error during rebalance for cache %s on node %s, topology id = %d
ISPN000196 WARN Failed to recover cluster state after the current node became the coordinator (or after merge), will retry
ISPN000197 WARN Error updating cluster member list for view %d, waiting for next view
ISPN000201 TRACE This cache is configured to backup to its own site (%s).
ISPN000202 WARN Encountered issues while backing up data for cache %s to site %s
ISPN000203 WARN The rollback request for tx %s cannot be processed by the cache %s as this cache is not transactional!
ISPN000204 WARN The commit request for tx %s cannot be processed by the cache %s as this cache is not transactional!
ISPN000205 WARN Trying to bring back an non-existent site (%s)!
ISPN000207 WARN Could not interrupt as no thread found for command uuid %s
ISPN000208 ERROR No live owners found for segments %s of cache %s. Excluded owners: %s
ISPN000209 WARN Failed to retrieve transactions of cache %s from node %s, segments %s
ISPN000210 WARN Failed to request state of cache %s from node %s, segments %s
ISPN000214 WARN Unable to remove entry under %s from cache store after activation
ISPN000215 java.lang.IllegalArgumentException Unknown migrator %s
ISPN000216 INFO %d entries migrated to cache %s in %s
ISPN000217 org.infinispan.remoting.RemoteException Received exception from %s, see cause for remote stack trace
ISPN000218 INFO Timeout while waiting for the transaction validation. The command will not be processed. Transaction is %s
ISPN000222 org.infinispan.commons.CacheConfigurationException Custom interceptor missing class
ISPN000223 WARN Custom interceptor '%s' does not extend BaseCustomInterceptor, which is recommended
ISPN000224 org.infinispan.commons.CacheConfigurationException Custom interceptor '%s' specifies more than one position
ISPN000225 org.infinispan.commons.CacheConfigurationException Custom interceptor '%s' doesn't specify a position
ISPN000228 ERROR Failed to recover cache %s state after the current node became the coordinator
ISPN000229 java.lang.IllegalArgumentException Unexpected initial version type (only NumericVersion instances supported): %s
ISPN000230 ERROR Failed to start rebalance for cache %s
ISPN000234 WARN Root element for %s already registered in ParserRegistry by %s. Cannot install %s.
ISPN000235 org.infinispan.commons.CacheConfigurationException Configuration parser %s does not declare any Namespace annotations
ISPN000238 org.infinispan.commons.CacheConfigurationException Directory %s does not exist and cannot be created!
ISPN000242 org.infinispan.commons.CacheException Missing foreign externalizer with id=%s, either externalizer was not configured by client, or module lifecycle implementation adding externalizer was not loaded properly
ISPN000243 org.infinispan.commons.CacheException Type of data read is unknown. Id=%d is not amongst known reader indexes.
ISPN000244 org.infinispan.commons.CacheConfigurationException AdvancedExternalizer's getTypeClasses for externalizer %s must return a non-empty set
ISPN000245 org.infinispan.commons.CacheConfigurationException Duplicate id found! AdvancedExternalizer id=%d for %s is shared by another externalizer (%s). Reader index is %d
ISPN000246 org.infinispan.commons.CacheConfigurationException Internal %s externalizer is using an id(%d) that exceeded the limit. It needs to be smaller than %d
ISPN000247 org.infinispan.commons.CacheConfigurationException Foreign %s externalizer is using a negative id(%d). Only positive id values are allowed.
ISPN000249 org.infinispan.commons.CacheConfigurationException The cache loader configuration %s does not specify the loader class using @ConfigurationFor
ISPN000252 ERROR Error executing parallel store task
ISPN000255 ERROR Error while processing prepare
ISPN000259 ERROR Async store executor did not stop properly
ISPN000261 ERROR Failed to execute outbound transfer
ISPN000262 ERROR Failed to enlist TransactionXaAdapter to transaction
ISPN000264 WARN Not using an L1 invalidation reaper thread. This could lead to memory leaks as the requestors map may grow indefinitely!
ISPN000267 WARN Problems creating interceptor %s
ISPN000268 WARN Unable to broadcast invalidations as a part of the prepare phase. Rolling back.
ISPN000269 WARN Cache used for Grid metadata should be synchronous.
ISPN000270 WARN Could not commit local tx %s
ISPN000271 WARN Could not rollback local tx %s
ISPN000272 WARN Exception removing recovery information
ISPN000273 org.infinispan.commons.CacheConfigurationException Indexing can not be enabled on caches in Invalidation mode
ISPN000274 ERROR Persistence enabled without any CacheLoaderInterceptor in InterceptorChain!
ISPN000275 ERROR Persistence enabled without any CacheWriteInterceptor in InterceptorChain!
ISPN000276 org.infinispan.commons.CacheException Could not find migration data in cache %s
ISPN000277 WARN Could not migrate key %s
ISPN000277 WARN Could not migrate key %s
ISPN000278 org.infinispan.commons.CacheConfigurationException Indexing can only be enabled if infinispan-query.jar is available on your classpath, and this jar has not been detected.
ISPN000279 org.infinispan.persistence.spi.PersistenceException Failed to read stored entries from file. Error in file %s at offset %d
ISPN000280 org.infinispan.commons.CacheListenerException Caught exception [%s] while invoking method [%s] on listener instance: %s
ISPN000281 org.infinispan.remoting.transport.jgroups.SuspectException %s reported that a third node was suspected, see cause for info on the node that was suspected
ISPN000282 org.infinispan.commons.CacheConfigurationException Cannot enable Invocation Batching when the Transaction Mode is NON_TRANSACTIONAL, set the transaction mode to TRANSACTIONAL
ISPN000283 org.infinispan.commons.CacheConfigurationException A cache configured with invocation batching can't have recovery enabled
ISPN000284 WARN Problem encountered while installing cluster listener
ISPN000285 WARN Issue when retrieving cluster listeners from %s response was %s
ISPN000286 WARN Issue when retrieving cluster listeners from %s
ISPN000287 java.lang.SecurityException Unauthorized access: subject '%s' lacks '%s' permission
ISPN000288 org.infinispan.commons.CacheConfigurationException A principal-to-role mapper has not been specified
ISPN000289 WARN Cannot send cross-site state chunk to '%s'.
ISPN000291 WARN Cannot apply cross-site state chunk.
ISPN000292 WARN Unrecognized attribute '%s'. Please check your configuration. Ignoring!
ISPN000293 INFO Ignoring XML attribute %s, please remove from configuration file
ISPN000293 INFO Ignoring attribute %s at %s, please remove from configuration file
ISPN000294 INFO Ignoring element %s at %s, please remove from configuration file
ISPN000295 org.infinispan.commons.CacheConfigurationException No thread pool with name '%s' found
ISPN000296 java.lang.IllegalArgumentException Attempt to add a %s permission to a SecurityPermissionCollection
ISPN000297 java.lang.SecurityException Attempt to add a permission to a read-only SecurityPermissionCollection
ISPN000298 DEBUG Using internal security checker
ISPN000299 org.infinispan.util.concurrent.TimeoutException Unable to acquire lock after %s for key %s and requestor %s. Lock is held by %s
ISPN000300 org.infinispan.commons.CacheException There was an exception while processing retrieval of entry values
ISPN000302 WARN Issue when retrieving transactions from %s, response was %s
ISPN000304 WARN More than one configuration file with specified name on classpath. The first one will be used: %s
ISPN000305 org.infinispan.partitionhandling.AvailabilityException Cluster is operating in degraded mode because of node failures.
ISPN000306 org.infinispan.partitionhandling.AvailabilityException Key '%s' is not available. Not all owners are in this partition
ISPN000307 org.infinispan.partitionhandling.AvailabilityException Cannot clear when the cluster is partitioned
ISPN000308 INFO Rebalancing enabled
ISPN000309 INFO Rebalancing suspended
ISPN000310 DEBUG Starting new rebalance phase for cache %s, topology %s
ISPN000321 WARN Cyclic dependency detected between caches, stop order ignored
ISPN000322 WARN Cannot restart cross-site state transfer to site %s
ISPN000323 org.infinispan.commons.IllegalLifecycleStateException %s is in '%s' state and so it does not accept new invocations. Either restart it or recreate the cache container.
ISPN000324 org.infinispan.commons.IllegalLifecycleStateException %s is in 'STOPPING' state and this is an invocation not belonging to an on-going transaction, so it does not accept new invocations. Either restart it or recreate the cache container.
ISPN000325 java.lang.RuntimeException Creating tmp cache %s timed out waiting for rebalancing to complete on node %s
ISPN000326 WARN Remote transaction %s timed out. Rolling back after %d ms
ISPN000327 org.infinispan.commons.CacheConfigurationException Cannot find a parser for element '%s' in namespace '%s' at %s. Check that your configuration is up-to-date for Infinispan '%s' and you have the proper dependency in the classpath
ISPN000328 DEBUG Rebalance phase %s confirmed for cache %s on node %s, topology id = %d
ISPN000329 WARN Unable to read rebalancing status from coordinator %s
ISPN000331 WARN Unable to invoke method %s on Object instance %s
ISPN000335 org.infinispan.commons.CacheConfigurationException Two-phase commit can only be used with synchronous backup strategy.
ISPN000336 DEBUG Finished rebalance for cache %s, topology %s
ISPN000337 org.infinispan.commons.CacheConfigurationException Backup configuration must include a 'site'.
ISPN000338 org.infinispan.commons.CacheConfigurationException You must specify a 'failure-policy-class' to use a custom backup failure policy for backup '%s'.
ISPN000339 org.infinispan.commons.CacheConfigurationException Remote cache name is missing or null in backup configuration.
ISPN000340 org.infinispan.commons.CacheConfigurationException Remote cache name and remote site is missing or null in backup configuration.
ISPN000343 org.infinispan.commons.CacheConfigurationException Must have a transport set in the global configuration in order to define a clustered cache
ISPN000344 org.infinispan.commons.CacheConfigurationException reaperWakeUpInterval must be >= 0, we got %d
ISPN000345 org.infinispan.commons.CacheConfigurationException completedTxTimeout must be >= 0, we got %d
ISPN000350 org.infinispan.commons.CacheConfigurationException Enabling the L1 cache is only supported when using DISTRIBUTED as a cache mode. Your cache mode is set to %s
ISPN000351 org.infinispan.commons.CacheConfigurationException Using a L1 lifespan of 0 or a negative value is meaningless
ISPN000352 org.infinispan.commons.CacheConfigurationException Enabling the L1 cache is not supported when using EXCEPTION based eviction.
ISPN000354 org.infinispan.commons.CacheConfigurationException Cannot define both interceptor class (%s) and interceptor instance (%s)
ISPN000355 org.infinispan.commons.CacheConfigurationException Unable to instantiate loader/writer instance for StoreConfiguration %s
ISPN000357 ERROR end() failed for %s
ISPN000358 org.infinispan.commons.CacheConfigurationException A cache configuration named %s already exists. This cannot be configured externally by the user.
ISPN000359 org.infinispan.partitionhandling.AvailabilityException Keys '%s' are not available. Not all owners are in this partition
ISPN000360 WARN The xml element eviction-executor has been deprecated and replaced by expiration-executor, please update your configuration file.
ISPN000361 org.infinispan.commons.CacheException Cannot commit remote transaction %s as it was already rolled back
ISPN000362 org.infinispan.util.concurrent.TimeoutException Could not find status for remote transaction %s, please increase transaction.completedTxTimeout
ISPN000363 WARN No filter indexing service provider found for indexed filter of type %s
ISPN000364 org.infinispan.commons.CacheException Attempted to register cluster listener of class %s, but listener is annotated as only observing pre events!
ISPN000365 org.infinispan.commons.CacheConfigurationException Could not find the specified JGroups configuration file '%s'
ISPN000366 java.lang.IllegalArgumentException Unable to add a 'null' Custom Cache Store
ISPN000371 java.lang.IllegalStateException Cannot remove cache configuration '%s' because it is in use
ISPN000372 org.infinispan.commons.CacheConfigurationException Statistics are enabled while attribute 'available' is set to false.
ISPN000373 org.infinispan.commons.CacheConfigurationException Attempted to start a cache using configuration template '%s'
ISPN000374 org.infinispan.commons.CacheConfigurationException No such template '%s' when declaring '%s'
ISPN000375 org.infinispan.commons.CacheConfigurationException Cannot use configuration '%s' as a template
ISPN000376 java.lang.UnsupportedOperationException Interceptor stack is not supported in simple cache
ISPN000377 java.lang.UnsupportedOperationException Explicit lock operations are not supported in simple cache
ISPN000378 org.infinispan.commons.CacheConfigurationException Invocation batching not enabled in current configuration! Please enable it.
ISPN000381 org.infinispan.commons.CacheConfigurationException This configuration is not supported for simple cache
ISPN000382 WARN Global state persistence was enabled without specifying a location
ISPN000384 java.lang.RuntimeException Unable to broadcast invalidation messages
ISPN000386 org.infinispan.commons.CacheConfigurationException Failed to read persisted state from file %s. Aborting.
ISPN000387 org.infinispan.commons.CacheConfigurationException Failed to write state to file %s.
ISPN000388 org.infinispan.commons.CacheConfigurationException The state file %s is not writable. Aborting.
ISPN000389 INFO Loaded global state, version=%s timestamp=%s
ISPN000390 INFO Persisted state, version=%s timestamp=%s
ISPN000391 org.infinispan.commons.CacheConfigurationException Recovery not supported with non transactional cache
ISPN000392 org.infinispan.commons.CacheConfigurationException Recovery not supported with Synchronization
ISPN000395 INFO Transaction notifications are disabled. This prevents cluster listeners from working properly!
ISPN000396 DEBUG Received unsolicited state from node %s for segment %d of cache %s
ISPN000397 org.infinispan.commons.CacheException Could not migrate data for cache %s, check remote store config in the target cluster. Make sure only one remote store is present and is pointing to the source cluster
ISPN000398 java.lang.IllegalStateException CH Factory '%s' cannot restore a persisted CH of class '%s'
ISPN000399 org.infinispan.util.concurrent.TimeoutException Timeout while waiting for %d members in cluster. Last view had %s
ISPN000400 org.infinispan.remoting.transport.jgroups.SuspectException Node %s was suspected
ISPN000401 org.infinispan.util.concurrent.TimeoutException Node %s timed out, time : %s %s
ISPN000402 org.infinispan.util.concurrent.TimeoutException Timeout waiting for view %d. Current view is %d, current status is %s
ISPN000403 org.infinispan.commons.CacheConfigurationException No indexable classes were defined for this indexed cache. The configuration must contain classes or protobuf message types annotated with '@Indexed'
ISPN000404 org.infinispan.commons.CacheConfigurationException The configured entity class %s is not indexable. Please remove it from the indexing configuration.
ISPN000405 ERROR Caught exception while invoking a cache manager listener!
ISPN000406 WARN The replication queue is no longer supported since version 9.0. Attribute %s on line %d will be ignored.
ISPN000407 org.infinispan.topology.CacheJoinException Extraneous members %s are attempting to join cache %s, as they were not members of the persisted state
ISPN000408 org.infinispan.topology.CacheJoinException Node %s with persistent state attempting to join cache %s on cluster without state
ISPN000409 org.infinispan.topology.CacheJoinException Node %s without persistent state attempting to join cache %s on cluster with state
ISPN000410 org.infinispan.topology.CacheJoinException Node %s attempting to join cache %s with incompatible state
ISPN000412 org.infinispan.commons.CacheConfigurationException Cannot determine a synthetic transaction configuration from mode=%s, xaEnabled=%s, recoveryEnabled=%s, batchingEnabled=%s
ISPN000413 org.infinispan.commons.CacheConfigurationException Unable to instantiate serializer for %s
ISPN000414 org.infinispan.commons.CacheConfigurationException Global security authorization should be enabled if cache authorization enabled.
ISPN000415 WARN The %s is no longer supported since version %s. Attribute %s on line %d will be ignored.
ISPN000417 org.infinispan.commons.CacheConfigurationException It is not possible for a store to be transactional in a non-transactional cache.
ISPN000418 org.infinispan.commons.CacheConfigurationException It is not possible for a store to be transactional when passivation is enabled.
ISPN000419 WARN Eviction of an entry invoked without an explicit eviction strategy for cache %s
ISPN000420 org.infinispan.commons.CacheConfigurationException Cannot enable '%s' in invalidation caches!
ISPN000421 ERROR Error while handling view %s
ISPN000422 org.infinispan.util.concurrent.TimeoutException Failed waiting for topology %d
ISPN000423 org.infinispan.commons.CacheConfigurationException Duplicate id found! AdvancedExternalizer id=%d is shared by another externalizer (%s)
ISPN000424 org.infinispan.commons.CacheConfigurationException Memory eviction is enabled, please specify a maximum size or count greater than zero
ISPN000427 org.infinispan.util.concurrent.TimeoutException Timeout after %s waiting for acks (%s). Id=%s
ISPN000428 WARN '%1$s' at %3$s has been deprecated. Please use '%2$s' instead
ISPN000429 org.infinispan.transaction.WriteSkewException On key %s previous read version (%s) is different from currently read version (%s)
ISPN000430 org.infinispan.commons.CacheConfigurationException %s cannot be shared
ISPN000432 org.infinispan.commons.CacheConfigurationException Missing configuration for default cache '%s' declared on container
ISPN000433 org.infinispan.commons.CacheConfigurationException A default cache has been requested, but no cache has been set as default for this container
ISPN000435 org.infinispan.commons.CacheConfigurationException Cache manager initialized with a default cache configuration but without a name for it. Set it in the GlobalConfiguration.
ISPN000436 org.infinispan.commons.CacheConfigurationException Cache '%s' has been requested, but no matching cache configuration exists
ISPN000437 WARN Unable to validate %s with the implementing store as the @ConfigurationFor annotation is missing
ISPN000438 org.infinispan.commons.CacheConfigurationException Cache with name %s is defined more than once!
ISPN000439 INFO Received new cross-site view: %s
ISPN000440 ERROR Error sending response for request %d@%s, command %s
ISPN000441 org.infinispan.commons.CacheConfigurationException Unsupported async cache mode '%s' for transactional caches
ISPN000443 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. In order for a cache loader to be transactional, it must also be shared.
ISPN000444 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. A cache loader cannot be both Asynchronous and transactional.
ISPN000446 org.infinispan.commons.CacheConfigurationException Multiple sites have the same name '%s'. This configuration is not valid.
ISPN000448 org.infinispan.commons.CacheConfigurationException 'awaitInitialTransfer' can be enabled only if cache mode is distributed or replicated.
ISPN000449 org.infinispan.commons.CacheConfigurationException Timeout value for cross-site replication state transfer must be equal to or greater than one.
ISPN000450 org.infinispan.commons.CacheConfigurationException Wait time between retries for cross-site replication state transfer must be equal to or greater than one.
ISPN000451 org.infinispan.util.concurrent.TimeoutException Timed out waiting for view %d, current view is %d
ISPN000452 ERROR Failed to update topology for cache %s
ISPN000453 org.infinispan.commons.CacheConfigurationException Attempt to define configuration for cache %s which already exists
ISPN000455 ERROR Failure during leaver transactions cleanup
ISPN000461 org.infinispan.commons.CacheException Class %s should be a subclass of %s
ISPN000462 java.lang.IllegalStateException ConflictManager.getConflicts() already in progress
ISPN000463 java.lang.IllegalStateException Unable to retrieve conflicts as StateTransfer is currently in progress for cache '%s'
ISPN000464 WARN The partition handling 'enabled' attribute has been deprecated. Please update your configuration to use 'when-split' instead
ISPN000466 WARN Exception encountered when trying to resolve conflict on Keys '%s': %s
ISPN000467 org.infinispan.commons.CacheConfigurationException Scattered cache supports only single owner.
ISPN000468 org.infinispan.commons.CacheConfigurationException Invalidation batch size configuration options applies only to scattered caches.
ISPN000469 org.infinispan.commons.CacheConfigurationException Scattered cache does not support transactional mode.
ISPN000470 ERROR Failed confirming revoked segments. State transfer cannot continue.
ISPN000471 ERROR Failed processing values received from remote node during rebalance.
ISPN000472 org.infinispan.commons.IllegalLifecycleStateException Cache manager is stopping
ISPN000473 ERROR Invalid message type %s received from %s
ISPN000474 ERROR Error processing request %d@%s
ISPN000475 ERROR Error processing response for request %d from %s
ISPN000476 org.infinispan.util.concurrent.TimeoutException Timed out waiting for responses for request %d from %s after %s
ISPN000477 ERROR Cannot perform operation %s for site %s
ISPN000478 org.infinispan.commons.CacheException Couldn't find a local transaction corresponding to remote site transaction %s
ISPN000479 java.lang.IllegalStateException LocalTransaction not found but present in the tx table for remote site transaction %s
ISPN000480 WARN Ignoring versions invalidation from topology %d, current topology is %d
ISPN000481 org.infinispan.commons.CacheException Cannot create remote transaction %s, the originator is not in the cluster view
ISPN000482 org.infinispan.commons.CacheException Cannot create remote transaction %s, already completed
ISPN000484 org.infinispan.commons.CacheConfigurationException Wildcards not allowed in cache names: '%s'
ISPN000485 org.infinispan.commons.CacheConfigurationException Configuration '%s' matches multiple wildcard templates
ISPN000486 org.infinispan.commons.dataconversion.EncodingException Cannot register Wrapper: duplicate Id %d
ISPN000487 org.infinispan.commons.dataconversion.EncodingException Wrapper with class '%s' not found
ISPN000488 org.infinispan.commons.dataconversion.EncodingException Wrapper with Id %d not found
ISPN000489 org.infinispan.commons.dataconversion.EncodingException Cannot register Encoder: duplicate Id %d
ISPN000490 org.infinispan.commons.dataconversion.EncodingException Encoder with class '%s' not found
ISPN000491 org.infinispan.commons.dataconversion.EncodingException Encoder with Id %d not found
ISPN000492 org.infinispan.commons.dataconversion.EncodingException Cannot find transcoder between '%s' to '%s'
ISPN000495 org.infinispan.commons.dataconversion.EncodingException %s encountered error transcoding content
ISPN000497 org.infinispan.commons.dataconversion.EncodingException %s encountered unsupported content '%s' during transcoding
ISPN000499 org.infinispan.commons.CacheConfigurationException Could not serialize the configuration of cache '%s' (%s)
ISPN000500 org.infinispan.commons.CacheConfigurationException Cannot create clustered configuration for cache '%s' because configuration %n%s%n is incompatible with the existing configuration %n%s
ISPN000501 org.infinispan.commons.CacheConfigurationException Cannot persist cache configuration as global state is disabled
ISPN000502 org.infinispan.commons.CacheConfigurationException Error while persisting global configuration state
ISPN000504 org.infinispan.commons.CacheConfigurationException Size (bytes) based eviction needs either off-heap or a binary compatible storage configured in the cache encoding
ISPN000506 org.infinispan.commons.CacheConfigurationException Biased reads are supported only in scattered cache. Maybe you were looking for L1?
ISPN000507 org.infinispan.commons.CacheConfigurationException Cache %s already exists
ISPN000508 org.infinispan.commons.CacheConfigurationException Cannot rename file %s to %s
ISPN000509 java.lang.IllegalArgumentException Unable to add a 'null' EntryMergePolicyFactory
ISPN000510 org.infinispan.commons.CacheConfigurationException ConfigurationStrategy set to CUSTOM, but none specified
ISPN000511 org.infinispan.commons.CacheConfigurationException ConfigurationStrategy cannot be set to MANAGED in embedded mode
ISPN000512 org.infinispan.commons.CacheConfigurationException Cannot acquire lock '%s' for persistent global state
ISPN000513 org.infinispan.commons.CacheConfigurationException Exception based eviction requires a transactional cache that doesn't allow for 1 phase commit or synchronizations
ISPN000514 org.infinispan.interceptors.impl.ContainerFullException Container eviction limit %d reached, write operation(s) is blocked
ISPN000515 java.lang.UnsupportedOperationException The configuration is immutable
ISPN000516 org.infinispan.commons.CacheConfigurationException The state file for '%s' is invalid. Startup halted to prevent further corruption of persistent state
ISPN000517 WARN Ignoring cache topology from %s during merge: %s
ISPN000518 DEBUG Updating topology for cache %s, topology %s, availability mode %s
ISPN000519 DEBUG Updating stable topology for cache %s, topology %s
ISPN000520 DEBUG Updating availability mode for cache %s from %s to %s, topology %s
ISPN000521 DEBUG Cache %s recovered after merge with topology = %s, availability mode %s
ISPN000522 DEBUG Conflict resolution starting for cache %s with topology %s
ISPN000523 DEBUG Conflict resolution finished for cache %s with topology %s
ISPN000524 ERROR Conflict resolution failed for cache %s with topology %s
ISPN000525 DEBUG Conflict resolution cancelled for cache %s with topology %s
ISPN000527 org.infinispan.persistence.spi.PersistenceException Maximum startup attempts exceeded for store %s
ISPN000528 org.infinispan.partitionhandling.AvailabilityException Cannot acquire lock %s as this partition is DEGRADED
ISPN000529 org.infinispan.commons.CacheException Class '%s' blocked by deserialization allow list. Include the class name in the server allow list to authorize.
ISPN000530 WARN Unsupported async cache mode '%s' for transactional caches, forcing %s
ISPN000531 org.infinispan.commons.CacheConfigurationException Store or loader %s must implement SegmentedLoadWriteStore or its config must extend AbstractSegmentedStoreConfiguration if configured as segmented
ISPN000532 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. If a cache loader is configured with passivation, the cache loader cannot be shared in a cluster!
ISPN000533 org.infinispan.commons.dataconversion.EncodingException Content '%s (MediaType: '%s') cannot be converted to '%s'
ISPN000534 org.infinispan.commons.CacheConfigurationException Grouping requires OBJECT storage type but was: %s
ISPN000535 org.infinispan.commons.CacheConfigurationException Grouping requires application/x-java-object storage type but was: {key=%s, value=%s}
ISPN000537 org.infinispan.commons.CacheConfigurationException Factory doesn't know how to construct component %s
ISPN000538 ERROR Error stopping module %s
ISPN000539 org.infinispan.commons.CacheConfigurationException Duplicate JGroups stack '%s'
ISPN000540 org.infinispan.commons.CacheConfigurationException No such JGroups stack '%s'
ISPN000541 org.infinispan.commons.CacheConfigurationException Error while trying to create a channel using the specified configuration '%s'
ISPN000542 org.infinispan.commons.CacheConfigurationException Invalid parser scope. Expected '%s' but was '%s'
ISPN000543 org.infinispan.commons.CacheConfigurationException Cannot use stack.position when stack.combine is '%s'
ISPN000544 org.infinispan.commons.CacheConfigurationException The protocol '%s' does not exist in the base stack for operation '%s'
ISPN000545 org.infinispan.commons.CacheConfigurationException Inserting protocol '%s' in a JGroups stack requires the 'stack.position' attribute
ISPN000546 org.infinispan.commons.CacheConfigurationException Duplicate remote site '%s' in stack '%s'
ISPN000547 org.infinispan.commons.CacheConfigurationException JGroups stack '%s' declares remote sites but does not include the RELAY2 protocol.
ISPN000548 org.infinispan.commons.CacheConfigurationException JGroups stack '%s' has a RELAY2 protocol without remote sites.
ISPN000549 org.infinispan.commons.CacheConfigurationException A store cannot be shared when utilised with a local cache.
ISPN000550 org.infinispan.commons.CacheConfigurationException Invalidation mode only supports when-split=ALLOW_READ_WRITES
ISPN000551 WARN The custom interceptors configuration has been deprecated and will be ignored in the future
ISPN000553 WARN Ignoring 'marshaller' attribute. Common marshallers are already available at runtime, and to deploy a custom marshaller, consult the 'Encoding' section in the user guide
ISPN000554 WARN jboss-marshalling is deprecated and planned for removal
ISPN000555 ERROR Unable to set method %s accessible
ISPN000556 INFO Starting user marshaller '%s'
ISPN000557 org.infinispan.commons.CacheConfigurationException Unable to configure JGroups Stack '%s'
ISPN000558 org.infinispan.commons.CacheConfigurationException The store location '%s' is not a child of the global persistent location '%s'
ISPN000559 WARN Cannot marshall '%s'
ISPN000560 WARN The AdvancedExternalizer configuration has been deprecated and will be removed in the future
ISPN000561 org.infinispan.commons.CacheConfigurationException Chunk size must be positive, got %d
ISPN000562 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. If a cache loader is configured with purgeOnStartup, the cache loader cannot be shared in a cluster!
ISPN000563 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. This implementation does not support being segmented!
ISPN000564 WARN Configured store '%s' is segmented and may use a large number of file descriptors
ISPN000565 org.infinispan.commons.CacheConfigurationException Index.%s is no longer supported. Please update your configuration!
ISPN000566 org.infinispan.commons.CacheConfigurationException Thread Pool Factory %s is blocking, but pool %s requires non blocking threads
ISPN000569 WARN Unable to persist Infinispan internal caches as no global state enabled
ISPN000570 java.lang.IllegalArgumentException Unexpected response from %s: %s
ISPN000571 org.infinispan.commons.CacheConfigurationException RELAY2 not found in the protocol stack. Cannot perform cross-site operations.
ISPN000572 WARN index mode attribute is deprecated and should no longer be specified because its value is automatically detected. Most previously supported values are no longer supported. Please check the upgrade guide.
ISPN000573 org.infinispan.commons.CacheConfigurationException Cannot recreate persisted configuration for cache '%s' because configuration %n%s%n is incompatible with the existing configuration %n%s
ISPN000574 WARN Global state cannot persisted because it is incomplete (usually caused by errors at startup).
ISPN000575 org.infinispan.commons.CacheConfigurationException PartitionStrategy must be ALLOW_READ_WRITES when numOwners is 1
ISPN000576 org.infinispan.commons.CacheConfigurationException Cross-site replication not available for local cache.
ISPN000577 org.infinispan.commons.marshall.MarshallingException Converting from unwrapped protostream payload requires the 'type' parameter to be supplied in the destination MediaType
ISPN000578 INFO Migrating '%s' persisted data to new format...
ISPN000579 INFO '%s' persisted data successfully migrated.
ISPN000580 org.infinispan.persistence.spi.PersistenceException Failed to migrate '%s' persisted data.
ISPN000581 org.infinispan.commons.CacheConfigurationException The indexing 'enabled' and the legacy 'index' configs attributes are mutually exclusive
ISPN000582 org.infinispan.commons.CacheConfigurationException A single indexing directory provider is allowed per cache configuration. Setting multiple individual providers for the indexes belonging to a cache is not allowed.
ISPN000583 org.infinispan.commons.CacheConfigurationException Cannot configure both maxCount and maxSize in memory configuration
ISPN000584 org.infinispan.commons.CacheConfigurationException The memory attribute(s) %s have been deprecated and cannot be used in conjunction with the new configuration
ISPN000585 WARN Single media-type was specified for keys and values, ignoring individual configurations
ISPN000586 WARN The memory configuration element '%s' has been deprecated. Please update your configuration
ISPN000587 org.infinispan.commons.CacheConfigurationException Cannot change max-size since max-count is already defined
ISPN000588 org.infinispan.commons.CacheConfigurationException Cannot change max-count since max-size is already defined
ISPN000589 org.infinispan.commons.CacheConfigurationException A store cannot be configured with both preload and purgeOnStartup
ISPN000590 org.infinispan.commons.CacheConfigurationException Store cannot be configured with both read and write only!
ISPN000591 org.infinispan.commons.CacheConfigurationException Store cannot be configured with purgeOnStartup, shared or passivation if it is read only!
ISPN000592 org.infinispan.commons.CacheConfigurationException Store cannot be configured with fetchPersistenceState or preload if it is write only!
ISPN000593 org.infinispan.commons.CacheConfigurationException Store %s cannot be configured to be %s as the implementation specifies it is already %s!
ISPN000594 org.infinispan.commons.CacheConfigurationException At most one store can be set to 'preload'!
ISPN000595 WARN ClusterLoader has been deprecated and will be removed in a future version with no direct replacement
ISPN000596 WARN Indexing auto-config attribute is deprecated. Please check the upgrade guide.
ISPN000597 org.infinispan.commons.CacheConfigurationException Store %s cannot be configured to be transactional as it does not contain the TRANSACTIONAL characteristic
ISPN000598 org.infinispan.commons.CacheConfigurationException Store must specify a location when global state is disabled
ISPN000598 org.infinispan.commons.CacheConfigurationException Store '%s' must specify the '%s' attribute when global state is disabled
ISPN000599 WARN Configuration for cache '%s' does not define the encoding for keys or values. If you use operations that require data conversion or queries, you should configure the cache with a specific MediaType for keys or values.
ISPN000600 org.infinispan.commons.CacheConfigurationException Store %s cannot be configured to be shared as it does not contain the SHARED characteristic
ISPN000601 org.infinispan.commons.CacheConfigurationException Store %s cannot be configured to be segmented as it does not contain the SEGMENTABLE characteristic
ISPN000602 WARN Conversions between JSON and Java Objects are deprecated and will be removed in a future version. To read/write values as JSON, it is recommended to define a protobuf schema and store data in the cache using 'application/x-protostream' as MediaType
ISPN000603 org.infinispan.commons.CacheConfigurationException Cannot handle cross-site request from site '%s'. Cache '%s' not found.
ISPN000604 org.infinispan.commons.CacheConfigurationException Cannot handle cross-site request from site '%s'. Cache '%s' is stopped.
ISPN000605 org.infinispan.commons.CacheConfigurationException Cannot handle cross-site request from site '%s'. Cache '%s' is not clustered.
ISPN000606 ERROR Remote site '%s' has an invalid cache configuration. Taking the backup location offline.
ISPN000607 org.infinispan.commons.CacheConfigurationException The XSiteEntryMergePolicy is missing. The cache configuration must include a merge policy.
ISPN000608 FATAL [IRAC] Unexpected error occurred.
ISPN000609 DEBUG Cannot obtain cache '%s' as it is in FAILED state. Please check the configuration
ISPN000610 org.infinispan.commons.CacheConfigurationException Cache configuration must not declare indexed entities if it is not indexed
ISPN000611 org.infinispan.commons.CacheConfigurationException Invalid index storage
ISPN000612 WARN Indexing configuration using properties has been deprecated and will be removed in a future version, please consult the docs for the replacements. The following properties have been found: '%s'
ISPN000613 WARN Indexing configuration using properties has been deprecated and will be removed in a future version, please use the and elements to configure indexing behavior.
ISPN000614 org.infinispan.commons.CacheConfigurationException It is not allowed to have different indexing configuration for each indexed type in a cache.
ISPN000615 org.infinispan.commons.marshall.MarshallingException Unable to unmarshall '%s' as a marshaller is not present in the user or global SerializationContext
ISPN000616 org.infinispan.persistence.spi.PersistenceException Unsupported persisted data version: %s
ISPN000617 java.lang.IllegalArgumentException Site '%s' not found.
ISPN000618 WARN Cleanup failed for cross-site state transfer. Invoke the cancel-push-state(%s) command if any nodes indicate pending operations to push state.
ISPN000619 WARN Cleanup failed for cross-site state transfer. Invoke the cancel-receive(%s) command in site %s if any nodes indicate pending operations to receive state.
ISPN000620 org.infinispan.commons.CacheException Cross-site state transfer to '%s' already started
ISPN000621 org.infinispan.commons.CacheConfigurationException Element '%1$s' has been removed at %3$s. Please use element '%2$s' instead
ISPN000622 org.infinispan.commons.CacheConfigurationException Element '%s' at %s has been removed with no replacement
ISPN000623 org.infinispan.commons.CacheConfigurationException Attribute '%1$s' has been removed at %3$s. Please use attribute '%2$s' instead
ISPN000624 org.infinispan.commons.CacheConfigurationException Attribute '%s' at %s has been removed with no replacement
ISPN000625 WARN Index path not provided and global state disabled, will use the current working directory for storage.
ISPN000626 WARN Index path '%s' is not absolute and global state is disabled, will use a dir relative to the current working directory.
ISPN000627 org.infinispan.commons.CacheConfigurationException Invalid cache loader configuration for '%s'. This implementation only supports being segmented!
ISPN000628 org.infinispan.commons.CacheConfigurationException Invalid cache roles '%s'
ISPN000629 WARN Exception completing partial completed transaction %s. Retrying later.
ISPN000633 org.infinispan.commons.CacheConfigurationException Cross-site state transfer mode cannot be null.
ISPN000634 org.infinispan.commons.CacheConfigurationException Cross-site automatic state transfer is not compatible with SYNC backup strategy.
ISPN000635 WARN [%s] Failed to receive a response from any nodes. Automatic cross-site state transfer to site '%s' is not started.
ISPN000636 org.infinispan.commons.CacheConfigurationException State transfer timeout (%d) must be greater than or equal to the remote timeout (%d)
ISPN000637 org.infinispan.util.concurrent.TimeoutException Timeout waiting for topology %d, current topology is %d
ISPN000638 org.infinispan.util.concurrent.TimeoutException Timeout waiting for topology %d transaction data
ISPN000640 WARN SingleFileStore has been deprecated and will be removed in a future version, replaced by SoftIndexFileStore
ISPN000641 org.infinispan.transaction.xa.InvalidTransactionException The transaction %s is already rolled back
ISPN000642 INFO Attempting to recover possibly corrupted data file %s
ISPN000643 INFO '%s' persisted data successfully recovered %d entries.
ISPN000644 org.infinispan.persistence.spi.PersistenceException Failed to recover '%s' persisted data.
ISPN000645 org.infinispan.commons.CacheConfigurationException Asynchronous cache modes, such as %s, cannot use SYNC touch mode for maximum idle expiration.
ISPN000646 java.lang.IllegalArgumentException capacityFactor must be positive
ISPN000647 java.lang.IllegalArgumentException The configuration for internal cache '%s' cannot be modified
ISPN000648 org.infinispan.persistence.spi.PersistenceException Cache '%s' is non empty, cannot add store.
ISPN000649 org.infinispan.commons.CacheConfigurationException SingleFileStore does not support max-entries when segmented
ISPN000650 org.infinispan.persistence.spi.PersistenceException Read invalid data in SingleFileStore file %s, please remove the file and retry
ISPN000651 org.infinispan.commons.CacheConfigurationException Max idle is not allowed while using a store without passivation
ISPN000652 WARN Max idle is not supported when using a store
ISPN000653 WARN The '%s' attribute on the '%s' element has been deprecated. Please use the '%s' attribute instead
ISPN000654 org.infinispan.persistence.spi.PersistenceException Problem encountered when preloading key %s!
ISPN000655 org.infinispan.commons.dataconversion.EncodingException Unable to convert text content to JSON: '%s'
ISPN000656 org.infinispan.commons.CacheConfigurationException The backup '%s' configuration 'failure-policy=%s' is not valid with an ASYNC backup strategy.
ISPN000657 org.infinispan.commons.CacheConfigurationException The backup '%s' configuration 'failure-policy-class' is not compatible with 'failure-policy=%s'. Use 'failure-policy="CUSTOM"'
ISPN000658 org.infinispan.util.concurrent.TimeoutException Initial state transfer timed out for cache %s on %s
ISPN000659 org.infinispan.commons.CacheConfigurationException Component %s failed to start
ISPN000660 ERROR %s start failed, stopping any running components
ISPN000661 WARN '%s' has been deprecated with no replacement.
ISPN000662 WARN Failed to transfer cross-site tombstones to %s for segments %s.
ISPN000663 org.infinispan.commons.CacheConfigurationException Name must be less than 256 bytes, current name '%s' exceeds the size.
ISPN000664 org.infinispan.commons.CacheConfigurationException Invalid index startup mode: %s
ISPN000665 ERROR There was an error in submitted periodic task with %s, not rescheduling.
ISPN000666 org.infinispan.commons.CacheConfigurationException Transport clusterName cannot be null.
ISPN000667 org.infinispan.commons.CacheConfigurationException Transport node-name is not set.
ISPN000668 org.infinispan.commons.CacheConfigurationException Transport node-name must be present in raft-members: %s
ISPN000669 java.lang.IllegalArgumentException FORK protocol required on JGroups channel.
ISPN000670 ERROR Error creating fork channel for %s
ISPN000671 WARN RAFT protocol is not available. Reason: %s
ISPN000672 INFO RAFT protocol is available.
ISPN000673 org.infinispan.commons.CacheConfigurationException Cannot persist RAFT data as global state is disabled
ISPN000674 org.infinispan.persistence.spi.PersistenceException There was an error when resetting the SIFS index for cache %s
ISPN000675 ERROR Caught exception while invoking a event logger listener!
ISPN000676 WARN Store '%s'#isAvailable check threw Exception
ISPN000677 WARN Store '%s'#isAvailable completed Exceptionally
ISPN000678 WARN Persistence is unavailable because of store %s
ISPN000679 INFO Persistence is now available
ISPN000680 org.infinispan.commons.CacheConfigurationException Expiration (Max idle or Lifespan) is not allowed while using a store '%s' that does not support expiration, unless it is configured as read only
ISPN000681 org.infinispan.commons.CacheConfigurationException Missing required property '%s' for attribute '%s' at %s
ISPN000686 org.infinispan.commons.CacheConfigurationException Attribute '%2$s' of element '%1$s' has an illegal value '%3$s' at %4$s: %5$s
ISPN000687 org.infinispan.commons.CacheConfigurationException Attribute '%2$s' of element '%1$s' has an illegal value '%3$s' at %5$s. Expecting one of %4$s.
ISPN000688 WARN Attribute '%s' of element '%s' has been deprecated since schema version %d.%d. Refer to the upgrade guide
ISPN000689 WARN Recovering cache '%s' but there are missing members, known members %s of a total of %s
ISPN000901 WARN Property %s could not be replaced as intended!
ISPN000902 WARN Invocation of %s threw an exception %s. Exception is ignored.
ISPN000904 org.infinispan.commons.CacheConfigurationException Error while initializing SSL context
ISPN000905 ERROR Unable to load %s from any of the following classloaders: %s
ISPN000906 WARN Unable to convert string property [%s] to an int! Using default value of %d
ISPN000907 WARN Unable to convert string property [%s] to a long! Using default value of %d
ISPN000908 WARN Unable to convert string property [%s] to a boolean! Using default value of %b
ISPN000909 java.lang.IllegalArgumentException Unwrapping %s to a type of %s is not a supported
ISPN000910 org.infinispan.commons.CacheConfigurationException Illegal value for thread pool parameter(s) %s, it should be: %s
ISPN000911 java.lang.IllegalArgumentException Unwrapping of any instances in %s to a type of %s is not a supported
ISPN000912 java.lang.IllegalStateException Expecting a protected configuration for %s
ISPN000913 java.lang.IllegalStateException Expecting an unprotected configuration for %s
ISPN000914 java.lang.IllegalArgumentException Duplicate attribute '%s' in attribute set '%s'
ISPN000915 java.lang.IllegalArgumentException No such attribute '%s' in attribute set '%s'
ISPN000916 java.lang.IllegalArgumentException No attribute copier for type '%s'
ISPN000918 java.io.IOException Cannot find resource '%s'
ISPN000919 org.infinispan.commons.CacheConfigurationException Multiple errors encountered while validating configuration
ISPN000920 java.lang.UnsupportedOperationException Unable to load file using scheme %s
ISPN000921 java.lang.SecurityException The alias '%s' does not exist in the key store '%s'
ISPN000922 ERROR Exception during rollback
ISPN000923 ERROR Error enlisting resource
ISPN000924 ERROR beforeCompletion() failed for %s
ISPN000925 ERROR Unexpected error from resource manager!
ISPN000926 ERROR afterCompletion() failed for %s
ISPN000927 WARN exception while committing
ISPN000928 ERROR end() failed for %s
ISPN000929 org.infinispan.commons.dataconversion.EncodingException Media type cannot be empty or null!
ISPN000930 org.infinispan.commons.dataconversion.EncodingException Invalid media type '%s': must contain a type and a subtype separated by '/'
ISPN000931 org.infinispan.commons.dataconversion.EncodingException Invalid media type '%s': invalid param '%s'
ISPN000932 org.infinispan.commons.dataconversion.EncodingException Invalid media type list '%s': comma expected
ISPN000933 org.infinispan.commons.dataconversion.EncodingException Invalid media type list '%s': type expected after comma
ISPN000934 org.infinispan.commons.dataconversion.EncodingException Errors converting '%s' from '%s' to '%s'
ISPN000935 org.infinispan.commons.dataconversion.EncodingException Invalid Weight '%s'. Supported values are between 0 and 1.0
ISPN000936 org.infinispan.commons.CacheException Class '%s' blocked by deserialization allow list. Adjust the configuration serialization allow list regular expression to include this class.
ISPN000937 org.infinispan.commons.dataconversion.EncodingException Invalid media type. Expected '%s' but got '%s'
ISPN000938 org.infinispan.commons.dataconversion.EncodingException Invalid text content '%s'
ISPN000939 org.infinispan.commons.dataconversion.EncodingException Conversion of content '%s' from '%s' to '%s' not supported
ISPN000940 org.infinispan.commons.dataconversion.EncodingException Invalid application/x-www-form-urlencoded content: '%s'
ISPN000941 org.infinispan.commons.dataconversion.EncodingException Error encoding content '%s' to '%s'
ISPN000942 WARN Unable to convert property [%s] to an enum! Using default value of %d
ISPN000944 org.infinispan.commons.CacheConfigurationException Feature %s is disabled!
ISPN000946 INFO Using OpenSSL Provider
ISPN000947 INFO Using Java SSL Provider
ISPN000948 org.infinispan.commons.dataconversion.EncodingException Unsupported conversion of '%s' from '%s' to '%s'
ISPN000949 org.infinispan.commons.dataconversion.EncodingException Unsupported conversion of '%s' to '%s'
ISPN000950 org.infinispan.commons.dataconversion.EncodingException Encoding '%s' is not supported
ISPN000951 org.infinispan.commons.CacheConfigurationException Invalid value %s for attribute %s: must be a number greater than zero
ISPN000952 INFO OpenTelemetry instance loaded: %s
ISPN000953 INFO OpenTelemetry integration is disabled
ISPN000954 WARN OpenTelemetry cannot be configured
ISPN000955 java.lang.IllegalArgumentException '%s' is not a valid boolean value (true|false|yes|no|y|n|on|off)
ISPN000956 java.lang.IllegalArgumentException '%s' is not one of %s
ISPN000957 ERROR Cannot load %s
ISPN000958 java.lang.IllegalArgumentException Cannot parse bytes quantity %s
ISPN000959 WARN Property '%s' has been deprecated. Please use '%s' instead.
ISPN000960 java.lang.IllegalArgumentException No attribute '%s' in '%s'
ISPN000961 java.lang.IllegalArgumentException Incompatible attribute '%s.%s' existing value='%s', new value='%s'
ISPN000962 java.lang.IllegalStateException Cannot modify protected attribute '%s'
ISPN000963 java.lang.IllegalArgumentException Invalid configuration in '%s'
ISPN004001 WARN Could not find '%s' file in classpath, using defaults.
ISPN004002 INFO Cannot perform operations on a cache associated with an unstarted RemoteCacheManager. Use RemoteCacheManager.start before using the remote cache.
ISPN004003 org.infinispan.client.hotrod.exceptions.InvalidResponseException Invalid magic number. Expected %#x and received %#x
ISPN004005 WARN Error received from the server: %s
ISPN004006 INFO Server sent new topology view (id=%d, age=%d) containing %d addresses: %s
ISPN004007 ERROR Exception encountered. Retry %d out of %d
ISPN004011 WARN No hash function configured for version: %d
ISPN004014 INFO New server added(%s), adding to the pool.
ISPN004015 WARN Failed adding new server %s
ISPN004016 INFO Server not in cluster anymore(%s), removing from the pool.
ISPN004021 INFO Infinispan version: %s
ISPN004024 org.infinispan.commons.CacheConfigurationException SSL Enabled but no TrustStore specified
ISPN004025 org.infinispan.commons.CacheConfigurationException A password is required to open the KeyStore '%s'
ISPN004026 org.infinispan.commons.CacheConfigurationException A password is required to open the TrustStore '%s'
ISPN004027 org.infinispan.commons.CacheConfigurationException Cannot configure custom KeyStore and/or TrustStore when specifying a SSLContext
ISPN004028 org.infinispan.commons.CacheConfigurationException Unable to parse server IP address %s
ISPN004029 org.infinispan.commons.CacheConfigurationException Invalid max_retries (value=%s). Value should be greater or equal than zero.
ISPN004030 org.infinispan.commons.CacheConfigurationException Cannot enable authentication without specifying either a username, a token, a client Subject or a CallbackHandler
ISPN004031 java.lang.SecurityException The selected authentication mechanism '%s' is not among the supported server mechanisms: %s
ISPN004034 org.infinispan.client.hotrod.exceptions.HotRodClientException Unable to unmarshall bytes %s
ISPN004035 org.infinispan.commons.CacheListenerException Caught exception [%s] while invoking method [%s] on listener instance: %s
ISPN004036 org.infinispan.client.hotrod.event.IncorrectClientListenerException Methods annotated with %s must accept exactly one parameter, of assignable from type %s
ISPN004037 org.infinispan.client.hotrod.event.IncorrectClientListenerException Methods annotated with %s should have a return type of void.
ISPN004038 ERROR Unexpected error consuming event %s
ISPN004039 WARN Unable to complete reading event from server %s
ISPN004040 org.infinispan.client.hotrod.event.IncorrectClientListenerException Cache listener class %s must be annotated with org.infinispan.client.hotrod.annotation.ClientListener
ISPN004041 org.infinispan.client.hotrod.exceptions.HotRodClientException Unknown event type %s received
ISPN004042 ERROR Unable to set method %s accessible
ISPN004045 org.infinispan.commons.CacheConfigurationException When enabling near caching, number of max entries must be configured
ISPN004046 DEBUG Successfully closed remote iterator '%s'
ISPN004047 java.lang.IllegalStateException Invalid iteration id '%s'
ISPN004048 java.util.NoSuchElementException Invalid iteration id '%s'
ISPN004050 INFO Switched to cluster '%s'
ISPN004051 INFO Switched back to main cluster
ISPN004052 INFO Manually switched to cluster '%s'
ISPN004053 INFO Manually switched back to main cluster
ISPN004054 org.infinispan.commons.CacheConfigurationException Name of the failover cluster needs to be specified
ISPN004055 org.infinispan.commons.CacheConfigurationException Host needs to be specified in server definition of failover cluster
ISPN004056 org.infinispan.commons.CacheConfigurationException At least one server address needs to be specified for failover cluster %s
ISPN004057 org.infinispan.commons.CacheConfigurationException Duplicate failover cluster %s has been specified
ISPN004058 org.infinispan.client.hotrod.event.IncorrectClientListenerException The client listener must use raw data when it uses a query as a filter: %s
ISPN004059 org.infinispan.client.hotrod.event.IncorrectClientListenerException The client listener must use the '%s' filter/converter factory
ISPN004061 WARN Ignoring error when closing iteration '%s'
ISPN004062 DEBUG Started iteration '%s'
ISPN004063 DEBUG Channel to %s obtained for iteration '%s'
ISPN004064 TRACE Tracking key %s belonging to segment %d, already tracked? = %b
ISPN004067 org.infinispan.commons.CacheConfigurationException Cannot specify both a callback handler and a username/token for authentication
ISPN004069 org.infinispan.client.hotrod.exceptions.TransportException Connection to %s is not active.
ISPN004070 org.infinispan.client.hotrod.exceptions.HotRodClientException Failed to add client listener %s, server responded with status %d
ISPN004071 org.infinispan.client.hotrod.exceptions.TransportException Connection to %s was closed while waiting for response.
ISPN004072 ERROR Cannot create another async thread. Please increase 'infinispan.client.hotrod.default_executor_factory.pool_size' (current value is %d).
ISPN004074 INFO Native Epoll transport not available, using NIO instead: %s
ISPN004075 org.infinispan.commons.CacheConfigurationException TrustStoreFileName and TrustStorePath are mutually exclusive
ISPN004076 java.lang.IllegalStateException Unknown message id %d; cannot find matching request
ISPN004077 org.infinispan.client.hotrod.exceptions.TransportException Closing channel %s due to error in unknown operation.
ISPN004078 org.infinispan.client.hotrod.exceptions.HotRodClientException This channel is about to be closed and does not accept any further operations.
ISPN004079 java.lang.IllegalStateException Unexpected listenerId %s
ISPN004080 java.lang.IllegalStateException Event should use messageId of previous Add Client Listener operation but id is %d and operation is %s
ISPN004082 org.infinispan.commons.CacheConfigurationException TransactionMode must be non-null.
ISPN004083 org.infinispan.commons.CacheConfigurationException TransactionManagerLookup must be non-null
ISPN004084 org.infinispan.client.hotrod.exceptions.CacheNotTransactionalException Cache %s doesn't support transactions. Please check the documentation how to configure it properly.
ISPN004085 ERROR Error checking server configuration for transactional cache %s
ISPN004086 WARN Exception caught while preparing transaction %s
ISPN004087 WARN Use of maxIdle expiration with a near cache is unsupported.
ISPN004088 org.infinispan.client.hotrod.exceptions.HotRodClientException Transactions timeout must be positive
ISPN004089 org.infinispan.client.hotrod.exceptions.HotRodClientException TransactionTable is not started!
ISPN004090 org.infinispan.client.hotrod.exceptions.InvalidResponseException [%s] Invalid response operation. Expected %#x and received %#x
ISPN004091 org.infinispan.client.hotrod.exceptions.HotRodClientException MBean registration failed
ISPN004092 org.infinispan.client.hotrod.exceptions.HotRodClientException MBean unregistration failed
ISPN004093 org.infinispan.commons.CacheConfigurationException OAUTHBEARER mechanism selected without providing a token
ISPN004094 org.infinispan.commons.CacheConfigurationException Cannot specify both template name and configuration for '%s'
ISPN004095 java.lang.IllegalArgumentException Not a Hot Rod URI: %s
ISPN004096 java.lang.IllegalArgumentException Invalid property format in URI: %s
ISPN004097 java.lang.IllegalArgumentException Illegal attempt to redefine an already existing cache configuration: %s
ISPN004098 WARN Closing connection %s due to transport error
ISPN004099 WARN Remote iteration over the entire result set of query '%s' without using pagination options is inefficient for large result sets. Please consider using 'startOffset' and 'maxResults' options.
ISPN004100 WARN Error reaching the server during iteration
ISPN004101 WARN Configuration property '%s' has been deprecated
ISPN004102 org.infinispan.commons.CacheConfigurationException Near cache number of max entries must be a positive number when using bloom filter optimization, it was %d
ISPN004103 org.infinispan.commons.CacheConfigurationException Near cache with bloom filter requires pool max active to be 1, was %s, and exhausted action to be WAIT, was %s
ISPN004104 WARN Failed to load and create an optional ProtoStream serialization context initializer: %s
ISPN004105 WARN Reverting to the initial server list for caches %s
ISPN004106 WARN Invalid active count after closing channel %s
ISPN004107 WARN Invalid created count after closing channel %s
ISPN004108 INFO Native IOUring transport not available, using NIO instead: %s
ISPN004109 DEBUG OpenTelemetry API is not present in the classpath. Client context tracing will not be propagated.
ISPN004110 DEBUG OpenTelemetry API is present in the classpath and the tracing propagation is enabled. Client context tracing will be propagated.
ISPN004111 DEBUG OpenTelemetry API is present in the classpath, but the tracing propagation is not enabled. Client context tracing will not be propagated.
ISPN008001 ERROR Failed clearing cache store
ISPN008003 ERROR SQL failure while integrating state into store
ISPN008009 ERROR I/O error while unmarshalling from stream
ISPN008010 ERROR *UNEXPECTED* ClassNotFoundException.
ISPN008011 ERROR Error while creating table; used DDL statement: '%s'
ISPN008015 ERROR Could not find a connection in jndi under the name '%s'
ISPN008016 ERROR Could not lookup connection with datasource %s
ISPN008017 WARN Failed to close naming context.
ISPN008018 ERROR Sql failure retrieving connection from datasource
ISPN008019 ERROR Issues while closing connection %s
ISPN008022 WARN Unexpected sql failure
ISPN008023 WARN Failure while closing the connection to the database
ISPN008024 ERROR Error while storing string key to database; key: '%s'
ISPN008025 ERROR Error while removing string keys from database
ISPN008026 ERROR In order for JdbcStringBasedStore to support %s, the Key2StringMapper needs to implement TwoWayKey2StringMapper. You should either make %s implement TwoWayKey2StringMapper or disable the sql. See [https://jira.jboss.org/browse/ISPN-579] for more details.
ISPN008027 ERROR SQL error while fetching stored entry with key: %s, lockingKey: %s
ISPN008028 org.infinispan.commons.CacheConfigurationException Attribute '%2$s' has not been set on '%1$s'
ISPN008029 org.infinispan.commons.CacheConfigurationException A ConnectionFactory has not been specified for this store
ISPN008031 ERROR Error committing JDBC transaction
ISPN008032 ERROR Error during rollback of JDBC transaction
ISPN008033 org.infinispan.persistence.spi.PersistenceException Exception encountered when preparing JDBC store Tx
ISPN008036 WARN Unable to notify the PurgeListener of expired cache entries as the configured key2StringMapper does not implement %s
ISPN008037 org.infinispan.persistence.spi.PersistenceException Error while writing entries in batch to the database:
ISPN008038 org.infinispan.persistence.spi.PersistenceException Error whilst removing keys in batch from the database. Keys: %s
ISPN008039 org.infinispan.commons.CacheConfigurationException The existing store was created without segmentation enabled
ISPN008040 org.infinispan.commons.CacheConfigurationException The existing store was created with %d segments configured, but the cache is configured with %d
ISPN008041 ERROR Error retrieving JDBC metadata
ISPN008042 ERROR SQL failure while retrieving size
ISPN008043 org.infinispan.commons.CacheConfigurationException Primary key has multiple columns but no key message schema defined, which is required when there is more than one key column
ISPN008044 org.infinispan.commons.CacheConfigurationException Multiple non key columns but no value message schema defined, which is required when there is more than one value column
ISPN008045 org.infinispan.commons.CacheConfigurationException Primary key %s was not found in the key schema %s
ISPN008046 org.infinispan.commons.CacheConfigurationException Additional value columns %s found that were not part of the schema, make sure the columns returned match the value schema %s
ISPN008047 org.infinispan.commons.CacheConfigurationException Schema not found for : %s
ISPN008048 org.infinispan.commons.CacheConfigurationException Key cannot be embedded when the value schema %s is an enum
ISPN008049 org.infinispan.commons.CacheConfigurationException Repeated fields are not supported, found %s in schema %s
ISPN008050 org.infinispan.commons.CacheConfigurationException Duplicate name %s found for nested schema: %s
ISPN008051 org.infinispan.commons.CacheConfigurationException Schema contained a field %s that is required but wasn't found in the query for schema %s
ISPN008052 org.infinispan.commons.CacheConfigurationException Primary key %s was found in the value schema %s but embedded key was not true
ISPN008053 org.infinispan.commons.CacheConfigurationException Delete and select queries do not have matching arguments. Delete was %s and select was %s
ISPN008054 org.infinispan.commons.CacheConfigurationException Named parameter %s in upsert statement [%s] is not available in columns from selectAll statement [%s]
ISPN008055 org.infinispan.commons.CacheConfigurationException No parameters are allowed for select all statement %s
ISPN008056 org.infinispan.commons.CacheConfigurationException No parameters are allowed for delete all statement %s
ISPN008057 org.infinispan.commons.CacheConfigurationException No parameters are allowed for sizer statement %s
ISPN008058 org.infinispan.commons.CacheConfigurationException Not all key columns %s were returned from select all statement %s
ISPN008059 org.infinispan.commons.CacheConfigurationException Select parameter %s is not returned from select all statement %s, select statement is %s
ISPN008060 org.infinispan.commons.CacheConfigurationException Non-terminated named parameter declaration at position %d in statement: %s
ISPN008061 org.infinispan.commons.CacheConfigurationException Invalid character %s at position %d in statement: %s
ISPN008062 org.infinispan.commons.CacheConfigurationException Unnamed parameters are not allowed, found one at %d in statement %s
ISPN008063 org.infinispan.commons.CacheConfigurationException Provided table name %s is not in form of (.) where SCHEMA is optional
ISPN008064 org.infinispan.commons.CacheConfigurationException No primary keys found for table %s, check case sensitivity
ISPN008065 org.infinispan.commons.CacheConfigurationException No column found that wasn't a primary key for table: %s
ISPN008066 org.infinispan.commons.CacheConfigurationException Unable to detect database dialect from JDBC driver name or connection metadata. Please provide this manually using the 'dialect' property in your configuration. Supported database dialect strings are %s
ISPN008067 org.infinispan.commons.CacheConfigurationException The size, select and select all attributes must be set for a query store
ISPN008068 org.infinispan.commons.CacheConfigurationException The delete, delete all and upsert attributes must be set for a query store that allows writes
ISPN008069 org.infinispan.commons.CacheConfigurationException Key columns are required for QueryStore
ISPN008070 org.infinispan.commons.CacheConfigurationException Message name must not be null if embedded key is true
ISPN008071 org.infinispan.commons.CacheConfigurationException Table name must be non null
ISPN008072 WARN There was no JDBC metadata present in table %s, unable to confirm if segments are properly configured! Segments are assumed to be properly configured.
ISPN010005 org.infinispan.commons.CacheConfigurationException Cannot enable HotRod wrapping if a marshaller and/or an entryWrapper have already been set
ISPN010007 org.infinispan.commons.CacheException The RemoteCacheStore for cache %s should be configured with hotRodWrapping enabled
ISPN010008 org.infinispan.commons.CacheConfigurationException RemoteStore only supports segmentation when using at least protocol version %s or higher
ISPN010009 org.infinispan.commons.CacheConfigurationException A RemoteStore must be shared in a cache that is clustered
ISPN010010 org.infinispan.commons.CacheConfigurationException Segmentation is not supported for a RemoteStore when the configured segments %d do not match the remote servers amount %s
ISPN010011 org.infinispan.commons.CacheConfigurationException Segmentation is not supported for a RemoteStore when the configured key media type %s does not match the remote servers key media type %s
ISPN010012 org.infinispan.commons.CacheConfigurationException The RemoteCacheStore cannot be segmented when grouping is enabled
ISPN014001 ERROR Could not locate key class %s
ISPN014002 ERROR Cannot instantiate Transformer class %s
ISPN014003 INFO Registering Query interceptor for cache %s
ISPN014004 DEBUG Custom commands backend initialized backing index %s
ISPN014009 WARN Indexed type '%1$s' is using a default Transformer. This is slow! Register a custom implementation using @Transformable
ISPN014013 org.infinispan.commons.CacheException Cache named '%1$s' is being shut down. No longer accepting remote commands.
ISPN014014 INFO Reindexed %1$d entities in %2$d ms
ISPN014015 DEBUG %1$d documents indexed in %2$d ms
ISPN014016 INFO Purging instances of '%s' from the index
ISPN014017 INFO Flushing index '%s'
ISPN014019 java.lang.IllegalStateException Cannot run Lucene queries on a cache '%s' that does not have indexing enabled
ISPN014021 org.infinispan.objectfilter.ParsingException Queries containing grouping and aggregation functions must use projections.
ISPN014022 java.lang.IllegalStateException Cannot have aggregate functions in GROUP BY clause
ISPN014023 org.infinispan.objectfilter.ParsingException Using the multi-valued property path '%s' in the GROUP BY clause is not currently supported
ISPN014024 org.infinispan.objectfilter.ParsingException The property path '%s' cannot be used in the ORDER BY clause because it is multi-valued
ISPN014025 java.lang.IllegalStateException The query must not use grouping or aggregation
ISPN014026 org.infinispan.objectfilter.ParsingException The expression '%s' must be part of an aggregate function or it should be included in the GROUP BY clause
ISPN014027 org.infinispan.objectfilter.ParsingException The property path '%s' cannot be projected because it is multi-valued
ISPN014033 org.infinispan.commons.CacheException Unable to resume suspended transaction %s
ISPN014034 org.infinispan.commons.CacheException Unable to suspend transaction
ISPN014036 org.infinispan.objectfilter.ParsingException Prefix, wildcard or regexp queries cannot be fuzzy: %s
ISPN014039 org.infinispan.commons.CacheException Queries containing groups or aggregations cannot be converted to an indexed query
ISPN014040 org.infinispan.commons.CacheException Unable to define filters, please use filters in the query string instead.
ISPN014042 org.infinispan.partitionhandling.AvailabilityException Cannot execute query: cluster is operating in degraded mode and partition handling configuration doesn't allow reads and writes.
ISPN014043 org.infinispan.commons.CacheException Cannot find an appropriate Transformer for key type %s. Indexing only works with entries keyed on Strings, primitives, byte[], UUID, classes that have the @Transformable annotation or classes for which you have defined a suitable Transformer in the indexing configuration. Alternatively, see org.infinispan.query.spi.SearchManagerImplementor.registerKeyTransformer.
ISPN014044 ERROR Failed to parse system property %s
ISPN014046 INFO Setting org.apache.lucene.search.BooleanQuery.setMaxClauseCount from system property %s to value %d
ISPN014047 WARN Ignoring system property %s because the value %d is smaller than the current value (%d) of org.apache.lucene.search.BooleanQuery.getMaxClauseCount()
ISPN014050 org.infinispan.commons.CacheException Interrupted while waiting for completions of some batch indexing operations.
ISPN014051 org.hibernate.search.util.common.SearchException %1$s entities could not be indexed. See the logs for details. First failure on entity '%2$s': %3$s
ISPN014052 java.lang.String Indexing instance of entity '%s' during mass indexing
ISPN014053 org.infinispan.commons.CacheException Invalid property key '%1$s`, it's not a string.
ISPN014054 org.infinispan.commons.CacheException Trying to execute query `%1$s`, but no type is indexed on cache.
ISPN014055 org.infinispan.commons.CacheException Cannot index entry since the search mapping failed to initialize.
ISPN014056 org.infinispan.commons.CacheException Only DELETE statements are supported by executeStatement
ISPN014057 org.infinispan.commons.CacheException DELETE statements cannot use paging (firstResult/maxResults)
ISPN014058 org.infinispan.commons.CacheException Projections are not supported with entryIterator()
ISPN014059 WARN The indexing engine is restarting, index updates will be skipped for the current data changes.
ISPN014060 INFO We're getting some errors from Hibernate Search or Lucene while we compute the index count/size for statistics. There is probably a concurrent reindexing ongoing.
ISPN014062 DEBUG Search engine is reloaded before the reindexing.
ISPN014063 INFO Reindexing starting.
ISPN014501 org.hibernate.search.util.common.SearchException Exception while retrieving the type model for '%1$s'.
ISPN014502 org.hibernate.search.util.common.SearchException Multiple entity types configured with the same name '%1$s': '%2$s', '%3$s'
ISPN014503 org.hibernate.search.util.common.SearchException Infinispan Search Mapper does not support named types. The type with name '%1$s' does not exist.
ISPN014504 org.hibernate.search.engine.environment.classpath.spi.ClassLoadingException Unable to load class [%1$s]
ISPN014505 org.hibernate.search.util.common.SearchException Unknown entity name: '%1$s'.
ISPN014506 org.hibernate.search.util.common.SearchException Invalid type for '%1$s': the entity type must extend '%2$s', but entity type '%3$s' does not.
ISPN014507 ERROR Error processing indexing operation.
ISPN014801 java.lang.IllegalArgumentException Argument cannot be null
ISPN014802 java.lang.IllegalArgumentException '%s' must be an instance of java.lang.Comparable
ISPN014803 java.lang.IllegalArgumentException Parameter name cannot be null or empty
ISPN014804 java.lang.IllegalStateException Query does not have parameters
ISPN014805 java.lang.IllegalArgumentException No parameter named '%s' was found
ISPN014806 java.lang.IllegalArgumentException No parameters named '%s' were found
ISPN014807 java.lang.IllegalArgumentException The list of values for 'in(..)' cannot be null or empty
ISPN014808 java.lang.IllegalStateException operator was already specified
ISPN014809 java.lang.IllegalArgumentException The given condition was created by another factory
ISPN014810 java.lang.IllegalArgumentException The given condition is already in use by another builder
ISPN014811 java.lang.IllegalStateException Sentence already started. Cannot use '%s' again.
ISPN014812 java.lang.IllegalArgumentException %s cannot be null
ISPN014813 java.lang.IllegalStateException This query already belongs to another query builder
ISPN014814 java.lang.IllegalStateException This sub-query does not belong to a parent query builder yet
ISPN014815 java.lang.IllegalArgumentException Grouping cannot be null or empty
ISPN014816 java.lang.IllegalStateException Grouping can be specified only once
ISPN014817 java.lang.IllegalArgumentException Expecting a java.lang.Collection or an array of java.lang.Object
ISPN014818 java.lang.IllegalStateException Incomplete sentence. Missing attribute path or operator.
ISPN014819 java.lang.IllegalStateException Cannot visit an incomplete condition.
ISPN014820 java.lang.IllegalStateException Old child condition not found in parent condition
ISPN014821 java.lang.IllegalArgumentException Projection cannot be null or empty
ISPN014822 java.lang.IllegalStateException Projection can be specified only once
ISPN014823 java.lang.IllegalArgumentException maxResults must be greater than 0
ISPN014824 java.lang.IllegalArgumentException startOffset cannot be less than 0
ISPN014825 java.lang.IllegalStateException Query parameter '%s' was not set
ISPN014826 java.lang.IllegalArgumentException Left and right condition cannot be the same
ISPN014827 WARN Distributed sort not supported for non-indexed query '%s'. Consider using an index for optimal performance.
ISPN017001 INFO Infinispan CDI extension version: %s
ISPN017002 INFO Configuration for cache '%s' has been defined in cache manager '%s'
ISPN017003 java.lang.IllegalArgumentException %s parameter must not be null
ISPN017003 INFO Overriding default embedded configuration not found - adding default implementation
ISPN017004 INFO Overriding default embedded cache manager not found - adding default implementation
ISPN017004 INFO Overriding default remote cache manager not found - adding default implementation
ISPN028501 org.infinispan.objectfilter.ParsingException The type %s does not have an accessible property named '%s'.
ISPN028502 org.infinispan.objectfilter.ParsingException Unknown alias: %s.
ISPN028503 org.infinispan.objectfilter.ParsingException Property %2$s can not be selected from type %1$s since it is an embedded entity.
ISPN028504 org.infinispan.objectfilter.ParsingException The property %s is an embedded entity and does not allow comparison predicates
ISPN028505 org.infinispan.objectfilter.ParsingException Invalid numeric literal '%s'
ISPN028506 org.infinispan.objectfilter.ParsingException Invalid date literal '%s'
ISPN028507 org.infinispan.objectfilter.ParsingException Invalid boolean literal '%s'
ISPN028508 org.infinispan.objectfilter.ParsingException Invalid enum literal '%s' for enum type %s
ISPN028509 org.infinispan.objectfilter.ParsingException Filters cannot use grouping or aggregations
ISPN028510 java.lang.IllegalStateException Unknown entity name %s
ISPN028511 java.lang.IllegalArgumentException namedParameters cannot be null
ISPN028512 java.lang.IllegalStateException Aggregation %s is not supported
ISPN028513 java.lang.IllegalStateException Aggregation AVG cannot be applied to property of type %s
ISPN028514 org.infinispan.objectfilter.ParsingException %s aggregation can only be applied to property references.
ISPN028515 org.infinispan.objectfilter.ParsingException Cannot have aggregate functions in the WHERE clause : %s.
ISPN028516 org.infinispan.objectfilter.ParsingException Cannot have aggregate functions in the GROUP BY clause : %s.
ISPN028517 java.lang.IllegalStateException The predicate %s can not be added since there may be only one root predicate.
ISPN028518 java.lang.IllegalStateException The predicate %s can not be added since there may be only one sub-predicate in a NOT predicate.
ISPN028519 org.infinispan.objectfilter.ParsingException Cannot apply predicates directly to an entity alias: %s
ISPN028520 org.infinispan.objectfilter.ParsingException Full-text queries are not allowed in the HAVING clause
ISPN028521 org.infinispan.objectfilter.ParsingException Full-text queries cannot be applied to property '%2$s' in type %1$s unless the property is indexed and analyzed.
ISPN028522 org.infinispan.objectfilter.ParsingException No relational queries can be applied to property '%2$s' in type %1$s since the property is analyzed.
ISPN028523 org.infinispan.objectfilter.ParsingException Filters cannot use full-text searches
ISPN028524 org.infinispan.objectfilter.ParsingException Left side argument must be a property path
ISPN028525 org.infinispan.objectfilter.ParsingException Invalid query: %s
ISPN028526 org.infinispan.objectfilter.ParsingException Invalid query: %s; Parser error messages: %s.
ISPN028527 org.infinispan.objectfilter.ParsingException Full-text queries cannot be applied to property '%2$s' in type %1$s unless the property is indexed.
ISPN028528 org.infinispan.objectfilter.ParsingException Error parsing content. Data not stored as protobuf?
ISPN029001 org.infinispan.lock.exception.ClusteredLockException The lock was deleted.
ISPN029001 org.infinispan.commons.CacheConfigurationException Max size of index node (%d) is limited to 32767 bytes.
ISPN029002 org.infinispan.commons.CacheConfigurationException Min size of index node (%d) must be less or equal to max size (%d).
ISPN029003 org.infinispan.lock.exception.ClusteredLockException LOCK[%s] Unlock failed from node %s
ISPN029003 org.infinispan.persistence.spi.PersistenceException Calculation of size has been interrupted.
ISPN029004 org.infinispan.lock.exception.ClusteredLockException Missing name for the clustered lock
ISPN029005 org.infinispan.lock.exception.ClusteredLockException Invalid number of owner. It must be higher than zero or -1 but it was %s
ISPN029006 org.infinispan.lock.exception.ClusteredLockException Invalid reliability mode. Modes are AVAILABLE or CONSISTENT
ISPN029006 WARN Cannot truncate index
ISPN029007 org.infinispan.lock.exception.ClusteredLockException Invalid scope for tag . Expected CACHE_CONTAINER but was %s
ISPN029007 ERROR Unexpected error in index updater thread.
ISPN029008 org.infinispan.lock.exception.ClusteredLockException Cannot create clustered locks when clustering is not enabled
ISPN029008 ERROR Failed to close the index file.
ISPN029009 INFO Configuration is not clustered, clustered locks are disabled
ISPN029009 ERROR Unexpected error in data compactor.
ISPN029010 org.infinispan.lock.exception.ClusteredLockException MBean registration failed
ISPN029011 ERROR Cannot close data file.
ISPN029012 org.infinispan.commons.CacheConfigurationException Compaction threshold (%f) should be between 0 (exclusively) and 1 (inclusively).
ISPN029013 org.infinispan.persistence.spi.PersistenceException Cannot open index on %s
ISPN029014 org.infinispan.persistence.spi.PersistenceException Interrupted while stopping the store
ISPN029015 org.infinispan.persistence.spi.PersistenceException Interrupted while pausing the index for clear.
ISPN029016 org.infinispan.persistence.spi.PersistenceException Cannot clear/reopen index.
ISPN029017 org.infinispan.persistence.spi.PersistenceException Cannot clear data directory.
ISPN029018 org.infinispan.persistence.spi.PersistenceException The serialized form of key %s is too long (%d); with maxNodeSize=%d bytes you can use only keys serialized to at most %d bytes.
ISPN029019 org.infinispan.persistence.spi.PersistenceException Cannot load key %s from index.
ISPN029020 org.infinispan.persistence.spi.PersistenceException Index looks corrupt.
ISPN029021 ERROR File id %s encountered an exception while compacting, file may be orphaned
ISPN029501 org.infinispan.counter.exception.CounterOutOfBoundsException %s reached.
ISPN029503 org.infinispan.counter.exception.CounterConfigurationException The counter name is missing.
ISPN029504 org.infinispan.counter.exception.CounterConfigurationException Invalid storage mode. It must be non-null
ISPN029505 org.infinispan.counter.exception.CounterConfigurationException Invalid storage mode. PERSISTENT is not allowed without global state enabled in cache container.
ISPN029506 org.infinispan.counter.exception.CounterConfigurationException Invalid number of owner. It must be higher than zero but it was %s
ISPN029507 org.infinispan.counter.exception.CounterConfigurationException Invalid reliability mode. It must be non-null
ISPN029508 org.infinispan.counter.exception.CounterConfigurationException Invalid initial value for counter. It must be between %s and %s (inclusive) but was %s
ISPN029509 org.infinispan.counter.exception.CounterConfigurationException Invalid concurrency-level. It must be higher than zero but it was %s
ISPN029514 org.infinispan.counter.exception.CounterException Invalid counter type. Expected=%s but got %s
ISPN029514 org.infinispan.counter.exception.CounterException Invalid counter type. Expected=%s but got %s
ISPN029515 org.infinispan.counter.exception.CounterException Unable to fetch counter manager caches.
ISPN029516 org.infinispan.counter.exception.CounterException Counter '%s' is not defined.
ISPN029516 org.infinispan.counter.exception.CounterNotFoundException Counter '%s' is not defined.
ISPN029517 org.infinispan.counter.exception.CounterConfigurationException Duplicated counter name found. Counter '%s' already exists.
ISPN029518 java.lang.IllegalStateException Metadata not found but counter exists. Counter=%s
ISPN029520 org.infinispan.counter.exception.CounterConfigurationException Invalid scope for tag . Expected CACHE_CONTAINER but was %s
ISPN029522 org.infinispan.counter.exception.CounterException WEAK and BOUNDED encoded flag isn't supported!
ISPN029524 org.infinispan.counter.exception.CounterConfigurationException Lower bound (%s) and upper bound (%s) can't be the same.
ISPN029525 org.infinispan.counter.exception.CounterConfigurationException Cannot rename file %s to %s
ISPN029526 org.infinispan.counter.exception.CounterConfigurationException Error while persisting counter's configurations
ISPN029527 org.infinispan.counter.exception.CounterConfigurationException Error while reading counter's configurations
ISPN029528 org.infinispan.counter.exception.CounterException CounterManager hasn't started yet or has been stopped.
ISPN029529 org.infinispan.counter.exception.CounterException MBean registration failed
ISPN290010 ERROR Cannot close/delete data file %d.

JBERET

Code Level Return Type Message
JBERET000001 WARN Failed to run batchlet %s
JBERET000002 WARN A step cannot contain both chunk type and batchlet type: %s
JBERET000003 WARN A concrete step must contain either a chunk or batchlet type: %s
JBERET000004 WARN Unrecognized property category: %s, variable name: %s in property value: %s
JBERET000005 WARN Invalid exception filter class '%s'
JBERET000006 TRACE The job: %s already exists in the job repository and will not be added.
JBERET000007 ERROR Failed to run job %s, %s, %s
JBERET000008 WARN Possible syntax errors in property: %s
JBERET000009 WARN A decision cannot be the first element: %s
JBERET000010 DEBUG Could not resolve expression because: %s
JBERET000011 WARN Failed to stop the job %s, %s, %s
JBERET000012 WARN Failed to clone %s when running job [%s] and step [%s]
JBERET000013 WARN Failed to destroy artifact %s
JBERET000014 DEBUG Tables created for batch job repository with DDL file %s
JBERET000015 DEBUG Adding ddl entry for batch job repository:%n %s
JBERET000016 WARN Failed to close %s: %s
JBERET000017 DEBUG Persisted %s with id %s
JBERET000018 WARN Could not find the original step execution to restart. Current step execution id: %s, step name: %s
JBERET000019 WARN Encountered errors when creating batch job repository tables.
JBERET000020 WARN Failed to get database product name from connection %s
JBERET000021 INFO About to initialize batch job repository with ddl-file: %s for database %s
JBERET000022 TRACE %s is not implemented for local transactions
JBERET000023 INFO Removing %s %s
JBERET000024 INFO About to mark it FAILED before restarting job execution %s, job name %s, batch status %s, restart mode %s
JBERET000025 WARN Failed to set attributes to script context for engine %s, script type %s, and some data will not be passed to script
JBERET000026 INFO job %s is added to waiting queue due to low number of available threads: %s
JBERET000027 INFO job %s is taken from waiting queue and resubmitted
JBERET000028 WARN Failed to serialize exception: %s
JBERET000029 INFO Applied custom restart position: %s, instead of the default restart position: %s
JBERET000030 INFO Resolved job %s
JBERET000031 WARN Problem finalizing partition execution in step execution %s
JBERET000032 WARN Failed to get executions for job %s; instead got cached executions: %s
JBERET000033 INFO Stopping job execution: %s
JBERET000034 DEBUG The number of job executions read from the job repository is limited to %d.

JBREM

Code Level Return Type Message
JBREM-00001 java.io.IOException Internal Error: received a message with a duplicate ID
JBREM-00001 TRACE Message with unknown protocol ID %d received
JBREM-00001 TRACE Rejected invalid SASL mechanism %s
JBREM000200 DEBUG Remote connection failed: %s
JBREM000201 java.io.IOException Received invalid message on %s
JBREM000202 java.io.IOException Abrupt close on %s
JBREM000203 WARN Message missing protocol byte
JBREM000204 WARN Buffer underflow parsing message with protocol ID %02x
JBREM000205 DEBUG Failed to accept a connection: %s
JBREM000206 org.jboss.remoting3.NotOpenException Channel is not open
JBREM000207 org.jboss.remoting3.ChannelBusyException Failed to send a message (channel is busy)
JBREM000208 java.io.InterruptedIOException Write operation interrupted
JBREM000209 ERROR An exception occurred in a message handler
JBREM000210 FATAL Internal Error: received a message with duplicate ID %d from %s
JBREM000211 java.lang.IllegalArgumentException Invalid XNIO worker; the worker must match the Remoting Endpoint worker
JBREM000212 java.io.IOException Failed to configure SSL context
JBREM000300 org.wildfly.security.auth.AuthenticationException Authentication failed due to I/O error
JBREM000301 java.io.IOException Mechanism name "%s" is too long
JBREM000302 java.io.IOException Authentication message too large
JBREM000303 org.wildfly.security.auth.AuthenticationException Authentication protocol failed (extra response)
JBREM000304 org.wildfly.security.auth.AuthenticationException Server rejected authentication
JBREM000305 org.wildfly.security.auth.AuthenticationException Authentication failed (connection closed)
JBREM000306 org.wildfly.security.auth.AuthenticationException Authentication failed (SASL client construction failure)
JBREM000307 org.wildfly.security.auth.AuthenticationException Authentication interrupted
JBREM000308 org.wildfly.security.auth.AuthenticationException Authentication failed (no mechanisms left), tried: %s
JBREM000309 org.wildfly.security.auth.AuthenticationException Authentication not supported for this peer

JBTHR

Code Level Return Type Message
JBTHR-0001 INFO JBoss Threads version %s
JBTHR00001 org.jboss.threads.ThreadCreationException Thread factory did not produce a thread
JBTHR00002 java.util.concurrent.RejectedExecutionException Task limit reached
JBTHR00003 java.util.concurrent.TimeoutException Operation timed out
JBTHR00004 java.util.concurrent.CancellationException Operation was cancelled
JBTHR00005 java.util.concurrent.ExecutionException Operation failed
JBTHR00006 org.jboss.threads.ThreadCreationException Unable to add new thread to the running set
JBTHR00007 org.jboss.threads.ExecutionInterruptedException Task execution interrupted
JBTHR00008 java.util.concurrent.RejectedExecutionException Task rejected
JBTHR00009 org.jboss.threads.StoppedExecutorException Executor has been shut down
JBTHR00010 org.jboss.threads.ExecutionTimedOutException Task execution timed out
JBTHR00011 ERROR Task execution failed for task %s
JBTHR00012 java.lang.IllegalStateException Cannot await termination of a thread pool from one of its own threads
JBTHR00013 java.util.concurrent.RejectedExecutionException No executors available to run task
JBTHR00014 ERROR Error submitting task %s to executor
JBTHR00100 java.lang.IllegalArgumentException Keep-alive may only be set to 0 for this executor type
JBTHR00101 java.lang.IllegalArgumentException Cannot reduce maximum threads below current thread number of running threads
JBTHR00102 java.lang.IllegalArgumentException Empty array parameter is not empty
JBTHR00103 java.lang.IllegalStateException The current thread does not support interrupt handlers
JBTHR00104 java.lang.IllegalStateException Executor is not shut down
JBTHR00105 java.util.ConcurrentModificationException Concurrent modification of collection detected
JBTHR00106 java.util.NoSuchElementException No such element (iteration past end)
JBTHR00107 java.lang.RuntimeException Unknown throwable received
JBTHR00108 ERROR Interrupt handler %s threw an exception
JBTHR00200 java.lang.SecurityException %s() not allowed on container-managed executor

JBWEB

Code Level Return Type Message
JBWEB005000 WARN Invalid %s value for the initParam keepgenerated. Will use the default value of "false"
JBWEB005001 WARN Invalid %s value for the initParam trimSpaces. Will use the default value of "false"
JBWEB005002 WARN Invalid %s value for the initParam enablePooling. Will use the default value of "false"
JBWEB005003 WARN Invalid %s value for the initParam mappedfile. Will use the default value of "true"
JBWEB005004 WARN Invalid %s value for the initParam sendErrToClient. Will use the default value of "false"
JBWEB005005 WARN Invalid %s value for the initParam classdebuginfo. Will use the default value of "true"
JBWEB005006 WARN Invalid %s value for the initParam checkInterval. Will disable periodic checking
JBWEB005007 WARN Invalid %s value for the initParam modificationTestInterval. Will use the default value of "4" seconds
JBWEB005008 WARN Invalid %s value for the initParam recompileOnFail. Will use the default value of "false"
JBWEB005009 WARN Invalid %s value for the initParam development. Will use the default value of "true"
JBWEB005010 WARN Invalid %s value for the initParam suppressSmap. Will use the default value of "false"
JBWEB005011 WARN Invalid %s value for the initParam dumpSmap. Will use the default value of "false"
JBWEB005012 WARN Invalid %s value for the initParam genStrAsCharArray. Will use the default value of "false"
JBWEB005013 WARN Invalid %s value for the initParam errorOnUseBeanInvalidClassAttribute. Will use the default value of "true"
JBWEB005014 ERROR The JSP container needs a work directory
JBWEB005015 ERROR The JSP container needs a valid work directory [%s]
JBWEB005016 WARN Invalid %s value for the initParam fork. Will use the default value of "true"
JBWEB005017 WARN Invalid %s value for the initParam xpoweredBy. Will use the default value of "true"
JBWEB005018 WARN Invalid %s value for the initParam displaySourceFragment. Will use the default value of "true"
JBWEB005019 WARN Failed loading Java compiler %s
JBWEB005020 WARN Failed loading custom options class %s
JBWEB005021 ERROR File "%s" not found
JBWEB005022 ERROR Error destroying JSP Servlet instance
JBWEB005023 WARN Bad value %s in the url-pattern subelement in the webapp descriptor
JBWEB005024 DEBUG Exception closing reader
JBWEB005025 DEBUG Parent class loader is: %s
JBWEB005026 DEBUG Compilation classpath: %s
JBWEB005027 ERROR Error reading source file %s
JBWEB005028 ERROR Error reading class file %s
JBWEB005029 WARN Unknown source JVM %s ignored
JBWEB005030 WARN Unknown target JVM %s ignored
JBWEB005031 ERROR Error creating compiler report
JBWEB005032 ERROR Compiler error
JBWEB005033 ERROR Exception initializing page context
JBWEB005034 ERROR Error loading core class
JBWEB005035 WARN Invalid value '%s' for the initParam maxLoadedJsps. Will use the default value of '-1
JBWEB005036 WARN Invalid value '%s' for the initParam jspIdleTimeout. Will use the default value of '-1'
JBWEB005037 WARN Failed to delete generated Java file '%s'
JBWEB005038 WARN Failed to delete generated class file(s)
JBWEB005039 ERROR Invalid optimizeScriptlets value %s, must be true or false
JBWEB005040 WARN The "isThreadSafe" page directive attribute used in %s has been deprecated and will be removed in version 4.0 of the JSP specification
JBWEB005041 WARN Unsupported source VM %s requested, using %s
JBWEB005042 WARN Unsupported target VM %s requested, using %s

JBWS

Code Level Return Type Message
JBWS020003 TRACE Ignore attribute: [uri=%s, qname=%s, value=%s]
JBWS020005 ERROR Cannnot parse: %s
JBWS020006 TRACE createElement {%s}%s
JBWS020007 TRACE createElement {%s}%s:%s
JBWS020008 TRACE pushGroupID: %s (%s)
JBWS020009 TRACE peekGroupID: %s (%s)
JBWS020010 TRACE popGroupID: %s (%s)
JBWS020012 WARN Non-standard method: %s
JBWS020015 TRACE Could not get %s module classloader: %s
JBWS021003 WARN %s element not supported
JBWS021005 ERROR Cannot get port component name {%s}, we have: %s
JBWS021006 WARN Element in webservices.xml not namespace qualified: %s
JBWS021010 WARN Multiple matching port-component-ref: sei={%s} port={%s}
JBWS021017 ERROR Cannot get children for resource %s
JBWS021018 ERROR Cannot get name for resource %s
JBWS021019 TRACE Cannot get URL for %s
JBWS022001 ERROR Cannot get children for resource %s
JBWS022002 ERROR Cannot get name for resource %s
JBWS022010 TRACE Class %s is not assignable from %s due to conflicting classloaders: %s and %s
JBWS022011 TRACE Could not clear blacklist for classloader %s
JBWS022012 DEBUG Could not load %s
JBWS022013 ERROR Cannot parse: %s
JBWS022021 ERROR Cannot read resource: %s
JBWS022022 WARN Cannot load ID '%s' as URL (protocol = %s)
JBWS022025 DEBUG WSDL import published to %s
JBWS022026 DEBUG XMLSchema import published to %s
JBWS022027 WARN Cannot delete published wsdl document: %s
JBWS022042 DEBUG Cannot register processor %s with JMX server, will be trying using the default managed implementation.
JBWS022043 ERROR Cannot register processor %s with JMX server
JBWS022044 ERROR Cannot unregister processor %s with JMX server
JBWS022052 INFO Starting %s %s
JBWS022053 DEBUG Unable to calculate webservices port, using default %s
JBWS022054 DEBUG Unable to calculate webservices secure port, using default %s
JBWS022055 DEBUG Using undefined webservices host: %s
JBWS022056 DEBUG Setting webservices host to localhost: %s
JBWS022057 DEBUG Could not get address for host: %s
JBWS022058 WARN Could not get port for webservices configuration from configured HTTP connector
JBWS022059 WARN Unable to read from the http servlet request
JBWS022060 ERROR Cannot trace SOAP message
JBWS022061 WARN Method invocation failed with exception
JBWS022090 TRACE Cannot get %s from root file, trying with additional metadata files
JBWS022098 TRACE Cannot get %s from %s
JBWS022099 DEBUG Error during deployment: %s
JBWS022100 ERROR Error while destroying deployment %s due to previous exception
JBWS022102 ERROR Cannot stop endpoint in state %s: %s
JBWS022103 ERROR Cannot start endpoint in state %s: %s
JBWS022110 WARN Could not add handler %s as part of client or endpoint configuration
JBWS022111 WARN PortNamePattern and ServiceNamePattern filters not supported; adding handlers anyway
JBWS022112 WARN Init params not supported; adding handler anyway
JBWS022113 ERROR Error closing JAXBIntro configuration stream: %s
JBWS022114 TRACE %s doesn't work on %s
JBWS022115 TRACE Cannot get URL for %s
JBWS022116 TRACE Could not find %s in the additional metadatafiles
JBWS022118 WARN Cannot obtain host for vituralHost %s, use default host
JBWS022119 WARN Cannot obtain port for vituralHost %s, use default port
JBWS024015 INFO Cannot use the bus associated to the current deployment for starting a new endpoint, creating a new bus...
JBWS024016 TRACE Unable to retrieve server config; this is an expected condition for jboss-modules enabled client.
JBWS024018 WARN Unable to retrieve port QName from %s, trying matching port using endpoint interface name only.
JBWS024033 DEBUG Setting new service endpoint address in wsdl: %s
JBWS024034 DEBUG WSDL service endpoint address rewrite required because of server configuration: %s
JBWS024035 DEBUG WSDL service endpoint address rewrite required because of invalid URL: %s
JBWS024036 DEBUG WSDL service endpoint address rewrite not required: %s
JBWS024037 DEBUG Rewritten new candidate WSDL service endpoint address '%s' to '%s'
JBWS024038 DEBUG Invalid url '%s' provided, using original one without rewriting: %s
JBWS024040 TRACE About to authenticate, using security domain %s
JBWS024041 TRACE Authenticated, principal=%s
JBWS024042 TRACE Security context propagated for principal %s
JBWS024054 ERROR User principal is not available on the current message
JBWS024059 WARN %s cannot open stream for resource: %s
JBWS024060 DEBUG %s cannot resolve resource: %s
JBWS024061 INFO Adding service endpoint metadata: %s
JBWS024062 DEBUG id %s, overriding portName %s with %s
JBWS024063 DEBUG id %s, overriding portName %s with %s
JBWS024064 DEBUG id %s, enabling MTOM...
JBWS024065 DEBUG id %s, enabling Addressing...
JBWS024066 DEBUG id %s, enabling RespectBinding...
JBWS024067 DEBUG id %s, overriding wsdlFile location with %s
JBWS024068 WARN Handler chain deployment descriptor contribution: PortNamePattern, ServiceNamePattern and ProtocolBindings filters not supported; adding handlers anyway.
JBWS024069 WARN Init params not supported, handler: %s
JBWS024073 ERROR Error registering bus for management: %s
JBWS024074 INFO WSDL published to: %s
JBWS024077 WARN Cannot get wsdl publish location for null wsdl location and serviceName
JBWS024078 WARN WSDL publisher not configured, unable to publish contract for endpoint class %s
JBWS024080 DEBUG Actual configuration from file: %s
JBWS024086 TRACE Error while getting default WSSConfig
JBWS024087 WARN Could not early initialize security engine
JBWS024089 TRACE Unable to load additional configuration from %s
JBWS024091 DEBUG Could not get WSDL from %s, aborting soap:address rewrite.
JBWS024092 INFO Adding %s policy attachment with id='%s' to honor requirement from %s.
JBWS024095 WARN Unknown strategy '%s' requested for selecting the Apache CXF Bus to be used for building JAXWS clients; default strategy will be used.
JBWS024097 WARN Could not delete wsdl file %s
JBWS024098 DEBUG Deleted wsdl file %s
JBWS024099 WARN Could not create wsdl data path.
JBWS024100 WARN Could not delete wsdl directory %s
JBWS024102 DEBUG JASPI authentication isn't enabled, can not find JASPI modules and classes
JBWS024103 DEBUG Could not load BouncyCastle security provider; either setup your classpath properly or prevent loading by using the '%s' system property.
JBWS024105 WARN Could not create instance of specified ClientBusSelector: %s
JBWS024106 WARN Could not remove previuosly set features on client: %s
JBWS024110 ERROR Unable to process handler element: %s
JBWS024112 WARN Could not construct reference for config: %s
JBWS024114 ERROR No security domain associated
JBWS024115 ERROR Failed to compute UsernameToken profile digest from expected password

JIPI

Code Level Return Type Message
JIPI020200 WARN Could not load entity class '%s', ignoring this error and continuing with application deployment
JIPI020201 java.lang.IllegalArgumentException Cannot change input stream reference.
JIPI020202 java.lang.IllegalArgumentException Parameter %s is empty
JIPI020203 java.lang.RuntimeException Missing PersistenceUnitMetadata (thread local wasn't set)
JIPI020204 java.lang.RuntimeException Not yet implemented
JIPI020205 java.lang.IllegalArgumentException Parameter %s is null
JIPI020250 java.lang.RuntimeException Unable to open VirtualFile-based InputStream %s
JIPI020251 java.lang.IllegalArgumentException URI syntax error
JIPI020252 WARN second level cache not integrated - %s

JIPIORMV6

Code Level Return Type Message
JIPIORMV6020260 INFO Second level cache enabled for %s
JIPIORMV6020261 java.lang.IllegalStateException Hibernate ORM did not register LifeCycleListener
JIPIORMV6020263 java.lang.IllegalStateException hibernate.id.new_generator_mappings set to false is not supported, remove the setting or set to true. Refer to Hibernate ORM migration documentation for how to update the next id state in the application database.

JIPISEARCH

Code Level Return Type Message
JIPISEARCH020290 java.lang.IllegalStateException Failed to parse property '%2$s' while integrating Hibernate Search into persistence unit '%1$s

JNDIWFHTTP

Code Level Return Type Message
JNDIWFHTTP000001 javax.naming.NamingException Unexpected data in response
JNDIWFHTTP000002 javax.naming.NamingException At least one URI must be provided
JNDIWFHTTP000003 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted

KEYCLOAK

Code Level Return Type Message
KEYCLOAK000001 org.jboss.as.controller.OperationFailedException The migrate operation can not be performed: the server must be in admin-only mode
KEYCLOAK000002 java.lang.String Migration failed, see results for more details.

LITE-EXTENSION-TRANSLATOR-

Code Level Return Type Message
LITE-EXTENSION-TRANSLATOR-000000 org.jboss.weld.exceptions.IllegalStateException Unable to instantiate object from class {0} via no-args constructor. The exception was: {1}
LITE-EXTENSION-TRANSLATOR-000001 org.jboss.weld.exceptions.IllegalArgumentException Unexpected extension method argument: {0}
LITE-EXTENSION-TRANSLATOR-000002 org.jboss.weld.exceptions.IllegalArgumentException {0} methods can't declare a parameter of type {1}, found at {2}. Method name - {3}
LITE-EXTENSION-TRANSLATOR-000003 org.jboss.weld.exceptions.IllegalArgumentException Unknown declaration {0}
LITE-EXTENSION-TRANSLATOR-000004 org.jboss.weld.exceptions.IllegalStateException Observer method without an @Observes parameter: {0}
LITE-EXTENSION-TRANSLATOR-000005 org.jboss.weld.exceptions.IllegalArgumentException Unknown primitive type: {0}
LITE-EXTENSION-TRANSLATOR-000006 org.jboss.weld.exceptions.DefinitionException Zero or more than one parameter of type {0} for method {1} with declaring class {2}
LITE-EXTENSION-TRANSLATOR-000007 org.jboss.weld.exceptions.IllegalStateException Unknown query parameter: {0}
LITE-EXTENSION-TRANSLATOR-000008 org.jboss.weld.exceptions.IllegalStateException Unable to invoke extension method {0} with arguments {1}. The exception was: {2}
LITE-EXTENSION-TRANSLATOR-000009 org.jboss.weld.exceptions.IllegalStateException Unable to load class with name {0}. The exception was: {1}
LITE-EXTENSION-TRANSLATOR-000010 org.jboss.weld.exceptions.IllegalArgumentException Unrecognized parameter of type {0} declared in class {1}#{2}
LITE-EXTENSION-TRANSLATOR-000011 org.jboss.weld.exceptions.IllegalArgumentException Unknown reflection type {0}
LITE-EXTENSION-TRANSLATOR-000012 org.jboss.weld.exceptions.IllegalArgumentException Unknown annotation member {0}
LITE-EXTENSION-TRANSLATOR-000013 org.jboss.weld.exceptions.IllegalArgumentException Not {0}:{1}
LITE-EXTENSION-TRANSLATOR-000014 org.jboss.weld.exceptions.DefinitionException Unable to access annotation member(s) for annotation {0}. The exception was: {1}
LITE-EXTENSION-TRANSLATOR-000015 org.jboss.weld.exceptions.IllegalArgumentException Provided type {0} is illegal because it doesn't match an of known annotation member types.
LITE-EXTENSION-TRANSLATOR-000016 WARN AnnotationBuilderFactoryImpl wasn't initialized properly before using it. This can be caused by attempted usage outside of build compatible extension cycle. The init process will use a fallback method.
LITE-EXTENSION-TRANSLATOR-000017 org.jboss.weld.exceptions.DeploymentException There was a problem executing Build Compatible Extension method {0} during phase {1}. The exception was: {2}

LRA

Code Level Return Type Message
LRA025001 java.lang.String LRA created with an unexpected status code: %d, coordinator response '%s'
LRA025001 java.lang.String LRA created with an unexpected status code: %d, coordinator response '%s'
LRA025002 java.lang.String Leaving LRA: %s, ends with an unexpected status code: %d, coordinator response '%s'
LRA025002 java.lang.String Leaving LRA: %s, ends with an unexpected status code: %d, coordinator response '%s'
LRA025003 java.lang.String LRA participant class '%s' with asynchronous temination but no @Status or @Forget annotations
LRA025003 java.lang.String LRA participant class '%s' with asynchronous temination but no @Status or @Forget annotations
LRA025004 java.lang.String LRA finished with an unexpected status code: %d, coordinator response '%s'
LRA025004 java.lang.String LRA finished with an unexpected status code: %d, coordinator response '%s'
LRA025005 java.lang.String LRA coordinator '%s' returned an invalid status code '%s' for LRA '%s'
LRA025005 java.lang.String LRA coordinator '%s' returned an invalid status code '%s' for LRA '%s'
LRA025006 java.lang.String LRA coordinator '%s' returned no content on #getStatus call for LRA '%s'
LRA025006 java.lang.String LRA coordinator '%s' returned no content on #getStatus call for LRA '%s'
LRA025007 java.lang.String LRA coordinator '%s' returned an invalid status for LRA '%s'
LRA025007 java.lang.String LRA coordinator '%s' returned an invalid status for LRA '%s'
LRA025008 java.lang.String Too late to join with the LRA '%s', coordinator response: '%s'
LRA025008 java.lang.String Too late to join with the LRA '%s', coordinator response: '%s'
LRA025009 java.lang.String Failed enlisting to LRA '%s', coordinator '%s' responded with status '%s'
LRA025009 java.lang.String Failed enlisting to LRA '%s', coordinator '%s' responded with status '%s'
LRA025010 java.lang.String Error when converting String '%s' to URL
LRA025010 java.lang.String Error when converting String '%s' to URL
LRA025011 java.lang.String Invalid LRA id format to create LRA record from LRA id '%s', link URI '%s' (reason: %s)
LRA025011 java.lang.String Invalid LRA id format to create LRA record from LRA id '%s', link URI '%s' (reason: %s)
LRA025012 java.lang.String Cannot found compensator url '%s' for lra '%s'
LRA025012 java.lang.String Cannot found compensator url '%s' for lra '%s'
LRA025013 WARN Could not recreate abstract record '%s'
LRA025013 WARN Could not recreate abstract record '%s'
LRA025014 WARN reason '%s': container request for method '%s': lra: '%s'
LRA025014 WARN reason '%s': container request for method '%s': lra: '%s'
LRA025015 WARN LRA participant completion for asynchronous method %s#%s should return %d and not %d
LRA025015 WARN LRA participant completion for asynchronous method %s#%s should return %d and not %d
LRA025016 java.lang.String Cannot get status of nested lra '%s' as outer one '%s' is still active
LRA025016 java.lang.String Cannot get status of nested lra '%s' as outer one '%s' is still active
LRA025017 java.lang.String Invalid recovery url '%s' to join lra '%s'
LRA025017 java.lang.String Invalid recovery url '%s' to join lra '%s'
LRA025018 ERROR Invalid format of lra id '%s' to replace compensator '%s'
LRA025018 ERROR Invalid format of lra id '%s' to replace compensator '%s'
LRA025019 WARN LRA participant `%s` returned immediate state (Compensating/Completing) from CompletionStage. LRA id: %s
LRA025019 WARN LRA participant `%s` returned immediate state (Compensating/Completing) from CompletionStage. LRA id: %s
LRA025020 ERROR Cannot process non JAX-RS LRA participant
LRA025020 ERROR Cannot process non JAX-RS LRA participant
LRA025021 java.lang.String Invalid format of LRA id to be converted to LRA coordinator url, was '%s'
LRA025021 java.lang.String Invalid format of LRA id to be converted to LRA coordinator url, was '%s'
LRA025022 java.lang.String Failed enlisting to LRA '%s', coordinator '%s' responded with status '%d (%s)'. Returning '%d (%s)'.
LRA025022 java.lang.String Failed enlisting to LRA '%s', coordinator '%s' responded with status '%d (%s)'. Returning '%d (%s)'.
LRA025023 java.lang.String Could not %s LRA '%s': coordinator '%s' responded with status '%s'
LRA025023 java.lang.String Could not %s LRA '%s': coordinator '%s' responded with status '%s'
LRA025024 java.lang.String Error when encoding parent LRA id URL '%s' to String
LRA025024 java.lang.String Error when encoding parent LRA id URL '%s' to String
LRA025025 java.lang.String Unable to process LRA annotations: %s'
LRA025025 java.lang.String Unable to process LRA annotations: %s'
LRA025026 WARN Unable to remove the failed duplicate failed LRA record (Uid: '%s') (which is already present in the failedLRA record location type: '%s'.) from LRA Record location: '%s'
LRA025026 WARN Unable to remove the failed duplicate failed LRA record (Uid: '%s') (which is already present in the failedLRA record location type: '%s'.) from LRA Record location: '%s'
LRA025027 WARN An exception was thrown while moving failed LRA record (Uid: '%s'). Reason: '%s'
LRA025027 WARN An exception was thrown while moving failed LRA record (Uid: '%s'). Reason: '%s'
LRA025028 java.lang.String Demanded API version '%s' is not in the list of the supported versions '%s'. Please, provide the right version for the API.
LRA025028 java.lang.String Demanded API version '%s' is not in the list of the supported versions '%s'. Please, provide the right version for the API.
LRA025029 WARN Cannot notify AfterLRA URL at %s
LRA025029 WARN Cannot notify AfterLRA URL at %s
LRA025030 java.lang.String %s: Invalid link URI (%s): %s
LRA025030 java.lang.String %s: Invalid link URI (%s): %s
LRA025031 java.lang.String %s: Invalid link URI (%s): missing compensator or after LRA callback
LRA025031 java.lang.String %s: Invalid link URI (%s): missing compensator or after LRA callback
LRA025032 WARN LRA Record: Cannot save state (reason: %s
LRA025032 WARN LRA Record: Cannot save state (reason: %s
LRA025033 WARN LRA Record: Cannot restore state (reason: %s)
LRA025033 WARN LRA Record: Cannot restore state (reason: %s)
LRA025034 WARN LRA Recovery cannot remove LRA id %s from the object store. The uid segment '%s' is probably invalid.
LRA025034 WARN LRA Recovery cannot remove LRA id %s from the object store. The uid segment '%s' is probably invalid.
LRA025035 WARN The start LRA call failed with cause: %s
LRA025035 WARN The start LRA call failed with cause: %s
LRA025036 java.lang.String CDI Context not available: %s
LRA025036 java.lang.String CDI Context not available: %s
LRA025037 WARN Participant `%s` is not registered
LRA025037 WARN Participant `%s` is not registered
LRA025038 java.lang.String Invalid participant enlistment with LRA %s: participant data is disabled
LRA025038 java.lang.String Invalid participant enlistment with LRA %s: participant data is disabled

LRAPROXY

Code Level Return Type Message
LRAPROXY025001 ERROR Participant '%s' serialization problem
LRAPROXY025002 ERROR Participant '%s' exception during completion
LRAPROXY025003 java.lang.String Cannot get status of participant '%s' of lra id '%s'

MODCLUSTER

Code Level Return Type Message
MODCLUSTER000000 DEBUG Catching
MODCLUSTER000001 INFO Initializing mod_cluster version %s
MODCLUSTER000002 INFO Initiating mod_cluster shutdown
MODCLUSTER000003 DEBUG Received server start event
MODCLUSTER000004 DEBUG Received server stop event
MODCLUSTER000005 DEBUG Received add context event for %s:%s
MODCLUSTER000006 DEBUG Received remove context event for %s:%s
MODCLUSTER000007 DEBUG Received start context event for %s:%s
MODCLUSTER000008 DEBUG Received stop context event for %s:%s
MODCLUSTER000009 DEBUG Sending %s for %s
MODCLUSTER000010 DEBUG Sending %s for %s:%s
MODCLUSTER000011 INFO %s will use %s as jvm-route
MODCLUSTER000012 INFO %s connector will use %s
MODCLUSTER000020 DEBUG Waiting to drain %d pending requests from %s:%s
MODCLUSTER000021 INFO All pending requests drained from %s:%s in %.1f seconds
MODCLUSTER000022 WARN Failed to drain %d remaining pending requests from %s:%s within %.1f seconds
MODCLUSTER000023 DEBUG Waiting to drain %d active sessions from %s:%s
MODCLUSTER000024 INFO All active sessions drained from %s:%s in %.1f seconds
MODCLUSTER000025 WARN Failed to drain %d remaining active sessions from %s:%s within %.1f seconds
MODCLUSTER000031 WARN Could not bind multicast socket to %s (%s address): %s; make sure your multicast address is of the same type as the IP stack (IPv4 or IPv6). Multicast socket will not be bound to an address, but this may lead to cross talking (see https://developer.jboss.org/docs/DOC-9469 for details).
MODCLUSTER000032 INFO Listening to proxy advertisements on %s
MODCLUSTER000034 ERROR Failed to start advertise listener
MODCLUSTER000040 ERROR Failed to parse response header from %2$s for %1$s command
MODCLUSTER000041 ERROR Unrecoverable syntax error %s sending %s command to %s: %s
MODCLUSTER000042 ERROR Error %s sending %s command to %s, configuration will be reset: %s
MODCLUSTER000043 ERROR Failed to send %s command to %s: %s
MODCLUSTER000045 WARN %s is not supported on this system and will be disabled.
MODCLUSTER000046 INFO Starting to drain %d active sessions from %s:%s in %d seconds.
MODCLUSTER000048 java.lang.RuntimeException Multiple connectors match specified host:port (%s)! Ensure connectorPort and/or connectorAddress are configured.
MODCLUSTER000049 java.lang.RuntimeException Could not resolve configured connector address (%d)!
MODCLUSTER000050 java.lang.RuntimeException Initial load must be within the range [0..100] or -1 to not prepopulate with initial load, but was: %d
MODCLUSTER000051 java.lang.RuntimeException No valid advertise interface configured! Disabling multicast advertise mechanism.
MODCLUSTER000052 java.lang.RuntimeException Attempted to create multicast socket without multicast address specified! Disabling multicast advertise mechanism.
MODCLUSTER000053 java.lang.RuntimeException Attempted to create multicast socket with unicast address (%s)! Disabling multicast advertise mechanism.
MODCLUSTER000054 INFO Starting to drain %d active sessions from %s:%s waiting indefinitely until all remaining sessions are drained or expired.
MODCLUSTER000055 WARN No configured connector for engine %s. If this engine should be used with mod_cluster check connector, connectorPort and/or connectorAddress configuration.

MSC

Code Level Return Type Message
MSC-00001 INFO JBoss MSC version %s
MSC000001 ERROR Failed to start %s
MSC000002 ERROR Invocation of listener "%s" failed
MSC000003 WARN Exception thrown after start was already completed in %s
MSC000004 WARN Failure during stop of %s
MSC000005 WARN Unexpected disappearance of %s during stop
MSC000006 WARN Uninjection "%2$s" of %1$s failed unexpectedly
MSC000007 WARN An internal service error has occurred while processing an operation on %s
MSC000008 ERROR Worker thread %s threw an uncaught exception
MSC000009 WARN An error occurred while trying to close the profile output file: %s
MSC000010 ERROR Failed to register MBean with MBeanServer
MSC000011 java.lang.IllegalStateException Service not started
MSC000012 ERROR Injection failed for service %s
MSC000013 WARN Failed to retrieve platform MBeanServer

RESTEASY

Code Level Return Type Message
RESTEASY-00001 DEBUG Unable to extract parameter from http request: %s value is '%s' for %s
RESTEASY-00001 ERROR Error processing request %s
RESTEASY002000 ERROR Error resuming failed async operation
RESTEASY002005 ERROR Failed executing {0} {1}
RESTEASY002010 ERROR Failed to execute
RESTEASY002015 ERROR Failed to invoke asynchronously
RESTEASY002020 ERROR Unhandled asynchronous exception, sending back 500
RESTEASY002025 ERROR Unknown exception while executing {0} {1}
RESTEASY002030 DEBUG Failed to write event {0}
RESTEASY002035 ERROR Cannot register {0} as HeaderDelegate: it has no type parameter
RESTEASY002040 ERROR GET method returns the patch/merge json object target for request {0} not found
RESTEASY002041 ERROR Failed to get the patch/merge target for request {0}
RESTEASY002050 ERROR The set instance of %s for property %s is not a valid %s.
RESTEASY002100 WARN Accept extensions not supported.
RESTEASY002105 WARN Ambiguity constructors are found in %s. More details please refer to http://jsr311.java.net/nonav/releases/1.1/spec/spec.html
RESTEASY002110 WARN Attempting to register empty contracts for %s
RESTEASY002115 WARN Attempting to register unassignable contract for %s
RESTEASY002117 WARN Charset %s unavailable.
RESTEASY002120 WARN ClassNotFoundException: Unable to load builtin provider {0} from {1}
RESTEASY002123 WARN Could not bind to specified download directory %s so will use temp dir.
RESTEASY002125 WARN Marking file '%s' to be deleted, as it could not be deleted while processing request:
RESTEASY002130 WARN Failed to parse request.
RESTEASY002135 WARN Ignoring unsupported locale: %s
RESTEASY002137 WARN Invalid format for {0}, using default value {1}
RESTEASY002138 WARN Invalid regex for {0}: {2}
RESTEASY002140 WARN Qualifying annotations found at non-public method: {0}.{1}(); Only public methods may be exposed as resource methods.
RESTEASY002142 WARN Multiple resource methods match request {0}. Selecting one. Matching methods: {1}
RESTEASY002145 WARN NoClassDefFoundError: Unable to load builtin provider {0} from {1}
RESTEASY002150 WARN %s is no longer supported. Use a servlet 3.0 container and the ResteasyServletInitializer
RESTEASY002155 WARN Provider class {0} is already registered. 2nd registration is being ignored.
RESTEASY002160 WARN Provider instance {0} is already registered. 2nd registration is being ignored.
RESTEASY002165 WARN No valueOf() method available for %s, trying constructor...
RESTEASY002170 WARN A reader for {0} was not found. This provider is currently configured to handle only {1}
RESTEASY002172 WARN Singleton {0} object class {1} already deployed. Singleton ignored.
RESTEASY002175 WARN The use of %s is deprecated, please use jakarta.ws.rs.Application as a context-param instead
RESTEASY002180 WARN Skip illegal field [%s] in value: [%s]
RESTEASY002185 WARN Skip unknown field [%s]
RESTEASY002186 WARN Failed to set servlet request into asynchronous mode, server sent events may not work
RESTEASY002190 WARN Annotation, @PreMaching, not valid on ClientRequestFilter implementation, [%s]. Annotation is being ignored.
RESTEASY002195 WARN The following sub-resource methods and sub-resource locators have the same path, [%s]. The paths should be unique. [%s]
RESTEASY002196 WARN Component of type %s can't be dynamically bound to a resource method as a %s provider.
RESTEASY002197 WARN The previous response status was {0} {1}. The status should be changed before the entity is set.
RESTEASY002200 INFO Adding class resource {0} from Application {1}
RESTEASY002205 INFO Adding provider class {0} from Application {1}
RESTEASY002210 INFO Adding provider singleton {0} from Application {1}
RESTEASY002215 INFO Adding singleton provider {0} from Application {1}
RESTEASY002220 INFO Adding singleton resource {0} from Application {1}
RESTEASY002225 INFO Deploying {0}: {1}
RESTEASY002227 INFO MediaType {0} on {1}() lacks charset. Consider setting charset or turning on context parameter resteasy.add.charset
RESTEASY002230 INFO Unable to close entity stream
RESTEASY002235 INFO Unable to decode GZIP compressed Base64 data
RESTEASY002300 DEBUG Creating context object <{0} : {1}>
RESTEASY002305 DEBUG Failed executing {0} {1}
RESTEASY002307 DEBUG Failed to execute
RESTEASY002310 DEBUG IN ONE WAY!!!!!
RESTEASY002315 DEBUG PathInfo: %s
RESTEASY002320 DEBUG RUNNING JOB!!!!
RESTEASY002322 DEBUG Temporary file %s has been created. Consider deleting after it has been used.
RESTEASY002325 DEBUG Unable to retrieve config: disableDTDs defaults to true
RESTEASY002330 DEBUG Unable to retrieve config: expandEntityReferences defaults to false
RESTEASY002335 DEBUG Unable to retrieve config: enableSecureProcessingFeature defaults to true
RESTEASY002340 DEBUG Client receive processing failure.
RESTEASY002350 WARN Failed to reset the context on thread: %s
RESTEASY002360 WARN Failed to look up JNDI resource "%s". Using a default ExecutorService.
RESTEASY002370 WARN Failed to load: %s
RESTEASY002375 ERROR Error processing unknown request.
RESTEASY004671 DEBUG Ignoring exception thrown within InvocationCallback
RESTEASY004672 DEBUG Client send processing failure.
RESTEASY004687 WARN Closing a %s instance for you. Please close clients yourself.

SRCFG

Code Level Return Type Message
SRCFG01000 WARN Unable to get context classloader instance
SRCFG01001 DEBUG The config %s was loaded from %s with the value %s
SRCFG01002 DEBUG The config %s was not found
SRCFG01003 WARN Unable to get declared constructor for class %s with arguments %s
SRCFG01004 WARN Unable to set accessible flag on %s
SRCFG01005 WARN Could not find sources with %s in %s
SRCFG03000 WARN Unable to read content from file %s. Exception: %s

SRFTL

Code Level Return Type Message
SRFTL00000 TRACE AsyncTimeoutTask %s created
SRFTL00000 TRACE AsyncTimeoutTask %s completing with %s
SRFTL00000 TRACE AsyncTimeout rethrowing %s
SRFTL00000 TRACE Timer %s created
SRFTL00000 TRACE Timer %s shut down
SRFTL00000 TRACE Scheduled timer task %s to run in %s millis
SRFTL00000 TRACE Running timer task %s
SRFTL00000 TRACE Cancelled timer task %s
SRFTL00000 DEBUG Found event loop integration %s
SRFTL00000 DEBUG No event loop integration found
SRFTL00001 INFO MicroProfile: Fault Tolerance activated (SmallRye Fault Tolerance version: %s)
SRFTL00002 jakarta.enterprise.inject.spi.DefinitionException Multiple circuit breakers have the same name '%s': %s
SRFTL00003 jakarta.enterprise.inject.spi.DefinitionException Backoff annotation @%s present on '%s', but @Retry is missing
SRFTL00004 jakarta.enterprise.inject.spi.DefinitionException Both @Blocking and @NonBlocking present on '%s'
SRFTL00005 jakarta.enterprise.inject.spi.DefinitionException Both @Asynchronous and @AsynchronousNonBlocking present on '%s'
SRFTL11000 WARN Unexpected exception in timer loop, ignoring

SRHCK

Code Level Return Type Message
SRHCK01000 ERROR Error processing Health Checks
SRHCK01001 INFO Reporting health down status: %s

SRJWT

Code Level Return Type Message
SRJWT01000 ERROR path.%s configuration will be ignored because the path depth is too large: %d, maximum depth is %d.
SRJWT01001 ERROR Token header is not 'Cookie', the cookie name value will be ignored
SRJWT01002 ERROR Algorithm %s not supported
SRJWT01003 DEBUG Trying to create a key from the encoded PEM key...
SRJWT01004 DEBUG Failed to create a key from the encoded PEM key
SRJWT01005 DEBUG Trying to create a key from the encoded PEM certificate...
SRJWT01006 DEBUG Failed to to create a key from the encoded PEM certificate
SRJWT01007 DEBUG Trying to load the local JWK(S)...
SRJWT01008 DEBUG Failed to load the JWK(S)
SRJWT01009 DEBUG Failed to parse the JWK JSON representation
SRJWT03000 DEBUG init, mpJwtPublicKey=%s, mpJwtIssuer=%s, mpJwtLocation=%s
SRJWT03001 DEBUG Neither mpJwtPublicKey nor mpJwtLocation properties are configured, JWTAuthContextInfo will not be available
SRJWT03002 DEBUG mpJwtPublicKey parsed as JWK(S)
SRJWT03003 DEBUG mpJwtPublicKey failed as JWK(S), %s
SRJWT03004 DEBUG mpJwtPublicKey parsed as PEM
SRJWT03005 DEBUG Unsupported key format
SRJWT03006 WARN '%s' property is deprecated and will be removed in a future version. Use '%s ' property instead
SRJWT06000 DEBUG tokenHeaderName = %s
SRJWT06001 DEBUG Header %s was null
SRJWT06002 DEBUG tokenCookieName = %s
SRJWT06003 DEBUG Cookie %s was null
SRJWT06004 DEBUG Authorization header does not contain a Bearer prefix
SRJWT06005 DEBUG Authorization header was null
SRJWT08000 DEBUG getAudience failure
SRJWT08001 WARN getGroups failure:
SRJWT08002 WARN getClaimValue failure for: %s
SRJWT08003 WARN replaceClaimValueWithJsonValue failure for: %s
SRJWT08004 DEBUG Token is invalid
SRJWT08005 DEBUG Verification key is unresolvable
SRJWT08006 DEBUG Claim value at the path %s is not a String
SRJWT08007 DEBUG Claim value at the path %s is not an array of strings
SRJWT08008 DEBUG Claim value at the path %s is neither an array of strings nor string
SRJWT08009 TRACE Updated groups to: %s
SRJWT08010 DEBUG Failed to access rolesMapping claim
SRJWT08011 DEBUG No claim exists at the path %s at segment %s
SRJWT08012 DEBUG Claim value at the path %s is not a json object
SRJWT08014 DEBUG Required claims %s are not present in the JWT
SRJWT08015 DEBUG loadSpi, cl=%s, u=%s, sl=%s
SRJWT08016 WARN Multiple JWTCallerPrincipalFactory implementations found: %s and %s
SRJWT08017 DEBUG sl=%s, loaded=%s
SRJWT08018 WARN Failed to locate JWTCallerPrincipalFactory provider
SRJWT08019 DEBUG AuthContextInfo is: %s
SRJWT08020 DEBUG Failed to create a key from the HTTPS JWK Set
SRJWT08021 DEBUG JWK with a matching 'kid' is not available, refreshing HTTPS JWK Set
SRJWT08022 DEBUG Failed to refresh HTTPS JWK Set
SRJWT08023 DEBUG JWK with a matching 'kid' is not available but HTTPS JWK Set has been refreshed less than %d minutes ago, trying to create a key from the HTTPS JWK Set one more time
SRJWT08024 DEBUG Trying to create a key from the HTTPS JWK Set after the refresh
SRJWT08025 DEBUG Failed to create a key from the HTTPS JWK Set after the refresh
SRJWT08026 DEBUG Trying to create a key from the JWK(S)
SRJWT08027 DEBUG Failed to create a key from the JWK(S)
SRJWT08028 DEBUG Invalid token 'kid' header: %s, expected: %s
SRJWT08029 DEBUG Trying to load the keys from the HTTPS JWK(S)
SRJWT08030 DEBUG Checking if the key content is a JWK key or JWK key set
SRJWT08031 DEBUG Checking if the key content is a Base64URL encoded JWK key or JWK key set
SRJWT08032 DEBUG Unable to decode content using Base64 decoder
SRJWT08033 DEBUG Key has been created from the encoded JWK key or JWK key set
SRJWT08034 DEBUG Key has been created from the JWK key or JWK key set
SRJWT08035 DEBUG Checking if the key content is a Base64 encoded PEM key
SRJWT08036 DEBUG Key has been created from the encoded PEM key
SRJWT08037 DEBUG The key content is not a valid encoded PEM key
SRJWT08038 DEBUG Checking if the key content is a Base64 encoded PEM certificate
SRJWT08039 DEBUG PublicKey has been created from the encoded PEM certificate
SRJWT08040 DEBUG The key content is not a valid encoded PEM certificate
SRJWT08041 DEBUG Decryption key is unresolvable
SRJWT08042 DEBUG Encrypted token sequence is invalid
SRJWT08043 DEBUG Trying to create a key from the HTTPS JWK(S)
SRJWT08044 DEBUG Encrypted token headers must contain a content type header
SRJWT11000 DEBUG Success
SRJWT11001 DEBUG Unable to validate bearer token
SRJWT11002 DEBUG No usable bearer token was found in the request, continuing unauthenticated
SRJWT11003 DEBUG Failed to resolve the key. Either corrupt or unavailable.
SRJWT12000 DEBUG getValue(%s), null JsonWebToken
SRJWT12001 DEBUG Failed to find Claim for: %s
SRJWT12002 DEBUG getValue(%s), isOptional=%s, claimValue=%s
SRJWT12003 DEBUG JsonValueProducer(%s).produce
SRJWT12004 DEBUG getOptionalString(%s)
SRJWT12005 DEBUG getOptionalStringSet(%s)
SRJWT12006 DEBUG getOptionalLong(%s)
SRJWT12007 DEBUG getOptionalBoolean(%s)
SRJWT12008 DEBUG addTypeToClaimProducer(%s)
SRJWT12009 DEBUG Checking Provider Claim(%s), ip: %s
SRJWT12010 DEBUG pip: %s
SRJWT12011 DEBUG getClaimAsSet(%s)
SRJWT12012 DEBUG getClaimAsString(%s)
SRJWT12013 DEBUG getClaimAsLong(%s)
SRJWT12014 DEBUG getClaimAsDouble(%s)
SRJWT12015 DEBUG getClaimAsBoolean(%s)
SRJWT12016 DEBUG getOptionalValue(%s)
SRJWT12017 DEBUG beforeBeanDiscovery(%s)
SRJWT12018 DEBUG EE Security is available, JWTHttpAuthenticationMechanism has been registered
SRJWT12019 INFO EE Security is NOT available, JWTAuthenticationFilter has been registered
SRJWT12020 DEBUG Added type: %s

SRMSG

Code Level Return Type Message
SRMSG00200 ERROR The method %s has thrown an exception
SRMSG00201 ERROR Error caught while processing a message in method %s
SRMSG00202 INFO Created new Vertx instance
SRMSG00203 INFO Created worker pool named %s with concurrency of %d
SRMSG00204 WARN Multiple publisher found for %s, using the merge policy `ONE` takes the first found
SRMSG00205 DEBUG Strict mode enabled
SRMSG00206 DEBUG Scanning Type: %s
SRMSG00207 WARN %s
SRMSG00208 WARN The connector '%s' has no downstreams
SRMSG00209 DEBUG Beginning graph resolution, number of components detected: %d
SRMSG00210 DEBUG Graph resolution completed in %d ns
SRMSG00211 ERROR Unable to create invoker instance of %s
SRMSG00212 ERROR Unable to initialize mediator: %s
SRMSG00224 INFO Analyzing mediator bean: %s
SRMSG00226 DEBUG Found incoming connectors: %s
SRMSG00227 DEBUG Found outgoing connectors: %s
SRMSG00228 INFO No MicroProfile Config found, skipping
SRMSG00229 DEBUG Channel manager initializing...
SRMSG00230 ERROR Unable to create the publisher or subscriber during initialization
SRMSG00231 INFO Incoming channel `%s` disabled by configuration
SRMSG00232 INFO Outgoing channel `%s` disabled by configuration
SRMSG00233 WARN Unable to extract the ingested payload type for method `%s`, the reason is: %s
SRMSG00234 WARN Failed to emit a Message to the channel
SRMSG00235 DEBUG Beginning materialization
SRMSG00236 DEBUG Materialization completed in %d ns
SRMSG00237 WARN Use of @jakarta.inject.Named in Reactive Messaging is deprecated, use @io.smallrye.common.annotation.Identifier instead
SRMSG00238 INFO No ExecutionHolder, disabling @Blocking support
SRMSG00239 java.lang.IllegalStateException Cannot specify both client-options-name and client-ssl-context-name
SRMSG00240 java.lang.IllegalStateException Could not find an SSLContext bean with the @Identifier=%s
SRMSG18201 DEBUG Dead queue letter configured with: topic: `%s`, key serializer: `%s`, value serializer: `%s`
SRMSG18202 INFO A message sent to channel `%s` has been nacked, sending the record to a dead letter topic %s
SRMSG18203 ERROR A message sent to channel `%s` has been nacked, fail-stop
SRMSG18204 WARN A message sent to channel `%s` has been nacked, ignored failure is: %s.
SRMSG18205 DEBUG The full ignored failure is
SRMSG18206 ERROR Unable to write to Kafka from channel %s (topic: %s)
SRMSG18206 ERROR Unable to write to Kafka from channel %s (no topic set)
SRMSG18207 ERROR Unable to dispatch message to Kafka
SRMSG18209 DEBUG Sending message %s to Kafka topic '%s'
SRMSG18210 ERROR Unable to send a record to Kafka
SRMSG18211 DEBUG Message %s sent successfully to Kafka topic-partition '%s-%d', with offset %d
SRMSG18212 ERROR Message %s was not sent to Kafka topic '%s' - nacking message
SRMSG18213 INFO Setting %s to %s
SRMSG18214 INFO Key deserializer omitted, using String as default
SRMSG18215 DEBUG An error has been caught while closing the Kafka Write Stream
SRMSG18216 WARN No `group.id` set in the configuration, generate a random id: %s
SRMSG18217 ERROR Unable to read a record from Kafka topics '%s'
SRMSG18218 DEBUG An exception has been caught while closing the Kafka consumer
SRMSG18219 INFO Loading KafkaConsumerRebalanceListener from configured name '%s'
SRMSG18220 INFO Loading KafkaConsumerRebalanceListener from group id '%s'
SRMSG18222 ERROR Unable to execute consumer revoked re-balance listener for group '%s'
SRMSG18224 INFO Executing consumer revoked re-balance listener for group '%s'
SRMSG18225 INFO Executed consumer assigned re-balance listener for group '%s'
SRMSG18226 INFO Executed consumer revoked re-balance listener for group '%s'
SRMSG18227 WARN Re-enabling consumer for group '%s'. This consumer was paused because of a re-balance failure.
SRMSG18228 WARN A failure has been reported for Kafka topics '%s'
SRMSG18229 INFO Configured topics for channel '%s': %s
SRMSG18230 INFO Configured topics matching pattern for channel '%s': %s
SRMSG18231 WARN The record %d from topic-partition '%s' has waited for %s seconds to be acknowledged. This waiting time is greater than the configured threshold (%d ms). At the moment %d messages from this partition are awaiting acknowledgement. The last committed offset for this partition was %d. This error is due to a potential issue in the application which does not acknowledged the records in a timely fashion. The connector cannot commit as a record processing has not completed.
SRMSG18232 DEBUG Will commit for group '%s' every %d milliseconds.
SRMSG18233 ERROR Invalid value serializer to write a structured Cloud Event. Found %s, expected the org.apache.kafka.common.serialization.StringSerializer
SRMSG18234 DEBUG Auto-commit disabled for channel %s
SRMSG18235 WARN Will not health check throttled commit strategy for group '%s'.
SRMSG18236 DEBUG Will mark throttled commit strategy for group '%s' as unhealthy if records go more than %d milliseconds without being processed.
SRMSG18237 DEBUG Setting client.id for Kafka producer to %s
SRMSG18239 DEBUG Received acknowledgement for record %d on '%s' (consumer group: '%s'). Ignoring it because the partition is not assigned to the consume anymore. Record will likely be processed again. Current assignments are %s.
SRMSG18240 DEBUG '%s' commit strategy used for channel '%s'
SRMSG18241 FATAL The deserialization failure handler `%s` throws an exception
SRMSG18242 WARN A failure has been reported during a rebalance - the operation will be retried: '%s'
SRMSG18243 DEBUG Shutting down - Pausing all topic-partitions
SRMSG18244 DEBUG Shutting down - Waiting for message processing to complete, %d messages still in processing
SRMSG18245 WARN There are still %d unprocessed messages after the closing timeout
SRMSG18246 DEBUG Pausing Kafka consumption for client %s (%s), queue size %s >= %s
SRMSG18247 DEBUG Resuming Kafka consumption for channel %s (%s), queue size %s <= %s
SRMSG18248 DEBUG Key serializer omitted, using String as default
SRMSG18249 ERROR Unable to recover from the deserialization failure (topic: %s), configure a DeserializationFailureHandler to recover from errors.
SRMSG18250 WARN The configuration property '%s' is deprecated and is replaced by '%s'.
SRMSG18251 DEBUG Committed %s
SRMSG18252 WARN Failed to commit %s, it will be re-attempted
SRMSG18253 DEBUG Removing topic-partition '%s' from the store - the partition is not assigned to the consumer anymore. Current assignments are: %s
SRMSG18254 DEBUG Topic-partition '%s' has been revoked - going to commit offset %d
SRMSG18255 DEBUG Received a record from topic-partition '%s' at offset %d, while the last committed offset is %d - Ignoring record
SRMSG18256 INFO Initialize record store for topic-partition '%s' at position %d.
SRMSG18257 INFO Kafka consumer %s, connected to Kafka brokers '%s', belongs to the '%s' consumer group and is configured to poll records from %s
SRMSG18258 INFO Kafka producer %s, connected to Kafka brokers '%s', is configured to write records to '%s'
SRMSG18259 WARN Kafka latest commit strategy failed to commit record from topic-partition '%s' at offset %d
SRMSG18260 ERROR Unable to recover from the serialization failure (topic: %s), configure a SerializationFailureHandler to recover from errors.
SRMSG18261 ERROR Unable to initialize producer from channel %s.
SRMSG18262 WARN Aborting transaction for producer id %s in channel %s.
SRMSG18263 FATAL The serialization failure handler `%s` throws an exception
SRMSG18264 WARN No `checkpoint.state-store` given to use with checkpoint commit strategy. `file` will be used.
SRMSG18265 WARN Will not health check checkpoint commit strategy for consumer '%s'.
SRMSG18266 DEBUG Will mark checkpoint commit strategy for consumer '%s' as unhealthy if processing state go more than %d milliseconds without being persisted.
SRMSG18267 DEBUG Partitions assigned to client %s : %s with initial state %s
SRMSG18268 ERROR Failed fetching state on partitions assigned to client %s : %s
SRMSG18269 DEBUG Partitions revoked from client %s: %s with state to persist %s
SRMSG18270 DEBUG Persisted state for client %s : %s
SRMSG18271 WARN Failed persisting state for %s : %s
SRMSG18272 DEBUG Failed persisting state but can be retried for %s : %s
SRMSG18273 WARN Checkpoint commit strategy processing state type not found for channel %s : %s
SRMSG18274 INFO Error caught in producer interceptor `onSend` for channel %s
SRMSG18275 TRACE Error caught in producer interceptor `onAcknowledge` for channel %s
SRMSG18276 TRACE Error caught in producer interceptor `close` for channel %s
SRMSG18277 INFO Delayed retry topics configured for channel `%s` with topics `%s`, max retries, `%d`, timeout `%d`ms, dlq topic `%s`
SRMSG18278 INFO A message sent to channel `%s` has been nacked, sending the record to topic %s
SRMSG18279 WARN A message sent to channel `%s` reached delayed retry timeout `%s` milliseconds reached for record `%s`
SRMSG18280 WARN A message sent to channel `%s` has been nacked and won't be retried again. Configure `dead-letter-queue.topic` for sending the record to a dead letter topic

SROAP

Code Level Return Type Message
SROAP01000 ERROR Failed to introspect BeanInfo for: %s
SROAP01001 INFO Schema with zero references removed from #/components/schemas: %s
SROAP01002 INFO Cyclic object reference detected in OpenAPI model, skipping current node
SROAP01003 WARN Merge of property would result in cyclic object reference in OpenAPI model, skipping property '%s' in type %s
SROAP02000 DEBUG Processing a map of %s annotations.
SROAP02001 DEBUG Processing a json map of %s nodes.
SROAP02002 DEBUG Processing a list of %s annotations.
SROAP02003 DEBUG Processing a json list of %s.
SROAP02004 DEBUG Processing a single %s annotation.
SROAP02005 DEBUG Processing an %s annotation.
SROAP02006 DEBUG Processing a single %s annotation as a %s.
SROAP02007 DEBUG Processing a single %s json node.
SROAP02008 DEBUG Processing an %s json node.
SROAP02009 DEBUG Processing a single %s json object.
SROAP02010 DEBUG Processing a json map of %s.
SROAP02011 ERROR Error reading a CallbackOperation annotation.
SROAP02012 DEBUG Processing a list of %s annotations into an %s.
SROAP02013 DEBUG Processing an enum %s
SROAP02014 DEBUG Processing an array of %s annotations.
SROAP02015 DEBUG Processing a json array of %s json nodes.
SROAP02016 WARN Failed to read enumeration values from enum %s method %s with `@JsonValue`: %s
SROAP04000 DEBUG Scanning deployment for %s Annotations.
SROAP04001 DEBUG Starting processing with root: %s
SROAP04002 DEBUG Getting all fields for: %s in class: %s
SROAP04003 WARN Configured schema for %s could not be parsed
SROAP04004 INFO Configured schema for %s has been registered
SROAP04005 WARN Could not find schema class in index: %s
SROAP06000 DEBUG Processing @Schema annotation %s on a field %s
SROAP06001 DEBUG Annotation value has invalid format: %s
SROAP06002 DEBUG Possible cycle was detected at: %s. Will not search further.
SROAP06003 DEBUG Adding child node to path: %s
SROAP06004 DEBUG Path: %s
SROAP06005 DEBUG Ignoring type that is member of ignore set: %s
SROAP06006 DEBUG Ignoring type and adding to ignore set: %s
SROAP06007 DEBUG Processing an array %s
SROAP06008 DEBUG Processing parameterized type %s
SROAP06009 DEBUG Processing %s. Will treat as an %s.
SROAP07900 WARN Value '%s' is not a valid %s default
SROAP07901 WARN Matrix parameter references missing path segment: %s
SROAP07902 WARN @Parameter annotation missing %s parameter. Class: %s, Method: %s, Parameter.name: %s, Parameter.in: %s
SROAP07903 WARN Duplicate operationId: %s produced by Class: %s, Method: %s and Class: %s, Method: %s
SROAP10000 DEBUG Processing a JAX-RS resource class: %s
SROAP10001 DEBUG Processing JaxRs method: %s
SROAP10002 WARN Matrix parameter references missing path segment: %s
SROAP10003 WARN Value '%s' is not a valid %s default
SROAP31010 DEBUG Processing an enum %s
SROAP31011 DEBUG Encountered type not in Jandex index that is not well-known type. Will not traverse it: %s
SROAP31012 DEBUG Resolved type %s -> %s
SROAP31013 DEBUG Is a terminal type %s
SROAP31014 DEBUG Attempting to do TYPE_VARIABLE substitution: %s -> %s
SROAP31015 DEBUG Class for type %s not available
SROAP31016 ERROR Unanticipated mismatch between type arguments and type variables Args: %s Vars:%s

TXNWFHTTP

Code Level Return Type Message
TXNWFHTTP000001 jakarta.transaction.SystemException The protocol operation was interrupted locally
TXNWFHTTP000002 jakarta.transaction.RollbackException Rollback-only transaction rolled back
TXNWFHTTP000003 java.lang.IllegalStateException Invalid transaction state
TXNWFHTTP000004 javax.transaction.xa.XAException Transaction operation failed due to thread interruption

UT

Code Level Return Type Message
UT005001 ERROR An exception occurred processing the request
UT005003 ERROR IOException reading from channel
UT005005 ERROR Cannot remove uploaded file %s
UT005006 DEBUG Connection from %s terminated as request header was larger than %s
UT005007 DEBUG Request was not fully consumed
UT005008 DEBUG An invalid token '%s' with value '%s' has been received.
UT005009 DEBUG A mandatory token %s is missing from the request.
UT005010 DEBUG Verification of authentication tokens for user '%s' has failed using mechanism '%s'.
UT005011 ERROR Ignoring AJP request with prefix %s
UT005013 DEBUG An IOException occurred
UT005014 DEBUG Failed to parse request
UT005015 ERROR Error rotating access log
UT005016 ERROR Error writing access log
UT005017 ERROR Unknown variable %s. For the literal percent character use two percent characters: '%%'
UT005018 ERROR Exception invoking close listener %s
UT005020 ERROR Error writing JDBC log
UT005022 ERROR Exception generating error page %s
UT005023 ERROR Exception handling request to %s
UT005024 ERROR Could not register resource change listener for caching resource manager, automatic invalidation of cached resource will not work
UT005027 ERROR Timing out request to %s
UT005028 ERROR Proxy request to %s failed
UT005031 ERROR Proxy request to %s could not connect to backend server %s
UT005032 ERROR Listener not making progress on framed channel, closing channel to prevent infinite loop
UT005034 ERROR Remote endpoint failed to send initial settings frame in HTTP2 connection, frame type %s
UT005035 DEBUG Closing channel because of parse timeout for remote address %s
UT005036 ERROR ALPN negotiation failed for %s and no fallback defined, closing connection
UT005037 WARN Name of the cookie containing the session id, %s, had been too long and was truncated to: %s
UT005038 DEBUG Balancer created: id: %s, name: %s, stickySession: %s, stickySessionCookie: %s, stickySessionPath: %s, stickySessionRemove: %s, stickySessionForce: %s, waitWorker: %s, maxattempts: %s
UT005039 INFO Undertow starts mod_cluster proxy advertisements on %s with frequency %s ms
UT005040 DEBUG Gonna send payload: %s
UT005041 ERROR Cannot send advertise message. Address: %s
UT005042 DEBUG Undertow mod_cluster proxy MCMPHandler created
UT005043 ERROR Error in processing MCMP commands: Type:%s, Mess: %s
UT005044 INFO Removing node %s
UT005045 INFO Registering context %s, for node %s
UT005046 DEBUG Registering context %s, for node %s, with aliases %s
UT005047 INFO Unregistering context %s, from node %s
UT005048 DEBUG Node %s in error
UT005049 DEBUG NodeConfig created: connectionURI: %s, balancer: %s, load balancing group: %s, jvmRoute: %s, flushPackets: %s, flushwait: %s, ping: %s,ttl: %s, timeout: %s, maxConnections: %s, cacheConnections: %s, requestQueueSize: %s, queueNewRequests: %s
UT005050 ERROR Failed to process management request
UT005051 ERROR Failed to send ping response
UT005052 DEBUG Failed to send ping response, node.getJvmRoute(): %s, jvmRoute: %s
UT005053 INFO Registering node %s, connection: %s
UT005054 DEBUG MCMP processing, key: %s, value: %s
UT005055 DEBUG HttpClientPingTask run for connection: %s
UT005056 DEBUG Received node load in STATUS message, node jvmRoute: %s, load: %s
UT005057 DEBUG Sending MCMP response to destination: %s, HTTP status: %s, Headers: %s, response: %s
UT005058 WARN Could not bind multicast socket to %s (%s address): %s; make sure your multicast address is of the same type as the IP stack (IPv4 or IPv6). Multicast socket will not be bound to an address, but this may lead to cross talking (see http://www.jboss.org/community/docs/DOC-9469 for details).
UT005060 WARN Predicate %s uses old style square braces to define predicates, which will be removed in a future release. predicate[value] should be changed to predicate(value)
UT005061 java.lang.IllegalStateException More than %s restarts detected, breaking assumed infinite loop
UT005062 ERROR Pattern parse error
UT005063 ERROR Unable to decode with rest of chars starting: %s
UT005064 ERROR No closing ) found for in decode
UT005065 ERROR The next characters couldn't be decoded: %s
UT005066 ERROR X param for servlet request, couldn't decode value: %s
UT005067 ERROR X param in wrong format. Needs to be 'x-#(...)'
UT005068 INFO Pattern was just empty or whitespace
UT005069 ERROR Failed to write JDBC access log
UT005070 ERROR Failed to write pre-cached file
UT005071 ERROR Undertow request failed %s
UT005072 WARN Thread %s (id=%s) has been active for %s milliseconds (since %s) to serve the same request for %s and may be stuck (configured threshold for this StuckThreadDetectionValve is %s seconds). There is/are %s thread(s) in total that are monitored by this Valve and may be stuck.
UT005073 WARN Thread %s (id=%s) was previously reported to be stuck but has completed. It was active for approximately %s milliseconds. There is/are still %s thread(s) that are monitored by this Valve and may be stuck.
UT005074 ERROR Failed to invoke error callback %s for SSE task
UT005075 java.lang.IllegalStateException Unable to resolve mod_cluster management host's address for '%s'
UT005076 ERROR SSL read loop detected. This should not happen, please report this to the Undertow developers. Current state %s
UT005077 ERROR SSL unwrap buffer overflow detected. This should not happen, please report this to the Undertow developers. Current state %s
UT005079 ERROR ALPN negotiation on %s failed
UT005080 ERROR HttpServerExchange cannot have both async IO resumed and dispatch() called in the same cycle
UT005081 ERROR Response has already been started, cannot proxy request %s
UT005082 java.lang.IllegalArgumentException Configured mod_cluster management host address cannot be a wildcard address (%s)!
UT005083 java.io.IOException Unexpected end of compressed input
UT005084 java.io.IOException Attempted to write %s bytes however content-length has been set to %s
UT005085 DEBUG Connection %s for exchange %s was not closed cleanly, forcibly closing connection
UT005086 ERROR Failed to accept SSL request
UT005088 ERROR Failed to execute ServletOutputStream.closeAsync() on IO thread
UT005089 java.lang.IllegalArgumentException Method parameter '%s' cannot be null
UT005090 ERROR Unexpected failure
UT005091 ERROR Failed to initialize DirectByteBufferDeallocator
UT005092 DEBUG Failed to free direct buffer
UT005093 DEBUG Blocking read timed out
UT005094 DEBUG Blocking write timed out
UT005095 DEBUG SSLEngine delegated task was rejected
UT005096 DEBUG Authentication failed for digest header %s in %s
UT005097 DEBUG Failed to obtain subject for %s
UT005098 DEBUG GSSAPI negotiation failed for %s
UT005099 WARN Failed to create SSO for session '%s'
UT005100 DEBUG Failed to list paths for '%s'
UT005101 DEBUG No source to list resources from
UT005102 WARN Flushing waiting in a frame more than %s miliseconds. The framed channel will be forcibly closed.
UT015002 ERROR Stopping servlet %s due to permanent unavailability
UT015003 ERROR Stopping servlet %s till %s due to temporary unavailability
UT015005 ERROR Error invoking method %s on listener %s
UT015006 ERROR IOException dispatching async event
UT015007 WARN Stack trace on error enabled for deployment %s, please do not enable for production use
UT015008 WARN Failed to load development mode persistent sessions
UT015009 WARN Failed to persist session attribute %s with value %s for session %s
UT015010 WARN Failed to persist sessions
UT015012 ERROR Failed to generate error page %s for original exception: %s. Generating error page resulted in a %s.
UT015014 ERROR Error reading rewrite configuration
UT015015 java.lang.IllegalArgumentException Error reading rewrite configuration: %s
UT015016 java.lang.IllegalArgumentException Invalid rewrite map class: %s
UT015017 java.lang.IllegalArgumentException Error reading rewrite flags in line %s as %s
UT015018 java.lang.IllegalArgumentException Error reading rewrite flags in line %s
UT015019 ERROR Failed to destroy %s
UT015020 WARN Path %s is secured for some HTTP methods, however it is not secured for %s
UT015021 ERROR Failure dispatching async event
UT015022 WARN Requested resource at %s does not exist for include method
UT015023 java.lang.IllegalStateException This Context has been already destroyed
UT015024 ERROR Servlet %s init() method in web application %s threw exception
UT025003 DEBUG Decoding WebSocket Frame with opCode %s
UT025007 ERROR Unhandled exception for annotated endpoint %s
UT025008 WARN Incorrect parameter %s for extension
UT026001 ERROR Unable to instantiate endpoint
UT026002 ERROR Unable to instantiate server configuration %s
UT026003 INFO Adding annotated server endpoint %s for path %s
UT026004 INFO Adding annotated client endpoint %s
UT026005 INFO Adding programmatic server endpoint %s for path %s
UT026006 ERROR Exception running web socket method
UT026007 WARN On Endpoint class %s path param %s on method %s does not reference a valid parameter, valid parameters are %s.
UT026008 ERROR Could not close endpoint on undeploy.
UT026009 WARN XNIO worker was not set on WebSocketDeploymentInfo, the default worker will be used
UT026010 WARN Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
UT026011 java.lang.IllegalArgumentException XNIO worker was not set on WebSocketDeploymentInfo, and there is no default to use
UT026012 java.lang.IllegalArgumentException Buffer pool was not set on WebSocketDeploymentInfo, and there is no default to use

VFS

Code Level Return Type Message
VFS000001 WARN A VFS mount (%s) was leaked!
VFS000002 INFO Failed to clean existing content for temp file provider of type %s. Enable DEBUG level log to find what caused this

WELD-

Code Level Return Type Message
WELD-000000 DEBUG Catching
WELD-000000 TRACE No PAT observers resolved for {0}. Skipping.
WELD-000000 TRACE Sending PAT using the default event resolver: {0}
WELD-000000 TRACE Sending PAT using the fast event resolver: {0}
WELD-000001 TRACE Exactly one constructor ({0}) annotated with @Inject defined, using it as the bean constructor for {1}
WELD-000002 TRACE Exactly one constructor ({0}) defined, using it as the bean constructor for {1}
WELD-000004 TRACE Exactly one post construct method ({0}) for {1}
WELD-000006 TRACE Exactly one pre destroy method ({0}) for {1}
WELD-000007 TRACE Created session bean proxy for {0}
WELD-000008 TRACE Called {0} on {1} with parameters {2} which returned {3}
WELD-000009 org.jboss.weld.exceptions.IllegalArgumentException Dynamic lookup of {0} is not supported
WELD-000010 TRACE Using qualifiers {0} for {1}
WELD-000012 TRACE Building bean metadata for {0}
WELD-000014 TRACE Using name {0} for {1}
WELD-000016 TRACE Using scope {0} for {1}
WELD-000018 WARN Executing producer field or method {0} on incomplete declaring bean {1} due to circular injection
WELD-000019 ERROR Error destroying an instance {0} of {1}
WELD-000023 java.lang.String Type parameter must be a concrete type: {0}
WELD-000025 org.jboss.weld.exceptions.IllegalStateException Tried to create an EEResourceProducerField, but no @Resource, @PersistenceContext, @PersistenceUnit, @WebServiceRef or @EJB is present: {0}
WELD-000026 org.jboss.weld.exceptions.IllegalStateException Security Services not available - unable to obtain the Principal
WELD-000027 org.jboss.weld.exceptions.IllegalStateException Transaction Services not available - unable to obtain the UserTransaction
WELD-000028 org.jboss.weld.exceptions.IllegalArgumentException Interception model must not be null
WELD-000029 org.jboss.weld.exceptions.IllegalArgumentException InterceptionType must not be null
WELD-000030 org.jboss.weld.exceptions.IllegalArgumentException Method must not be null
WELD-000031 org.jboss.weld.exceptions.IllegalArgumentException InterceptionType must not be lifecycle, but it is {0}
WELD-000032 org.jboss.weld.exceptions.IllegalArgumentException InterceptionType must be lifecycle, but it is {0}
WELD-000033 java.lang.String Could not instantiate client proxy for {0}
WELD-000034 java.lang.String Could not access bean correctly when creating client proxy for {0}
WELD-000035 org.jboss.weld.exceptions.DefinitionException There was an error creating an id for {0}
WELD-000036 org.jboss.weld.exceptions.IllegalStateException Unexpected unwrapped custom decorator instance: {0}
WELD-000037 org.jboss.weld.exceptions.UnsupportedOperationException Cannot call EJB remove method directly on non-dependent scoped bean {0}
WELD-000038 org.jboss.weld.exceptions.DefinitionException A bean class that is not a decorator has an injection point annotated @Delegate at injection point {0} at {1} StackTrace:
WELD-000039 org.jboss.weld.exceptions.DefinitionException @Typed class {0} not present in the set of bean types of {1} [{2}]
WELD-000040 org.jboss.weld.exceptions.DefinitionException All stereotypes must specify the same scope or the bean must declare a scope - declared on {0}, declared stereotypes [{1}], possible scopes {2}{3}
WELD-000041 org.jboss.weld.exceptions.DefinitionException Specializing bean may not declare a bean name if it is declared by specialized bean specializing: {0} specialized: {1}
WELD-000042 org.jboss.weld.exceptions.IllegalStateException Cannot operate on non container provided decorator {0}
WELD-000043 org.jboss.weld.exceptions.IllegalStateException The following bean is not an EE resource producer: {0}
WELD-000044 org.jboss.weld.exceptions.NullInstanceException Unable to obtain instance from {0}
WELD-000045 org.jboss.weld.exceptions.InvalidObjectException Unable to deserialize object - serialization proxy is required
WELD-000046 org.jboss.weld.exceptions.DefinitionException At most one scope may be specified on {0}
WELD-000047 org.jboss.weld.exceptions.DefinitionException Specializing bean must extend another bean: {0}
WELD-000048 java.lang.String Conflicting interceptor bindings found on {0}
WELD-000049 org.jboss.weld.exceptions.WeldException Unable to invoke {0} on {1}
WELD-000050 org.jboss.weld.exceptions.WeldException Cannot cast producer type {0} to bean type {1}
WELD-000052 org.jboss.weld.exceptions.IllegalProductException Cannot return null from a non-dependent producer method: {0} at {1} StackTrace:
WELD-000053 org.jboss.weld.exceptions.IllegalProductException Producers cannot declare passivating scope and return a non-serializable class: {0} at {1} StackTrace:
WELD-000054 org.jboss.weld.exceptions.IllegalProductException Producers cannot produce unserializable instances for injection into an injection point that requires a passivation capable dependency Producer: {0} at {1} Injection Point: {2} at {3} StackTrace:
WELD-000059 org.jboss.weld.exceptions.DefinitionException No delegate injection point defined for {0}
WELD-000060 org.jboss.weld.exceptions.DefinitionException Too many delegate injection points defined for {0}
WELD-000061 org.jboss.weld.exceptions.DefinitionException The delegate type does not extend or implement the decorated type. Decorated type: {0} Decorator: {1}
WELD-000064 org.jboss.weld.exceptions.IllegalStateException Unable to process decorated type: {0}
WELD-000066 org.jboss.weld.exceptions.DefinitionException {0} has more than one @Dispose parameter at {1} StackTrace:
WELD-000067 org.jboss.weld.exceptions.DefinitionException {0} is not allowed on same method as {1}, see {2} at {3} StackTrace:
WELD-000068 org.jboss.weld.exceptions.DefinitionException {0} method {1} is not a business method of {2} at {3} StackTrace:
WELD-000070 org.jboss.weld.exceptions.DefinitionException Simple bean {0} cannot be a non-static inner class
WELD-000071 org.jboss.weld.exceptions.DefinitionException Managed bean with a parameterized bean class must be @Dependent: {0}
WELD-000072 org.jboss.weld.exceptions.DeploymentException Bean declaring a passivating scope must be passivation capable. Bean: {0}
WELD-000073 org.jboss.weld.exceptions.DeploymentException Bean class which has decorators cannot be declared final: {0}
WELD-000075 org.jboss.weld.exceptions.DefinitionException Normal scoped managed bean implementation class has a public field: {0}
WELD-000076 org.jboss.weld.exceptions.DefinitionException Bean constructor must not have a parameter annotated with {0}: {1} at {2} StackTrace:
WELD-000077 org.jboss.weld.exceptions.DefinitionException Cannot declare multiple disposal methods for this producer method. Producer method: {0} Disposal methods: {1}
WELD-000078 org.jboss.weld.exceptions.DefinitionException Specialized producer method does not override another producer method: {0} at {1} StackTrace:
WELD-000079 org.jboss.weld.exceptions.CreationException Could not instantiate a proxy for a session bean: {0} Proxy: {1}
WELD-000080 org.jboss.weld.exceptions.DefinitionException Enterprise beans cannot be interceptors: {0}
WELD-000081 org.jboss.weld.exceptions.DefinitionException Enterprise beans cannot be decorators: {0}
WELD-000082 org.jboss.weld.exceptions.DefinitionException Scope {0} is not allowed on stateless session beans for {1}. Only @Dependent is allowed.
WELD-000083 org.jboss.weld.exceptions.DefinitionException Scope {0} is not allowed on singleton session beans for {1}. Only @Dependent and @ApplicationScoped is allowed.
WELD-000084 org.jboss.weld.exceptions.DefinitionException Specializing enterprise bean must extend another enterprise bean: {0}
WELD-000085 org.jboss.weld.exceptions.IllegalArgumentException Cannot destroy null instance of {0}
WELD-000086 org.jboss.weld.exceptions.IllegalArgumentException Cannot destroy session bean instance not created by the container: {0}
WELD-000087 org.jboss.weld.exceptions.DefinitionException Message driven beans cannot be Managed Beans: {0}
WELD-000088 org.jboss.weld.exceptions.DefinitionException Observer method must be static or local business method: {0} at {1} StackTrace:
WELD-000089 org.jboss.weld.exceptions.IllegalStateException Unable to determine EJB for {0}, multiple EJBs with that class: {1}
WELD-000090 org.jboss.weld.exceptions.DefinitionException A decorator has an abstract method that is not declared by any decorated type Method: {0} at {1} StackTrace:
WELD-000094 org.jboss.weld.exceptions.DefinitionException Injected field {0} cannot be annotated @Produces on {1}
WELD-000095 org.jboss.weld.exceptions.DefinitionException Session bean with generic class {0} must be @Dependent scope
WELD-000096 org.jboss.weld.exceptions.DefinitionException Producer fields on session beans must be static. Field {0} declared on {1}
WELD-000097 org.jboss.weld.exceptions.DefinitionException A producer method with a parameterized return type with a type variable must be declared @Dependent scoped: {0} at {1} StackTrace:
WELD-000098 org.jboss.weld.exceptions.DefinitionException A producer method return type may not contain a wildcard: {0} at {1} StackTrace:
WELD-000099 org.jboss.weld.exceptions.WeldException Cannot load class {0} during deserialization of proxy
WELD-000100 DEBUG Weld initialized. Validating beans
WELD-000101 INFO Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
WELD-000103 DEBUG Enabled alternatives for {0}: {1}
WELD-000104 DEBUG Enabled decorator types for {0}: {1}
WELD-000105 DEBUG Enabled interceptor types for {0}: {1}
WELD-000106 DEBUG Bean: {0}
WELD-000107 DEBUG Interceptor: {0}
WELD-000108 DEBUG Decorator: {0}
WELD-000109 DEBUG ObserverMethod: {0}
WELD-000110 org.jboss.weld.exceptions.IllegalArgumentException Cannot set the annotation type to null (if you want to stop the type being used, call veto()): {0}
WELD-000111 org.jboss.weld.exceptions.IllegalStateException Bean type is not STATELESS, STATEFUL or SINGLETON: {0}
WELD-000112 org.jboss.weld.exceptions.DefinitionException Class {0} has both @Interceptor and @Decorator annotations
WELD-000113 org.jboss.weld.exceptions.IllegalArgumentException BeanDeploymentArchive must not be null: {0}
WELD-000114 org.jboss.weld.exceptions.IllegalArgumentException Must start the container with a deployment
WELD-000116 org.jboss.weld.exceptions.IllegalStateException Manager has not been initialized
WELD-000117 org.jboss.weld.exceptions.IllegalStateException Required service {0} has not been specified for {1}
WELD-000118 org.jboss.weld.exceptions.DeploymentException Only normal scopes can be passivating. Scope {0}
WELD-000119 INFO Not generating any bean definitions from {0} because of underlying class loading error: Type {1} not found. If this is unexpected, enable DEBUG logging to see the full error.
WELD-000123 org.jboss.weld.exceptions.DeploymentException Error loading {0} defined in {1}
WELD-000124 DEBUG Using {0} threads for bootstrap
WELD-000125 org.jboss.weld.exceptions.DeploymentException Invalid thread pool size: {0}
WELD-000126 WARN Timeout shutting down thread pool {0} at {1}
WELD-000127 org.jboss.weld.exceptions.DeploymentException Invalid thread pool type: {0}
WELD-000128 org.jboss.weld.exceptions.DeploymentException Invalid value for property {0}: {1}
WELD-000130 org.jboss.weld.exceptions.IllegalArgumentException Cannot replace AnnotatedType for {0} with AnnotatedType for {1}
WELD-000132 DEBUG Disabled alternative (ignored): {0}
WELD-000133 DEBUG Specialized bean (ignored): {0}
WELD-000134 DEBUG Producer (method or field) of specialized bean (ignored): {0}
WELD-000135 WARN Legacy deployment metadata provided by the integrator. Certain functionality will not be available.
WELD-000136 ERROR Exception(s) thrown during observer of BeforeShutdown:
WELD-000137 TRACE Exception while loading class '{0}' : {1}
WELD-000138 TRACE Error while loading class '{0}' : {1}
WELD-000139 WARN Ignoring portable extension class {0} because of underlying class loading error: Type {1} not found. Enable DEBUG logging level to see the full error.
WELD-000140 org.jboss.weld.exceptions.IllegalStateException Calling Bootstrap method after container has already been initialized. For correct order, see CDI11Bootstrap's documentation.
WELD-000141 INFO Falling back to the default observer method resolver due to {0}
WELD-000142 DEBUG Exception loading annotated type using ClassFileServices. Falling back to the default implementation. {0}
WELD-000143 org.jboss.weld.exceptions.IllegalStateException Container lifecycle event method invoked outside of extension observer method invocation.
WELD-000144 org.jboss.weld.exceptions.IllegalStateException CDI API version mismatch. CDI 1.0 API detected on classpath. Weld requires version 1.1 or better.
WELD-000145 DEBUG Bean identifier index built: {0}
WELD-000146 WARN BeforeBeanDiscovery.addAnnotatedType(AnnotatedType) used for {0} is deprecated from CDI 1.1!
WELD-000147 WARN Decorator {0} declares inappropriate constructor therefore will not available as a managed bean!
WELD-000148 DEBUG ProcessAnnotatedType.setAnnotatedType() called by {0}: {1} replaced by {2}
WELD-000149 DEBUG ProcessBeanAttributes.setBeanAttributes() called by {0}: {1} replaced by {2}
WELD-000150 DEBUG ProcessInjectionPoint.setInjectionPoint() called by {0}: {1} replaced by {2}
WELD-000151 DEBUG ProcessInjectionTarget.setInjectionTarget() called by {0}: {1} replaced by {2}
WELD-000152 DEBUG ProcessProducer.setProducer() called by {0}: {1} replaced by {2}
WELD-000153 DEBUG AfterTypeDiscovery.addAnnotatedType() called by {0} for {1}
WELD-000154 DEBUG AfterBeanDiscovery.addBean() called by {0} for {1}
WELD-000155 DEBUG AfterBeanDiscovery.addObserverMethod() called by {0} for {1}
WELD-000156 DEBUG AfterBeanDiscovery.addContext() called by {0} for {1}
WELD-000157 DEBUG AfterBeanDiscovery.addDefinitionError() called by {0} for {1}
WELD-000158 DEBUG BeforeBeanDiscovery.addQualifier() called by {0} for {1}
WELD-000159 DEBUG BeforeBeanDiscovery.addScope() called by {0} for {1}
WELD-000160 DEBUG BeforeBeanDiscovery.addStereoType() called by {0} for {1}
WELD-000161 DEBUG BeforeBeanDiscovery.addInterceptorBindingCalled() called by {0} for {1}
WELD-000162 DEBUG BeforeBeanDiscovery.addAnnotatedType() called by {0} for {1}
WELD-000163 org.jboss.weld.exceptions.DeploymentException Non-unique bean deployment identifier detected: {0}
WELD-000164 DEBUG ProcessAnnotatedType.veto() called by {0} for {1}
WELD-000165 DEBUG ProcessBeanAttributes.veto() called by {0} for {1}
WELD-000166 DEBUG AfterTypeDiscovery.{3} modified by {0} {2} {1}
WELD-000167 WARN Class {0} is annotated with @{1} but it does not declare an appropriate constructor therefore is not registered as a bean!
WELD-000168 DEBUG Extension bean deployed: {0}
WELD-000169 INFO Jandex cannot distinguish inner and static nested classes! Update Jandex to 2.0.3.Final version or newer to improve scanning performance.
WELD-000170 org.jboss.weld.exceptions.IllegalStateException {0} observer cannot call both the configurator and set methods. Extension {1} StackTrace:
WELD-000171 DEBUG BeforeBeanDiscovery.configureQualifier() called by {0} for {1}
WELD-000172 DEBUG BeforeBeanDiscovery.configureInterceptorBinding() called by {0} for {1}
WELD-000173 DEBUG ProcessProducer.configureProducer() called by {0} for {1}
WELD-000174 DEBUG ProcessBeanAttributes.configureBeanAttributes() called by {0} for {1}
WELD-000175 DEBUG ProcessBeanAttributes.isIgnoreFinalMethods() called by {0} for {1}
WELD-000176 DEBUG ProcessAnnotatedType.configureAnnotatedType() called by {0} for {1}
WELD-000177 DEBUG ProcessObserverMethod.configureObserverMethod() called by {0} for {1}
WELD-000178 DEBUG ProcessInjectionPoint.configureInjectionPoint() called by {0} for {1}
WELD-000179 org.jboss.weld.exceptions.DeploymentException {0} created by {1} cannot be processed
WELD-000180 DEBUG Drop unused bean metadata: {0}
WELD-000181 WARN org.jboss.weld.executor.threadPoolType=COMMON detected but ForkJoinPool.commonPool() does not work with SecurityManager enabled, switching to {0} thread pool
WELD-000183 org.jboss.weld.exceptions.DefinitionException Multiple different @Priority values derived from stereotype annotations for annotated type - {0}
WELD-000200 TRACE Looked for {0} and got {1} in {2}
WELD-000201 TRACE Context {0} cleared
WELD-000202 TRACE Added {0} with key {1} to {2}
WELD-000203 TRACE Removed {0} from {1}
WELD-000211 org.jboss.weld.exceptions.IllegalArgumentException The delimiter "{0}" should not be in the prefix "{1}"
WELD-000212 org.jboss.weld.exceptions.IllegalArgumentException No contextual specified to retrieve (null)
WELD-000213 org.jboss.weld.exceptions.IllegalStateException No bean store available for {0}
WELD-000215 TRACE Bean store {0} is detached
WELD-000216 TRACE Updating underlying store with contextual {0} under ID {1}
WELD-000217 TRACE Adding detached contextual {0} under ID {1}
WELD-000218 TRACE Removed {0} from session {1}
WELD-000219 TRACE Unable to remove {0} from non-existent session
WELD-000220 TRACE Added {0} to session {1}
WELD-000221 TRACE Unable to add {0} to session as no session could be obtained
WELD-000222 TRACE Loading bean store {0} map from session {1}
WELD-000223 org.jboss.weld.exceptions.DefinitionException Context.getScope() returned null for {0}
WELD-000224 WARN Unable to clear the bean store {0}.
WELD-000225 WARN Bean store leak detected during {0} association: {1}
WELD-000226 org.jboss.weld.exceptions.DeploymentException Cannot register additional context for scope: {0}, {1}
WELD-000227 org.jboss.weld.exceptions.IllegalStateException Bean identifier index inconsistency detected - the distributed container probably does not work with identical applications Expected hash: {0} Current index: {1}
WELD-000228 DEBUG Bean store leak detected during {0} association - instances of beans with the following identifiers might not be destroyed correctly: {1}
WELD-000229 org.jboss.weld.exceptions.IllegalStateException Contextual reference of {0} is not valid after container {1} shutdown
WELD-000304 TRACE Cleaning up conversation {0}
WELD-000313 TRACE Lock acquired on conversation {0}
WELD-000314 TRACE Lock released on conversation {0}
WELD-000315 WARN Failed to acquire conversation lock in {0} ms for {1}
WELD-000316 WARN Attempt to release lock on conversation {0} failed because {1}
WELD-000317 DEBUG Promoted conversation {0} to long-running
WELD-000318 DEBUG Returned long-running conversation {0} to transient
WELD-000320 TRACE Cleaning up transient conversation
WELD-000321 org.jboss.weld.contexts.NonexistentConversationException No conversation found to restore for id {0}
WELD-000322 org.jboss.weld.contexts.BusyConversationException Conversation lock timed out: {0}
WELD-000326 TRACE Found conversation id {0} in request parameter
WELD-000327 DEBUG Resuming conversation with id {0}
WELD-000328 java.lang.IllegalStateException Attempt to call begin() on a long-running conversation
WELD-000329 java.lang.IllegalStateException Attempt to call end() on a transient conversation
WELD-000332 java.lang.IllegalArgumentException Conversation ID {0} is already in use
WELD-000333 java.lang.IllegalStateException Must call associate() before calling activate()
WELD-000334 java.lang.IllegalStateException Must call associate() before calling deactivate()
WELD-000335 WARN Conversation context is already active, most likely it was not cleaned up properly during previous request processing: {0}
WELD-000336 java.lang.IllegalStateException Conversation context is not active
WELD-000337 java.lang.IllegalStateException Unable to find ConversationNamingScheme in the request, this conversation wasn't transient at the start of the request
WELD-000338 java.lang.IllegalStateException Unable to locate ConversationIdGenerator
WELD-000339 java.lang.IllegalStateException A request must be associated with the context in order to generate a conversation id
WELD-000340 java.lang.IllegalStateException A request must be associated with the context in order to load the known conversations
WELD-000341 java.lang.IllegalStateException Unable to load the conversations from the associated request - {0}: {1}, request: {2}
WELD-000342 WARN Going to end a locked conversation with id {0}
WELD-000343 java.lang.IllegalStateException Unable to load the current conversation from the associated request - {0}: {1}, request: {2}
WELD-000400 DEBUG Sending event {0} directly to observer {1}
WELD-000401 ERROR Failure while notifying an observer {0} of event {1}. {2}
WELD-000403 org.jboss.weld.exceptions.InvalidObjectException Proxy required
WELD-000404 org.jboss.weld.exceptions.DefinitionException Conditional observer method cannot be declared by a @Dependent scoped bean: {0} at {1} StackTrace:
WELD-000405 org.jboss.weld.exceptions.DefinitionException Observer method cannot have more than one event parameter annotated with @Observes or @ObservesAsync: {0} at {1} StackTrace:
WELD-000406 org.jboss.weld.exceptions.DefinitionException Observer method cannot have a parameter annotated with @Disposes: {0} at {1} StackTrace:
WELD-000407 org.jboss.weld.exceptions.DefinitionException Observer method cannot be annotated with @Produces: {0} at {1} StackTrace:
WELD-000408 org.jboss.weld.exceptions.DefinitionException Observer method cannot be annotated with @Inject, observer methods are automatically injection points: {0} at {1} StackTrace:
WELD-000409 org.jboss.weld.exceptions.DefinitionException Observer method for container lifecycle event can only inject BeanManager: {0} at {1} StackTrace:
WELD-000410 org.jboss.weld.exceptions.DefinitionException Observer method cannot define @WithAnnotations: {0} at {1} StackTrace:
WELD-000411 INFO Observer method {0} receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
WELD-000412 org.jboss.weld.exceptions.DefinitionException ObserverMethod.{0}() returned null for {1}
WELD-000413 org.jboss.weld.exceptions.DefinitionException {0} cannot be replaced by an observer method with a different bean class {1}
WELD-000414 org.jboss.weld.exceptions.DefinitionException Observer method for container lifecycle event cannot be asynchronous. {0} at {1} StackTrace:
WELD-000415 org.jboss.weld.exceptions.DefinitionException Custom implementation of observer method does not override either notify(T) or notify(EventContext): {0}
WELD-000416 org.jboss.weld.exceptions.IllegalArgumentException None or multiple event parameters declared on: {0} at {1} StackTrace:
WELD-000417 WARN The original observed type {0} is not assignable from {1} set by extension {2} - the observer method invocation may result in runtime exception!
WELD-000418 org.jboss.weld.exceptions.DefinitionException Observer method for container lifecycle event cannot be static. {0} at {1} StackTrace:
WELD-000419 org.jboss.weld.exceptions.IllegalArgumentException {0} is not a valid notification mode for asynchronous observers
WELD-000420 java.lang.UnsupportedOperationException Asynchronous observer notification with timeout option requires an implementation of ExecutorServices which provides an instance of ScheduledExecutorServices.
WELD-000421 org.jboss.weld.exceptions.IllegalArgumentException Invalid input value for asynchronous observer notification timeout. Has to be parseable String, java.lang.Long or long. Original exception: {0}
WELD-000422 java.lang.IllegalStateException WeldEvent.select(Type subtype, Annotation... qualifiers) can be invoked only on an instance of WeldEvent.
WELD-000600 DEBUG {0} is missing @Retention(RUNTIME). Weld will use this annotation, however this may make the application unportable.
WELD-000601 DEBUG {0} is missing @Target. Weld will use this annotation, however this may make the application unportable.
WELD-000602 DEBUG {0} is not declared @Target(TYPE, METHOD) or @Target(TYPE). Weld will use this annotation, however this may make the application unportable.
WELD-000604 DEBUG {0} is not declared @Target(METHOD, FIELD, TYPE). Weld will use this annotation, however this may make the application unportable.
WELD-000605 DEBUG {0} is not declared @Target(METHOD, FIELD, TYPE, PARAMETER), @Target(METHOD, TYPE), @Target(METHOD), @Target(TYPE) or @Target(FIELD). Weld will use this annotation, however this may make the application unportable.
WELD-000606 org.jboss.weld.exceptions.IllegalArgumentException Unable to determine name of parameter
WELD-000607 org.jboss.weld.exceptions.WeldException annotationMap cannot be null
WELD-000608 org.jboss.weld.exceptions.WeldException declaredAnnotationMap cannot be null
WELD-000610 org.jboss.weld.exceptions.WeldException Unable to deserialize constructor. Declaring class {0}, index {1}
WELD-000611 org.jboss.weld.exceptions.WeldException Unable to deserialize method. Declaring class {0}, index {1}
WELD-000612 org.jboss.weld.exceptions.WeldException Unable to deserialize field. Declaring class {0}, field name {1}
WELD-000614 org.jboss.weld.exceptions.DefinitionException Incorrect number of AnnotatedParameters {0} on AnnotatedMethod {1}. AnnotatedMethod has {2} as parameters but should have {3} as parameters
WELD-000616 org.jboss.weld.exceptions.WeldException Instantiation through ReflectionFactory of {0} failed
WELD-000617 org.jboss.weld.exceptions.WeldException Instantiation through Unsafe of {0} failed
WELD-000619 WARN A lifecycle callback interceptor declares an interceptor binding with target other than ElementType.TYPE {0} Binding: {1} Target: {2}
WELD-000620 DEBUG {0} is not declared @Target(METHOD, FIELD, PARAMETER, TYPE). Weld will use this annotation, however this may make the application unportable.
WELD-000621 WARN Interceptor binding {0} with @Target defined as {1} should not be applied on interceptor binding {2} with @Target definition: {3}
WELD-000622 org.jboss.weld.exceptions.WeldException IllegalArgumentException invoking {2} on {1} ({0}) with parameters {3}
WELD-000623 org.jboss.weld.exceptions.IllegalArgumentException Unknown type {0}.
WELD-000624 org.jboss.weld.exceptions.IllegalArgumentException Invalid type argument combination: {0}; {1}.
WELD-000625 org.jboss.weld.exceptions.WeldException Unable to locate method: {0}
WELD-000707 org.jboss.weld.exceptions.IllegalStateException Non Http-Servlet lifecycle not defined
WELD-000708 TRACE Initializing request {0}
WELD-000709 TRACE Destroying request {0}
WELD-000710 org.jboss.weld.exceptions.IllegalStateException Cannot inject {0} outside of a Servlet request
WELD-000711 WARN Context activation pattern {0} ignored as it is overriden by the integrator.
WELD-000712 WARN Unable to dissociate context {0} from the storage {1}
WELD-000713 org.jboss.weld.exceptions.IllegalStateException Unable to inject ServletContext. None is associated with {0}, {1}
WELD-000714 WARN HttpContextLifecycle guard leak detected. The Servlet container is not fully compliant. The value was {0}
WELD-000715 WARN HttpContextLifecycle guard not set. The Servlet container is not fully compliant.
WELD-000716 INFO Running in Servlet 2.x environment. Asynchronous request support is disabled.
WELD-000717 WARN Unable to deactivate context {0} when destroying request {1}
WELD-000718 WARN No EEModuleDescriptor defined for bean archive with ID: {0}. @Initialized and @Destroyed events for ApplicationScoped may be fired twice.
WELD-000719 DEBUG An active HttpSessionDestructionContext detected. This is likely a leftover from previous sessions that ended exceptionally. This context will be terminated.
WELD-000804 org.jboss.weld.exceptions.IllegalArgumentException {0} is not an enum
WELD-000805 org.jboss.weld.exceptions.DefinitionException Cannot have more than one post construct method annotated with @PostConstruct for {0}
WELD-000806 org.jboss.weld.exceptions.DefinitionException Cannot have more than one pre destroy method annotated @PreDestroy for {0}
WELD-000807 org.jboss.weld.exceptions.DefinitionException Initializer method cannot be annotated @Produces {0} at {1} StackTrace:
WELD-000808 org.jboss.weld.exceptions.DefinitionException Initializer method cannot have parameters annotated @Disposes: {0} at {1} StackTrace:
WELD-000810 org.jboss.weld.exceptions.DefinitionException Cannot place qualifiers on final fields: {0}
WELD-000812 org.jboss.weld.exceptions.DefinitionException Cannot determine constructor to use for {0}. Possible constructors {1}
WELD-000813 org.jboss.weld.exceptions.IllegalArgumentException injectableFields and initializerMethods must have the same size. Injectable Fields: {0} InitializerMethods: {1}
WELD-000814 org.jboss.weld.exceptions.IllegalArgumentException Annotation {0} is not a qualifier
WELD-000815 org.jboss.weld.exceptions.IllegalArgumentException Qualifier {0} is already present in the set {1}
WELD-000816 org.jboss.weld.exceptions.DefinitionException Cannot determine constructor to use for {0}
WELD-000817 org.jboss.weld.exceptions.IllegalStateException Unable to find Bean Deployment Archive for {0}
WELD-000818 org.jboss.weld.exceptions.IllegalArgumentException Event type {0} is not allowed
WELD-000819 org.jboss.weld.exceptions.IllegalArgumentException Cannot provide an event type parameterized with a type parameter {0}
WELD-000820 org.jboss.weld.exceptions.IllegalArgumentException Cannot proxy non-Class Type {0}
WELD-000824 org.jboss.weld.exceptions.WeldException Error getting field {0} on {1}
WELD-000826 org.jboss.weld.exceptions.DeploymentException Cannot access values() on annotation
WELD-000827 org.jboss.weld.exceptions.DefinitionException Initializer method may not be a generic method: {0} at {1} StackTrace:
WELD-000833 org.jboss.weld.exceptions.DefinitionException Resource injection point represents a method which doesn't follow JavaBean conventions {0}
WELD-000834 WARN Unable to inject resource - most probably incorrect InjectionServices SPI implementation: {0} at {1}
WELD-000900 INFO {0}
WELD-001001 java.lang.IllegalArgumentException Cannot pass null expressionFactory
WELD-001002 TRACE Looking for EL property {0}
WELD-001003 TRACE EL property {0} resolved to {1}
WELD-001100 org.jboss.weld.exceptions.DefinitionException {0} can only be applied to an annotation. It was applied to {1}
WELD-001101 WARN Member of array type or annotation type must be annotated @NonBinding: {0}
WELD-001102 org.jboss.weld.exceptions.IllegalStateException Stereotype {0} not registered with container
WELD-001103 org.jboss.weld.exceptions.DefinitionException Cannot declare qualifiers on stereotype {0}
WELD-001104 org.jboss.weld.exceptions.DefinitionException Cannot specify a value for @Named stereotype {0}
WELD-001105 org.jboss.weld.exceptions.DefinitionException At most one scope type may be specified for {0}
WELD-001106 org.jboss.weld.exceptions.DefinitionException BeanAttributes.getStereotypes() returned null for {0}
WELD-001107 org.jboss.weld.exceptions.DefinitionException {0}() returned null for {1}
WELD-001108 org.jboss.weld.exceptions.DefinitionException BeanAttributes.getTypes() returned null for {0}
WELD-001109 org.jboss.weld.exceptions.DefinitionException BeanAttributes.getScope() returned null for {0}
WELD-001110 org.jboss.weld.exceptions.DefinitionException {0} defined on {1} is not a stereotype
WELD-001111 org.jboss.weld.exceptions.DefinitionException {0} defined on {1} is not a qualifier
WELD-001112 org.jboss.weld.exceptions.DefinitionException BeanAttributes.getTypes() may not return an empty set {0}
WELD-001113 org.jboss.weld.exceptions.DefinitionException {0} defined on {1} is not a scope annotation
WELD-001114 org.jboss.weld.exceptions.IllegalArgumentException {0} returned null for {1}
WELD-001115 org.jboss.weld.exceptions.IllegalArgumentException Parameter position {0} of parameter {1} is not valid
WELD-001116 WARN AnnotatedType ({0}) without a constructor
WELD-001117 WARN Member {0} ({1}) does not belong to the actual class hierarchy of the annotatedType {2} ({3}) at {4}
WELD-001118 org.jboss.weld.exceptions.DefinitionException A type variable is not a valid bean type. Bean type {0} of bean {1}
WELD-001119 org.jboss.weld.exceptions.DefinitionException A parameterized type containing wildcard parameters is not a valid bean type. Bean type {0} of bean {1}
WELD-001120 org.jboss.weld.exceptions.DefinitionException A bean that has a parameterized bean type containing type variables must be @Dependent scoped. Bean type {0} of bean {1}
WELD-001121 org.jboss.weld.exceptions.DefinitionException Member of array type or annotation type must be annotated @NonBinding: {0}
WELD-001122 org.jboss.weld.exceptions.IllegalStateException Failed to deserialize annotated type identified with {0}
WELD-001123 org.jboss.weld.exceptions.DefinitionException {0} defined on {1} is not an interceptor binding
WELD-001124 WARN Context.getScope() returned {0} which is not a scope annotation. Context: {1}
WELD-001125 INFO Illegal bean type {0} ignored on {1}
WELD-001126 org.jboss.weld.exceptions.IllegalStateException BeanAttributesConfigurator is not able to read {0} - missing BeanManager
WELD-001200 org.jboss.weld.exceptions.IllegalStateException Error configuring XML parser
WELD-001201 org.jboss.weld.exceptions.IllegalStateException Error loading beans.xml {0}
WELD-001202 org.jboss.weld.exceptions.IllegalStateException Error parsing {0}
WELD-001203 org.jboss.weld.exceptions.DefinitionException can only be specified once, but appears multiple times: {0}
WELD-001204 org.jboss.weld.exceptions.DefinitionException can only be specified once, but is specified multiple times: {0}
WELD-001205 org.jboss.weld.exceptions.DefinitionException can only be specified once, but it is specified multiple times: {0}
WELD-001207 org.jboss.weld.exceptions.DefinitionException can only be specified once, but it is specified multiple times: {0}
WELD-001208 WARN Error when validating {0}@{1} against xsd. {2}
WELD-001210 WARN Warning when validating {0}@{1} against xsd. {2}
WELD-001300 javax.naming.NamingException Unable to locate BeanManager
WELD-001301 org.jboss.weld.exceptions.IllegalArgumentException Annotation {0} is not a qualifier
WELD-001302 org.jboss.weld.exceptions.IllegalArgumentException Duplicate qualifiers: {0}
WELD-001303 org.jboss.weld.contexts.ContextNotActiveException No active contexts for scope type {0}
WELD-001304 org.jboss.weld.exceptions.IllegalStateException More than one context active for scope type {0}
WELD-001305 org.jboss.weld.exceptions.IllegalArgumentException The given type {0} is not a type of the bean {1}
WELD-001307 org.jboss.weld.exceptions.UnsatisfiedResolutionException Unable to resolve any beans of type {0} with qualifiers {1}
WELD-001308 org.jboss.weld.exceptions.UnsatisfiedResolutionException Unable to resolve any beans for {0}
WELD-001310 org.jboss.weld.exceptions.IllegalArgumentException No decorator types were specified in the set
WELD-001311 org.jboss.weld.exceptions.IllegalArgumentException Interceptor bindings list cannot be empty
WELD-001312 org.jboss.weld.exceptions.IllegalArgumentException Duplicate interceptor binding type {0} found
WELD-001313 org.jboss.weld.exceptions.IllegalArgumentException Trying to resolve interceptors with non-binding type {0}
WELD-001314 java.lang.String {0} is expected to be a normal scope type
WELD-001316 org.jboss.weld.exceptions.IllegalArgumentException {0} is not an interceptor binding type
WELD-001317 org.jboss.weld.exceptions.IllegalArgumentException {0} is not a stereotype
WELD-001318 org.jboss.weld.exceptions.AmbiguousResolutionException Cannot resolve an ambiguous dependency between: {0}
WELD-001319 org.jboss.weld.exceptions.IllegalArgumentException Bean manager ID must not be null
WELD-001325 org.jboss.weld.exceptions.IllegalArgumentException No instance of an extension {0} registered with the deployment
WELD-001326 org.jboss.weld.exceptions.IllegalArgumentException Cannot create bean attributes - the argument must be either an AnnotatedField or AnnotatedMethod but {0} is not
WELD-001327 org.jboss.weld.exceptions.IllegalStateException Unable to identify the correct BeanManager. The calling class {0} is placed in multiple bean archives
WELD-001328 org.jboss.weld.exceptions.IllegalStateException Unable to identify the correct BeanManager. The calling class {0} is not placed in bean archive
WELD-001329 org.jboss.weld.exceptions.IllegalStateException Unable to identify the correct BeanManager
WELD-001330 org.jboss.weld.exceptions.IllegalStateException BeanManager is not available.
WELD-001331 org.jboss.weld.exceptions.IllegalArgumentException Declaring bean cannot be null for the non-static member {0}
WELD-001332 org.jboss.weld.exceptions.IllegalStateException BeanManager method {0} is not available during application initialization. Container state: {1}
WELD-001333 org.jboss.weld.exceptions.IllegalStateException BeanManager method {0} is not available after shutdown
WELD-001334 org.jboss.weld.exceptions.UnsatisfiedResolutionException Unsatisfied dependencies for type {1} with qualifiers {0} {2}
WELD-001335 org.jboss.weld.exceptions.AmbiguousResolutionException Ambiguous dependencies for type {1} with qualifiers {0} Possible dependencies: {2}
WELD-001336 org.jboss.weld.exceptions.IllegalStateException InjectionTargetFactory.configure() may not be called after createInjectionTarget() invocation. AnnotatedType used: {0}
WELD-001401 org.jboss.weld.exceptions.InconsistentSpecializationException Two beans cannot specialize the same bean {0}
WELD-001402 org.jboss.weld.exceptions.DeploymentException The bean {0} declares a passivating scope but has a non-serializable interceptor {1}
WELD-001403 org.jboss.weld.exceptions.UnserializableDependencyException The bean {0} declares a passivating scope but has a non-serializable decorator {1}
WELD-001404 org.jboss.weld.exceptions.DefinitionException The injection point is annotated with @New which cannot be combined with other qualifiers: {0} at {1} StackTrace
WELD-001405 org.jboss.weld.exceptions.DefinitionException Cannot inject {0} in a class which is not a bean at {1} StackTrace
WELD-001406 org.jboss.weld.exceptions.DefinitionException Cannot inject injection point metadata in a non @Dependent scoped bean: {0} at {1} StackTrace
WELD-001407 org.jboss.weld.exceptions.DefinitionException Cannot declare an injection point with a type variable: {0} at {1} StackTrace
WELD-001408 org.jboss.weld.exceptions.DeploymentException Unsatisfied dependencies for type {2} with qualifiers {1} at injection point {0} at {3} {4}
WELD-001409 org.jboss.weld.exceptions.DeploymentException Ambiguous dependencies for type {2} with qualifiers {1} at injection point {0} at {3} Possible dependencies: {4}
WELD-001410 org.jboss.weld.exceptions.DeploymentException The injection point has non-proxyable dependencies: {0} at {1} StackTrace
WELD-001413 org.jboss.weld.exceptions.UnserializableDependencyException The bean {0} declares a passivating scope but has a non-passivation-capable dependency {1}
WELD-001414 org.jboss.weld.exceptions.DeploymentException Bean name is ambiguous. Name {0} resolves to beans: {1}
WELD-001415 org.jboss.weld.exceptions.DeploymentException Bean name is identical to a bean name prefix used elsewhere. Name {0}
WELD-001416 org.jboss.weld.exceptions.DeploymentException Enabled interceptor class {0} specified twice: - {1}, - {2}
WELD-001417 org.jboss.weld.exceptions.DeploymentException Enabled interceptor class {0} ({1}) does not match an interceptor bean: the class is not found, or not annotated with @Interceptor and still not registered through a portable extension, or not annotated with @Dependent inside an implicit bean archive
WELD-001418 org.jboss.weld.exceptions.DeploymentException Enabled decorator class {0} specified twice: - {1}, - {2}
WELD-001419 org.jboss.weld.exceptions.DeploymentException Enabled decorator class {0} is not the bean class of at least one decorator bean (detected decorator beans: {1})
WELD-001420 org.jboss.weld.exceptions.DeploymentException Enabled alternative {0} is not a stereotype
WELD-001421 org.jboss.weld.exceptions.DeploymentException Cannot enable the same alternative stereotype {0} in beans.xml: - {1}, - {2}
WELD-001422 org.jboss.weld.exceptions.DeploymentException Enabled alternative class {0} ({1}) does not match any bean, or is not annotated with @Alternative or an @Alternative stereotype, or does not declare a producer annotated with @Alternative or an @Alternative stereotype
WELD-001424 org.jboss.weld.exceptions.DefinitionException The following disposal methods were declared but did not resolve to a producer method: {0}
WELD-001425 org.jboss.weld.exceptions.DefinitionException An injection point cannot have a wildcard type parameter: {0} at {1} StackTrace
WELD-001426 org.jboss.weld.exceptions.DefinitionException An injection point must have a type parameter: {0} at {1} StackTrace
WELD-001427 org.jboss.weld.exceptions.DefinitionException Only field injection points can use the @Named qualifier with no value: {0} at {1} StackTrace
WELD-001428 org.jboss.weld.exceptions.DefinitionException A decorator cannot have producer methods, but at least one was found on {0}.
WELD-001429 org.jboss.weld.exceptions.DefinitionException A decorator cannot have producer fields, but at least one was found on {0}.
WELD-001430 org.jboss.weld.exceptions.DefinitionException A decorator cannot have disposer methods, but at least one was found on {0}.
WELD-001431 org.jboss.weld.exceptions.DefinitionException An interceptor cannot have producer methods, but at least one was found on {0}.
WELD-001432 org.jboss.weld.exceptions.DefinitionException An interceptor cannot have producer fields, but at least one was found on {0}.
WELD-001433 org.jboss.weld.exceptions.DefinitionException An interceptor cannot have disposer methods, but at least one was found on {0}.
WELD-001434 org.jboss.weld.exceptions.UnproxyableResolutionException Normal scoped bean {0} is not proxyable for an unknown reason - {1}.
WELD-001435 org.jboss.weld.exceptions.UnproxyableResolutionException Normal scoped bean {0} is not proxyable because it has no no-args constructor - {1}.
WELD-001436 java.lang.String Type {0} is not proxyable because it has a private constructor {1} - {2}.
WELD-001437 org.jboss.weld.exceptions.UnproxyableResolutionException Bean type {0} is not proxyable because it is final - {1}.
WELD-001438 org.jboss.weld.exceptions.UnproxyableResolutionException Bean type {0} is not proxyable because it is a primitive - {1}.
WELD-001439 org.jboss.weld.exceptions.UnproxyableResolutionException Bean type {0} is not proxyable because it is an array type - {1}.
WELD-001440 WARN Scope type {0} used on injection point {1} at {2} StackTrace
WELD-001441 org.jboss.weld.exceptions.DeploymentException Enabled alternative {0} is not a class
WELD-001442 org.jboss.weld.exceptions.DeploymentException Enabled alternative {0} is not annotated @Alternative
WELD-001443 org.jboss.weld.exceptions.DeploymentException Pseudo scoped bean has circular dependencies. Dependency path: {0}
WELD-001445 org.jboss.weld.exceptions.DefinitionException An interceptor cannot have observer methods, but at least one was found on {0}.
WELD-001446 org.jboss.weld.exceptions.DefinitionException A decorator cannot have observer methods, but at least one was found on {0}.
WELD-001447 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not return {3} at {4} StackTrace
WELD-001448 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not have exactly one parameter at {3} StackTrace
WELD-001449 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but its single parameter is not a {3} at {4} StackTrace
WELD-001451 org.jboss.weld.exceptions.DefinitionException jakarta.transaction.UserTransaction cannot be injected into an enterprise bean with container-managed transactions: {0} at {1} StackTrace
WELD-001452 org.jboss.weld.exceptions.DefinitionException {0} is not a valid type for a Bean metadata injection point {1} at {2} StackTrace
WELD-001453 org.jboss.weld.exceptions.DefinitionException {0} is not a valid type argument for a Bean metadata injection point {1} at {2} StackTrace
WELD-001454 org.jboss.weld.exceptions.DefinitionException {0} cannot be used at a Bean metadata injection point of a bean which is not {1}, {2} at {3} StackTrace
WELD-001455 org.jboss.weld.exceptions.DefinitionException {0} does not declare any decorated types.
WELD-001456 org.jboss.weld.exceptions.IllegalArgumentException Argument {0} must not be null
WELD-001457 org.jboss.weld.exceptions.DeploymentException Cannot enable the same alternative class {0} in beans.xml: - {1}, - {2}
WELD-001463 org.jboss.weld.exceptions.DeploymentException Bean declaring a passivating scope must be passivation capable. Bean: {0}
WELD-001465 org.jboss.weld.exceptions.UnserializableDependencyException {0} for a built-in bean {1} must be passivation capable.
WELD-001466 org.jboss.weld.exceptions.DefinitionException Invalid injection point found in a disposer method: {0} at {1} StackTrace
WELD-001467 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not return {3} or {4}. at {5} StackTrace
WELD-001468 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not have a {3} return type. at {4} StackTrace
WELD-001469 WARN Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} but it does not have zero parameters.
WELD-001471 WARN Interceptor method {0} defined on class {1} is not defined according to the specification. It should not throw {2}, which is a checked exception. at {3} StackTrace
WELD-001472 org.jboss.weld.exceptions.DefinitionException EventMetadata can only be injected into an observer method: {0} at {1} StackTrace
WELD-001473 WARN jakarta.enterprise.inject.spi.Bean implementation {0} declared a normal scope but does not implementjakarta.enterprise.inject.spi.PassivationCapable. It won'''t be possible to inject this bean into a bean with a passivating scope (@SessionScoped, @ConversationScoped). This can be fixed by assigning the Bean implementation a unique id by implementing the PassivationCapable interface.
WELD-001474 java.lang.String Class {0} is on the classpath, but was ignored because a class it references was not found: {1}.
WELD-001475 java.lang.String The following beans match by type, but none have matching qualifiers:{0}
WELD-001476 org.jboss.weld.exceptions.DefinitionException {0} must be @Dependent
WELD-001477 org.jboss.weld.exceptions.UnserializableDependencyException The bean {0} declares a passivating scope but has a(n) {1} with a non-passivation-capable dependency {2}
WELD-001478 WARN Interceptor {0} is enabled for the application and for the bean archive {1}. It will only be invoked in the @Priority part of the chain.
WELD-001479 WARN Decorator {0} is enabled for the application and for the bean archive {1}. It will only be invoked in the @Priority part of the chain.
WELD-001480 org.jboss.weld.exceptions.UnproxyableResolutionException Bean type {0} is not proxyable because it contains a final method {1} - {2}.
WELD-001481 WARN Final method will be ignored during proxy generation and should never be invoked upon the proxy instance! {0} - {1}.
WELD-001482 org.jboss.weld.exceptions.DefinitionException InterceptionFactory can only be injected in a parameter of a producer method: {0} at {1} StackTrace
WELD-001483 org.jboss.weld.exceptions.IllegalArgumentException Argument must not be null
WELD-001485 org.jboss.weld.exceptions.DefinitionException Method {0} defined on class {1} is not defined according to the specification. It is annotated with @{2} and it declares more than one parameter. at {3} StackTrace
WELD-001500 org.jboss.weld.exceptions.WeldException Failed to deserialize proxy object with beanId {0}
WELD-001501 org.jboss.weld.exceptions.WeldException Method call requires a BeanInstance which has not been set for this proxy {0}
WELD-001502 org.jboss.weld.exceptions.DefinitionException Resource producer field [{0}] must be @Dependent scoped
WELD-001503 org.jboss.weld.exceptions.DeploymentException Bean class which has interceptors cannot be declared final: {0}
WELD-001504 org.jboss.weld.exceptions.DeploymentException Intercepted bean method {0} (intercepted by {1}) cannot be declared final
WELD-001505 WARN Method {0} cannot be intercepted by {1} - will be ignored by interceptors and should never be invoked upon the proxy instance!
WELD-001506 TRACE Created new client proxy of type {0} for bean {1} with ID {2}
WELD-001507 TRACE Located client proxy of type {0} for bean {1}
WELD-001508 org.jboss.weld.exceptions.DefinitionException Cannot create an InjectionTarget from {0} as it is an interface
WELD-001510 org.jboss.weld.exceptions.WeldException Non passivation capable bean serialized with ProxyMethodHandler
WELD-001511 org.jboss.weld.exceptions.DefinitionException Specializing bean {0} does not have bean type {1} of specialized bean {2}
WELD-001512 org.jboss.weld.exceptions.IllegalArgumentException {0} cannot be constructed for {1}
WELD-001513 org.jboss.weld.exceptions.IllegalArgumentException An implementation of AnnotatedCallable must implement either AnnotatedConstructor or AnnotatedMethod, {0}
WELD-001514 org.jboss.weld.exceptions.IllegalArgumentException An implementation of AnnotatedMember must implement either AnnotatedConstructor, AnnotatedMethod or AnnotatedField, {0}
WELD-001515 org.jboss.weld.exceptions.IllegalStateException Unable to load annotated member {0}
WELD-001516 org.jboss.weld.exceptions.DefinitionException Resource producer field [{0}] must not have an EL name
WELD-001517 org.jboss.weld.exceptions.DefinitionException The type of the resource producer field [{0}] does not match the resource type {1}
WELD-001518 org.jboss.weld.exceptions.IllegalArgumentException Cannot create Producer implementation. Declaring bean missing for a non-static member {0}
WELD-001519 DEBUG An InjectionTarget is created for an abstract {0}. It will not be possible to produce instances of this type!
WELD-001520 org.jboss.weld.exceptions.DefinitionException Beans with different bean names {0}, {1} cannot be specialized by a single bean {2}
WELD-001521 org.jboss.weld.exceptions.IllegalArgumentException InjectionPoint.getAnnotated() must return either AnnotatedParameter or AnnotatedField but {0} was returned for {1}
WELD-001522 org.jboss.weld.exceptions.IllegalStateException Unable to restore InjectionPoint. No matching InjectionPoint found on {0}
WELD-001523 org.jboss.weld.exceptions.IllegalStateException Unable to restore InjectionPoint. Multiple matching InjectionPoints found on {0}: - {1}, - {2}
WELD-001524 org.jboss.weld.exceptions.WeldException Unable to load proxy class for bean {0} with class {1}
WELD-001525 org.jboss.weld.exceptions.UnsupportedOperationException Instance.destroy() is not supported. The underlying context {0} does not support destroying of contextual instances
WELD-001526 org.jboss.weld.exceptions.DeploymentException Managed bean declaring a passivating scope has a non-passivation capable decorator. Bean: {0} Decorator: {1}
WELD-001527 org.jboss.weld.exceptions.DeploymentException Managed bean declaring a passivating scope has a non-serializable interceptor. Bean: {0} Interceptor: {1}
WELD-001529 DEBUG An InjectionTarget is created for a {0} which does not have any appropriate constructor. It will not be possible to produce instances of this type!
WELD-001530 org.jboss.weld.exceptions.CreationException Cannot produce an instance of {0}.
WELD-001531 org.jboss.weld.exceptions.UnsupportedOperationException Instance.iterator().remove() is not supported.
WELD-001532 org.jboss.weld.exceptions.IllegalArgumentException A passivation capable bean cannot have a null id: {0}
WELD-001533 DEBUG An InjectionTarget is created for a non-static inner {0}. It will not be possible to produce instances of this type!
WELD-001534 org.jboss.weld.exceptions.DeploymentException Bean class which has decorators must have a public constructor without parameters: {0}
WELD-001535 org.jboss.weld.exceptions.DeploymentException Constructor without parameters cannot be private in bean class which has decorators: {0} at {1} StackTrace:
WELD-001536 TRACE Found {0} constructors annotated with @Inject for {1}
WELD-001537 org.jboss.weld.exceptions.DefinitionException An InjectionTarget is created for a {0} which does not have any appropriate constructor.
WELD-001538 TRACE Created context instance for bean {0} identified as {1}
WELD-001539 TRACE Created MH initializer body for decorator proxy: {0}
WELD-001540 TRACE Adding method to enterprise proxy: {0}
WELD-001541 TRACE Adding method to proxy: {0}
WELD-001542 TRACE Retrieving/generating proxy class {0}
WELD-001543 TRACE Created Proxy class of type {0} supporting interfaces {1}
WELD-001544 TRACE MethodHandler processing returning bean instance for {0}
WELD-001545 TRACE MethodHandler processing call to {0} for {1}
WELD-001546 TRACE Setting new MethodHandler with bean instance for {0} on {1}
WELD-001547 TRACE Invoking interceptor chain for method {0} on {1}
WELD-001548 TRACE Invoking method {0} directly on {1}
WELD-001549 org.jboss.weld.exceptions.IllegalArgumentException Unable to determine parent creational context of {0}
WELD-001550 org.jboss.weld.exceptions.DefinitionException A producer field with a parameterized type with a type variable must be declared @Dependent scoped: {0} at {1} StackTrace:
WELD-001551 org.jboss.weld.exceptions.DefinitionException A producer field type may not contain a wildcard: {0} at {1} StackTrace:
WELD-001552 WARN An extension ({0}) has a non-static public field ({1}).
WELD-001553 TRACE Proxy activated after passivation for {0}
WELD-001554 org.jboss.weld.exceptions.DefinitionException Bean.{0}() returned null for {1}
WELD-001555 org.jboss.weld.exceptions.DefinitionException Decorator.{0}() returned null for {1}
WELD-001556 org.jboss.weld.exceptions.DefinitionException Specializing {0} cannot specialize a non-managed bean {1}
WELD-001557 WARN Unable to dump the proxy class file for {0}
WELD-001558 WARN Unable to create directory {0} to dump the proxy classes.
WELD-001559 org.jboss.weld.exceptions.DefinitionException Bean builder {0} does not define a create lifecycle callback.
WELD-001560 org.jboss.weld.exceptions.DefinitionException Bean builder {0} does not define a destroy lifecycle callback.
WELD-001561 org.jboss.weld.exceptions.DefinitionException Bean builder {0} does not define a BeanManager.
WELD-001562 org.jboss.weld.exceptions.DefinitionException A producer method return type may not be a type variable or an array type whose component type is a type variable: {0} at {1} StackTrace:
WELD-001563 org.jboss.weld.exceptions.DefinitionException A producer field type may not be a type variable or an array type whose component type is a type variable: {0} at {1} StackTrace:
WELD-001564 org.jboss.weld.exceptions.IllegalStateException Injection point metadata injected into a stateless session bean may only be accessed within its business method invocation
WELD-001565 org.jboss.weld.exceptions.DefinitionException Interceptor builder {0} does not define an interception function.
WELD-001566 org.jboss.weld.exceptions.DefinitionException Interceptor builder {0} does not define any InterceptionType.
WELD-001567 org.jboss.weld.exceptions.IllegalStateException Cannot create contextual instance of {0}
WELD-001568 org.jboss.weld.exceptions.IllegalStateException Unable to create ClassFile for: {1}.
WELD-001569 org.jboss.weld.exceptions.IllegalArgumentException Cannot inject injection point metadata in a non @Dependent bean: {0}
WELD-001570 org.jboss.weld.exceptions.IllegalStateException Invalid BeanConfigurator setup - no callback was specified for {0}
WELD-001571 INFO Proxy for {0} created in {1} because {2}.
WELD-001572 org.jboss.weld.exceptions.CreationException Cannot create instance of session bean from Annotated Type {0} before AfterDeploymentValidation phase.
WELD-001573 org.jboss.weld.exceptions.IllegalStateException Cannot obtain contextual reference for {0} - producing WeldInstance does not exist anymore
WELD-001574 WARN Cannot destroy contextual instance for {0} - producing WeldInstance does not exist anymore
WELD-001575 org.jboss.weld.exceptions.IllegalStateException WeldInstance.select(Type subtype, Annotation... qualifiers) can be invoked only on an instance of WeldInstance.
WELD-001576 DEBUG Using {1} to instantiate a shared proxy class {0}; the deployment implementation [{2}] does not match the instantiator the proxy was created with
WELD-001577 INFO Detected private final method: {1} on an intercepted bean: {0} Weld will ignore this method during interception.
WELD-001578 org.jboss.weld.exceptions.IllegalStateException WeldDefaultProxyServices failed to load/define a class with name {0} whose original class was {1} because all attempts to determine a class loader ended with null.
WELD-001579 org.jboss.weld.exceptions.IllegalArgumentException An instance of ProxyFactory.ProxyNameHolder has to contain a class name. This instance was created for bean class: {1}
WELD-001580 org.jboss.weld.exceptions.IllegalStateException Cannot obtain contextual reference for {0} - a previously obtained reference has already been destroyed.
WELD-001601 java.lang.IllegalArgumentException Cannot extract rawType from {0}
WELD-001602 org.jboss.weld.exceptions.WeldException Cannot create qualifier instance model for {0} at {1} StackTrace:
WELD-001700 WARN Interceptor annotation class {0} not found, interception based on it is not enabled
WELD-001701 TRACE Invoking next interceptor in chain: {0}
WELD-001702 org.jboss.weld.exceptions.DefinitionException Interceptor.getInterceptorBindings() returned null for {0}
WELD-001703 INFO Unable to determine the @Intercepted Bean for {0}
WELD-001704 java.lang.IllegalArgumentException @Intercepted Bean can only be injected into an interceptor: {0}
WELD-001705 org.jboss.weld.exceptions.CreationException Target instance not created - one of the interceptor methods in the AroundConstruct chain did not invoke InvocationContext.proceed() for: {0}
WELD-001706 org.jboss.weld.exceptions.IllegalStateException InterceptionFactory.createInterceptedInstance() may only be called once
WELD-001707 DEBUG InterceptionFactory.configure() was invoked for AnnotatedType: {0}
WELD-001708 DEBUG InterceptionFactory.ignoreFinalMethods() was invoked for AnnotatedType: {0}. Final methods will be ignored during proxy generation!
WELD-001709 DEBUG InterceptionFactory skipped wrapper creation for AnnotatedType {0} because no @AroundInvoke interceptor was bound to it.
WELD-001710 DEBUG InterceptionFactory skipped wrapper creation for an internal container construct of type {0}
WELD-001711 org.jboss.weld.exceptions.IllegalStateException InterceptionFactory is not supported on interfaces. Check InterceptionFactory<{0}>
WELD-001800 org.jboss.weld.exceptions.IllegalStateException Unable to get bean identifier at position {0} from {1}
WELD-001801 org.jboss.weld.exceptions.InvalidObjectException Unable to deserialize {0}
WELD-001900 org.jboss.weld.exceptions.IllegalStateException Invalid configuration property value {0} for key {1}
WELD-001901 org.jboss.weld.exceptions.IllegalStateException Configuration property type {0} does not match the required type {1} for configuration key {2}
WELD-001902 DEBUG Following configuration was detected and applied: {0}
WELD-001903 DEBUG Configuration key {0} already set to {1} in a source with higher priority, value {2} from {3} is ignored
WELD-001904 WARN Unsupported configuration key found and ignored: {0}
WELD-001905 org.jboss.weld.exceptions.IllegalStateException Configuration key {0} set to different values in the same source: - {1} - {2}
WELD-001906 DEBUG ResourceLoader not specified for {0}, file properties will not be loaded
WELD-001907 DEBUG Reading properties file: {0}
WELD-001908 WARN Configuration property {0} can only be set by integrator - value {1} ignored

WFHTTP

Code Level Return Type Message
WFHTTP000002 org.wildfly.client.config.ConfigXMLParseException Port value %s out of range
WFHTTP000003 ERROR Failed to acquire session
WFHTTP000004 java.io.IOException Invalid response type %s
WFHTTP000005 java.io.IOException Invalid response code %s (full response %s)
WFHTTP000006 ERROR Failed to write exception
WFHTTP000007 java.io.IOException Invalid content encoding %s
WFHTTP000008 java.lang.SecurityException Authentication failed
WFHTTP000009 java.lang.RuntimeException Unsupported qop version in digest auth
WFHTTP000010 ERROR Error parsing authentication-info header
WFHTTP000011 java.io.IOException Stream is closed
WFHTTP000012 java.lang.IllegalStateException Attempted to do blocking IO from the IO thread. This is prohibited as it may result in deadlocks
WFHTTP000013 javax.naming.AuthenticationException Authentication failed (full response %s)
WFHTTP000014 DEBUG JavaEE to JakartaEE backward compatibility layer have been installed

WFHTTPEJB

Code Level Return Type Message
WFHTTPEJB000001 java.io.IOException Unexpected data in response
WFHTTPEJB000002 java.io.IOException No session id in response
WFHTTPEJB000003 java.lang.IllegalStateException Could not resolve target for locator %s
WFHTTPEJB000004 java.lang.IllegalArgumentException Could create HTTP EJBReceiver for protocol %s
WFHTTPEJB000006 java.lang.IllegalArgumentException EJB not stateful
WFHTTPEJB000007 java.lang.IllegalArgumentException Session was not active
WFHTTPEJB000008 java.lang.IllegalArgumentException Session was not active
WFHTTPEJB000009 jakarta.ejb.EJBException Wrong view type
WFHTTPEJB000010 java.lang.IllegalStateException Cannot enlist in transaction
WFHTTPEJB000011 java.io.IOException Invalid transaction type %s
WFHTTPEJB000012 ERROR Unable to perform EJB discovery
WFHTTPEJB000013 INFO HTTP discovery has been interrupted
WFHTTPEJB000014 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted

WFLYAC

Code Level Return Type Message
WFLYAC0000 java.lang.String Name of the app client configuration file to use (default is "appclient.xml")
WFLYAC0000 java.lang.String Display this message and exit
WFLYAC0000 java.lang.String Set the url of the application server instance to connect to
WFLYAC0000 java.lang.String Load ejb-client.properties file from the given url
WFLYAC0000 java.lang.String Load system properties from the given url
WFLYAC0000 java.lang.String Set a system property
WFLYAC0000 java.lang.String Print version and exit
WFLYAC0000 java.lang.String Runs the container with the security manager enabled.
WFLYAC0000 java.lang.String The appclient script starts an application client which can be used to test and access the deployed Jakarta Enterprise Beans.
WFLYAC0002 ERROR %s running app client main
WFLYAC0004 java.lang.String You must specify the application client to execute
WFLYAC0005 java.lang.String Argument expected for option %s
WFLYAC0006 java.lang.RuntimeException Could not find application client jar in deployment
WFLYAC0007 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find application client %s
WFLYAC0008 java.lang.RuntimeException Could not load application client main class
WFLYAC0010 java.lang.String Unable to load properties from URL %s
WFLYAC0011 java.lang.RuntimeException Could not start app client %s as no main class was found
WFLYAC0012 java.lang.RuntimeException Could not start app client %s as no main method was found on main class %s
WFLYAC0013 javax.xml.stream.XMLStreamException Duplicate subsystem declaration
WFLYAC0015 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse %s
WFLYAC0016 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse %s at [%d,%d]
WFLYAC0017 java.lang.String Malformed URL provided for option %s
WFLYAC0018 java.lang.RuntimeException More than one application client found and no app client name specified
WFLYAC0020 java.lang.String Unknown option %s
WFLYAC0021 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load callback-handler class %s
WFLYAC0022 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not create instance of callback-handler class %s
WFLYAC0023 java.lang.RuntimeException Could not find application client %s
WFLYAC0024 java.lang.RuntimeException Cannot specify both a host to connect to and an ejb-client.properties file.

WFLYAG

Code Level Return Type Message
WFLYAG0001 INFO Adding deployment processors for DataSourceDefinition annotation and resource-ref entries
WFLYAG0101 INFO Started datasource '%s' bound to [%s]
WFLYAG0102 INFO Stopped datasource '%s'
WFLYAG0103 INFO Started xa-datasource '%s' bound to [%s]
WFLYAG0104 INFO Stopped xa-datasource '%s'
WFLYAG0105 org.jboss.msc.service.StartException Exception starting datasource '%s'
WFLYAG0106 org.jboss.msc.service.StartException Exception starting xa-datasource '%s'
WFLYAG0107 org.jboss.msc.service.StartException Invalid connection provider. Either a java.sql.Driver or javax.sql.DataSource implementation is required. Fix the connection-provider for the driver
WFLYAG0108 org.jboss.msc.service.StartException An xa-datasource requires a javax.sql.XADataSource as connection provider. Fix the connection-provider for the driver
WFLYAG0109 org.jboss.msc.service.StartException Could not start datasource: transaction manager is missing
WFLYAG0110 org.jboss.msc.service.StartException Error obtaining credentials from authentication context for datasource '%s'
WFLYAG0111 org.jboss.msc.service.StartException CredentialSourceSupplier for datasource '%s' is invalid
WFLYAG0201 INFO Performing flush operation, mode %s
WFLYAG0301 org.jboss.as.controller.OperationFailedException Unknown datasource service of type: %s
WFLYAG0302 org.jboss.as.controller.OperationFailedException Invalid connection in '%s'
WFLYAG0303 org.jboss.as.controller.OperationFailedException JNDI name have to start with java:/ or java:jboss/
WFLYAG0304 org.jboss.as.controller.OperationFailedException JNDI name shouldn't include '//' or end with '/'
WFLYAG0401 org.jboss.as.server.deployment.DeploymentUnitProcessingException Invalid connection provider. Either a java.sql.Driver or javax.sql.DataSource implementation is required. Fix the connection-provider for the driver
WFLYAG0402 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to load connection provider class '%s'
WFLYAG0403 org.jboss.as.server.deployment.DeploymentUnitProcessingException Element must provide attribute '%s'
WFLYAG0501 INFO Loaded class %s for driver '%s'
WFLYAG0502 java.lang.IllegalArgumentException Failed to load driver module '%s'
WFLYAG0503 java.lang.IllegalArgumentException Failed to load driver class '%s'
WFLYAG0601 WARN %s: %s

WFLYBATCH

Code Level Return Type Message
WFLYBATCH000001 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error processing META-INF/batch-jobs directory.
WFLYBATCH000002 java.lang.UnsupportedOperationException Resources of type %s cannot be removed
WFLYBATCH000003 java.lang.IllegalArgumentException Could not find deployment name: %s
WFLYBATCH000004 java.lang.IllegalStateException The service JobOperatorService has been stopped and cannot execute operations.
WFLYBATCH000005 jakarta.batch.operations.NoSuchJobException The job name '%s' was not found for the deployment.
WFLYBATCH000006 jakarta.batch.operations.JobStartException Could not find the job XML file in the deployment: %s
WFLYBATCH000007 WARN Failed processing the job XML file %s. Attempting to execute this job may result in errors.
WFLYBATCH000008 WARN Empty job-repository element found in deployment descriptor. Using the default job repository for deployment %s.
WFLYBATCH000009 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYBATCH000011 org.jboss.msc.service.StartException Failed to create %s job repository.
WFLYBATCH000013 ERROR Only one job repository can be defined in the jboss-all.xml deployment descriptor. The first job repository will be used.
WFLYBATCH000014 WARN Stopping execution %d of %s for deployment %s
WFLYBATCH000015 ERROR Failed to stop execution %d for job %s on deployment %s
WFLYBATCH000016 ERROR Failed to restart execution %d for job %s on deployment %s
WFLYBATCH000017 INFO Restarting previously stopped batch job %s. Previous execution id %d. New execution id %d.
WFLYBATCH000019 jakarta.batch.operations.BatchRuntimeException No batch environment was found for class loader: %s
WFLYBATCH000020 jakarta.batch.operations.JobSecurityException Permission denied. User %s does not have %s permissions.

WFLYCC

Code Level Return Type Message
WFLYCC0001 java.lang.IllegalStateException Cannot add deployment actions after starting creation of a rollout plan
WFLYCC0002 java.lang.IllegalStateException Cannot add deployment actions after starting creation of a rollout plan
WFLYCC0003 java.lang.String Cannot convert %s to %s
WFLYCC0004 java.lang.IllegalArgumentException Cannot derive a deployment name from %s -- use an overloaded method variant that takes a 'name' parameter
WFLYCC0005 java.lang.IllegalArgumentException Cannot use a DeploymentPlan not created by this manager
WFLYCC0007 java.lang.String Deployment with name %s already present in the domain
WFLYCC0008 java.lang.String failed
WFLYCC0009 java.lang.IllegalStateException Global rollback is not compatible with a server restart
WFLYCC0010 java.lang.IllegalStateException Graceful shutdown already configured with a timeout of %d ms
WFLYCC0011 java.lang.String Only one version of deployment with a given unique name can exist in the domain. The deployment plan specified that a new version of deployment %s replace an existing deployment with the same unique name, but did not apply the replacement to all server groups. Missing server groups were: %s
WFLYCC0012 java.lang.IllegalStateException Invalid action type %s
WFLYCC0013 java.lang.IllegalStateException Preceding action was not a %s
WFLYCC0014 java.lang.IllegalArgumentException %s is not a valid URI
WFLYCC0015 java.lang.IllegalArgumentException Illegal %s value %d -- must be greater than %d
WFLYCC0016 java.lang.IllegalArgumentException Illegal %s value %d -- must be greater than %d and less than %d
WFLYCC0017 java.lang.RuntimeException Screen real estate is expensive; displayUnits must be 5 characters or less
WFLYCC0019 java.lang.String No failure details provided
WFLYCC0020 java.lang.IllegalStateException No %s is configured
WFLYCC0022 java.lang.IllegalStateException %s is closed
WFLYCC0023 java.lang.RuntimeException Operation outcome is %s
WFLYCC0024 java.lang.IllegalStateException %s operations are not allowed after content and deployment modifications
WFLYCC0025 org.jboss.as.controller.client.helpers.domain.RollbackCancelledException Rollback was cancelled
WFLYCC0026 org.jboss.as.controller.client.helpers.domain.RollbackCancelledException Rollback was itself rolled back
WFLYCC0027 org.jboss.as.controller.client.helpers.domain.RollbackCancelledException Rollback timed out
WFLYCC0028 java.lang.String Deployment with name %s already present in the server
WFLYCC0029 java.lang.IllegalStateException Unknown action type %s
WFLYCC0030 org.jboss.as.controller.client.logging.ControllerClientLogger$LeakDescription Allocation stack trace:
WFLYCC0031 java.lang.IllegalArgumentException No failure description as the operation was successful.
WFLYCC0032 java.lang.IllegalArgumentException The operation name was not defined.
WFLYCC0033 java.lang.IllegalArgumentException The address must be of type ModelType.LIST.
WFLYCC0034 WARN Closing leaked controller client
WFLYCC0035 WARN Cannot delete temp file %s, will be deleted on exit
WFLYCC0036 java.io.IOException Stream was closed
WFLYCC0037 java.lang.RuntimeException Failed to parse the configuration file: %s

WFLYCLCOM

Code Level Return Type Message
WFLYCLCOM0001 org.jboss.as.controller.OperationFailedException %2$g is not a valid value for parameter %1$s. The value must be %3$s %4$g
WFLYCLCOM0002 WARN Failed to close %s
WFLYCLCOM0003 java.lang.String The following attributes do not support negative values: %s
WFLYCLCOM0004 java.lang.String The following attributes do not support zero values: %s
WFLYCLCOM0005 java.lang.String Legacy host does not support multiple values for attributes: %s
WFLYCLCOM0006 WARN The '%s' attribute of the '%s' element is no longer supported and will be ignored
WFLYCLCOM0007 WARN The '%s' element is no longer supported and will be ignored
WFLYCLCOM0008 org.jboss.as.controller.OperationFailedException %s:%s operation is only supported in admin-only mode.

WFLYCLEEINF

Code Level Return Type Message
WFLYCLEEINF0001 INFO Failed to cancel %s on primary owner.
WFLYCLEEINF0002 INFO Failed to schedule %s on primary owner.

WFLYCLEJBINF

Code Level Return Type Message
WFLYCLEJBINF0003 WARN Failed to expire stateful session bean %s
WFLYCLEJBINF0010 WARN Disabling expiration for '%s'. SFSB expiration should be configured per §4.3.11 of the Jakarta Enterprise Beans specification.

WFLYCLI

Code Level Return Type Message
WFLYCLI0001 INFO Processing CLI script %s
WFLYCLI0002 ERROR Error processing CLI script %s
WFLYCLI0003 java.lang.RuntimeException Could not find CLI properties file %s
WFLYCLI0004 ERROR CLI execution output:
WFLYCLI0005 INFO Done processing CLI script %s
WFLYCLI0006 DEBUG Executing CLI command %s
WFLYCLI0007 java.lang.IllegalStateException Unexpected exception while processing CLI commands from %s
WFLYCLI0008 java.lang.IllegalStateException Error processing CLI script %s. The Operations were executed but there were unexpected values. See list of errors in %s
WFLYCLI0009 java.lang.IllegalStateException Unexpected exception while processing CLI command %s from %s

WFLYCLINF

Code Level Return Type Message
WFLYCLINF0001 INFO Activating Infinispan subsystem.
WFLYCLINF0002 INFO Started %s cache from %s container
WFLYCLINF0003 INFO Stopped %s cache from %s container
WFLYCLINF0010 java.lang.IllegalArgumentException %s is not a valid cache store
WFLYCLINF0029 INFO Started remote cache container '%s'.
WFLYCLINF0030 INFO Stopped remote cache container '%s'.
WFLYCLINF0031 org.infinispan.client.hotrod.exceptions.HotRodClientException Specified HotRod protocol version %s does not support creating caches automatically. Cache named '%s' must be already created on the Infinispan Server!
WFLYCLINF0033 WARN Attribute '%s' is configured to use a deprecated value: %s; use one of the following values instead: %s

WFLYCLJG

Code Level Return Type Message
WFLYCLJG0001 INFO Activating JGroups subsystem. JGroups version %s
WFLYCLJG0007 java.lang.String Failed to parse %s
WFLYCLJG0008 java.lang.String Failed to locate %s
WFLYCLJG0010 org.jboss.as.controller.OperationFailedException Transport for stack %s is not defined. Please specify both a transport and protocol list, either as optional parameters to add() or via batching.
WFLYCLJG0015 java.lang.String Unknown metric %s
WFLYCLJG0016 org.jboss.as.controller.OperationFailedException Unable to load protocol class %s
WFLYCLJG0022 java.lang.IllegalArgumentException %s entry not found in configured key store
WFLYCLJG0023 java.lang.IllegalArgumentException %s key store entry is not of the expected type: %s
WFLYCLJG0025 java.lang.IllegalArgumentException Configured credential source does not reference a clear-text password credential
WFLYCLJG0028 java.lang.IllegalArgumentException Could not resolve destination address for outbound socket binding named '%s'
WFLYCLJG0030 WARN Protocol %s is obsolete and will be auto-updated to %s
WFLYCLJG0031 WARN Ignoring unrecognized %s property: %s
WFLYCLJG0032 INFO Connecting '%s' channel. '%s' joining cluster '%s' via %s
WFLYCLJG0033 INFO Connected '%s' channel. '%s' joined cluster '%s' with view: %s
WFLYCLJG0034 INFO Disconnecting '%s' channel. '%s' leaving cluster '%s' with view: %s
WFLYCLJG0035 INFO Disconnected '%s' channel. '%s' left cluster '%s'

WFLYCLSN

Code Level Return Type Message
WFLYCLSN0001 INFO This node will now operate as the singleton provider of the %s service
WFLYCLSN0002 INFO This node will no longer operate as the singleton provider of the %s service
WFLYCLSN0003 INFO %s elected as the singleton provider of the %s service
WFLYCLSN0004 java.lang.IllegalStateException No response received from primary provider of the %s service, retrying...
WFLYCLSN0005 ERROR Failed to start %s service
WFLYCLSN0006 WARN Failed to reach quorum of %2$d for %1$s service. No primary singleton provider will be elected.
WFLYCLSN0007 INFO Just reached required quorum of %2$d for %1$s service. If this cluster loses another member, no node will be chosen to provide this service.
WFLYCLSN0008 java.lang.IllegalArgumentException Detected multiple primary providers for %s service: %s
WFLYCLSN0009 java.lang.IllegalStateException Singleton service %s is not started.
WFLYCLSN0010 WARN No node was elected as the singleton provider of the %s service
WFLYCLSN0011 java.lang.IllegalArgumentException Specified quorum %d must be greater than zero

WFLYCLSNG

Code Level Return Type Message
WFLYCLSNG0001 INFO Singleton deployment detected. Deployment will reset using %s policy.

WFLYCLSV

Code Level Return Type Message
WFLYCLSV0001 java.lang.IllegalArgumentException A command dispatcher already exists for %s
WFLYCLSV0020 WARN Failed to purge %s/%s registry of old registry entries for: %s
WFLYCLSV0021 WARN Failed to notify %s/%s registry listener of %s(%s) event
WFLYCLSV0022 WARN Failed to restore local %s/%s registry entry following network partititon merge
WFLYCLSV0030 WARN Failed to notify %s/%s service provider registration listener of new providers: %s

WFLYCLWEB

Code Level Return Type Message
WFLYCLWEB0001 java.lang.IllegalStateException Session %s is not valid

WFLYCLWEBHR

Code Level Return Type Message
WFLYCLWEBHR0001 WARN Failed to expire session %s
WFLYCLWEBHR0007 WARN Failed to activate attributes of session %s
WFLYCLWEBHR0008 WARN Failed to activate attribute %2$s of session %1$s
WFLYCLWEBHR0009 java.lang.IllegalStateException Failed to read attribute %2$s of session %1$s
WFLYCLWEBHR0010 WARN Failed to activate authentication for single sign on %s
WFLYCLWEBHR0011 WARN Session %s is missing cache entry for attribute %s

WFLYCLWEBINF

Code Level Return Type Message
WFLYCLWEBINF0001 WARN Failed to passivate attributes of session %s
WFLYCLWEBINF0002 WARN Failed to passivate attribute %2$s of session %1$s
WFLYCLWEBINF0003 java.lang.IllegalStateException Session %s is not valid
WFLYCLWEBINF0004 WARN Failed to expire session %s
WFLYCLWEBINF0005 DEBUG Failed to cancel expiration/passivation of session %s on primary owner.
WFLYCLWEBINF0006 DEBUG Failed to schedule expiration/passivation of session %s on primary owner.
WFLYCLWEBINF0007 WARN Failed to activate attributes of session %s
WFLYCLWEBINF0008 WARN Failed to activate attribute %2$s of session %1$s
WFLYCLWEBINF0009 java.lang.IllegalStateException Failed to read attribute %2$s of session %1$s
WFLYCLWEBINF0010 WARN Failed to activate authentication for single sign on %s
WFLYCLWEBINF0011 WARN Session %s is missing cache entry for attribute %s
WFLYCLWEBINF0012 WARN Disabling eviction for cache '%s'. Web session passivation should be configured via in jboss-web.xml.
WFLYCLWEBINF0013 WARN Disabling expiration for cache '%s'. Web session expiration should be configured per §7.5 of the servlet specification.

WFLYCLWEBUT

Code Level Return Type Message
WFLYCLWEBUT0001 java.lang.IllegalStateException Session %s is invalid
WFLYCLWEBUT0002 java.lang.IllegalStateException Session %s already exists
WFLYCLWEBUT0003 java.lang.IllegalStateException Session manager was stopped
WFLYCLWEBUT0004 WARN Legacy overriding attached distributable session management provider for %s
WFLYCLWEBUT0005 WARN No distributable session management provider found for %s; using legacy provider based on
WFLYCLWEBUT0007 WARN No routing provider found for %s; using legacy provider based on static configuration
WFLYCLWEBUT0008 WARN No distributable single sign-on management provider found for %s; using legacy provider based on static configuration
WFLYCLWEBUT0009 java.lang.IllegalStateException Invalidation attempted for session %s after the response was committed (e.g. after HttpServletResponse.sendRedirect or sendError)

WFLYCM

Code Level Return Type Message
WFLYCM0002 java.lang.String Error initializing the process state listener %s
WFLYCM0003 ERROR Error invoking the process state listener %s
WFLYCM0004 ERROR The process state listener %s took to much time to complete.
WFLYCM0005 ERROR Error cleaning up for the process state listener %s
WFLYCM0006 org.jboss.as.controller.OperationFailedException Error to load module %s
WFLYCM0007 org.jboss.as.controller.OperationFailedException Error to load class %s from module %s
WFLYCM0008 org.jboss.as.controller.OperationFailedException Error to instantiate instance of class %s from module %s

WFLYCNT

Code Level Return Type Message
WFLYCNT0001 org.jboss.as.controller.OperationFailedException Invalid hash '%s' for content at address %s; current hash is '%s' -- perhaps the content has been updated by another caller?
WFLYCNT0002 java.lang.IllegalStateException Cannot obtain Message Digest algorithm SHA-1
WFLYCNT0003 java.lang.IllegalArgumentException Illegal child type %s -- must be %s
WFLYCNT0004 java.lang.IllegalArgumentException Illegal child resource class %s
WFLYCNT0005 java.lang.IllegalStateException No content found with hash %s
WFLYCNT0006 java.lang.IllegalStateException null parent

WFLYCONF

Code Level Return Type Message
WFLYCONF0001 INFO Activating MicroProfile Config Subsystem
WFLYCONF0002 org.jboss.as.controller.OperationFailedException Unable to load class %s from module %s
WFLYCONF0003 DEBUG Use directory for MicroProfile Config Source: %s
WFLYCONF0004 DEBUG Use class for MicroProfile Config Source: %s
WFLYCONF0009 DEBUG Use directory for MicroProfile Config Source Root: %s
WFLYCONF0010 INFO The MicroProfile Config Source root directory '%s' contains the following directories which will be used as MicroProfile Config Sources: %s

WFLYCTL

Code Level Return Type Message
WFLYCTL-001 ERROR Operation (%s) failed - address: (%s) - failure description: %s
WFLYCTL-001 javax.xml.stream.XMLStreamException Failed to load module %s
WFLYCTL0000 java.lang.String Operation %s
WFLYCTL0000 java.lang.String %nService %s was depended upon by
WFLYCTL0000 java.lang.String is missing [%s]
WFLYCTL0000 java.lang.String %s (missing) dependents: %s %n
WFLYCTL0000 java.lang.String %s (no longer required)%n
WFLYCTL0000 java.lang.String %s (new available)%n
WFLYCTL0000 java.lang.String Services that were unable to start:
WFLYCTL0000 java.lang.String Services that may be the cause:
WFLYCTL0000 java.lang.String attributes %s
WFLYCTL0000 java.lang.String capability '%s' requires it for address '%s'
WFLYCTL0000 java.lang.String capability '%s' requires it for attribute '%s' at address '%s'
WFLYCTL0000 java.lang.String %s
WFLYCTL0000 java.lang.String %s in context '%s'
WFLYCTL0000 java.lang.String ; Possible registration points for this capability: %s
WFLYCTL0000 java.lang.String ; There are no known registration points which can provide this capability.
WFLYCTL0000 java.lang.String ; This unresolvable capability likely is due to the use of an expression string in a configuration attribute that does not support expressions.
WFLYCTL0000 java.lang.String Couldn't convert %s to %s
WFLYCTL0000 java.lang.String While constructing a mapping; %s; expected a mapping for merging, but found %s
WFLYCTL0000 java.lang.String The yaml configuration files for customizing the configuration. Paths can be absolute, relative to the current execution directory or relative to the standalone configuration directory.
WFLYCTL0001 WARN Cannot resolve address %s, so cannot match it to any InetAddress
WFLYCTL0002 ERROR Error booting the container
WFLYCTL0003 ERROR Error booting the container due to insufficient stack space for the thread used to execute boot operations. The thread was configured with a stack size of [%1$d]. Setting system property %2$s to a value higher than [%1$d] may resolve this problem.
WFLYCTL0004 ERROR %s caught exception attempting to revert operation %s at address %s
WFLYCTL0005 ERROR Failed executing operation %s at address %s
WFLYCTL0006 ERROR Failed executing subsystem %s boot operations
WFLYCTL0007 ERROR Failed to close resource %s
WFLYCTL0008 ERROR Failed to persist configuration change
WFLYCTL0009 ERROR Failed to store configuration to %s
WFLYCTL0010 ERROR Invalid value %s for system property %s -- using default value [%d]
WFLYCTL0011 WARN Address %1$s is a wildcard address, which will not match against any specific address. Do not use the '%2$s' configuration element to specify that an interface should use a wildcard address; use '%3$s'
WFLYCTL0013 ERROR Operation (%s) failed - address: (%s)
WFLYCTL0015 WARN Wildcard address detected - will ignore other interface criteria.
WFLYCTL0016 ERROR Received no final outcome response for operation %s with address %s from remote process at address %s. The result of this operation will only include the remote process' preliminary response to the request.
WFLYCTL0017 DEBUG Operation (%s) failed - address: (%s) - failure description: %s
WFLYCTL0019 WARN Graceful shutdown of the handler used for native management requests did not complete within [%d] ms but shutdown of the underlying communication channel is proceeding
WFLYCTL0020 WARN Graceful shutdown of the handler used for native management requests failed but shutdown of the underlying communication channel is proceeding
WFLYCTL0021 WARN Invalid value '%s' for system property '%s' -- value must be convertible into an int
WFLYCTL0022 WARN Multiple addresses or network interfaces matched the selection criteria for interface '%s'. Matching addresses: %s. Matching network interfaces: %s. The interface will use address %s and network interface %s.
WFLYCTL0023 WARN Value '%s' for interface selection criteria 'inet-address' is ambiguous, as more than one address or network interface available on the machine matches it. Because of this ambiguity, no address will be selected as a match. Matching addresses: %s. Matching network interfaces: %s.
WFLYCTL0024 ERROR Could not read target definition!
WFLYCTL0027 ERROR Operation was interrupted before service container stability could be reached. Process should be restarted. Step that first updated the service container was '%s' at address '%s'
WFLYCTL0028 INFO Attribute '%s' in the resource at address '%s' is deprecated, and may be removed in a future version. See the attribute description in the output of the read-resource-description operation to learn more about the deprecation.
WFLYCTL0029 WARN Cannot delete temp file %s, will be deleted on exit
WFLYCTL0030 java.lang.String No resource definition is registered for address %s
WFLYCTL0031 java.lang.String No operation named '%s' exists at address %s
WFLYCTL0032 WARN There were problems during the transformation process for target host: '%s' %nProblems found: %n%s
WFLYCTL0033 INFO Extension '%s' is deprecated and may not be supported in future versions
WFLYCTL0034 INFO Subsystems %s provided by legacy extension '%s' are not supported on servers running this version. The extension is only supported for use by hosts running a previous release in a mixed-version managed domain. On this server the extension will not register any subsystems, and future attempts to create or address subsystem resources on this server will result in failure.
WFLYCTL0035 ERROR Update of the management operation audit log failed
WFLYCTL0036 ERROR [%d] consecutive management operation audit logging failures have occurred; disabling audit logging
WFLYCTL0037 ERROR Update of the management operation audit log failed in handler '%s'
WFLYCTL0038 ERROR [%d] consecutive management operation audit logging failures have occurred in handler '%s'; disabling this handler for audit logging
WFLYCTL0039 javax.xml.stream.XMLStreamException %s already defined
WFLYCTL0041 javax.xml.stream.XMLStreamException A %s %s already declared has already been declared in %s %s
WFLYCTL0042 javax.xml.stream.XMLStreamException A %s or a %s %s already declared has already been declared in %s %s
WFLYCTL0043 java.lang.IllegalArgumentException An %s named '%s' is already registered at location '%s'
WFLYCTL0044 java.lang.IllegalStateException Ambiguous configuration file name '%s' as there are multiple files in %s that end in %s
WFLYCTL0045 java.lang.IllegalArgumentException Ambiguous name '%s' in %s: %s
WFLYCTL0048 java.lang.String Attribute %s is not writable
WFLYCTL0050 java.lang.RuntimeException Unable to determine a default name based on the local host name
WFLYCTL0051 java.lang.IllegalStateException Could not create %s
WFLYCTL0052 java.lang.IllegalStateException Could not delete %s
WFLYCTL0053 java.lang.IllegalArgumentException Cannot register submodels with a null PathElement
WFLYCTL0055 org.jboss.as.controller._private.OperationFailedRuntimeException Cannot remove %s
WFLYCTL0056 ERROR Could not rename %s to %s
WFLYCTL0057 java.lang.IllegalArgumentException Cannot write to %s
WFLYCTL0058 javax.xml.stream.XMLStreamException Child %s of element %s already declared
WFLYCTL0059 java.lang.RuntimeException Could not get canonical file for boot file: %s
WFLYCTL0060 java.lang.IllegalStateException Could not get canonical file for main file: %s
WFLYCTL0062 java.lang.String Composite operation failed and was rolled back. Steps that failed:
WFLYCTL0063 java.lang.String Composite operation was rolled back
WFLYCTL0064 java.lang.IllegalArgumentException Configuration files whose complete name is %s are not allowed
WFLYCTL0065 java.lang.IllegalStateException No configuration file ending in %s found in %s
WFLYCTL0066 java.lang.IllegalArgumentException No directory %s was found
WFLYCTL0067 javax.xml.stream.XMLStreamException Either a %s or %s domain controller configuration must be declared.
WFLYCTL0068 javax.xml.stream.XMLStreamException An attribute named '%s' has already been declared
WFLYCTL0069 javax.xml.stream.XMLStreamException Duplicate %s declaration
WFLYCTL0070 javax.xml.stream.XMLStreamException Duplicate %s declaration %s
WFLYCTL0071 org.jboss.as.controller._private.OperationFailedRuntimeException Duplicate path element '%s' found
WFLYCTL0072 javax.xml.stream.XMLStreamException Duplicate interface declaration
WFLYCTL0073 javax.xml.stream.XMLStreamException An element of this type named '%s' has already been declared
WFLYCTL0075 java.lang.IllegalStateException Duplicate resource %s
WFLYCTL0076 java.lang.IllegalStateException Duplicate resource type %s
WFLYCTL0079 java.lang.RuntimeException Failed initializing module %s
WFLYCTL0080 java.lang.String Failed services
WFLYCTL0081 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to back up %s
WFLYCTL0082 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to create backup copies of configuration file %s
WFLYCTL0083 javax.xml.stream.XMLStreamException Failed to load module
WFLYCTL0084 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to marshal configuration
WFLYCTL0085 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to parse configuration
WFLYCTL0086 java.lang.String Failed to persist configuration change: %s
WFLYCTL0088 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to take a snapshot of %s to %s
WFLYCTL0089 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to write configuration
WFLYCTL0090 java.lang.IllegalArgumentException %s does not exist
WFLYCTL0091 java.lang.IllegalArgumentException No files beginning with '%s' found in %s
WFLYCTL0092 java.lang.IllegalStateException %s cannot be used except in a full server boot
WFLYCTL0094 java.lang.String Illegal interface criteria type %s; must be %s
WFLYCTL0095 java.lang.String Illegal value %s for interface criteria %s; must be %s
WFLYCTL0096 java.lang.UnsupportedOperationException Resource is immutable
WFLYCTL0097 org.jboss.as.controller.OperationFailedException Wrong type for '%s'. Expected %s but was %s
WFLYCTL0099 java.lang.String %s is invalid
WFLYCTL0100 javax.xml.stream.XMLStreamException %d is not a valid %s
WFLYCTL0101 java.lang.String Invalid address %s (%s)
WFLYCTL0102 java.lang.String Invalid 'value' %s -- must be of the form address/mask
WFLYCTL0103 java.lang.String Invalid mask %s (%s)
WFLYCTL0104 java.lang.String Invalid address %s (%s)
WFLYCTL0105 java.lang.String %s is invalid in combination with %s
WFLYCTL0106 javax.xml.stream.XMLStreamException Invalid value '%s' for attribute '%s'
WFLYCTL0109 java.lang.String Invalid pattern %s for interface criteria %s
WFLYCTL0110 java.lang.String Invalid resource address element '%s'. The key '%s' is not valid for an element in a resource address.
WFLYCTL0111 java.lang.IllegalArgumentException Load factor must be greater than 0 and less than or equal to 1
WFLYCTL0112 java.lang.String '%s' is an invalid value for parameter %s. Values must have a maximum length of %d characters
WFLYCTL0113 java.lang.String '%s' is an invalid value for parameter %s. Values must have a minimum length of %d characters
WFLYCTL0114 java.lang.String [%d] is an invalid size for parameter %s. A maximum length of [%d] is required
WFLYCTL0115 java.lang.String [%d] is an invalid size for parameter %s. A minimum length of [%d] is required
WFLYCTL0116 java.lang.String %d is an invalid value for parameter %s. A maximum value of %d is required
WFLYCTL0117 java.lang.String %d is an invalid value for parameter %s. A minimum value of %d is required
WFLYCTL0118 java.lang.IllegalStateException Invalid modification after completed step
WFLYCTL0119 org.jboss.as.controller.OperationFailedException Value %s for attribute %s is not a valid multicast address
WFLYCTL0120 javax.xml.stream.XMLStreamException An outbound socket binding: %s cannot have both %s as well as a %s at the same time
WFLYCTL0121 java.lang.IllegalArgumentException %s is not a valid value for parameter %s -- must be one of %s
WFLYCTL0122 javax.xml.stream.XMLStreamException Value %s for attribute %s does not represent a properly hex-encoded SHA1 hash
WFLYCTL0123 java.lang.IllegalStateException Stage %s is not valid for context process type %s
WFLYCTL0124 java.lang.IllegalArgumentException Invalid step stage specified
WFLYCTL0126 java.lang.IllegalArgumentException Can not have a negative size table!
WFLYCTL0127 java.lang.String Invalid type %s
WFLYCTL0128 java.lang.String Invalid resource address element '%s'. The value '%s' is not valid for an element in a resource address. Character '%s' is not allowed.
WFLYCTL0129 java.lang.String Invalid value %s for %s; legal values are %s
WFLYCTL0132 javax.xml.stream.XMLStreamException Must include one of the following elements: %s
WFLYCTL0133 javax.xml.stream.XMLStreamException Missing required attribute(s): %s
WFLYCTL0134 javax.xml.stream.XMLStreamException Missing required element(s): %s
WFLYCTL0135 javax.xml.stream.XMLStreamException Interrupted awaiting loading of module %s
WFLYCTL0136 java.lang.RuntimeException Interrupted awaiting initialization of module %s
WFLYCTL0137 java.lang.IllegalStateException Model contains multiple %s nodes
WFLYCTL0138 java.lang.String Namespace with prefix %s already registered with schema URI %s
WFLYCTL0139 java.lang.String No namespace with URI %s found
WFLYCTL0140 java.lang.String Nested %s not allowed
WFLYCTL0144 java.lang.IllegalStateException No active step
WFLYCTL0147 org.jboss.as.controller._private.OperationFailedRuntimeException No child type %s
WFLYCTL0149 java.lang.String No interface criteria was provided
WFLYCTL0150 java.lang.String No operation handler
WFLYCTL0152 java.lang.IllegalStateException %s is not a directory
WFLYCTL0153 java.lang.IllegalStateException No %s%s found for %s
WFLYCTL0154 java.lang.IllegalStateException Cannot execute asynchronous operation without an executor
WFLYCTL0155 org.jboss.as.controller.OperationFailedException '%s' may not be null
WFLYCTL0157 java.lang.IllegalStateException Operation already complete
WFLYCTL0158 java.lang.String Operation handler failed: %s
WFLYCTL0160 java.lang.String Operation rolling back
WFLYCTL0161 java.lang.String Operation succeeded, committing
WFLYCTL0162 java.lang.String There is no operation %s registered at address %s
WFLYCTL0165 org.jboss.msc.service.StartException No configuration persister was injected
WFLYCTL0169 java.lang.IllegalArgumentException A proxy handler is already registered at location '%s'
WFLYCTL0171 java.lang.String Removing services has lead to unsatisfied dependencies:
WFLYCTL0172 org.jboss.as.controller.OperationFailedException %s is required
WFLYCTL0173 javax.xml.stream.XMLStreamException %s is reserved
WFLYCTL0175 org.jboss.as.controller._private.OperationFailedRuntimeException Resource %s does not exist; a resource at address %s cannot be created until all ancestor resources have been added
WFLYCTL0176 java.lang.IllegalStateException rollback() has already been invoked
WFLYCTL0177 java.lang.String Schema with URI %s already registered with location %s
WFLYCTL0178 java.lang.String No schema location with URI %s found
WFLYCTL0179 java.util.concurrent.CancellationException Service install was cancelled
WFLYCTL0180 java.lang.String Services with missing/unavailable dependencies
WFLYCTL0181 java.lang.IllegalStateException Get service registry only supported in runtime operations
WFLYCTL0182 java.lang.IllegalStateException Service removal only supported in runtime operations
WFLYCTL0183 java.lang.String Service status report%n
WFLYCTL0184 java.lang.String New missing/unsatisfied dependencies:%n
WFLYCTL0185 java.lang.String Newly corrected services:%n
WFLYCTL0186 java.lang.String Services which failed to start:
WFLYCTL0187 java.lang.IllegalStateException Get service target only supported in runtime operations
WFLYCTL0188 java.lang.IllegalStateException Stage %s is already complete
WFLYCTL0190 java.lang.String Step handler %s for operation %s at address %s failed -- %s
WFLYCTL0191 java.lang.String Interrupted awaiting subsystem boot operation execution
WFLYCTL0192 java.lang.String Boot operations for subsystem %s failed without explanation
WFLYCTL0193 java.lang.String Failed executing subsystem %s boot operations
WFLYCTL0194 java.lang.IllegalStateException Table is full!
WFLYCTL0195 java.lang.RuntimeException Interrupted awaiting transaction commit or rollback
WFLYCTL0197 javax.xml.stream.XMLStreamException Unexpected attribute '%s' encountered
WFLYCTL0198 javax.xml.stream.XMLStreamException Unexpected element '%s' encountered
WFLYCTL0199 javax.xml.stream.XMLStreamException Unexpected end of element '%s' encountered
WFLYCTL0201 java.lang.String Unknown attribute '%s'
WFLYCTL0202 java.lang.String No known child type named %s
WFLYCTL0203 java.lang.RuntimeException Unknown property in interface criteria list: %s
WFLYCTL0204 java.lang.String Unknown interface criteria type %s
WFLYCTL0205 javax.xml.stream.XMLStreamException Unknown interface %s %s must be declared in element %s
WFLYCTL0206 javax.xml.stream.XMLStreamException Unknown %s %s %s must be declared in element %s
WFLYCTL0207 java.lang.String Validation failed for %s
WFLYCTL0208 java.lang.String ... and %s more
WFLYCTL0209 javax.xml.stream.XMLStreamException Invalid value '%s' for attribute '%s' -- valid values are %s
WFLYCTL0210 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Caught SecurityException attempting to resolve expression '%s' -- %s
WFLYCTL0211 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Cannot resolve expression '%s'
WFLYCTL0212 org.jboss.as.controller._private.OperationFailedRuntimeException Duplicate resource %s
WFLYCTL0214 java.lang.IllegalStateException Could not load configuration file: %s. The configuration file argument must specify the path to a file located in the configuration directory. The path must be a relative path, and must be relative to the configuration directory %s.
WFLYCTL0215 java.lang.IllegalStateException Could not load configuration file: %s. The configuration file argument must specify one of the following: 1) an absolute path to an existing file; 2) a relative path to an existing file, relative to the current working directory; or 3) a relative path to a file located in the configuration directory. In the latter case, it must be a path relative to the configuration directory %s.
WFLYCTL0216 org.jboss.as.controller.registry.Resource$NoSuchResourceException Management resource '%s' not found
WFLYCTL0217 java.lang.String Child resource '%s' not found
WFLYCTL0218 java.lang.IllegalArgumentException A node is already registered at '%s'
WFLYCTL0219 java.lang.IllegalStateException An attempt was made to unregister extension %s which still has subsystem %s registered
WFLYCTL0220 java.lang.IllegalStateException An override model registration is not allowed for the root model registration
WFLYCTL0221 java.lang.IllegalStateException An override model registration is not allowed for non-wildcard model registrations. This registration is for the non-wildcard name '%s'.
WFLYCTL0222 java.lang.IllegalArgumentException A registration named '*' is not an override model and cannot be unregistered via the unregisterOverrideModel API.
WFLYCTL0223 java.lang.IllegalStateException The root resource registration does not support overrides, so no override can be removed.
WFLYCTL0224 java.lang.IllegalArgumentException There is no operation %s registered at address %s
WFLYCTL0225 java.lang.RuntimeException Failed to recover services during operation rollback
WFLYCTL0226 java.lang.IllegalStateException A subsystem named '%s' cannot be registered by extension '%s' -- a subsystem with that name has already been registered by extension '%s'.
WFLYCTL0227 java.lang.IllegalArgumentException Operation has no '%s' field. %s
WFLYCTL0228 java.lang.IllegalArgumentException Operation has a null or empty name. %s
WFLYCTL0229 java.lang.IllegalArgumentException No operation called '%s' at '%s'. %s
WFLYCTL0230 java.lang.IllegalArgumentException Operation contains a parameter '%s' which is not one of the expected parameters %s. %s
WFLYCTL0231 java.lang.IllegalArgumentException Required parameter %s is not present. %s
WFLYCTL0232 java.lang.IllegalArgumentException Alternative parameter '%s' for required parameter '%s' was used. Please use one or the other. %s
WFLYCTL0233 java.lang.IllegalArgumentException Could not convert the parameter '%s' to a %s. %s
WFLYCTL0234 java.lang.IllegalArgumentException The value '%s' passed in for '%s' is smaller than the minimum value '%s'. %s
WFLYCTL0235 java.lang.IllegalArgumentException The value '%s' passed in for '%s' is bigger than the maximum value '%s'. %s
WFLYCTL0236 java.lang.IllegalArgumentException The value '%s' passed in for '%s' is shorter than the minimum length '%s'. %s
WFLYCTL0237 java.lang.IllegalArgumentException The value '%s' passed in for '%s' is longer than the maximum length '%s'. %s
WFLYCTL0238 java.lang.IllegalArgumentException %s is expected to be a list of %s. %s
WFLYCTL0239 java.lang.String 'required' parameter: '%s' must be a boolean in the description of the operation at %s: %s
WFLYCTL0240 java.lang.String Undefined request property '%s' in description of the operation at %s: %s
WFLYCTL0241 java.lang.String There is no type for parameter '%s' in the description of the operation at %s: %s
WFLYCTL0242 java.lang.String Could not determine the type of parameter '%s' in the description of the operation at %s: %s
WFLYCTL0243 java.lang.String The '%s' attribute of the '%s' parameter can not be converted to its type: %s in the description of the operation at %s: %s
WFLYCTL0244 java.lang.String The '%s' attribute of the '%s' parameter can not be converted to an integer in the description of the operation at %s: %s
WFLYCTL0245 javax.xml.stream.XMLStreamException Illegal '%s' value %s -- must be a valid port number
WFLYCTL0246 java.lang.RuntimeException Cannot resolve the localhost address to create a UUID-based name for this process
WFLYCTL0247 java.lang.IllegalStateException Do not call ServiceController.setMode(REMOVE), use OperationContext.removeService() instead.
WFLYCTL0248 org.jboss.as.controller.OperationFailedException Invalid value %s for %s; legal values are %s
WFLYCTL0249 org.jboss.as.controller._private.OperationFailedRuntimeException Operation '%s' targeted at resource '%s' was directly invoked by a user. User operations are not permitted to directly update the persistent configuration of a server in a managed domain.
WFLYCTL0250 java.lang.IllegalStateException An operation handler attempted to access the operation response server results object on a process type other than '%s'. The current process type is '%s'
WFLYCTL0251 java.lang.String Can't have both loopback and inet-address criteria
WFLYCTL0253 java.lang.String Can't have same criteria for both not and inclusion %s
WFLYCTL0254 org.jboss.as.controller.OperationFailedException Invalid value '%s' for attribute '%s' -- no interface configuration with that name exists
WFLYCTL0256 java.lang.IllegalArgumentException Could not find a path called '%s'
WFLYCTL0257 java.lang.IllegalArgumentException Path entry is read-only: '%s'
WFLYCTL0258 java.lang.IllegalArgumentException There is already a path entry called: '%s'
WFLYCTL0260 java.lang.IllegalArgumentException Invalid relativePath value '%s'
WFLYCTL0261 java.lang.IllegalArgumentException '%s' is a Windows absolute path
WFLYCTL0262 org.jboss.as.controller.OperationFailedException Path '%s' is read-only; it cannot be removed
WFLYCTL0263 org.jboss.as.controller.OperationFailedException Path '%s' is read-only; it cannot be modified
WFLYCTL0264 org.jboss.as.controller.OperationFailedException %s may not be ModelType.EXPRESSION
WFLYCTL0265 java.lang.IllegalStateException PathManager not available on processes of type '%s'
WFLYCTL0266 org.jboss.as.controller.OperationFailedException Value %s for attribute %s is not a valid multicast address
WFLYCTL0267 org.jboss.as.controller.OperationFailedException Path '%s' cannot be removed, since the following paths depend on it: %s
WFLYCTL0268 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to rename temp file %s to %s
WFLYCTL0269 java.lang.String Invalid locale format: %s
WFLYCTL0271 java.lang.String Operation cancelled
WFLYCTL0272 org.jboss.as.controller._private.OperationCancellationException Operation cancelled asynchronously
WFLYCTL0273 java.io.IOException Stream was killed
WFLYCTL0274 java.io.IOException Stream was closed
WFLYCTL0275 org.jboss.as.controller.OperationFailedException Cannot define both '%s' and '%s'
WFLYCTL0276 java.lang.IllegalStateException Failed to delete file %s
WFLYCTL0277 java.lang.IllegalArgumentException An alias is already registered at location '%s'
WFLYCTL0279 java.lang.IllegalArgumentException Alias target address not found: %s
WFLYCTL0280 java.lang.IllegalArgumentException No operation called '%s' found for alias address '%s' which maps to '%s'
WFLYCTL0281 java.lang.IllegalStateException Resource registration is not an alias
WFLYCTL0282 java.lang.RuntimeException Model contains fields that are not known in definition, fields: %s, path: %s
WFLYCTL0283 java.lang.UnsupportedOperationException Could not marshal attribute as element: %s
WFLYCTL0284 java.lang.UnsupportedOperationException Could not marshal attribute as attribute: %s
WFLYCTL0285 java.lang.String Operation %s invoked against multiple target addresses failed at address %s with failure description %s
WFLYCTL0286 java.lang.String Operation %s invoked against multiple target addresses failed at address %s. See the operation result for details.
WFLYCTL0287 java.lang.String Operation %s invoked against multiple target addresses failed at addresses %s. See the operation result for details.
WFLYCTL0288 java.lang.String One or more services were unable to start due to one or more indirect dependencies not being available.
WFLYCTL0289 java.lang.String No operation entry called '%s' registered at '%s'
WFLYCTL0290 java.lang.String No operation handler called '%s' registered at '%s'
WFLYCTL0291 java.lang.IllegalStateException There is no registered path to resolve with path attribute '%s' and/or relative-to attribute '%s on: %s
WFLYCTL0292 java.lang.String Attributes do not support expressions in the target model version and this resource will need to be ignored on the target host.
WFLYCTL0293 java.lang.String Attributes are not understood in the target model version and this resource will need to be ignored on the target host.
WFLYCTL0294 java.lang.String Transforming resource %s to core model version '%s' -- %s %s
WFLYCTL0295 java.lang.String Transforming operation %s at resource %s to core model version '%s' -- %s %s
WFLYCTL0296 java.lang.String Transforming resource %s to subsystem '%s' model version '%s' -- %s %s
WFLYCTL0297 java.lang.String Transforming operation %s at resource %s to subsystem '%s' model version '%s' -- %s %s
WFLYCTL0298 org.jboss.as.controller.OperationFailedException Node contains an unresolved expression %s -- a resolved model is required
WFLYCTL0299 org.jboss.as.controller.OperationFailedException Transforming resource %s for host controller '%s' to core model version '%s' -- there were problems with some of the attributes and this resource will need to be ignored on that host. Details of the problems: %s
WFLYCTL0300 org.jboss.as.controller.OperationFailedException Transforming resource %s for host controller '%s' to subsystem '%s' model version '%s' --there were problems with some of the attributes and this resource will need to be ignored on that host. Details of problems: %s
WFLYCTL0301 java.lang.String The following attributes do not support expressions: %s
WFLYCTL0302 java.lang.String The following attributes are not understood in the target model version and this resource will need to be ignored on the target host: %s
WFLYCTL0303 java.lang.String Resource %s is rejected on the target host, and will need to be ignored on the host
WFLYCTL0304 java.lang.String Operation %2$s at %1s is rejected on the target host and will need to be ignored on the host
WFLYCTL0305 javax.xml.stream.XMLStreamException Unless the Host Controller is started with command line option %s and the %s attribute is not set to %s, %s must be declared or the %s and the %s need to be provided.
WFLYCTL0306 java.lang.IllegalStateException read only context
WFLYCTL0307 java.lang.String We are trying to read data from the domain controller, which is currently busy executing another set of operations. This is a temporary situation, please retry
WFLYCTL0309 java.lang.String Legacy extension '%s' is not supported on servers running this version. The extension is only supported for use by hosts running a previous release in a mixed-version managed domain
WFLYCTL0310 org.jboss.as.controller._private.OperationFailedRuntimeException Extension module %s not found
WFLYCTL0311 java.lang.RuntimeException Failed to load Extension module %s
WFLYCTL0312 java.lang.IllegalStateException no context to delegate with id: %s
WFLYCTL0313 org.jboss.as.controller.UnauthorizedException Unauthorized to execute operation '%s' for resource '%s' -- %s
WFLYCTL0314 java.lang.SecurityException Users with multiple roles are not allowed
WFLYCTL0317 java.lang.IllegalStateException There is no handler called '%s'
WFLYCTL0318 org.jboss.as.controller.OperationFailedException The operation context is not an AbstractOperationContext
WFLYCTL0319 java.lang.IllegalStateException The handler is referenced by %s and so cannot be removed
WFLYCTL0320 java.lang.IllegalStateException The resolved file %s either does not exist or is a directory
WFLYCTL0321 java.lang.IllegalStateException Could not back up '%s' to '%s'
WFLYCTL0322 java.lang.IllegalStateException Attempt was made to both remove and add a handler from a composite operation - update the handler instead
WFLYCTL0323 java.lang.IllegalStateException Attempt was made to both add and remove a handler from a composite operation
WFLYCTL0324 java.lang.IllegalStateException Attempt was made to both update and remove a handler from a composite operation
WFLYCTL0325 java.lang.IllegalStateException Attempt was made to both remove and add a handler reference from a composite operation
WFLYCTL0327 org.jboss.as.controller.access.rbac.UnknowRoleException Unknown role '%s'
WFLYCTL0328 java.lang.IllegalStateException Cannot remove standard role '%s'
WFLYCTL0329 java.lang.IllegalArgumentException Unknown base role '%s'
WFLYCTL0330 java.lang.IllegalStateException Role '%s' is already registered
WFLYCTL0331 java.lang.IllegalStateException Can only create child audit logger for main audit logger
WFLYCTL0332 java.lang.String Permission denied
WFLYCTL0333 java.lang.SecurityException Cannot add a Permission to a readonly PermissionCollection
WFLYCTL0334 java.lang.IllegalArgumentException Incompatible permission type %s
WFLYCTL0335 java.lang.String Management resource '%s' not found
WFLYCTL0336 java.lang.String The following attributes are nillable in the current model but must be defined in the target model version: %s
WFLYCTL0337 java.io.IOException Unsupported Identity type '%X' received.
WFLYCTL0338 java.io.IOException Unsupported Identity parameter '%X' received parsing identity type '%X'.
WFLYCTL0339 java.lang.String The following attributes must be defined as %s in the current model: %s
WFLYCTL0340 java.lang.String The following attributes must NOT be defined as %s in the current model: %s
WFLYCTL0341 org.jboss.as.controller.OperationFailedException A uri with bad syntax '%s' was passed for validation.
WFLYCTL0342 org.jboss.as.controller.OperationFailedException Illegal value %d for operation header %s; value must be greater than zero
WFLYCTL0343 java.lang.String The service container has been destabilized by a previous operation and further runtime updates cannot be processed. Restart is required.
WFLYCTL0344 java.lang.String Operation timed out awaiting service container stability
WFLYCTL0345 java.lang.IllegalStateException Timeout after %d seconds waiting for existing service %s to be removed so a new instance can be installed.
WFLYCTL0346 ERROR Invalid value %s for property %s; must be a numeric value greater than zero. Default value of %d will be used.
WFLYCTL0347 DEBUG Timeout after [%d] seconds waiting for initial service container stability before allowing runtime changes for operation '%s' at address '%s'. Operation will roll back; process restart is required.
WFLYCTL0348 ERROR Timeout after [%d] seconds waiting for service container stability. Operation will roll back. Step that first updated the service container was '%s' at address '%s'
WFLYCTL0349 ERROR Timeout after [%d] seconds waiting for service container stability while finalizing an operation. Process must be restarted. Step that first updated the service container was '%s' at address '%s'
WFLYCTL0350 INFO Execution of operation '%s' on remote process at address '%s' interrupted while awaiting initial response; remote process has been notified to cancel operation
WFLYCTL0351 INFO Execution of operation '%s' on remote process at address '%s' interrupted while awaiting final response; remote process has been notified to terminate operation
WFLYCTL0352 INFO Cancelling operation '%s' with id '%d' running on thread '%s'
WFLYCTL0353 java.io.IOException No response handler for request %s
WFLYCTL0354 INFO Attempting reconnect to syslog handler '%s; after timeout of %d seconds
WFLYCTL0355 INFO Reconnecting to syslog handler '%s failed
WFLYCTL0356 WARN Failed to emit notification %s
WFLYCTL0357 java.lang.String Notification of type %s is not described for the resource at the address %s
WFLYCTL0358 java.lang.String The resource was added at the address %s.
WFLYCTL0359 java.lang.String The resource was removed at the address %s.
WFLYCTL0360 java.lang.String The attribute %s value has been changed from %s to %s.
WFLYCTL0361 java.lang.IllegalStateException Capabilities cannot be queried in stage '%s'; they are not available until stage '%s'.
WFLYCTL0362 java.lang.String Capabilities required by resource '%s' are not available:
WFLYCTL0363 java.lang.IllegalStateException Capability '%s' is already registered in context '%s'.
WFLYCTL0364 java.lang.IllegalStateException Capability '%s' is unknown.
WFLYCTL0365 java.lang.IllegalStateException Capability '%s' is unknown in context '%s'.
WFLYCTL0366 java.lang.IllegalArgumentException Capability '%s' does not expose a runtime API.
WFLYCTL0367 java.lang.String Cannot remove capability '%s' as it is required by other capabilities:
WFLYCTL0368 java.lang.String Cannot remove capability '%s' from context '%s' as it is required by other capabilities:
WFLYCTL0369 java.lang.String Required capabilities are not available:
WFLYCTL0370 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Incomplete expression: %s
WFLYCTL0371 javax.xml.stream.XMLStreamException The element '%s' is no longer supported, please use '%s' instead
WFLYCTL0372 java.lang.String List attribute '%s' contains duplicates, which are not allowed
WFLYCTL0373 java.lang.IllegalArgumentException Deployment resource must be runtime only
WFLYCTL0374 org.jboss.as.controller.OperationFailedException Unable to resolve expressions at this location.
WFLYCTL0375 WARN Update of the management operation audit log failed on the handler '%s' due to '%s'. Please make sure that the syslog server is running and reachable
WFLYCTL0376 javax.xml.stream.XMLStreamException Unexpected attribute '%s' encountered. Valid attributes are: '%s'
WFLYCTL0377 javax.xml.stream.XMLStreamException Unexpected element '%s' encountered. Valid elements are: '%s'
WFLYCTL0378 org.jboss.as.controller.OperationFailedException Attribute '%s' is not of type '%s', it is type '%s'
WFLYCTL0379 java.lang.String System boot is in process; execution of remote management operations is not currently available
WFLYCTL0380 org.jboss.as.controller.OperationFailedException Attribute '%s' needs to be set or passed before attribute '%s' can be correctly set
WFLYCTL0381 java.lang.IllegalArgumentException Illegal permission name '%s'
WFLYCTL0382 java.lang.IllegalArgumentException Illegal permission actions '%s'
WFLYCTL0383 java.lang.String No operation is defined %s
WFLYCTL0385 java.lang.IllegalStateException An attempt was made to register the non-host capable subsystem '%s' from extension module '%s' in the host model.
WFLYCTL0386 org.jboss.as.controller.OperationFailedException The host controller info can only be accessed after the model stage on boot
WFLYCTL0387 java.lang.IllegalArgumentException Illegal path address '%s' , it is not in a correct CLI format
WFLYCTL0388 java.lang.IllegalStateException Could not create empty configuration file %s
WFLYCTL0389 java.lang.IllegalStateException Could not create an empty configuration at file %s as there is an existing non-empty configuration there
WFLYCTL0391 org.jboss.as.controller.OperationFailedException Could not resolve attribute expression: '%s', invalid index '%d'
WFLYCTL0392 org.jboss.as.controller.OperationFailedException Could not resolve attribute expression: '%s', type is not a list
WFLYCTL0393 org.jboss.as.controller.OperationFailedException Could not resolve attribute expression: '%s'
WFLYCTL0394 java.lang.IllegalArgumentException Capability '%s' does not provide services of type '%s'
WFLYCTL0395 INFO Operation %s against the resource at address %s is deprecated, and it might be removed in future version. See the the output of the read-operation-description operation to learn more about the deprecation.
WFLYCTL0396 java.lang.String Resource %s is discarded on the target host %s
WFLYCTL0397 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYCTL0398 org.jboss.as.controller._private.OperationFailedRuntimeException An attempt was made to rename the resource found at %s to %s. However, '%s' is one of the resource types defined to be ordered on the parent resource %s
WFLYCTL0399 java.lang.String The capability '%s' required by capability '%s' in context '%s' is available in one or more socket binding groups, but not all socket binding capabilities required by '%s' can be resolved from a single socket binding group, so this configuration is invalid
WFLYCTL0400 ERROR Capability '%s' in context '%s' associated with resource '%s' requires capability '%s'. It is available in one or more socket binding groups, but not all socket binding capabilities required by '%s' can be resolved from a single socket binding group, so this configuration is invalid
WFLYCTL0401 java.lang.RuntimeException Couldn't build the report
WFLYCTL0402 ERROR Subsystems %s provided by legacy extension '%s' are not supported on servers running this version. Both the subsystem and the extension must be removed or migrated before the server will function.
WFLYCTL0403 ERROR Unexpected failure during execution of the following operation(s): %s
WFLYCTL0404 java.lang.String Unexpected exception during execution: %s
WFLYCTL0405 WARN Couldn't find a transformer to %s, falling back to %s
WFLYCTL0406 org.jboss.as.controller.OperationFailedException Could not convert the attribute '%s' to a %s
WFLYCTL0407 ERROR Failed sending completed response %s for %d
WFLYCTL0408 ERROR Failed sending failure response %s for %d
WFLYCTL0409 java.lang.String Execution of operation '%s' on remote process at address '%s' timed out after %d ms while awaiting initial response; remote process has been notified to terminate operation
WFLYCTL0410 INFO Execution of operation '%s' on remote process at address '%s' timed out after %d ms while awaiting final response; remote process has been notified to terminate operation
WFLYCTL0411 WARN Failed to parse element '%s', ignoring ...
WFLYCTL0412 java.lang.String Required services that are not installed:
WFLYCTL0413 org.jboss.as.controller.OperationFailedException The deprecated parameter %s has been set in addition to the current parameter %s but with different values
WFLYCTL0414 WARN Could not create a timestamped backup of current history dir %s, so it may still include versions from the previous boot.
WFLYCTL0415 java.lang.String Modification of the runtime service container by a management operation has begun
WFLYCTL0416 java.lang.String Modification of the runtime service container by a management operation has completed
WFLYCTL0417 org.jboss.as.controller.OperationFailedException Cannot add more than one jvm. Add of '%s' attempted, but '%s' already exists
WFLYCTL0418 org.jboss.as.controller._private.OperationFailedRuntimeException A %s or a %s %s already declared has already been declared in %s %s
WFLYCTL0419 java.lang.String '%s' is an invalid value for parameter %s. Values must have a maximum length of %d bytes
WFLYCTL0420 java.lang.String '%s' is an invalid value for parameter %s. Values must have a minimum length of %d bytes
WFLYCTL0421 java.lang.String Exploded deployment is not supported by some servers
WFLYCTL0422 java.lang.RuntimeException Could not load module '%s' for transformers
WFLYCTL0423 java.io.IOException Masked password command has the wrong format.%nUsage: MASK-;; where =UTF-8 characters, =reasonable sized positive integer
WFLYCTL0433 org.jboss.as.controller.OperationFailedException '%s' is not a valid representation of a resource address
WFLYCTL0434 java.lang.String Boot complete
WFLYCTL0435 java.lang.RuntimeException Attribute %s of resource %s was not marked as reload required, either set the RESTART_ALL_SERVICES flag, or register a custom write handler.
WFLYCTL0436 org.jboss.as.controller._private.OperationFailedRuntimeException Cannot register capability '%s' at location '%s' as it is already registered in context '%s' at location(s) '%s'
WFLYCTL0437 javax.xml.stream.XMLStreamException Duplicate extension: an %s element with %s attribute value '%s' has already been parsed
WFLYCTL0438 java.lang.String Couldn't convert '%s' into proper warning level, threshold falling back to 'ALL'. Possible values: SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST,ALL,OFF
WFLYCTL0439 org.jboss.as.controller.OperationFailedException Value %s for attribute %s is not a valid subnet format
WFLYCTL0440 WARN Cannot delete file or directory %s
WFLYCTL0441 java.lang.String Operation has resulted in failed or missing services %n
WFLYCTL0442 WARN Error stopping server
WFLYCTL0443 WARN Error getting the password from the supplier %s
WFLYCTL0444 INFO The handler for operation '%s' at address '%s' attempted to add a stage %s step. This is not valid for a 'profile' resource on process type %s so this step will not be executed.
WFLYCTL0445 org.jboss.as.controller.OperationFailedException %s with value '%s' in attribute %s is already defined
WFLYCTL0446 org.jboss.as.controller.OperationFailedException %s or alternative(s) %s is required
WFLYCTL0447 WARN Attribute '%s' in the resource at address '%s' has been configured with an expression, but support for use of expressions in this attribute's value may be removed in a future version. This attribute configures whether a capability that can be required by other parts of the configuration is present or itself configures a requirement for a capability provided by another part of the configuration. Full support for this kind of configuration cannot be provided when an expression is used.
WFLYCTL0448 java.lang.String %s additional services are down due to their dependencies being missing or failed
WFLYCTL0449 java.lang.String Operation %s against the resource at address %s is deprecated, and it might be removed in future version. See the the output of the read-operation-description operation to learn more about the deprecation.
WFLYCTL0450 java.lang.RuntimeException Failed to clone the repository %s
WFLYCTL0451 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to publish configuration to %s because of %s
WFLYCTL0452 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to persist configuration to %s because of %s
WFLYCTL0453 ERROR Failed to delete configuration snapshot %s
WFLYCTL0454 ERROR Failed to list configuration snapshots %s
WFLYCTL0455 org.jboss.as.controller.persistence.ConfigurationPersistenceException Can't take snapshot %s because it already exists
WFLYCTL0456 WARN System property "%s" is already set in the section of the configuration file. The value set in the command line will be overridden by that value.
WFLYCTL0457 org.jboss.as.controller.OperationFailedException Invalid HTTP Header name '%s'
WFLYCTL0458 org.jboss.as.controller.OperationFailedException Disallowed HTTP Header name '%s'
WFLYCTL0459 ERROR Triggering roll back due to missing management services.
WFLYCTL0460 java.lang.IllegalStateException The system property '%s' can only be used with a standalone or embedded server
WFLYCTL0461 java.lang.IllegalStateException The system property '%s' can only be used with an admin-only server
WFLYCTL0462 java.lang.IllegalStateException Could not find the directory '%s' specified by the system property '%s'. Please make sure it exists
WFLYCTL0463 java.lang.IllegalStateException More than one instance of AdditionalBootCliScriptInvoker found. Have: '%s'; found: '%s
WFLYCTL0464 java.lang.IllegalStateException If using %s=true, when you use -D%s you need to set -D%s
WFLYCTL0465 INFO Initialised the additional boot CLI script functionality. The CLI commands will be read from %s. The server will remain running in admin-only mode after these have been executed, and the result of the cli operations will be written to %s
WFLYCTL0466 INFO Initialised the additional boot CLI script functionality. The CLI commands will be read from %s. The server will be rebooted to normal mode after these have been executed
WFLYCTL0467 INFO Running the additional commands from the CLI script %s against the server which is running in admin-only mode
WFLYCTL0468 INFO Completed running the commands from the CLI script
WFLYCTL0469 INFO Restarting the server since the additional commands from the CLI script requires a restart. This will record that the restart has been initiated in the marker file %s since the restart mechanism will preserve all properties pertaining to the additional boot CLI script functionality (%s, %s, %s). The restart maintains the admin-only running mode, so a subsequent reload will happen
WFLYCTL0470 INFO Reloading the server to normal mode after execution of the additional commands from the CLI script. This will clear the properties triggering the additional boot cli script functionality if they were set (%s, %s, %s), and delete the marker file indicating the server was restarted
WFLYCTL0471 INFO Reloading the server to normal mode after restart follwoing execution of the additional commands from the CLI script. This will clear the properties triggering the additional boot cli script functionality if they were set (%s, %s, %s)
WFLYCTL0472 INFO Checking for presence of marker file indicating that the server has been restarted following execution of the additional commands from the CLI script
WFLYCTL0473 INFO Marker file indicating that the server has been restarted following execution of the additional commands from the CLI script found at %s
WFLYCTL0474 INFO No marker file found indicating that the server has been restarted following execution of the additional commands from the CLI script
WFLYCTL0475 org.jboss.as.controller.OperationFailedException Value for attribute '%s' is invalid.
WFLYCTL0476 org.jboss.as.controller.OperationFailedException Value for attribute '%s' is invalid: either '%s' must be specified on its own or '%s' needs to be specified with at least one of '%s' or '%s'
WFLYCTL0477 java.lang.IllegalArgumentException Parameter name '%s' is invalid.
WFLYCTL0478 org.jboss.as.controller.OperationFailedException Unable to create command based CredentialSource for credential reference.
WFLYCTL0479 java.lang.String Attribute '%s' at resource '%s' with unresolved value '%s' cannot be resolved using the non-security-sensitive sources resolution supported by the 'resolve' parameter. Response will report the unresolved value.
WFLYCTL0480 java.lang.String Expression '%s' cannot be resolved using the non-security-sensitive sources resolution supported by the '%s' operation. Response will report the unresolved value.
WFLYCTL0481 WARN The runtime dependency package '%s' is already registered at location '%s'
WFLYCTL0482 org.jboss.as.controller.OperationFailedException Value '%s' is not a legal charset name
WFLYCTL0483 org.jboss.as.controller.OperationFailedException Charset '%s' is not supported in this instance of the Java Virtual Machine
WFLYCTL0484 java.lang.IllegalArgumentException Attribute definition of attribute '%s' is null
WFLYCTL0485 java.lang.IllegalArgumentException Error parsing yaml file %s
WFLYCTL0486 java.lang.IllegalArgumentException Missing yaml file %s
WFLYCTL0487 DEBUG It took %s ms to load and parse the yaml files
WFLYCTL0488 WARN No registration found for address %s - Ignoring the subtree
WFLYCTL0489 java.lang.IllegalArgumentException Can't undefine attribute %s since there is no resource at %s
WFLYCTL0490 WARN You have defined a resource for address %s without any attributes, doing nothing
WFLYCTL0491 WARN We have an unexpected value %s for address %s and name %s
WFLYCTL0492 WARN Couldn't find a resource registration for address %s with current registration %s
WFLYCTL0493 java.lang.UnsupportedOperationException The attribute %s hasn't a valueType properly defined.
WFLYCTL0494 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionServerException Resolution of extension expression '%s' is not allowed at this point.
WFLYCTL0495 INFO "fetch-from-master" is a deprecated value for "domain-controller.remote.admin-only-policy", "fetch-from-domain-controller" will be used instead.
WFLYCTL0496 WARN Thread dump: ******************************************************************************* {0} =============================================================================== End Thread dump *******************************************************************************
WFLYCTL0497 WARN Deadlock detected! ******************************************************************************* {0} =============================================================================== End Deadlock *******************************************************************************
WFLYCTL0498 WARN Exception thrown during generation of thread dump
WFLYCTL0499 java.lang.IllegalStateException There is no satisfactory capability '%s' available to resources with capability scope '%s'. This capability is registered at address(es) '%s', and are not accessible to resources with scope '%s'.
WFLYCTL0500 WARN There is no UUID string at '%s'. A new value will be generated.
WFLYCTL0501 WARN An invalid UUID string '%s' was found at '%s'. A new value will be generated.
WFLYCTL0502 java.lang.IllegalArgumentException No child resource called %s could be found at address %s'.
WFLYCTL0503 org.jboss.as.controller.persistence.ConfigurationPersistenceException Failed to publish configuration, because the remote name %s is not valid.

WFLYDC

Code Level Return Type Message
WFLYDC0001 WARN Ignoring 'include' child of 'socket-binding-group' %s
WFLYDC0002 WARN Ignoring 'include' child of 'profile' %s
WFLYDC0003 INFO Interrupted awaiting final response from server %s on host %s; remote process has been notified to cancel operation
WFLYDC0004 WARN Caught exception awaiting final response from server %s on host %s
WFLYDC0005 INFO Interrupted awaiting final response from host %s; remote process has been notified to cancel operation
WFLYDC0006 WARN Caught exception awaiting final response from host %s
WFLYDC0007 WARN Caught exception closing input stream
WFLYDC0008 INFO Domain model has changed on re-connect. The following servers will need to be restarted for changes to take affect: %s
WFLYDC0009 ERROR %s caught %s waiting for task %s. Cancelling task
WFLYDC0011 ERROR No deployment content with hash %s is available in the deployment content repository for deployment %s. Because this Host Controller is booting in ADMIN-ONLY mode, boot will be allowed to proceed to provide administrators an opportunity to correct this problem. If this Host Controller were not in ADMIN-ONLY mode this would be a fatal boot failure.
WFLYDC0012 WARN failed to set server (%s) into a restart required state
WFLYDC0013 java.lang.String Registration of remote hosts is not supported on secondary host controllers
WFLYDC0014 java.lang.String The primary host controller cannot register secondary host controllers as its current running mode is '%s'
WFLYDC0015 java.lang.String There is already a registered host named '%s'
WFLYDC0016 java.lang.String %s is missing %s: %s
WFLYDC0017 java.lang.String %s recognizes only %s as children: %s
WFLYDC0018 java.lang.String in-series is missing groups: %s
WFLYDC0019 java.lang.String server-group expects one and only one child: %s
WFLYDC0020 java.lang.String One of the groups does not define neither server-group nor concurrent-groups: %s
WFLYDC0021 java.lang.String Unexplained failure
WFLYDC0022 java.lang.String Operation failed or was rolled back on all servers.
WFLYDC0023 java.lang.String Interrupted waiting for result from server %s
WFLYDC0024 java.lang.String Exception getting result from server %s: %s
WFLYDC0025 java.lang.String Invalid rollout plan. %s is not a valid child of node %s
WFLYDC0026 java.lang.String Invalid rollout plan. Plan operations affect server groups %s that are not reflected in the rollout plan
WFLYDC0027 java.lang.String Invalid rollout plan. Server group %s appears more than once in the plan.
WFLYDC0028 java.lang.String Invalid rollout plan. Server group %s has a %s value of %s; must be between 0 and 100.
WFLYDC0029 java.lang.String Invalid rollout plan. Server group %s has a %s value of %s; cannot be less than 0.
WFLYDC0030 java.lang.String Interrupted waiting for result from host %s
WFLYDC0032 java.lang.String Operation %s for address %s can only be handled by the Domain Controller; this host is not the Domain Controller
WFLYDC0033 org.jboss.as.controller.OperationFailedException Operation targets host %s but that host is not registered
WFLYDC0034 org.jboss.as.controller.OperationFailedException Caught %s storing deployment content -- %s
WFLYDC0035 java.lang.IllegalStateException Unexpected initial path key %s
WFLYDC0036 java.lang.String Null stream at index %d
WFLYDC0037 java.lang.String Invalid byte stream.
WFLYDC0038 java.lang.String Invalid url stream.
WFLYDC0039 java.lang.String Only 1 piece of content is currently supported (AS7-431)
WFLYDC0040 java.lang.String No deployment content with hash %s is available in the deployment content repository.
WFLYDC0041 java.lang.String A secondary Host Controller cannot accept deployment content uploads
WFLYDC0042 java.lang.String No deployment with name %s found
WFLYDC0043 java.lang.String Cannot remove deployment %s from the domain as it is still used by server groups %s
WFLYDC0044 java.lang.String Invalid '%s' value: %d, the maximum index is %d
WFLYDC0045 java.lang.String %s is not a valid URL -- %s
WFLYDC0046 java.lang.String Error obtaining input stream from URL %s -- %s
WFLYDC0047 java.lang.String Invalid content declaration
WFLYDC0049 java.lang.String Cannot use %s with the same value for parameters %s and %s. Use %s to redeploy the same content or %s to replace content with a new version with the same name.
WFLYDC0050 java.lang.String Deployment %s is already started
WFLYDC0051 java.lang.String Unknown %s %s
WFLYDC0052 java.lang.IllegalStateException Unknown server group %s
WFLYDC0053 java.lang.IllegalStateException Unknown server %s
WFLYDC0054 java.lang.IllegalArgumentException Invalid code %d
WFLYDC0055 java.lang.IllegalStateException Repository does not contain any deployment with hash %s
WFLYDC0056 java.lang.IllegalStateException Expected only one deployment, found %d
WFLYDC0057 org.jboss.as.controller.OperationFailedException No profile called: %s
WFLYDC0058 java.lang.String No deployment content with hash %s is available in the deployment content repository for deployment '%s'. This is a fatal boot error. To correct the problem, either restart with the --admin-only switch set and use the CLI to install the missing content or remove it from the configuration, or remove the deployment from the xml configuraiton file and restart.
WFLYDC0059 org.jboss.as.controller.OperationFailedException Failed to load module '%s'.
WFLYDC0060 java.lang.String Invalid Jakarta Server Faces slot value: '%s'. The host controller is not able to use a Jakarta Server Faces slot value different from its default. This resource will be ignored on that host
WFLYDC0061 java.lang.String Operation '%s' fails because the attributes are not known from the subsytem '%s' model version '%s': %s
WFLYDC0062 org.jboss.as.controller.OperationFailedException No socket-binding-group named: %s
WFLYDC0063 org.jboss.as.controller.OperationFailedException There is already a deployment called %s with the same runtime name %s on server group %s
WFLYDC0064 org.jboss.as.controller.OperationFailedException Cannot remove server-group '%s' since it's still in use by servers %s
WFLYDC0065 org.jboss.as.controller.OperationFailedException Wildcard operations are not supported as part of composite operations
WFLYDC0066 java.lang.String Failed to send message: %s
WFLYDC0067 java.lang.String Failed to send response header: %s
WFLYDC0068 java.lang.String Host registration task got interrupted
WFLYDC0069 java.lang.String Host registration task failed: %s
WFLYDC0070 INFO %s interrupted awaiting server prepared response(s) -- cancelling updates for servers %s
WFLYDC0071 INFO Interrupted awaiting host prepared response(s) -- cancelling updates for hosts %s
WFLYDC0072 org.jboss.as.controller.OperationFailedException Caught IOException reading uploaded deployment content
WFLYDC0073 WARN %s deployment has been re-deployed, its content will not be removed. You will need to restart it.
WFLYDC0074 java.lang.String Operation failed or was rolled back on all servers. Server failures:
WFLYDC0075 org.jboss.as.controller.OperationFailedException Cannot synchronize the model due to missing extensions: %s
WFLYDC0076 javax.xml.stream.XMLStreamException Duplicate included profile '%s'
WFLYDC0077 javax.xml.stream.XMLStreamException Duplicate included socket binding group '%s'
WFLYDC0078 java.lang.String The profile clone operation is not available on the host '%s'. To be able to use it in a domain containing older secondary hosts which do not support the profile clone operation, you need to either: a) Make sure that all older secondary hosts with a model version smaller than 4.0.0 ignore the cloned profile and the profile specified in the 'to-profile' parameter. b) Reload the domain controller into admin-only mode, perform the clone, then reload the domain controller into normal mode again, and check whether the secondary hosts need reloading.
WFLYDC0079 INFO Timed out after %d ms awaiting host prepared response(s) from hosts %s -- cancelling updates for hosts %s
WFLYDC0080 java.lang.String Timed out after %d ms awaiting host prepared response(s) -- remote host %s has been notified to cancel operation
WFLYDC0081 INFO Timed out after %d ms awaiting final response from host %s; remote process has been notified to cancel operation
WFLYDC0082 INFO %s timed out after %d ms awaiting server prepared response(s) -- cancelling updates for servers %s
WFLYDC0083 INFO Timed out after %d ms awaiting final response from server %s on host %s; remote process has been notified to cancel operation
WFLYDC0084 org.jboss.as.controller.OperationFailedException Cannot explode a deployment in a self-contained server
WFLYDC0085 org.jboss.as.controller.OperationFailedException Cannot explode an unmanaged deployment
WFLYDC0086 org.jboss.as.controller.OperationFailedException Cannot explode an already exploded deployment
WFLYDC0087 org.jboss.as.controller.OperationFailedException Cannot explode an already deployed deployment
WFLYDC0088 org.jboss.as.controller.OperationFailedException Cannot add content to a deployment in a self-contained server
WFLYDC0089 org.jboss.as.controller.OperationFailedException Cannot add content to an unmanaged deployment
WFLYDC0090 org.jboss.as.controller.OperationFailedException Cannot add content to an unexploded deployment
WFLYDC0091 org.jboss.as.controller.OperationFailedException Cannot remove content from a deployment in a self-contained server
WFLYDC0092 org.jboss.as.controller.OperationFailedException Cannot remove content from an unmanaged deployment
WFLYDC0093 org.jboss.as.controller.OperationFailedException Cannot remove content from an unexploded deployment
WFLYDC0094 org.jboss.as.controller.OperationFailedException Cannot read content from a deployment in a self-contained server
WFLYDC0095 org.jboss.as.controller.OperationFailedException Cannot read content from an unmanaged deployment
WFLYDC0096 org.jboss.as.controller.OperationFailedException Cannot read content from an unexploded deployment
WFLYDC0097 org.jboss.as.controller.OperationFailedException Cannot explode a subdeployment of an unexploded deployment
WFLYDC0098 org.jboss.as.controller.OperationFailedException The following servers %s are starting; execution of remote management operations is not currently available

WFLYDM

Code Level Return Type Message
WFLYDM0000 java.lang.String Enter the details of the new user to add.
WFLYDM0000 java.lang.String Realm (%s)
WFLYDM0000 java.lang.String Username
WFLYDM0000 java.lang.String Username (%s)
WFLYDM0000 java.lang.String Password
WFLYDM0000 java.lang.String Re-enter Password
WFLYDM0000 java.lang.String About to add user '%s' for realm '%s'
WFLYDM0000 java.lang.String Is this correct
WFLYDM0000 java.lang.String The username '%s' is easy to guess
WFLYDM0000 java.lang.String Are you sure you want to add user '%s' yes/no?
WFLYDM0000 java.lang.String Added user '%s' to file '%s'
WFLYDM0000 java.lang.String Error
WFLYDM0000 java.lang.String yes/no?
WFLYDM0000 java.lang.String What type of user do you wish to add? %n a) Management User (mgmt-users.properties) %n b) Application User (application-users.properties)
WFLYDM0000 java.lang.String What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)
WFLYDM0000 java.lang.String Added user '%s' with groups %s to file '%s'
WFLYDM0000 java.lang.String User '%s' already exists and is enabled, would you like to... %n a) Update the existing user password and roles %n b) Disable the existing user %n c) Type a new username
WFLYDM0000 java.lang.String User '%s' already exists and is disabled, would you like to... %n a) Update the existing user password and roles %n b) Enable the existing user %n c) Type a new username
WFLYDM0000 java.lang.String Updated user '%s' to file '%s'
WFLYDM0000 java.lang.String Updated user '%s' with groups %s to file '%s'
WFLYDM0000 java.lang.String The password must be different from the username
WFLYDM0000 java.lang.String The password should be different from the username
WFLYDM0000 java.lang.String The password must not be one of the following restricted values {%s}
WFLYDM0000 java.lang.String The password should not be one of the following restricted values {%s}
WFLYDM0000 java.lang.String %s characters
WFLYDM0000 java.lang.String %d alphabetic character(s)
WFLYDM0000 java.lang.String %d digit(s)
WFLYDM0000 java.lang.String %s non-alphanumeric symbol(s)
WFLYDM0000 java.lang.String The password must contain at least %s
WFLYDM0000 java.lang.String The password should contain at least %s
WFLYDM0000 java.lang.String Are you sure you want to use the password entered yes/no?
WFLYDM0000 java.lang.String The add-user script is a utility for adding new users to the properties files for out-of-the-box authentication. It can be used to manage users in ManagementRealm and ApplicationRealm.
WFLYDM0000 java.lang.String Usage: ./add-user.sh [args...]%nwhere args include:
WFLYDM0000 java.lang.String If set add an application user instead of a management user
WFLYDM0000 java.lang.String Define the location of the domain config directory.
WFLYDM0000 java.lang.String Define the location of the server config directory.
WFLYDM0000 java.lang.String The file name of the user properties file which can be an absolute path.
WFLYDM0000 java.lang.String The file name of the group properties file which can be an absolute path. (If group properties is specified then user properties MUST also be specified).
WFLYDM0000 java.lang.String Password of the user, this will be checked against the password requirements defined within the add-user.properties configuration
WFLYDM0000 java.lang.String Name of the user
WFLYDM0000 java.lang.String Name of the realm used to secure the management interfaces (default is "ManagementRealm")
WFLYDM0000 java.lang.String Activate the silent mode (no output to the console)
WFLYDM0000 java.lang.String Comma-separated list of roles for the user.
WFLYDM0000 java.lang.String Comma-separated list of groups for the user.
WFLYDM0000 java.lang.String Enable the user
WFLYDM0000 java.lang.String Disable the user
WFLYDM0000 java.lang.String Automatically confirm warning in interactive mode
WFLYDM0000 java.lang.String Display this message and exit
WFLYDM0000 java.lang.String yes
WFLYDM0000 java.lang.String y
WFLYDM0000 java.lang.String no
WFLYDM0000 java.lang.String n
WFLYDM0000 java.lang.String The realm name supplied must match the name used by the server configuration which by default would be '%s'
WFLYDM0000 java.lang.String Are you sure you want to set the realm to '%s'
WFLYDM0000 java.lang.String Password requirements are listed below. To modify these restrictions edit the add-user.properties configuration file.
WFLYDM0000 java.lang.String Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
WFLYDM0000 java.lang.String Using realm '%s' as specified on the command line.
WFLYDM0000 java.lang.String Using realm '%s' as discovered from the existing property files.
WFLYDM0000 java.io.IOException Users properties file '%s' contains multiple realm name declarations
WFLYDM0000 java.lang.IllegalStateException The callback handler is not initialized for domain server %s.
WFLYDM0000 java.lang.IllegalStateException Unable to obtain credential for server %s
WFLYDM0001 WARN Properties file defined with default user and password, this will be easy to guess.
WFLYDM0017 org.jboss.msc.service.StartException Unable to load properties
WFLYDM0020 javax.naming.NamingException User '%s' not found in directory.
WFLYDM0021 java.lang.IllegalStateException No java.io.Console available to interact with user.
WFLYDM0023 java.lang.String No %s files found.
WFLYDM0024 java.lang.String No Username entered, exiting.
WFLYDM0025 java.lang.String No Password entered, exiting.
WFLYDM0026 java.lang.String The passwords do not match.
WFLYDM0028 java.lang.String Username must be alphanumeric with the exception of the following accepted symbols (%s)
WFLYDM0029 java.lang.String Invalid response. (Valid responses are %s and %s)
WFLYDM0030 java.lang.String Unable to add user to %s due to error %s
WFLYDM0031 java.lang.String Unable to add load users from %s due to error %s
WFLYDM0033 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple username/password based authentication mechanisms (%s). Only one is allowed
WFLYDM0034 org.jboss.as.controller.OperationFailedException One of '%s' or '%s' required.
WFLYDM0035 org.jboss.as.controller.OperationFailedException Only one of '%s' or '%s' is required.
WFLYDM0037 java.lang.String No security context has been established.
WFLYDM0039 java.lang.String Invalid response. (Valid responses are A, a, B, or b)
WFLYDM0040 java.lang.String Unable to update user to %s due to error %s
WFLYDM0041 java.io.IOException The user '%s' is not allowed in a local authentication.
WFLYDM0042 org.jboss.msc.service.StartException Multiple CallbackHandlerServices for the same mechanism (%s)
WFLYDM0043 java.lang.IllegalStateException No CallbackHandler available for mechanism %s in realm %s
WFLYDM0044 java.lang.IllegalArgumentException No plug in providers found for module name %s
WFLYDM0045 java.lang.IllegalArgumentException Unable to load plug-in for module %s due to error (%s)
WFLYDM0046 java.lang.IllegalArgumentException No authentication plug-in found for name %s
WFLYDM0047 java.lang.IllegalStateException Unable to initialise plug-in %s due to error %s
WFLYDM0048 java.lang.String Password is not strong enough, it is '%s'. It should be at least '%s'.
WFLYDM0049 org.jboss.as.domain.management.security.password.PasswordValidationException Password must not be equal to '%s', this value is restricted.
WFLYDM0050 java.lang.String Password must have at least %d digit.
WFLYDM0051 java.lang.String Password must have at least %s non-alphanumeric symbol.
WFLYDM0052 java.lang.String Password must have at least %d alphanumeric character.
WFLYDM0053 org.jboss.as.domain.management.security.password.PasswordValidationException Password must have at least %s characters!
WFLYDM0054 java.lang.IllegalStateException Unable to load key trust file.
WFLYDM0055 java.lang.IllegalStateException Unable to operate on trust store.
WFLYDM0056 java.lang.IllegalStateException Unable to create delegate trust manager.
WFLYDM0057 javax.xml.stream.XMLStreamException The syslog-handler can only contain one protocol %s
WFLYDM0058 java.lang.IllegalStateException There is no handler called '%s'
WFLYDM0059 org.jboss.as.controller.OperationFailedException There is already a protocol configured for the syslog handler at %s
WFLYDM0060 org.jboss.as.controller.OperationFailedException No syslog protocol was given
WFLYDM0061 org.jboss.as.controller.OperationFailedException There is no formatter called '%s'
WFLYDM0062 org.jboss.as.controller.OperationFailedException Can not remove formatter, it is still referenced by the handler '%s'
WFLYDM0063 org.jboss.as.controller.OperationFailedException Handler names must be unique. There is already a handler called '%s' at %s
WFLYDM0064 java.lang.String Different realm names detected '%s', '%s' reading user property files, all realms must be equal.
WFLYDM0065 java.lang.String The user supplied realm name '%s' does not match the realm name discovered from the property file(s) '%s'.
WFLYDM0066 java.lang.String A group properties file '%s' has been specified, however no user properties has been specified.
WFLYDM0067 java.lang.String A realm name must be specified.
WFLYDM0068 org.jboss.as.controller.OperationFailedException The current operation(s) would result in role based access control being enabled but leave it impossible for authenticated users to be assigned roles.
WFLYDM0069 org.jboss.as.controller.OperationFailedException The runtime role mapping configuration is inconsistent, the server must be restarted.
WFLYDM0070 java.lang.String Invalid response. (Valid responses are A, a, B, b, C or c)
WFLYDM0071 org.jboss.as.controller.OperationFailedException Role '%s' already contains an %s for type=%s, name=%s, realm=%s.
WFLYDM0072 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple authorization configurations (%s). Only one is allowed
WFLYDM0073 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple username-to-dn resources within the authorization=ldap resource (%s). Only one is allowed
WFLYDM0074 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' does not contain any group-search resource within the authorization=ldap resource.
WFLYDM0075 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple group-search resources within the authorization=ldap resource (%s). Only one is allowed
WFLYDM0076 org.jboss.as.controller.OperationFailedException The role name '%s' is not a valid standard role.
WFLYDM0077 org.jboss.as.controller.OperationFailedException The role name '%s' is not a valid standard role and is not a host scoped role or a server group scoped role.
WFLYDM0078 org.jboss.as.controller.OperationFailedException The scoped role '%s' can not be removed as a role mapping still exists.
WFLYDM0079 org.jboss.as.controller.OperationFailedException A %s already exists with name '%s'
WFLYDM0080 org.jboss.as.controller.OperationFailedException The name '%s' conflicts with the standard role name of '%s' - comparison is case insensitive.
WFLYDM0081 org.jboss.as.controller.OperationFailedException The base-role '%s' is not one of the standard roles for the current authorization provider.
WFLYDM0082 org.jboss.as.domain.management.security.password.PasswordValidationException The password must be different from the username
WFLYDM0083 org.jboss.msc.service.StartException The KeyStore %s does not contain any keys.
WFLYDM0084 org.jboss.msc.service.StartException The alias specified '%s' is not a Key, valid aliases are %s
WFLYDM0085 org.jboss.msc.service.StartException The alias specified '%s' does not exist in the KeyStore, valid aliases are %s
WFLYDM0086 org.jboss.msc.service.StartException The KeyStore can not be found at %s
WFLYDM0087 org.jboss.as.controller.OperationFailedException Configuration for security realm '%s' includes multiple cache definitions at the same position in the hierarchy. Only one is allowed
WFLYDM0088 javax.naming.NamingException Unable to load username for supplied username '%s'
WFLYDM0089 org.jboss.as.controller.OperationFailedException No operation was found that has been holding the operation execution write lock for long than [%d] seconds
WFLYDM0090 org.jboss.msc.service.StartException Invalid Keytab path
WFLYDM0091 java.lang.IllegalStateException logout has already been called on this SubjectIdentity.
WFLYDM0092 org.jboss.as.controller.OperationFailedException Unable to obtain Kerberos TGT
WFLYDM0093 ERROR Login failed using Keytab for principal '%s' to handle request for host '%s'
WFLYDM0094 org.jboss.as.controller.OperationFailedException Kerberos is enabled for authentication on security realm '%s' but no Keytab has been added to the server-identity.
WFLYDM0095 org.jboss.msc.service.StartException No cipher suites in common, supported=(%s), requested=(%s)
WFLYDM0096 org.jboss.msc.service.StartException No protocols in common, supported=(%s), requested=(%s)
WFLYDM0097 org.jboss.as.domain.management.security.password.PasswordValidationException Password should not be equal to '%s', this value is restricted.
WFLYDM0098 org.jboss.as.domain.management.security.password.PasswordValidationException The password should be different from the username
WFLYDM0099 org.jboss.as.domain.management.security.password.PasswordValidationException Password should have at least %s characters!
WFLYDM0100 java.lang.String Password should have at least %d alphanumeric character.
WFLYDM0101 java.lang.String Password should have at least %d digit.
WFLYDM0102 java.lang.String Password should have at least %s non-alphanumeric symbol.
WFLYDM0103 org.jboss.as.controller.OperationFailedException Invalid size %s
WFLYDM0104 org.jboss.as.controller.OperationFailedException The suffix (%s) can not contain seconds or milliseconds.
WFLYDM0105 org.jboss.as.controller.OperationFailedException The suffix (%s) is invalid. A suffix must be a valid date format.
WFLYDM0106 java.lang.String File permissions problems found while attempting to update %s file.
WFLYDM0107 org.jboss.as.controller.OperationFailedException Operation '%s' has been holding the operation execution write lock for longer than [%d] seconds, but it is part of the rollout of a domain-wide operation with domain-uuid '%s' that has other operations that are alsonot progressing. Their ids are: %s. Cancellation of the operation on the domain controller is recommended.
WFLYDM0108 java.lang.IllegalStateException Unsupported resource '%s'
WFLYDM0109 org.jboss.msc.service.StartException The Keytab file '%s' does not exist.
WFLYDM0110 javax.naming.NamingException Unable to load a simple name for group '%s'
WFLYDM0111 WARN Keystore %s not found, it will be auto-generated on first use with a self-signed certificate for host %s
WFLYDM0112 java.lang.RuntimeException Failed to generate self-signed certificate
WFLYDM0113 WARN Generated self-signed certificate at %s. Please note that self-signed certificates are not secure, and should only be used for testing purposes. Do not use this self-signed certificate in production.%nSHA-1 fingerprint of the generated key is %s%nSHA-256 fingerprint of the generated key is %s
WFLYDM0114 java.lang.RuntimeException Failed to lazily initialize SSL context
WFLYDM0135 java.lang.String The resource %s wasn't working properly and has been removed.
WFLYDM0139 java.security.GeneralSecurityException No SubjectIdentity found for %s/%s.
WFLYDM0140 org.jboss.msc.service.StartException You shouldn't use the system property "%s" as it is deprecated. Use the management model configuration instead.
WFLYDM0142 org.jboss.msc.service.StartException Following mechanisms configured on the server (%s) are not supported by the realm '%s'.
WFLYDM0143 java.lang.IllegalStateException Invalid sensitive classification attribute '%s'
WFLYDM0144 org.jboss.as.controller.OperationFailedException Sensitivity constraint %s contains imcompatible attribute value to other sensitive classification constraints.
WFLYDM0145 javax.xml.stream.XMLStreamException Security realms are no longer supported, please remove them from the configuration.
WFLYDM0146 javax.xml.stream.XMLStreamException Outbound connections are no longer supported, please remove them from the configuration.

WFLYDMHTTP

Code Level Return Type Message
WFLYDMHTTP0001 ERROR Unexpected error executing model request
WFLYDMHTTP0002 ERROR Unexpected error executing deployment upload request
WFLYDMHTTP0003 WARN Unable to load console module for slot %s, disabling console
WFLYDMHTTP0004 ERROR Unable to load error context for slot %s, disabling error context.
WFLYDMHTTP0005 java.lang.IllegalArgumentException Invalid operation '%s'
WFLYDMHTTP0006 java.lang.String The security realm is not ready to process requests, see %s
WFLYDMHTTP0007 org.jboss.modules.ModuleNotFoundException No console module available with module name %s
WFLYDMHTTP0010 java.lang.IllegalArgumentException Invalid Credential Type '%s'
WFLYDMHTTP0011 INFO Management interface is using different addresses for HTTP (%s) and HTTPS (%s). Redirection of HTTPS requests from HTTP socket to HTTPS socket will not be supported.
WFLYDMHTTP0012 java.lang.IllegalArgumentException A secure socket has been defined for the HTTP interface, however the referenced security realm is not supplying a SSLContext.
WFLYDMHTTP0013 java.lang.String Invalid useStreamIndex value '%d'. The operation response had %d streams attached.
WFLYDMHTTP0014 java.lang.IllegalStateException The ManagementHttpServer has already been built using this Builder.
WFLYDMHTTP0015 java.lang.IllegalStateException No SecurityRealm or SSLContext has been provided.
WFLYDMHTTP0016 java.lang.String Your Application Server is running. However you have not yet added any users to be able to access the HTTP management interface. To add a new user execute the %s script within the bin folder of your WildFly installation and enter the requested information. By default the realm name used by WildFly is 'ManagementRealm' and this is already selected by default by the add-user tool.

WFLYDR

Code Level Return Type Message
WFLYDR0001 INFO Content added at location %s
WFLYDR0002 INFO Content removed from location %s
WFLYDR0003 WARN Cannot delete temp file %s, will be deleted on exit
WFLYDR0004 java.lang.IllegalStateException Cannot create directory %s
WFLYDR0005 java.lang.IllegalStateException Cannot obtain SHA-1 %s
WFLYDR0006 java.lang.IllegalStateException Directory %s is not writable
WFLYDR0007 java.lang.IllegalStateException %s is not a directory
WFLYDR0009 INFO Content %s is obsolete and will be removed
WFLYDR0010 ERROR Couldn't delete content %s
WFLYDR0011 INFO Couldn't list directory files for %s
WFLYDR0012 java.lang.RuntimeException Cannot hash current deployment content %s
WFLYDR0013 java.lang.IllegalArgumentException Access denied to the content at %s in the deployment
WFLYDR0014 ERROR Error deleting deployment %s
WFLYDR0015 java.lang.IllegalStateException %s is not an archive file
WFLYDR0016 org.jboss.as.repository.ExplodedContentException Achive file %s not found
WFLYDR0017 INFO Content exploded at location %s
WFLYDR0018 org.jboss.as.repository.ExplodedContentException Error exploding content for %s
WFLYDR0019 org.jboss.as.repository.ExplodedContentException Deployment is locked by another operation
WFLYDR0020 org.jboss.as.repository.ExplodedContentException Error accessing deployment files
WFLYDR0021 org.jboss.as.repository.ExplodedContentException Error updating content of exploded deployment
WFLYDR0022 org.jboss.as.repository.ExplodedContentException Error copying files of exploded deployment to %s
WFLYDR0023 ERROR Error deleting file %s
WFLYDR0024 ERROR Error copying file %s

WFLYDS

Code Level Return Type Message
WFLYDS0000 java.lang.String A previous version of this content was deployed and remains deployed.
WFLYDS0001 WARN Cannot delete deployment progress marker file %s
WFLYDS0002 WARN Cannot remove extraneous deployment marker file %s
WFLYDS0003 WARN Deployment of '%s' requested, but the deployment is not present
WFLYDS0004 INFO Found %1$s in deployment directory. To trigger deployment create a file called %1$s%2$s
WFLYDS0005 ERROR Caught exception writing deployment marker file %s
WFLYDS0006 WARN Reliable deployment behaviour is not possible when auto-deployment of exploded content is enabled (i.e. deployment without use of "%s"' marker files). Configuration of auto-deployment of exploded content is not recommended in any situation where reliability is desired. Configuring the deployment scanner's %s setting to "false" is recommended.
WFLYDS0007 WARN The deployment scanner found that the content for exploded deployment %1$s has been deleted, but auto-deploy/undeploy for exploded deployments is not enabled and the %1$s%2$s marker file for this deployment has not been removed. As a result, the deployment is not being undeployed, but resources needed by the deployment may have been deleted and application errors may occur. Deleting the %1$s%2$s marker file to trigger undeploy is recommended.
WFLYDS0008 ERROR Failed checking whether %s was a complete zip
WFLYDS0009 ERROR File system deployment service failed
WFLYDS0010 INFO Scan found incompletely copied file content for deployment %s. Deployment changes will not be processed until all content is complete.
WFLYDS0011 ERROR The deployment scanner found a directory named %1$s that was not inside a directory whose name ends with .ear, .jar, .rar, .sar or .war. This is likely the result of unzipping an archive directly inside the %2$s directory, which is a user error. The %1$s directory will not be scanned for deployments, but it is possible that the scanner may find other files from the unzipped archive and attempt to deploy them, leading to errors.
WFLYDS0012 ERROR Scan of %s threw Exception
WFLYDS0013 INFO Started %s for directory %s
WFLYDS0014 WARN Scan found content configured for auto-deploy that could not be safely auto-deployed. See details above. Deployment changes will not be processed until all problematic content is either removed or whether to deploy the content or not is indicated via a %s or %s marker file. Problematic deployments are %s
WFLYDS0015 INFO Re-attempting failed deployment %s
WFLYDS0016 ERROR Failed checking whether %s was a complete XML
WFLYDS0017 ERROR Initial deployment scan failed
WFLYDS0018 INFO Deployment %s was previously deployed by this scanner but has been undeployed by another management tool. Marker file %s is being added to record this fact.
WFLYDS0019 INFO Deployment %s was previously deployed by this scanner but has been removed from the server deployment list by another management tool. Marker file %s is being added to record this fact.
WFLYDS0021 java.lang.String Deployment content %s appears to be incomplete and is not progressing toward completion. This content cannot be auto-deployed.%s
WFLYDS0022 java.lang.String Did not receive a response to the deployment operation within the allowed timeout period [%d seconds]. Check the server configuration file and the server logs to find more about the status of the deployment.
WFLYDS0025 java.lang.String File %s cannot be scanned because it does not begin with a ZIP file format local file header signature
WFLYDS0026 java.lang.String File %s cannot be scanned because it uses the currently unsupported ZIP64 format
WFLYDS0030 java.lang.String File %2$s was configured for auto-deploy but could not be safely auto-deployed. The reason the file could not be auto-deployed was: %1$s. To enable deployment of this file create a file called %2$s%3$s
WFLYDS0031 java.lang.IllegalStateException Extension with module 'org.jboss.as.deployment-scanner' cannot be installed in a managed domain. Please remove it and any subsystem referencing it
WFLYDS0032 java.lang.RuntimeException Failed to list files in directory %s. Check that the contents of the directory are readable.
WFLYDS0033 INFO Deployment %s was previously undeployed by this scanner but has been redeployed by another management tool. Marker file %s is being removed to record this fact.
WFLYDS0034 ERROR Failed synchronizing status of deployment %s.
WFLYDS0035 java.lang.String Scan found %s which is not well-formed at lineNumber: %s, columnNumber: %s. Either the file was incompletely copied at the time of the scanning or it is just wrong.
WFLYDS0036 java.lang.RuntimeException Deployment model operation failed. %s
WFLYDS0037 WARN %s does not exist
WFLYDS0038 WARN %s is not a directory
WFLYDS0039 WARN %s is not writable
WFLYDS0040 org.jboss.as.controller.OperationFailedException Could not find relative-to path entry for %s
WFLYDS0041 WARN %s is not readable
WFLYDS0042 ERROR Boot-time scan failed due to inaccessible deployment directory: %s
WFLYDS0043 WARN Deployment directory scan failed due to inaccessible deployment directory: %s

WFLYEE

Code Level Return Type Message
WFLYEE0002 WARN Could not resolve %s %s
WFLYEE0006 WARN Failed to destroy component instance %s
WFLYEE0007 WARN Not installing optional component %s due to an exception (enable DEBUG log level to see the cause)
WFLYEE0009 WARN [Managed Bean spec, section %s] Managed bean implementation class MUST NOT be an interface - %s is an interface, hence won't be considered as a managed bean.
WFLYEE0010 WARN [Managed Bean spec, section %s] Managed bean implementation class MUST NOT be abstract or final - %s won't be considered as a managed bean, since it doesn't meet that requirement.
WFLYEE0011 WARN Exception while invoking pre-destroy interceptor for component class: %s
WFLYEE0014 WARN %s in subdeployment ignored. jboss-ejb-client.xml is only parsed for top level deployments.
WFLYEE0015 WARN Transaction started in EE Concurrent invocation left open, starting rollback to prevent leak.
WFLYEE0016 WARN Failed to rollback transaction.
WFLYEE0017 WARN Failed to suspend transaction.
WFLYEE0018 WARN System error while checking for transaction leak in EE Concurrent invocation.
WFLYEE0019 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find alternate deployment descriptor %s specified for %s
WFLYEE0020 java.lang.IllegalArgumentException %s annotations must provide a %s.
WFLYEE0021 java.lang.IllegalStateException Cannot add any more items once getSortedItems() has been called
WFLYEE0022 java.lang.RuntimeException %s may not be empty
WFLYEE0023 java.lang.IllegalArgumentException %s cannot be null or empty: %s
WFLYEE0024 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not configure component %s
WFLYEE0025 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type for resource-env-ref %s
WFLYEE0026 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type for %s %s please specify the %s.
WFLYEE0027 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load %s referenced in env-entry
WFLYEE0028 java.lang.RuntimeException Could not load interceptor class %s
WFLYEE0029 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load interceptor class %s on component %s
WFLYEE0030 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load view class %s for component %s
WFLYEE0031 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unable to process modules in application.xml for EAR [%s], module file %s not found
WFLYEE0032 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unable to parse resource-ref URI: %s
WFLYEE0033 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not resolve injection point %s on class %s specified in web.xml
WFLYEE0034 java.lang.RuntimeException Could not resolve method %s on class %s with annotations %s
WFLYEE0036 org.jboss.as.server.deployment.DeploymentUnitProcessingException Cannot specify both a %s and a %s in an environment entry.
WFLYEE0037 java.lang.IllegalArgumentException Circular dependency installing %s
WFLYEE0038 org.jboss.as.server.deployment.DeploymentUnitProcessingException %s annotation is only allowed on a class. %s is not a class.
WFLYEE0040 java.lang.IllegalArgumentException Component '%s' in class '%s' is already defined in class '%s'
WFLYEE0041 org.jboss.as.server.deployment.DeploymentUnitProcessingException Component class %s for component %s has errors: %n%s
WFLYEE0042 java.lang.IllegalStateException Failed to construct component instance
WFLYEE0043 org.jboss.as.ee.component.ComponentIsStoppedException Component is stopped
WFLYEE0044 java.lang.IllegalStateException Component not available (interrupted)
WFLYEE0045 org.jboss.as.server.deployment.DeploymentUnitProcessingException No component found for type '%s'
WFLYEE0046 java.lang.IllegalStateException Failed to instantiate component view
WFLYEE0047 java.lang.IllegalArgumentException Incompatible conflicting binding at %s source: %s
WFLYEE0048 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find default constructor for %s
WFLYEE0050 org.jboss.as.server.deployment.DeploymentUnitProcessingException No default constructor for interceptor class %s on component %s
WFLYEE0051 java.lang.IllegalArgumentException %s elements must provide a %s.
WFLYEE0052 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to install component %s
WFLYEE0053 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse %s
WFLYEE0054 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process children for EAR [%s]
WFLYEE0055 java.lang.String Failed to read %s entries for application [%s]
WFLYEE0056 java.lang.String Failed to read %s entries for module [%s, %s]
WFLYEE0057 java.lang.String Failed to read %s entries for component [%s, %s, %s]
WFLYEE0058 org.jboss.as.server.deployment.DeploymentUnitProcessingException No matching field found for '%s'
WFLYEE0059 java.lang.IllegalStateException No injection target found
WFLYEE0060 org.jboss.as.server.deployment.DeploymentUnitProcessingException %s of type java.lang.Character is not exactly one character long %s
WFLYEE0061 java.lang.RuntimeException %s is not a valid descriptor
WFLYEE0062 org.jboss.as.server.deployment.DeploymentUnitProcessingException Injection target %s on class %s is not compatible with the type of injection: %s
WFLYEE0063 java.lang.String Invalid number of arguments for method %s annotated with %s on class %s
WFLYEE0064 java.lang.IllegalArgumentException A return type of %s is required for method %s annotated with %s on class %s
WFLYEE0065 java.lang.String Invalid signature for method %s annotated with %s on class %s, signature must be '%s'
WFLYEE0066 javax.xml.stream.XMLStreamException Invalid value: %s for '%s' element
WFLYEE0067 java.lang.IllegalStateException Method does not exist %s
WFLYEE0068 org.jboss.as.server.deployment.DeploymentUnitProcessingException No matching method found for method %s (%s) on %s
WFLYEE0069 org.jboss.as.server.deployment.DeploymentUnitProcessingException @%s is only valid on method targets.
WFLYEE0070 org.jboss.as.server.deployment.DeploymentUnitProcessingException Multiple components found for type '%s'
WFLYEE0071 org.jboss.as.server.deployment.DeploymentUnitProcessingException More than one matching method found for method '%s (%s) on %s
WFLYEE0072 org.jboss.as.server.deployment.DeploymentUnitProcessingException Multiple setter methods for %s on class %s found when applying for env-entry
WFLYEE0073 java.lang.IllegalStateException No component instance associated
WFLYEE0074 org.jboss.as.server.deployment.DeploymentUnitProcessingException Binding name must not be null: %s
WFLYEE0075 java.lang.IllegalArgumentException Managed bean class name cannot be null or empty
WFLYEE0076 java.lang.IllegalArgumentException Resource reference type cannot be null or empty
WFLYEE0077 java.lang.IllegalArgumentException Cannot register a null resource reference processor
WFLYEE0078 java.lang.IllegalArgumentException %s is null
WFLYEE0079 java.lang.IllegalArgumentException Can't add %s, priority 0x%s is already taken by %s
WFLYEE0082 java.lang.IllegalStateException Service not started
WFLYEE0083 java.lang.IllegalArgumentException %s injection target is invalid. Only setter methods are allowed: %s
WFLYEE0084 java.lang.RuntimeException Unknown AnnotationTarget type: %s
WFLYEE0085 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unknown %s type %s
WFLYEE0086 java.lang.IllegalArgumentException Could not find method %s %s on view %s of %s
WFLYEE0088 javax.xml.stream.XMLStreamException Unexpected element '%s' encountered
WFLYEE0089 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process jboss-ejb-client.xml
WFLYEE0090 org.jboss.as.server.deployment.DeploymentUnitProcessingException Exception while parsing jboss-ejb-client.xml file found at %s
WFLYEE0091 javax.xml.stream.XMLStreamException %s
WFLYEE0092 java.lang.String No message destination with name %s for binding %s
WFLYEE0093 java.lang.String More than one message destination with name %s for binding %s destinations: %s
WFLYEE0094 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to load jboss.properties
WFLYEE0095 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unsupported ear module type: %s
WFLYEE0096 org.jboss.as.server.deployment.DeploymentUnitProcessingException library-directory of value / is not supported
WFLYEE0097 org.jboss.as.server.deployment.DeploymentUnitProcessingException Module may not be a child of the EAR's library directory. Library directory: %s, module file name: %s
WFLYEE0098 java.lang.RuntimeException ManagedReference was null and injection is not optional for injection into field %s
WFLYEE0100 java.lang.String Global modules may not specify 'annotations', 'meta-inf' or 'services'.
WFLYEE0102 java.lang.IllegalStateException EE Concurrent Service's value uninitialized.
WFLYEE0103 java.io.IOException EE Concurrent ContextHandle serialization must be handled by the factory.
WFLYEE0104 java.lang.IllegalArgumentException The EE Concurrent Context %s already has a factory named %s
WFLYEE0105 java.io.IOException EE Concurrent Context %s does not has a factory named %s
WFLYEE0106 java.io.IOException EE Concurrent Context %s service not installed.
WFLYEE0107 java.lang.IllegalStateException EE Concurrent Transaction Setup Provider service not installed.
WFLYEE0108 java.lang.IllegalStateException Instance data can only be set during construction
WFLYEE0109 org.jboss.as.server.deployment.DeploymentUnitProcessingException A class must not declare more than one AroundInvoke method. %s has %s methods annotated.
WFLYEE0110 ERROR Failed to run scheduled task: %s
WFLYEE0111 java.lang.IllegalStateException Cannot run scheduled task %s as container is suspended
WFLYEE0112 org.jboss.as.controller.OperationFailedException The core-threads value must be greater than 0 when the queue-length is %s
WFLYEE0113 org.jboss.as.controller.OperationFailedException The max-threads value %d cannot be less than the core-threads value %d.
WFLYEE0114 java.lang.IllegalArgumentException Class does not implement all of the provided interfaces
WFLYEE0115 java.lang.IllegalArgumentException The name of the %s is null
WFLYEE0116 java.lang.IllegalArgumentException %s is null in the %s %s
WFLYEE0117 java.lang.IllegalArgumentException Field %s cannot be set - object of %s loaded by %s is not assignable to %s loaded by %s
WFLYEE0120 org.jboss.as.controller.OperationFailedException Failed to locate executor service '%s'
WFLYEE0121 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYEE0122 org.jboss.msc.service.StartException Directory path %s in %s global-directory resource does not point to a valid directory.
WFLYEE0123 org.jboss.as.controller.OperationFailedException Global directory %s cannot be added, because global directory %s is already defined.
WFLYEE0124 WARN Error deleting Jakarta Authorization Policy
WFLYEE0125 org.jboss.msc.service.StartException Unable to start the %s service
WFLYEE0126 java.util.concurrent.RejectedExecutionException Rejected due to maximum number of requests
WFLYEE0127 WARN Invalid '%s' name segment for env, name can't start with '/' prefix, prefix has been removed
WFLYEE0128 WARN Failure when terminating %s hung task %s
WFLYEE0129 INFO %s hung task %s cancelled
WFLYEE0130 INFO %s hung task %s not cancelled
WFLYEE0131 javax.xml.stream.XMLStreamException The attribute %s is no longer supported.
WFLYEE0132 java.lang.RuntimeException ManagedReference was null and injection is not optional for injection into method %s
WFLYEE0133 ERROR A JNDI binding for component '%s' has already been installed under JNDI name '%s' in accordance with Jakarta EE specifications. The conflicting class is %s. Solutions include providing an alternate name for the component or renaming the class.
WFLYEE0134 java.lang.IllegalStateException Multiple uses of ContextServiceDefinition.ALL_REMAINING
WFLYEE0135 WARN Failed to resume transaction.
WFLYEE0136 java.lang.RuntimeException Failed to run scheduled task: %s

WFLYEJB

Code Level Return Type Message
WFLYEJB0004 ERROR failed to get tx manager status; ignoring
WFLYEJB0005 ERROR failed to set rollback only; ignoring
WFLYEJB0006 WARN ActivationConfigProperty %s will be ignored since it is not allowed by resource adapter: %s
WFLYEJB0007 ERROR Discarding stateful component instance: %s due to exception
WFLYEJB0010 WARN Default interceptor class %s is not listed in the section of ejb-jar.xml and will not be applied
WFLYEJB0015 WARN Unknown timezone id: %s found in schedule expression. Ignoring it and using server's timezone: %s
WFLYEJB0016 WARN Timer persistence is not enabled, persistent timers will not survive JVM restarts
WFLYEJB0017 INFO Next expiration is null. No tasks will be scheduled for timer %S
WFLYEJB0018 ERROR Ignoring exception during setRollbackOnly
WFLYEJB0020 ERROR Error invoking timeout for timer: %s
WFLYEJB0021 INFO Timer: %s will be retried
WFLYEJB0022 ERROR Error during retrying timeout for timer: %s
WFLYEJB0023 INFO Retrying timeout for timer: %s
WFLYEJB0024 INFO Timer is not active, skipping retry of timer: %s
WFLYEJB0026 WARN Could not read timer information for Jakarta Enterprise Beans component %s
WFLYEJB0028 ERROR %s is not a directory, could not restore timers
WFLYEJB0029 ERROR Could not restore timer from %s
WFLYEJB0030 ERROR error closing file
WFLYEJB0031 ERROR Could not restore timers for %s
WFLYEJB0032 ERROR Could not create directory %s to persist Jakarta Enterprise Beans timers.
WFLYEJB0034 ERROR Jakarta Enterprise Beans Invocation failed on component %s for method %s
WFLYEJB0035 WARN Could not find Jakarta Enterprise Beans for locator %s, Jakarta Enterprise Beans client proxy will not be replaced
WFLYEJB0036 WARN Jakarta Enterprise Beans %s is not being replaced with a Stub as it is not exposed over IIOP
WFLYEJB0037 ERROR Dynamic stub creation failed for class %s
WFLYEJB0042 INFO Started message driven bean '%s' with '%s' resource adapter
WFLYEJB0043 WARN A previous execution of timer %s is still in progress, skipping this overlapping scheduled execution at: %s.
WFLYEJB0044 java.lang.IllegalStateException Resource adapter repository is not available
WFLYEJB0045 java.lang.IllegalArgumentException Could not find an Endpoint for resource adapter %s
WFLYEJB0046 java.lang.IllegalStateException Endpoint is not available for message driven component %s
WFLYEJB0047 java.lang.RuntimeException Could not deactivate endpoint for message driven component %s
WFLYEJB0049 java.lang.RuntimeException Could not create an instance of cluster node selector %s for cluster %s
WFLYEJB0050 WARN Failed to parse property %s due to %s
WFLYEJB0051 java.lang.IllegalStateException Could not find view %s for Jakarta Enterprise Beans %s
WFLYEJB0052 java.lang.RuntimeException Cannot perform asynchronous local invocation for component that is not a session bean
WFLYEJB0053 java.lang.IllegalArgumentException %s is not a Stateful Session bean in app: %s module: %s distinct-name: %s
WFLYEJB0054 java.lang.RuntimeException Failed to marshal Jakarta Enterprise Beans parameters
WFLYEJB0055 jakarta.ejb.NoSuchEJBException No matching deployment for Jakarta Enterprise Beans: %s
WFLYEJB0056 jakarta.ejb.NoSuchEJBException Could not find Jakarta Enterprise Beans in matching deployment: %s
WFLYEJB0057 java.lang.IllegalArgumentException %s annotation is only valid on method targets
WFLYEJB0058 java.lang.IllegalArgumentException Method %s, on class %s, annotated with @jakarta.interceptor.AroundTimeout is expected to accept a single param of type jakarta.interceptor.InvocationContext
WFLYEJB0059 java.lang.IllegalArgumentException Method %s, on class %s, annotated with @jakarta.interceptor.AroundTimeout must return Object type
WFLYEJB0060 java.lang.IllegalStateException Wrong tx on thread: expected %s, actual %s
WFLYEJB0061 java.lang.IllegalStateException Unknown transaction attribute %s on invocation %s
WFLYEJB0062 jakarta.ejb.EJBTransactionRequiredException Transaction is required for invocation %s
WFLYEJB0063 jakarta.ejb.EJBException Transaction present on server in Never call (Enterprise Beans 3 13.6.2.6)
WFLYEJB0064 ERROR Failed to set transaction for rollback only
WFLYEJB0065 java.lang.IllegalArgumentException View interface cannot be null
WFLYEJB0068 java.lang.RuntimeException Could not load view class for component %s
WFLYEJB0073 jakarta.ejb.RemoveException Illegal call to EJBHome.remove(Object) on a session bean
WFLYEJB0074 java.lang.IllegalStateException Enterprise Beans 3.1 FR 13.6.2.8 setRollbackOnly is not allowed with SUPPORTS transaction attribute
WFLYEJB0075 jakarta.ejb.EJBException Cannot call getPrimaryKey on a session bean
WFLYEJB0076 java.lang.RuntimeException Singleton beans cannot have Enterprise Beans 2.x views
WFLYEJB0078 java.lang.IllegalStateException Bean %s does not have an EJBLocalObject
WFLYEJB0079 java.lang.IllegalArgumentException [Enterprise Beans 3.1 spec, section 14.1.1] Class: %s cannot be marked as an application exception because it is not of type java.lang.Exception
WFLYEJB0080 java.lang.IllegalArgumentException [Enterprise Beans 3.1 spec, section 14.1.1] Exception class: %s cannot be marked as an application exception because it is of type java.rmi.RemoteException
WFLYEJB0081 java.lang.RuntimeException %s annotation is allowed only on classes. %s is not a class
WFLYEJB0082 org.jboss.as.server.deployment.DeploymentUnitProcessingException Bean %s specifies @Remote annotation, but does not implement 1 interface
WFLYEJB0083 org.jboss.as.server.deployment.DeploymentUnitProcessingException Bean %s specifies @Local annotation, but does not implement 1 interface
WFLYEJB0084 java.lang.RuntimeException Could not analyze remote interface for %s
WFLYEJB0085 org.jboss.as.server.deployment.DeploymentUnitProcessingException Exception while parsing %s
WFLYEJB0086 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to install management resources for %s
WFLYEJB0087 java.lang.RuntimeException Could not load view %s
WFLYEJB0088 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type of ejb-ref %s for injection target %s
WFLYEJB0089 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type of ejb-local-ref %s for injection target %s
WFLYEJB0090 java.lang.IllegalArgumentException @EJB injection target %s is invalid. Only setter methods are allowed
WFLYEJB0091 org.jboss.as.server.deployment.DeploymentUnitProcessingException @EJB attribute 'name' is required for class level annotations. Class: %s
WFLYEJB0092 org.jboss.as.server.deployment.DeploymentUnitProcessingException @EJB attribute 'beanInterface' is required for class level annotations. Class: %s
WFLYEJB0093 java.lang.IllegalStateException Module hasn't been attached to deployment unit %s
WFLYEJB0094 org.jboss.as.server.deployment.DeploymentUnitProcessingException Enterprise Beans 3.1 FR 5.4.2 MessageDrivenBean %s does not implement 1 interface nor specifies message listener interface
WFLYEJB0095 java.lang.IllegalArgumentException Unknown session bean type %s
WFLYEJB0096 org.jboss.as.server.deployment.DeploymentUnitProcessingException More than one method found with name %s on %s
WFLYEJB0097 java.lang.RuntimeException Unknown Jakarta Enterprise Beans locator type %s
WFLYEJB0098 java.lang.RuntimeException Could not create CORBA object for %s
WFLYEJB0099 java.lang.IllegalArgumentException Provided locator %s was not for Jakarta Enterprise Beans %s
WFLYEJB0100 java.io.IOException Failed to lookup java:comp/ORB
WFLYEJB0101 java.io.IOException %s is not an ObjectImpl
WFLYEJB0102 jakarta.resource.spi.UnavailableException Message endpoint %s has already been released
WFLYEJB0107 java.lang.IllegalStateException Timer invocation failed, invoker is not started
WFLYEJB0109 java.lang.IllegalArgumentException Invalid value for second: %s
WFLYEJB0110 org.jboss.as.ejb3.tx.TimerTransactionRolledBackException Timer invocation failed, transaction rolled back
WFLYEJB0111 INFO No jndi bindings will be created for Jakarta Enterprise Beans %s since no views are exposed
WFLYEJB0118 WARN [Enterprise Beans 3.1 spec, section 4.9.2] Session bean implementation class MUST NOT be a interface - %s is an interface, hence won't be considered as a session bean
WFLYEJB0119 WARN [Enterprise Beans 3.1 spec, section 4.9.2] Session bean implementation class MUST be public, not abstract and not final - %s won't be considered as a session bean, since it doesn't meet that requirement
WFLYEJB0120 WARN [Enterprise Beans 3.1 spec, section 5.6.2] Message driven bean implementation class MUST NOT be a interface - %s is an interface, hence won't be considered as a message driven bean
WFLYEJB0121 WARN [Enterprise Beans 3.1 spec, section 5.6.2] Message driven bean implementation class MUST be public, not abstract and not final - %s won't be considered as a message driven bean, since it doesn't meet that requirement
WFLYEJB0125 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not create an instance of deployment node selector %s
WFLYEJB0127 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s of type %s must have public default constructor
WFLYEJB0128 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s of type %s must not be inner class
WFLYEJB0129 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s of type %s must be declared public
WFLYEJB0130 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s of type %s must not be declared final
WFLYEJB0131 WARN Jakarta Enterprise Beans %s should not have a final or static method (%s)
WFLYEJB0132 java.lang.IllegalStateException @PostConstruct method of Jakarta Enterprise Beans singleton %s of type %s has been recursively invoked
WFLYEJB0137 java.lang.IllegalStateException Only session and message-driven beans with bean-managed transaction demarcation are allowed to access UserTransaction
WFLYEJB0139 java.lang.String The timer service has been disabled. Please add a entry into the Jakarta Enterprise Beans section of the server configuration to enable it.
WFLYEJB0140 java.lang.String This Jakarta Enterprise Beans does not have any timeout methods
WFLYEJB0141 ERROR Exception calling deployment added listener
WFLYEJB0142 ERROR Exception calling deployment removal listener
WFLYEJB0143 ERROR Failed to remove management resources for %s -- %s
WFLYEJB0144 INFO CORBA interface repository for %s: %s
WFLYEJB0145 ERROR Cannot unregister EJBHome from CORBA naming service
WFLYEJB0146 ERROR Cannot deactivate home servant
WFLYEJB0147 ERROR Cannot deactivate bean servant
WFLYEJB0150 ERROR Could not write method invocation failure for method %s on bean named %s for appname %s modulename %s distinctname %s due to
WFLYEJB0151 ERROR Exception while generating session id for component %s with invocation %s
WFLYEJB0157 ERROR Failed to get status
WFLYEJB0158 ERROR Failed to rollback
WFLYEJB0159 ERROR BMT stateful bean '%s' did not complete user transaction properly status=%s
WFLYEJB0161 WARN Failed to reinstate timer '%s' (id=%s) from its persistent state
WFLYEJB0162 WARN A previous execution of timer %s is being retried, skipping this scheduled execution at: %s
WFLYEJB0163 ERROR Cannot create table for timer persistence
WFLYEJB0164 ERROR Exception running timer task for timer %s on Jakarta Enterprise Beans %s
WFLYEJB0166 WARN The @%s annotation is deprecated and will be ignored.
WFLYEJB0167 WARN The <%2$s xmlns="%1$s"/> element will be ignored.
WFLYEJB0168 jakarta.ejb.NoSuchEJBException Could not find Jakarta Enterprise Beans with id %s
WFLYEJB0169 java.lang.IllegalStateException Component not set in InterceptorContext: %s
WFLYEJB0170 java.lang.IllegalArgumentException Method name cannot be null
WFLYEJB0171 java.lang.IllegalStateException Bean %s does not have a Home interface
WFLYEJB0172 java.lang.IllegalStateException Bean %s does not have a Local Home interface
WFLYEJB0173 java.lang.IllegalStateException Enterprise Beans 3.1 FR 13.6.1 Only beans with container-managed transaction demarcation can use getRollbackOnly.
WFLYEJB0174 java.lang.IllegalStateException getRollbackOnly() not allowed without a transaction.
WFLYEJB0175 java.lang.IllegalStateException getRollbackOnly() not allowed after transaction is completed (EJBTHREE-1445)
WFLYEJB0177 java.lang.IllegalArgumentException jndi name cannot be null during lookup
WFLYEJB0178 java.lang.IllegalArgumentException No NamespaceContextSelector available, cannot lookup %s
WFLYEJB0179 java.lang.RuntimeException Could not lookup jndi name: %s
WFLYEJB0180 java.lang.IllegalArgumentException Cannot lookup jndi name: %s since it doesn't belong to java:app, java:module, java:comp or java:global namespace
WFLYEJB0181 java.lang.IllegalArgumentException Could not lookup jndi name: %s in context: %s
WFLYEJB0182 java.lang.IllegalStateException Enterprise Beans 3.1 FR 13.6.1 Only beans with container-managed transaction demarcation can use setRollbackOnly.
WFLYEJB0183 java.lang.IllegalStateException setRollbackOnly() not allowed without a transaction.
WFLYEJB0184 java.lang.IllegalArgumentException EjbJarConfiguration cannot be null
WFLYEJB0185 java.lang.IllegalArgumentException Cannot set security roles to null
WFLYEJB0193 java.lang.IllegalArgumentException Cannot link from a null or empty security role: %s
WFLYEJB0194 java.lang.IllegalArgumentException Cannot link to a null or empty security role: %s
WFLYEJB0195 org.jboss.as.server.deployment.DeploymentUnitProcessingException EjbJarConfiguration not found as an attachment in deployment unit: %s
WFLYEJB0196 java.lang.IllegalStateException ComponentViewInstance not available in interceptor context: %s
WFLYEJB0199 java.lang.IllegalStateException No resource adapter registered with resource adapter name %s
WFLYEJB0202 java.util.concurrent.TimeoutException Task did not complete in %s %S
WFLYEJB0203 java.util.concurrent.CancellationException Task was cancelled
WFLYEJB0206 java.lang.IllegalStateException Not implemented yet
WFLYEJB0213 java.lang.IllegalStateException Unexpected component: %s component Expected %s
WFLYEJB0214 java.lang.IllegalStateException EjbJarConfiguration hasn't been set in %s Cannot create component create service for Jakarta Enterprise Beans %S
WFLYEJB0218 java.lang.IllegalStateException PoolConfig cannot be null or empty
WFLYEJB0220 java.lang.IllegalStateException [Enterprise Beans 3.1 spec, section 4.9.7] - Can't add view class: %s as local view since it's already marked as remote view for bean: %s
WFLYEJB0221 java.lang.IllegalStateException Business interface type cannot be null
WFLYEJB0222 java.lang.IllegalStateException Bean %s does not have an %s
WFLYEJB0223 java.lang.IllegalStateException Jakarta Enterprise Beans 3.1 FR 13.6.2.9 getRollbackOnly is not allowed with SUPPORTS attribute
WFLYEJB0224 jakarta.ejb.EJBException Not a business method %s. Do not call non-public methods on Jakarta Enterprise Beans's
WFLYEJB0225 java.lang.Exception Component instance isn't available for invocation: %s
WFLYEJB0228 jakarta.ejb.ConcurrentAccessTimeoutException Enterprise Beans 3.1 FR 4.3.14.1 concurrent access timeout on %s - could not obtain lock within %s %s
WFLYEJB0234 java.lang.IllegalStateException Session id hasn't been set for stateful component: %s
WFLYEJB0235 java.lang.IllegalArgumentException @Remove method identifier cannot be null
WFLYEJB0236 java.lang.IllegalArgumentException Component %s with component class: %s%n isn't a %s component
WFLYEJB0237 java.lang.IllegalArgumentException both methodIntf and className are set on %s
WFLYEJB0238 jakarta.ejb.IllegalLoopbackException Enterprise Beans 3.1 PFD2 4.8.5.1.1 upgrading from read to write lock is not allowed
WFLYEJB0239 java.lang.IllegalArgumentException %s cannot be null
WFLYEJB0240 java.lang.IllegalArgumentException Invocation context: %s cannot be processed because it's not applicable for a method invocation
WFLYEJB0241 jakarta.ejb.ConcurrentAccessTimeoutException Enterprise Beans 3.1 PFD2 4.8.5.5.1 concurrent access timeout on %s - could not obtain lock within %s
WFLYEJB0242 java.lang.IllegalStateException Illegal lock type %s on %s for component %s
WFLYEJB0243 java.lang.IllegalStateException Cannot call %s, no %s is present for this invocation
WFLYEJB0244 java.lang.IllegalStateException No asynchronous invocation in progress
WFLYEJB0255 org.jboss.as.server.deployment.DeploymentUnitProcessingException cannot be null or empty in %nfor bean: %s
WFLYEJB0256 org.jboss.as.server.deployment.DeploymentUnitProcessingException Default interceptors cannot specify a method to bind to in ejb-jar.xml
WFLYEJB0258 org.jboss.as.server.deployment.DeploymentUnitProcessingException Two ejb-jar.xml bindings for %s specify an absolute order
WFLYEJB0259 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find method %s.%s referenced in ejb-jar.xml
WFLYEJB0260 org.jboss.as.server.deployment.DeploymentUnitProcessingException More than one method %s found on class %s referenced in ejb-jar.xml. Specify the parameter types to resolve the ambiguity
WFLYEJB0261 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find method %s.%s with parameter types %s referenced in ejb-jar.xml
WFLYEJB0262 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load component class for component %s
WFLYEJB0264 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not merge data for %s
WFLYEJB0265 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load Jakarta Enterprise Beans class %s
WFLYEJB0266 java.lang.RuntimeException Only one %s method is allowed on bean %s
WFLYEJB0267 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine type of corresponding implied Enterprise Beans 2.x local interface (see Enterprise Beans 3.1 21.4.5)%n due to multiple create* methods with different return types on home %s
WFLYEJB0268 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find Jakarta Enterprise Beans %s referenced by @DependsOn annotation in %s
WFLYEJB0269 org.jboss.as.server.deployment.DeploymentUnitProcessingException More than one Jakarta Enterprise Beans called %s referenced by @DependsOn annotation in %s Components:%s
WFLYEJB0270 org.jboss.as.server.deployment.DeploymentUnitProcessingException Async method %s does not return void or Future
WFLYEJB0271 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load application exception class %s in ejb-jar.xml
WFLYEJB0272 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta Enterprise Beans %s entity bean %s implemented TimedObject, but has a different timeout method specified either via annotations or via the deployment descriptor
WFLYEJB0273 java.lang.RuntimeException %s does not have an Enterprise Beans 2.x local interface
WFLYEJB0274 org.jboss.as.server.deployment.DeploymentUnitProcessingException Local Home not allowed for %s
WFLYEJB0275 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not resolve corresponding ejbCreate or @Init method for home interface method %s on Jakarta Enterprise Beans %s
WFLYEJB0276 java.lang.IllegalStateException EJBComponent has not been set in the current invocation context %s
WFLYEJB0286 java.lang.IllegalArgumentException Invalid schedule %s value: %s
WFLYEJB0291 java.lang.IllegalArgumentException Invalid value: %s since %s doesn't support values of types %s
WFLYEJB0292 java.lang.IllegalArgumentException A list value can only contain either a range or an individual value. Invalid value: %s
WFLYEJB0294 java.lang.IllegalArgumentException Invalid value: %s Valid values are between %s and %s
WFLYEJB0303 java.lang.IllegalArgumentException Invoker cannot be null
WFLYEJB0305 java.lang.IllegalArgumentException Executor cannot be null
WFLYEJB0306 java.lang.IllegalArgumentException Invalid timer parameter: %s = %s
WFLYEJB0325 java.lang.IllegalStateException Cannot invoke timer service methods in lifecycle callback of non-singleton beans
WFLYEJB0326 java.lang.IllegalStateException Timer cannot be null
WFLYEJB0327 java.lang.IllegalStateException %s Timer handles are only available for persistent timers.
WFLYEJB0328 jakarta.ejb.NoMoreTimeoutsException No more timeouts for timer %s
WFLYEJB0329 java.lang.IllegalStateException Timer %s is not a calendar based timer
WFLYEJB0330 jakarta.ejb.NoSuchObjectLocalException Timer %s has expired
WFLYEJB0331 jakarta.ejb.NoSuchObjectLocalException Timer %s was canceled
WFLYEJB0338 jakarta.ejb.EJBException Timerservice with timedObjectId: %s is not registered
WFLYEJB0339 jakarta.ejb.NoSuchObjectLocalException Timer for handle with timer id: %s, timedObjectId: %s is not active
WFLYEJB0341 java.lang.IllegalStateException Cannot invoke getTimeoutMethod on a timer which is not an auto-timer
WFLYEJB0342 java.lang.RuntimeException Could not load declaring class: %s of timeout method
WFLYEJB0343 java.lang.RuntimeException Cannot invoke timeout method because method %s is not a timeout method
WFLYEJB0344 java.lang.RuntimeException Could not create timer file store directory %s
WFLYEJB0345 java.lang.RuntimeException Timer file store directory %s does not exist
WFLYEJB0346 java.lang.RuntimeException Timer file store directory %s is not a directory
WFLYEJB0347 java.lang.IllegalStateException Jakarta Enterprise Beans %s are enabled for security but doesn't have a security domain set
WFLYEJB0348 java.lang.IllegalArgumentException %s is not an Jakarta Enterprise Beans component
WFLYEJB0349 java.lang.RuntimeException Could not load view class for ejb %s
WFLYEJB0350 java.lang.IllegalArgumentException Component named %s with component class %s is not an Jakarta Enterprise Beans component
WFLYEJB0353 java.lang.UnsupportedOperationException ResourceBundle based descriptions of %s are not supported
WFLYEJB0354 java.lang.UnsupportedOperationException Runtime attribute %s is not marshallable
WFLYEJB0356 java.lang.IllegalStateException Jakarta Enterprise Beans component type %s does not support pools
WFLYEJB0357 java.lang.IllegalStateException Unknown Jakarta Enterprise Beans Component type %s
WFLYEJB0360 java.lang.IllegalArgumentException Jakarta Enterprise Beans method security metadata cannot be null
WFLYEJB0361 java.lang.IllegalArgumentException View classname cannot be null or empty
WFLYEJB0362 java.lang.IllegalArgumentException View method cannot be null
WFLYEJB0363 java.lang.IllegalStateException %s cannot handle method %s of view class %s.Expected view method to be %s on view class %s
WFLYEJB0364 jakarta.ejb.EJBAccessException Invocation on method: %s of bean: %s is not allowed
WFLYEJB0365 java.lang.IllegalArgumentException Unknown Jakarta Enterprise Beans Component description type %s
WFLYEJB0366 java.lang.IllegalStateException Unknown attribute %s
WFLYEJB0367 java.lang.IllegalStateException Unknown operation %s
WFLYEJB0368 java.lang.String No Jakarta Enterprise Beans component registered for address %s
WFLYEJB0369 java.lang.String No Jakarta Enterprise Beans component is available for address %s
WFLYEJB0370 java.lang.String Jakarta Enterprise Beans component for address %s is in %n state %s, must be in state %s
WFLYEJB0372 org.jboss.as.server.deployment.DeploymentUnitProcessingException Component class %s has multiple @Timeout annotations
WFLYEJB0373 java.lang.IllegalStateException Current component is not an Jakarta Enterprise Beans %s
WFLYEJB0374 java.lang.IllegalStateException %s not allowed in lifecycle methods
WFLYEJB0376 java.lang.IllegalStateException Cannot call %s when invoking through %s or %s
WFLYEJB0377 java.lang.IllegalStateException %s is not allowed from stateful beans
WFLYEJB0378 jakarta.ejb.EJBException Failed to acquire a permit within %s %s
WFLYEJB0379 jakarta.ejb.EJBException Acquire semaphore was interrupted
WFLYEJB0382 java.lang.RuntimeException Could not determine ClassLoader for stub %s
WFLYEJB0383 java.lang.IllegalStateException No message listener of type %s found in resource adapter %s
WFLYEJB0384 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find method %s from view %s on Jakarta Enterprise Beans class %s
WFLYEJB0385 java.lang.IllegalArgumentException %s cannot be null or empty
WFLYEJB0386 jakarta.ejb.RemoveException Jakarta Enterprise Beans 4.6.4 Cannot remove Jakarta Enterprise Beans via Enterprise Beans 2.x remove() method while participating in a transaction
WFLYEJB0387 java.rmi.RemoteException Transaction propagation over IIOP is not supported
WFLYEJB0388 java.lang.IllegalStateException Cannot call method %s in afterCompletion callback
WFLYEJB0389 java.lang.IllegalStateException Cannot call %s when state is %s
WFLYEJB0390 java.lang.IllegalStateException %s is already associated with serialization group %s
WFLYEJB0391 java.lang.IllegalStateException %s is not compatible with serialization group %s
WFLYEJB0392 java.lang.IllegalStateException Cache entry %s is in use
WFLYEJB0393 java.lang.IllegalStateException Cache entry %s is not in use
WFLYEJB0394 java.lang.RuntimeException Failed to acquire lock on %s
WFLYEJB0395 java.lang.IllegalStateException %s is already a member of serialization group %s
WFLYEJB0396 java.lang.IllegalStateException %s is not a member of serialization group %s
WFLYEJB0397 java.lang.IllegalStateException %s already exists in cache
WFLYEJB0398 java.lang.IllegalStateException %s is missing from cache
WFLYEJB0399 java.lang.IllegalStateException Incompatible cache implementations in nested hierarchy
WFLYEJB0400 java.lang.RuntimeException Failed to passivate %s
WFLYEJB0401 java.lang.RuntimeException Failed to activate %s
WFLYEJB0402 java.lang.RuntimeException Failed to create passivation directory: %s
WFLYEJB0403 java.lang.RuntimeException Failed to create passivation directory: %s
WFLYEJB0404 java.lang.IllegalStateException Group creation context already exists
WFLYEJB0405 java.lang.String No Jakarta Enterprise Beans found with interface of type '%s' and name '%s' for binding %s
WFLYEJB0406 java.lang.String No Jakarta Enterprise Beans found with interface of type '%s' for binding %s
WFLYEJB0407 java.lang.String More than one Jakarta Enterprise Beans found with interface of type '%s' and name '%s' for binding %s. Found: %s
WFLYEJB0408 java.lang.String More than one Jakarta Enterprise Beans found with interface of type '%s' for binding %s. Found: %s
WFLYEJB0409 org.jboss.as.server.deployment.DeploymentUnitProcessingException @Clustered annotation cannot be used with message driven beans. %s failed since %s bean is marked with @Clustered on class %s
WFLYEJB0410 org.jboss.as.server.deployment.DeploymentUnitProcessingException @Clustered annotation cannot be used with entity beans. %s failed since %s bean is marked with @Clustered on class %s
WFLYEJB0411 org.jboss.as.server.deployment.DeploymentUnitProcessingException @Clustered annotation is currently not supported for singleton Jakarta Enterprise Beans. %s failed since %s bean is marked with @Clustered on class %s
WFLYEJB0412 org.jboss.as.server.deployment.DeploymentUnitProcessingException %s failed since @Clustered annotation cannot be used for %s bean on class %s
WFLYEJB0413 org.jboss.as.server.deployment.DeploymentUnitProcessingException not specified for Jakarta Enterprise Beans %s. This must be present in ejb-jar.xml
WFLYEJB0414 org.jboss.as.server.deployment.DeploymentUnitProcessingException Default interceptors cannot specify an element in ejb-jar.xml
WFLYEJB0416 java.lang.IllegalArgumentException %s cannot be null
WFLYEJB0419 java.lang.IllegalArgumentException Pool name cannot be empty string for bean %s
WFLYEJB0420 java.lang.IllegalStateException No EjbContext available as no Jakarta Enterprise Beans invocation is active
WFLYEJB0421 org.jboss.as.ejb3.component.EJBComponentUnavailableException Invocation cannot proceed as component is shutting down
WFLYEJB0423 java.lang.RuntimeException Could not create session for stateful bean %s
WFLYEJB0436 java.lang.IllegalArgumentException Unknown channel creation option type %s
WFLYEJB0437 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine remote interface from home interface %s for bean %s
WFLYEJB0438 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not determine local interface from local home interface %s for bean %s
WFLYEJB0442 jakarta.ejb.EJBException Unexpected Error
WFLYEJB0443 java.lang.String Enterprise Beans 3.1 FR 13.3.3: BMT bean %s should complete transaction before returning.
WFLYEJB0445 java.lang.IllegalStateException Detected asymmetric usage of cache
WFLYEJB0446 java.lang.IllegalStateException The timer %s is already active.
WFLYEJB0447 jakarta.transaction.RollbackException Transaction '%s' was already rolled back
WFLYEJB0448 jakarta.ejb.EJBException Transaction '%s' is in unexpected state (%s)
WFLYEJB0449 java.lang.String Timerservice API is not allowed on stateful session bean %s
WFLYEJB0450 org.jboss.as.server.deployment.DeploymentUnitProcessingException Entity Beans are no longer supported, beans %s cannot be deployed
WFLYEJB0451 org.jboss.as.controller.OperationFailedException Attribute '%s' is not supported on current version servers; it is only allowed if its value matches '%s'
WFLYEJB0453 ERROR Failed to persist timer %s
WFLYEJB0454 org.jboss.as.server.deployment.DeploymentUnitProcessingException Only one instance on with an ejb-name of * can be present.
WFLYEJB0455 org.jboss.as.server.deployment.DeploymentUnitProcessingException elements that use the wildcard Jakarta Enterprise Beans name * can only use a method name of *
WFLYEJB0456 ERROR Failed to refresh timers for %s
WFLYEJB0457 jakarta.ejb.EJBTransactionRolledbackException Unexpected Error
WFLYEJB0459 org.jboss.as.server.deployment.DeploymentUnitProcessingException Module %s containing bean %s is not deployed in ear but it specifies resource adapter name '%s' in a relative format.
WFLYEJB0460 WARN The transaction isolation need to be equal or stricter than READ_COMMITTED to ensure that the timer run once-and-only-once
WFLYEJB0461 ERROR Update timer failed and it was not possible to rollback the transaction!
WFLYEJB0462 WARN Timer service database-data-store database attribute is not configured, and is not detected from connection metadata or JDBC driver name.
WFLYEJB0463 WARN Invalid transaction attribute type %s on SFSB lifecycle method %s of class %s, valid types are REQUIRES_NEW and NOT_SUPPORTED. Method will be treated as NOT_SUPPORTED.
WFLYEJB0464 org.jboss.as.controller.OperationFailedException The "disable-default-ejb-permissions" attribute may not be set to true
WFLYEJB0465 org.jboss.as.server.deployment.DeploymentUnitProcessingException Invalid client descriptor configuration: 'profile' and 'remoting-ejb-receivers' cannot be used together
WFLYEJB0466 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process business interfaces for Jakarta Enterprise Beans class %s
WFLYEJB0467 org.jboss.as.ejb3.component.EJBComponentUnavailableException The request was rejected as the container is suspended
WFLYEJB0468 org.jboss.as.controller.OperationFailedException Timer invocation failed
WFLYEJB0469 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYEJB0471 java.lang.RuntimeException RMI/IIOP Violation: %s%n
WFLYEJB0472 java.lang.RuntimeException Cannot obtain exception repository id for %s:%n%s
WFLYEJB0473 INFO JNDI bindings for session bean named '%s' in deployment unit '%s' are as follows:%s
WFLYEJB0474 ERROR Attribute '%s' is not supported on current version servers; it is only allowed if its value matches '%s'. This attribute should be removed.
WFLYEJB0475 INFO MDB delivery started: %s,%s
WFLYEJB0476 INFO MDB delivery stopped: %s,%s
WFLYEJB0477 org.jboss.as.server.deployment.DeploymentUnitProcessingException MDB delivery group is missing: %s
WFLYEJB0480 ERROR Loaded timer (%s) for Jakarta Enterprise Beans (%s) and this node that is marked as being in a timeout. The original timeout may not have been processed. Please use graceful shutdown to ensure timeout tasks are finished before shutting down.
WFLYEJB0481 INFO Strict pool %s is using a max instance size of %d (per class), which is derived from thread worker pool sizing.
WFLYEJB0482 INFO Strict pool %s is using a max instance size of %d (per class), which is derived from the number of CPUs on this host.
WFLYEJB0483 javax.xml.stream.XMLStreamException Attributes are mutually exclusive: %s, %s
WFLYEJB0485 WARN Transaction type %s is unspecified for the %s method of the %s message-driven bean. It will be handled as NOT_SUPPORTED.
WFLYEJB0486 INFO Parameter 'default-clustered-sfsb-cache' was defined for the 'add' operation for resource '%s'. This parameter is deprecated and its previous behavior has been remapped to attribute 'default-sfsb-cache'. As a result the 'default-sfsb-cache' attribute has been set to '%s' and the 'default-sfsb-passivation-disabled-cache' attribute has been set to '%s'.
WFLYEJB0487 ERROR Unexpected invocation state %s
WFLYEJB0489 ERROR Timer %s not running as transaction could not be started
WFLYEJB0490 org.jboss.as.server.deployment.DeploymentUnitProcessingException Multiple security domains not supported
WFLYEJB0491 jakarta.ejb.EJBException The transaction begin request was rejected as the container is suspended
WFLYEJB0492 INFO Jakarta Enterprise Beans subsystem suspension waiting for active transactions, %d transaction(s) remaining
WFLYEJB0493 INFO Jakarta Enterprise Beans subsystem suspension complete
WFLYEJB0494 java.lang.RuntimeException Failed to obtain SSLContext
WFLYEJB0495 WARN Ignoring the persisted start or end date for scheduled expression of timer ID:%s as it is not valid : %s.
WFLYEJB0496 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not create an instance of Jakarta Enterprise Beans client interceptor %s
WFLYEJB0497 WARN Failed to persist timer %s on startup. This is likely due to another cluster member making the same change, and should not affect operation.
WFLYEJB0499 org.jboss.as.controller.OperationFailedException Cannot read derived size - service %s unreachable
WFLYEJB0500 ERROR Legacy org.jboss.security.annotation.SecurityDomain annotation is used in class: %s, please use org.jboss.ejb3.annotation.SecurityDomain instead.
WFLYEJB0501 java.lang.RuntimeException Failed to activate MDB %s
WFLYEJB0502 ERROR Exception checking if timer %s should run
WFLYEJB0503 WARN [Jakarta Enterprise Beans 3.2 spec, section 5.6.4] Message Driven Bean 'onMessage' method can not be final (MDB: %s).
WFLYEJB0504 WARN [Jakarta Enterprise Beans 3.2 spec, section 5.6.4] Message Driven Bean 'onMessage' method can not be private (MDB: %s).
WFLYEJB0505 WARN [Jakarta Enterprise Beans 3.2 spec, section 5.6.4] Message Driven Bean 'onMessage' method can not be static (MDB: %s).
WFLYEJB0506 WARN [Jakarta Enterprise Beans 3.2 spec, section 5.6.2] Message Driven Bean can not have a 'finalize' method. (MDB: %s)
WFLYEJB0507 ERROR Failed to persist timer's state %s. Timer has to be restored manually
WFLYEJB0508 WARN Failed to persist timer's state %s due to %s
WFLYEJB0509 WARN Clustered Jakarta Enterprise Beans in Node: %s are bound to INADDR_ANY(%s). Either use a non-wildcard server bind address or add client-mapping entries to the relevant socket-binding for the Remoting connector
WFLYEJB0510 WARN @RunAs annotation is required when using @RunAsPrincipal on class %s
WFLYEJB0511 java.lang.RuntimeException Cannot build reflection index for server interceptor class %s
WFLYEJB0512 java.lang.RuntimeException Server interceptor class %s does not have a no parameter constructor
WFLYEJB0513 java.lang.RuntimeException Method %s in server interceptor %s annotated with %s has invalid signature
WFLYEJB0514 java.lang.RuntimeException Cannot load server interceptor module %s
WFLYEJB0515 WARN [Jakarta Enterprise Beans 3.2 spec, section 4.9.2] Singleton session beans are not allowed to implement 'jakarta.ejb.SessionBean' interface. This interface on bean '%s' is going to be ignored and should be removed.
WFLYEJB0516 INFO IIOP bindings for session bean named '%s' in deployment unit '%s' are as follows: %s
WFLYEJB0517 ERROR [Jakarta Enterprise Beans 3.2 spec, section 4.1] Spec violation for class %s. Session Jakarta Enterprise Beans should have only one of the following types : Stateful, Stateless, Singleton.
WFLYEJB0518 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted
WFLYEJB0519 java.lang.IllegalArgumentException Invalid unmarshalling filter specfication %s; specifications must describe class or package name matching patterns
WFLYEJB0521 org.jboss.as.server.deployment.DeploymentUnitProcessingException Some classes referenced by annotation: %s in class: %s are missing.
WFLYEJB0522 WARN The default pool name %s could not be resolved from its value: %s
WFLYEJB0523 WARN Timer %s has not been deployed
WFLYEJB0524 java.lang.RuntimeException Timer %s cannot be added
WFLYEJB0525 WARN The 'mappedName' in Jakarta Enterprise Beans annotations is not supported. Value of '%s' for Jakarta Enterprise Beans '%s' will be ignored.
WFLYEJB0526 org.jboss.as.controller.OperationFailedException Timer %s does not exist
WFLYEJB0527 ERROR Remoting connector (address %s, port %s) is not correctly configured for EJB client invocations, the connector must be listed in 'connectors' attribute to receive EJB client invocations
WFLYEJB0528 DEBUG Jakarta Enterprise Beans business method %s must be public
WFLYEJB0529 WARN Failed to retrieve info from database for timer: %s
WFLYEJB0530 java.lang.IllegalStateException The deployment is configured to use a legacy security domain '%s' which is no longer supported.
WFLYEJB0531 WARN No client mappings registry provider found for %s; using legacy provider based on static configuration
WFLYEJB0532 WARN Database detected from configuration is: '%s'. If this is incorrect, please specify the correct database.

WFLYELY

Code Level Return Type Message
WFLYELY00000 java.lang.String Reload dependent services which might already have cached the secret value
WFLYELY00000 java.lang.String Update dependent resources as alias '%s' does not exist anymore
WFLYELY00002 org.jboss.as.controller.OperationFailedException Can not inject the same realm '%s' in a single security domain.
WFLYELY00003 java.lang.IllegalArgumentException The operation did not contain an address with a value for '%s'.
WFLYELY00004 org.jboss.msc.service.StartException Unable to start the service.
WFLYELY00005 org.jboss.as.controller.OperationFailedException Unable to access KeyStore to complete the requested operation.
WFLYELY00007 org.jboss.as.controller.OperationFailedException The required service '%s' is not UP, it is currently '%s'.
WFLYELY00008 org.jboss.as.controller.OperationFailedException Invalid operation name '%s', expected one of '%s'
WFLYELY00009 java.lang.RuntimeException Unable to complete operation. '%s'
WFLYELY00010 org.jboss.as.controller.OperationFailedException Unable to save KeyStore - KeyStore file '%s' does not exist.
WFLYELY00012 org.jboss.msc.service.StartException No suitable provider found for type '%s'
WFLYELY00013 org.jboss.as.controller.OperationFailedException The default-realm '%s' is not in the list of realms [%s] referenced by this domain.
WFLYELY00014 org.jboss.msc.service.StartException Unable to load the properties files required to start the properties file backed realm: Users file: '%s' Groups file: '%s'
WFLYELY00015 org.jboss.msc.service.StartException The custom component implementation '%s' does not implement method initialize(Map), however configuration has been supplied.
WFLYELY00016 org.jboss.as.controller.OperationFailedException The supplied regular expression '%s' is invalid.
WFLYELY00017 org.jboss.msc.service.StartException Property file referenced in properties-realm does not exist: %s
WFLYELY00018 org.jboss.msc.service.StartException Unable to create %s for algorithm '%s'.
WFLYELY00019 org.jboss.msc.service.StartException No '%s' found in injected value.
WFLYELY00020 org.jboss.as.controller.OperationFailedException Unable to reload the properties files required to by the properties file backed realm.
WFLYELY00021 org.jboss.msc.service.StartException Exception while creating the permission object for the permission mapping. Please check [class-name], [target-name] (name of permission) and [action] of [%s].
WFLYELY00022 org.jboss.msc.service.StartException KeyStore file '%s' does not exist and required.
WFLYELY00023 WARN KeyStore file '%s' does not exist. Used blank.
WFLYELY00024 WARN Certificate [%s] in KeyStore is not valid
WFLYELY00025 org.jboss.msc.service.StartException Referenced property file is invalid: %s
WFLYELY00027 org.jboss.as.controller.OperationFailedException Unable to obtain OID for X.500 attribute '%s'
WFLYELY00028 org.jboss.as.controller.OperationFailedException The X.500 attribute must be defined by name or by OID
WFLYELY00029 org.jboss.as.controller.OperationFailedException Failed to parse URL '%s'
WFLYELY00030 org.jboss.msc.service.StartException Realm '%s' does not support cache
WFLYELY00031 org.jboss.msc.service.StartException Unable to access CRL file.
WFLYELY00032 java.lang.RuntimeException Unable to reload CRL file.
WFLYELY00033 java.lang.RuntimeException Unable to access entry [%s] from key store [%s].
WFLYELY00034 org.jboss.as.controller.OperationFailedException A principal query can only have a single key mapper
WFLYELY00035 org.jboss.as.controller.OperationFailedException Unable to load module '%s'.
WFLYELY00036 org.jboss.as.controller.OperationFailedException Security realm '%s' has been referenced twice in the same security domain.
WFLYELY00037 org.jboss.msc.service.StartException Injected value is not of '%s' type.
WFLYELY00038 org.jboss.msc.service.StartException Could not load permission class '%s'
WFLYELY00039 org.jboss.as.controller.OperationFailedException Unable to reload CRL file - TrustManager is not reloadable
WFLYELY00040 org.jboss.msc.service.StartException Unable to load the permission module '%s' for the permission mapping
WFLYELY00041 java.lang.String Unable to transform configuration to the target version - attribute '%s' is different from '%s'
WFLYELY00042 java.lang.String Unable to transform multiple 'authorization-realms' to the single value
WFLYELY00043 org.jboss.as.controller.OperationFailedException A cycle has been detected initialising the resources - %s
WFLYELY00044 java.lang.IllegalStateException Unexpected name of servicename's parent - %s
WFLYELY00045 java.lang.IllegalStateException Failed to load CallbackHandler from the provided module.
WFLYELY00046 org.jboss.msc.service.StartException Provided path '%s' to JAAS configuration file does not exist.
WFLYELY00047 WARN LDAP Realm is configured to use direct-verification and user-password-mapper which is invalid configuration.
WFLYELY00048 java.lang.IllegalArgumentException A string representation of an X.500 distinguished name is required: %s
WFLYELY00909 org.jboss.as.controller.OperationFailedException Credential store '%s' does not support given credential store entry type '%s'
WFLYELY00910 java.io.IOException Password cannot be resolved for key-store '%s'
WFLYELY00911 java.io.IOException Credential store '%s' protection parameter cannot be resolved
WFLYELY00913 org.jboss.as.controller.OperationFailedException Credential alias '%s' of credential type '%s' already exists in the store
WFLYELY00914 java.security.NoSuchProviderException Provider loader '%s' cannot supply Credential Store provider of type '%s'
WFLYELY00916 java.lang.IllegalStateException Credential cannot be resolved
WFLYELY00917 org.jboss.msc.service.StartException Password cannot be resolved for dir-context
WFLYELY00920 org.jboss.as.controller.OperationFailedException Credential alias '%s' of credential type '%s' does not exist in the store
WFLYELY00921 org.jboss.as.controller.OperationFailedException Location parameter is not specified for filebased keystore type '%s'
WFLYELY00922 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Unable to load credential from credential store.
WFLYELY00923 org.jboss.as.controller.OperationFailedException Unable to encrypt the supplied clear text.
WFLYELY00924 org.jboss.as.controller.OperationFailedException Unable to create immediately available credential store.
WFLYELY00925 org.jboss.as.controller.OperationFailedException Unable to reload the credential store.
WFLYELY00926 org.jboss.as.controller.OperationFailedException Unable to initialize the credential store.
WFLYELY00927 org.jboss.as.controller.OperationFailedException The secret key operation '%s' failed to complete due to '%s'.
WFLYELY01000 org.jboss.as.controller.OperationFailedException Identity with name [%s] already exists.
WFLYELY01001 java.lang.RuntimeException Could not create identity with name [%s].
WFLYELY01002 java.lang.String Identity with name [%s] not found.
WFLYELY01003 java.lang.RuntimeException Could not delete identity with name [%s].
WFLYELY01004 java.lang.String Identity with name [%s] not authorized.
WFLYELY01005 java.lang.RuntimeException Could not read identity [%s] from security domain [%s].
WFLYELY01007 java.lang.RuntimeException Could not read identity with name [%s].
WFLYELY01008 java.lang.RuntimeException Failed to obtain the authorization identity.
WFLYELY01009 java.lang.RuntimeException Failed to add attribute.
WFLYELY01010 java.lang.RuntimeException Failed to remove attribute.
WFLYELY01011 java.lang.RuntimeException Could not create password.
WFLYELY01012 org.jboss.as.controller.OperationFailedException Unexpected password type [%s].
WFLYELY01013 org.jboss.as.controller.OperationFailedException Pattern [%s] requires a capture group
WFLYELY01014 org.jboss.as.controller.OperationFailedException Invalid [%s] definition. Only one of '%s' or '%s' can be set in one Object in the list of filters.
WFLYELY01015 java.lang.IllegalStateException Unable to perform automatic outflow for '%s'
WFLYELY01016 org.jboss.as.controller.OperationFailedException Server '%s' not known
WFLYELY01017 org.jboss.as.controller.OperationFailedException Invalid value for cipher-suite-filter. %s
WFLYELY01018 org.jboss.as.controller.OperationFailedException Invalid size %s
WFLYELY01019 org.jboss.as.controller.OperationFailedException The suffix (%s) can not contain seconds or milliseconds.
WFLYELY01020 org.jboss.as.controller.OperationFailedException The suffix (%s) is invalid. A suffix must be a valid date format.
WFLYELY01022 java.lang.RuntimeException Failed to set policy [%s]
WFLYELY01023 javax.xml.stream.XMLStreamException Could not find policy provider with name [%s]
WFLYELY01024 java.lang.RuntimeException Failed to register policy context handlers
WFLYELY01025 java.lang.RuntimeException Failed to create policy [%s]
WFLYELY01026 WARN Element '%s' with attribute '%s' set to '%s' is unused. Since unused policy configurations can no longer be stored in the configuration model this item is being discarded.
WFLYELY01027 java.io.IOException Key password cannot be resolved for key-store '%s'
WFLYELY01028 org.jboss.as.controller.OperationFailedException Invalid value for not-before. %s
WFLYELY01029 org.jboss.as.controller.OperationFailedException Alias '%s' does not exist in KeyStore
WFLYELY01030 org.jboss.as.controller.OperationFailedException Alias '%s' does not identify a PrivateKeyEntry in KeyStore
WFLYELY01031 org.jboss.as.controller.OperationFailedException Unable to obtain PrivateKey for alias '%s'
WFLYELY01032 org.jboss.as.controller.OperationFailedException Unable to obtain Certificate for alias '%s'
WFLYELY01033 org.jboss.as.controller.OperationFailedException No certificates found in certificate reply
WFLYELY01034 org.jboss.as.controller.OperationFailedException Public key from certificate reply does not match public key from certificate in KeyStore
WFLYELY01035 org.jboss.as.controller.OperationFailedException Certificate reply is the same as the certificate from PrivateKeyEntry in KeyStore
WFLYELY01036 org.jboss.as.controller.OperationFailedException Alias '%s' already exists in KeyStore
WFLYELY01037 org.jboss.as.controller.OperationFailedException Top-most certificate from certificate reply is not trusted. Inspect the certificate carefully and if it is valid, execute import-certificate again with validate set to false.
WFLYELY01038 org.jboss.as.controller.OperationFailedException Trusted certificate is already in KeyStore under alias '%s'
WFLYELY01039 org.jboss.as.controller.OperationFailedException Trusted certificate is already in cacerts KeyStore under alias '%s'
WFLYELY01040 org.jboss.as.controller.OperationFailedException Unable to determine if the certificate is trusted. Inspect the certificate carefully and if it is valid, execute import-certificate again with validate set to false.
WFLYELY01041 org.jboss.as.controller.OperationFailedException Certificate file does not exist
WFLYELY01042 org.jboss.as.controller.OperationFailedException Unable to obtain Entry for alias '%s'
WFLYELY01043 org.jboss.as.controller.OperationFailedException Unable to create an account with the certificate authority: %s
WFLYELY01044 org.jboss.as.controller.OperationFailedException Unable to change the account key associated with the certificate authority: %s
WFLYELY01045 org.jboss.as.controller.OperationFailedException Unable to deactivate the account associated with the certificate authority: %s
WFLYELY01046 org.jboss.msc.service.StartException Unable to obtain certificate authority account Certificate for alias '%s'
WFLYELY01047 org.jboss.msc.service.StartException Unable to obtain certificate authority account PrivateKey for alias '%s'
WFLYELY01048 org.jboss.as.controller.OperationFailedException Unable to update certificate authority account key store: %s
WFLYELY01049 org.wildfly.security.x500.cert.acme.AcmeException Unable to respond to challenge from certificate authority: %s
WFLYELY01050 org.wildfly.security.x500.cert.acme.AcmeException Invalid certificate authority challenge
WFLYELY01051 org.jboss.as.controller.OperationFailedException Invalid certificate revocation reason '%s'
WFLYELY01052 java.lang.IllegalStateException Unable to instantiate AcmeClientSpi implementation
WFLYELY01053 org.jboss.as.controller.OperationFailedException Unable to update the account with the certificate authority: %s
WFLYELY01054 org.jboss.as.controller.OperationFailedException Unable to get the metadata associated with the certificate authority: %s
WFLYELY01055 org.jboss.as.controller.OperationFailedException Invalid key size: %d
WFLYELY01056 org.jboss.as.controller.OperationFailedException A certificate authority account with this account key already exists. To update the contact information associated with this existing account, use %s. To change the key associated with this existing account, use %s.
WFLYELY01057 java.lang.RuntimeException Failed to create ServerAuthModule [%s] using module '%s'
WFLYELY01058 org.jboss.as.controller.OperationFailedException Failed to parse PEM public key with kid: %s
WFLYELY01059 org.jboss.msc.service.StartException Unable to detect KeyStore '%s'
WFLYELY01060 org.jboss.as.controller.OperationFailedException Fileless KeyStore needs to have a defined type.
WFLYELY01061 org.jboss.as.controller.OperationFailedException Invalid value of host context map: '%s' is not valid hostname pattern.
WFLYELY01062 org.jboss.as.controller.OperationFailedException Value for attribute '%s' is invalid.
WFLYELY01063 org.jboss.as.controller.OperationFailedException LetsEncrypt certificate authority is configured by default.
WFLYELY01064 org.jboss.msc.service.StartException Failed to load OCSP responder certificate '%s'.
WFLYELY01065 org.jboss.as.controller.OperationFailedException Multiple maximum-cert-path definitions found.
WFLYELY01066 org.jboss.as.controller.OperationFailedException Invalid value for cipher-suite-names. %s
WFLYELY01067 org.jboss.as.controller.OperationFailedException Value '%s' is not valid regex.
WFLYELY01068 java.lang.IllegalStateException Duplicate PolicyContextHandler found for key '%s'.
WFLYELY01069 java.lang.IllegalStateException Invalid %s loaded, expected %s but received %s.
WFLYELY01079 java.lang.RuntimeException Unable to load module '%s'.
WFLYELY01080 org.jboss.as.controller.OperationFailedException Non existing key store needs to have defined type.
WFLYELY01081 java.lang.RuntimeException Failed to lazily initialize key manager
WFLYELY01082 java.lang.RuntimeException Failed to store generated self-signed certificate
WFLYELY01083 java.lang.RuntimeException No '%s' found in injected value.
WFLYELY01084 WARN KeyStore %s not found, it will be auto-generated on first use with a self-signed certificate for host %s
WFLYELY01085 WARN Generated self-signed certificate at %s. Please note that self-signed certificates are not secure and should only be used for testing purposes. Do not use this self-signed certificate in production. SHA-1 fingerprint of the generated key is %s SHA-256 fingerprint of the generated key is %s
WFLYELY01086 java.lang.IllegalStateException Unable to initialize Elytron JACC support while legacy JACC support is enabled.
WFLYELY01087 org.jboss.as.controller.OperationFailedException Hostname in SNI mapping cannot contain ^ character.
WFLYELY01088 org.wildfly.security.x500.cert.acme.AcmeException Missing certificate authority challenge
WFLYELY01089 org.jboss.as.controller.OperationFailedException Invalid file encoding '%s'.
WFLYELY01200 org.jboss.as.controller.OperationFailedException The name of the resolver to use was not specified and no default-resolver has been defined.
WFLYELY01201 org.jboss.as.controller.OperationFailedException No expression resolver has been defined with the name '%s'.
WFLYELY01202 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException A cycle has been detected initialising the expression resolver for '%s' and '%s'.
WFLYELY01203 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Expression resolver initialisation has already failed.
WFLYELY01204 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException The expression '%s' does not specify a resolver and no default is defined.
WFLYELY01205 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException The expression '%s' specifies a resolver configuration which does not exist.
WFLYELY01206 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Unable to decrypt expression '%s'.
WFLYELY01207 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionServerException Resolution of credential store expressions is not supported in the MODEL stage of operation execution.
WFLYELY01208 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionServerException Unable to resolve CredentialStore %s -- %s
WFLYELY01209 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionUserException Unable to initialize CredentialStore %s -- %s
WFLYELY01210 org.jboss.as.controller.ExpressionResolver$ExpressionResolutionServerException Initialisation of an %s without an active management OperationContext is not allowed.
WFLYELY01211 org.jboss.as.controller.OperationFailedException Unable to load the credential store.
WFLYELY01212 org.jboss.msc.service.StartException KeyStore does not contain a PrivateKey for KeyStore: [%s] and alias: [%s].
WFLYELY01213 org.jboss.msc.service.StartException KeyStore does not contain a PublicKey for KeyStore: [%s] and alias: [%s].
WFLYELY01214 org.jboss.as.controller.OperationFailedException Unable to verify the integrity of the filesystem realm: %s
WFLYELY01215 org.jboss.as.controller.OperationFailedException Filesystem realm is missing key pair configuration, integrity checking is not enabled
WFLYELY01216 java.lang.RuntimeException Filesystem realm is unable to obtain key store password
WFLYELY01217 org.jboss.as.controller.OperationFailedException Realm verification failed, invalid signatures for the identities: %s
WFLYELY01218 java.security.KeyStoreException Keystore used by filesystem realm does not contain the alias: %s
WFLYELY01219 org.jboss.as.controller.OperationFailedException Integrity keypair cannot be added to non-empty filesystem realm after initialization. To upgrade a filesystem realm, use Elytron Tool command `filesystem-realm-integrity`
WFLYELY01220 org.jboss.as.controller.OperationFailedException Encryption secret key cannot be added to non-empty filesystem realm after initialization. To upgrade a filesystem realm, use Elytron Tool command `filesystem-realm-encrypt`

WFLYEMB

Code Level Return Type Message
WFLYEMB0011 java.lang.IllegalStateException Invalid JBoss home directory: %s
WFLYEMB0014 java.lang.RuntimeException Cannot load module %s from: %s
WFLYEMB0015 java.lang.IllegalArgumentException %s is null
WFLYEMB0017 java.lang.IllegalStateException Cannot load embedded server factory: %s
WFLYEMB0018 java.lang.IllegalStateException Cannot get reflective method '%s' for: %s
WFLYEMB0019 java.lang.IllegalStateException Cannot create standalone server using factory: %s
WFLYEMB0020 java.lang.IllegalStateException Cannot setup embedded process
WFLYEMB0021 org.wildfly.core.embedded.EmbeddedProcessStartException Cannot start embedded process
WFLYEMB0022 java.lang.IllegalStateException Cannot invoke '%s' on embedded process
WFLYEMB0023 java.lang.IllegalStateException The embedded server is stopping and invocations on the ModelControllerClient are not available
WFLYEMB0024 java.lang.IllegalStateException The embedded server is reloading and invocations on the ModelControllerClient are not yet available
WFLYEMB0026 java.lang.IllegalStateException Cannot create host controller using factory: %s
WFLYEMB0027 java.lang.IllegalStateException The embedded server is stopped and invocations on the ModelControllerClient are not available
WFLYEMB0028 java.lang.RuntimeException Error copying '%s' to '%s' (%s)
WFLYEMB0029 java.lang.IllegalArgumentException -D%s=%s is not a directory
WFLYEMB0143 java.lang.IllegalArgumentException No directory called '%s' exists under '%s'
WFLYEMB0144 java.lang.IllegalArgumentException -D%s=%s does not exist
WFLYEMB0145 WARN The module loader has already been configured. Changing the %s property will have no effect.
WFLYEMB0146 ERROR Failed to restore context %s

WFLYHC

Code Level Return Type Message
WFLYHC-001 WARN Server '%s' (managed by host '%s') is unstable and should be stopped or restarted. An unstable server may not stop normally, so the 'kill' operation may be required to terminate the server process.
WFLYHC0000 java.lang.String Use %s --help for information on valid command line arguments and their syntax.
WFLYHC0000 java.lang.String - Host Controller configuration files in use: %s, %s
WFLYHC0000 java.lang.String - Host Controller configuration file in use: %s
WFLYHC0001 WARN Could not connect to remote domain controller %s
WFLYHC0002 ERROR Could not connect to the domain controller. Error was: %s
WFLYHC0003 INFO Creating http management service using network interface (%s) port (%d) securePort (%d)
WFLYHC0005 WARN Existing server [%s] with status: %s
WFLYHC0008 ERROR Failed to start server (%s)
WFLYHC0009 ERROR Failed to stop server (%s)
WFLYHC0011 WARN Ignoring for jvm '%s' type jvm: %s
WFLYHC0012 ERROR No configuration was provided and the current running mode ('%s') requires access to the Domain Controller host. Startup will be aborted. Use the %s command line argument to start in %s mode if you need to start without a domain controller connection and then use the management tools to configure one.
WFLYHC0013 WARN No security realm defined for http management service, all access will be unrestricted.
WFLYHC0014 ERROR No server called %s available
WFLYHC0015 WARN Connection to remote host-controller closed. Trying to reconnect.
WFLYHC0016 WARN Ignoring
WFLYHC0018 INFO Reconnecting server %s
WFLYHC0019 INFO Registered remote secondary host "%s", %s
WFLYHC0020 INFO Registering server %s
WFLYHC0021 INFO Server [%s] connected using connection [%s]
WFLYHC0023 INFO Starting server %s
WFLYHC0024 INFO Stopping server %s
WFLYHC0026 INFO Unregistered remote secondary host "%s"
WFLYHC0027 INFO Unregistering server %s
WFLYHC0029 INFO Unregistered at domain controller
WFLYHC0030 WARN Connection to remote host "%s" closed unexpectedly
WFLYHC0031 WARN Cannot load the domain model using --backup
WFLYHC0033 ERROR Caught exception during boot
WFLYHC0034 java.lang.String Host Controller boot has failed in an unrecoverable manner; exiting. See previous messages for details. %s
WFLYHC0035 ERROR Installation of the domain-wide configuration has failed. Because the running mode of this Host Controller is ADMIN_ONLY boot has been allowed to proceed. If ADMIN_ONLY mode were not in effect the process would be terminated due to a critical boot failure.
WFLYHC0037 INFO The primary Host Controller has been restarted. Re-registering this secondary Host Controller with the new primary.
WFLYHC0038 WARN The domain controller could not be reached in the last [%d] milliseconds. Re-connecting.
WFLYHC0039 INFO The secondary Host Controller "%s" has been restarted or is attempting to reconnect. Unregistering the current connection to this secondary.
WFLYHC0040 WARN The secondary Host Controller "%s" could not be reached in the last [%d] milliseconds. Unregistering.
WFLYHC0041 java.lang.String Argument expected for option %s. %s
WFLYHC0042 java.lang.IllegalArgumentException Attempting to set '%s' when '%s' was already set
WFLYHC0043 java.lang.IllegalStateException Unable to connect due to authentication failure.
WFLYHC0044 java.lang.IllegalStateException Cannot access a remote file repository from the domain controller
WFLYHC0045 java.io.IOException Unable to create local directory: %s
WFLYHC0046 java.lang.RuntimeException Cannot obtain a valid default address for communicating with the ProcessController using either %s or InetAddress.getLocalHost(). Please check your system's network configuration or use the %s command line switch to configure a valid address
WFLYHC0047 java.lang.String Cannot restart server %s as it is not currently started; it is %s
WFLYHC0048 java.lang.String Cannot start servers when the Host Controller running mode is %s
WFLYHC0049 java.lang.UnsupportedOperationException Close should be managed by the service
WFLYHC0050 java.lang.IllegalStateException Configuration persister for domain model is already initialized
WFLYHC0051 java.lang.IllegalStateException Interrupted while trying to connect to the domain controller
WFLYHC0052 java.lang.IllegalStateException Could not connect to the domain controller in %d attempts within %s ms
WFLYHC0053 java.lang.RuntimeException Could not get the server inventory in %d %s
WFLYHC0054 java.io.IOException Did not read the entire file. Missing: %d
WFLYHC0055 java.lang.RuntimeException Error closing down host
WFLYHC0056 java.lang.String Failed to retrieve profile operations from domain controller
WFLYHC0057 java.lang.RuntimeException Failed to get file from remote repository
WFLYHC0058 java.lang.String Failed to get server status
WFLYHC0059 java.lang.String Failed to read authentication key: %s
WFLYHC0061 javax.security.sasl.SaslException Insufficient information to generate hash.
WFLYHC0062 java.lang.String Invalid option '%s'. %s
WFLYHC0063 org.jboss.as.protocol.mgmt.RequestProcessingException Invalid root id [%d]
WFLYHC0064 java.lang.String Value for %s is not an %s -- %s. %s
WFLYHC0065 java.lang.IllegalStateException Invocations of %s after HostController boot are not allowed
WFLYHC0066 java.lang.String Malformed URL provided for option %s. %s
WFLYHC0067 java.lang.IllegalStateException Must call %s before checking for secondary Host Controller status
WFLYHC0068 java.lang.IllegalStateException Must call %s before persisting the domain model
WFLYHC0071 java.lang.IllegalStateException No server inventory
WFLYHC0077 java.lang.IllegalArgumentException There is already a registered server named '%s'
WFLYHC0078 java.lang.String Server (%s) still running
WFLYHC0079 javax.security.sasl.SaslException Unable to generate hash
WFLYHC0080 java.lang.String Unable to load properties from URL %s. %s
WFLYHC0081 java.lang.IllegalArgumentException Undefined socket binding group for server %s
WFLYHC0082 java.lang.IllegalStateException Included socket binding group %s is not defined
WFLYHC0084 java.lang.IllegalArgumentException Unknown %s %s
WFLYHC0085 java.lang.String Value for %s is not a known host -- %s. %s
WFLYHC0087 java.lang.IllegalStateException Host-Controller is already shutdown.
WFLYHC0090 java.lang.UnsupportedOperationException HostControllerEnvironment does not support system property updates
WFLYHC0091 org.jboss.as.controller.OperationFailedException Resources of type %s cannot be ignored
WFLYHC0092 javax.xml.stream.XMLStreamException An '%s' element whose 'type' attribute is '%s' has already been found
WFLYHC0093 java.lang.String The JVM input arguments cannot be accessed so system properties passed directly to this Host Controller JVM will not be passed through to server processes. Cause of the problem: %s
WFLYHC0094 java.lang.IllegalStateException Missing configuration value for: %s
WFLYHC0095 java.lang.IllegalStateException Home directory does not exist: %s
WFLYHC0097 java.lang.IllegalStateException Domain base directory does not exist: %s
WFLYHC0098 java.lang.IllegalStateException Domain base directory is not a directory: %s
WFLYHC0099 java.lang.IllegalStateException Configuration directory does not exist: %s
WFLYHC0100 java.lang.IllegalStateException Domain data directory is not a directory: %s
WFLYHC0101 java.lang.IllegalStateException Could not create domain data directory: %s
WFLYHC0102 java.lang.IllegalStateException Domain content directory is not a directory: %s
WFLYHC0103 java.lang.IllegalStateException Could not create domain content directory: %s
WFLYHC0104 java.lang.IllegalStateException Log directory is not a directory: %s
WFLYHC0105 java.lang.IllegalStateException Could not create log directory: %s
WFLYHC0106 java.lang.IllegalStateException Servers directory is not a directory: %s
WFLYHC0107 java.lang.IllegalStateException Could not create servers directory: %s
WFLYHC0108 java.lang.IllegalStateException Domain temp directory does not exist: %s
WFLYHC0109 java.lang.IllegalStateException Could not create domain temp directory: %s
WFLYHC0110 java.lang.IllegalStateException Unable to connect due to SSL failure.
WFLYHC0111 java.lang.IllegalStateException Option '%s' already exists
WFLYHC0113 org.jboss.as.controller.OperationFailedException Host controller management version %s.%s is too old, Only %s.%s or higher are supported
WFLYHC0114 java.lang.IllegalStateException Failed to add extensions used by the domain. Failure description: %s
WFLYHC0115 java.lang.String Argument %s has no value. %s
WFLYHC0116 java.lang.IllegalStateException Cannot access S3 file: %s
WFLYHC0117 java.lang.IllegalStateException Failed to obtain domain controller data from S3 file
WFLYHC0118 java.io.IOException Cannot write domain controller data to S3 file: %s
WFLYHC0119 java.lang.IllegalStateException Cannot access S3 bucket '%s': %s
WFLYHC0120 java.lang.IllegalStateException Tried all domain controller discovery option(s) but unable to connect
WFLYHC0121 java.lang.IllegalStateException pre_signed_put_url and pre_signed_delete_url must have the same path
WFLYHC0122 java.lang.IllegalStateException pre_signed_put_url and pre_signed_delete_url must both be set or both unset
WFLYHC0123 java.lang.IllegalStateException pre-signed url %s must point to a file within a bucket
WFLYHC0124 java.lang.IllegalStateException pre-signed url %s is not a valid url
WFLYHC0125 java.lang.IllegalStateException pre-signed url %s may only have a subdirectory under a bucket
WFLYHC0126 java.lang.IllegalArgumentException Creating location-constrained bucket with unsupported calling-format
WFLYHC0127 java.lang.IllegalArgumentException Invalid location: %s
WFLYHC0128 java.lang.IllegalArgumentException Invalid bucket name: %s
WFLYHC0129 java.io.IOException bucket '%s' could not be accessed (rsp=%d (%s)). Maybe the bucket is owned by somebody else or the authentication failed
WFLYHC0130 java.io.IOException Unexpected response: %s
WFLYHC0131 java.lang.RuntimeException HTTP redirect support required
WFLYHC0132 java.lang.RuntimeException Unexpected error parsing bucket listing(s)
WFLYHC0133 java.lang.RuntimeException Couldn't initialize a SAX driver for the XMLReader
WFLYHC0134 java.lang.IllegalStateException Cannot instantiate discovery option class '%s': %s
WFLYHC0137 ERROR Could not write domain controller data to S3 file. Error was: %s
WFLYHC0138 ERROR Could not remove S3 file. Error was: %s
WFLYHC0140 java.lang.IllegalStateException Can't execute transactional operation '%s' from the secondary Host Controller
WFLYHC0142 ERROR Failed to apply domain-wide configuration from the domain controller
WFLYHC0143 ERROR Failed to apply domain-wide configuration from the Domain Controller. Operation outcome: %s. Failure description %s
WFLYHC0144 ERROR The host cannot start because it was started in running mode '%s' with no access to a local copy of the domain wide configuration policy, the '%s' attribute was set to '%s' and the domain wide configuration policy could not be obtained from the Domain Controller host. Startup will be aborted. Use the '%s' command line argument to start if you need to start without connecting to a domain controller connection.
WFLYHC0145 ERROR The host cannot start because it was started in running mode '%s' with no access to a local copy of the domain wide configuration policy, and the '%s' attribute was set to '%s'. Startup will be aborted. Use the '%s' command line argument to start in running mode '%s'.
WFLYHC0146 WARN Could not discover the domain controller using discovery option %s. Error was: %s
WFLYHC0147 WARN No domain controller discovery options remain.
WFLYHC0148 INFO Connected to the domain controller at %s
WFLYHC0149 INFO Option %s was set; obtaining domain-wide configuration from %s
WFLYHC0150 INFO Trying to reconnect to the domain controller.
WFLYHC0151 ERROR No domain controller discovery configuration was provided and the '%s' attribute was set to '%s'. Startup will be aborted. Use the %s command line argument to start in %s mode if you need to start without a domain controller connection and then use the management tools to configure one.
WFLYHC0152 INFO Server %s will be started with JVM launch command prefix '%s'
WFLYHC0153 java.io.IOException Channel closed
WFLYHC0157 java.lang.IllegalStateException Could not create domain auto-start directory: %s
WFLYHC0158 INFO Error persisting server autostart status
WFLYHC0159 java.lang.String Invalid discovery type %s
WFLYHC0160 java.lang.IllegalStateException Could not read or create the domain UUID in file: %s
WFLYHC0162 org.jboss.as.controller.OperationFailedException The binding name '%s' in socket binding group '%s' is not unique. Names must be unique across socket-binding, local-destination-outbound-socket-binding and remote-destination-outbound-socket-binding
WFLYHC0163 org.jboss.as.controller.OperationFailedException Profile '%s' is involved in a cycle
WFLYHC0164 org.jboss.as.controller.OperationFailedException Profile '%s' defines subsystem '%s' which is also defined in its ancestor profile '%s'. Overriding subsystems is not supported
WFLYHC0165 org.jboss.as.controller.OperationFailedException Socket binding group '%s' is involved in a cycle
WFLYHC0166 org.jboss.as.controller.OperationFailedException Socket binding group '%s' defines socket binding '%s' which is also defined in its ancestor socket binding group '%s'. Overriding socket bindings is not supported
WFLYHC0167 org.jboss.as.controller.OperationFailedException Profile '%s' includes profile '%s' and profile '%s'. Both these profiles define subsystem '%s', which is not supported
WFLYHC0168 org.jboss.as.controller.OperationFailedException Socket binding group '%s' includes socket binding group '%s' and socket binding group '%s'. Both these socket binding groups define socket binding '%s', which is not supported
WFLYHC0169 org.jboss.as.controller.OperationFailedException Reload into running mode is not supported with embedded host controller, admin-only=true must be specified.
WFLYHC0170 java.lang.String Error releasing shared lock after host registration for operationID: %s
WFLYHC0171 ERROR Failed getting the response from the suspend listener for server: %s
WFLYHC0172 ERROR Failed executing the suspend operation for server: %s
WFLYHC0173 org.jboss.as.controller.OperationFailedException It is not possible to use use-current-host-config=false while specifying a host-config
WFLYHC0174 org.jboss.as.controller.OperationFailedException It is not possible to use use-current-domain-config=false while specifying a domain-config
WFLYHC0175 org.jboss.as.controller.OperationFailedException domain-config '%s' specified for reload could not be found
WFLYHC0177 WARN No security realm defined for native management service; all access will be unrestricted.
WFLYHC0178 FATAL Aborting with exit code %d
WFLYHC0179 INFO ProcessController has signalled to shut down; shutting down
WFLYHC0180 INFO Shutting down in response to management operation '%s'
WFLYHC0181 INFO Host Controller shutdown has been requested via an OS signal
WFLYHC0182 INFO Timed out after %d ms awaiting server suspend response(s) for server: %s
WFLYHC0183 java.lang.String Timed out after %d ms awaiting server suspend response(s) for server: %s
WFLYHC0184 INFO %s interrupted awaiting server suspend response(s)
WFLYHC0185 java.lang.String %s interrupted awaiting server suspend response(s)
WFLYHC0186 java.lang.String Failed executing the suspend operation for server: %s
WFLYHC0187 java.lang.String Failed getting the response from the suspend listener for server: %s
WFLYHC0188 INFO Timed out after %d ms awaiting server resume response(s) for server: %s
WFLYHC0189 java.lang.String Timed out after %d ms awaiting server resume response(s) for server: %s
WFLYHC0190 INFO %s interrupted awaiting server resume response(s)
WFLYHC0191 java.lang.String %s interrupted awaiting server resume response(s)
WFLYHC0192 java.lang.String Failed executing the resume operation for server: %s
WFLYHC0193 java.lang.String Failed getting the response from the resume listener for server: %s
WFLYHC0194 ERROR Failed executing the resume operation for server: %s
WFLYHC0195 ERROR Failed getting the response from the resume listener for server: %s
WFLYHC0196 ERROR Cannot move the file %s to %s, unable to persist domain configuration changes: %s
WFLYHC0197 org.jboss.as.controller.OperationFailedException If attribute %s is defined an ssl-context must also be defined
WFLYHC0198 WARN Server '%s' is unstable and should be stopped or restarted. An unstable server may not stop normally, so the 'kill' operation may be required to terminate the server process.
WFLYHC0199 WARN Server '%s' (managed by host '%s') has not responded to an operation request within the configured timeout. This may mean the server has become unstable.
WFLYHC0200 ERROR Reporting instability of server '%s' to Domain Controller failed.
WFLYHC0201 java.lang.String Error synchronizing the host model with the domain controller model with failure : %s.
WFLYHC0202 WARN The domain configuration was successfully applied, but reload is required before changes become active.
WFLYHC0203 WARN The domain configuration was successfully applied, but restart is required before changes become active.
WFLYHC0204 WARN No logging configuration file could be found for the servers initial boot. Logging will not be configured until the logging subsystem is activated for the server %s
WFLYHC0205 ERROR An error occurred setting the -Dlogging.configuration property for server %s. Configuration path %s
WFLYHC0206 java.lang.IllegalStateException File %s already exists, you must use --remove-existing-domain-config to overwrite existing files.
WFLYHC0207 java.lang.IllegalStateException File %s already exists, you must use --remove-existing-host-config to overwrite existing files.
WFLYHC0208 org.jboss.as.controller.OperationFailedException A host (%s) has already been registered. You must shutdown this host before adding a new one.
WFLYHC0209 org.jboss.as.controller.OperationFailedException Host name may not be null.
WFLYHC0210 org.jboss.as.controller.OperationFailedException A secondary Host Controller may not be added using add(). Please add a host, omitting this parameter, and configure the remote domain controller using write-attribute.
WFLYHC0211 org.jboss.as.controller.OperationFailedException Boot configuration validation failed
WFLYHC0212 org.jboss.as.controller.OperationFailedException Fetch of missing configuration from the Domain Controller failed without explanation. Fetch operation outcome was %s
WFLYHC0213 java.lang.IllegalStateException Java home '%s' does not exist.
WFLYHC0214 java.lang.IllegalStateException Java home's bin '%s' does not exist. The home directory was determined to be %s.
WFLYHC0215 java.lang.IllegalStateException Could not find java executable under %s.
WFLYHC0216 org.jboss.as.controller.OperationFailedException The module option %s is not allowed.
WFLYHC0217 javax.xml.stream.XMLStreamException Security realms are no longer supported, please migrate references to them from the configuration.
WFLYHC0218 org.jboss.as.controller.OperationFailedException No %s installation has been prepared.
WFLYHC0219 java.security.GeneralSecurityException Authorization failed for '%s' attempting to connect as a domain server.

WFLYHEALTH

Code Level Return Type Message
WFLYHEALTH0001 INFO Activating Base Health Subsystem

WFLYIIOP

Code Level Return Type Message
WFLYIIOP0001 INFO Activating IIOP Subsystem
WFLYIIOP0002 ERROR Error fetching CSIv2Policy
WFLYIIOP0003 WARN Caught exception while encoding GSSUPMechOID
WFLYIIOP0004 ERROR Internal error
WFLYIIOP0005 ERROR Failed to create CORBA naming context
WFLYIIOP0006 WARN Unbind failed for %s
WFLYIIOP0007 ERROR Failed to obtain JSSE security domain with name %s
WFLYIIOP0008 INFO CORBA Naming Service started
WFLYIIOP0009 INFO CORBA ORB Service started
WFLYIIOP0010 WARN Compatibility problem: Class javax.rmi.CORBA.ClassDesc does not conform to the Java(TM) Language to IDL Mapping Specification (01-06-07), section 1.3.5.11
WFLYIIOP0011 WARN Could not deactivate IR object
WFLYIIOP0012 WARN Could not deactivate anonymous IR object
WFLYIIOP0013 org.jboss.as.controller.OperationFailedException SSL support has been enabled but no security domain or client/server SSL contexts have been specified
WFLYIIOP0014 java.lang.RuntimeException Unexpected exception
WFLYIIOP0015 org.omg.CORBA.NO_PERMISSION Unexpected ContextError in SAS reply
WFLYIIOP0016 org.omg.CORBA.MARSHAL Could not parse SAS reply: %s
WFLYIIOP0017 java.lang.RuntimeException Could not register initial reference for SASCurrent
WFLYIIOP0018 org.omg.CORBA.NO_PERMISSION SAS context does not exist
WFLYIIOP0019 org.omg.CORBA.NO_PERMISSION Could not decode initial context token
WFLYIIOP0020 org.omg.CORBA.NO_PERMISSION Could not decode target name in initial context token
WFLYIIOP0021 org.omg.CORBA.NO_PERMISSION Could not decode incoming principal name
WFLYIIOP0022 java.lang.RuntimeException Exception decoding context data in %s
WFLYIIOP0023 java.lang.IllegalArgumentException Batch size not numeric: %s
WFLYIIOP0024 javax.naming.NamingException Error getting binding list
WFLYIIOP0025 javax.naming.NamingException Error generating object via object factory
WFLYIIOP0026 javax.naming.ConfigurationException Error constructing context: either ORB or NamingContext must be supplied
WFLYIIOP0027 javax.naming.ConfigurationException %s does not name a NamingContext
WFLYIIOP0028 javax.naming.ConfigurationException Cannot convert IOR to NamingContext: %s
WFLYIIOP0029 javax.naming.ConfigurationException ORB.resolve_initial_references("NameService") does not return a NamingContext
WFLYIIOP0030 javax.naming.NamingException COS Name Service not registered with ORB under the name 'NameService'
WFLYIIOP0031 javax.naming.NamingException Cannot connect to ORB
WFLYIIOP0032 javax.naming.NamingException Invalid IOR or URL: %s
WFLYIIOP0033 javax.naming.NamingException Invalid object reference: %s
WFLYIIOP0034 javax.naming.ConfigurationException %s does not contain an IOR
WFLYIIOP0035 java.lang.IllegalArgumentException Only instances of org.omg.CORBA.Object can be bound
WFLYIIOP0036 javax.naming.NamingException No object reference bound for specified name
WFLYIIOP0037 javax.naming.InvalidNameException Invalid empty name
WFLYIIOP0038 javax.naming.InvalidNameException %s: unescaped \ at end of component
WFLYIIOP0039 javax.naming.InvalidNameException %s: Invalid character being escaped
WFLYIIOP0040 java.net.MalformedURLException Invalid %s URL: %s
WFLYIIOP0041 javax.naming.ConfigurationException Problem with PortableRemoteObject.toStub(); object not exported or stub not found
WFLYIIOP0042 javax.naming.ConfigurationException Cannot invoke javax.rmi.PortableRemoteObject.toStub(java.rmi.Remote)
WFLYIIOP0043 java.lang.IllegalStateException No method definition for javax.rmi.PortableRemoteObject.toStub(java.rmi.Remote)
WFLYIIOP0044 javax.naming.ConfigurationException Problem invoking javax.rmi.CORBA.Stub.connect()
WFLYIIOP0045 javax.naming.ConfigurationException Cannot invoke javax.rmi.CORBA.Stub.connect()
WFLYIIOP0046 java.lang.IllegalStateException No method definition for javax.rmi.CORBA.Stub.connect(org.omg.CORBA.ORB)
WFLYIIOP0047 java.net.MalformedURLException Invalid IIOP URL version: %s
WFLYIIOP0048 javax.naming.ConfigurationException javax.rmi packages not available
WFLYIIOP0049 java.net.MalformedURLException ISO-Latin-1 decoder unavailable
WFLYIIOP0050 java.net.MalformedURLException Invalid URI encoding: %s
WFLYIIOP0051 javax.naming.ConfigurationException Error configuring domain socket factory: failed to lookup JSSE security domain
WFLYIIOP0052 java.io.IOException keyManager[] is null for security domain %s
WFLYIIOP0053 java.io.IOException Failed to get SSL context
WFLYIIOP0054 org.jboss.msc.service.StartException Failed to start the JBoss Corba Naming Service
WFLYIIOP0055 java.lang.UnsupportedOperationException Foreign Transaction
WFLYIIOP0056 java.lang.RuntimeException Exception raised during encoding
WFLYIIOP0057 java.lang.RuntimeException Exception getting slot in TxServerInterceptor
WFLYIIOP0058 java.lang.RuntimeException Exception setting slot in TxServerInterceptor
WFLYIIOP0059 java.lang.IllegalArgumentException Cannot analyze a null class
WFLYIIOP0060 java.lang.IllegalArgumentException Bad type for a constant: %s
WFLYIIOP0061 java.lang.IllegalArgumentException Cannot analyze special class: %s
WFLYIIOP0062 java.lang.IllegalArgumentException Not an accessor: %s
WFLYIIOP0063 java.lang.IllegalArgumentException Not a class or interface: %s
WFLYIIOP0064 java.lang.IllegalArgumentException Class %s is not an interface
WFLYIIOP0065 java.lang.IllegalArgumentException Not a primitive type: %s
WFLYIIOP0066 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException Field %s of interface %s is a constant, but it is not primitive or String
WFLYIIOP0067 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException Exception type %s must be a checked exception class
WFLYIIOP0068 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException All interface methods must throw javax.rmi.RemoteException but method %s of interface %s does not
WFLYIIOP0069 java.lang.IllegalArgumentException Name cannot be null, empty or qualified
WFLYIIOP0070 java.lang.IllegalArgumentException Primitive types have no IR IDs
WFLYIIOP0071 java.lang.RuntimeException No SHA message digest available
WFLYIIOP0072 java.lang.RuntimeException Unknown primitive type: %s
WFLYIIOP0073 java.lang.IllegalArgumentException Cannot analyze java.lang.String: it is a special case
WFLYIIOP0074 java.lang.IllegalArgumentException Cannot analyze java.lang.Class: it is a special case
WFLYIIOP0075 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException Value type %s cannot implement java.rmi.Remote
WFLYIIOP0076 org.wildfly.iiop.openjdk.rmi.RMIIIOPViolationException Value type %s cannot be a proxy or inner class
WFLYIIOP0077 java.lang.RuntimeException Error loading class %s
WFLYIIOP0078 java.lang.RuntimeException No read method in helper class %s
WFLYIIOP0079 java.lang.RuntimeException No write method in helper class %s
WFLYIIOP0080 java.lang.RuntimeException Error unmarshaling %s
WFLYIIOP0081 java.lang.RuntimeException Error marshaling %s
WFLYIIOP0082 java.lang.RuntimeException Cannot obtain exception repository id for %s
WFLYIIOP0083 java.lang.RuntimeException Cannot marshal parameter: unexpected number of parameters
WFLYIIOP0084 org.omg.CORBA.BAD_INV_ORDER Cannot change RMI/IIOP mapping
WFLYIIOP0085 java.lang.RuntimeException Bad kind %d for TypeCode
WFLYIIOP0086 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Wrong interface repository
WFLYIIOP0087 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Duplicate repository name
WFLYIIOP0088 java.lang.IllegalArgumentException Invalid null class
WFLYIIOP0089 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Bad class %s for a constant
WFLYIIOP0090 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException TypeCode for class %s is unknown
WFLYIIOP0091 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException TypeCode for class %s already established
WFLYIIOP0092 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Name collision while creating package
WFLYIIOP0093 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Class %s is not an array class
WFLYIIOP0094 org.omg.CORBA.BAD_INV_ORDER Cannot destroy RMI/IIOP mapping
WFLYIIOP0095 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException Bad kind for super valuetype of %s
WFLYIIOP0096 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException ValueDef %s unable to resolve reference to implemented interface %s
WFLYIIOP0097 org.wildfly.iiop.openjdk.rmi.ir.IRConstructionException ValueDef %s unable to resolve reference to abstract base valuetype %s
WFLYIIOP0098 org.jboss.msc.service.StartException Failed to resolve initial reference %s
WFLYIIOP0099 org.jboss.msc.service.StartException Failed to create POA from parent
WFLYIIOP0100 org.jboss.msc.service.StartException Unable to instantiate POA: either the running ORB or the parent POA must be specified
WFLYIIOP0101 org.jboss.msc.service.StartException Failed to activate POA
WFLYIIOP0102 org.omg.CORBA.INTERNAL Caught exception destroying Iterator %s
WFLYIIOP0103 org.jboss.as.controller.OperationFailedException IOR settings imply ssl connections usage, but secure connections have not been configured
WFLYIIOP0104 java.lang.String Inconsistent transport-config configuration: %s is supported, please configure it to %s value
WFLYIIOP0105 java.lang.String Inconsistent transport-config configuration: %s is not supported, please remove it or configure it to none value
WFLYIIOP0106 java.lang.String Inconsistent transport-config configuration: %s is set to true, please configure %s as required
WFLYIIOP0109 WARN SSL socket is required by server but secure connections have not been configured
WFLYIIOP0110 java.lang.IllegalStateException Client requires SSL but server does not support it
WFLYIIOP0111 java.lang.String SSL has not been configured but ssl-port property has been specified - the connection will use clear-text protocol
WFLYIIOP0113 org.jboss.as.controller.OperationFailedException Authentication context has been defined but it is ineffective because the security initializer is not set to 'elytron'
WFLYIIOP0114 java.lang.String Elytron security initializer not supported in previous iiop-openjdk versions and can't be converted
WFLYIIOP0115 java.lang.IllegalStateException No IIOP socket bindings have been configured
WFLYIIOP0117 WARN CLEARTEXT in IIOP subsystem won't be used because server-requires-ssl parameter have been set to true
WFLYIIOP0118 java.lang.IllegalStateException Legacy security is no longer supported.
WFLYIIOP0119 org.jboss.as.controller.OperationFailedException The use of security realms at runtime is unsupported.
WFLYIIOP0120 org.jboss.as.controller.OperationFailedException The use of security domains at runtime is unsupported.

WFLYIM

Code Level Return Type Message
WFLYIM0000 java.util.zip.ZipException Zip entry %s is outside of the target dir %s.
WFLYIM0000 java.util.zip.ZipException The structure of directories and files in the .zip file is invalid. The '%s' directory cannot be found as a second-level entry in the extracted .zip file.
WFLYIM0001 org.jboss.as.controller.OperationFailedException There is an installation prepared and ready to be applied. The current prepared installation can be discarded by using the 'clean' operation.
WFLYIM0002 java.lang.RuntimeException Invalid status change found for the artifact: '%s'
WFLYIM0003 java.lang.RuntimeException Invalid status change found for the configuration change: '%s'
WFLYIM0004 org.jboss.as.controller.OperationFailedException Channel name is mandatory.
WFLYIM0005 org.jboss.as.controller.OperationFailedException No repositories have been defined in the '%s' channel.
WFLYIM0006 org.jboss.as.controller.OperationFailedException The '%s' repository in the channel does not have its URL defined.
WFLYIM0007 org.jboss.as.controller.OperationFailedException The repository URL '%s' for '%s' channel is invalid.
WFLYIM0008 org.jboss.as.controller.OperationFailedException The '%s' repository in the channel does not have its ID defined.
WFLYIM0009 org.jboss.as.controller.OperationFailedException The manifest GAV coordinate '%s' for '%s' channel is invalid.
WFLYIM0010 org.jboss.as.controller.OperationFailedException The manifest URL '%s' for '%s' channel is invalid.
WFLYIM0011 org.jboss.as.controller.OperationFailedException You cannot use the 'local-cache' option when the 'no-resolve-local-cache' option is enabled.
WFLYIM0012 org.jboss.as.controller.OperationFailedException You cannot use the 'maven-repo-file' option with the 'repositories' option because they are mutually exclusive.
WFLYIM0013 org.jboss.as.controller.OperationFailedException Invalid format for the repository URL: '%s'
WFLYIM0014 org.jboss.as.controller.OperationFailedException You cannot use the 'work-dir' option with the 'repositories' or 'maven-repo-file' options because they are mutually exclusive.
WFLYIM0015 org.jboss.as.controller.OperationFailedException Channel with name '%s' cannot be found.
WFLYIM0016 org.jboss.as.controller.OperationFailedException The manifest maven coordinates for '%s' are invalid. The expected maven coordinates for this manifest are GA (GroupId:ArtifactId).
WFLYIM0017 org.jboss.as.controller.OperationFailedException The manifest maven coordinates for '%s' are invalid. The expected maven coordinates for this manifest are GAV (GroupId:ArtifactId:Version) where Version is optional.
WFLYIM0018 java.lang.IllegalStateException Installation Manager Service is down.
WFLYIM0019 org.jboss.as.controller.OperationFailedException Operation has been cancelled.
WFLYIM0020 org.jboss.as.controller.OperationFailedException No custom patches installed found for the specified manifest maven coordinates: '%s'

WFLYIO

Code Level Return Type Message
WFLYIO001 INFO Worker '%s' has auto-configured to %d IO threads with %d max task threads based on your %d available processors
WFLYIO002 INFO Worker '%s' has auto-configured to %d IO threads based on your %d available processors
WFLYIO003 INFO Worker '%s' has auto-configured to %d max task threads based on your %d available processors
WFLYIO004 WARN Worker '%s' would auto-configure to %d max task threads based on %d available processors, however your system does not have enough file descriptors configured to support this configuration. It is likely you will experience application degradation unless you increase your file descriptor limit.
WFLYIO005 WARN Your system is configured with %d file descriptors, but your current application server configuration will require a minimum of %d (and probably more than that); attempting to adjust, however you should expect stability problems unless you increase this number
WFLYIO006 java.lang.String no metrics available
WFLYIO007 org.jboss.as.controller.OperationFailedException Unexpected bind address conflict in resource "%s" when attempting to establish binding for destination %s to %s: a binding of %s already existed
WFLYIO008 WARN The stack-size value of %d bytes for IO worker %s is low and may result in problems. A value of at least 150,000 is recommended.

WFLYJAR

Code Level Return Type Message
WFLYJAR0000 java.lang.String Set system property jboss.bind.address to the given value
WFLYJAR0000 java.lang.String Set system property jboss.bind.address. to the given value
WFLYJAR0000 java.lang.String Set a system property
WFLYJAR0000 java.lang.String Display this message and exit
WFLYJAR0000 java.lang.String Load system properties from the given url
WFLYJAR0000 java.lang.String Set system property jboss.default.multicast.address to the given value
WFLYJAR0000 java.lang.String Print version and exit
WFLYJAR0000 java.lang.String Activate the SecurityManager
WFLYJAR0000 java.lang.String Set a security property
WFLYJAR0000 java.lang.String Path to deployment artifact (war,jar,ear or exploded deployment dir) to deploy in hollow jar
WFLYJAR0000 java.lang.String Path to directory in which the server is installed. By default the server is installed in TEMP directory.
WFLYJAR0000 java.lang.String Display the content of the Galleon configuration used to build this bootable JAR
WFLYJAR0000 java.lang.String Path to a CLI script to execute when starting the Bootable JAR
WFLYJAR0001 DEBUG Shutting down
WFLYJAR0002 DEBUG Server stopped, exiting
WFLYJAR0003 DEBUG Server not yet stopped, waiting
WFLYJAR0004 DEBUG Null controller client, exiting
WFLYJAR0005 java.lang.RuntimeException Unexpected exception while shutting down server
WFLYJAR0006 INFO Deployed %s in server
WFLYJAR0007 INFO Installed server and application in %s, took %sms
WFLYJAR0008 INFO Server options: %s
WFLYJAR0009 DEBUG Deleting %s dir
WFLYJAR0010 java.lang.Exception Not an hollow jar, deployment already exists
WFLYJAR0011 java.lang.RuntimeException Unknown argument %s
WFLYJAR0012 java.lang.RuntimeException File %s doesn't exist
WFLYJAR0013 java.lang.RuntimeException Invalid argument %s, no value provided
WFLYJAR0014 java.lang.IllegalStateException The server is stopping and invocations on the ModelControllerClient are not available
WFLYJAR0015 java.lang.IllegalStateException The server is reloading and invocations on the ModelControllerClient are not yet available
WFLYJAR0016 java.lang.IllegalStateException The server is stopped and invocations on the ModelControllerClient are not available
WFLYJAR0017 java.lang.RuntimeException Cannot start server
WFLYJAR0018 java.lang.RuntimeException Cannot load module %s from: %s
WFLYJAR0019 WARN Cannot restart server, exiting
WFLYJAR0020 WARN Can't delete %s. Exception %s
WFLYJAR0021 WARN Cannot register JBoss Modules MBeans, %s
WFLYJAR0022 java.lang.IllegalStateException The PID file %s already exists. This may result in the install directory "%s" not being properly deleted.
WFLYJAR0023 WARN Failed to start the cleanup processor. This may result in the install directory "%s" not being properly deleted.
WFLYJAR0024 WARN The container has not properly shutdown within %ds. This may result in the install directory "%s" not being properly deleted.
WFLYJAR0025 DEBUG Failed to initialize a security provider. Reason: %s

WFLYJCA

Code Level Return Type Message
WFLYJCA0001 INFO Bound data source [%s]
WFLYJCA0002 INFO Bound Jakarta Connectors %s [%s]
WFLYJCA0003 WARN Unable to instantiate driver class "%s": %s
WFLYJCA0004 INFO Deploying JDBC-compliant driver %s (version %d.%d)
WFLYJCA0005 INFO Deploying non-JDBC-compliant driver %s (version %d.%d)
WFLYJCA0006 INFO Registered admin object at %s
WFLYJCA0007 INFO Registered connection factory %s
WFLYJCA0009 INFO Starting %s Subsystem (%s)
WFLYJCA0010 INFO Unbound data source [%s]
WFLYJCA0011 INFO Unbound Jakarta Connectors %s [%s]
WFLYJCA0012 WARN in standalone -ds.xml deployments aren't supported: Ignoring %s
WFLYJCA0015 org.jboss.as.controller.OperationFailedException the attribute driver-name (%s) cannot be different from driver resource name (%s)
WFLYJCA0016 WARN Method %s on DataSource class %s not found. Ignoring
WFLYJCA0017 DEBUG Forcing ironjacamar.xml descriptor to null
WFLYJCA0018 INFO Started Driver service with driver-name = %s
WFLYJCA0019 INFO Stopped Driver service with driver-name = %s
WFLYJCA0020 WARN Unsupported selector's option: %s
WFLYJCA0021 WARN Unsupported policy's option: %s
WFLYJCA0022 org.jboss.msc.service.StartException Failed to start JGroups channel %s for distributed workmanager %s
WFLYJCA0023 org.jboss.as.controller.OperationFailedException Cannot find WorkManager %s or it isn't a distributed workmanager. Only DWM can override configurations
WFLYJCA0024 org.jboss.msc.service.StartException Failed to start JGroups transport for distributed workmanager %s
WFLYJCA0025 org.jboss.as.controller.OperationFailedException Unsupported selector's option: %s
WFLYJCA0026 org.jboss.as.controller.OperationFailedException Unsupported policy's option: %s
WFLYJCA0027 WARN No ironjacamar.security defined for %s
WFLYJCA0028 WARN @ConnectionFactoryDefinition will have limited management: %s
WFLYJCA0029 WARN @AdministeredObjectDefinition will have limited management: %s
WFLYJCA0030 org.jboss.jca.deployers.common.DeployException unable to deploy
WFLYJCA0031 org.jboss.jca.deployers.common.DeployException unable to validate and deploy ds or xads
WFLYJCA0033 org.jboss.msc.service.StartException Error during the deployment of %s
WFLYJCA0034 java.lang.String Unable to instantiate driver class "%s". See log (WARN) for more details
WFLYJCA0035 java.lang.IllegalStateException Specified driver version doesn't match with actual driver version
WFLYJCA0036 java.lang.String Failed to create %s instance for [%s]%n reason: %s
WFLYJCA0037 java.lang.String failed to get metrics: %s
WFLYJCA0039 org.jboss.jca.deployers.common.DeployException failed to get url delimiter
WFLYJCA0040 java.lang.String failed to invoke operation: %s
WFLYJCA0041 java.lang.String Failed to load module for driver [%s]
WFLYJCA0042 java.lang.IllegalArgumentException failed to match pool. Check JndiName: %s
WFLYJCA0043 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse service xml [%s]
WFLYJCA0044 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process RA child archives for [%s]
WFLYJCA0045 java.lang.String failed to set attribute: %s
WFLYJCA0046 org.jboss.msc.service.StartException Failed to start RA deployment [%s]
WFLYJCA0047 java.lang.IllegalStateException Connection is not valid
WFLYJCA0049 java.lang.IllegalStateException Non-explicit JNDI bindings not supported
WFLYJCA0050 java.lang.String no metrics available
WFLYJCA0051 java.lang.IllegalArgumentException %s should be an annotation
WFLYJCA0052 java.lang.String %s is null
WFLYJCA0053 java.lang.String %s service [%s] is already started
WFLYJCA0054 java.lang.String %s service [%s] is not available
WFLYJCA0056 java.lang.IllegalStateException Service not started
WFLYJCA0058 java.lang.IllegalArgumentException %s is undefined
WFLYJCA0061 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to load native libraries
WFLYJCA0064 org.jboss.as.server.deployment.DeploymentUnitProcessingException Exception deploying datasource %s
WFLYJCA0065 java.lang.String No DataSource exists at address %s
WFLYJCA0066 java.lang.IllegalStateException Unknown attribute %s
WFLYJCA0067 java.lang.IllegalStateException Unknown operation %s
WFLYJCA0069 org.jboss.as.controller.OperationFailedException At least one xa-datasource-property is required for an xa-datasource
WFLYJCA0072 org.jboss.jca.deployers.common.DeployException Deployment %s failed
WFLYJCA0073 java.lang.String Failed to load module for RA [%s] Cause: %s
WFLYJCA0074 java.lang.NoSuchMethodException Method %s not found
WFLYJCA0075 java.lang.NoSuchMethodException Field %s not found
WFLYJCA0076 java.lang.IllegalArgumentException Unknown property resolution for property %s
WFLYJCA0077 org.jboss.as.controller.OperationFailedException At least one of ARCHIVE or MODULE is required
WFLYJCA0078 java.lang.String Rar are supported only in uncompressed form. Failed to load module for RA [%s]
WFLYJCA0079 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to deploy datasource %s because driver is not specified
WFLYJCA0080 org.jboss.as.controller.OperationFailedException RAR '%s' not yet deployed.
WFLYJCA0083 org.jboss.as.server.deployment.DeploymentUnitProcessingException Connection factory interface (%s) is incorrect for resource adapter '%s' while deploying %s
WFLYJCA0084 org.jboss.as.server.deployment.DeploymentUnitProcessingException Admin object declared for JCA 1.0 resource adapter '%s' while deploying %s
WFLYJCA0085 org.jboss.as.server.deployment.DeploymentUnitProcessingException Admin object class (%s) is incorrect for resource adapter '%s' while deploying %s
WFLYJCA0086 WARN Unable to find driver class name in "%s" jar
WFLYJCA0087 ERROR Unable to register recovery: %s (%s)
WFLYJCA0088 java.lang.String Attributes %s rejected. Must be true
WFLYJCA0089 WARN Exception during unregistering deployment
WFLYJCA0090 org.jboss.as.controller.OperationFailedException Jndi name shouldn't include '//' or end with '/'
WFLYJCA0091 WARN -ds.xml file deployments are deprecated. Support may be removed in a future version.
WFLYJCA0092 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYJCA0093 INFO The '%s' operation is deprecated. Use of the 'add' or 'remove' operations is preferred, or if required the 'write-attribute' operation can used to set the deprecated 'enabled' attribute
WFLYJCA0096 ERROR Error during recovery shutdown
WFLYJCA0097 WARN Exception while stopping resource adapter
WFLYJCA0098 INFO Bound non-transactional data source: %s
WFLYJCA0099 INFO Unbound non-transactional data source: %s
WFLYJCA0100 java.lang.UnsupportedOperationException Operation %s is not supported
WFLYJCA0101 org.jboss.as.controller.OperationFailedException Thread pool: %s(type: %s) can not be added for workmanager: %s, only one thread pool is allowed for each type.
WFLYJCA0102 org.jboss.as.controller.OperationFailedException Attribute %s can only be defined if %s is true
WFLYJCA0103 org.jboss.as.controller.OperationFailedException Attribute %s can only be defined if %s is undefined or false
WFLYJCA0104 java.lang.String Subject=%s Subject identity=%s
WFLYJCA0106 INFO Elytron handler handle: %s
WFLYJCA0107 java.lang.SecurityException Execution subject was not provided to the callback handler
WFLYJCA0108 java.lang.IllegalArgumentException Supplied callback doesn't contain a security domain reference
WFLYJCA0109 java.lang.UnsupportedOperationException Callback with security domain is required - use createCallbackHandler(Callback callback) instead
WFLYJCA0110 java.lang.IllegalStateException CredentialSourceSupplier is invalid for DSSecurity
WFLYJCA0111 java.lang.IllegalStateException WorkManager hasn't elytron-enabled flag set accordingly with RA one
WFLYJCA0112 java.lang.IllegalArgumentException Datasource %s is disabled
WFLYJCA0113 ERROR Unexcepted error during worker execution : %s
WFLYJCA0114 org.jboss.as.controller.OperationFailedException Failed to load datasource class: %s
WFLYJCA0115 java.lang.String Module for driver [%s] or one of it dependencies is missing: [%s]
WFLYJCA0116 java.lang.String Failed to load module for RA [%s] - the module or one of its dependencies is missing [%s]
WFLYJCA0117 org.jboss.as.controller.OperationFailedException %s is not a valid %s implementation
WFLYJCA0118 INFO Binding connection factory named %s to alias %s
WFLYJCA0119 INFO Unbinding connection factory named %s to alias %s
WFLYJCA0120 org.jboss.msc.service.StartException Unable to start the data source '%s' because there are no connection factories, either not defined or failed, please check log.
WFLYJCA0121 org.jboss.msc.service.StartException Unable to start the data source '%s' because there is more than one(%s) connection factory defined.
WFLYJCA0122 org.jboss.as.controller.OperationFailedException Thread pool name %s(type: %s) must match the workmanager name %s.
WFLYJCA0123 org.jboss.as.controller.OperationFailedException Connection definition %s from resource adapter %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0124 org.jboss.as.controller.OperationFailedException Datasource %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0125 org.jboss.as.server.deployment.DeploymentUnitProcessingException Datasource %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0126 org.jboss.as.server.deployment.DeploymentUnitProcessingException Connection definition for %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0127 java.lang.IllegalStateException Connection factory %s is configured to require the legacy security subsystem, which is not present
WFLYJCA0128 java.lang.IllegalStateException Legacy security is not available
WFLYJCA0129 org.jboss.as.controller.OperationFailedException Wrong module name %s
WFLYJCA0130 org.jboss.as.controller.OperationFailedException Report directory %s does not exist
WFLYJCA0131 org.jboss.as.controller.OperationFailedException Legacy security attribute %s is no longer supported. Please use Elytron configuration instead
WFLYJCA0132 java.lang.String Legacy security is no longer supported. Please use Elytron configuration instead

WFLYJDR

Code Level Return Type Message
WFLYJDR0000 java.lang.String Display this message and exit
WFLYJDR0000 java.lang.String hostname that the management api is bound to. (default: localhost)
WFLYJDR0000 java.lang.String port that the management api is bound to. (default: 9990)
WFLYJDR0000 java.lang.String Protocol that is used to connect. Can be remote, http or https (default: http)
WFLYJDR0000 java.lang.String Configuration file of the server if it is not running.
WFLYJDR0000 java.lang.String JBoss Diagnostic Reporter (JDR) is a subsystem built to collect information to aid in troubleshooting. The jdr script is a utility for generating JDR reports.
WFLYJDR0007 java.lang.String Could not create zipfile.
WFLYJDR0008 java.lang.String Could not configure JDR. At least one configuration step failed.
WFLYJDR0009 java.lang.String No JDR commands were loaded. Be sure that a valid Plugin class is specified in plugins.properties.
WFLYJDR0011 ERROR Could not find JDR properties file.
WFLYJDR0012 ERROR Could not create JDR properties file at %s

WFLYJMX

Code Level Return Type Message
WFLYJMX-001 java.lang.Error Invalid ObjectName: %s,%s; %s
WFLYJMX-001 java.lang.Error Invalid ObjectName: %s,%s,%s; %s
WFLYJMX0000 java.lang.String entry
WFLYJMX0000 java.lang.String An entry
WFLYJMX0000 java.lang.String The key
WFLYJMX0000 java.lang.String The value
WFLYJMX0000 java.lang.String A map
WFLYJMX0000 java.lang.String The map is indexed by 'key'
WFLYJMX0000 java.lang.String Complex type
WFLYJMX0000 java.lang.String A complex type
WFLYJMX0000 java.lang.String This mbean does not support expressions for attributes or operation parameters, even when supported by the underlying model. Instead the resolved attribute is returned, and the real typed value must be used when writing attributes/invoking operations.
WFLYJMX0000 java.lang.String This mbean supports raw expressions for attributes and operation parameters where supported by the underlying model. If no expression is used, the string representation is converted into the real attribute value.
WFLYJMX0000 java.lang.String To be able to set and read expressions go to %s
WFLYJMX0000 java.lang.String To read resolved values and to write typed attributes and use typed operation parameters go to %s
WFLYJMX0000 java.lang.String This attribute supports expressions
WFLYJMX0000 java.lang.String This attribute does not support expressions
WFLYJMX0000 java.lang.String A composite type representing a property
WFLYJMX0000 java.lang.String The property name
WFLYJMX0000 java.lang.String The property value
WFLYJMX0004 WARN No ObjectName available to unregister
WFLYJMX0005 ERROR Failed to unregister [%s]
WFLYJMX0006 WARN is no longer supporting. should be used instead to allow remote connections via JBoss Remoting.
WFLYJMX0007 javax.management.AttributeNotFoundException Could not find any attribute matching: %s
WFLYJMX0008 javax.management.AttributeNotFoundException Attribute %s is not writable
WFLYJMX0009 java.lang.RuntimeException Could not create ObjectName for address %s from string %s
WFLYJMX0010 javax.management.ReflectionException Could not set %s
WFLYJMX0012 java.lang.IllegalArgumentException %s and %s have different lengths
WFLYJMX0013 javax.management.InvalidAttributeValueException Bad type for '%s'
WFLYJMX0014 java.lang.IllegalArgumentException Invalid key %s for %s
WFLYJMX0015 java.lang.Error Invalid ObjectName: %s; %s
WFLYJMX0017 javax.management.InstanceNotFoundException No MBean found with name %s
WFLYJMX0018 org.jboss.msc.service.StartException Failed to register mbean [%s]
WFLYJMX0019 javax.management.InstanceNotFoundException No operation called '%s'
WFLYJMX0020 javax.management.MBeanException No operation called '%s' at %s
WFLYJMX0022 javax.management.InstanceNotFoundException No registration found for path address %s
WFLYJMX0024 java.lang.RuntimeException Unknown type %s
WFLYJMX0025 java.lang.IllegalArgumentException Unknown value %s
WFLYJMX0026 java.lang.IllegalStateException Need the name parameter for wildcard add
WFLYJMX0029 java.lang.IllegalArgumentException Unknown domain: %s
WFLYJMX0030 java.lang.IllegalArgumentException Expression can not be converted into target type %s
WFLYJMX0031 java.lang.IllegalArgumentException Unknown child %s
WFLYJMX0032 java.lang.IllegalArgumentException ObjectName cannot be null
WFLYJMX0036 java.lang.IllegalStateException There is no handler called '%s'
WFLYJMX0037 javax.management.JMRuntimeException Unauthorized access
WFLYJMX0038 javax.management.JMRuntimeException Not authorized to write attribute: '%s'
WFLYJMX0039 javax.management.JMRuntimeException Not authorized to read attribute: '%s'
WFLYJMX0040 javax.management.JMRuntimeException Not authorized to invoke operation: '%s'
WFLYJMX0041 javax.management.NotCompliantMBeanException You can't create mbeans under the reserved domain '%s'
WFLYJMX0042 javax.management.OperationsException Don't know how to deserialize
WFLYJMX0043 java.lang.UnsupportedOperationException %s is not supported
WFLYJMX0044 java.lang.String You can't register mbeans under the reserved domain '%s'
WFLYJMX0045 java.lang.String You can't unregister mbeans under the reserved domain '%s'
WFLYJMX0046 javax.management.RuntimeOperationsException The ObjectName coming from MBeanRegistration.preRegister() '%s' is in a reserved JMX domain
WFLYJMX0047 ERROR An error happened unregistering the '%s' MBean registered in a reserved JMX domain
WFLYJMX0048 java.lang.UnsupportedOperationException Add notification listener using ObjectName %s is not supported
WFLYJMX0049 java.lang.UnsupportedOperationException Remove notification listener using ObjectName %s is not supported
WFLYJMX0050 java.lang.UnsupportedOperationException Add notification listener using ObjectName %s is not supported
WFLYJMX0051 java.lang.UnsupportedOperationException Remove notification listener using ObjectName %s is not supported

WFLYJPA

Code Level Return Type Message
WFLYJPA0001 WARN Duplicate Persistence Unit definition for %s in application. One of the duplicate persistence.xml should be removed from the application. Application deployment will continue with the persistence.xml definitions from %s used. The persistence.xml definitions from %s will be ignored.
WFLYJPA0002 INFO Read persistence.xml for %s
WFLYJPA0003 INFO Starting %s Service '%s'
WFLYJPA0004 INFO Stopping %s Service '%s'
WFLYJPA0006 ERROR Could not load default persistence provider module.
WFLYJPA0007 ERROR Failed to stop persistence unit service %s
WFLYJPA0010 INFO Starting Persistence Unit (phase %d of 2) Service '%s'
WFLYJPA0011 INFO Stopping Persistence Unit (phase %d of 2) Service '%s'
WFLYJPA0012 WARN Unexpected problem gathering statistics
WFLYJPA0015 java.lang.IllegalStateException Container managed entity manager can only be closed by the container (will happen when @remove method is invoked on containing SFSB)
WFLYJPA0017 java.lang.IllegalStateException Container managed entity manager can only be closed by the container (auto-cleared at tx/invocation end and closed when owning component is closed.)
WFLYJPA0018 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not create instance of adapter class '%s'
WFLYJPA0019 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not deploy application packaged persistence provider '%s'
WFLYJPA0020 java.lang.RuntimeException Couldn't get Hibernate session factory from entity manager
WFLYJPA0021 java.lang.String Cannot inject RESOURCE_LOCAL container managed EntityManagers using @PersistenceContext
WFLYJPA0025 java.lang.RuntimeException Couldn't load %s from Jakarta Persistence modules classloader
WFLYJPA0027 org.jboss.as.server.deployment.DeploymentUnitProcessingException Persistence provider module load error %s (class %s)
WFLYJPA0029 org.jboss.as.server.deployment.DeploymentUnitProcessingException Cannot specify both %s (%s) and %s (%s) in %s for %s
WFLYJPA0030 jakarta.ejb.EJBException Found extended persistence context in SFSB invocation call stack but that cannot be used because the transaction already has a transactional context associated with it. This can be avoided by changing application code, either eliminate the extended persistence context or the transactional context. See JPA spec 2.0 section 7.6.3.1. Scoped persistence unit name=%s, persistence context already in transaction =%s, extended persistence context =%s.
WFLYJPA0031 java.lang.RuntimeException Could not find child '%s' on '%s'
WFLYJPA0032 java.lang.String Class level %s annotation on class %s must provide a %s
WFLYJPA0033 java.lang.String Can't find a persistence unit named %s in %s
WFLYJPA0034 java.lang.IllegalArgumentException Can't find a persistence unit named %s#%s at %s
WFLYJPA0036 java.lang.IllegalStateException An error occurred while getting the transaction associated with the current thread: %s
WFLYJPA0037 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get adapter for persistence provider '%s'
WFLYJPA0038 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to add persistence unit service for %s
WFLYJPA0040 java.lang.String Failed to parse %s
WFLYJPA0041 java.lang.RuntimeException Can only inject from a Hibernate EntityManagerFactoryImpl
WFLYJPA0043 java.lang.IllegalArgumentException Persistence unit name (%s) contains illegal '%s' character
WFLYJPA0044 java.lang.IllegalArgumentException jboss.as.jpa.scopedname hint (%s) contains illegal '%s' character
WFLYJPA0048 java.lang.RuntimeException Persistence provider adapter module (%s) has more than one adapter
WFLYJPA0053 java.lang.RuntimeException Internal %s error, null %s passed in
WFLYJPA0057 jakarta.persistence.PersistenceException PersistenceProvider '%s' not found
WFLYJPA0058 java.lang.RuntimeException Could not find relative path: %s
WFLYJPA0059 java.lang.String %s injection target is invalid. Only setter methods are allowed: %s
WFLYJPA0060 jakarta.persistence.TransactionRequiredException Transaction is required to perform this operation (either use a transaction or extended persistence context)
WFLYJPA0061 java.lang.IllegalArgumentException Persistence unitName was not specified and there are %d persistence unit definitions in application deployment %s. Either change the application deployment to have only one persistence unit definition or specify the unitName for each reference to a persistence unit.
WFLYJPA0062 java.lang.RuntimeException Could not create instance of persistence provider class %s
WFLYJPA0063 java.lang.RuntimeException internal error, the number of stateful session beans (%d) associated with an extended persistence context (%s) cannot be a negative number.
WFLYJPA0064 java.lang.IllegalStateException Jakarta Transactions transaction already has a 'SynchronizationType.UNSYNCHRONIZED' persistence context (EntityManager) joined to it but a component with a 'SynchronizationType.SYNCHRONIZED' is now being used. Change the calling component code to join the persistence context (EntityManager) to the transaction or change the called component code to also use 'SynchronizationType.UNSYNCHRONIZED'. See JPA spec 2.1 section 7.6.4.1. Scoped persistence unit name=%s.
WFLYJPA0065 java.lang.UnsupportedOperationException Resources of type %s cannot be registered
WFLYJPA0066 java.lang.UnsupportedOperationException Resources of type %s cannot be removed
WFLYJPA0067 java.lang.RuntimeException Classloader '%s' has more than one Persistence provider adapter
WFLYJPA0069 org.jboss.as.server.deployment.DeploymentUnitProcessingException Persistence provider adapter module load error %s
WFLYJPA0070 java.lang.IllegalStateException A container-managed extended persistence context can only be initiated within the scope of a stateful session bean (persistence unit '%s').
WFLYJPA0071 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment '%s' specified more than one Hibernate Search module name ('%s','%s')
WFLYJPA0073 java.lang.IllegalStateException Transformation of class %s failed
WFLYJPA0074 org.jboss.as.server.deployment.DeploymentUnitProcessingException Persistence provider integrator module load error for %s

WFLYJSF

Code Level Return Type Message
WFLYJSF0001 WARN WildFlyConversationAwareViewHandler was improperly initialized. Expected ViewHandler parent.
WFLYJSF0002 ERROR Could not load Jakarta Server Faces managed bean class: %s
WFLYJSF0003 ERROR Jakarta Server Faces managed bean class %s has no default constructor
WFLYJSF0004 ERROR Failed to parse %s, Jakarta Server Faces artifacts defined in this file will not be available
WFLYJSF0005 WARN Unknown Jakarta Server Faces version '%s'. Default version '%s' will be used instead.
WFLYJSF0006 WARN Jakarta Server Faces version slot '%s' is missing from module %s
WFLYJSF0007 INFO Activated the following Jakarta Server Faces Implementations: %s
WFLYJSF0008 java.lang.String Failed to load annotated class: %s
WFLYJSF0009 java.lang.String Annotation %s in class %s is only allowed on classes
WFLYJSF0013 java.lang.String @ManagedBean is only allowed at class level %s
WFLYJSF0014 org.jboss.as.server.deployment.DeploymentUnitProcessingException Default Jakarta Server Faces implementation slot '%s' is invalid
WFLYJSF0016 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to inject Jakarta Server Faces from slot %s
WFLYJSF0017 DEBUG Faces 1.2 classes detected. Using org.jboss.as.jsf.injection.weld.legacy.WeldApplicationFactoryLegacy.
WFLYJSF0018 DEBUG Faces 1.2 classes not detected. Using org.jboss.as.jsf.injection.weld.WeldApplicationFactory.
WFLYJSF0019 INFO Jakarta Server Faces artifact %s with class %s has no default constructor so it will not be considered for injection
WFLYJSF0020 WARN Lazy bean validation was enabled. This can result in missing @PreDestroy events when distributed web sessions expire.

WFLYJWT

Code Level Return Type Message
WFLYJWT0001 INFO Activating MicroProfile JWT Subsystem
WFLYJWT0002 WARN @LoginConfig annotation detected on invalid target "%s".
WFLYJWT0003 org.jboss.as.server.deployment.DeploymentUnitProcessingException No `authMethod` specified on the @LoginConfig annotation.

WFLYLOG

Code Level Return Type Message
WFLYLOG-001 java.lang.IllegalArgumentException Expected '%s' or '%s' next in filter expression
WFLYLOG0006 ERROR Failed to close resource %s
WFLYLOG0007 WARN The attribute %s could not be set as it is not a configurable property value.
WFLYLOG0008 java.lang.String The path manager service does not appear to be started. Any changes may be lost as a result of this.
WFLYLOG0010 WARN Logging profile '%s' was specified for deployment '%s' but was not found. Using system logging configuration.
WFLYLOG0011 WARN The configuration file in '%s' appears to be a J.U.L. configuration file. The log manager does not allow this type of configuration file.
WFLYLOG0012 WARN Replacing handler '%s' during add operation. Either the handler type or the module name differs from the initial configuration.
WFLYLOG0013 WARN A configurator class, '%s', is not a known configurator and will be replaced.
WFLYLOG0014 ERROR The log context (%s) could not be removed for deployment %s
WFLYLOG0015 WARN The per-logging deployment property (%s) has been deprecated. Please use the %s attribute to enable/disable per-deployment logging.
WFLYLOG0016 WARN The per-logging deployment property (%s) is being ignored because the attribute %s has been set to ignore configuration files in the deployment %s.
WFLYLOG0019 java.lang.IllegalArgumentException Failed to load module '%s' for %s '%s'
WFLYLOG0021 java.lang.String Class '%s' could not be found.
WFLYLOG0023 java.lang.String Handler %s is already assigned.
WFLYLOG0025 java.lang.String Filter %s is invalid
WFLYLOG0026 java.lang.String Log level %s is invalid.
WFLYLOG0027 java.lang.String Overflow action %s is invalid.
WFLYLOG0028 java.lang.String Invalid size %s
WFLYLOG0035 java.lang.String Logger '%s' was not found.
WFLYLOG0039 java.lang.String An absolute path (%s) cannot be specified for relative-to.
WFLYLOG0041 java.lang.String The suffix (%s) is invalid. A suffix must be a valid date format.
WFLYLOG0042 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to configure logging using '%s' configuration file.
WFLYLOG0043 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error occurred while searching for logging configuration files.
WFLYLOG0044 org.jboss.as.controller.OperationFailedException Handler %s is attached to the following handlers and cannot be removed; %s
WFLYLOG0045 org.jboss.as.controller.OperationFailedException Handler %s is attached to the following loggers and cannot be removed; %s
WFLYLOG0046 java.lang.String Cannot add handler (%s) to itself
WFLYLOG0047 java.lang.IllegalStateException The handler is closed, cannot publish to a closed handler
WFLYLOG0048 java.lang.String Configuration for handler '%s' could not be found.
WFLYLOG0049 java.lang.String Configuration for logger '%s' could not be found.
WFLYLOG0050 java.lang.UnsupportedOperationException Method %s on class %s is not supported
WFLYLOG0051 java.lang.RuntimeException Failed to write configuration file %s
WFLYLOG0061 java.lang.String Formatter '%s' is not found
WFLYLOG0070 java.lang.IllegalArgumentException Truncated filter expression string
WFLYLOG0071 java.lang.IllegalArgumentException Invalid escape found in filter expression string
WFLYLOG0072 org.jboss.as.controller.OperationFailedException Filter '%s' is not found
WFLYLOG0073 java.lang.IllegalArgumentException Expected identifier next in filter expression
WFLYLOG0074 java.lang.IllegalArgumentException Expected string next in filter expression
WFLYLOG0075 java.lang.IllegalArgumentException Expected '%s' next in filter expression
WFLYLOG0076 java.lang.IllegalArgumentException Unexpected end of filter expression
WFLYLOG0078 java.lang.IllegalStateException The logging subsystem requires the log manager to be org.jboss.logmanager.LogManager. The subsystem has not be initialized and cannot be used. To use JBoss Log Manager you must add the system property "java.util.logging.manager" and set it to "org.jboss.logmanager.LogManager"
WFLYLOG0079 java.lang.RuntimeException Failed to read the log file '%s'
WFLYLOG0080 org.jboss.as.controller.registry.Resource$NoSuchResourceException File '%s' was not found and cannot be found in the %s directory.
WFLYLOG0081 org.jboss.as.controller.OperationFailedException File '%s' is not allowed to be read.
WFLYLOG0082 java.lang.String The suffix (%s) can not contain seconds or milliseconds.
WFLYLOG0083 org.jboss.as.controller.OperationFailedException Path '%s' is a directory and cannot be used as a log file.
WFLYLOG0084 java.lang.UnsupportedOperationException Resources of type %s cannot be registered
WFLYLOG0085 java.lang.UnsupportedOperationException Resources of type %s cannot be removed
WFLYLOG0086 java.lang.IllegalArgumentException Could not determine deployment name from the address %s.
WFLYLOG0087 ERROR Failed to process logging directory %s. Log files cannot be listed.
WFLYLOG0088 ERROR Could not determine %s had any children resources.
WFLYLOG0089 WARN The log manager check was skipped and the log manager system property, "java.util.logging.manager", does not appear to be set to "org.jboss.logmanager.LogManager". The current value is "%s". Some behavior of the logged output such as MDC and NDC may not work as expected.
WFLYLOG0090 WARN The following path expressions could not be resolved while attempting to determine which log files are available to be read: %s
WFLYLOG0091 org.jboss.as.controller.OperationFailedException Exception output type %s is invalid.
WFLYLOG0092 org.jboss.as.controller.OperationFailedException Invalid type found. Expected %s but found %s.
WFLYLOG0093 org.jboss.as.controller.OperationFailedException Failed to configure SSL context for %s %s.
WFLYLOG0094 org.jboss.as.controller.OperationFailedException Formatter name cannot end with '-wfcore-pattern-formatter'
WFLYLOG0095 org.jboss.as.controller.OperationFailedException The name %s cannot be used as a filter name as it is a reserved filter name. Reserved names are: %s
WFLYLOG0096 org.jboss.as.controller.OperationFailedException The name %s cannot be used as a filter name as it starts with an invalid character %s
WFLYLOG0097 org.jboss.as.controller.OperationFailedException The name %s cannot be used as a filter name as it contains an invalid character %s
WFLYLOG0099 WARN Usage of a log4j appender (%s) found in a custom-handler. Support for using appenders as custom handlers has been deprecated and will be removed in a future release.
WFLYLOG0100 WARN Usage of a log4j configuration file (%s) was found in deployment %s. Support for log4j configuration files in deployments has been deprecated and will be removed in a future release.

WFLYMAIL

Code Level Return Type Message
WFLYMAIL0001 INFO Bound mail session [%s]
WFLYMAIL0002 INFO Unbound mail session [%s]
WFLYMAIL0003 DEBUG Removed mail session [%s]
WFLYMAIL0004 org.jboss.msc.service.StartException No outbound socket binding configuration '%s' is available.
WFLYMAIL0009 WARN Host name [%s] could not be resolved!

WFLYMETRICS

Code Level Return Type Message
WFLYMETRICS0001 INFO Activating Base Metrics Subsystem
WFLYMETRICS0002 java.lang.IllegalArgumentException Failed to initialize metrics from JMX MBeans
WFLYMETRICS0003 WARN Unable to read attribute %s on %s: %s.
WFLYMETRICS0004 WARN Unable to convert attribute %s on %s to Double value.
WFLYMETRICS0005 ERROR Malformed name.

WFLYMMTREXT

Code Level Return Type Message
WFLYMMTREXT0001 INFO Activating Micrometer Subsystem
WFLYMMTREXT0002 INFO Micrometer Subsystem is processing deployment
WFLYMMTREXT0003 DEBUG The deployment does not have Jakarta Contexts and Dependency Injection enabled. Skipping Micrometer integration.
WFLYMMTREXT0004 DEBUG Deployment %s requires use of the '%s' capability but it is not currently registered
WFLYMMTREXT0005 WARN Unable to read attribute %s on %s: %s.
WFLYMMTREXT0006 WARN Unable to convert attribute %s on %s to Double value.
WFLYMMTREXT0007 ERROR Malformed name.
WFLYMMTREXT0008 java.lang.IllegalArgumentException Failed to initialize metrics from JMX MBeans
WFLYMMTREXT0009 java.lang.IllegalArgumentException An unsupported metric type was found: %s
WFLYMMTREXT0010 INFO Not activating Micrometer Subsystem
WFLYMMTREXT0011 WARN Micrometer has been enabled, but no endpoint has been configured. A No-op metrics registry has been configured.

WFLYMODCLS

Code Level Return Type Message
WFLYMODCLS0001 ERROR Error adding metrics.
WFLYMODCLS0004 ERROR Mod_cluster requires Advertise but Multicast interface is not available.
WFLYMODCLS0005 WARN No mod_cluster load balance factor provider specified for proxy '%s'! Using load balance factor provider with constant factor of '1'.
WFLYMODCLS0006 ERROR Error applying properties to load metric class '%s'. Metric will not be loaded.
WFLYMODCLS0011 java.lang.String Virtual host '%s' or context '%s' not found.
WFLYMODCLS0019 java.lang.IllegalArgumentException '%s' is not a valid value for excluded-contexts.
WFLYMODCLS0021 WARN Value 'ROOT' for excluded-contexts is deprecated, to exclude the root context use '/' instead.
WFLYMODCLS0023 ERROR Error loading module '%s' to load custom metric from.
WFLYMODCLS0025 WARN The '%s' element is no longer supported and will be ignored.
WFLYMODCLS0026 WARN Attribute '%s' of element '%s' is no longer supported and will be ignored.

WFLYMPFTEXT

Code Level Return Type Message
WFLYMPFTEXT0001 INFO Activating MicroProfile Fault Tolerance subsystem.
WFLYMPFTEXT0002 INFO MicroProfile Fault Tolerance subsystem with use '%s' metrics provider.

WFLYMPHEALTH

Code Level Return Type Message
WFLYMPHEALTH0001 INFO Activating MicroProfile Health Subsystem
WFLYMPHEALTH0002 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered
WFLYMPHEALTH0003 WARN Reporting health down status: %s

WFLYMPMETRICS

Code Level Return Type Message
WFLYMPMETRICS0010 org.jboss.as.controller.OperationFailedException The migrate operation cannot be performed. The server must be in admin-only mode.
WFLYMPMETRICS0011 java.lang.String Migration failed. See results for more details.

WFLYMPOAI

Code Level Return Type Message
WFLYMPOAI0001 INFO Activating MicroProfile OpenAPI Subsystem
WFLYMPOAI0002 java.lang.IllegalArgumentException Failed to load OpenAPI '%s' from deployment '%s'
WFLYMPOAI0003 WARN MicroProfile OpenAPI endpoint already registered for host '%s'. Skipping OpenAPI documentation of '%s'.
WFLYMPOAI0004 INFO Registered MicroProfile OpenAPI endpoint '%s' for host '%s'
WFLYMPOAI0005 INFO Unregistered MicroProfile OpenAPI endpoint '%s' for host '%s'
WFLYMPOAI0006 WARN §5.1 of MicroProfile OpenAPI specification requires that the endpoint be accessible via %2$s, but no such listeners exists for server '%1$s'.
WFLYMPOAI0007 WARN §5.1 of MicroProfile OpenAPI specification requires documentation to be available at '%3$s', but '%1$s' is configured to use '%2$s'
WFLYMPOAI0008 INFO MicroProfile OpenAPI documentation disabled for '%s'

WFLYMPTEL

Code Level Return Type Message
WFLYMPTEL0001 INFO Activating MicroProfile Telemetry Subsystem
WFLYMPTEL0002 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered

WFLYMSGAMQ

Code Level Return Type Message
WFLYMSGAMQ0001 INFO AIO wasn't located on this platform, it will fall back to using pure Java NIO.
WFLYMSGAMQ0002 INFO Bound messaging object to jndi name %s
WFLYMSGAMQ0003 ERROR Exception while stopping Jakarta Messaging server
WFLYMSGAMQ0004 WARN Failed to destroy %s: %s
WFLYMSGAMQ0005 ERROR %s caught exception attempting to revert operation %s at address %s
WFLYMSGAMQ0006 INFO Unbound messaging object to jndi name %s
WFLYMSGAMQ0007 ERROR Could not close file %s
WFLYMSGAMQ0008 WARN Failed to unbind messaging object bound to jndi name %s in %d %s
WFLYMSGAMQ0011 INFO Started %s %s
WFLYMSGAMQ0012 INFO Stopped %s %s
WFLYMSGAMQ0015 WARN Ignoring %s property that is not a known property for pooled connection factory.
WFLYMSGAMQ0016 INFO Registered HTTP upgrade for %s protocol handled by %s acceptor
WFLYMSGAMQ0018 WARN No connectors were explicitly defined for the pooled connection factory %s. Using %s as the connector.
WFLYMSGAMQ0022 java.lang.IllegalArgumentException Cannot bind a null or empty string as jndi name
WFLYMSGAMQ0025 java.lang.IllegalArgumentException Cannot unbind a null or empty string as jndi name
WFLYMSGAMQ0026 java.lang.String A child resource of type %1$s already exists; the messaging subsystem only allows a single resource of type %1$s
WFLYMSGAMQ0027 java.lang.IllegalStateException Connector %s not defined
WFLYMSGAMQ0028 org.jboss.msc.service.StartException Failed to create %s
WFLYMSGAMQ0029 org.jboss.msc.service.StartException Failed to find SocketBinding for broadcast binding: %s
WFLYMSGAMQ0030 org.jboss.msc.service.StartException Failed to find SocketBinding for connector: %s
WFLYMSGAMQ0031 org.jboss.msc.service.StartException Failed to find SocketBinding for discovery binding: %s
WFLYMSGAMQ0032 java.lang.RuntimeException Failed to shutdown %s server
WFLYMSGAMQ0033 org.jboss.msc.service.StartException Failed to start service
WFLYMSGAMQ0036 java.lang.String Illegal value %s for element %s
WFLYMSGAMQ0037 java.lang.UnsupportedOperationException Resource is immutable
WFLYMSGAMQ0038 java.lang.String %s is invalid
WFLYMSGAMQ0039 java.lang.IllegalStateException Attribute %s has unexpected type %s
WFLYMSGAMQ0042 java.lang.IllegalStateException Service %s is not in state %s, it is in state %s
WFLYMSGAMQ0043 java.lang.String JNDI name %s is already registered
WFLYMSGAMQ0045 java.lang.String %s is required
WFLYMSGAMQ0046 java.lang.String Either %s or %s is required
WFLYMSGAMQ0047 java.lang.IllegalArgumentException %s is null
WFLYMSGAMQ0050 java.lang.IllegalStateException Read support for attribute %s was not properly implemented
WFLYMSGAMQ0052 java.lang.IllegalStateException Support for operation %s was not properly implemented
WFLYMSGAMQ0053 java.lang.UnsupportedOperationException Runtime handling for %s is not implemented
WFLYMSGAMQ0054 org.jboss.as.controller.OperationFailedException No ActiveMQ Server is available under name %s
WFLYMSGAMQ0055 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not parse file %s
WFLYMSGAMQ0056 java.lang.IllegalStateException Handler cannot handle operation %s
WFLYMSGAMQ0057 java.lang.String No message destination registered at address %s
WFLYMSGAMQ0058 java.lang.IllegalStateException SecurityDomainContext has not been set
WFLYMSGAMQ0060 org.jboss.as.controller.OperationFailedException Failed to recover %s
WFLYMSGAMQ0063 java.lang.UnsupportedOperationException Resources of type %s cannot be registered
WFLYMSGAMQ0064 java.lang.UnsupportedOperationException Resources of type %s cannot be removed
WFLYMSGAMQ0066 java.lang.String Resource at the address %s can not be managed, the server is in backup mode
WFLYMSGAMQ0067 org.jboss.as.controller.OperationFailedException The broadcast group '%s' defines reference to nonexistent connector '%s'. Available connectors '%s'.
WFLYMSGAMQ0068 jakarta.jms.IllegalStateRuntimeException It is not permitted to call this method on injected JMSContext (see Jakarta Messaging 2.0 spec, §12.4.5).
WFLYMSGAMQ0071 WARN There is no resource matching the expiry-address %s for the address-settings %s, expired messages from destinations matching this address-setting will be lost!
WFLYMSGAMQ0072 WARN There is no resource matching the dead-letter-address %s for the address-settings %s, undelivered messages from destinations matching this address-setting will be lost!
WFLYMSGAMQ0073 java.lang.String Can not remove JNDI name %s. The resource must have at least one JNDI name
WFLYMSGAMQ0075 INFO AIO wasn't located on this platform, it will fall back to using pure Java NIO. Your platform is Linux, install LibAIO to enable the AIO journal and achieve optimal performance.
WFLYMSGAMQ0076 org.jboss.as.controller.OperationFailedException Parameter %s contains duplicate elements [%s]
WFLYMSGAMQ0077 org.jboss.as.controller.OperationFailedException Can not remove unknown entry %s
WFLYMSGAMQ0078 org.jboss.as.controller.OperationFailedException Only one %s child resource is allowed, found children: %s
WFLYMSGAMQ0079 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYMSGAMQ0080 org.jboss.msc.service.StartException Discovery group %s is not defined
WFLYMSGAMQ0081 org.jboss.msc.service.StartException Unsupported type of broadcast group configuration for legacy resource: %s
WFLYMSGAMQ0082 org.jboss.msc.service.StartException Unsupported type of connector factory for legacy resource: %s
WFLYMSGAMQ0083 org.jboss.as.controller.OperationFailedException The %s operation can not be performed: the server must be in %s mode
WFLYMSGAMQ0084 org.jboss.as.controller.OperationFailedException The server does not define any in-vm connector. One is required to be able to import a journal
WFLYMSGAMQ0085 org.jboss.as.controller.OperationFailedException Unable to load class %s from module %s
WFLYMSGAMQ0086 org.jboss.as.controller.OperationFailedException Unable to load module %s
WFLYMSGAMQ0087 org.jboss.as.controller.OperationFailedException Unable to load connector service factory class: %s
WFLYMSGAMQ0088 org.jboss.as.controller.OperationFailedException %s is an invalid value for parameter %s, it should be multiple of %s
WFLYMSGAMQ0089 WARN Resource at %s is not correctly configured: when its attribute %s is defined, the other attributes %s will not be taken into account
WFLYMSGAMQ0090 java.lang.IllegalArgumentException The Elytron security domain cannot be null
WFLYMSGAMQ0091 DEBUG Failed to authenticate username %s. Exception message: %s
WFLYMSGAMQ0092 DEBUG Failed to authenticate username %s: cannot verify username/password pair
WFLYMSGAMQ0093 DEBUG Failed to authorize username %s: missing permissions
WFLYMSGAMQ0094 WARN Unable to detect database dialect from connection metadata or JDBC driver name. Please configure this manually using the 'journal-database' property in your configuration. Known database dialect strings are %s
WFLYMSGAMQ0095 WARN Multiple client-mapping found in [%s] socket binding used by ActiveMQ [%s] transport configuration. Using address: [host: %s, port %s]
WFLYMSGAMQ0096 org.jboss.as.controller.OperationFailedException The %s operation can not be performed on a JDBC store journal
WFLYMSGAMQ0097 org.jboss.as.controller.OperationFailedException There is no socket-binding or outbound-socket-binding configured with the name %s
WFLYMSGAMQ0098 org.jboss.as.controller.OperationFailedException Unable to load module %s - the module or one of its dependencies is missing [%s]
WFLYMSGAMQ0099 org.jboss.msc.service.StartException Creating the remote destination %s failed with error %s
WFLYMSGAMQ0100 java.lang.RuntimeException Deleting the remote destination %s failed with error %s
WFLYMSGAMQ0101 WARN Invalid value %s for %s, legal values are %s, default value is applied.
WFLYMSGAMQ0102 java.io.IOException HTTP Upgrade request missing Sec-JbossRemoting-Key header
WFLYMSGAMQ0103 java.lang.IllegalStateException Broker is not started. It cannot be managed yet.
WFLYMSGAMQ0104 java.lang.IllegalStateException Legacy security is no longer supported.
WFLYMSGAMQ0105 org.jboss.as.controller.OperationFailedException The %s %s is configured to use socket-binding %s, but this socket binding doesn't have the multicast-address or a multicast-port attributes configured.
WFLYMSGAMQ0106 org.jboss.as.controller.OperationFailedException The bridge %s didn't deploy.
WFLYMSGAMQ0107 java.lang.IllegalStateException You must define a elytron security doman when security is enabled.
WFLYMSGAMQ0108 org.jboss.as.controller.OperationFailedException Either socket-binding or jgroups-cluster attribute is required.

WFLYNAM

Code Level Return Type Message
WFLYNAM0001 INFO Activating Naming Subsystem
WFLYNAM0002 WARN Failed to set %s
WFLYNAM0003 INFO Starting Naming Service
WFLYNAM0012 ERROR Failed to release binder service, used for a runtime made JNDI binding
WFLYNAM0013 ERROR Failed to obtain jndi view value for entry %s.
WFLYNAM0014 java.lang.SecurityException Attempt to add a Permission to a readonly PermissionCollection
WFLYNAM0015 java.lang.String %s cannot be null.
WFLYNAM0016 javax.naming.NamingException Could not dereference object
WFLYNAM0017 javax.naming.NamingException Unable to list a non Context binding.
WFLYNAM0018 java.lang.String Could not lookup link
WFLYNAM0020 javax.naming.NamingException Could not resolve service %s
WFLYNAM0021 javax.naming.NamingException Could not resolve service reference to %s in factory %s. Service was in state %s.
WFLYNAM0022 javax.naming.NamingException Could not resolve service reference to %s in factory %s. This is a bug in ServiceReferenceObjectFactory. State was %s.
WFLYNAM0023 java.lang.String Duplicate JNDI bindings for '%s' are not compatible. [%s] != [%s]
WFLYNAM0024 javax.naming.InvalidNameException An empty name is not allowed
WFLYNAM0025 java.lang.IllegalStateException Jndi entry '%s' is not yet registered in context '%s'
WFLYNAM0026 java.lang.IllegalStateException Failed to destroy root context
WFLYNAM0027 javax.naming.NamingException Failed instantiate %s %s from classloader %s
WFLYNAM0028 java.lang.String Failed to read %s context entries.
WFLYNAM0029 java.lang.String Failed to start %s
WFLYNAM0030 java.lang.RuntimeException Illegal context in name: %s
WFLYNAM0032 javax.naming.NamingException Invalid context reference. Not a '%s' reference.
WFLYNAM0033 java.lang.IllegalArgumentException A valid JNDI name must be provided: %s
WFLYNAM0034 java.lang.IllegalArgumentException Load factor must be greater than 0 and less than or equal to 1
WFLYNAM0035 java.lang.IllegalArgumentException invalid permission, unknown action: %s
WFLYNAM0036 java.lang.IllegalArgumentException invalid permission, unknown action: %s
WFLYNAM0037 java.lang.IllegalArgumentException Can not have a negative size table!
WFLYNAM0038 java.lang.String Jndi view is only available in runtime mode.
WFLYNAM0039 javax.naming.NameNotFoundException Name '%s' not found in context '%s'
WFLYNAM0041 java.lang.IllegalArgumentException %s is null
WFLYNAM0042 javax.naming.NamingException Failed to create object factory from classloader.
WFLYNAM0043 javax.naming.OperationNotSupportedException Naming context is read-only
WFLYNAM0044 java.lang.IllegalArgumentException Service with name [%s] already bound.
WFLYNAM0045 java.lang.IllegalStateException Table is full!
WFLYNAM0046 javax.naming.NamingException Thread interrupted while retrieving service reference for service %s
WFLYNAM0047 org.jboss.as.server.deployment.DeploymentUnitProcessingException Invalid name for context binding %s
WFLYNAM0048 org.jboss.as.controller.OperationFailedException Invalid binding name %s, name must start with one of %s
WFLYNAM0049 org.jboss.as.controller.OperationFailedException Unknown binding type %s
WFLYNAM0050 org.jboss.as.controller.OperationFailedException Unsupported simple binding type %s
WFLYNAM0051 org.jboss.as.controller.OperationFailedException Unable to transform URL binding value %s
WFLYNAM0052 org.jboss.as.controller.OperationFailedException Could not load module %s
WFLYNAM0053 org.jboss.as.controller.OperationFailedException Could not load class %s from module %s
WFLYNAM0054 org.jboss.as.controller.OperationFailedException Could not instantiate instance of class %s from module %s
WFLYNAM0055 org.jboss.as.controller.OperationFailedException Class %s from module %s is not an instance of ObjectFactory
WFLYNAM0059 java.lang.RuntimeException Resource lookup for injection failed: %s
WFLYNAM0060 org.jboss.as.controller.OperationFailedException Binding type %s requires attribute named %s defined
WFLYNAM0061 org.jboss.as.controller.OperationFailedException Binding type %s can not take a 'cache' attribute
WFLYNAM0062 javax.naming.NamingException Failed to lookup %s
WFLYNAM0063 java.lang.IllegalStateException %s service not started
WFLYNAM0064 org.jboss.as.controller.OperationFailedException Cannot rebind external context lookup
WFLYNAM0065 org.jboss.as.controller.OperationFailedException Could not load module %s - the module or one of its dependencies is missing [%s]

WFLYOIDC

Code Level Return Type Message
WFLYOIDC0001 INFO Activating WildFly Elytron OIDC Subsystem
WFLYOIDC0002 INFO Elytron OIDC Client subsystem override for deployment '%s'
WFLYOIDC0003 java.lang.RuntimeException Cannot remove credential. No credential defined for deployment '%s'
WFLYOIDC0004 java.lang.RuntimeException Cannot update credential. No credential defined for deployment '%s'
WFLYOIDC0005 java.lang.RuntimeException Cannot remove redirect rewrite rule. No redirect rewrite defined for deployment '%s'
WFLYOIDC0006 java.lang.RuntimeException Cannot update redirect rewrite. No redirect rewrite defined for deployment '%s'
WFLYOIDC0007 org.jboss.as.controller.OperationFailedException Must set 'resource' or 'client-id'
WFLYOIDC0008 WARN The 'disable-trust-manager' attribute has been set to 'true' so no trust manager will be used when communicating with the OpenID provider over HTTPS. This value should always be set to 'false' in a production environment.

WFLYOTELEXT

Code Level Return Type Message
WFLYOTELEXT0001 INFO Activating OpenTelemetry Subsystem
WFLYOTELEXT0004 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered
WFLYOTELEXT0005 ERROR Error resolving the OpenTelemetry instance.
WFLYOTELEXT0008 java.lang.IllegalArgumentException An unsupported exporter was specified: '%s'.
WFLYOTELEXT0009 ERROR Error resolving the tracer.
WFLYOTELEXT0010 java.lang.IllegalArgumentException An unsupported span processor was specified: '%s'.
WFLYOTELEXT0011 java.lang.IllegalArgumentException Unrecognized value for sampler: '%s'.
WFLYOTELEXT0012 java.lang.IllegalArgumentException Invalid ratio. Must be between 0.0 and 1.0 inclusive

WFLYPAT

Code Level Return Type Message
WFLYPAT0000 java.lang.String Conflicts detected
WFLYPAT0000 java.lang.IllegalStateException failed to resolve a jboss.home.dir use the --distribution attribute to point to a valid installation
WFLYPAT0000 java.lang.IllegalStateException No layers directory found at %s
WFLYPAT0000 java.lang.IllegalStateException Cannot find layer '%s' under directory %s
WFLYPAT0000 java.lang.IllegalStateException no associated module or bundle repository with layer '%s'
WFLYPAT0000 java.lang.IllegalStateException Duplicate %s '%s'
WFLYPAT0000 java.lang.IllegalStateException Not a directory %s
WFLYPAT0000 java.lang.IllegalStateException patch types don't match
WFLYPAT0000 org.jboss.as.patching.PatchingException invalid rollback information
WFLYPAT0001 WARN Cannot delete file %s
WFLYPAT0002 WARN Cannot invalidate %s
WFLYPAT0003 org.jboss.as.patching.PatchingException Patch does not apply - expected (%s), but was (%s)
WFLYPAT0004 java.io.IOException Failed to delete (%s)
WFLYPAT0005 java.io.IOException Failed to create directory (%s)
WFLYPAT0008 java.lang.String File at path specified by argument %s does not exist
WFLYPAT0011 org.jboss.as.patching.PatchingException Cannot rollback patch (%s)
WFLYPAT0012 org.jboss.as.patching.PatchingException Patch '%s' already applied
WFLYPAT0013 org.jboss.as.patching.PatchingException There is no layer called %s installed
WFLYPAT0014 org.jboss.as.patching.PatchingException Failed to resolve a valid patch descriptor for %s %s
WFLYPAT0015 org.jboss.as.patching.PatchingException Requires patch '%s'
WFLYPAT0016 org.jboss.as.patching.PatchingException Patch is incompatible with patch '%s'
WFLYPAT0017 org.jboss.as.patching.ContentConflictsException Conflicts detected
WFLYPAT0018 java.io.SyncFailedException copied content does not match expected hash for item: %s
WFLYPAT0019 java.lang.IllegalArgumentException invalid patch name '%s'
WFLYPAT0020 java.lang.IllegalArgumentException Cannot rollback. No patches applied.
WFLYPAT0021 org.jboss.as.patching.PatchingException Patch '%s' not found in history.
WFLYPAT0023 org.jboss.as.controller.OperationFailedException Failed to show history of patches
WFLYPAT0024 org.jboss.as.controller.OperationFailedException Unable to apply or rollback a patch when the server is in a restart-required state.
WFLYPAT0025 java.lang.String failed to load identity info
WFLYPAT0026 java.lang.String No more patches
WFLYPAT0027 java.lang.String No patch history %s
WFLYPAT0028 java.lang.String Patch is missing file %s
WFLYPAT0029 java.lang.String File is not readable %s
WFLYPAT0030 java.lang.String Layer not found %s
WFLYPAT0031 ERROR failed to undo change for: '%s'
WFLYPAT0032 java.lang.String missing: '%s'
WFLYPAT0033 java.lang.String inconsistent state: '%s'
WFLYPAT0034 java.lang.String in error: '%s'
WFLYPAT0035 WARN Cannot rename file %s
WFLYPAT0036 java.lang.IllegalStateException Cannot process backup by renaming file %s
WFLYPAT0037 java.lang.IllegalStateException Cannot process restore by renaming file %s
WFLYPAT0038 java.lang.IllegalStateException Duplicate element patch-id (%s)
WFLYPAT0039 java.lang.String Requested %s version %s did not match the installed version %s
WFLYPAT0040 java.lang.String failed to load %s info
WFLYPAT0041 java.lang.String Patch %s found in more than one stream: %s and %s
WFLYPAT0042 java.lang.String Patch bundle is empty
WFLYPAT0043 org.jboss.as.patching.PatchingException Content item type is missing in '%s'
WFLYPAT0044 java.lang.String Unsupported content type '%s'
WFLYPAT0045 org.jboss.as.patching.PatchingException Unrecognized condition format '%s'
WFLYPAT0046 org.jboss.as.patching.PatchingException Cannot copy files to temporary directory %s: %s. Note that '-Djava.io.tmpdir' switch can be used to set different temporary directory.
WFLYPAT0047 java.io.IOException Cannot copy files from %s to %s: %s
WFLYPAT0048 ERROR Error when restoring file[%s] - %s
WFLYPAT0049 java.io.IOException Some backup files were not removed.
WFLYPAT0050 INFO %s cumulative patch ID is: %s, one-off patches include: %s
WFLYPAT0051 java.io.IOException Invalid zip file. Found an entry that resolves to a path outside of the patch directory: %s

WFLYPC

Code Level Return Type Message
WFLYPC0000 java.lang.String Usage: %s [args...]%nwhere args include:
WFLYPC0000 java.lang.String Keep a copy of the persistent domain configuration even if this host is not the Domain Controller. If ignore-unused-configuration is unset in host.xml, then the complete domain configuration will be stored, otherwise the configured value of ignore-unused-configuration will be used.
WFLYPC0000 java.lang.String If this host is not the Domain Controller and cannot contact the Domain Controller at boot, a locally cached copy of the domain configuration is used for boot (if available, see --backup.) The Domain Controller is background polled until it becomes available. Note that starting a host with --cached-dc when the Domain Controller is available will cache a copy of the domain configuration even if --backup is not used.
WFLYPC0000 java.lang.String Name of the domain configuration file to use (default is "domain.xml") (Same as -c)
WFLYPC0000 java.lang.String Name of the domain configuration file to use (default is "domain.xml") (Same as --domain-config)
WFLYPC0000 java.lang.String Name of the domain configuration file to use. This differs from '--domain-config', '-c' and '-domain-config' in that the initial file is never overwritten.
WFLYPC0000 java.lang.String Display this message and exit
WFLYPC0000 java.lang.String Address on which the host controller should listen for communication from the process controller
WFLYPC0000 java.lang.String Port on which the host controller should listen for communication from the process controller
WFLYPC0000 java.lang.String Name of the host configuration file to use (default is "host.xml")
WFLYPC0000 java.lang.String Name of the host configuration file to use. This differs from '--host-config' in that the initial file is never overwritten.
WFLYPC0000 java.lang.String Address on which the process controller listens for communication from processes it controls
WFLYPC0000 java.lang.String Port on which the process controller listens for communication from processes it controls
WFLYPC0000 java.lang.String Load system properties from the given url
WFLYPC0000 java.lang.String Set a system property
WFLYPC0000 java.lang.String Print version and exit
WFLYPC0000 java.lang.String Set system property jboss.bind.address to the given value
WFLYPC0000 java.lang.String Set system property jboss.bind.address. to the given value
WFLYPC0000 java.lang.String Set system property jboss.default.multicast.address to the given value
WFLYPC0000 java.lang.String Set the host controller's running type to ADMIN_ONLY causing it to open administrative interfaces and accept management requests but not start servers or, if this host controller is the primary for the domain, accept incoming connections from secondary host controllers.
WFLYPC0000 java.lang.String Set system property jboss.domain.primary.address to the given value. In a default secondary Host Controller config, this is used to configure the address of the primary Host Controller.
WFLYPC0000 java.lang.String Set system property jboss.domain.primary.port to the given value. In a default secondary Host Controller config, this is used to configure the port used for native management communication by the primary Host Controller.
WFLYPC0000 java.lang.String Runs the server with a security manager installed.
WFLYPC0001 WARN Attempted to reconnect non-existent process '%s'
WFLYPC0002 WARN Attempted to remove non-existent process '%s'
WFLYPC0003 WARN Attempted to start non-existent process '%s'
WFLYPC0004 WARN Attempted to stop non-existent process '%s'
WFLYPC0005 WARN Attempted to register duplicate named process '%s'
WFLYPC0006 WARN Failed to send authentication key to process '%s': %s
WFLYPC0007 ERROR Failed to send data bytes to process '%s' input stream
WFLYPC0008 ERROR Failed to send reconnect message to process '%s' input stream
WFLYPC0009 ERROR Failed to start process '%s'
WFLYPC0010 ERROR Failed to write %s message to connection: %s
WFLYPC0011 INFO Process '%s' finished with an exit status of %d
WFLYPC0012 WARN Received connection with invalid version from %s
WFLYPC0013 WARN Received unrecognized greeting code 0x%02x from %s
WFLYPC0014 WARN Received connection with unknown credentials from %s
WFLYPC0015 WARN Received unknown message with code 0x%02x
WFLYPC0016 INFO All processes finished; exiting
WFLYPC0017 INFO Shutting down process controller
WFLYPC0018 INFO Starting process '%s'
WFLYPC0019 INFO Stopping process '%s'
WFLYPC0020 ERROR Stream processing failed for process '%s': %s
WFLYPC0021 INFO Waiting %d seconds until trying to restart process %s.
WFLYPC0022 WARN Failed to kill process '%s', trying to destroy the process instead.
WFLYPC0023 java.lang.String No value was provided for argument %s
WFLYPC0025 java.lang.IllegalArgumentException Authentication key must be 24 bytes long
WFLYPC0029 java.lang.IllegalArgumentException %s length is invalid
WFLYPC0030 java.lang.IllegalArgumentException Invalid option: %s
WFLYPC0031 java.lang.IllegalArgumentException Command contains a null component
WFLYPC0033 ERROR Failed to accept a connection
WFLYPC0034 ERROR Failed to close resource %s
WFLYPC0035 ERROR Failed to close the server socket %s
WFLYPC0036 ERROR Failed to close a socket
WFLYPC0039 ERROR Failed to handle incoming connection
WFLYPC0040 ERROR Failed to handle socket failure condition
WFLYPC0041 ERROR Failed to handle socket finished condition
WFLYPC0042 ERROR Failed to handle socket shut down condition
WFLYPC0043 ERROR Failed to read a message
WFLYPC0044 WARN Leaked a message output stream; cleaning
WFLYPC0045 java.io.IOException Failed to create server thread
WFLYPC0046 java.io.IOException Failed to read object
WFLYPC0047 java.io.UTFDataFormatException Invalid byte
WFLYPC0048 java.io.UTFDataFormatException Invalid byte:%s(%d)
WFLYPC0049 java.io.IOException Invalid byte token. Expecting '%s' received '%s'
WFLYPC0050 java.io.IOException Invalid command byte read: %s
WFLYPC0051 java.io.IOException Invalid start chunk start [%s]
WFLYPC0056 java.io.EOFException Read %d bytes.
WFLYPC0058 java.io.IOException Stream closed
WFLYPC0059 java.lang.IllegalStateException Thread creation was refused
WFLYPC0060 java.io.EOFException Unexpected end of stream
WFLYPC0061 java.io.IOException Write channel closed
WFLYPC0062 java.io.IOException Writes are already shut down
WFLYPC0063 INFO Process '%s' did not complete normal stop within %d ms; attempting to kill process using OS calls
WFLYPC0064 INFO Cannot locate process '%s' -- could not find the 'jps' command
WFLYPC0065 INFO No process identifiable as '%s' could be found
WFLYPC0066 INFO Multiple processes identifiable as '%s' found; OS level kill cannot be safely performed
WFLYPC0067 INFO Process '%s' did not complete normal stop within %d ms; attempting to destroy process using java.lang.Process.destroyForcibly()

WFLYPL

Code Level Return Type Message
WFLYPL0001 INFO Activating PicketLink %s Subsystem
WFLYPL0003 INFO Bound [%s] to [%s]
WFLYPL0007 java.lang.RuntimeException Could not load module [%s].
WFLYPL0009 java.lang.RuntimeException Could not load class [%s].
WFLYPL0010 org.jboss.as.controller.OperationFailedException No type provided for %s. You must specify a class-name or code.
WFLYPL0012 org.jboss.as.controller.OperationFailedException Attribute [%s] is not longer supported.
WFLYPL0013 org.jboss.as.controller.OperationFailedException [%s] can only have [%d] child of type [%s].
WFLYPL0014 org.jboss.as.controller.OperationFailedException Invalid attribute [%s] definition for [%s]. Only one of the following attributes are allowed: [%s].
WFLYPL0015 org.jboss.as.controller.OperationFailedException Required attribute [%s] for [%s].
WFLYPL0016 org.jboss.as.controller.OperationFailedException [%s] requires one of the given attributes [%s].
WFLYPL0017 java.lang.IllegalStateException Type [%s] already defined.
WFLYPL0018 org.jboss.as.controller.OperationFailedException [%s] can not be empty.
WFLYPL0019 org.jboss.as.controller.OperationFailedException [%s] requires child [%s].
WFLYPL0054 org.jboss.as.controller.OperationFailedException You must provide at least one identity configuration.
WFLYPL0055 org.jboss.as.controller.OperationFailedException You must provide at least one identity store for identity configuration [%s].
WFLYPL0056 org.jboss.as.controller.OperationFailedException No supported type provided.
WFLYPL0057 org.jboss.as.controller.OperationFailedException No mapping was defined.
WFLYPL0101 org.jboss.as.controller.OperationFailedException No type provided for the handler. You must specify a class-name or code.
WFLYPL0105 org.jboss.as.controller.OperationFailedException The migrate operation can not be performed: the server must be in admin-only mode
WFLYPL0106 java.lang.String Migration failed, see results for more details.
WFLYPL0107 org.jboss.as.controller.OperationFailedException Cannot migrate non-empty picketlink-federation subsystem configuration.

WFLYPMB

Code Level Return Type Message
WFLYPMB0001 org.jboss.as.controller.OperationFailedException No known attribute %s
WFLYPMB0002 java.lang.UnsupportedOperationException A platform mbean resource does not have a writable model
WFLYPMB0003 java.lang.UnsupportedOperationException Adding child resources is not supported
WFLYPMB0004 java.lang.UnsupportedOperationException Removing child resources is not supported
WFLYPMB0005 org.jboss.as.controller.OperationFailedException No BufferPoolMXBean with name '%s' currently exists
WFLYPMB0006 java.lang.IllegalStateException Read support for attribute %s was not properly implemented
WFLYPMB0007 java.lang.IllegalStateException Write support for attribute %s was not properly implemented
WFLYPMB0008 org.jboss.as.controller.OperationFailedException No GarbageCollectorMXBean with name %s currently exists
WFLYPMB0009 org.jboss.as.controller.OperationFailedException No MemoryManagerMXBean with name %s currently exists
WFLYPMB0010 org.jboss.as.controller.OperationFailedException No MemoryPoolMXBean with name %s currently exists

WFLYPOJO

Code Level Return Type Message
WFLYPOJO0001 INFO Found legacy bean/pojo namespace: %s - might be missing some xml features (potential exceptions).
WFLYPOJO0002 WARN Ignoring uninstall action on target: %s
WFLYPOJO0003 WARN Error invoking callback: %s
WFLYPOJO0004 WARN Error invoking incallback: %s
WFLYPOJO0005 WARN Error invoking uncallback: %s
WFLYPOJO0006 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get module attachment for %s
WFLYPOJO0007 org.jboss.as.server.deployment.DeploymentUnitProcessingException Missing deployment reflection index for %s
WFLYPOJO0008 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse POJO xml [ %s ]
WFLYPOJO0010 java.lang.IllegalArgumentException Cannot instantiate new collection instance.
WFLYPOJO0011 java.lang.IllegalArgumentException Cannot instantiate new map instance.
WFLYPOJO0012 java.lang.IllegalArgumentException Too dynamic to determine injected type from factory!
WFLYPOJO0013 java.lang.IllegalArgumentException Too dynamic to determine injected type from dependency!
WFLYPOJO0014 java.lang.IllegalArgumentException Previous node is not a value config: %s
WFLYPOJO0015 java.lang.IllegalArgumentException Null factory method!
WFLYPOJO0016 java.lang.IllegalArgumentException Null bean info!
WFLYPOJO0017 java.lang.IllegalArgumentException Invalid number of type instances match: %s, type: %s
WFLYPOJO0018 java.lang.IllegalArgumentException Cannot determine injected type: %s, try setting class attribute (if available).
WFLYPOJO0019 java.lang.IllegalArgumentException Null or empty alias.
WFLYPOJO0020 java.lang.IllegalArgumentException Null or empty dependency.
WFLYPOJO0021 java.lang.String Missing value
WFLYPOJO0022 java.lang.IllegalArgumentException Null value
WFLYPOJO0023 java.lang.IllegalArgumentException Null name
WFLYPOJO0024 java.lang.IllegalArgumentException Null method name!
WFLYPOJO0025 java.lang.IllegalArgumentException Unknown type: %s
WFLYPOJO0026 java.lang.IllegalArgumentException Illegal parameter length: %s
WFLYPOJO0027 org.jboss.msc.service.StartException Missing factory method in ctor configuration: %s
WFLYPOJO0028 java.lang.String Missing bean info, set bean's class attribute: %s
WFLYPOJO0029 java.lang.IllegalArgumentException Wrong types size, doesn't match parameters!
WFLYPOJO0030 java.lang.IllegalArgumentException Null ClassInfo!
WFLYPOJO0031 java.lang.IllegalArgumentException No such constructor: %s for class %s.
WFLYPOJO0032 java.lang.IllegalArgumentException Method not found %s%s for class %s.
WFLYPOJO0033 java.lang.IllegalArgumentException No such getter: %s on class %s.
WFLYPOJO0034 java.lang.IllegalArgumentException No such setter: %s on class %s.
WFLYPOJO0035 java.lang.IllegalArgumentException Ambiguous match %s.
WFLYPOJO0036 java.lang.IllegalArgumentException Ambiguous match of %s for name %s on class %s.
WFLYPOJO0037 java.lang.IllegalArgumentException Field not found %s for class %s.
WFLYPOJO0038 org.jboss.as.server.deployment.DeploymentUnitProcessingException Exception while parsing POJO descriptor file: %s

WFLYPRT

Code Level Return Type Message
WFLYPRT0001 WARN Got error closing channel %s
WFLYPRT0003 ERROR Failed to close resource %s
WFLYPRT0004 ERROR Failed to close the server socket %s
WFLYPRT0018 WARN No such request (%d) associated with channel %s
WFLYPRT0023 java.net.ConnectException Could not connect to %s. The connection timed out
WFLYPRT0030 java.io.IOException Invalid byte token. Expecting '%d' received '%d'
WFLYPRT0032 java.io.IOException Invalid signature [%s]
WFLYPRT0034 java.io.IOException Invalid type: %s
WFLYPRT0035 java.lang.IllegalArgumentException Type is neither %s or %s: %s
WFLYPRT0051 java.lang.IllegalStateException Operation with id %d already registered
WFLYPRT0052 java.lang.IllegalArgumentException Null executor
WFLYPRT0053 java.net.ConnectException Could not connect to %s. The connection failed
WFLYPRT0054 java.io.IOException Channel closed
WFLYPRT0055 java.io.IOException no handler registered for request type '%s'.
WFLYPRT0056 java.io.IOException No response handler for request %s
WFLYPRT0057 INFO %s cancelled task by interrupting thread %s
WFLYPRT0058 INFO %s cancelled task before execution began
WFLYPRT0059 INFO You are using a deprecated way to set the client bind address. Please use the "--bind" parameter on the CLI instead of the %s system property.
WFLYPRT0060 java.io.IOException Channel open request timed out

WFLYREQCON

Code Level Return Type Message
WFLYREQCON001 WARN Failed to cancel queued task %s

WFLYRMT

Code Level Return Type Message
WFLYRMT0001 INFO Listening on %s
WFLYRMT0002 org.jboss.msc.service.StartException Could not start channel listener
WFLYRMT0004 org.jboss.msc.service.StartException %s
WFLYRMT0005 org.jboss.msc.service.StartException Failed to start service
WFLYRMT0006 java.lang.IllegalStateException Endpoint is null
WFLYRMT0016 java.lang.IllegalStateException Invalid QOP value: %s
WFLYRMT0017 java.lang.IllegalStateException Invalid Strength value: %s
WFLYRMT0018 org.jboss.as.controller.OperationFailedException Cannot create a valid URI from %s -- %s
WFLYRMT0020 java.lang.IllegalArgumentException Invalid Strength '%s' string given
WFLYRMT0021 java.io.IOException HTTP Upgrade request missing Sec-JbossRemoting-Key header
WFLYRMT0022 org.jboss.as.controller.OperationFailedException Worker configuration is no longer used, please use endpoint worker configuration
WFLYRMT0023 java.lang.String Only one of '%s' configuration or '%s' configuration is allowed
WFLYRMT0024 INFO The remoting subsystem is present but no io subsystem was found. An io subsystem was not required when remoting schema '%s' was current but now is, so a default subsystem is being added.
WFLYRMT0025 org.jboss.as.controller.OperationFailedException Can't remove %s as JMX uses it as a remoting endpoint
WFLYRMT0026 java.lang.String Change of worker to '%s' in remoting might require the same change in linked resources depending on remoting and in definition of http(s) listeners.
WFLYRMT0027 org.jboss.msc.service.StartException Failed to obtain SSLContext
WFLYRMT0028 org.jboss.as.controller.OperationFailedException Invalid option '%s'.
WFLYRMT0029 org.jboss.as.controller.OperationFailedException The use of security realms at runtime is unsupported.

WFLYRS

Code Level Return Type Message
WFLYRS0001 WARN %s annotation not on Class: %s
WFLYRS0002 WARN %s annotation not on Class or Method: %s
WFLYRS0003 ERROR More than one mapping found for Jakarta RESTful Web Services servlet: %s the second mapping %s will not work
WFLYRS0006 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load Jakarta RESTful Web Services Application class
WFLYRS0010 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta RESTful Web Services resource %s does not correspond to a view on the Jakarta Enterprise Beans %s. @Path annotations can only be placed on classes or interfaces that represent a local, remote or no-interface view of an Jakarta Enterprise Beans.
WFLYRS0011 org.jboss.as.server.deployment.DeploymentUnitProcessingException Invalid value for parameter %s: %s
WFLYRS0012 org.jboss.as.server.deployment.DeploymentUnitProcessingException No spring integration jar found
WFLYRS0013 WARN The context param org.jboss.as.jaxrs.disableSpringIntegration is deprecated, and will be removed in a future release. Please use org.jboss.as.jaxrs.enableSpringIntegration instead
WFLYRS0014 ERROR Failed to register management view for REST resource class: %s
WFLYRS0015 WARN No Servlet declaration found for Jakarta RESTful Web Services application. In %s either provide a class that extends jakarta.ws.rs.core.Application or declare a servlet class in web.xml.
WFLYRS0016 INFO RESTEasy version %s
WFLYRS0017 WARN Failed to read attribute from Jakarta RESTful Web Services deployment at %s with name %s
WFLYRS0018 WARN Explicit usage of Jackson annotation in a Jakarta RESTful Web Services deployment; the system will disable Jakarta JSON Binding processing for the current deployment. Consider setting the '%s' property to 'false' to restore Jakarta JSON Binding.
WFLYRS0019 WARN Error converting default value %s for parameter %s in method %s using param converter %s. Exception: %s : %s
WFLYRS0020 WARN "Error converting default value %s for parameter %s in method %s using method %s. Exception: %s : %s"
WFLYRS0021 ERROR %s %s
WFLYRS0022 org.jboss.as.controller.OperationFailedException "Parameter %s is not a list"
WFLYRS0023 java.lang.String Illegal value for parameter %s: %s
WFLYRS0029 WARN The RESTEasy tracing API has been enabled for deployment "%s" and is not meant for production.
WFLYRS0030 java.lang.IllegalStateException Invalid ConfigurationFactory found %s
WFLYRS0031 WARN Failed to load RESTEasy MicroProfile Configuration: %s

WFLYRTS

Code Level Return Type Message
WFLYRTS0001 java.lang.IllegalStateException Can't import global transaction to wildfly transaction client.
WFLYRTS0002 ERROR Cannot get transaction status on handling response context %s

WFLYRXMESS

Code Level Return Type Message
WFLYRXMESS0001 INFO Activating MicroProfile Reactive Messaging Subsystem
WFLYRXMESS0002 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered
WFLYRXMESS0003 INFO Intermediate module %s is not present. Skipping recursively adding modules from it
WFLYRXMESS0004 org.jboss.as.server.deployment.DeploymentUnitProcessingException Use of -D%s=true is not allowed in this setup
WFLYRXMESS0005 org.jboss.as.server.deployment.DeploymentUnitProcessingException Use of @%s is not allowed in this setup

WFLYRXMKAF

Code Level Return Type Message
WFLYRXMKAF0001 INFO Found property %s, will use the Elytron client-ssl-context: %s
WFLYRXMKAF0002 java.lang.IllegalStateException Could not find an Elytron client-ssl-context called: %s

WFLYRXSTOPS

Code Level Return Type Message
WFLYRXSTOPS0001 INFO Activating MicroProfile Reactive Streams Operators Subsystem
WFLYRXSTOPS0002 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment %s requires use of the '%s' capability but it is not currently registered

WFLYRXSTOPSCDI

Code Level Return Type Message
WFLYRXSTOPSCDI0001 java.lang.IllegalStateException No implementation of the %s found in the classpath

WFLYSAR

Code Level Return Type Message
WFLYSAR0001 java.lang.String Failed to execute legacy service %s method
WFLYSAR0002 WARN Unable to find PropertyEditor for type %s
WFLYSAR0003 java.lang.IllegalArgumentException Class not found
WFLYSAR0004 java.lang.IllegalArgumentException Class not instantiated
WFLYSAR0005 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get %s attachment for %s
WFLYSAR0006 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to parse service xml [%s]
WFLYSAR0007 java.lang.IllegalStateException Method '%s(%s)' not found for: %s
WFLYSAR0008 java.lang.String Missing one or more required attributes:
WFLYSAR0009 java.lang.IllegalArgumentException %s is null
WFLYSAR0010 java.lang.IllegalStateException %s method for property '%s' not found for: %s
WFLYSAR0011 java.lang.String Unexpected content of type '%s' named '%s', text is: %s
WFLYSAR0012 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to process SAR child archives for [%s]
WFLYSAR0013 org.jboss.as.server.deployment.DeploymentUnitProcessingException Malformed dependency name %s
WFLYSAR0014 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find default constructor for %s
WFLYSAR0015 org.jboss.msc.service.StartException Failed to register mbean [%s]
WFLYSAR0016 WARN No ObjectName available to unregister
WFLYSAR0017 ERROR Failed to unregister [%s]

WFLYSEC

Code Level Return Type Message
WFLYSEC0007 java.lang.RuntimeException Runtime Exception:
WFLYSEC0015 java.lang.SecurityException Security Exception
WFLYSEC0018 java.lang.UnsupportedOperationException Use the ResourceDescriptionResolver variant
WFLYSEC0019 java.lang.UnsupportedOperationException Unsupported Operation
WFLYSEC0022 javax.xml.stream.XMLStreamException A security domain can have either an or element, not both
WFLYSEC0023 javax.xml.stream.XMLStreamException Missing required attribute: either %s or %s must be present
WFLYSEC0061 java.lang.String again:
WFLYSEC0105 java.lang.IllegalStateException Unable to initialize legacy JACC support while elytron JACC support is enabled.
WFLYSEC0107 java.lang.String Validation failed for %s

WFLYSM

Code Level Return Type Message
WFLYSM0002 javax.xml.stream.XMLStreamException Invalid version found in the permissions element. Found %s, expected %s
WFLYSM0003 org.jboss.as.controller.OperationFailedException Subsystem configuration error: the following permissions are not implied by the maximum permissions set %s
WFLYSM0004 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment configuration error: the following permissions are not implied by the maximum permissions set %s
WFLYSM0005 java.lang.String Empty maximum sets are not understood in the target model version and must be rejected
WFLYSM0006 javax.xml.stream.XMLStreamException Unexpected element '%s' encountered
WFLYSM0007 javax.xml.stream.XMLStreamException Unexpected attribute '%s' encountered
WFLYSM0008 javax.xml.stream.XMLStreamException Unexpected end of document
WFLYSM0009 javax.xml.stream.XMLStreamException Missing required attribute(s): %s
WFLYSM0010 javax.xml.stream.XMLStreamException Missing required element(s): %s
WFLYSM0011 javax.xml.stream.XMLStreamException Unexpected content of type %s
WFLYSM0012 WARN The following permission could not be constructed and will be ignored in the %s: (class="%s" name="%s" actions="%s")

WFLYSRV

Code Level Return Type Message
WFLYSRV0000 java.lang.String Name of the server configuration file to use (default is "standalone.xml") (Same as -c)
WFLYSRV0000 java.lang.String Name of the server configuration file to use (default is "standalone.xml") (Same as --server-config)
WFLYSRV0000 java.lang.String Name of the server configuration file to use. This differs from '--server-config' and '-c' in that the original file is never overwritten.
WFLYSRV0000 java.lang.String Display this message and exit
WFLYSRV0000 java.lang.String Load system properties from the given url
WFLYSRV0000 java.lang.String Set a security property
WFLYSRV0000 java.lang.String Set a system property
WFLYSRV0000 java.lang.String Print version and exit
WFLYSRV0000 java.lang.String Set system property jboss.bind.address to the given value
WFLYSRV0000 java.lang.String Set system property jboss.bind.address. to the given value
WFLYSRV0000 java.lang.String Set system property jboss.default.multicast.address to the given value
WFLYSRV0000 java.lang.String Set the server's running type to ADMIN_ONLY causing it to open administrative interfaces and accept management requests but not start other runtime services or accept end user requests. Cannot be used in conjunction with --start-mode. Deprecated; use --start-mode=admin-only instead.
WFLYSRV0000 java.lang.String Activate debug mode with an optional argument to specify the port. Only works if the launch script supports it.
WFLYSRV0000 java.lang.String Runs the server with a security manager installed.
WFLYSRV0000 java.lang.String Sets the start mode of the server, it can be either 'normal','admin-only' or 'suspend'. If this is 'suspend' the server will start in suspended mode, and will not service requests until it has been resumed. If this is started in admin-only mode the server will only open administrative interfaces and accept management requests but not start other runtime services or accept end user requests. Cannot be used in conjunction with --admin-only.
WFLYSRV0000 java.lang.String Start the server gracefully, queuing or cleanly rejecting requests until the server is fully started
WFLYSRV0000 java.lang.String The git repository to clone to get the server configuration.
WFLYSRV0000 java.lang.String The git branch to use to get the server configuration. Default is 'master'
WFLYSRV0000 java.lang.String The elytron configuration file for managing git credentials. Default is 'null'
WFLYSRV0000 java.lang.String Configured system properties:
WFLYSRV0000 java.lang.String VM Arguments: %s
WFLYSRV0000 java.lang.String Configured system environment:
WFLYSRV0000 java.lang.String Notification emitted when the process state changes
WFLYSRV0000 java.lang.String The attribute '%s' has changed from '%s' to '%s'
WFLYSRV0000 java.lang.String Repository initialized
WFLYSRV0000 java.lang.String Adding .gitignore
WFLYSRV0000 java.lang.String - Server configuration file in use: %s
WFLYSRV0000 java.lang.String %s started in %dms - Started %d of %d services (%d services are lazy, passive or on-demand) %s
WFLYSRV0000 java.lang.String %s started (with errors) in %dms - Started %d of %d services (%d services failed or missing dependencies, %d services are lazy, passive or on-demand) %s
WFLYSRV0001 WARN %s in subdeployment ignored. jboss-deployment-structure.xml is only parsed for top level deployments.
WFLYSRV0002 WARN Loading failed for the annotation index "%s" with the following exception: %s
WFLYSRV0003 WARN Could not index class %s at %s
WFLYSRV0007 ERROR Undeploy of deployment "%s" was rolled back with the following failure message: %s
WFLYSRV0008 ERROR Undeploy of deployment "%s" was rolled back with no failure message
WFLYSRV0009 INFO Undeployed "%s" (runtime-name: "%s")
WFLYSRV0010 INFO Deployed "%s" (runtime-name : "%s")
WFLYSRV0011 ERROR Redeploy of deployment "%s" was rolled back with the following failure message: %s
WFLYSRV0012 ERROR Redeploy of deployment "%s" was rolled back with no failure message
WFLYSRV0013 INFO Redeployed "%s"
WFLYSRV0014 ERROR Replacement of deployment "%s" by deployment "%s" was rolled back with the following failure message: %s
WFLYSRV0015 ERROR Replacement of deployment "%s" by deployment "%s" was rolled back with no failure message
WFLYSRV0016 INFO Replaced deployment "%s" with deployment "%s"
WFLYSRV0017 WARN Annotations import option %s specified in jboss-deployment-structure.xml for additional module %s has been ignored. Additional modules cannot import annotations.
WFLYSRV0018 WARN Deployment "%s" is using a private module ("%s") which may be changed or removed in future versions without notice.
WFLYSRV0019 WARN Deployment "%s" is using an unsupported module ("%s") which may be changed or removed in future versions without notice.
WFLYSRV0020 WARN Exception occurred removing deployment content %s
WFLYSRV0021 ERROR Deploy of deployment "%s" was rolled back with the following failure message: %s
WFLYSRV0022 ERROR Deploy of deployment "%s" was rolled back with no failure message
WFLYSRV0023 WARN Failed to parse property (%s), value (%s) as an integer
WFLYSRV0024 ERROR Cannot add module '%s' as URLStreamHandlerFactory provider
WFLYSRV0025 INFO %s
WFLYSRV0026 ERROR %s
WFLYSRV0027 INFO Starting deployment of "%s" (runtime-name: "%s")
WFLYSRV0028 INFO Stopped deployment %s (runtime-name: %s) in %dms
WFLYSRV0034 WARN No security realm or sasl server authentication defined for native management service; all access will be unrestricted.
WFLYSRV0035 WARN No security realm or http server authentication defined for http management service; all access will be unrestricted.
WFLYSRV0039 INFO Creating http management service using socket-binding (%s)
WFLYSRV0040 INFO Creating http management service using secure-socket-binding (%s)
WFLYSRV0041 INFO Creating http management service using socket-binding (%s) and secure-socket-binding (%s)
WFLYSRV0042 WARN Caught exception closing input stream for uploaded deployment content
WFLYSRV0043 ERROR Deployment unit processor %s unexpectedly threw an exception during undeploy phase %s of %s
WFLYSRV0045 WARN Extension %s is missing the required manifest attribute %s-%s (skipping extension)
WFLYSRV0046 WARN Extension %s URI syntax is invalid: %s
WFLYSRV0047 WARN Could not find Extension-List entry %s referenced from %s
WFLYSRV0048 WARN A server name configuration was provided both via system property %s ('%s') and via the xml configuration ('%s'). The xml configuration value will be used.
WFLYSRV0049 INFO %s starting
WFLYSRV0050 INFO %s stopped in %dms
WFLYSRV0051 INFO Admin console listening on http://%s:%d
WFLYSRV0052 INFO Admin console listening on https://%s:%d
WFLYSRV0053 INFO Admin console listening on http://%s:%d and https://%s:%d
WFLYSRV0054 INFO Admin console is not enabled
WFLYSRV0055 ERROR Caught exception during boot
WFLYSRV0056 java.lang.String Server boot has failed in an unrecoverable manner; exiting. See previous messages for details. %s
WFLYSRV0057 ERROR No deployment content with hash %s is available in the deployment content repository for deployment %s. Because this Host Controller is booting in ADMIN-ONLY mode, boot will be allowed to proceed to provide administrators an opportunity to correct this problem. If this Host Controller were not in ADMIN-ONLY mode this would be a fatal boot failure.
WFLYSRV0058 WARN Additional resource root %s added via jboss-deployment-structure.xml does not exist
WFLYSRV0059 WARN Class Path entry %s in %s does not point to a valid jar for a Class-Path reference.
WFLYSRV0060 INFO Http management interface listening on http://%s:%d/management
WFLYSRV0061 INFO Http management interface listening on https://%s:%d/management
WFLYSRV0062 INFO Http management interface listening on http://%s:%d/management and https://%s:%d/management
WFLYSRV0063 INFO Http management interface is not enabled
WFLYSRV0064 WARN urn:jboss:deployment-structure namespace found in jboss.xml for a sub deployment %s. This is only valid in a top level deployment.
WFLYSRV0065 WARN Failed to unmount deployment overlay
WFLYSRV0067 WARN jboss-deployment-dependencies cannot be used in a sub deployment, it must be specified at ear level: %s
WFLYSRV0068 ERROR No deployment overlay content with hash %s is available in the deployment content repository for deployment %s at location %s. Because this Host Controller is booting in ADMIN-ONLY mode, boot will be allowed to proceed to provide administrators an opportunity to correct this problem. If this Host Controller were not in ADMIN-ONLY mode this would be a fatal boot failure.
WFLYSRV0070 INFO Deployment restart detected for deployment %s, performing full redeploy instead.
WFLYSRV0071 WARN The operating system has limited the number of open files to %d for this process; a value of at least 4096 is recommended
WFLYSRV0072 java.lang.String Value expected for option %s
WFLYSRV0073 java.lang.String Invalid option '%s'
WFLYSRV0074 java.lang.String Malformed URL '%s' provided for option '%s'
WFLYSRV0075 java.lang.String Unable to load properties from URL '%s'
WFLYSRV0079 java.lang.IllegalArgumentException hostControllerName must be null if the server is not in a managed domain
WFLYSRV0080 java.lang.IllegalArgumentException hostControllerName may not be null if the server is in a managed domain
WFLYSRV0081 org.jboss.as.controller.OperationFailedException An IP address cannot be resolved using the given interface selection criteria. Failure was -- %s
WFLYSRV0082 org.jboss.msc.service.StartException failed to resolve interface %s
WFLYSRV0083 org.jboss.msc.service.StartException Failed to start the http-interface service
WFLYSRV0084 org.jboss.as.controller.OperationFailedException No deployment content with hash %s is available in the deployment content repository.
WFLYSRV0085 org.jboss.as.controller.OperationFailedException No deployment with name %s found
WFLYSRV0086 org.jboss.as.controller.OperationFailedException Cannot use %s with the same value for parameters %s and %s. Use %s to redeploy the same content or %s to replace content with a new version with the same name.
WFLYSRV0087 org.jboss.as.controller.OperationFailedException Deployment %s is already started
WFLYSRV0088 java.lang.IllegalStateException Missing configuration value for: %s
WFLYSRV0093 org.jboss.as.controller.OperationFailedException Caught IOException reading uploaded deployment content
WFLYSRV0094 org.jboss.as.controller.OperationFailedException Null stream at index [%d]
WFLYSRV0095 org.jboss.as.controller.OperationFailedException '%s' is not a valid URL
WFLYSRV0096 org.jboss.as.controller.OperationFailedException Error obtaining input stream from URL '%s'
WFLYSRV0097 java.lang.IllegalStateException ServiceModuleLoader already started
WFLYSRV0098 java.lang.IllegalStateException ServiceModuleLoader already stopped
WFLYSRV0099 java.lang.IllegalArgumentException '%s' cannot be loaded from a ServiceModuleLoader as its name does not start with '%s'
WFLYSRV0100 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to read '%s'
WFLYSRV0101 java.lang.IllegalArgumentException Deployment root is required
WFLYSRV0102 java.lang.IllegalArgumentException Sub-deployments require a parent deployment unit
WFLYSRV0103 org.jboss.as.server.deployment.DeploymentUnitProcessingException No Module Identifier attached to deployment '%s'
WFLYSRV0104 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to create VFSResourceLoader for root [%s]
WFLYSRV0105 java.lang.RuntimeException Failed to get file from remote repository
WFLYSRV0106 java.io.IOException Unable to create local directory: %s
WFLYSRV0107 java.io.IOException Did not read the entire file. Missing: %d
WFLYSRV0108 java.lang.String No value was provided for argument %s%n
WFLYSRV0109 java.lang.IllegalStateException Could not find the file repository connection to the host controller.
WFLYSRV0112 java.lang.IllegalArgumentException Unknown mount type %s
WFLYSRV0113 org.jboss.msc.service.StartException Failed to create temp file provider
WFLYSRV0115 org.jboss.as.controller.OperationFailedException System property %s cannot be set via the xml configuration file or from a management client; it's value must be known at initial process start so it can only set from the command line
WFLYSRV0116 org.jboss.as.controller.OperationFailedException System property %s cannot be set after the server name has been set via the xml configuration file or from a management client
WFLYSRV0117 java.lang.IllegalStateException Unable to initialise a basic SSLContext '%s'
WFLYSRV0119 java.lang.IllegalStateException Home directory does not exist: %s
WFLYSRV0121 java.lang.IllegalStateException Configuration directory does not exist: %s
WFLYSRV0122 java.lang.IllegalStateException Server base directory does not exist: %s
WFLYSRV0123 java.lang.IllegalStateException Server data directory is not a directory: %s
WFLYSRV0124 java.lang.IllegalStateException Could not create server data directory: %s
WFLYSRV0125 java.lang.IllegalStateException Server content directory is not a directory: %s
WFLYSRV0126 java.lang.IllegalStateException Could not create server content directory: %s
WFLYSRV0127 java.lang.IllegalStateException Log directory is not a directory: %s
WFLYSRV0128 java.lang.IllegalStateException Could not create log directory: %s
WFLYSRV0129 java.lang.IllegalStateException Server temp directory does not exist: %s
WFLYSRV0130 java.lang.IllegalStateException Could not create server temp directory: %s
WFLYSRV0131 java.lang.IllegalStateException Controller temp directory does not exist: %s
WFLYSRV0132 java.lang.IllegalStateException Could not create server temp directory: %s
WFLYSRV0133 java.lang.IllegalStateException Domain base dir does not exist: %s
WFLYSRV0134 java.lang.IllegalStateException Domain config dir does not exist: %s
WFLYSRV0135 java.lang.IllegalStateException Server base directory is not a directory: %s
WFLYSRV0136 java.lang.IllegalStateException Could not create server base directory: %s
WFLYSRV0137 org.jboss.as.controller.OperationFailedException No deployment content with hash %s is available in the deployment content repository for deployment '%s'. This is a fatal boot error. To correct the problem, either restart with the --admin-only switch set and use the CLI to install the missing content or remove it from the configuration, or remove the deployment from the xml configuration file and restart.
WFLYSRV0138 java.lang.IllegalStateException VFS is not available from the configured module loader
WFLYSRV0139 org.jboss.msc.service.ServiceNotFoundException Server controller service was removed
WFLYSRV0140 java.lang.IllegalStateException Root service was removed
WFLYSRV0141 java.lang.IllegalStateException Cannot start server
WFLYSRV0143 java.lang.IllegalArgumentException No directory called '%s' exists under '%s'
WFLYSRV0144 java.lang.IllegalArgumentException -D%s=%s does not exist
WFLYSRV0145 java.lang.IllegalArgumentException -D%s=%s is not a directory
WFLYSRV0146 java.lang.RuntimeException Error copying '%s' to '%s'
WFLYSRV0147 java.io.InvalidObjectException %s is null
WFLYSRV0148 java.io.InvalidObjectException portOffset is out of range
WFLYSRV0149 org.jboss.as.controller.OperationFailedException Invalid '%s' value: %d, the maximum index is %d
WFLYSRV0150 org.jboss.as.controller.OperationFailedException Cannot create input stream from URL '%s'
WFLYSRV0151 org.jboss.as.controller.OperationFailedException No bytes available at param %s
WFLYSRV0152 org.jboss.as.controller.OperationFailedException Only 1 piece of content is current supported (AS7-431)
WFLYSRV0153 org.jboss.msc.service.StartException Failed to process phase %s of %s
WFLYSRV0156 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to index deployment root for annotations
WFLYSRV0158 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to instantiate a %s
WFLYSRV0159 org.jboss.as.server.deployment.DeploymentUnitProcessingException No deployment repository available.
WFLYSRV0160 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to mount deployment content
WFLYSRV0161 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get manifest for deployment %s
WFLYSRV0163 java.lang.IllegalArgumentException Cannot merge resource root for a different file. This: %s mergee: %s
WFLYSRV0164 java.lang.RuntimeException Failed to create temp file provider
WFLYSRV0165 java.io.IOException Resource is too large to be a valid class file
WFLYSRV0166 org.jboss.as.server.deployment.DeploymentUnitProcessingException Sub deployment %s in jboss-deployment-structure.xml was not found. Available sub deployments: %s
WFLYSRV0167 org.jboss.as.server.deployment.DeploymentUnitProcessingException No jboss-deployment-structure.xml file found at %s
WFLYSRV0168 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error loading jboss-deployment-structure.xml from %s
WFLYSRV0169 javax.xml.stream.XMLStreamException Sub deployment '%s' is listed twice in jboss-deployment-structure.xml
WFLYSRV0170 javax.xml.stream.XMLStreamException Additional module name '%s' is not valid. Names must start with 'deployment.'
WFLYSRV0171 javax.xml.stream.XMLStreamException External resource roots not supported, resource roots may not start with a '/' : %s
WFLYSRV0172 javax.xml.stream.XMLStreamException Unexpected end of document
WFLYSRV0173 javax.xml.stream.XMLStreamException Missing one or more required attributes:%s
WFLYSRV0174 javax.xml.stream.XMLStreamException Unexpected content of type '%s', name is '%s', text is: '%s'
WFLYSRV0175 org.jboss.as.server.deployment.DeploymentUnitProcessingException No method found with id: %s on class (or its super class) %s
WFLYSRV0177 java.lang.RuntimeException Error getting reflective information for %s with ClassLoader %s
WFLYSRV0178 java.lang.IllegalStateException External Module Service already started
WFLYSRV0179 org.jboss.msc.service.StartException Failed to load module: %s
WFLYSRV0187 org.jboss.as.controller.OperationFailedException Failed to get multicast address for %s
WFLYSRV0188 java.lang.RuntimeException Failed to get multicast address for %s
WFLYSRV0190 org.jboss.as.controller.OperationFailedException Cannot add more than one socket binding group. Add of '%s' attempted, but '%s' already exists
WFLYSRV0191 java.lang.IllegalArgumentException Can't use both --server-config and --initial-server-config
WFLYSRV0192 javax.xml.stream.XMLStreamException Duplicate namespace %s in jboss-all.xml
WFLYSRV0193 org.jboss.as.server.deployment.DeploymentUnitProcessingException Two different versions of the same namespaces are present in jboss-all.xml, %s and %s are both present
WFLYSRV0194 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error loading jboss-all.xml from %s
WFLYSRV0195 java.lang.IllegalStateException Cannot obtain required module for: %s
WFLYSRV0196 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to get content for deployment overlay %s at %s
WFLYSRV0198 org.jboss.as.controller.OperationFailedException No deployment overlay content with hash %s is available in the deployment content repository for deployment overlay '%s' at location %s. This is a fatal boot error. To correct the problem, either restart with the --admin-only switch set and use the CLI to install the missing content or remove it from the configuration, or remove the deployment overlay from the xml configuration file and restart.
WFLYSRV0199 org.jboss.as.controller.OperationFailedException No deployment overlay content with hash %s is available in the deployment content repository.
WFLYSRV0200 org.jboss.as.controller.OperationFailedException Failed to read file %s
WFLYSRV0201 org.jboss.as.controller.OperationFailedException Cannot have more than one of %s
WFLYSRV0202 org.jboss.as.controller.OperationFailedException Unknown content item key: %s
WFLYSRV0203 org.jboss.as.controller.OperationFailedException Cannot use %s when %s are used
WFLYSRV0204 org.jboss.as.controller.OperationFailedException Null '%s'
WFLYSRV0205 org.jboss.as.controller.OperationFailedException There is already a deployment called %s with the same runtime name %s
WFLYSRV0206 java.lang.IllegalStateException Multiple deployment unit processors registered with priority %s and class %s
WFLYSRV0207 INFO Starting subdeployment (runtime-name: "%s")
WFLYSRV0208 INFO Stopped subdeployment (runtime-name: %s) in %dms
WFLYSRV0209 org.jboss.as.controller.OperationFailedException When specifying a 'module' you also need to specify the 'code'
WFLYSRV0210 java.lang.IllegalStateException Server is already paused
WFLYSRV0211 INFO Suspending server with %d ms timeout.
WFLYSRV0212 INFO Resuming server
WFLYSRV0213 WARN Failed to connect to host-controller, retrying.
WFLYSRV0215 ERROR Failed to resume activity %s. To resume normal operation it is recommended that you restart the server.
WFLYSRV0216 ERROR Error cleaning obsolete content %s
WFLYSRV0219 WARN %s deployment has been re-deployed, its content will not be removed. You will need to restart it.
WFLYSRV0220 INFO Server shutdown has been requested via an OS signal
WFLYSRV0221 WARN Deployment "%s" is using a deprecated module ("%s") which may be removed in future versions without notice.
WFLYSRV0222 java.lang.IllegalArgumentException Illegal permission name '%s'
WFLYSRV0223 java.lang.IllegalArgumentException Illegal permission actions '%s'
WFLYSRV0224 ERROR Could not mount overlay %s as parent %s is not a directory
WFLYSRV0230 DEBUG Vault is not initialized; resolution of vault expressions is not possible
WFLYSRV0231 java.lang.IllegalStateException Could not read or create the server UUID in file: %s
WFLYSRV0232 org.jboss.as.controller.OperationFailedException Could not get module info for module name: %s
WFLYSRV0233 java.lang.String Undeployed "%s" (runtime-name: "%s")
WFLYSRV0234 java.lang.String Deployed "%s" (runtime-name : "%s")
WFLYSRV0235 INFO Security Manager is enabled
WFLYSRV0236 INFO Suspending server with no timeout.
WFLYSRV0237 org.jboss.as.controller.OperationFailedException It is not possible to use use-current-server-config=false while specifying a server-config
WFLYSRV0238 org.jboss.as.controller.OperationFailedException server-config '%s' specified for reload could not be found
WFLYSRV0239 FATAL Aborting with exit code %d
WFLYSRV0240 INFO ProcessController has signalled to shut down; shutting down
WFLYSRV0241 INFO Shutting down in response to management operation '%s'
WFLYSRV0242 org.jboss.as.controller.OperationFailedException Cannot explode a deployment in a self-contained server
WFLYSRV0243 org.jboss.as.controller.OperationFailedException Cannot explode an unmanaged deployment
WFLYSRV0244 org.jboss.as.controller.OperationFailedException Cannot explode an already exploded deployment
WFLYSRV0245 org.jboss.as.controller.OperationFailedException Cannot explode an already deployed deployment
WFLYSRV0246 org.jboss.as.controller.OperationFailedException Cannot add content to a deployment in a self-contained server
WFLYSRV0247 org.jboss.as.controller.OperationFailedException Cannot add content to an unmanaged deployment
WFLYSRV0248 org.jboss.as.controller.OperationFailedException Cannot add content to an unexploded deployment
WFLYSRV0249 ERROR Could not copy files from the managed content repository to the running deployment for %s
WFLYSRV0250 org.jboss.as.controller.OperationFailedException Cannot remove content from a deployment in a self-contained server
WFLYSRV0251 org.jboss.as.controller.OperationFailedException Cannot remove content from an unmanaged deployment
WFLYSRV0252 org.jboss.as.controller.OperationFailedException Cannot remove content from an unexploded deployment
WFLYSRV0253 ERROR Could not delete file %s from the running deployment %s
WFLYSRV0254 org.jboss.as.controller.OperationFailedException Cannot read content from a deployment in a self-contained server
WFLYSRV0255 org.jboss.as.controller.OperationFailedException Cannot read content from an unmanaged deployment
WFLYSRV0257 java.lang.IllegalArgumentException Required system property '%s' not set
WFLYSRV0258 org.jboss.as.controller.OperationFailedException Cannot explode a subdeployment of an unexploded deployment
WFLYSRV0259 org.jboss.as.controller.OperationFailedException If attribute secure-socket-binding is defined ssl-context must also be defined
WFLYSRV0260 INFO Starting server in suspended mode
WFLYSRV0261 java.lang.String Boot complete
WFLYSRV0262 java.lang.String You cannot set both --start-mode and --admin-only
WFLYSRV0263 java.lang.String Unknown start mode %s
WFLYSRV0264 org.jboss.as.controller.OperationFailedException Cannot specify both admin-only and start-mode
WFLYSRV0265 WARN Invalid value '%s' for system property '%s' -- value must be a non-negative integer
WFLYSRV0267 javax.xml.stream.XMLStreamException Cannot mount resource root '%s', is it really an archive?
WFLYSRV0268 java.lang.RuntimeException Failed to pull the repository %s
WFLYSRV0269 java.lang.RuntimeException Failed to initialize the repository %s
WFLYSRV0270 ERROR Failed to publish configuration to %s
WFLYSRV0271 ERROR Git error: %s
WFLYSRV0272 INFO Suspending server
WFLYSRV0273 WARN Excluded subsystem %s via jboss-deployment-structure.xml does not exist.
WFLYSRV0274 WARN Excluded dependency %s via jboss-deployment-structure.xml does not exist.
WFLYSRV0275 java.lang.RuntimeException Maximum number of allowed jar resources reached for global-directory module name '%s'. The maximum allowed is %d files
WFLYSRV0276 org.jboss.msc.service.StartException There is an error in opening zip file %s
WFLYSRV0277 java.lang.RuntimeException Failed to load SSH Credentials %s
WFLYSRV0278 INFO The configuration history is managed through Git
WFLYSRV0279 INFO Git initialized in %s
WFLYSRV0280 java.lang.IllegalArgumentException Unable to initialise the git repository.
WFLYSRV0281 WARN System property %s is set. This should only be used for standalone clients. Setting this on the server will override your profile configuration.
WFLYSRV0282 INFO Server is starting with graceful startup disabled; external requests may receive failure responses until startup completes.
WFLYSRV0283 INFO A non-graceful startup was requested in conjunction with a suspended startup. The server will start suspended.
WFLYSRV0284 java.lang.RuntimeException Failed to restore the configuration after failing to initialize the repository %s
WFLYSRV0285 WARN Vault support has been removed, no vault resources will be initialised.
WFLYSRV0286 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to index static module %s for annotations
WFLYSRV0287 javax.xml.stream.XMLStreamException Security realms are no longer supported, please migrate references to them from the configuration.
WFLYSRV0288 java.lang.IllegalStateException Unable to create tmp dir for auth tokens as file already exists.
WFLYSRV0289 java.lang.IllegalStateException Unable to create auth dir %s.
WFLYSRV0290 java.lang.IllegalArgumentException Couldn't find the specified YAML file %s
WFLYSRV0291 java.lang.IllegalStateException The error cause is unknown at this thread. Check other log messages and caller to know the possible cause.
WFLYSRV0292 org.jboss.as.server.deployment.DeploymentUnitProcessingException The required service '%s' is not UP, it is currently '%s'.
WFLYSRV0293 WARN The '%s' module alias has been added as a dependency to '%s' deployment via %s. While this is allowed, it is recommended to use its target module instead. Consider replacing this alias with its target module '%s'.
WFLYSRV0294 WARN The '%s' module alias has been excluded from '%s' deployment via %s. While this is allowed, it is recommended to use its target module instead. Consider replacing this alias with its target module '%s'.
WFLYSRV0295 org.jboss.as.controller.OperationFailedException No %s installation has been prepared.
WFLYSRV0296 java.lang.IllegalStateException Authentication mechanism authentication is not yet complete
WFLYSRV0297 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism exchange received a message after authentication was already complete
WFLYSRV0298 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism message is too long
WFLYSRV0299 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism server-side authentication failed
WFLYSRV0300 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism token not verified
WFLYSRV0301 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authorization failed: "%s" running as "%s"
WFLYSRV0302 java.lang.IllegalStateException Authentication mechanism does not support security layer (wrapping/unwrapping)
WFLYSRV0303 org.wildfly.security.mechanism.AuthenticationMechanismException Invalid authentication mechanism negotiation message received
WFLYSRV0304 org.wildfly.security.mechanism.AuthenticationMechanismException No authentication mechanism token was given
WFLYSRV0305 org.wildfly.security.mechanism.AuthenticationMechanismException Authentication mechanism authentication failed due to one or more malformed fields
WFLYSRV0306 org.wildfly.security.mechanism.AuthenticationMechanismException Callback handler failed for unknown reason
WFLYSRV0307 org.wildfly.security.mechanism.AuthenticationMechanismException No authentication mechanism login name was given

WFLYSYSJMX

Code Level Return Type Message
WFLYSYSJMX0001 java.lang.IllegalArgumentException Null method name
WFLYSYSJMX0002 java.lang.IllegalArgumentException Unknown lifecyle method %s
WFLYSYSJMX0003 java.lang.String Error in destroy %s
WFLYSYSJMX0004 java.lang.String Error in stop %s
WFLYSYSJMX0005 java.lang.String Initialization failed %s
WFLYSYSJMX0006 java.lang.String Starting failed %s
WFLYSYSJMX0007 java.lang.String Stopping failed %s
WFLYSYSJMX0008 java.lang.String Destroying failed %s
WFLYSYSJMX0009 java.lang.String Initialization failed during postRegister

WFLYTHR

Code Level Return Type Message
WFLYTHR0001 WARN The '%s' attribute is no longer supported. The value [%f] of the '%s' attribute is being combined with the value [%f] of the '%s' attribute and the current processor count [%d] to derive a new value of [%d] for '%s'.
WFLYTHR0002 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0003 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0004 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0005 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0006 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0007 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0008 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0009 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0010 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0011 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0012 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0013 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0014 java.lang.IllegalStateException The thread factory service hasn't been initialized.
WFLYTHR0015 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0016 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0017 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0018 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0019 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0020 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0021 org.jboss.as.controller.OperationFailedException Failed to locate executor service '%s'
WFLYTHR0024 org.jboss.as.controller.OperationFailedException Missing '%s' for parameter '%s'
WFLYTHR0025 org.jboss.as.controller.OperationFailedException Missing '%s' for parameter '%s'
WFLYTHR0027 javax.xml.stream.XMLStreamException %s must be greater than or equal to zero
WFLYTHR0028 javax.xml.stream.XMLStreamException %s must be greater than or equal to zero
WFLYTHR0029 org.jboss.as.controller.OperationFailedException Missing '%s' for '%s'
WFLYTHR0030 org.jboss.as.controller.OperationFailedException Failed to parse '%s', allowed values are: %s
WFLYTHR0031 java.lang.IllegalStateException Unsupported attribute '%s'
WFLYTHR0032 org.jboss.as.controller.OperationFailedException Service '%s' not found.
WFLYTHR0033 java.lang.IllegalStateException The executor service hasn't been initialized.
WFLYTHR0034 java.lang.IllegalStateException Unsupported metric '%s'

WFLYTRACEXT

Code Level Return Type Message
WFLYTRACEXT0001 INFO Activating MicroProfile OpenTracing Subsystem
WFLYTRACEXT0013 org.jboss.as.controller.OperationFailedException The migrate operation cannot be performed: the server must be in admin-only mode
WFLYTRACEXT0014 java.lang.String Migration failed. See results for more details.

WFLYTX

Code Level Return Type Message
WFLYTX0001 ERROR Unable to roll back active transaction
WFLYTX0002 ERROR Unable to get transaction state
WFLYTX0003 ERROR APPLICATION ERROR: transaction still active in request with status %s
WFLYTX0004 org.jboss.msc.service.StartException Create failed
WFLYTX0005 org.jboss.msc.service.StartException %s manager create failed
WFLYTX0006 org.jboss.msc.service.StartException Failed to configure object store browser bean
WFLYTX0007 java.lang.IllegalStateException Service not started
WFLYTX0008 org.jboss.msc.service.StartException Start failed
WFLYTX0009 java.lang.String Unknown metric %s
WFLYTX0010 java.lang.RuntimeException MBean Server service not installed, this functionality is not available if the JMX subsystem has not been installed.
WFLYTX0012 org.jboss.as.controller.OperationFailedException Attributes %s and %s are alternatives; both cannot be set with conflicting values.
WFLYTX0013 WARN The %s attribute on the %s is set to the default value. This is a danger for environments running multiple servers. Please make sure the attribute value is unique.
WFLYTX0015 org.jboss.as.controller.OperationFailedException Jndi names have to start with java:/ or java:jboss/
WFLYTX0023 org.jboss.as.controller.OperationFailedException %s must be undefined if %s is 'true'.
WFLYTX0024 org.jboss.as.controller.OperationFailedException %s must be defined if %s is defined.
WFLYTX0025 org.jboss.as.controller.OperationFailedException Either %s must be 'true' or %s must be defined.
WFLYTX0026 WARN The transaction %s could not be removed from the cache during cleanup.
WFLYTX0027 WARN The pre-Jakarta Connectors synchronization %s associated with tx %s failed during after completion
WFLYTX0028 WARN The Jakarta Connectors synchronization %s associated with tx %s failed during after completion
WFLYTX0029 java.lang.IllegalStateException Syncs are not allowed to be registered when the tx is in state %s
WFLYTX0030 java.lang.IllegalStateException Indexed child resources can only be registered if the parent resource supports ordered children. The parent of '%s' is not indexed
WFLYTX0031 javax.xml.stream.XMLStreamException The attribute '%s' is no longer supported
WFLYTX0032 org.jboss.as.controller.OperationFailedException %s must be defined if %s is 'true'.
WFLYTX0033 org.jboss.as.controller.OperationFailedException Only one of %s and %s can be 'true'.
WFLYTX0034 DEBUG relative_to property of the object-store is set to the default value with jboss.server.data.dir
WFLYTX0035 jakarta.resource.spi.work.WorkCompletedException Cannot find or import inflow transaction for xid %s and work %s
WFLYTX0036 jakarta.resource.spi.work.WorkCompletedException Imported Jakarta Connectors inflow transaction with xid %s of work %s is inactive
WFLYTX0037 jakarta.resource.spi.work.WorkCompletedException Unexpected error on resuming transaction %s for work %s
WFLYTX0038 java.lang.RuntimeException Unexpected error on suspending transaction for work %s
WFLYTX0039 WARN A value of zero is not permitted for the maximum timeout, as such the timeout has been set to %s
WFLYTX0040 java.lang.IllegalStateException There is no active transaction at the current context to register synchronization '%s'

WFLYTXLRACOORD

Code Level Return Type Message
WFLYTXLRACOORD0001 INFO Activating MicroProfile LRA Coordinator Subsystem
WFLYTXLRACOORD0002 org.jboss.msc.service.StartException LRA recovery service start failed
WFLYTXLRACOORD0003 INFO Starting Narayana MicroProfile LRA Coordinator available at path %s/lra-coordinator
WFLYTXLRACOORD0004 ERROR Failed to stop Narayana MicroProfile LRA Coordinator at path %s/lra-coordinator

WFLYTXLRAPARTICIPANT

Code Level Return Type Message
WFLYTXLRAPARTICIPANT0001 INFO Activating MicroProfile LRA Participant Subsystem with system property (lra.coordinator.url) value as %s
WFLYTXLRAPARTICIPANT0002 INFO Starting Narayana MicroProfile LRA Participant Proxy available at path %s/lra-participant-narayana-proxy
WFLYTXLRAPARTICIPANT0003 WARN The CDI marker file cannot be created
WFLYTXLRAPARTICIPANT0004 ERROR Failed to stop Narayana MicroProfile LRA Participant Proxy at path %s//lra-participant-narayana-proxy

WFLYUT

Code Level Return Type Message
WFLYUT0001 ERROR Could not initialize Jakarta Server Pages
WFLYUT0003 INFO Undertow %s starting
WFLYUT0004 INFO Undertow %s stopping
WFLYUT0005 WARN Secure listener for protocol: '%s' not found! Using non secure port!
WFLYUT0006 INFO Undertow %s listener %s listening on %s:%d
WFLYUT0007 INFO Undertow %s listener %s stopped, was bound to %s:%d
WFLYUT0008 INFO Undertow %s listener %s suspending
WFLYUT0009 INFO Could not load class designated by HandlesTypes [%s].
WFLYUT0010 WARN Could not load web socket endpoint %s.
WFLYUT0011 WARN Could not load web socket application config %s.
WFLYUT0012 INFO Started server %s.
WFLYUT0013 WARN Could not create redirect URI.
WFLYUT0014 INFO Creating file handler for path '%s' with options [directory-listing: '%s', follow-symlink: '%s', case-sensitive: '%s', safe-symlink-paths: '%s']
WFLYUT0016 WARN Could not resolve name in absolute ordering: %s
WFLYUT0017 WARN Could not delete servlet temp file %s
WFLYUT0018 INFO Host %s starting
WFLYUT0019 INFO Host %s stopping
WFLYUT0020 WARN Clustering not supported, falling back to non-clustered session manager
WFLYUT0021 INFO Registered web context: '%s' for server '%s'
WFLYUT0022 INFO Unregistered web context: '%s' from server '%s'
WFLYUT0023 INFO Skipped SCI for jar: %s.
WFLYUT0024 WARN Failed to persist session attribute %s with value %s for session %s
WFLYUT0027 java.lang.String Failed to parse XML descriptor %s at [%s,%s]
WFLYUT0028 java.lang.String Failed to parse XML descriptor %s
WFLYUT0029 java.lang.String @WebServlet is only allowed at class level %s
WFLYUT0030 java.lang.String @WebInitParam requires name and value on %s
WFLYUT0031 java.lang.String @WebFilter is only allowed at class level %s
WFLYUT0032 java.lang.String @WebListener is only allowed at class level %s
WFLYUT0033 java.lang.String @RunAs needs to specify a role name on %s
WFLYUT0034 java.lang.String @DeclareRoles needs to specify role names on %s
WFLYUT0035 java.lang.String @MultipartConfig is only allowed at class level %s
WFLYUT0036 java.lang.String @ServletSecurity is only allowed at class level %s
WFLYUT0037 java.lang.RuntimeException %s has the wrong component type, it cannot be used as a web component
WFLYUT0038 java.lang.String TLD file %s not contained in root %s
WFLYUT0039 org.jboss.as.server.deployment.DeploymentUnitProcessingException Failed to resolve module for deployment %s
WFLYUT0040 java.lang.String Duplicate others in absolute ordering
WFLYUT0041 java.lang.String Invalid relative ordering
WFLYUT0042 java.lang.String Conflict occurred processing web fragment in JAR: %s
WFLYUT0043 java.lang.String Relative ordering processing error with JAR: %s
WFLYUT0044 java.lang.String Ordering includes both before and after others in JAR: %s
WFLYUT0045 java.lang.String Duplicate name declared in JAR: %s
WFLYUT0046 WARN Unknown web fragment name declared in JAR: %s
WFLYUT0047 java.lang.String Relative ordering conflict with JAR: %s
WFLYUT0048 java.lang.String Failed to process WEB-INF/lib: %s
WFLYUT0049 org.jboss.as.server.deployment.DeploymentUnitProcessingException Error loading SCI from module: %s
WFLYUT0050 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unable to resolve annotation index for deployment unit: %s
WFLYUT0051 org.jboss.as.server.deployment.DeploymentUnitProcessingException Deployment error processing SCI for jar: %s
WFLYUT0052 java.lang.RuntimeException Security context creation failed
WFLYUT0053 java.lang.IllegalStateException No security context found
WFLYUT0054 java.lang.String Unknown metric %s
WFLYUT0055 java.lang.IllegalArgumentException Null default host
WFLYUT0056 java.lang.IllegalStateException Null host name
WFLYUT0057 java.lang.IllegalArgumentException Null parameter %s
WFLYUT0058 java.lang.IllegalStateException Cannot activate context: %s
WFLYUT0059 java.lang.RuntimeException Could not construct handler for class: %s. with parameters %s
WFLYUT0060 org.jboss.msc.service.StartException Invalid persistent sessions directory %s
WFLYUT0061 org.jboss.msc.service.StartException Failed to create persistent sessions dir %s
WFLYUT0062 org.jboss.msc.service.StartException Could not create log directory: %s
WFLYUT0063 java.lang.IllegalStateException Could not find the port number listening for protocol %s
WFLYUT0064 java.lang.RuntimeException Failed to configure handler %s
WFLYUT0065 java.lang.IllegalArgumentException Handler class %s was not a handler or a wrapper
WFLYUT0066 java.lang.RuntimeException Failed to configure handler %s
WFLYUT0067 java.lang.IllegalArgumentException Servlet class not defined for servlet %s
WFLYUT0068 ERROR Error obtaining authorization helper
WFLYUT0069 ERROR Ignoring shared-session-config in jboss-all.xml in deployment %s. This entry is only valid in top level deployments.
WFLYUT0070 java.lang.RuntimeException Could not load handler %s from %s module
WFLYUT0071 WARN No ALPN provider found, HTTP/2 will not be enabled. To remove this message set enable-http2 to false on the listener %s in the Undertow subsystem.
WFLYUT0072 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not find configured external path %s
WFLYUT0073 java.lang.IllegalArgumentException mod_cluster advertise socket binding requires multicast address to be set
WFLYUT0074 ERROR Could not find TLD %s
WFLYUT0075 java.lang.IllegalArgumentException Cannot register resource of type %s
WFLYUT0076 java.lang.IllegalArgumentException Cannot remove resource of type %s
WFLYUT0077 ERROR Error invoking secure response
WFLYUT0078 ERROR Failed to register management view for websocket %s at %s
WFLYUT0079 java.lang.IllegalStateException No SSL Context available from security realm '%s'. Either the realm is not configured for SSL, or the server has not been reloaded since the SSL config was added.
WFLYUT0080 WARN Valves are no longer supported, %s is not activated.
WFLYUT0081 WARN The deployment %s will not be distributable because this feature is disabled in web-fragment.xml of the module %s.
WFLYUT0082 org.jboss.msc.service.StartException Could not start '%s' listener.
WFLYUT0083 java.lang.String %s is not allowed to be null
WFLYUT0087 java.lang.IllegalArgumentException Duplicate default web module '%s' configured on server '%s', host '%s'
WFLYUT0089 java.lang.String Predicate %s was not valid, message was: %s
WFLYUT0090 java.lang.IllegalArgumentException Key alias %s does not exist in the configured key store
WFLYUT0091 java.lang.IllegalArgumentException Key store entry %s is not a private key entry
WFLYUT0092 java.lang.IllegalArgumentException Credential alias %s does not exist in the configured credential store
WFLYUT0093 java.lang.IllegalArgumentException Credential %s is not a clear text password
WFLYUT0094 WARN Configuration option [%s] ignored when using Elytron subsystem
WFLYUT0095 java.lang.String the path ['%s'] doesn't exist on file system
WFLYUT0097 java.lang.String If http-upgrade is enabled, remoting worker and http(s) worker must be the same. Please adjust values if need be.
WFLYUT0098 ERROR Unexpected Authentication Error: %s
WFLYUT0099 org.jboss.as.controller.OperationFailedException Session manager not available
WFLYUT0100 org.jboss.as.controller.OperationFailedException Session %s not found
WFLYUT0101 WARN Duplicate servlet mapping %s found
WFLYUT0102 org.jboss.as.controller.OperationFailedException The pattern %s is not a valid date pattern.
WFLYUT0103 org.jboss.as.controller.OperationFailedException The time zone id %s is invalid.
WFLYUT0104 org.jboss.as.server.deployment.DeploymentUnitProcessingException Some classes referenced by annotation: %s in class: %s are missing.
WFLYUT0105 org.jboss.msc.service.DuplicateServiceException Host and context path are occupied, %s can't be registered. Message was: %s
WFLYUT0106 ERROR Unable to generate obfuscated session route from '%s'
WFLYUT0107 INFO Generated obfuscated session route '%s' from '%s'
WFLYUT0108 org.jboss.as.server.deployment.DeploymentUnitProcessingException The deployment is configured to use legacy security which is no longer available.
WFLYUT0109 org.jboss.msc.service.StartException The deployment is configured to use legacy security which is no longer supported.
WFLYUT0110 org.jboss.as.controller.OperationFailedException The use of security realms at runtime is unsupported.
WFLYUT0111 WARN The annotation: '%s' will have no effect on Servlet: '%s'

WFLYWELD

Code Level Return Type Message
WFLYWELD-001 DEBUG Discovered %s
WFLYWELD0000 DEBUG Unable to load annotation %s
WFLYWELD0001 ERROR Failed to setup Weld contexts
WFLYWELD0002 ERROR Failed to tear down Weld contexts
WFLYWELD0003 INFO Processing weld deployment %s
WFLYWELD0005 ERROR Could not find BeanManager for deployment %s
WFLYWELD0006 DEBUG Starting Services for Jakarta Contexts and Dependency Injection deployment: %s
WFLYWELD0007 WARN Could not load portable extension class %s
WFLYWELD0008 WARN @Resource injection of type %s is not supported for non-Jakarta Enterprise Beans components. Injection point: %s
WFLYWELD0009 DEBUG Starting weld service for deployment %s
WFLYWELD0010 DEBUG Stopping weld service for deployment %s
WFLYWELD0011 WARN Warning while parsing %s:%s %s
WFLYWELD0012 WARN Warning while parsing %s:%s %s
WFLYWELD0013 WARN Deployment %s contains Jakarta Contexts and Dependency Injection annotations but no bean archive was found (no beans.xml or class with bean defining annotations was present).
WFLYWELD0014 ERROR Exception tearing down thread state
WFLYWELD0016 ERROR Could not read entries
WFLYWELD0017 WARN URL scanner does not understand the URL protocol %s, Jakarta Contexts and Dependency Injection beans will not be scanned.
WFLYWELD0018 WARN Found both WEB-INF/beans.xml and WEB-INF/classes/META-INF/beans.xml. It is not portable to use both locations at the same time. Weld is going to use the former location for this deployment.
WFLYWELD0019 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could get beans.xml file as URL when processing file: %s
WFLYWELD0020 org.jboss.as.server.deployment.DeploymentUnitProcessingException Could not load interceptor class : %s
WFLYWELD0021 org.jboss.as.server.deployment.DeploymentUnitProcessingException Service %s didn't implement the jakarta.enterprise.inject.spi.Extension interface
WFLYWELD0022 java.lang.IllegalArgumentException View of type %s not found on Jakarta Enterprise Beans %s
WFLYWELD0030 java.lang.IllegalArgumentException Unknown interceptor class for Jakarta Contexts and Dependency Injection %s
WFLYWELD0031 java.lang.IllegalArgumentException %s cannot be null
WFLYWELD0032 java.lang.IllegalArgumentException Injection point represents a method which doesn't follow JavaBean conventions (must have exactly one parameter) %s
WFLYWELD0033 java.lang.IllegalArgumentException %s annotation not found on %s
WFLYWELD0034 java.lang.IllegalStateException Could not resolve @EJB injection for %s on %s
WFLYWELD0035 java.lang.IllegalStateException Resolved more than one Jakarta Enterprise Beans for @EJB injection of %s on %s. Found %s
WFLYWELD0036 java.lang.IllegalArgumentException Could not determine bean class from injection point type of %s
WFLYWELD0037 java.lang.IllegalArgumentException Error injecting persistence unit into Jakarta Contexts and Dependency Injection managed bean. Can't find a persistence unit named '%s' in deployment %s for injection point %s
WFLYWELD0038 java.lang.IllegalStateException Could not inject SecurityManager, security is not enabled
WFLYWELD0039 java.lang.IllegalStateException Singleton not set for %s. This means that you are trying to access a weld deployment with a Thread Context ClassLoader that is not associated with the deployment.
WFLYWELD0040 java.lang.IllegalStateException %s is already running
WFLYWELD0041 java.lang.IllegalStateException %s is not started
WFLYWELD0043 java.lang.IllegalArgumentException BeanDeploymentArchive with id %s not found in deployment
WFLYWELD0044 java.lang.IllegalArgumentException Error injecting resource into Jakarta Contexts and Dependency Injection managed bean. Can't find a resource named %s
WFLYWELD0045 java.lang.IllegalArgumentException Cannot determine resource name. Both jndiName and mappedName are null
WFLYWELD0046 java.lang.IllegalArgumentException Cannot inject injection point %s
WFLYWELD0047 java.lang.IllegalStateException %s cannot be used at runtime
WFLYWELD0048 java.lang.String These attributes must be 'true' for use with CDI 1.0 '%s'
WFLYWELD0049 java.lang.IllegalArgumentException Error injecting resource into Jakarta Contexts and Dependency Injection managed bean. Can't find a resource named %s defined on %s
WFLYWELD0050 org.jboss.weld.resources.spi.ClassFileInfoException %s was not found in composite index
WFLYWELD0051 org.jboss.weld.resources.spi.ClassFileInfoException Cannot load %s
WFLYWELD0052 WARN Using deployment classloader to load proxy classes for module %s. Package-private access will not work. To fix this the module should declare dependencies on %s
WFLYWELD0053 java.lang.IllegalStateException Component interceptor support not available for: %s
WFLYWELD0054 WARN Could not read provided index of an external bean archive: %s
WFLYWELD0055 WARN Could not index class [%s] from an external bean archive: %s
WFLYWELD0056 java.lang.IllegalStateException Weld is not initialized yet
WFLYWELD0057 java.lang.IllegalStateException Persistence unit '%s' failed.
WFLYWELD0058 java.lang.IllegalStateException Persistence unit '%s' removed.

WFLYWELDEJB

Code Level Return Type Message
WFLYWELDEJB0001 jakarta.ejb.NoSuchEJBException EJB has been removed: %s

WFLYWS

Code Level Return Type Message
WFLYWS0001 WARN Cannot load WS deployment aspects from %s
WFLYWS0002 INFO Activating WebServices Extension
WFLYWS0003 INFO Starting %s
WFLYWS0004 INFO Stopping %s
WFLYWS0005 FATAL Error while creating configuration service
WFLYWS0006 ERROR Error while destroying configuration service
WFLYWS0007 WARN Could not read WSDL from: %s
WFLYWS0008 WARN [JAXWS 2.2 spec, section 7.7] The @WebService and @WebServiceProvider annotations are mutually exclusive - %s won't be considered as a webservice endpoint, since it doesn't meet that requirement
WFLYWS0009 WARN WebService endpoint class cannot be final - %s won't be considered as a webservice endpoint
WFLYWS0010 WARN Ignoring without and : %s
WFLYWS0011 ERROR Cannot register record processor in JMX server
WFLYWS0012 ERROR Cannot unregister record processor from JMX server
WFLYWS0013 INFO MBeanServer not available, skipping registration/unregistration of %s
WFLYWS0014 WARN Multiple Enterprise Beans 3 endpoints in the same deployment with different declared security roles; be aware this might be a security risk if you're not controlling allowed roles (@RolesAllowed) on each ws endpoint method.
WFLYWS0015 ERROR Cannot register endpoint: %s in JMX server
WFLYWS0016 ERROR Cannot unregister endpoint: %s from JMX server
WFLYWS0017 WARN Invalid handler chain file: %s
WFLYWS0018 ERROR Web service method %s must not be static or final. See section 5.3.2.4.2 of "Jakarta Enterprise Web Services 2.0".
WFLYWS0019 ERROR Web service method %s must be public. See section 5.3.2.4.2 of "Jakarta Enterprise Web Services 2.0".
WFLYWS0020 ERROR Web service implementation class %s does not contain method %s
WFLYWS0021 ERROR Web service implementation class %s does not contain an accessible method %s
WFLYWS0022 ERROR Web service implementation class %s may not declare a finalize() method. See section 5.3.2.4.2 of "Jakarta Enterprise Web Services 2.0".
WFLYWS0023 java.lang.NullPointerException Null endpoint name
WFLYWS0024 java.lang.NullPointerException Null endpoint class
WFLYWS0025 java.lang.IllegalStateException Cannot resolve module or classloader for deployment %s
WFLYWS0026 jakarta.xml.ws.WebServiceException Handler chain config file %s not found in %s
WFLYWS0027 java.lang.IllegalStateException Unexpected element: %s
WFLYWS0028 java.lang.IllegalStateException Unexpected end tag: %s
WFLYWS0029 java.lang.IllegalStateException Reached end of xml document unexpectedly
WFLYWS0030 java.lang.IllegalStateException Could not find class attribute for deployment aspect
WFLYWS0031 java.lang.IllegalStateException Could not create a deployment aspect of class: %s
WFLYWS0032 java.lang.IllegalStateException Could not find property name attribute for deployment aspect: %s
WFLYWS0033 java.lang.IllegalStateException Could not find property class attribute for deployment aspect: %s
WFLYWS0034 java.lang.IllegalArgumentException Unsupported property class: %s
WFLYWS0035 java.lang.IllegalStateException Could not create list of type: %s
WFLYWS0036 java.lang.IllegalStateException Could not create map of type: %s
WFLYWS0037 java.lang.String No metrics available
WFLYWS0038 java.lang.IllegalStateException Cannot find component view: %s
WFLYWS0039 java.io.IOException Child '%s' not found for VirtualFile: %s
WFLYWS0040 java.lang.Exception Failed to create context
WFLYWS0041 java.lang.Exception Failed to start context
WFLYWS0042 java.lang.Exception Failed to stop context
WFLYWS0043 java.lang.Exception Failed to destroy context
WFLYWS0044 java.lang.IllegalStateException Cannot create servlet delegate: %s
WFLYWS0045 java.lang.IllegalStateException Cannot obtain deployment property: %s
WFLYWS0046 java.lang.IllegalStateException Multiple security domains not supported. First domain: '%s' second domain: '%s'
WFLYWS0047 java.lang.IllegalArgumentException Web Service endpoint %s with URL pattern %s is already registered. Web service endpoint %s is requesting the same URL pattern.
WFLYWS0048 org.jboss.as.server.deployment.DeploymentUnitProcessingException @WebServiceRef injection target is invalid. Only setter methods are allowed: %s
WFLYWS0049 org.jboss.as.server.deployment.DeploymentUnitProcessingException @WebServiceRef attribute 'name' is required for class level annotations.
WFLYWS0050 org.jboss.as.server.deployment.DeploymentUnitProcessingException @WebServiceRef attribute 'type' is required for class level annotations.
WFLYWS0051 org.jboss.as.controller.OperationFailedException Config %s doesn't exist
WFLYWS0052 org.jboss.msc.service.StartException Unsupported handler chain type: %s. Supported types are either %s or %s
WFLYWS0054 org.jboss.as.controller.OperationFailedException Config %s: %s handler chain with id %s doesn't exist
WFLYWS0057 org.jboss.as.server.deployment.DeploymentUnitProcessingException Unable to get URL for: %s
WFLYWS0058 org.jboss.as.server.deployment.DeploymentUnitProcessingException Jakarta XML RPC not supported
WFLYWS0059 org.jboss.as.server.deployment.DeploymentUnitProcessingException %s library (%s) detected in ws endpoint deployment; either provide a proper deployment replacing embedded libraries with container module dependencies or disable the webservices subsystem for the current deployment adding a proper jboss-deployment-structure.xml descriptor to it. The former approach is recommended, as the latter approach causes most of the webservices Jakarta EE and any JBossWS specific functionality to be disabled.
WFLYWS0060 org.jboss.as.server.deployment.DeploymentUnitProcessingException Web service endpoint class %s not found
WFLYWS0061 org.jboss.as.server.deployment.DeploymentUnitProcessingException The endpointInterface %s declared in the @WebService annotation on web service implementation bean %s was not found.
WFLYWS0062 org.jboss.as.server.deployment.DeploymentUnitProcessingException Class verification of Java Web Service implementation class %s failed.
WFLYWS0063 org.jboss.as.webservices.config.DisabledOperationException Could not update WS server configuration because of pending former model update(s) requiring reload.
WFLYWS0064 org.jboss.as.webservices.config.DisabledOperationException Could not update WS server configuration because of existing WS deployment on the server.
WFLYWS0065 WARN Annotation '@%s' found on class '%s'. Perhaps you forgot to add a '%s' module dependency to your deployment?
WFLYWS0066 org.jboss.wsf.spi.WSFException Servlet class %s declared in web.xml; either provide a proper deployment relying on JBossWS or disable the webservices subsystem for the current deployment adding a proper jboss-deployment-structure.xml descriptor to it. The former approach is recommended, as the latter approach causes most of the webservices Jakarta EE and any JBossWS specific functionality to be disabled.
WFLYWS0067 ERROR Could not activate the webservices subsystem.
WFLYWS0068 WARN A potentially problematic %s library (%s) detected in ws endpoint deployment; Check if this library can be replaced with container module
WFLYWS0070 DEBUG Authorization failed for user: %s
WFLYWS0071 DEBUG Failed to authenticate username %s:, incorrect username/password
WFLYWS0072 DEBUG Error occured when authenticate username %s. Exception message: %s
WFLYWS0073 java.lang.IllegalStateException The target endpoint %s is undeploying or stopped
WFLYWS0074 java.lang.IllegalStateException The deployment is configured to use legacy security which is no longer supported.

WFLYXTS

Code Level Return Type Message
WFLYXTS0001 org.jboss.msc.service.StartException TxBridge inbound recovery service start failed
WFLYXTS0002 org.jboss.msc.service.StartException TxBridge outbound recovery service start failed
WFLYXTS0003 org.jboss.msc.service.StartException XTS service start failed
WFLYXTS0004 java.lang.IllegalStateException Service not started
WFLYXTS0009 WARN Rejecting call because it is not part of any XTS transaction
WFLYXTS0010 ERROR Cannot get transaction status on handling context %s

WFNAM

Code Level Return Type Message
WFNAM-0001 TRACE Service configuration failure loading naming providers
WFNAM00000 INFO WildFly Naming version %s
WFNAM00003 javax.naming.ConfigurationException Invalid naming provider URI: %s
WFNAM00004 javax.naming.NameNotFoundException Name "%s" is not found
WFNAM00005 javax.naming.InvalidNameException Invalid empty name
WFNAM00006 javax.naming.NoPermissionException Cannot modify read-only naming context
WFNAM00007 javax.naming.InvalidNameException Invalid URL scheme name "%s"
WFNAM00009 java.lang.IndexOutOfBoundsException Name index %d is out of bounds
WFNAM00010 java.lang.IllegalArgumentException Invalid null name segment at index %d
WFNAM00011 javax.naming.InvalidNameException Missing close quote '%s' in name "%s"
WFNAM00012 javax.naming.InvalidNameException Unterminated escape sequence in name "%s"
WFNAM00014 org.wildfly.naming.client.RenameAcrossNamingProvidersException Renaming from "%s" to "%s" across providers is not supported
WFNAM00015 javax.naming.NotContextException Composite name segment "%s" does not refer to a context
WFNAM00016 DEBUG Closing context "%s" failed
WFNAM00017 javax.naming.CommunicationException No JBoss Remoting endpoint has been configured
WFNAM00018 javax.naming.CommunicationException Failed to connect to remote host
WFNAM00019 javax.naming.InterruptedNamingException Naming operation interrupted
WFNAM00020 javax.naming.CommunicationException Remote naming operation failed
WFNAM00022 javax.naming.CommunicationException The server provided no compatible protocol versions
WFNAM00023 javax.naming.CommunicationException Received an invalid response from the server
WFNAM00024 javax.naming.OperationNotSupportedException Naming operation not supported
WFNAM00025 INFO org.jboss.naming.remote.client.InitialContextFactory is deprecated; new applications should use org.wildfly.naming.client.WildFlyInitialContextFactory instead
WFNAM00026 javax.naming.OperationNotSupportedException No provider for found for URI: %s
WFNAM00029 javax.naming.CommunicationException Invalid leading bytes in header
WFNAM00031 java.io.IOException Outcome not understood
WFNAM00032 javax.naming.AuthenticationException Peer authentication failed
WFNAM00033 javax.naming.AuthenticationException Connection sharing not supported
WFNAM00034 ERROR Unexpected parameter type - expected: %d received: %d
WFNAM00035 ERROR Failed to send exception response to client
WFNAM00036 WARN Unexpected internal error
WFNAM00037 ERROR null correlationId so error not sent to client
WFNAM00038 java.io.IOException Unrecognized messageId
WFNAM00039 ERROR Unable to send header, closing channel
WFNAM00040 java.lang.IllegalArgumentException Unsupported protocol version [ %d ]
WFNAM00041 ERROR Error determining version selected by client
WFNAM00043 java.lang.RuntimeException Unable to load callback handler class "%s"
WFNAM00044 javax.naming.NamingException Unable to instantiate callback handler instance of type "%s"
WFNAM00049 INFO Usage of the legacy "remote.connections" property is deprecated; please use javax.naming.Context#PROVIDER_URL instead
WFNAM00051 WARN Provider URLs already given via standard mechanism; ignoring legacy property-based connection configuration
WFNAM00052 javax.naming.ConfigurationException Invalid value given for property "%s": "%s" is not numeric
WFNAM00053 javax.naming.ConfigurationException Failed to synthesize a valid provider URL
WFNAM00054 WARN Ignoring duplicate destination URI "%s"
WFNAM00055 org.wildfly.naming.client.ExhaustedDestinationsException No more destinations are available to attempt the operation (%d blocklisted, %d transiently failed). See suppressed exceptions for details
WFNAM00056 org.wildfly.naming.client.ExhaustedDestinationsException No more destinations are available to attempt the operation.
WFNAM00057 INFO jboss-naming-client.properties is deprecated; new applications should use org.wildfly.naming.client.WildFlyInitialContextFactory instead
WFNAM00058 java.io.InvalidClassException Exception resolving class %s for unmarshalling; it has either been blocklisted or not allowlisted
WFNAM00059 DEBUG JavaEE to JakartaEE backward compatibility layer have been installed

WFSM

Code Level Return Type Message
WFSM-00001 DEBUG Permission check failed (permission "%s" in code source "%s" of "%s", principals "%s")
WFSM-00001 DEBUG Permission check failed (permission "%s" in code source "%s" of "%s")
WFSM000001 java.security.AccessControlException Permission check failed (permission "%s" in code source "%s" of "%s")
WFSM000002 java.lang.SecurityException Security manager may not be changed
WFSM000003 java.lang.SecurityException Unknown security context type
WFSM000004 java.lang.IllegalArgumentException Unexpected character '%s' at offset %d of '%s'
WFSM000005 java.lang.IllegalArgumentException Invalid action '%s' at offset %d of '%s'
WFSM000006 java.lang.IllegalArgumentException Invalid permission name '%s'
WFSM000007 java.lang.SecurityException Permission collection is read-only
WFSM000008 java.lang.IllegalArgumentException Invalid permission (expected an instance of %s, but got %s)

WFTXN

Code Level Return Type Message
WFTXN-001 java.lang.String Subordinate XAResource at %s
WFTXN-001 java.lang.String Failed to add XAResource %s with Xid %s pointing to location %s to XAResourceRegistry
WFTXN-001 DEBUG Failed to configure a remote transaction service provider
WFTXN-001 DEBUG Closing the recovery stream after recovery failed threw an exception
WFTXN-001 TRACE Got exception on inbound message
WFTXN-001 TRACE Got exception on outbound message
WFTXN-001 TRACE Failure on running doRecover during initialization
WFTXN-001 TRACE Created xa resource recovery file: %s
WFTXN-001 TRACE Deleted xa resource recovery file: %s
WFTXN-001 TRACE Reloaded xa resource recovery registry file: %s
WFTXN-001 TRACE Added resource (%s) to xa resource recovery registry %s
WFTXN-001 TRACE Recovered in doubt xa resource (%s) from xa resource recovery registry %s
WFTXN-001 TRACE Unknown xid %s to be removed from the instances known to the wfly txn client
WFTXN0000 java.lang.IllegalStateException No transaction associated with the current thread
WFTXN0001 jakarta.transaction.NotSupportedException A transaction is already in progress
WFTXN0002 jakarta.transaction.InvalidTransactionException Transaction is not a supported instance: %s
WFTXN0003 java.lang.IllegalArgumentException Invalid transaction location URI (must be absolute): %s
WFTXN0004 java.lang.IllegalArgumentException No transaction provider installed for URI: %s
WFTXN0005 jakarta.transaction.InvalidTransactionException Transaction not associated with this provider
WFTXN0006 jakarta.transaction.SystemException Negative transaction timeout provided
WFTXN0007 java.lang.IllegalStateException A transaction is already associated with the current thread
WFTXN0008 java.lang.UnsupportedOperationException Cannot register a synchronization on a remote transaction
WFTXN0009 java.lang.UnsupportedOperationException Cannot enlist or delist resources on a remote transaction
WFTXN0010 jakarta.transaction.SystemException Failed to receive protocol message from remote peer
WFTXN0011 jakarta.transaction.SystemException Failed to send protocol message to remote peer
WFTXN0012 jakarta.transaction.SystemException The peer threw a SystemException; see peer logs for more information
WFTXN0013 java.lang.SecurityException The peer threw a SecurityException; see peer logs for more information
WFTXN0014 jakarta.transaction.SystemException An unexpected protocol error occurred
WFTXN0015 jakarta.transaction.SystemException The protocol operation was interrupted locally
WFTXN0016 jakarta.transaction.RollbackException The remote peer rolled back the transaction
WFTXN0017 jakarta.transaction.RollbackException Rollback-only transaction rolled back
WFTXN0018 java.lang.IllegalStateException Invalid transaction state
WFTXN0019 jakarta.transaction.HeuristicMixedException The peer threw a HeuristicMixedException; see peer logs for more information
WFTXN0020 jakarta.transaction.HeuristicRollbackException The peer threw a HeuristicRollbackException; see peer logs for more information
WFTXN0021 jakarta.transaction.SystemException Failed to acquire a connection for this operation
WFTXN0022 javax.transaction.xa.XAException The resource manager for remote connection to %s was already enlisted in a transaction
WFTXN0023 java.lang.IllegalArgumentException Invalid flag value
WFTXN0024 javax.transaction.xa.XAException Duplicate transaction encountered for destination %s, transaction ID %s
WFTXN0025 javax.transaction.xa.XAException Failed to receive protocol message from remote peer
WFTXN0026 javax.transaction.xa.XAException Failed to send protocol message to remote peer
WFTXN0027 javax.transaction.xa.XAException The protocol operation was interrupted locally
WFTXN0028 javax.transaction.xa.XAException An unexpected protocol error occurred
WFTXN0029 javax.transaction.xa.XAException The peer threw an XA exception
WFTXN0030 java.lang.IllegalArgumentException Invalid handle type; expected %s, actually received %s
WFTXN0031 jakarta.transaction.SystemException Commit not allowed on imported transaction
WFTXN0032 jakarta.transaction.SystemException Rollback not allowed on imported transaction
WFTXN0033 java.lang.IllegalStateException Multiple remote transaction providers registered on endpoint: %s
WFTXN0034 javax.transaction.xa.XAException Failed to acquire a connection for this operation
WFTXN0035 java.lang.IllegalArgumentException Invalid handle type requested; expected a subtype of Transaction (non-inclusive), got %s
WFTXN0036 javax.transaction.xa.XAException Transaction operation failed due to thread interruption
WFTXN0037 java.lang.IllegalStateException No transaction provider associated with the current thread
WFTXN0038 java.lang.IllegalStateException No local transaction provider associated with the current thread
WFTXN0039 java.lang.NullPointerException Invalid null transaction
WFTXN0040 DEBUG Rollback failed unexpectedly
WFTXN0041 java.lang.IllegalStateException No provider interface matching %s is available from the transaction provider
WFTXN0042 jakarta.transaction.SystemException Connection to remote transaction service failed
WFTXN0043 jakarta.transaction.SystemException Connection to remote transaction service interrupted
WFTXN0044 jakarta.transaction.SystemException Unknown response received from peer
WFTXN0045 jakarta.transaction.SystemException Failed to receive a response from peer
WFTXN0046 java.lang.IllegalStateException The peer threw an IllegalStateException; see peer logs for more information
WFTXN0047 javax.transaction.xa.XAException Unknown XA response received from peer
WFTXN0048 javax.transaction.xa.XAException Failed to receive an XA response from peer
WFTXN0049 javax.transaction.xa.XAException Negative transaction timeout provided
WFTXN0050 javax.transaction.xa.XAException Unrecognized parameter with ID 0x%02x received
WFTXN0051 jakarta.transaction.SystemException Expected parameter with ID 0x%02x, got parameter with ID 0x%02x instead
WFTXN0052 javax.transaction.xa.XAException Expected parameter with ID 0x%02x, got parameter with ID 0x%02x instead
WFTXN0053 org.wildfly.transaction.client.DelayedEnlistmentException Delayed enlistment has failed
WFTXN0054 org.wildfly.transaction.client.SynchronizationException Before-completion failed for resource %s
WFTXN0055 javax.transaction.xa.XAException Two-phase operation on single-phase transaction
WFTXN0056 java.lang.IllegalArgumentException Unknown provider for remote transactions with URI scheme "%s"
WFTXN0057 jakarta.transaction.SystemException Attempted to outflow the same transaction from two different transaction managers
WFTXN0058 java.lang.IllegalStateException This delayed enlistment handle was already enlisted
WFTXN0059 java.lang.IllegalStateException This delayed enlistment handle was already forgotten
WFTXN0060 javax.transaction.xa.XAException Transaction timed out
WFTXN0061 jakarta.transaction.RollbackException Transaction is marked rollback-only
WFTXN0062 java.lang.IllegalStateException Transaction is not active
WFTXN0063 java.lang.IllegalStateException Provider created a null transaction
WFTXN0064 java.lang.IllegalArgumentException Invalid connection endpoint provided
WFTXN0065 jakarta.transaction.SystemException No transaction for ID %d
WFTXN0066 javax.transaction.xa.XAException Failed to set transaction as rollback-only
WFTXN0067 javax.transaction.xa.XAException Transaction is not active
WFTXN0068 jakarta.transaction.SystemException Subordinate enlistment failed for unknown reason
WFTXN0069 jakarta.transaction.InvalidTransactionException Connection does not match the transaction; the connection may have closed
WFTXN0070 javax.transaction.xa.XAException No such transaction
WFTXN0071 java.lang.IllegalStateException An unexpected failure condition occurred
WFTXN0072 java.lang.IllegalStateException No local transaction provider node name specified in the transaction manager environment
WFTXN0073 java.lang.IllegalStateException Unexpected provider transaction mismatch; expected %s, got %s
WFTXN0074 javax.transaction.xa.XAException Heuristic-mixed outcome
WFTXN0075 javax.transaction.xa.XAException Heuristic-commit outcome
WFTXN0076 javax.transaction.xa.XAException Transaction rolled back
WFTXN0077 javax.transaction.xa.XAException Heuristic-rollback outcome
WFTXN0078 javax.transaction.xa.XAException Invalid transaction state
WFTXN0079 javax.transaction.xa.XAException An unexpected resource manager error occurred
WFTXN0080 javax.transaction.xa.XAException Operation not allowed on non-imported transaction
WFTXN0081 javax.transaction.xa.XAException Invalid transaction state for operation
WFTXN0082 jakarta.transaction.SystemException Cannot import a new transaction on a suspended server
WFTXN0083 javax.transaction.xa.XAException Cannot import a new transaction on a suspended server
WFTXN0084 java.lang.IllegalStateException UserTransaction access is forbidden in the current context
WFTXN0085 jakarta.transaction.SystemException Operation failed with an unexpected exception type
WFTXN0086 java.lang.IllegalStateException Unexpected transaction type encountered; expected %s but encountered %s
WFTXN0087 java.lang.IllegalArgumentException Unknown transaction manager type %s
WFTXN0088 java.lang.SecurityException User %s does not have permission %s
WFTXN0089 jakarta.transaction.SystemException Failed to configure transaction timeout of %d
WFTXN0090 java.lang.IllegalStateException Cannot assign location "%s" to transaction because it is already located at "%s"
WFTXN0091 jakarta.transaction.SystemException Failed to create xa resource recovery file: %s
WFTXN0092 jakarta.transaction.SystemException Failed to append xa resource (%s) to xa recovery file: %s
WFTXN0093 javax.transaction.xa.XAException Failed to delete xa recovery registry file %s on removal of %s
WFTXN0094 java.io.IOException Failed to read xa resource recovery file %s
WFTXN0095 java.io.IOException Failed to read URI '%s' from xa resource recovery file %s
WFTXN0096 java.lang.IllegalStateException Unexpected exception on XA recovery
WFTXN0097 jakarta.transaction.SystemException Cannot enlist XA resource '%s' to transaction '%s' as timeout already elapsed
WFTXN0098 WARN Unknown I/O error when listing xa resource recovery files in %s (File.list() returned null)
WFTXN0099 WARN Error while removing imported transaction of xid %s from the underlying transaction manager
WFTXN0100 java.lang.IllegalStateException String '%s' has a wrong format to be decoded to SimpleXid. Expected the hexadecimal format separated by '%s' to exactly three parts.
WFTXN0101 java.io.IOException Failed to read Xid '%s' from xa resource recovery file %s

XNIO

Code Level Return Type Message
XNIO-00001 INFO XNIO NIO Implementation Version %s
XNIO-00001 TRACE Starting up with selector provider %s
XNIO-00001 TRACE Using %s for main selectors and %s for temp selectors
XNIO-00001 INFO XNIO version %s
XNIO-00001 TRACE Closing resource %s
XNIO-00001 TRACE Closing resource %s failed
XNIO-00001 TRACE Shutting down reads on %s failed
XNIO-00001 TRACE Expanded buffer enabled due to overflow with empty buffer, expanded buffer size is %s
XNIO-00001 TRACE Notify read closed for connection %s failed
XNIO-00001 TRACE Notify write closed for connection %s failed
XNIO000000 java.lang.IllegalArgumentException Method parameter '%s' cannot be null
XNIO000001 java.lang.IllegalArgumentException Method parameter '%s' must be greater than %d
XNIO000002 java.lang.IllegalArgumentException Unsupported socket address %s
XNIO000003 java.lang.IllegalArgumentException Method parameter '%s' contains disallowed null value at index %d
XNIO000004 java.lang.IllegalArgumentException Bind address %s is not the same type as destination address %s
XNIO000005 java.lang.IllegalArgumentException No such field named "%s" in %s
XNIO000006 java.lang.IllegalArgumentException Class "%s" not found in %s
XNIO000007 java.lang.IllegalArgumentException Field named "%s" is not accessible (public) in %s
XNIO000008 java.lang.IllegalArgumentException Field named "%s" is not static in %s
XNIO000009 java.lang.UnsupportedOperationException Copy with negative count is not supported
XNIO000010 WARN Invalid option '%s' in property '%s': %s
XNIO000011 ERROR Task %s failed with an exception
XNIO000012 java.nio.ReadOnlyBufferException Attempt to write to a read-only buffer
XNIO000013 java.nio.BufferUnderflowException Buffer underflow
XNIO000014 java.nio.BufferOverflowException Buffer overflow
XNIO000015 java.lang.IllegalArgumentException Parameter '%s' is out of range
XNIO000015 java.lang.IllegalArgumentException Parameter '%s' is out of range
XNIO000016 java.lang.IllegalArgumentException Mixed direct and heap buffers not allowed
XNIO000017 java.lang.IllegalStateException Buffer was already freed
XNIO000018 java.lang.IllegalStateException Access a thread-local random from the wrong thread
XNIO000019 java.lang.IllegalStateException Channel not available from connection
XNIO000020 java.lang.IllegalArgumentException No parser for this option value type
XNIO000021 java.lang.IllegalArgumentException Invalid format for property value '%s'
XNIO000022 java.lang.IllegalArgumentException Class %s not found
XNIO000023 java.lang.IllegalArgumentException Class %s is not an instance of %s
XNIO000024 java.lang.IllegalArgumentException Invalid option name '%s'
XNIO000025 java.lang.IllegalArgumentException Invalid null option '%s'
XNIO000026 java.io.IOException Read with append is not supported
XNIO000027 java.io.IOException Requested file open mode requires Java 7 or higher
XNIO000028 java.lang.IllegalStateException Current thread is not an XNIO I/O thread
XNIO000029 java.lang.IllegalArgumentException Compression format not supported
XNIO000030 java.lang.IllegalArgumentException Both channels must come from the same worker
XNIO000031 java.lang.IllegalArgumentException At least one channel must have a connection
XNIO000032 java.lang.IllegalArgumentException At least one channel must be an SSL channel
XNIO000033 java.lang.IllegalArgumentException '%s' is not a valid QOP value
XNIO000034 java.lang.IllegalArgumentException Failed to instantiate %s
XNIO000035 org.xnio.channels.ConcurrentStreamChannelAccessException Stream channel was accessed concurrently
XNIO000036 java.io.CharConversionException Malformed input
XNIO000037 java.io.CharConversionException Unmappable character
XNIO000038 java.io.CharConversionException Character decoding problem
XNIO000039 java.lang.IllegalArgumentException Value for option '%s' is out of range
XNIO000040 java.lang.IllegalArgumentException Mismatched IP address type; expected %s but got %s
XNIO000041 java.lang.IllegalArgumentException '%s' is not a valid Strength value
XNIO000042 java.lang.IllegalArgumentException Cannot add unresolved address '%s'
XNIO000100 java.lang.IllegalArgumentException 'https' URL scheme chosen but no SSL provider given
XNIO000101 java.lang.IllegalArgumentException Unknown URL scheme '%s' given; must be one of 'http' or 'https'
XNIO000200 javax.security.sasl.SaslException Unexpected extra SASL challenge data received
XNIO000201 javax.security.sasl.SaslException Unexpected extra SASL response data received
XNIO000300 java.lang.IllegalArgumentException Socket buffer is too small
XNIO000301 java.lang.IllegalArgumentException Application buffer is too small
XNIO000302 java.io.IOException SSLEngine required a bigger send buffer but our buffer was already big enough
XNIO000303 java.io.IOException Unexpected wrap result status: %s
XNIO000304 java.io.IOException Unexpected handshake status: %s
XNIO000305 java.io.IOException Unexpected unwrap result status: %s
XNIO000306 java.lang.IllegalArgumentException SSL connection is not from this provider
XNIO000307 WARN Failed to close ssl engine when handling exception %s
XNIO000800 org.xnio.channels.ReadTimeoutException Read timed out
XNIO000800 org.xnio.channels.ReadTimeoutException Read timed out
XNIO000801 org.xnio.channels.WriteTimeoutException Write timed out
XNIO000801 org.xnio.channels.WriteTimeoutException Write timed out
XNIO000802 org.xnio.channels.FixedLengthOverflowException Write past the end of a fixed-length channel
XNIO000803 org.xnio.channels.FixedLengthUnderflowException Close before all bytes were written to a fixed-length channel (%d bytes remaining)
XNIO000804 java.io.IOException Received an invalid message length of %d
XNIO000805 java.io.EOFException Writes have been shut down
XNIO000806 java.io.IOException Transmitted message is too large
XNIO000807 java.io.IOException Unflushed data truncated
XNIO000808 java.io.InterruptedIOException I/O operation was interrupted
XNIO000808 java.io.InterruptedIOException I/O operation was interrupted
XNIO000809 java.io.IOException Cannot flush due to insufficient buffer space
XNIO000810 java.io.IOException Deflater doesn't need input, but won't produce output
XNIO000811 java.io.IOException Inflater needs dictionary
XNIO000812 java.io.EOFException Connection closed unexpectedly
XNIO000813 java.io.IOException The stream is closed
XNIO000814 java.io.IOException Mark not set
XNIO000815 org.xnio.ClosedWorkerException Worker is shut down: %s
XNIO000816 java.lang.String Redirect encountered establishing connection
XNIO000900 java.lang.UnsupportedOperationException Method '%s' is not supported on this implementation
XNIO000900 java.lang.UnsupportedOperationException Method '%s' is not supported on this implementation
XNIO001000 java.lang.IllegalStateException Blocking I/O is not allowed on the current thread
XNIO001001 java.lang.IllegalArgumentException No XNIO provider found
XNIO001002 java.util.concurrent.CancellationException Operation was cancelled
XNIO001003 WARN Running IoFuture notifier %s (with attachment %s) failed
XNIO001004 java.util.concurrent.TimeoutException Operation timed out
XNIO001005 java.lang.SecurityException Not allowed to read non-XNIO properties
XNIO001006 ERROR Failed to invoke file watch callback
XNIO001006 ERROR Failed to invoke file watch callback
XNIO001007 ERROR A channel event listener threw an exception
XNIO001008 ERROR A channel exception handler threw an exception
XNIO001009 ERROR Failed to accept a connection on %s
XNIO001010 ERROR Failed to submit task to executor: (closing %s)
XNIO007000 java.lang.IllegalArgumentException No threads configured
XNIO007001 java.lang.IllegalArgumentException Balancing token count must be greater than zero and less than thread count
XNIO007002 java.lang.IllegalArgumentException Balancing connection count must be greater than zero when tokens are used
XNIO007003 java.lang.IllegalArgumentException Buffer is too large
XNIO007004 java.lang.IllegalStateException No functional selector provider is available
XNIO007005 java.lang.IllegalStateException Unexpected exception opening a selector
XNIO007006 java.lang.IllegalArgumentException XNIO IO factory is from the wrong provider
XNIO007007 java.util.concurrent.RejectedExecutionException Thread is terminating
XNIO008000 WARN Received an I/O error on selection: %s
XNIO008001 WARN Socket accept failed, backing off for %2$d milliseconds: %1$s

jlibaio

Code Level Return Type Message
jlibaio163001 WARN You have a native library with a different version than expected

\ No newline at end of file diff --git a/latest/wildscribe/path/index.html b/latest/wildscribe/path/index.html new file mode 100644 index 000000000..f338306bb --- /dev/null +++ b/latest/wildscribe/path/index.html @@ -0,0 +1,45 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A named filesystem path.


\ No newline at end of file diff --git a/latest/wildscribe/socket-binding-group/index.html b/latest/wildscribe/socket-binding-group/index.html new file mode 100644 index 000000000..d5f6790c9 --- /dev/null +++ b/latest/wildscribe/socket-binding-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Contains a list of socket configurations.


\ No newline at end of file diff --git a/latest/wildscribe/socket-binding-group/local-destination-outbound-socket-binding/index.html b/latest/wildscribe/socket-binding-group/local-destination-outbound-socket-binding/index.html new file mode 100644 index 000000000..b9f89623f --- /dev/null +++ b/latest/wildscribe/socket-binding-group/local-destination-outbound-socket-binding/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration information for a local destination outbound socket binding.


\ No newline at end of file diff --git a/latest/wildscribe/socket-binding-group/remote-destination-outbound-socket-binding/index.html b/latest/wildscribe/socket-binding-group/remote-destination-outbound-socket-binding/index.html new file mode 100644 index 000000000..3e84fed1f --- /dev/null +++ b/latest/wildscribe/socket-binding-group/remote-destination-outbound-socket-binding/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration information for a remote destination outbound socket binding.


\ No newline at end of file diff --git a/latest/wildscribe/socket-binding-group/socket-binding/index.html b/latest/wildscribe/socket-binding-group/socket-binding/index.html new file mode 100644 index 000000000..cc2f2ddf4 --- /dev/null +++ b/latest/wildscribe/socket-binding-group/socket-binding/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration information for a socket.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/batch-jberet/in-memory-job-repository/index.html b/latest/wildscribe/subsystem/batch-jberet/in-memory-job-repository/index.html new file mode 100644 index 000000000..1727671e0 --- /dev/null +++ b/latest/wildscribe/subsystem/batch-jberet/in-memory-job-repository/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A job repository that stores job information in memory.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/batch-jberet/index.html b/latest/wildscribe/subsystem/batch-jberet/index.html new file mode 100644 index 000000000..93178e08c --- /dev/null +++ b/latest/wildscribe/subsystem/batch-jberet/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Batch Subsystem (JSR-352)


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/batch-jberet/jdbc-job-repository/index.html b/latest/wildscribe/subsystem/batch-jberet/jdbc-job-repository/index.html new file mode 100644 index 000000000..808aa3b05 --- /dev/null +++ b/latest/wildscribe/subsystem/batch-jberet/jdbc-job-repository/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A job repository that stores job information in a database.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/batch-jberet/thread-factory/index.html b/latest/wildscribe/subsystem/batch-jberet/thread-factory/index.html new file mode 100644 index 000000000..40bf7cb09 --- /dev/null +++ b/latest/wildscribe/subsystem/batch-jberet/thread-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread factory (implementing java.util.concurrent.ThreadFactory).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/batch-jberet/thread-pool/index.html b/latest/wildscribe/subsystem/batch-jberet/thread-pool/index.html new file mode 100644 index 000000000..4c24a9cb6 --- /dev/null +++ b/latest/wildscribe/subsystem/batch-jberet/thread-pool/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The thread pool used for batch jobs. Note that the max-thread attribute should always be greater than 3. Two threads are reserved to ensure partition jobs can execute.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/bean-validation/index.html b/latest/wildscribe/subsystem/bean-validation/index.html new file mode 100644 index 000000000..c00f53ba7 --- /dev/null +++ b/latest/wildscribe/subsystem/bean-validation/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta Bean Validation subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/core-management/index.html b/latest/wildscribe/subsystem/core-management/index.html new file mode 100644 index 000000000..d955a75ad --- /dev/null +++ b/latest/wildscribe/subsystem/core-management/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the core-management subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/core-management/process-state-listener/index.html b/latest/wildscribe/subsystem/core-management/process-state-listener/index.html new file mode 100644 index 000000000..6a03158cc --- /dev/null +++ b/latest/wildscribe/subsystem/core-management/process-state-listener/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Process state listener.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/core-management/service/configuration-changes/index.html b/latest/wildscribe/subsystem/core-management/service/configuration-changes/index.html new file mode 100644 index 000000000..c74ebe272 --- /dev/null +++ b/latest/wildscribe/subsystem/core-management/service/configuration-changes/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Service to store and list configuration changes.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources-agroal/datasource/index.html b/latest/wildscribe/subsystem/datasources-agroal/datasource/index.html new file mode 100644 index 000000000..813fec261 --- /dev/null +++ b/latest/wildscribe/subsystem/datasources-agroal/datasource/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A datasource


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources-agroal/driver/index.html b/latest/wildscribe/subsystem/datasources-agroal/driver/index.html new file mode 100644 index 000000000..df245d904 --- /dev/null +++ b/latest/wildscribe/subsystem/datasources-agroal/driver/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

List of available JDBC drivers


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources-agroal/index.html b/latest/wildscribe/subsystem/datasources-agroal/index.html new file mode 100644 index 000000000..fbcddb8fb --- /dev/null +++ b/latest/wildscribe/subsystem/datasources-agroal/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Agroal subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources-agroal/xa-datasource/index.html b/latest/wildscribe/subsystem/datasources-agroal/xa-datasource/index.html new file mode 100644 index 000000000..22811edeb --- /dev/null +++ b/latest/wildscribe/subsystem/datasources-agroal/xa-datasource/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A XA datasource


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/connection-properties/index.html b/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/connection-properties/index.html new file mode 100644 index 000000000..b923847c8 --- /dev/null +++ b/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/connection-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The connection-properties element allows you to pass in arbitrary connection properties to the Driver.connect(url, props) method


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/index.html b/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/index.html new file mode 100644 index 000000000..d5f48fe26 --- /dev/null +++ b/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC data-source configuration


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/jdbc/index.html b/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/jdbc/index.html new file mode 100644 index 000000000..4cc04b042 --- /dev/null +++ b/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/jdbc/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime statistics provided by the resource adapter.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/pool/index.html b/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/pool/index.html new file mode 100644 index 000000000..185f27f2e --- /dev/null +++ b/latest/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/pool/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime statistics provided by the resource adapter.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources/index.html b/latest/wildscribe/subsystem/datasources/index.html new file mode 100644 index 000000000..3bc5e74a9 --- /dev/null +++ b/latest/wildscribe/subsystem/datasources/index.html @@ -0,0 +1,233 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The data-sources subsystem, used to declare JDBC data-sources


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources/jdbc-driver/index.html b/latest/wildscribe/subsystem/datasources/jdbc-driver/index.html new file mode 100644 index 000000000..5cfca3428 --- /dev/null +++ b/latest/wildscribe/subsystem/datasources/jdbc-driver/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Service that make a JDBC driver available for use in the runtime


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources/xa-data-source/index.html b/latest/wildscribe/subsystem/datasources/xa-data-source/index.html new file mode 100644 index 000000000..e98f9f458 --- /dev/null +++ b/latest/wildscribe/subsystem/datasources/xa-data-source/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JDBC XA data-source configuration


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html b/latest/wildscribe/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html new file mode 100644 index 000000000..daff19d3c --- /dev/null +++ b/latest/wildscribe/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

List of xa-datasource-property


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/deployment-scanner/index.html b/latest/wildscribe/subsystem/deployment-scanner/index.html new file mode 100644 index 000000000..b057ec043 --- /dev/null +++ b/latest/wildscribe/subsystem/deployment-scanner/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual deployment scanner that scans a particular location.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/deployment-scanner/scanner/index.html b/latest/wildscribe/subsystem/deployment-scanner/scanner/index.html new file mode 100644 index 000000000..a5177ed5b --- /dev/null +++ b/latest/wildscribe/subsystem/deployment-scanner/scanner/index.html @@ -0,0 +1,45 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the deployment scanner subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/discovery/aggregate-provider/index.html b/latest/wildscribe/subsystem/discovery/aggregate-provider/index.html new file mode 100644 index 000000000..c7aebf6ae --- /dev/null +++ b/latest/wildscribe/subsystem/discovery/aggregate-provider/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An aggregate discovery provider definition


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/discovery/index.html b/latest/wildscribe/subsystem/discovery/index.html new file mode 100644 index 000000000..95f4f244d --- /dev/null +++ b/latest/wildscribe/subsystem/discovery/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The discovery subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/discovery/static-provider/index.html b/latest/wildscribe/subsystem/discovery/static-provider/index.html new file mode 100644 index 000000000..4ed36b259 --- /dev/null +++ b/latest/wildscribe/subsystem/discovery/static-provider/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A static discovery provider definition


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-ejb/client-mappings-registry/infinispan/index.html b/latest/wildscribe/subsystem/distributable-ejb/client-mappings-registry/infinispan/index.html new file mode 100644 index 000000000..ab0b0d424 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-ejb/client-mappings-registry/infinispan/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Infinispan client mappings registry provider, used to generate non-local client mappings registries.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-ejb/client-mappings-registry/local/index.html b/latest/wildscribe/subsystem/distributable-ejb/client-mappings-registry/local/index.html new file mode 100644 index 000000000..363d064bd --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-ejb/client-mappings-registry/local/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The local client mappings registry provider, used to generate local client mappings registries.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-ejb/index.html b/latest/wildscribe/subsystem/distributable-ejb/index.html new file mode 100644 index 000000000..fd2ae3cd2 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-ejb/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The distributable-ejb subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-ejb/infinispan-bean-management/index.html b/latest/wildscribe/subsystem/distributable-ejb/infinispan-bean-management/index.html new file mode 100644 index 000000000..3b7bae7ed --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-ejb/infinispan-bean-management/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An Infinispan-based bean management provider


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-ejb/infinispan-timer-management/index.html b/latest/wildscribe/subsystem/distributable-ejb/infinispan-timer-management/index.html new file mode 100644 index 000000000..f896d9bd3 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-ejb/infinispan-timer-management/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An Infinispan-based timer management provider


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/local/index.html b/latest/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/local/index.html new file mode 100644 index 000000000..001312111 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/local/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the member that last handled a given session


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/none/index.html b/latest/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/none/index.html new file mode 100644 index 000000000..523d19bda --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/none/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will not have an affinity for any cluster member


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/hotrod-session-management/index.html b/latest/wildscribe/subsystem/distributable-web/hotrod-session-management/index.html new file mode 100644 index 000000000..8cbd88660 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/hotrod-session-management/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based session management provider


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/hotrod-single-sign-on-management/index.html b/latest/wildscribe/subsystem/distributable-web/hotrod-single-sign-on-management/index.html new file mode 100644 index 000000000..0e7048877 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/hotrod-single-sign-on-management/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based single sign-on management provider


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/index.html b/latest/wildscribe/subsystem/distributable-web/index.html new file mode 100644 index 000000000..a342c2b88 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The distributable-web subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/local/index.html b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/local/index.html new file mode 100644 index 000000000..a1104bce4 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/local/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the member that last handled a given session


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/none/index.html b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/none/index.html new file mode 100644 index 000000000..d9b54a4c5 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/none/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will not have an affinity for any cluster member


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/primary-owner/index.html b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/primary-owner/index.html new file mode 100644 index 000000000..b8d49816c --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/primary-owner/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the primary owner of a given session


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/ranked/index.html b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/ranked/index.html new file mode 100644 index 000000000..57c721cb5 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/ranked/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the first available member in a list containing primary and backup owners, and the member that last handled a given session


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/index.html b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/index.html new file mode 100644 index 000000000..9d26b2ca8 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/infinispan-session-management/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Infinispan-based session management provider


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/infinispan-single-sign-on-management/index.html b/latest/wildscribe/subsystem/distributable-web/infinispan-single-sign-on-management/index.html new file mode 100644 index 000000000..1d09073af --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/infinispan-single-sign-on-management/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Infinispan-based single sign-on management provider


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/routing/infinispan/index.html b/latest/wildscribe/subsystem/distributable-web/routing/infinispan/index.html new file mode 100644 index 000000000..d6014c4f9 --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/routing/infinispan/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A routing provider


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/distributable-web/routing/local/index.html b/latest/wildscribe/subsystem/distributable-web/routing/local/index.html new file mode 100644 index 000000000..0ffed8e6d --- /dev/null +++ b/latest/wildscribe/subsystem/distributable-web/routing/local/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A routing provider


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ee-security/index.html b/latest/wildscribe/subsystem/ee-security/index.html new file mode 100644 index 000000000..da4a3df87 --- /dev/null +++ b/latest/wildscribe/subsystem/ee-security/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the EE Security subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ee/context-service/index.html b/latest/wildscribe/subsystem/ee/context-service/index.html new file mode 100644 index 000000000..15e04ae28 --- /dev/null +++ b/latest/wildscribe/subsystem/ee/context-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A context service


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ee/global-directory/index.html b/latest/wildscribe/subsystem/ee/global-directory/index.html new file mode 100644 index 000000000..2677b3723 --- /dev/null +++ b/latest/wildscribe/subsystem/ee/global-directory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Global directory that can be used to supply libraries across all deployed applications.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ee/index.html b/latest/wildscribe/subsystem/ee/index.html new file mode 100644 index 000000000..2a4a3de78 --- /dev/null +++ b/latest/wildscribe/subsystem/ee/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the EE subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ee/managed-executor-service/index.html b/latest/wildscribe/subsystem/ee/managed-executor-service/index.html new file mode 100644 index 000000000..04ac4c6de --- /dev/null +++ b/latest/wildscribe/subsystem/ee/managed-executor-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A managed executor service


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ee/managed-scheduled-executor-service/index.html b/latest/wildscribe/subsystem/ee/managed-scheduled-executor-service/index.html new file mode 100644 index 000000000..4c8d79c8f --- /dev/null +++ b/latest/wildscribe/subsystem/ee/managed-scheduled-executor-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A managed scheduled executor service


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ee/managed-thread-factory/index.html b/latest/wildscribe/subsystem/ee/managed-thread-factory/index.html new file mode 100644 index 000000000..ed9470be3 --- /dev/null +++ b/latest/wildscribe/subsystem/ee/managed-thread-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A managed thread factory


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ee/service/default-bindings/index.html b/latest/wildscribe/subsystem/ee/service/default-bindings/index.html new file mode 100644 index 000000000..5007e8dce --- /dev/null +++ b/latest/wildscribe/subsystem/ee/service/default-bindings/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The JNDI names for the default EE bindings


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/application-security-domain/index.html b/latest/wildscribe/subsystem/ejb3/application-security-domain/index.html new file mode 100644 index 000000000..dee9e8f66 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/application-security-domain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A mapping from a security domain referenced in a deployed application


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/cache/index.html b/latest/wildscribe/subsystem/ejb3/cache/index.html new file mode 100644 index 000000000..fcf4b6b32 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 10.0.0
Deprecated. Use simple-cache or distributable-cache instead.

A SFSB cache


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/cluster-passivation-store/index.html b/latest/wildscribe/subsystem/ejb3/cluster-passivation-store/index.html new file mode 100644 index 000000000..54a3e4d89 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/cluster-passivation-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 2.0.0
cluster-passivation-store has been superseded by passivation-store and will be removed in a future release

A clustered passivation store


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/distributable-cache/index.html b/latest/wildscribe/subsystem/ejb3/distributable-cache/index.html new file mode 100644 index 000000000..60652a47d --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/distributable-cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A SFSB cache which is distributable


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/file-passivation-store/index.html b/latest/wildscribe/subsystem/ejb3/file-passivation-store/index.html new file mode 100644 index 000000000..9f64b9ca4 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/file-passivation-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 2.0.0
file-passivation-store has been superseded by passivation-store and will be removed in a future release

A file system based passivation store


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/index.html b/latest/wildscribe/subsystem/ejb3/index.html new file mode 100644 index 000000000..d984707c9 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the ejb3 subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/mdb-delivery-group/index.html b/latest/wildscribe/subsystem/ejb3/mdb-delivery-group/index.html new file mode 100644 index 000000000..a5fd1579e --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/mdb-delivery-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Delivery group to manage delivery for mdbs


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/passivation-store/index.html b/latest/wildscribe/subsystem/ejb3/passivation-store/index.html new file mode 100644 index 000000000..0ed3001c0 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/passivation-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 10.0.0
Deprecated. Use distributable-cache instead

A passivation store


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/remoting-profile/index.html b/latest/wildscribe/subsystem/ejb3/remoting-profile/index.html new file mode 100644 index 000000000..80a4c5b93 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/remoting-profile/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A remoting profile


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/remoting-profile/remote-http-connection/index.html b/latest/wildscribe/subsystem/ejb3/remoting-profile/remote-http-connection/index.html new file mode 100644 index 000000000..1c0548df2 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/remoting-profile/remote-http-connection/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Remote connection using HTTP protocol


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/channel-creation-options/index.html b/latest/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/channel-creation-options/index.html new file mode 100644 index 000000000..59ac5129b --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/channel-creation-options/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The options that will be used during the Jakarta Enterprise Beans remote channel creation


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/index.html b/latest/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/index.html new file mode 100644 index 000000000..16200c8fc --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A remoting ejb receiver reference included in the profile


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/service/async/index.html b/latest/wildscribe/subsystem/ejb3/service/async/index.html new file mode 100644 index 000000000..67b79c447 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/service/async/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Enterprise Beans 3 Asynchronous Invocation Service


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/service/identity/index.html b/latest/wildscribe/subsystem/ejb3/service/identity/index.html new file mode 100644 index 000000000..64de2b0be --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/service/identity/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Identity definition for security identity propagation


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/service/iiop/index.html b/latest/wildscribe/subsystem/ejb3/service/iiop/index.html new file mode 100644 index 000000000..4070a6fd0 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/service/iiop/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The IIOP service


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/service/remote/channel-creation-options/index.html b/latest/wildscribe/subsystem/ejb3/service/remote/channel-creation-options/index.html new file mode 100644 index 000000000..f346e3906 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/service/remote/channel-creation-options/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The options that will be used during the Jakarta Enterprise Beans remote channel creation


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/service/remote/index.html b/latest/wildscribe/subsystem/ejb3/service/remote/index.html new file mode 100644 index 000000000..1bdc3518f --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/service/remote/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Enterprise Beans 3 Remote Service


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/service/timer-service/database-data-store/index.html b/latest/wildscribe/subsystem/ejb3/service/timer-service/database-data-store/index.html new file mode 100644 index 000000000..a89019dda --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/service/timer-service/database-data-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An database based store for persistent Jakarta Enterprise Beans timers.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/service/timer-service/file-data-store/index.html b/latest/wildscribe/subsystem/ejb3/service/timer-service/file-data-store/index.html new file mode 100644 index 000000000..12551ff21 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/service/timer-service/file-data-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JVM local file store that stores persistent Jakarta Enterprise Beans timers


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/service/timer-service/index.html b/latest/wildscribe/subsystem/ejb3/service/timer-service/index.html new file mode 100644 index 000000000..20ea45ac2 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/service/timer-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Enterprise Beans timer service


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/simple-cache/index.html b/latest/wildscribe/subsystem/ejb3/simple-cache/index.html new file mode 100644 index 000000000..02d149fae --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/simple-cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A SFSB cache which is non-distributable


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/strict-max-bean-instance-pool/index.html b/latest/wildscribe/subsystem/ejb3/strict-max-bean-instance-pool/index.html new file mode 100644 index 000000000..49de5a365 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/strict-max-bean-instance-pool/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A bean instance pool with a strict upper limit


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/ejb3/thread-pool/index.html b/latest/wildscribe/subsystem/ejb3/thread-pool/index.html new file mode 100644 index 000000000..e1cbf7371 --- /dev/null +++ b/latest/wildscribe/subsystem/ejb3/thread-pool/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with an enhanced queue. In such a thread pool, its core and max size are configured independently, idle threads are always reused when available, and threads count is kept to a minimum.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron-oidc-client/index.html b/latest/wildscribe/subsystem/elytron-oidc-client/index.html new file mode 100644 index 000000000..e9aa258b4 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron-oidc-client/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for Elytron OIDC.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron-oidc-client/provider/index.html b/latest/wildscribe/subsystem/elytron-oidc-client/provider/index.html new file mode 100644 index 000000000..106ece00a --- /dev/null +++ b/latest/wildscribe/subsystem/elytron-oidc-client/provider/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration for an OpenID Connect provider. If you have multiple deployments secured by the same OpenID provider you can share the provider configuration here.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron-oidc-client/realm/index.html b/latest/wildscribe/subsystem/elytron-oidc-client/realm/index.html new file mode 100644 index 000000000..14a9b36eb --- /dev/null +++ b/latest/wildscribe/subsystem/elytron-oidc-client/realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration for a Keycloak realm. If you have multiple deployments secured by the same realm you can share the realm configuration here.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/credential/index.html b/latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/credential/index.html new file mode 100644 index 000000000..f1ce4ee7f --- /dev/null +++ b/latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/credential/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The credential used to communicate with the OpenID Connect provider.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/index.html b/latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/index.html new file mode 100644 index 000000000..c599789d0 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A deployment secured by an OpenID Connect provider.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/redirect-rewrite-rule/index.html b/latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/redirect-rewrite-rule/index.html new file mode 100644 index 000000000..811ee6925 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron-oidc-client/secure-deployment/redirect-rewrite-rule/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The rewrite rule for the redirect URI. The rewrite rule is an object notation, where the key is a regular expression with which the redirect URI is matched and the value is the replacement String.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron-oidc-client/secure-server/credential/index.html b/latest/wildscribe/subsystem/elytron-oidc-client/secure-server/credential/index.html new file mode 100644 index 000000000..f86156491 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron-oidc-client/secure-server/credential/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The credential used to communicate with the OpenID Connect provider.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron-oidc-client/secure-server/index.html b/latest/wildscribe/subsystem/elytron-oidc-client/secure-server/index.html new file mode 100644 index 000000000..5d1fb3dc7 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron-oidc-client/secure-server/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration used to secure the management console using Keycloak.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron-oidc-client/secure-server/redirect-rewrite-rule/index.html b/latest/wildscribe/subsystem/elytron-oidc-client/secure-server/redirect-rewrite-rule/index.html new file mode 100644 index 000000000..be0247e0e --- /dev/null +++ b/latest/wildscribe/subsystem/elytron-oidc-client/secure-server/redirect-rewrite-rule/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The rewrite rule for the redirect URI. The rewrite rule is an object notation, where the key is a regular expression with which the redirect URI is matched and the value is the replacement String.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/add-prefix-role-mapper/index.html b/latest/wildscribe/subsystem/elytron/add-prefix-role-mapper/index.html new file mode 100644 index 000000000..c73342cdb --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/add-prefix-role-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A role mapper definition for a role mapper that adds a prefix to each provided.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/add-suffix-role-mapper/index.html b/latest/wildscribe/subsystem/elytron/add-suffix-role-mapper/index.html new file mode 100644 index 000000000..35b96b8ee --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/add-suffix-role-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A role mapper definition for a role mapper that adds a suffix to each provided.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-evidence-decoder/index.html b/latest/wildscribe/subsystem/elytron/aggregate-evidence-decoder/index.html new file mode 100644 index 000000000..d00baf976 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-evidence-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An evidence decoder that is an aggregation of other evidence decoders. Given evidence, these evidence decoders will be attempted in order until one returns a non-null principal or until there are no more evidence decoders left to try.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-http-server-mechanism-factory/index.html b/latest/wildscribe/subsystem/elytron/aggregate-http-server-mechanism-factory/index.html new file mode 100644 index 000000000..075f9fad0 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-http-server-mechanism-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A http server factory definition where the http server factory is an aggregation of other http server factories.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-principal-decoder/index.html b/latest/wildscribe/subsystem/elytron/aggregate-principal-decoder/index.html new file mode 100644 index 000000000..3cb1449d1 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-principal-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal decoder definition where the principal decoder is an aggregation of other principal decoders.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-principal-transformer/index.html b/latest/wildscribe/subsystem/elytron/aggregate-principal-transformer/index.html new file mode 100644 index 000000000..00a9df3ce --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-principal-transformer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal transformer aggregating more principal transformers. Original principal is tried to be transformed by individual transformers until one return non-null principal - that is returned.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-providers/index.html b/latest/wildscribe/subsystem/elytron/aggregate-providers/index.html new file mode 100644 index 000000000..c60b1abfc --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-providers/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An aggregation of two or more Provider[] resources.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-realm/index.html b/latest/wildscribe/subsystem/elytron/aggregate-realm/index.html new file mode 100644 index 000000000..7fe5523ae --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A realm definition that is an aggregation of two realms, one for the authentication steps and one for loading the identity for the authorization steps.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-role-decoder/index.html b/latest/wildscribe/subsystem/elytron/aggregate-role-decoder/index.html new file mode 100644 index 000000000..f20576367 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-role-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a RoleDecoder that is an aggregation of other role decoders.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-role-mapper/index.html b/latest/wildscribe/subsystem/elytron/aggregate-role-mapper/index.html new file mode 100644 index 000000000..aa7929359 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-role-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A role mapper definition where the role mapper is an aggregation of other role mappers.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-sasl-server-factory/index.html b/latest/wildscribe/subsystem/elytron/aggregate-sasl-server-factory/index.html new file mode 100644 index 000000000..0c6459ec6 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-sasl-server-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A sasl server factory definition where the sasl server factory is an aggregation of other sasl server factories.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/aggregate-security-event-listener/index.html b/latest/wildscribe/subsystem/elytron/aggregate-security-event-listener/index.html new file mode 100644 index 000000000..8005f5f77 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/aggregate-security-event-listener/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An aggregation of two or more security event listener resources.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/authentication-configuration/index.html b/latest/wildscribe/subsystem/elytron/authentication-configuration/index.html new file mode 100644 index 000000000..bbd1b164b --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/authentication-configuration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual authentication configuration definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/authentication-context/index.html b/latest/wildscribe/subsystem/elytron/authentication-context/index.html new file mode 100644 index 000000000..623147448 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/authentication-context/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An individual authentication context definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/caching-realm/index.html b/latest/wildscribe/subsystem/elytron/caching-realm/index.html new file mode 100644 index 000000000..dcb85768a --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/caching-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A realm definition that enables caching to another security realm. Caching strategy is LRU (Least Recently Used) where least accessed entries are discarded when maximum number of entries is reached.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/case-principal-transformer/index.html b/latest/wildscribe/subsystem/elytron/case-principal-transformer/index.html new file mode 100644 index 000000000..169d8c880 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/case-principal-transformer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal transformer where the principal is adjusted to upper or lower case.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/certificate-authority-account/index.html b/latest/wildscribe/subsystem/elytron/certificate-authority-account/index.html new file mode 100644 index 000000000..75c5b2597 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/certificate-authority-account/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A certificate authority account definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/certificate-authority/index.html b/latest/wildscribe/subsystem/elytron/certificate-authority/index.html new file mode 100644 index 000000000..9df98bbfb --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/certificate-authority/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A certificate authority definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/chained-principal-transformer/index.html b/latest/wildscribe/subsystem/elytron/chained-principal-transformer/index.html new file mode 100644 index 000000000..871297a6d --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/chained-principal-transformer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal transformer definition where the principal transformer is a chaining of other principal transformers.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/client-ssl-context/index.html b/latest/wildscribe/subsystem/elytron/client-ssl-context/index.html new file mode 100644 index 000000000..31cc4e2f6 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/client-ssl-context/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An SSLContext for use on the client side of a connection.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/client-ssl-context/ssl-session/index.html b/latest/wildscribe/subsystem/elytron/client-ssl-context/ssl-session/index.html new file mode 100644 index 000000000..71dd4d5eb --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/client-ssl-context/ssl-session/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A currently established SSL session.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/concatenating-principal-decoder/index.html b/latest/wildscribe/subsystem/elytron/concatenating-principal-decoder/index.html new file mode 100644 index 000000000..1b2031319 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/concatenating-principal-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal decoder definition where the principal decoder is a concatenation of other principal decoders.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/configurable-http-server-mechanism-factory/index.html b/latest/wildscribe/subsystem/elytron/configurable-http-server-mechanism-factory/index.html new file mode 100644 index 000000000..c8f0e1973 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/configurable-http-server-mechanism-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A HTTP server factory definition that wraps another HTTP server factory and applies the specified configuration and filtering.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/configurable-sasl-server-factory/index.html b/latest/wildscribe/subsystem/elytron/configurable-sasl-server-factory/index.html new file mode 100644 index 000000000..db5a55de6 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/configurable-sasl-server-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A SaslServerFactory definition that wraps another SaslServerFactory and applies the specified configuration and filtering.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/constant-permission-mapper/index.html b/latest/wildscribe/subsystem/elytron/constant-permission-mapper/index.html new file mode 100644 index 000000000..f853d8a3b --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/constant-permission-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a permission mapper that always returns the same constant.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/constant-principal-decoder/index.html b/latest/wildscribe/subsystem/elytron/constant-principal-decoder/index.html new file mode 100644 index 000000000..6f8a30b29 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/constant-principal-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a principal decoder that always returns the same constant.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/constant-principal-transformer/index.html b/latest/wildscribe/subsystem/elytron/constant-principal-transformer/index.html new file mode 100644 index 000000000..9d154fb2a --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/constant-principal-transformer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A principal transformer definition for a PrincipalTransformer that always returns the same constant.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/constant-realm-mapper/index.html b/latest/wildscribe/subsystem/elytron/constant-realm-mapper/index.html new file mode 100644 index 000000000..eac4a96ed --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/constant-realm-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a constant RealmMapper that always returns the same value.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/constant-role-mapper/index.html b/latest/wildscribe/subsystem/elytron/constant-role-mapper/index.html new file mode 100644 index 000000000..d570ab1c9 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/constant-role-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A role mapper definition where a constant set of roles is always returned.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/credential-store/index.html b/latest/wildscribe/subsystem/elytron/credential-store/index.html new file mode 100644 index 000000000..2232daa5b --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/credential-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Credential store to keep alias for sensitive information such as passwords for external services.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-credential-security-factory/index.html b/latest/wildscribe/subsystem/elytron/custom-credential-security-factory/index.html new file mode 100644 index 000000000..4f19f13e5 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-credential-security-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom credential SecurityFactory definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-evidence-decoder/index.html b/latest/wildscribe/subsystem/elytron/custom-evidence-decoder/index.html new file mode 100644 index 000000000..ce6fb4050 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-evidence-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom evidence decoder.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-modifiable-realm/index.html b/latest/wildscribe/subsystem/elytron/custom-modifiable-realm/index.html new file mode 100644 index 000000000..dfbaa3ceb --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-modifiable-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Custom realm configured as being modifiable will be expected to implement the ModifiableSecurityRealm interface. By configuring a realm as being modifiable management operations will be made available to manipulate the realm.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-permission-mapper/index.html b/latest/wildscribe/subsystem/elytron/custom-permission-mapper/index.html new file mode 100644 index 000000000..007630fd8 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-permission-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom permission mapper.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-principal-decoder/index.html b/latest/wildscribe/subsystem/elytron/custom-principal-decoder/index.html new file mode 100644 index 000000000..d729735be --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-principal-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom principal decoder


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-principal-transformer/index.html b/latest/wildscribe/subsystem/elytron/custom-principal-transformer/index.html new file mode 100644 index 000000000..8148a0b1d --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-principal-transformer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom principal transformer definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-realm-mapper/index.html b/latest/wildscribe/subsystem/elytron/custom-realm-mapper/index.html new file mode 100644 index 000000000..616cd2a1c --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-realm-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom RealmMapper


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-realm/index.html b/latest/wildscribe/subsystem/elytron/custom-realm/index.html new file mode 100644 index 000000000..e432fc05c --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom realm definitions can implement either the SecurityRealm interface or the ModifiableSecurityRealm interface. Regardless of which interface is implemented management operations will not be exposed to manage the realm. However other services that depend on the realm will still be able to perform a type check and cast to gain access to the modification API.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-role-decoder/index.html b/latest/wildscribe/subsystem/elytron/custom-role-decoder/index.html new file mode 100644 index 000000000..c3c3a65a5 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-role-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom RoleDecoder


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-role-mapper/index.html b/latest/wildscribe/subsystem/elytron/custom-role-mapper/index.html new file mode 100644 index 000000000..42de797c0 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-role-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a custom RoleMapper


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/custom-security-event-listener/index.html b/latest/wildscribe/subsystem/elytron/custom-security-event-listener/index.html new file mode 100644 index 000000000..0f39a5614 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/custom-security-event-listener/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom security event listener. (Audit logger for example.)


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/dir-context/index.html b/latest/wildscribe/subsystem/elytron/dir-context/index.html new file mode 100644 index 000000000..f55357617 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/dir-context/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration to connect to a directory (LDAP) server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/distributed-realm/index.html b/latest/wildscribe/subsystem/elytron/distributed-realm/index.html new file mode 100644 index 000000000..4135a8614 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/distributed-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A realm definition for authentication and authorization of identities distributed between multiple realms.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/expression/encryption/index.html b/latest/wildscribe/subsystem/elytron/expression/encryption/index.html new file mode 100644 index 000000000..dc2f299be --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/expression/encryption/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of an expression resolver to decrypt encrypted expressions.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/failover-realm/index.html b/latest/wildscribe/subsystem/elytron/failover-realm/index.html new file mode 100644 index 000000000..3b152fcdb --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/failover-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A realm definition that wraps two realms. One for default operation and the second to fail over to in case the first one is unavailable.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/file-audit-log/index.html b/latest/wildscribe/subsystem/elytron/file-audit-log/index.html new file mode 100644 index 000000000..03daf970d --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/file-audit-log/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An audit logger that logs to a local file.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/filesystem-realm/index.html b/latest/wildscribe/subsystem/elytron/filesystem-realm/index.html new file mode 100644 index 000000000..f8d921644 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/filesystem-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A simple security realm definition backed by the filesystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/filtering-key-store/index.html b/latest/wildscribe/subsystem/elytron/filtering-key-store/index.html new file mode 100644 index 000000000..21255422a --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/filtering-key-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filtering KeyStore definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/http-authentication-factory/index.html b/latest/wildscribe/subsystem/elytron/http-authentication-factory/index.html new file mode 100644 index 000000000..bb047d4cf --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/http-authentication-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Resource containing the association of a SecurityDomain with a HttpServerAuthenticationMechanismFactory.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/identity-realm/index.html b/latest/wildscribe/subsystem/elytron/identity-realm/index.html new file mode 100644 index 000000000..9f582d05a --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/identity-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Realm definition for a realm which contains a single pre-defined identity.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/index.html b/latest/wildscribe/subsystem/elytron/index.html new file mode 100644 index 000000000..af63671ed --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Elytron Subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/jaas-realm/index.html b/latest/wildscribe/subsystem/elytron/jaas-realm/index.html new file mode 100644 index 000000000..7925cc085 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/jaas-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JAAS security realm definition. It uses a Login Context to verify user's credentials.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/jaspi-configuration/index.html b/latest/wildscribe/subsystem/elytron/jaspi-configuration/index.html new file mode 100644 index 000000000..b61afc4b3 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/jaspi-configuration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Resource containing the JASPI ServerAuthModule configuration for the servlet profile.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/jdbc-realm/index.html b/latest/wildscribe/subsystem/elytron/jdbc-realm/index.html new file mode 100644 index 000000000..77f5d9c3f --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/jdbc-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition backed by database using JDBC.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/kerberos-security-factory/index.html b/latest/wildscribe/subsystem/elytron/kerberos-security-factory/index.html new file mode 100644 index 000000000..760cf73c5 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/kerberos-security-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security factory for obtaining a GSSCredential for use during authentication.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/key-manager/index.html b/latest/wildscribe/subsystem/elytron/key-manager/index.html new file mode 100644 index 000000000..f88bab487 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/key-manager/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A key manager definition for creating the KeyManager as used to create an SSLContext.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/key-store-realm/index.html b/latest/wildscribe/subsystem/elytron/key-store-realm/index.html new file mode 100644 index 000000000..e151d9ae1 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/key-store-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition backed by a key store.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/key-store/index.html b/latest/wildscribe/subsystem/elytron/key-store/index.html new file mode 100644 index 000000000..73b8ea374 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/key-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A KeyStore definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/ldap-key-store/index.html b/latest/wildscribe/subsystem/elytron/ldap-key-store/index.html new file mode 100644 index 000000000..179946e8a --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/ldap-key-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A LdapKeyStore definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/ldap-realm/index.html b/latest/wildscribe/subsystem/elytron/ldap-realm/index.html new file mode 100644 index 000000000..7fc0fddc8 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/ldap-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition backed by LDAP.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/logical-permission-mapper/index.html b/latest/wildscribe/subsystem/elytron/logical-permission-mapper/index.html new file mode 100644 index 000000000..7cf5109ab --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/logical-permission-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a logical permission mapper.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/logical-role-mapper/index.html b/latest/wildscribe/subsystem/elytron/logical-role-mapper/index.html new file mode 100644 index 000000000..9807d349c --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/logical-role-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A RoleMapper definition for a RoleMapper that performs a logical operation using two referenced RoleMappers.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/mapped-regex-realm-mapper/index.html b/latest/wildscribe/subsystem/elytron/mapped-regex-realm-mapper/index.html new file mode 100644 index 000000000..972058793 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/mapped-regex-realm-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a RealmMapper implementation that first uses a regular expression to extract the realm name, this is then converted using the configured mapping of realm names.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/mapped-role-mapper/index.html b/latest/wildscribe/subsystem/elytron/mapped-role-mapper/index.html new file mode 100644 index 000000000..59e6d6d29 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/mapped-role-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A RoleMapper definition for a RoleMapper that performs a mapping based on configured map.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/mechanism-provider-filtering-sasl-server-factory/index.html b/latest/wildscribe/subsystem/elytron/mechanism-provider-filtering-sasl-server-factory/index.html new file mode 100644 index 000000000..c990645a3 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/mechanism-provider-filtering-sasl-server-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A SaslServerFactory definition that wraps another SaslServerFactory and enables filtering of mechanisms based on the mechanism name and Provider name and version. Any mechanisms loaded by factories not located using a Provider will not be filtered by this definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/periodic-rotating-file-audit-log/index.html b/latest/wildscribe/subsystem/elytron/periodic-rotating-file-audit-log/index.html new file mode 100644 index 000000000..fb1981480 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/periodic-rotating-file-audit-log/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An audit log definition for persisting an audit log to a local files rotating the log after a time period derived from the given suffix string, which should be in a format understood by java.time.format.DateTimeFormatter.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/permission-set/index.html b/latest/wildscribe/subsystem/elytron/permission-set/index.html new file mode 100644 index 000000000..cf7bd56cf --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/permission-set/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a permission set.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/policy/index.html b/latest/wildscribe/subsystem/elytron/policy/index.html new file mode 100644 index 000000000..4d4d47e84 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/policy/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A definition that sets up a policy provider.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/properties-realm/index.html b/latest/wildscribe/subsystem/elytron/properties-realm/index.html new file mode 100644 index 000000000..d9bf81a47 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/properties-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition backed by properties files.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/provider-http-server-mechanism-factory/index.html b/latest/wildscribe/subsystem/elytron/provider-http-server-mechanism-factory/index.html new file mode 100644 index 000000000..6894c42f9 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/provider-http-server-mechanism-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A http server factory definition where the http server factory is an aggregation of factories from the Provider[]


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/provider-loader/index.html b/latest/wildscribe/subsystem/elytron/provider-loader/index.html new file mode 100644 index 000000000..8481ed964 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/provider-loader/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A definition for a Provider loader.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/provider-sasl-server-factory/index.html b/latest/wildscribe/subsystem/elytron/provider-sasl-server-factory/index.html new file mode 100644 index 000000000..a67855b82 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/provider-sasl-server-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A sasl server factory definition where the sasl server factory is an aggregation of factories from the Provider[]


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/regex-principal-transformer/index.html b/latest/wildscribe/subsystem/elytron/regex-principal-transformer/index.html new file mode 100644 index 000000000..116d14fab --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/regex-principal-transformer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A regular expression based principal transformer


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/regex-role-mapper/index.html b/latest/wildscribe/subsystem/elytron/regex-role-mapper/index.html new file mode 100644 index 000000000..a79e1d5a0 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/regex-role-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A RoleMapper definition for a RoleMapper that performs a mapping based on regex and replaces matching roles with replacement pattern.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/regex-validating-principal-transformer/index.html b/latest/wildscribe/subsystem/elytron/regex-validating-principal-transformer/index.html new file mode 100644 index 000000000..f5ac894d1 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/regex-validating-principal-transformer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A regular expression based principal transformer which uses the regular expression to validate the name.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/sasl-authentication-factory/index.html b/latest/wildscribe/subsystem/elytron/sasl-authentication-factory/index.html new file mode 100644 index 000000000..8b497390c --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/sasl-authentication-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Resource containing the association of a SecurityDomain with a SaslServerFactory.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/secret-key-credential-store/index.html b/latest/wildscribe/subsystem/elytron/secret-key-credential-store/index.html new file mode 100644 index 000000000..45436239d --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/secret-key-credential-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A simple credential store to manage secret keys store clearly.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/security-domain/index.html b/latest/wildscribe/subsystem/elytron/security-domain/index.html new file mode 100644 index 000000000..d128d3cbd --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/security-domain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security domain definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/server-ssl-context/index.html b/latest/wildscribe/subsystem/elytron/server-ssl-context/index.html new file mode 100644 index 000000000..e5292e738 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/server-ssl-context/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An SSLContext for use on the server side of a connection.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/server-ssl-context/ssl-session/index.html b/latest/wildscribe/subsystem/elytron/server-ssl-context/ssl-session/index.html new file mode 100644 index 000000000..e293cf01b --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/server-ssl-context/ssl-session/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A currently established SSL session.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/server-ssl-sni-context/index.html b/latest/wildscribe/subsystem/elytron/server-ssl-sni-context/index.html new file mode 100644 index 000000000..c6154e795 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/server-ssl-sni-context/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A server side SNI Aware SSLContext that selects between an underlying context based on the provided SNI name


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/service-loader-http-server-mechanism-factory/index.html b/latest/wildscribe/subsystem/elytron/service-loader-http-server-mechanism-factory/index.html new file mode 100644 index 000000000..19949f18b --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/service-loader-http-server-mechanism-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A http server factory definition where the http server factory is an aggregation of factories identified using a ServiceLoader


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/service-loader-sasl-server-factory/index.html b/latest/wildscribe/subsystem/elytron/service-loader-sasl-server-factory/index.html new file mode 100644 index 000000000..11d6302b9 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/service-loader-sasl-server-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A sasl server factory definition where the sasl server factory is an aggregation of factories identified using a ServiceLoader


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/simple-permission-mapper/index.html b/latest/wildscribe/subsystem/elytron/simple-permission-mapper/index.html new file mode 100644 index 000000000..b77f495f2 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/simple-permission-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a simple configured permission mapper.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/simple-regex-realm-mapper/index.html b/latest/wildscribe/subsystem/elytron/simple-regex-realm-mapper/index.html new file mode 100644 index 000000000..5ce4bce20 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/simple-regex-realm-mapper/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a simple RealmMapper that attempts to extract the realm name using the capture group from the regular expression, if that does not provide a match then the delegate RealmMapper is used instead.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/simple-role-decoder/index.html b/latest/wildscribe/subsystem/elytron/simple-role-decoder/index.html new file mode 100644 index 000000000..7c2e927cf --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/simple-role-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a simple RoleDecoder that takes a single attribute and maps it directly to roles.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/size-rotating-file-audit-log/index.html b/latest/wildscribe/subsystem/elytron/size-rotating-file-audit-log/index.html new file mode 100644 index 000000000..c13aae5b9 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/size-rotating-file-audit-log/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An audit log definition for persisting an audit log to a local files rotating the log after the size of the file grows beyond a certain point and keeping a fixed number of backups.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/source-address-role-decoder/index.html b/latest/wildscribe/subsystem/elytron/source-address-role-decoder/index.html new file mode 100644 index 000000000..4ef99080d --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/source-address-role-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a RoleDecoder that maps roles based on the IP address of a remote client.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/syslog-audit-log/index.html b/latest/wildscribe/subsystem/elytron/syslog-audit-log/index.html new file mode 100644 index 000000000..dca4cb59c --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/syslog-audit-log/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An audit logger that sends audit events to a remote syslog server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/token-realm/index.html b/latest/wildscribe/subsystem/elytron/token-realm/index.html new file mode 100644 index 000000000..30ce6a89e --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/token-realm/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security realm definition capable of validating and extracting identities from security tokens.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/trust-manager/index.html b/latest/wildscribe/subsystem/elytron/trust-manager/index.html new file mode 100644 index 000000000..414b24a96 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/trust-manager/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A trust manager definition for creating the TrustManager[] as used to create an SSLContext.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/virtual-security-domain/index.html b/latest/wildscribe/subsystem/elytron/virtual-security-domain/index.html new file mode 100644 index 000000000..0c35f0481 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/virtual-security-domain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A virtual security domain definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/x500-attribute-principal-decoder/index.html b/latest/wildscribe/subsystem/elytron/x500-attribute-principal-decoder/index.html new file mode 100644 index 000000000..27f83ba9a --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/x500-attribute-principal-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Definition of a X.500 attribute based principal decoder


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/x500-subject-evidence-decoder/index.html b/latest/wildscribe/subsystem/elytron/x500-subject-evidence-decoder/index.html new file mode 100644 index 000000000..2091f6b3d --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/x500-subject-evidence-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An evidence decoder that derives the principal associated with the given evidence from the subject from the first certificate in the given evidence.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/elytron/x509-subject-alt-name-evidence-decoder/index.html b/latest/wildscribe/subsystem/elytron/x509-subject-alt-name-evidence-decoder/index.html new file mode 100644 index 000000000..cc2799eb0 --- /dev/null +++ b/latest/wildscribe/subsystem/elytron/x509-subject-alt-name-evidence-decoder/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An evidence decoder that derives the principal associated with the given evidence from an X.509 subject alternative name from the first certificate in the given evidence.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/health/index.html b/latest/wildscribe/subsystem/health/index.html new file mode 100644 index 000000000..d31523eed --- /dev/null +++ b/latest/wildscribe/subsystem/health/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for Health


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/iiop-openjdk/index.html b/latest/wildscribe/subsystem/iiop-openjdk/index.html new file mode 100644 index 000000000..36ba75d57 --- /dev/null +++ b/latest/wildscribe/subsystem/iiop-openjdk/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The iiop-openjdk subsystem configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/locking/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/locking/index.html new file mode 100644 index 000000000..4ce4f38a7 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/locking/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/partition-handling/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/partition-handling/index.html new file mode 100644 index 000000000..2d74ae897 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/partition-handling/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The partition handling configuration for distributed and replicated caches.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/persistence/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/persistence/index.html new file mode 100644 index 000000000..286e9c1a9 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/persistence/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the infinispan subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/transaction/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/transaction/index.html new file mode 100644 index 000000000..fa11885c8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/cache/component/transaction/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/cache/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/cache/index.html new file mode 100644 index 000000000..1bfb49756 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the infinispan subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html new file mode 100644 index 000000000..5b41db1bb --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/backup/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/backup/index.html new file mode 100644 index 000000000..40ac6e5b6 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/backup/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A backup site to which to replicate this cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/index.html new file mode 100644 index 000000000..5376ef795 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The remote backups for this cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/expiration/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/expiration/index.html new file mode 100644 index 000000000..9d02dcb2e --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/expiration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/locking/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/locking/index.html new file mode 100644 index 000000000..679cbc098 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/locking/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/partition-handling/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/partition-handling/index.html new file mode 100644 index 000000000..f2d3f41e0 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/partition-handling/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The partition handling configuration for distributed and replicated caches.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/state-transfer/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/state-transfer/index.html new file mode 100644 index 000000000..a123fd2b1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/state-transfer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The state transfer configuration for distributed and replicated caches.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/transaction/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/transaction/index.html new file mode 100644 index 000000000..b8ca778df --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/transaction/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/index.html new file mode 100644 index 000000000..05da392b1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A distributed cache configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html new file mode 100644 index 000000000..174664f01 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/heap/index.html new file mode 100644 index 000000000..4b41f81b4 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html new file mode 100644 index 000000000..2ab53504e --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/off-heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/off-heap/index.html new file mode 100644 index 000000000..3effb3cc3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/off-heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..10e086e53 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..382b6864a --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..77941cbca --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..ba489b8f2 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..6cc6f6800 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/index.html new file mode 100644 index 000000000..287bb6923 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html new file mode 100644 index 000000000..497ef66c8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/behind/index.html new file mode 100644 index 000000000..2cdf4a522 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/through/index.html new file mode 100644 index 000000000..d28d5eb4f --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/index.html new file mode 100644 index 000000000..4fa542198 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html new file mode 100644 index 000000000..03f76559b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/behind/index.html new file mode 100644 index 000000000..5500ea3d8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/through/index.html new file mode 100644 index 000000000..f93efa9c1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/index.html new file mode 100644 index 000000000..1bf99f87b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..aed86f9ae --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/behind/index.html new file mode 100644 index 000000000..b4f39594c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/through/index.html new file mode 100644 index 000000000..1f179bf1f --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/index.html new file mode 100644 index 000000000..855b32dc0 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..5c01b59e2 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/table/string/index.html new file mode 100644 index 000000000..c24e94c46 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/table/string/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/behind/index.html new file mode 100644 index 000000000..1cfb0b0df --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/through/index.html new file mode 100644 index 000000000..3ebb068f2 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..a5e52634b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..0eb9749af --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..a767a9763 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..2aafbe573 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..98e61e2ac --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..3559362e3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/none/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/none/index.html new file mode 100644 index 000000000..4399ea8c8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/none/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/index.html new file mode 100644 index 000000000..e73e3d18a --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html new file mode 100644 index 000000000..7eda66c0c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/behind/index.html new file mode 100644 index 000000000..6c01de537 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/through/index.html new file mode 100644 index 000000000..6f45697a2 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/index.html new file mode 100644 index 000000000..ec9866c3f --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of an infinispan cache container


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/expiration/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/expiration/index.html new file mode 100644 index 000000000..d4bb25e30 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/expiration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/locking/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/locking/index.html new file mode 100644 index 000000000..8d1f8fdb4 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/locking/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/transaction/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/transaction/index.html new file mode 100644 index 000000000..66ac34ffd --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/transaction/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/index.html new file mode 100644 index 000000000..7f14ba8f0 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An invalidation cache


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html new file mode 100644 index 000000000..ebb9469b1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/heap/index.html new file mode 100644 index 000000000..e45c5f287 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html new file mode 100644 index 000000000..b733bc076 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/off-heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/off-heap/index.html new file mode 100644 index 000000000..f07274893 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/off-heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..0ea9fad1a --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..e6078f7ed --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..a07234ba0 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..f7a822f5c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..cdcbe339d --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/index.html new file mode 100644 index 000000000..11f03a46b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html new file mode 100644 index 000000000..33144f5bf --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/behind/index.html new file mode 100644 index 000000000..9893511d8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/through/index.html new file mode 100644 index 000000000..811309b4b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/index.html new file mode 100644 index 000000000..2cd2a3fb3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html new file mode 100644 index 000000000..fadcf8dc5 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/behind/index.html new file mode 100644 index 000000000..d3553b387 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/through/index.html new file mode 100644 index 000000000..124b4500f --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/index.html new file mode 100644 index 000000000..493c6d6a6 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..4f39259ef --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/behind/index.html new file mode 100644 index 000000000..570ec923d --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/through/index.html new file mode 100644 index 000000000..9f079d277 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/index.html new file mode 100644 index 000000000..7b2315fc0 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..038d0cc57 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/table/string/index.html new file mode 100644 index 000000000..d1675cda5 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/table/string/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/behind/index.html new file mode 100644 index 000000000..cb7a6388a --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/through/index.html new file mode 100644 index 000000000..6d7d084b1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..c676ca0ac --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..f0e1d9eab --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..44977c382 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..44b59de2f --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..c2421afb0 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..c870a5491 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/none/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/none/index.html new file mode 100644 index 000000000..3a8d6d474 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/none/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/index.html new file mode 100644 index 000000000..573e2e886 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html new file mode 100644 index 000000000..dc9641362 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/behind/index.html new file mode 100644 index 000000000..9955819ab --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/through/index.html new file mode 100644 index 000000000..c93ecb224 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/expiration/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/expiration/index.html new file mode 100644 index 000000000..8d9253ce4 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/expiration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/locking/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/locking/index.html new file mode 100644 index 000000000..c8d76e75d --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/locking/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/transaction/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/transaction/index.html new file mode 100644 index 000000000..06c4f20e2 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/component/transaction/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/index.html new file mode 100644 index 000000000..49ba518ba --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A local cache configuration


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html new file mode 100644 index 000000000..d64120b9f --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/heap/index.html new file mode 100644 index 000000000..4dd58fc14 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html new file mode 100644 index 000000000..883cfbe0a --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/off-heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/off-heap/index.html new file mode 100644 index 000000000..6ea0ff7b7 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/off-heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..e58b4ddf8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..5081e28c5 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..dfc3bfe3d --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..0e6158068 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..a5301bf59 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/index.html new file mode 100644 index 000000000..a7f0da186 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html new file mode 100644 index 000000000..cd1a8b528 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/behind/index.html new file mode 100644 index 000000000..086b18058 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/through/index.html new file mode 100644 index 000000000..508520214 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/index.html new file mode 100644 index 000000000..e5ee36dc6 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html new file mode 100644 index 000000000..b564a39aa --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/behind/index.html new file mode 100644 index 000000000..1155d6469 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/through/index.html new file mode 100644 index 000000000..665c1e723 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/index.html new file mode 100644 index 000000000..f4d619de6 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..797159ec2 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/behind/index.html new file mode 100644 index 000000000..8e071d3a1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/through/index.html new file mode 100644 index 000000000..a89152145 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/index.html new file mode 100644 index 000000000..61a446ecc --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..78dca6952 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/table/string/index.html new file mode 100644 index 000000000..40287d55c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/table/string/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/behind/index.html new file mode 100644 index 000000000..314d42074 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/through/index.html new file mode 100644 index 000000000..aa6b24834 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..f533b95e3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..a6031e0f5 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..e00269387 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..f308b5438 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..2dbd39aaa --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..5a1a41eab --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/none/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/none/index.html new file mode 100644 index 000000000..6149cbc34 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/none/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/index.html new file mode 100644 index 000000000..14b58a5e7 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html new file mode 100644 index 000000000..9a187d43c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/behind/index.html new file mode 100644 index 000000000..4be9fa066 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/through/index.html new file mode 100644 index 000000000..bdb79e9ba --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html new file mode 100644 index 000000000..f3e9d8733 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/backup/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/backup/index.html new file mode 100644 index 000000000..9a7b56acc --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/backup/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A backup site to which to replicate this cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/index.html new file mode 100644 index 000000000..ba7e8c0b1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The remote backups for this cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/expiration/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/expiration/index.html new file mode 100644 index 000000000..3da6c0e06 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/expiration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/locking/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/locking/index.html new file mode 100644 index 000000000..d5bc9448d --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/locking/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/partition-handling/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/partition-handling/index.html new file mode 100644 index 000000000..6edf442bc --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/partition-handling/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The partition handling configuration for distributed and replicated caches.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/state-transfer/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/state-transfer/index.html new file mode 100644 index 000000000..41b31c3d8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/state-transfer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The state transfer configuration for distributed and replicated caches.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/transaction/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/transaction/index.html new file mode 100644 index 000000000..3628f6086 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/transaction/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/index.html new file mode 100644 index 000000000..92898160e --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A replicated cache configuration


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html new file mode 100644 index 000000000..9b6c0490e --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/heap/index.html new file mode 100644 index 000000000..9d38f62f6 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html new file mode 100644 index 000000000..676f5bdd4 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/off-heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/off-heap/index.html new file mode 100644 index 000000000..612bc3afb --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/off-heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..adcd72e0a --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..29615fe3f --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..a44834c51 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..587c22903 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..a2e72e570 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/index.html new file mode 100644 index 000000000..d05fc0cf3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html new file mode 100644 index 000000000..2447b2eff --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/behind/index.html new file mode 100644 index 000000000..6158ca247 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/through/index.html new file mode 100644 index 000000000..dda900083 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/index.html new file mode 100644 index 000000000..47bcad4f1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html new file mode 100644 index 000000000..7badd30d3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/behind/index.html new file mode 100644 index 000000000..15a7e8c89 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/through/index.html new file mode 100644 index 000000000..3d39c6586 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/index.html new file mode 100644 index 000000000..029b40f51 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..db0f8d59f --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/behind/index.html new file mode 100644 index 000000000..556492f07 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/through/index.html new file mode 100644 index 000000000..838fd3ba3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/index.html new file mode 100644 index 000000000..fd65ae3ac --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..aabf871dd --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/table/string/index.html new file mode 100644 index 000000000..94da4fd9c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/table/string/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/behind/index.html new file mode 100644 index 000000000..a64ae0bf1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/through/index.html new file mode 100644 index 000000000..499a49bd7 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..f2b56d5a1 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..b95ed82f3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..6d2ec75bd --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..5228355ff --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..ffe34a886 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..26c1b6cc4 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/none/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/none/index.html new file mode 100644 index 000000000..9f7abe7d2 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/none/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/index.html new file mode 100644 index 000000000..db43ba543 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html new file mode 100644 index 000000000..8b11ba6aa --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/behind/index.html new file mode 100644 index 000000000..061262e58 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/through/index.html new file mode 100644 index 000000000..c812e0afa --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html new file mode 100644 index 000000000..0a333d63b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backup-for/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/backup/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/backup/index.html new file mode 100644 index 000000000..478fa653b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/backup/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A backup site to which to replicate this cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/index.html new file mode 100644 index 000000000..9bc69d9d6 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The remote backups for this cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/expiration/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/expiration/index.html new file mode 100644 index 000000000..5115210f5 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/expiration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache expiration configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/locking/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/locking/index.html new file mode 100644 index 000000000..62901373f --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/locking/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The locking configuration of the cache.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/partition-handling/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/partition-handling/index.html new file mode 100644 index 000000000..4e2a2d813 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/partition-handling/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The partition handling configuration for distributed and replicated caches.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/state-transfer/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/state-transfer/index.html new file mode 100644 index 000000000..6749b4e45 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/state-transfer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The state transfer configuration for distributed and replicated caches.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/transaction/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/transaction/index.html new file mode 100644 index 000000000..d9c7b8abb --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/transaction/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache transaction configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/index.html new file mode 100644 index 000000000..1d4b87ac3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 16.0.0
Deprecated. Use distributed-cache with owners=2 instead.

A scattered cache configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html new file mode 100644 index 000000000..7d3042887 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/heap/index.html new file mode 100644 index 000000000..2a14228e9 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

On-heap object-based memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html new file mode 100644 index 000000000..d8b6700fd --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /20/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/object/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/off-heap/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/off-heap/index.html new file mode 100644 index 000000000..d7d88a766 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/off-heap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Off-heap memory configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html new file mode 100644 index 000000000..158a51dea --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html new file mode 100644 index 000000000..dc2150772 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html new file mode 100644 index 000000000..25f05df23 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html new file mode 100644 index 000000000..b71d90c2c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html new file mode 100644 index 000000000..d87c2953b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/binary-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/index.html new file mode 100644 index 000000000..99b4acba9 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html new file mode 100644 index 000000000..0a05224f9 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/behind/index.html new file mode 100644 index 000000000..dfa4d2527 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/through/index.html new file mode 100644 index 000000000..4caaf0ca8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/index.html new file mode 100644 index 000000000..ae1769e46 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache file store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html new file mode 100644 index 000000000..92a487e36 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/behind/index.html new file mode 100644 index 000000000..5c11b24f3 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/through/index.html new file mode 100644 index 000000000..73015f6db --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/index.html new file mode 100644 index 000000000..6c7cef9aa --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

HotRod-based store using Infinispan Server instance to store data.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html new file mode 100644 index 000000000..25354bc3a --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/behind/index.html new file mode 100644 index 000000000..b535becea --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/through/index.html new file mode 100644 index 000000000..34d08c8fe --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/index.html new file mode 100644 index 000000000..6b11ed125 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The cache JDBC store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html new file mode 100644 index 000000000..4eee4e558 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/table/string/index.html new file mode 100644 index 000000000..3489ce8e0 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/table/string/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a table used to store cache entries whose keys can be expressed as strings.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/behind/index.html new file mode 100644 index 000000000..f1f3ffef8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/through/index.html new file mode 100644 index 000000000..8d1e4af98 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html new file mode 100644 index 000000000..aa85cf6e0 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html new file mode 100644 index 000000000..0786ac811 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html new file mode 100644 index 000000000..1ea6641f8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/binary/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html new file mode 100644 index 000000000..f54439196 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/table/string/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html new file mode 100644 index 000000000..aef4b3cce --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/behind/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html new file mode 100644 index 000000000..d325abb9e --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/mixed-jdbc/write/through/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/none/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/none/index.html new file mode 100644 index 000000000..8b5b5451d --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/none/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A store-less configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/index.html new file mode 100644 index 000000000..9a4594c22 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 7.0.0
Use HotRod store instead.

The cache remote store configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html new file mode 100644 index 000000000..1e098df38 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/behind/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/behind/index.html new file mode 100644 index 000000000..aa017e03c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/behind/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-behind instead of write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/through/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/through/index.html new file mode 100644 index 000000000..26879f70a --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/through/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a cache store as write-through.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html new file mode 100644 index 000000000..78bdc213b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/async-operations/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/blocking/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/blocking/index.html new file mode 100644 index 000000000..210168839 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/blocking/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for for blocking operations.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/expiration/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/expiration/index.html new file mode 100644 index 000000000..b6afe38ae --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/expiration/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for for evictions.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/listener/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/listener/index.html new file mode 100644 index 000000000..da64ccff4 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/listener/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for asynchronous cache listener notifications.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/non-blocking/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/non-blocking/index.html new file mode 100644 index 000000000..7601a6d9c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/non-blocking/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for for non-blocking operations.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html new file mode 100644 index 000000000..af7718a23 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/persistence/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html new file mode 100644 index 000000000..b6605043c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/remote-command/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html new file mode 100644 index 000000000..f687e015b --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/state-transfer/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html new file mode 100644 index 000000000..8447c79fa --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/cache-container/thread-pool/transport/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/transport/jgroups/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/transport/jgroups/index.html new file mode 100644 index 000000000..5da4a140c --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/transport/jgroups/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The description of the transport used by this cache container


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/cache-container/transport/none/index.html b/latest/wildscribe/subsystem/infinispan/cache-container/transport/none/index.html new file mode 100644 index 000000000..a912b1334 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/cache-container/transport/none/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A local-only transport used by this cache-container


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/index.html b/latest/wildscribe/subsystem/infinispan/index.html new file mode 100644 index 000000000..6eb0b34f5 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the infinispan subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/remote-cache-container/component/connection-pool/index.html b/latest/wildscribe/subsystem/infinispan/remote-cache-container/component/connection-pool/index.html new file mode 100644 index 000000000..9721659e8 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/remote-cache-container/component/connection-pool/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of the connection pool.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/remote-cache-container/component/security/index.html b/latest/wildscribe/subsystem/infinispan/remote-cache-container/component/security/index.html new file mode 100644 index 000000000..08f6f8cae --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/remote-cache-container/component/security/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Security configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html b/latest/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html new file mode 100644 index 000000000..a9de98fd2 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/component/transaction/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/remote-cache-container/index.html b/latest/wildscribe/subsystem/infinispan/remote-cache-container/index.html new file mode 100644 index 000000000..7ee368716 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/remote-cache-container/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a remote Infinispan cache container.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html b/latest/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html new file mode 100644 index 000000000..b69bb54dd --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/invalidation/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html b/latest/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html new file mode 100644 index 000000000..2e67582b4 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/infinispan/remote-cache-container/near-cache/none/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/remote-cache-container/remote-cache/index.html b/latest/wildscribe/subsystem/infinispan/remote-cache-container/remote-cache/index.html new file mode 100644 index 000000000..a720324cc --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/remote-cache-container/remote-cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the infinispan subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/remote-cache-container/remote-cluster/index.html b/latest/wildscribe/subsystem/infinispan/remote-cache-container/remote-cluster/index.html new file mode 100644 index 000000000..8fe657fbd --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/remote-cache-container/remote-cluster/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of a remote cluster.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/infinispan/remote-cache-container/thread-pool/async/index.html b/latest/wildscribe/subsystem/infinispan/remote-cache-container/thread-pool/async/index.html new file mode 100644 index 000000000..bbc62c254 --- /dev/null +++ b/latest/wildscribe/subsystem/infinispan/remote-cache-container/thread-pool/async/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a thread pool used for asynchronous operations.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/io/buffer-pool/index.html b/latest/wildscribe/subsystem/io/buffer-pool/index.html new file mode 100644 index 000000000..46bd02cb9 --- /dev/null +++ b/latest/wildscribe/subsystem/io/buffer-pool/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 4.0.0
This has been replaced by the buffer pool in the Undertow subsystem

Defines buffer pool


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/io/index.html b/latest/wildscribe/subsystem/io/index.html new file mode 100644 index 000000000..ba1d3447c --- /dev/null +++ b/latest/wildscribe/subsystem/io/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

IO subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/io/worker/index.html b/latest/wildscribe/subsystem/io/worker/index.html new file mode 100644 index 000000000..f53c4f70c --- /dev/null +++ b/latest/wildscribe/subsystem/io/worker/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines workers


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/io/worker/outbound-bind-address/index.html b/latest/wildscribe/subsystem/io/worker/outbound-bind-address/index.html new file mode 100644 index 000000000..457c3b17f --- /dev/null +++ b/latest/wildscribe/subsystem/io/worker/outbound-bind-address/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a bind address to use when connecting to the specified destination


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/io/worker/server/index.html b/latest/wildscribe/subsystem/io/worker/server/index.html new file mode 100644 index 000000000..0cb9b76bb --- /dev/null +++ b/latest/wildscribe/subsystem/io/worker/server/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime resource that describes listening servers utilizing this worker


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jaxrs/index.html b/latest/wildscribe/subsystem/jaxrs/index.html new file mode 100644 index 000000000..fc087a6b1 --- /dev/null +++ b/latest/wildscribe/subsystem/jaxrs/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta RESTful Web Services subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/archive-validation/archive-validation/index.html b/latest/wildscribe/subsystem/jca/archive-validation/archive-validation/index.html new file mode 100644 index 000000000..17a7d7013 --- /dev/null +++ b/latest/wildscribe/subsystem/jca/archive-validation/archive-validation/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Archive validation for resource adapters


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/bean-validation/bean-validation/index.html b/latest/wildscribe/subsystem/jca/bean-validation/bean-validation/index.html new file mode 100644 index 000000000..ab85c82bb --- /dev/null +++ b/latest/wildscribe/subsystem/jca/bean-validation/bean-validation/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta Bean Validation for resource adapters


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/bootstrap-context/index.html b/latest/wildscribe/subsystem/jca/bootstrap-context/index.html new file mode 100644 index 000000000..59b29549a --- /dev/null +++ b/latest/wildscribe/subsystem/jca/bootstrap-context/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Bootstrap context for resource adapters


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/cached-connection-manager/cached-connection-manager/index.html b/latest/wildscribe/subsystem/jca/cached-connection-manager/cached-connection-manager/index.html new file mode 100644 index 000000000..52c81f1a3 --- /dev/null +++ b/latest/wildscribe/subsystem/jca/cached-connection-manager/cached-connection-manager/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Cached connection manager for resource adapters


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/distributed-workmanager/index.html b/latest/wildscribe/subsystem/jca/distributed-workmanager/index.html new file mode 100644 index 000000000..4104da0cb --- /dev/null +++ b/latest/wildscribe/subsystem/jca/distributed-workmanager/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

DistributedWorkManager for resource adapters


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/distributed-workmanager/long-running-threads/index.html b/latest/wildscribe/subsystem/jca/distributed-workmanager/long-running-threads/index.html new file mode 100644 index 000000000..5268070ac --- /dev/null +++ b/latest/wildscribe/subsystem/jca/distributed-workmanager/long-running-threads/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with a bounded queue where threads submittings tasks may block. Such a thread pool has a core and maximum size and a specified queue length. When a task is submitted, if the number of running threads is less than the core size, a new thread is created. Otherwise, if there is room in the queue, the task is enqueued. Otherwise, if the number of running threads is less than the maximum size, a new thread is created. Otherwise, the caller blocks until room becomes available in the queue.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/distributed-workmanager/short-running-threads/index.html b/latest/wildscribe/subsystem/jca/distributed-workmanager/short-running-threads/index.html new file mode 100644 index 000000000..f735bf9ed --- /dev/null +++ b/latest/wildscribe/subsystem/jca/distributed-workmanager/short-running-threads/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with a bounded queue where threads submittings tasks may block. Such a thread pool has a core and maximum size and a specified queue length. When a task is submitted, if the number of running threads is less than the core size, a new thread is created. Otherwise, if there is room in the queue, the task is enqueued. Otherwise, if the number of running threads is less than the maximum size, a new thread is created. Otherwise, the caller blocks until room becomes available in the queue.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/index.html b/latest/wildscribe/subsystem/jca/index.html new file mode 100644 index 000000000..47fe82145 --- /dev/null +++ b/latest/wildscribe/subsystem/jca/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Connectors Architecture subsystem providing general configuration for resource adapters


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/tracer/tracer/index.html b/latest/wildscribe/subsystem/jca/tracer/tracer/index.html new file mode 100644 index 000000000..2c61c2894 --- /dev/null +++ b/latest/wildscribe/subsystem/jca/tracer/tracer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Tracer for resource adapters


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/workmanager/default/index.html b/latest/wildscribe/subsystem/jca/workmanager/default/index.html new file mode 100644 index 000000000..26db13677 --- /dev/null +++ b/latest/wildscribe/subsystem/jca/workmanager/default/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WorkManager for resource adapters


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/workmanager/default/long-running-threads/index.html b/latest/wildscribe/subsystem/jca/workmanager/default/long-running-threads/index.html new file mode 100644 index 000000000..82c23d04a --- /dev/null +++ b/latest/wildscribe/subsystem/jca/workmanager/default/long-running-threads/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with a bounded queue where threads submittings tasks may block. Such a thread pool has a core and maximum size and a specified queue length. When a task is submitted, if the number of running threads is less than the core size, a new thread is created. Otherwise, if there is room in the queue, the task is enqueued. Otherwise, if the number of running threads is less than the maximum size, a new thread is created. Otherwise, the caller blocks until room becomes available in the queue.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/workmanager/default/short-running-threads/index.html b/latest/wildscribe/subsystem/jca/workmanager/default/short-running-threads/index.html new file mode 100644 index 000000000..d54f394d6 --- /dev/null +++ b/latest/wildscribe/subsystem/jca/workmanager/default/short-running-threads/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor with a bounded queue where threads submittings tasks may block. Such a thread pool has a core and maximum size and a specified queue length. When a task is submitted, if the number of running threads is less than the core size, a new thread is created. Otherwise, if there is room in the queue, the task is enqueued. Otherwise, if the number of running threads is less than the maximum size, a new thread is created. Otherwise, the caller blocks until room becomes available in the queue.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jca/workmanager/default/statistics/local/index.html b/latest/wildscribe/subsystem/jca/workmanager/default/statistics/local/index.html new file mode 100644 index 000000000..1bf8165a9 --- /dev/null +++ b/latest/wildscribe/subsystem/jca/workmanager/default/statistics/local/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies a Workmanager.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jdr/index.html b/latest/wildscribe/subsystem/jdr/index.html new file mode 100644 index 000000000..8c9981e58 --- /dev/null +++ b/latest/wildscribe/subsystem/jdr/index.html @@ -0,0 +1,25 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

JBoss Diagnostic Reporter (JDR) Subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/index.html new file mode 100644 index 000000000..234be2e46 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JGroups channel fork


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/index.html new file mode 100644 index 000000000..88419f505 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..9d44d76c2 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/index.html new file mode 100644 index 000000000..5e7af6152 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html new file mode 100644 index 000000000..d72b28d7d --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/cipher/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/cipher/index.html new file mode 100644 index 000000000..8134e0622 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/cipher/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/digest/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/digest/index.html new file mode 100644 index 000000000..2336e8e85 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/digest/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/plain/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/plain/index.html new file mode 100644 index 000000000..287e487f7 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/plain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/index.html new file mode 100644 index 000000000..b752987e8 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html new file mode 100644 index 000000000..430cd762b --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK2/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK2/index.html new file mode 100644 index 000000000..f1cc7d453 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK2/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/index.html new file mode 100644 index 000000000..4a6f1abb5 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html new file mode 100644 index 000000000..f627cde9a --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html new file mode 100644 index 000000000..9ee22becf --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html new file mode 100644 index 000000000..5c2486e38 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MERGE2/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/index.html new file mode 100644 index 000000000..263b0b89b --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html new file mode 100644 index 000000000..ff97ca1df --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/index.html new file mode 100644 index 000000000..455134770 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..90ee0c466 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/index.html new file mode 100644 index 000000000..ebb9e4261 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html new file mode 100644 index 000000000..2cdf0503f --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/index.html new file mode 100644 index 000000000..7f8185c9e --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html new file mode 100644 index 000000000..fb62a6976 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html new file mode 100644 index 000000000..b4f1f6d25 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html new file mode 100644 index 000000000..5699b2b39 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/UNICAST2/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html new file mode 100644 index 000000000..3bf73c232 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=ASYM_ENCRYPT instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..3122962d8 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/index.html new file mode 100644 index 000000000..7f5952b46 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=AUTH instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html new file mode 100644 index 000000000..617a81f55 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/index.html new file mode 100644 index 000000000..adc91d7fc --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=JDBC_PING instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html new file mode 100644 index 000000000..9c7c43bfb --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html new file mode 100644 index 000000000..a4bc0c8e1 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=SYM_ENCRYPT instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..e44eb618f --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/index.html new file mode 100644 index 000000000..6e4073a88 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=TCPGOSSIP instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html new file mode 100644 index 000000000..3c668698f --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/index.html new file mode 100644 index 000000000..6284e8046 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=TCPPING instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html new file mode 100644 index 000000000..190bdab45 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html new file mode 100644 index 000000000..fa7f3f7a4 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html new file mode 100644 index 000000000..0e35a2943 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/pbcast.NAKACK/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/index.html new file mode 100644 index 000000000..5a5b03ef1 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JGroups channel.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html new file mode 100644 index 000000000..9270bf98c --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL3/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL3/index.html new file mode 100644 index 000000000..11e16fe05 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL3/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

FD_ALL3


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html new file mode 100644 index 000000000..1953a25ae --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK2/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK2/index.html new file mode 100644 index 000000000..a8d7ad6ab --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK2/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

FD_SOCK2


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html new file mode 100644 index 000000000..5b4e9c811 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG3/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG4/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG4/index.html new file mode 100644 index 000000000..2967029af --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG4/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

FRAG4


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/MERGE3/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/MERGE3/index.html new file mode 100644 index 000000000..c2131d861 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/MERGE3/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MERGE3


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/MFC/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/MFC/index.html new file mode 100644 index 000000000..816f37085 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/MFC/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MFC


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/PING/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/PING/index.html new file mode 100644 index 000000000..6b377810a --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/PING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

PING


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/RED/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/RED/index.html new file mode 100644 index 000000000..1da7734f3 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/RED/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

RED


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UDP/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UDP/index.html new file mode 100644 index 000000000..47136e34d --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UDP/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

UDP


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UFC/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UFC/index.html new file mode 100644 index 000000000..56853c4f3 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UFC/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

UFC


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UNICAST3/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UNICAST3/index.html new file mode 100644 index 000000000..57c850f5e --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/UNICAST3/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

UNICAST3


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html new file mode 100644 index 000000000..a7994a1f9 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT2/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT2/index.html new file mode 100644 index 000000000..9e030efd8 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT2/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

VERIFY_SUSPECT2


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.GMS/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.GMS/index.html new file mode 100644 index 000000000..167693b15 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.GMS/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

GMS


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.NAKACK2/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.NAKACK2/index.html new file mode 100644 index 000000000..3f542ca95 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.NAKACK2/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

NAKACK2


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.STABLE/index.html b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.STABLE/index.html new file mode 100644 index 000000000..14a084107 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.STABLE/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

STABLE


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/index.html b/latest/wildscribe/subsystem/jgroups/index.html new file mode 100644 index 000000000..6bd86205e --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the JGroups subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/index.html b/latest/wildscribe/subsystem/jgroups/stack/index.html new file mode 100644 index 000000000..b57f701dc --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a JGroups protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/index.html new file mode 100644 index 000000000..398467393 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..5028f40fe --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/index.html new file mode 100644 index 000000000..846338a28 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html new file mode 100644 index 000000000..d4f1b43c4 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/AUTH/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/cipher/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/cipher/index.html new file mode 100644 index 000000000..c72146678 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/cipher/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/digest/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/digest/index.html new file mode 100644 index 000000000..d7e894f6d --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/digest/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/plain/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/plain/index.html new file mode 100644 index 000000000..e57c83821 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/plain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An authentication token


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/index.html new file mode 100644 index 000000000..fabfe1b43 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html new file mode 100644 index 000000000..06a019a73 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK2/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK2/index.html new file mode 100644 index 000000000..2d09c9473 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK2/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/index.html new file mode 100644 index 000000000..8f73777db --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html new file mode 100644 index 000000000..98197c486 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html new file mode 100644 index 000000000..0a245a68c --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html new file mode 100644 index 000000000..84e7d4feb --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MERGE2/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/MPING/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/MPING/index.html new file mode 100644 index 000000000..22e0c51a6 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/MPING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html new file mode 100644 index 000000000..efadaf753 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/MPING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/index.html new file mode 100644 index 000000000..dfbcd624b --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..af6081eca --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/index.html new file mode 100644 index 000000000..e1187354c --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html new file mode 100644 index 000000000..992dca37a --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/index.html new file mode 100644 index 000000000..5724579db --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html new file mode 100644 index 000000000..d0fb41c7e --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html new file mode 100644 index 000000000..c1e724f60 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html new file mode 100644 index 000000000..034a27451 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/UNICAST2/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html new file mode 100644 index 000000000..5ca7b82b4 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=ASYM_ENCRYPT instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..201f6dbef --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/index.html new file mode 100644 index 000000000..9e41c009d --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=AUTH instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html new file mode 100644 index 000000000..c41b0b517 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/index.html new file mode 100644 index 000000000..1678f668d --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=JDBC_PING instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html new file mode 100644 index 000000000..6821c0d7b --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html new file mode 100644 index 000000000..ac8d0d307 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=SYM_ENCRYPT instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html new file mode 100644 index 000000000..acb528e3e --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/index.html new file mode 100644 index 000000000..c78c07af0 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=TCPGOSSIP instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html new file mode 100644 index 000000000..feaa25916 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/index.html new file mode 100644 index 000000000..ce0e6745a --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
Deprecated. Use protocol=TCPPING instead.

The configuration of a protocol within a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html new file mode 100644 index 000000000..8efd69a4e --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html new file mode 100644 index 000000000..a351bb048 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html new file mode 100644 index 000000000..08f088d0a --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/protocol/pbcast.NAKACK/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/index.html b/latest/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/index.html new file mode 100644 index 000000000..b721e1674 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a RELAY protocol


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/remote-site/index.html b/latest/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/remote-site/index.html new file mode 100644 index 000000000..76a32dfac --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/remote-site/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A remote site to which to bridge.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/index.html new file mode 100644 index 000000000..a366e5a90 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a transport for a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html new file mode 100644 index 000000000..ca6855d26 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/default/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/default/index.html new file mode 100644 index 000000000..9a15c3259 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/default/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html new file mode 100644 index 000000000..4470387d9 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html new file mode 100644 index 000000000..74a50b918 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html new file mode 100644 index 000000000..9ee530723 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/index.html new file mode 100644 index 000000000..52b2f4b4d --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a transport for a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html new file mode 100644 index 000000000..af32dcdf4 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/default/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/default/index.html new file mode 100644 index 000000000..6d23c025b --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/default/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html new file mode 100644 index 000000000..887b4b3d3 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html new file mode 100644 index 000000000..430bde0bf --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html new file mode 100644 index 000000000..f4886359e --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/index.html new file mode 100644 index 000000000..97f8b68f2 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a transport for a protocol stack.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html new file mode 100644 index 000000000..6bcb7dd94 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/property/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/default/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/default/index.html new file mode 100644 index 000000000..e838c82c7 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/default/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A thread pool executor


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html new file mode 100644 index 000000000..33a32fc3b --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/internal/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html new file mode 100644 index 000000000..cc1e401d4 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/oob/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html new file mode 100644 index 000000000..41f353c61 --- /dev/null +++ b/latest/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/timer/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/jmx/configuration/audit-log/handler/index.html b/latest/wildscribe/subsystem/jmx/configuration/audit-log/handler/index.html new file mode 100644 index 000000000..aac44d51e --- /dev/null +++ b/latest/wildscribe/subsystem/jmx/configuration/audit-log/handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A reference to a file or syslog audit log handler. The name of the handler is denoted by the value of the address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jmx/configuration/audit-log/index.html b/latest/wildscribe/subsystem/jmx/configuration/audit-log/index.html new file mode 100644 index 000000000..38ccfde4a --- /dev/null +++ b/latest/wildscribe/subsystem/jmx/configuration/audit-log/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The management audit logging top-level resource.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jmx/expose-model/expression/index.html b/latest/wildscribe/subsystem/jmx/expose-model/expression/index.html new file mode 100644 index 000000000..28f66daae --- /dev/null +++ b/latest/wildscribe/subsystem/jmx/expose-model/expression/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration for exposing the 'expression' model controller in the MBeanServer. This facade will expose all simple attributes and operation parameters as String. Reads return the unresolved expression. You may use expressions when writing attributes and setting operation parameters.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jmx/expose-model/resolved/index.html b/latest/wildscribe/subsystem/jmx/expose-model/resolved/index.html new file mode 100644 index 000000000..e0bae6b32 --- /dev/null +++ b/latest/wildscribe/subsystem/jmx/expose-model/resolved/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration for exposing the 'resolved' model controller in the MBeanServer. This facade will expose all simple attributes and operation parameters as their type in the underlying model. Reads return the resolved expression if used, or the raw value. You may not use expressions when writing attributes and setting operation parameters.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jmx/index.html b/latest/wildscribe/subsystem/jmx/index.html new file mode 100644 index 000000000..0a31af0f7 --- /dev/null +++ b/latest/wildscribe/subsystem/jmx/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the JMX subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jmx/remoting-connector/jmx/index.html b/latest/wildscribe/subsystem/jmx/remoting-connector/jmx/index.html new file mode 100644 index 000000000..1de1823d9 --- /dev/null +++ b/latest/wildscribe/subsystem/jmx/remoting-connector/jmx/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A JBoss remoting connector for the JMX subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jpa/index.html b/latest/wildscribe/subsystem/jpa/index.html new file mode 100644 index 000000000..fab5dc15a --- /dev/null +++ b/latest/wildscribe/subsystem/jpa/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Jakarta Persistence subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jsf/index.html b/latest/wildscribe/subsystem/jsf/index.html new file mode 100644 index 000000000..533f1e620 --- /dev/null +++ b/latest/wildscribe/subsystem/jsf/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Jakarta Server Faces subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/jsr77/index.html b/latest/wildscribe/subsystem/jsr77/index.html new file mode 100644 index 000000000..a8d9d55a2 --- /dev/null +++ b/latest/wildscribe/subsystem/jsr77/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/jsr77/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/async-handler/index.html b/latest/wildscribe/subsystem/logging/async-handler/index.html new file mode 100644 index 000000000..790e0f9eb --- /dev/null +++ b/latest/wildscribe/subsystem/logging/async-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to the sub-handlers in an asynchronous thread, used for handlers which introduce a substantial amount of lag.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/console-handler/index.html b/latest/wildscribe/subsystem/logging/console-handler/index.html new file mode 100644 index 000000000..df2d25472 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/console-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to the console.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/custom-formatter/index.html b/latest/wildscribe/subsystem/logging/custom-formatter/index.html new file mode 100644 index 000000000..9b595390b --- /dev/null +++ b/latest/wildscribe/subsystem/logging/custom-formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom formatter to be used with handlers. Note that most log records are formatted in the printf format. Formatters may require invocation of the org.jboss.logmanager.ExtLogRecord#getFormattedMessage() for the message to be properly formatted.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/custom-handler/index.html b/latest/wildscribe/subsystem/logging/custom-handler/index.html new file mode 100644 index 000000000..2070d2508 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/custom-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a custom logging handler. The custom handler must extend java.util.logging.Handler.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/file-handler/index.html b/latest/wildscribe/subsystem/logging/file-handler/index.html new file mode 100644 index 000000000..98ff82aa8 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/file-handler/index.html @@ -0,0 +1,45 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to a file.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/filter/index.html b/latest/wildscribe/subsystem/logging/filter/index.html new file mode 100644 index 000000000..ffb457772 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/filter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filter to be used with handlers and loggers. Please note the name of the filter should start with an alpha character and not contain any special characters. The following names are considered reserved names; accept, deny, not, all, any, levelChange, levels, levelRange, match, substitute, substituteAll.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/index.html b/latest/wildscribe/subsystem/logging/index.html new file mode 100644 index 000000000..7cc5a12be --- /dev/null +++ b/latest/wildscribe/subsystem/logging/index.html @@ -0,0 +1,27 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the logging subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/json-formatter/index.html b/latest/wildscribe/subsystem/logging/json-formatter/index.html new file mode 100644 index 000000000..8f3994444 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/json-formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A formatter that formats log messages in JSON.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/log-file/index.html b/latest/wildscribe/subsystem/logging/log-file/index.html new file mode 100644 index 000000000..d8b47b8aa --- /dev/null +++ b/latest/wildscribe/subsystem/logging/log-file/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Log files that are available to be read.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logger/index.html b/latest/wildscribe/subsystem/logging/logger/index.html new file mode 100644 index 000000000..89e2946a7 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logger/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a logger category.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/async-handler/index.html b/latest/wildscribe/subsystem/logging/logging-profile/async-handler/index.html new file mode 100644 index 000000000..e41448a70 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/async-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to the sub-handlers in an asynchronous thread, used for handlers which introduce a substantial amount of lag.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/console-handler/index.html b/latest/wildscribe/subsystem/logging/logging-profile/console-handler/index.html new file mode 100644 index 000000000..431688385 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/console-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to the console.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/custom-formatter/index.html b/latest/wildscribe/subsystem/logging/logging-profile/custom-formatter/index.html new file mode 100644 index 000000000..21b306172 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/custom-formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom formatter to be used with handlers. Note that most log records are formatted in the printf format. Formatters may require invocation of the org.jboss.logmanager.ExtLogRecord#getFormattedMessage() for the message to be properly formatted.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/custom-handler/index.html b/latest/wildscribe/subsystem/logging/logging-profile/custom-handler/index.html new file mode 100644 index 000000000..f397c8357 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/custom-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a custom logging handler. The custom handler must extend java.util.logging.Handler.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/file-handler/index.html b/latest/wildscribe/subsystem/logging/logging-profile/file-handler/index.html new file mode 100644 index 000000000..377f81b70 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/file-handler/index.html @@ -0,0 +1,45 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to a file.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/filter/index.html b/latest/wildscribe/subsystem/logging/logging-profile/filter/index.html new file mode 100644 index 000000000..be406cc97 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/filter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filter to be used with handlers and loggers. Please note the name of the filter should start with an alpha character and not contain any special characters. The following names are considered reserved names; accept, deny, not, all, any, levelChange, levels, levelRange, match, substitute, substituteAll.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/index.html b/latest/wildscribe/subsystem/logging/logging-profile/index.html new file mode 100644 index 000000000..4621d707b --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the logging subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/json-formatter/index.html b/latest/wildscribe/subsystem/logging/logging-profile/json-formatter/index.html new file mode 100644 index 000000000..c80b8e4b2 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/json-formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A formatter that formats log messages in JSON.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/log-file/index.html b/latest/wildscribe/subsystem/logging/logging-profile/log-file/index.html new file mode 100644 index 000000000..001e64380 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/log-file/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Log files that are available to be read.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/logger/index.html b/latest/wildscribe/subsystem/logging/logging-profile/logger/index.html new file mode 100644 index 000000000..3c0f6bd93 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/logger/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a logger category.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/pattern-formatter/index.html b/latest/wildscribe/subsystem/logging/logging-profile/pattern-formatter/index.html new file mode 100644 index 000000000..c358a5c20 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/pattern-formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A pattern formatter to be used with handlers.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/periodic-rotating-file-handler/index.html b/latest/wildscribe/subsystem/logging/logging-profile/periodic-rotating-file-handler/index.html new file mode 100644 index 000000000..b43b8de0b --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/periodic-rotating-file-handler/index.html @@ -0,0 +1,45 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a file, rotating the log after a time period derived from the given suffix string, which should be in a format understood by java.text.SimpleDateFormat.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/periodic-size-rotating-file-handler/index.html b/latest/wildscribe/subsystem/logging/logging-profile/periodic-size-rotating-file-handler/index.html new file mode 100644 index 000000000..a9ed2e2f6 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/periodic-size-rotating-file-handler/index.html @@ -0,0 +1,45 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a file, rotating the log after a time period derived from the given suffix string or after the size of the file grows beyond a certain point and keeping a fixed number of backups. The suffix should be in a format understood by the java.text.SimpleDateFormat. Any backups rotated by the suffix will not be purged during a size rotation.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/root-logger/ROOT/index.html b/latest/wildscribe/subsystem/logging/logging-profile/root-logger/ROOT/index.html new file mode 100644 index 000000000..2a390c156 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/root-logger/ROOT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines the root logger for this log context.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/size-rotating-file-handler/index.html b/latest/wildscribe/subsystem/logging/logging-profile/size-rotating-file-handler/index.html new file mode 100644 index 000000000..267f3999d --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/size-rotating-file-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to a file, rotating the log after the size of the file grows beyond a certain point and keeping a fixed number of backups.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/socket-handler/index.html b/latest/wildscribe/subsystem/logging/logging-profile/socket-handler/index.html new file mode 100644 index 000000000..209940c79 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/socket-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a socket. Note that a socket-handler will queue messages during the boot process. These messages will be drained to the socket once the resource is fully configured. If the server is in an admin-only state, messages will be discarded.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/syslog-handler/index.html b/latest/wildscribe/subsystem/logging/logging-profile/syslog-handler/index.html new file mode 100644 index 000000000..ae1494807 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/syslog-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a syslog handler.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/logging-profile/xml-formatter/index.html b/latest/wildscribe/subsystem/logging/logging-profile/xml-formatter/index.html new file mode 100644 index 000000000..d29a5744c --- /dev/null +++ b/latest/wildscribe/subsystem/logging/logging-profile/xml-formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A formatter that formats log messages in XML.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/pattern-formatter/index.html b/latest/wildscribe/subsystem/logging/pattern-formatter/index.html new file mode 100644 index 000000000..97c82b3cb --- /dev/null +++ b/latest/wildscribe/subsystem/logging/pattern-formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A pattern formatter to be used with handlers.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/periodic-rotating-file-handler/index.html b/latest/wildscribe/subsystem/logging/periodic-rotating-file-handler/index.html new file mode 100644 index 000000000..bf2c2027c --- /dev/null +++ b/latest/wildscribe/subsystem/logging/periodic-rotating-file-handler/index.html @@ -0,0 +1,45 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a file, rotating the log after a time period derived from the given suffix string, which should be in a format understood by java.text.SimpleDateFormat.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/periodic-size-rotating-file-handler/index.html b/latest/wildscribe/subsystem/logging/periodic-size-rotating-file-handler/index.html new file mode 100644 index 000000000..febb15ce3 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/periodic-size-rotating-file-handler/index.html @@ -0,0 +1,45 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a file, rotating the log after a time period derived from the given suffix string or after the size of the file grows beyond a certain point and keeping a fixed number of backups. The suffix should be in a format understood by the java.text.SimpleDateFormat. Any backups rotated by the suffix will not be purged during a size rotation.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/root-logger/ROOT/index.html b/latest/wildscribe/subsystem/logging/root-logger/ROOT/index.html new file mode 100644 index 000000000..22a9b6a49 --- /dev/null +++ b/latest/wildscribe/subsystem/logging/root-logger/ROOT/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines the root logger for this log context.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/size-rotating-file-handler/index.html b/latest/wildscribe/subsystem/logging/size-rotating-file-handler/index.html new file mode 100644 index 000000000..eb7d0b78e --- /dev/null +++ b/latest/wildscribe/subsystem/logging/size-rotating-file-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a handler which writes to a file, rotating the log after the size of the file grows beyond a certain point and keeping a fixed number of backups.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/socket-handler/index.html b/latest/wildscribe/subsystem/logging/socket-handler/index.html new file mode 100644 index 000000000..307aeccfa --- /dev/null +++ b/latest/wildscribe/subsystem/logging/socket-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a handler which writes to a socket. Note that a socket-handler will queue messages during the boot process. These messages will be drained to the socket once the resource is fully configured. If the server is in an admin-only state, messages will be discarded.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/syslog-handler/index.html b/latest/wildscribe/subsystem/logging/syslog-handler/index.html new file mode 100644 index 000000000..c42bf429d --- /dev/null +++ b/latest/wildscribe/subsystem/logging/syslog-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

It defines a syslog handler.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/logging/xml-formatter/index.html b/latest/wildscribe/subsystem/logging/xml-formatter/index.html new file mode 100644 index 000000000..64328ecde --- /dev/null +++ b/latest/wildscribe/subsystem/logging/xml-formatter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A formatter that formats log messages in XML.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/mail/index.html b/latest/wildscribe/subsystem/mail/index.html new file mode 100644 index 000000000..e1db985a4 --- /dev/null +++ b/latest/wildscribe/subsystem/mail/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The mail subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/mail/mail-session/custom/index.html b/latest/wildscribe/subsystem/mail/mail-session/custom/index.html new file mode 100644 index 000000000..dee9ef2c7 --- /dev/null +++ b/latest/wildscribe/subsystem/mail/mail-session/custom/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session server


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/mail/mail-session/index.html b/latest/wildscribe/subsystem/mail/mail-session/index.html new file mode 100644 index 000000000..2e337bb5d --- /dev/null +++ b/latest/wildscribe/subsystem/mail/mail-session/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session definition


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/mail/mail-session/server/imap/index.html b/latest/wildscribe/subsystem/mail/mail-session/server/imap/index.html new file mode 100644 index 000000000..db471e51e --- /dev/null +++ b/latest/wildscribe/subsystem/mail/mail-session/server/imap/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session server


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/mail/mail-session/server/pop3/index.html b/latest/wildscribe/subsystem/mail/mail-session/server/pop3/index.html new file mode 100644 index 000000000..a661c8ae0 --- /dev/null +++ b/latest/wildscribe/subsystem/mail/mail-session/server/pop3/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session server


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/mail/mail-session/server/smtp/index.html b/latest/wildscribe/subsystem/mail/mail-session/server/smtp/index.html new file mode 100644 index 000000000..f97deec81 --- /dev/null +++ b/latest/wildscribe/subsystem/mail/mail-session/server/smtp/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Mail session server


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/connection-factory/index.html b/latest/wildscribe/subsystem/messaging-activemq/connection-factory/index.html new file mode 100644 index 000000000..cd13d6691 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/connector/index.html b/latest/wildscribe/subsystem/messaging-activemq/connector/index.html new file mode 100644 index 000000000..4f8dd8f6d --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A connector can be used by a client to define how it connects to a server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/discovery-group/index.html b/latest/wildscribe/subsystem/messaging-activemq/discovery-group/index.html new file mode 100644 index 000000000..470e8e25b --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/discovery-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 9.0.0
Use instead a socket-discovery-group or a jgroups-discovery-group to create a discovery-group.

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/external-jms-queue/index.html b/latest/wildscribe/subsystem/messaging-activemq/external-jms-queue/index.html new file mode 100644 index 000000000..83669ee51 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/external-jms-queue/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue to a remote broker.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/external-jms-topic/index.html b/latest/wildscribe/subsystem/messaging-activemq/external-jms-topic/index.html new file mode 100644 index 000000000..abaa1ceca --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/external-jms-topic/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic to a remote broker.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/http-connector/index.html b/latest/wildscribe/subsystem/messaging-activemq/http-connector/index.html new file mode 100644 index 000000000..6fc291c84 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/http-connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by a remote client to define how it connects to a server over HTTP.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/in-vm-connector/index.html b/latest/wildscribe/subsystem/messaging-activemq/in-vm-connector/index.html new file mode 100644 index 000000000..09331c623 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/in-vm-connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by an in-VM client to define how it connects to a server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/index.html b/latest/wildscribe/subsystem/messaging-activemq/index.html new file mode 100644 index 000000000..5fc8873e1 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The messaging-activemq subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/jgroups-discovery-group/index.html b/latest/wildscribe/subsystem/messaging-activemq/jgroups-discovery-group/index.html new file mode 100644 index 000000000..f57f4f889 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/jgroups-discovery-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/jms-bridge/index.html b/latest/wildscribe/subsystem/messaging-activemq/jms-bridge/index.html new file mode 100644 index 000000000..3eee7291e --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/jms-bridge/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A Jakarta Messaging bridge instance.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/pooled-connection-factory/index.html b/latest/wildscribe/subsystem/messaging-activemq/pooled-connection-factory/index.html new file mode 100644 index 000000000..f8a51f5e7 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/pooled-connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/remote-connector/index.html b/latest/wildscribe/subsystem/messaging-activemq/remote-connector/index.html new file mode 100644 index 000000000..f96fa557d --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/remote-connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by a remote client to define how it connects to a server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/acceptor/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/acceptor/index.html new file mode 100644 index 000000000..4739ff021 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/acceptor/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An acceptor defines a way in which connections can be made to the ActiveMQ server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/address-setting/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/address-setting/index.html new file mode 100644 index 000000000..ba174c962 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/address-setting/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An address setting defines some attributes that are defined against an address wildcard rather than a specific queue.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/bridge/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/bridge/index.html new file mode 100644 index 000000000..ba48d8b40 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/bridge/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The function of a bridge is to consume messages from a source queue, and forward them to a target address, typically on a different ActiveMQ server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/broadcast-group/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/broadcast-group/index.html new file mode 100644 index 000000000..66f8bfa14 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/broadcast-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 9.0.0
Use instead a socket-broadcast-group or a jgroups-broadcast-group to create a broadcast-group.

A broadcast group is the means by which a server broadcasts connectors over the network.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/cluster-connection/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/cluster-connection/index.html new file mode 100644 index 000000000..4e699917a --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/cluster-connection/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Cluster connections group servers into clusters so that messages can be load balanced between the nodes of the cluster.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/connection-factory/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/connection-factory/index.html new file mode 100644 index 000000000..fc75810ce --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/connector-service/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/connector-service/index.html new file mode 100644 index 000000000..5fa4763f3 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/connector-service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A connector service allows to integrate external components with Apache ActiveMQ Artemis to send and receive messages.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/connector/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/connector/index.html new file mode 100644 index 000000000..88c0b961d --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A connector can be used by a client to define how it connects to a server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/core-address/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/core-address/index.html new file mode 100644 index 000000000..002f45440 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/core-address/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A runtime-only resource representing a ActiveMQ "address". Zero or more queues can be bound to a single address. When a message is routed, it is routed to the set of queues bound to the message's address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/core-address/role/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/core-address/role/index.html new file mode 100644 index 000000000..922563620 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/core-address/role/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security role.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/discovery-group/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/discovery-group/index.html new file mode 100644 index 000000000..c2384bb8f --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/discovery-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 9.0.0
Use instead a socket-discovery-group or a jgroups-discovery-group to create a discovery-group.

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/divert/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/divert/index.html new file mode 100644 index 000000000..68566ae03 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/divert/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to transparently divert messages routed to one address to some other address, without making any changes to any client application logic.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/grouping-handler/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/grouping-handler/index.html new file mode 100644 index 000000000..e80d7250f --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/grouping-handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Makes decisions about which node in a cluster should handle a message with a group id assigned.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/live-only/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/live-only/index.html new file mode 100644 index 000000000..d17f331a5 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/live-only/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html new file mode 100644 index 000000000..e0331ed5a --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/master/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/primary/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/primary/index.html new file mode 100644 index 000000000..8cbaa6f11 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/primary/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/secondary/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/secondary/index.html new file mode 100644 index 000000000..edbfaef9b --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/secondary/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html new file mode 100644 index 000000000..f896f9c3c --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/slave/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/index.html new file mode 100644 index 000000000..023382ca5 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html new file mode 100644 index 000000000..91a8accc5 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-master/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-primary/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-primary/index.html new file mode 100644 index 000000000..191403ff6 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-primary/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-secondary/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-secondary/index.html new file mode 100644 index 000000000..4fc77f480 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-secondary/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html new file mode 100644 index 000000000..01c1db3cc --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-slave/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html new file mode 100644 index 000000000..59c11dbdb --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/master/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/primary/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/primary/index.html new file mode 100644 index 000000000..0cc006a57 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/primary/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/secondary/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/secondary/index.html new file mode 100644 index 000000000..aed45da41 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/secondary/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html new file mode 100644 index 000000000..a64ad6de3 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/slave/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/index.html new file mode 100644 index 000000000..802c4a954 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html new file mode 100644 index 000000000..53213fea6 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-master/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-primary/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-primary/index.html new file mode 100644 index 000000000..020b9944e --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-primary/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-secondary/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-secondary/index.html new file mode 100644 index 000000000..b2e31b0c1 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-secondary/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A messaging resource that allows you to configure High Availability for the ActiveMQ server (the value of ha-policy can be live-only, replication-master, replication-slave, replication-colocated, shared-store-master, shared-store-slave, or shared-store-colocated).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html new file mode 100644 index 000000000..e71ec5c9f --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-slave/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/http-acceptor/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/http-acceptor/index.html new file mode 100644 index 000000000..d111f256a --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/http-acceptor/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a way in which remote connections can be made to the ActiveMQ server over HTTP.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/http-connector/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/http-connector/index.html new file mode 100644 index 000000000..c8bbd1f76 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/http-connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by a remote client to define how it connects to a server over HTTP.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/in-vm-acceptor/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/in-vm-acceptor/index.html new file mode 100644 index 000000000..68047fa0c --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/in-vm-acceptor/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a way in which in-VM connections can be made to the ActiveMQ server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/in-vm-connector/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/in-vm-connector/index.html new file mode 100644 index 000000000..40e443bf7 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/in-vm-connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by an in-VM client to define how it connects to a server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/index.html new file mode 100644 index 000000000..50a49c3ae --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/index.html @@ -0,0 +1,320 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An ActiveMQ server instance.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/jgroups-broadcast-group/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/jgroups-broadcast-group/index.html new file mode 100644 index 000000000..8a2fc184c --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/jgroups-broadcast-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A broadcast group is the means by which a server broadcasts connectors over the network.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/jgroups-discovery-group/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/jgroups-discovery-group/index.html new file mode 100644 index 000000000..7583505c1 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/jgroups-discovery-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/jms-queue/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/jms-queue/index.html new file mode 100644 index 000000000..c374eadba --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/jms-queue/index.html @@ -0,0 +1,159 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging queue.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/jms-topic/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/jms-topic/index.html new file mode 100644 index 000000000..52d613f4b --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/jms-topic/index.html @@ -0,0 +1,377 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a Jakarta Messaging topic.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/legacy-connection-factory/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/legacy-connection-factory/index.html new file mode 100644 index 000000000..fff956361 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/legacy-connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/path/bindings-directory/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/path/bindings-directory/index.html new file mode 100644 index 000000000..c35a44d9c --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/path/bindings-directory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filesystem path pointing to one of the locations where ActiveMQ stores persistent data.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/path/journal-directory/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/path/journal-directory/index.html new file mode 100644 index 000000000..222bbd68f --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/path/journal-directory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filesystem path pointing to one of the locations where ActiveMQ stores persistent data.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/path/large-messages-directory/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/path/large-messages-directory/index.html new file mode 100644 index 000000000..2abc867e2 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/path/large-messages-directory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filesystem path pointing to one of the locations where ActiveMQ stores persistent data.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/path/paging-directory/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/path/paging-directory/index.html new file mode 100644 index 000000000..8b7c5a64b --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/path/paging-directory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filesystem path pointing to one of the locations where ActiveMQ stores persistent data.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/pooled-connection-factory/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/pooled-connection-factory/index.html new file mode 100644 index 000000000..1f87e7019 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/pooled-connection-factory/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a managed connection factory.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/queue/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/queue/index.html new file mode 100644 index 000000000..3091ab605 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/queue/index.html @@ -0,0 +1,219 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A Queue.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/remote-acceptor/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/remote-acceptor/index.html new file mode 100644 index 000000000..5b47fb528 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/remote-acceptor/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines a way in which remote connections can be made to the ActiveMQ server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/remote-connector/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/remote-connector/index.html new file mode 100644 index 000000000..e6f3b5581 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/remote-connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Used by a remote client to define how it connects to a server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/runtime-queue/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/runtime-queue/index.html new file mode 100644 index 000000000..1d70b1365 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/runtime-queue/index.html @@ -0,0 +1,219 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A Queue.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/security-setting/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/security-setting/index.html new file mode 100644 index 000000000..dfc878f3b --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/security-setting/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security setting allows sets of permissions to be defined against queues based on their address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/security-setting/role/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/security-setting/role/index.html new file mode 100644 index 000000000..666192efb --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/security-setting/role/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A security role.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/socket-broadcast-group/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/socket-broadcast-group/index.html new file mode 100644 index 000000000..beb00690e --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/socket-broadcast-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A broadcast group is the means by which a server broadcasts connectors over the network.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/server/socket-discovery-group/index.html b/latest/wildscribe/subsystem/messaging-activemq/server/socket-discovery-group/index.html new file mode 100644 index 000000000..cddad6e00 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/server/socket-discovery-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/messaging-activemq/socket-discovery-group/index.html b/latest/wildscribe/subsystem/messaging-activemq/socket-discovery-group/index.html new file mode 100644 index 000000000..0b874d351 --- /dev/null +++ b/latest/wildscribe/subsystem/messaging-activemq/socket-discovery-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Multicast group to listen to receive broadcast from other servers announcing their connectors.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/metrics/index.html b/latest/wildscribe/subsystem/metrics/index.html new file mode 100644 index 000000000..f485bfe94 --- /dev/null +++ b/latest/wildscribe/subsystem/metrics/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for Base Metrics


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/micrometer/index.html b/latest/wildscribe/subsystem/micrometer/index.html new file mode 100644 index 000000000..c396608cc --- /dev/null +++ b/latest/wildscribe/subsystem/micrometer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Micrometer subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-config-smallrye/config-source-provider/index.html b/latest/wildscribe/subsystem/microprofile-config-smallrye/config-source-provider/index.html new file mode 100644 index 000000000..178235851 --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-config-smallrye/config-source-provider/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Config Source Provider can be used to register new implementation for multiple Config Sources.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-config-smallrye/config-source/index.html b/latest/wildscribe/subsystem/microprofile-config-smallrye/config-source/index.html new file mode 100644 index 000000000..f5be18ea1 --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-config-smallrye/config-source/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

ConfigSource provides a source for configuration values.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-config-smallrye/index.html b/latest/wildscribe/subsystem/microprofile-config-smallrye/index.html new file mode 100644 index 000000000..0f832e855 --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-config-smallrye/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for MicroProfile Config With SmallRye


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-fault-tolerance-smallrye/index.html b/latest/wildscribe/subsystem/microprofile-fault-tolerance-smallrye/index.html new file mode 100644 index 000000000..e4dc3f60f --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-fault-tolerance-smallrye/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MicroProfile Fault Tolerance subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-health-smallrye/index.html b/latest/wildscribe/subsystem/microprofile-health-smallrye/index.html new file mode 100644 index 000000000..4ea61ac69 --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-health-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-health-smallrye/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-jwt-smallrye/index.html b/latest/wildscribe/subsystem/microprofile-jwt-smallrye/index.html new file mode 100644 index 000000000..de951e512 --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-jwt-smallrye/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

WildFly Extension for MicroProfile JWT With SmallRye


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-metrics-smallrye/index.html b/latest/wildscribe/subsystem/microprofile-metrics-smallrye/index.html new file mode 100644 index 000000000..640603512 --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-metrics-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /21/wildscribe/subsystem/microprofile-metrics-smallrye/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-openapi-smallrye/index.html b/latest/wildscribe/subsystem/microprofile-openapi-smallrye/index.html new file mode 100644 index 000000000..315ae033b --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-openapi-smallrye/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MicroProfile OpenAPI subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html b/latest/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html new file mode 100644 index 000000000..58014be09 --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/subsystem/microprofile-opentracing-smallrye/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html b/latest/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html new file mode 100644 index 000000000..78819385e --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /27/wildscribe/subsystem/microprofile-opentracing-smallrye/jaeger-tracer/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/microprofile-telemetry/index.html b/latest/wildscribe/subsystem/microprofile-telemetry/index.html new file mode 100644 index 000000000..e63fffbb2 --- /dev/null +++ b/latest/wildscribe/subsystem/microprofile-telemetry/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

MicroProfile Telemetry subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/modcluster/index.html b/latest/wildscribe/subsystem/modcluster/index.html new file mode 100644 index 000000000..531086bb9 --- /dev/null +++ b/latest/wildscribe/subsystem/modcluster/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration and runtime operations for mod_cluster subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/modcluster/proxy/index.html b/latest/wildscribe/subsystem/modcluster/proxy/index.html new file mode 100644 index 000000000..ad7f6eb86 --- /dev/null +++ b/latest/wildscribe/subsystem/modcluster/proxy/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Proxy resource coupled with single Undertow listener (and server) specifying load balancer discovery, its configuration and load balance factor provider. Multiple proxy configuration can be specified.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/custom-load-metric/index.html b/latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/custom-load-metric/index.html new file mode 100644 index 000000000..a30d8f965 --- /dev/null +++ b/latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/custom-load-metric/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Built-in load metric contributing a value to the overall load factor of a node. The load factors from each metric are aggregated according to their weights.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/index.html b/latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/index.html new file mode 100644 index 000000000..b180a0bca --- /dev/null +++ b/latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration and runtime operations for mod_cluster subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/load-metric/index.html b/latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/load-metric/index.html new file mode 100644 index 000000000..97d94e50a --- /dev/null +++ b/latest/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/load-metric/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Built-in load metric contributing a value to the overall load factor of a node. The load factors from each metric are aggregated according to their weights.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/modcluster/proxy/load-provider/simple/index.html b/latest/wildscribe/subsystem/modcluster/proxy/load-provider/simple/index.html new file mode 100644 index 000000000..4b1ba5c0e --- /dev/null +++ b/latest/wildscribe/subsystem/modcluster/proxy/load-provider/simple/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Simple load provider returns constant pre-configured load balancing factor.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html b/latest/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html new file mode 100644 index 000000000..b6b698164 --- /dev/null +++ b/latest/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /26.1/wildscribe/subsystem/modcluster/proxy/ssl/configuration/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/naming/binding/index.html b/latest/wildscribe/subsystem/naming/binding/index.html new file mode 100644 index 000000000..0280c0680 --- /dev/null +++ b/latest/wildscribe/subsystem/naming/binding/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

JNDI bindings for primitive types


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/naming/index.html b/latest/wildscribe/subsystem/naming/index.html new file mode 100644 index 000000000..2925fd337 --- /dev/null +++ b/latest/wildscribe/subsystem/naming/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the naming subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/naming/service/remote-naming/index.html b/latest/wildscribe/subsystem/naming/service/remote-naming/index.html new file mode 100644 index 000000000..08d54b0f3 --- /dev/null +++ b/latest/wildscribe/subsystem/naming/service/remote-naming/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The remote naming server


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/opentelemetry/index.html b/latest/wildscribe/subsystem/opentelemetry/index.html new file mode 100644 index 000000000..a89356ec1 --- /dev/null +++ b/latest/wildscribe/subsystem/opentelemetry/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

OpenTelemetry subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/pojo/index.html b/latest/wildscribe/subsystem/pojo/index.html new file mode 100644 index 000000000..119d8142c --- /dev/null +++ b/latest/wildscribe/subsystem/pojo/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Support JBoss5 and JBoss6 pojo configuration model.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/configuration/endpoint/index.html b/latest/wildscribe/subsystem/remoting/configuration/endpoint/index.html new file mode 100644 index 000000000..d11be387e --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/configuration/endpoint/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 5.0.0
The child resource for configuring the remoting endpoint is deprecated. Use the attributes on the parent resource to configure the remoting endpoint.

Endpoint configuration


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/connector/index.html b/latest/wildscribe/subsystem/remoting/connector/index.html new file mode 100644 index 000000000..2455d149a --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a Remoting connector.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/connector/property/index.html b/latest/wildscribe/subsystem/remoting/connector/property/index.html new file mode 100644 index 000000000..c9492d2cc --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/connector/property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/connector/security/sasl/index.html b/latest/wildscribe/subsystem/remoting/connector/security/sasl/index.html new file mode 100644 index 000000000..6339fba54 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/connector/security/sasl/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The "sasl" element contains the SASL authentication configuration for this connector.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/connector/security/sasl/property/index.html b/latest/wildscribe/subsystem/remoting/connector/security/sasl/property/index.html new file mode 100644 index 000000000..a46d12ea3 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/connector/security/sasl/property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/connector/security/sasl/sasl-policy/policy/index.html b/latest/wildscribe/subsystem/remoting/connector/security/sasl/sasl-policy/policy/index.html new file mode 100644 index 000000000..75d3c75d9 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/connector/security/sasl/sasl-policy/policy/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The policy configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/http-connector/index.html b/latest/wildscribe/subsystem/remoting/http-connector/index.html new file mode 100644 index 000000000..ee76ad671 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/http-connector/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a HTTP Upgrade based Remoting connector.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/http-connector/property/index.html b/latest/wildscribe/subsystem/remoting/http-connector/property/index.html new file mode 100644 index 000000000..44a6cfb65 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/http-connector/property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/http-connector/security/sasl/index.html b/latest/wildscribe/subsystem/remoting/http-connector/security/sasl/index.html new file mode 100644 index 000000000..79fc3c929 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/http-connector/security/sasl/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The "sasl" element contains the SASL authentication configuration for this connector.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/http-connector/security/sasl/property/index.html b/latest/wildscribe/subsystem/remoting/http-connector/security/sasl/property/index.html new file mode 100644 index 000000000..3794d3da5 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/http-connector/security/sasl/property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/http-connector/security/sasl/sasl-policy/policy/index.html b/latest/wildscribe/subsystem/remoting/http-connector/security/sasl/sasl-policy/policy/index.html new file mode 100644 index 000000000..8d08cb41d --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/http-connector/security/sasl/sasl-policy/policy/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The policy configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/index.html b/latest/wildscribe/subsystem/remoting/index.html new file mode 100644 index 000000000..7ba26df8c --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the Remoting subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/local-outbound-connection/index.html b/latest/wildscribe/subsystem/remoting/local-outbound-connection/index.html new file mode 100644 index 000000000..a3f3f3977 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/local-outbound-connection/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 4.0.0
Use the remote-outbound-connection resource instead, with an appropriate protocol.

Remoting outbound connection with an implicit local:// URI scheme.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/local-outbound-connection/property/index.html b/latest/wildscribe/subsystem/remoting/local-outbound-connection/property/index.html new file mode 100644 index 000000000..847068b09 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/local-outbound-connection/property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/outbound-connection/index.html b/latest/wildscribe/subsystem/remoting/outbound-connection/index.html new file mode 100644 index 000000000..e6734a8de --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/outbound-connection/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 4.0.0
Use the remote-outbound-connection resource instead, with an appropriate protocol.

Remoting outbound connection.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/outbound-connection/property/index.html b/latest/wildscribe/subsystem/remoting/outbound-connection/property/index.html new file mode 100644 index 000000000..04f4d21ac --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/outbound-connection/property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/remote-outbound-connection/index.html b/latest/wildscribe/subsystem/remoting/remote-outbound-connection/index.html new file mode 100644 index 000000000..ea95b9245 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/remote-outbound-connection/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Remoting outbound connection.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/remoting/remote-outbound-connection/property/index.html b/latest/wildscribe/subsystem/remoting/remote-outbound-connection/property/index.html new file mode 100644 index 000000000..e4ebe8874 --- /dev/null +++ b/latest/wildscribe/subsystem/remoting/remote-outbound-connection/property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Properties supported by the underlying provider. The property name is inferred from the last element of the properties address.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/request-controller/index.html b/latest/wildscribe/subsystem/request-controller/index.html new file mode 100644 index 000000000..3768e9811 --- /dev/null +++ b/latest/wildscribe/subsystem/request-controller/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The request controller subsystem. Used for request limiting and graceful shutdown.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/resource-adapters/index.html b/latest/wildscribe/subsystem/resource-adapters/index.html new file mode 100644 index 000000000..c23a6b539 --- /dev/null +++ b/latest/wildscribe/subsystem/resource-adapters/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configuration of the resource adapters subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/config-properties/index.html b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/config-properties/index.html new file mode 100644 index 000000000..be9713ce6 --- /dev/null +++ b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/config-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/index.html b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/index.html new file mode 100644 index 000000000..44d2bd3a4 --- /dev/null +++ b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies an administration object.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/resource-adapters/resource-adapter/config-properties/index.html b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/config-properties/index.html new file mode 100644 index 000000000..d6dfaf033 --- /dev/null +++ b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/config-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/config-properties/index.html b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/config-properties/index.html new file mode 100644 index 000000000..be15b7d77 --- /dev/null +++ b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/config-properties/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A custom defined config property.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/index.html b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/index.html new file mode 100644 index 000000000..28083ffca --- /dev/null +++ b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Specifies a connection definition.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/resource-adapters/resource-adapter/index.html b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/index.html new file mode 100644 index 000000000..9263c37dd --- /dev/null +++ b/latest/wildscribe/subsystem/resource-adapters/resource-adapter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of a resource adapter.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/rts/index.html b/latest/wildscribe/subsystem/rts/index.html new file mode 100644 index 000000000..e9207643d --- /dev/null +++ b/latest/wildscribe/subsystem/rts/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

RTS subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/sar/index.html b/latest/wildscribe/subsystem/sar/index.html new file mode 100644 index 000000000..b5fd8cb4a --- /dev/null +++ b/latest/wildscribe/subsystem/sar/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The SAR subsystem allowing you to deploy sar archives containing MBeans configured by META-INF/jboss-service.xml


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/security-manager/deployment-permissions/default/index.html b/latest/wildscribe/subsystem/security-manager/deployment-permissions/default/index.html new file mode 100644 index 000000000..97877bd08 --- /dev/null +++ b/latest/wildscribe/subsystem/security-manager/deployment-permissions/default/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The permissions that are to be granted to deployments


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/security-manager/index.html b/latest/wildscribe/subsystem/security-manager/index.html new file mode 100644 index 000000000..c4858a689 --- /dev/null +++ b/latest/wildscribe/subsystem/security-manager/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The Security Manager subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/elytron-key-manager/index.html b/latest/wildscribe/subsystem/security/elytron-key-manager/index.html new file mode 100644 index 000000000..eb6f41290 --- /dev/null +++ b/latest/wildscribe/subsystem/security/elytron-key-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-manager/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/elytron-key-store/index.html b/latest/wildscribe/subsystem/security/elytron-key-store/index.html new file mode 100644 index 000000000..2c37c9958 --- /dev/null +++ b/latest/wildscribe/subsystem/security/elytron-key-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-key-store/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/elytron-realm/index.html b/latest/wildscribe/subsystem/security/elytron-realm/index.html new file mode 100644 index 000000000..47fc0fed0 --- /dev/null +++ b/latest/wildscribe/subsystem/security/elytron-realm/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-realm/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/elytron-trust-manager/index.html b/latest/wildscribe/subsystem/security/elytron-trust-manager/index.html new file mode 100644 index 000000000..24481e21a --- /dev/null +++ b/latest/wildscribe/subsystem/security/elytron-trust-manager/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-manager/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/elytron-trust-store/index.html b/latest/wildscribe/subsystem/security/elytron-trust-store/index.html new file mode 100644 index 000000000..5f9c106c9 --- /dev/null +++ b/latest/wildscribe/subsystem/security/elytron-trust-store/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/elytron-trust-store/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/index.html b/latest/wildscribe/subsystem/security/index.html new file mode 100644 index 000000000..f2f750c57 --- /dev/null +++ b/latest/wildscribe/subsystem/security/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html b/latest/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html new file mode 100644 index 000000000..c9bf6a896 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/acl-module/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/acl/classic/index.html b/latest/wildscribe/subsystem/security/security-domain/acl/classic/index.html new file mode 100644 index 000000000..ce63e188f --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/acl/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/acl/classic/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/audit/classic/index.html b/latest/wildscribe/subsystem/security/security-domain/audit/classic/index.html new file mode 100644 index 000000000..5db2f6e43 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/audit/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html b/latest/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html new file mode 100644 index 000000000..41e54a6f2 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/audit/classic/provider-module/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/authentication/classic/index.html b/latest/wildscribe/subsystem/security/security-domain/authentication/classic/index.html new file mode 100644 index 000000000..1b8f97ec3 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/authentication/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html b/latest/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html new file mode 100644 index 000000000..9d36bdd6a --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/classic/login-module/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html b/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html new file mode 100644 index 000000000..f19d3eb6e --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/auth-module/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html b/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html new file mode 100644 index 000000000..894484670 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html b/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html new file mode 100644 index 000000000..fb3398a67 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html b/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html new file mode 100644 index 000000000..ee492160f --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authentication/jaspi/login-module-stack/login-module/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/authorization/classic/index.html b/latest/wildscribe/subsystem/security/security-domain/authorization/classic/index.html new file mode 100644 index 000000000..09dcdcfb9 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/authorization/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html b/latest/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html new file mode 100644 index 000000000..ce03a4230 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/authorization/classic/policy-module/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html b/latest/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html new file mode 100644 index 000000000..f63530622 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html b/latest/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html new file mode 100644 index 000000000..72f66c0aa --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/identity-trust/classic/trust-module/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/index.html b/latest/wildscribe/subsystem/security/security-domain/index.html new file mode 100644 index 000000000..8e076f95a --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/jsse/classic/index.html b/latest/wildscribe/subsystem/security/security-domain/jsse/classic/index.html new file mode 100644 index 000000000..f1f969d29 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/jsse/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/jsse/classic/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/mapping/classic/index.html b/latest/wildscribe/subsystem/security/security-domain/mapping/classic/index.html new file mode 100644 index 000000000..067452566 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/mapping/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html b/latest/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html new file mode 100644 index 000000000..b797a7c58 --- /dev/null +++ b/latest/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/security-domain/mapping/classic/mapping-module/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/security/vault/classic/index.html b/latest/wildscribe/subsystem/security/vault/classic/index.html new file mode 100644 index 000000000..ff91edb9e --- /dev/null +++ b/latest/wildscribe/subsystem/security/vault/classic/index.html @@ -0,0 +1,12 @@ + + + + + + + + +

This page does not exist in the latest version (WildFly Full 29). You will be redirected to the last available version in 3 seconds.

+

If the page doesn't open, click the following link: /24/wildscribe/subsystem/security/vault/classic/index.html

+ + \ No newline at end of file diff --git a/latest/wildscribe/subsystem/singleton/index.html b/latest/wildscribe/subsystem/singleton/index.html new file mode 100644 index 000000000..3f379bdb3 --- /dev/null +++ b/latest/wildscribe/subsystem/singleton/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the singleton subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/singleton/singleton-policy/deployment/index.html b/latest/wildscribe/subsystem/singleton/singleton-policy/deployment/index.html new file mode 100644 index 000000000..1f7688d0e --- /dev/null +++ b/latest/wildscribe/subsystem/singleton/singleton-policy/deployment/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A singleton deployment


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/singleton/singleton-policy/election-policy/random/index.html b/latest/wildscribe/subsystem/singleton/singleton-policy/election-policy/random/index.html new file mode 100644 index 000000000..1ef139396 --- /dev/null +++ b/latest/wildscribe/subsystem/singleton/singleton-policy/election-policy/random/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A random election policy


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/singleton/singleton-policy/election-policy/simple/index.html b/latest/wildscribe/subsystem/singleton/singleton-policy/election-policy/simple/index.html new file mode 100644 index 000000000..51fe12185 --- /dev/null +++ b/latest/wildscribe/subsystem/singleton/singleton-policy/election-policy/simple/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A simple election policy


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/singleton/singleton-policy/index.html b/latest/wildscribe/subsystem/singleton/singleton-policy/index.html new file mode 100644 index 000000000..392d20261 --- /dev/null +++ b/latest/wildscribe/subsystem/singleton/singleton-policy/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A singleton policy


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/singleton/singleton-policy/service/index.html b/latest/wildscribe/subsystem/singleton/singleton-policy/service/index.html new file mode 100644 index 000000000..52b7ebf74 --- /dev/null +++ b/latest/wildscribe/subsystem/singleton/singleton-policy/service/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A singleton service


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/transactions/commit-markable-resource/index.html b/latest/wildscribe/subsystem/transactions/commit-markable-resource/index.html new file mode 100644 index 000000000..d757011b7 --- /dev/null +++ b/latest/wildscribe/subsystem/transactions/commit-markable-resource/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures a datasource to be considered by the transaction manager as a CMR resource. CMR is a non-XA database resource that can reliably participate in an XA transaction.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/transactions/index.html b/latest/wildscribe/subsystem/transactions/index.html new file mode 100644 index 000000000..6cb9c9769 --- /dev/null +++ b/latest/wildscribe/subsystem/transactions/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the transaction subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/transactions/log-store/log-store/index.html b/latest/wildscribe/subsystem/transactions/log-store/log-store/index.html new file mode 100644 index 000000000..6772a486d --- /dev/null +++ b/latest/wildscribe/subsystem/transactions/log-store/log-store/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Representation of the transaction logging storage mechanism.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/transactions/log-store/log-store/transactions/index.html b/latest/wildscribe/subsystem/transactions/log-store/log-store/transactions/index.html new file mode 100644 index 000000000..4ca11a2b2 --- /dev/null +++ b/latest/wildscribe/subsystem/transactions/log-store/log-store/transactions/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The persistent information that the transaction manager stores for the purpose of recovering a transaction in the event of failure. The probe operation will add and remove transactions from the model as the corresponding real transactions start and finish the prepare and commit phases. A stuck transaction will remain in the model until either it is completed or explicitly removed by the delete operation.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/transactions/log-store/log-store/transactions/participants/index.html b/latest/wildscribe/subsystem/transactions/log-store/log-store/transactions/participants/index.html new file mode 100644 index 000000000..3e47b2d8d --- /dev/null +++ b/latest/wildscribe/subsystem/transactions/log-store/log-store/transactions/participants/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The resource that did work in a transaction.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/application-security-domain/index.html b/latest/wildscribe/subsystem/undertow/application-security-domain/index.html new file mode 100644 index 000000000..0cf6ce691 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/application-security-domain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A Mapping from a security domain references in a deployed application.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/application-security-domain/setting/single-sign-on/index.html b/latest/wildscribe/subsystem/undertow/application-security-domain/setting/single-sign-on/index.html new file mode 100644 index 000000000..c852a207d --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/application-security-domain/setting/single-sign-on/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An SSO authentication mechanism configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/buffer-cache/index.html b/latest/wildscribe/subsystem/undertow/buffer-cache/index.html new file mode 100644 index 000000000..b88910ee3 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/buffer-cache/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The buffer cache used to cache static content


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/byte-buffer-pool/index.html b/latest/wildscribe/subsystem/undertow/byte-buffer-pool/index.html new file mode 100644 index 000000000..a2ad97ab0 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/byte-buffer-pool/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A byte buffer pool used for IO operations, this provides the same capabilities as the buffer pool from the IO subsystem, so they can be used interchangeably and must have a unique name. This buffer pool allows for more precise configuration of the total amount of retained memory than the IO subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/custom-filter/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/custom-filter/index.html new file mode 100644 index 000000000..49f26c508 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/custom-filter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Custom filter


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/error-page/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/error-page/index.html new file mode 100644 index 000000000..07d013a37 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/error-page/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The error pages


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/expression-filter/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/expression-filter/index.html new file mode 100644 index 000000000..68de01348 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/expression-filter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A filter parsed from the undertow expression language


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/gzip/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/gzip/index.html new file mode 100644 index 000000000..2cf657786 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/gzip/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Defines gzip filter


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/index.html new file mode 100644 index 000000000..3e633b146 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Undertow filters


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/none/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/none/index.html new file mode 100644 index 000000000..19b51b225 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/none/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will not have an affinity for any particular server, routing information will be ignored. Intended for use cases where web session state is not maintained within the application server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/ranked/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/ranked/index.html new file mode 100644 index 000000000..ea4dc4671 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/ranked/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests will have an affinity for the first available node in a list typically comprised of: primary owner, backup nodes, local node (if not a primary nor backup owner).


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/single/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/single/index.html new file mode 100644 index 000000000..67ccd4c83 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/single/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Web requests have an affinity for the member that last handled a given session. This option corresponds to traditional sticky session behavior.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/index.html new file mode 100644 index 000000000..335706034 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime representation of a mod_cluster balancer


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/load-balancing-group/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/load-balancing-group/index.html new file mode 100644 index 000000000..a1726873f --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/load-balancing-group/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A load balancing group


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/context/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/context/index.html new file mode 100644 index 000000000..c78ae7865 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/context/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime representation of a mod_cluster context


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/index.html new file mode 100644 index 000000000..f91525f2c --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Runtime representation of a mod_cluster node


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/index.html new file mode 100644 index 000000000..e07b6ec57 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A mod-cluster front end load balancer


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/request-limit/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/request-limit/index.html new file mode 100644 index 000000000..67d4edc7e --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/request-limit/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Concurrent request limiter handler


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/response-header/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/response-header/index.html new file mode 100644 index 000000000..354d81dba --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/response-header/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Response header filter allows you to add custom headers.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/filter/rewrite/index.html b/latest/wildscribe/subsystem/undertow/configuration/filter/rewrite/index.html new file mode 100644 index 000000000..cd347bea5 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/filter/rewrite/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A rewrite (or redirect) filter


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/handler/file/index.html b/latest/wildscribe/subsystem/undertow/configuration/handler/file/index.html new file mode 100644 index 000000000..549f0a47f --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/handler/file/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

File handler


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/handler/index.html b/latest/wildscribe/subsystem/undertow/configuration/handler/index.html new file mode 100644 index 000000000..7ac48cb73 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Undertow handlers


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/host/index.html b/latest/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/host/index.html new file mode 100644 index 000000000..bd5c88985 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/host/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A host that the reverse proxy will forward requests to


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/index.html b/latest/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/index.html new file mode 100644 index 000000000..3bdbecd48 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A reverse proxy handler


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/index.html b/latest/wildscribe/subsystem/undertow/index.html new file mode 100644 index 000000000..08e7c4a26 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Undertow subsystem


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/ajp-listener/index.html b/latest/wildscribe/subsystem/undertow/server/ajp-listener/index.html new file mode 100644 index 000000000..44c75df57 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/ajp-listener/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

http listener


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/host/filter-ref/index.html b/latest/wildscribe/subsystem/undertow/server/host/filter-ref/index.html new file mode 100644 index 000000000..80da67c78 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/host/filter-ref/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Reference to filter


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/host/index.html b/latest/wildscribe/subsystem/undertow/server/host/index.html new file mode 100644 index 000000000..a12a5ab70 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/host/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

An Undertow host


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/host/location/filter-ref/index.html b/latest/wildscribe/subsystem/undertow/server/host/location/filter-ref/index.html new file mode 100644 index 000000000..34ba2d32b --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/host/location/filter-ref/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Reference to filter


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/host/location/index.html b/latest/wildscribe/subsystem/undertow/server/host/location/index.html new file mode 100644 index 000000000..d1b9f6ca8 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/host/location/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Holds configuration of location resource


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/host/setting/access-log/index.html b/latest/wildscribe/subsystem/undertow/server/host/setting/access-log/index.html new file mode 100644 index 000000000..cd409d823 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/host/setting/access-log/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The access log configuration for this virtual server.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/host/setting/console-access-log/index.html b/latest/wildscribe/subsystem/undertow/server/host/setting/console-access-log/index.html new file mode 100644 index 000000000..9485cd47d --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/host/setting/console-access-log/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Allows the access log to be written to the console.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/host/setting/http-invoker/index.html b/latest/wildscribe/subsystem/undertow/server/host/setting/http-invoker/index.html new file mode 100644 index 000000000..fc68e3eb1 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/host/setting/http-invoker/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The HTTP invoker services that allows remote HTTP based invocation of services such as Jakarta Enterprise Beans and naming


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/host/setting/single-sign-on/index.html b/latest/wildscribe/subsystem/undertow/server/host/setting/single-sign-on/index.html new file mode 100644 index 000000000..598a4f2ea --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/host/setting/single-sign-on/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 12.0.0
Legacy PicketBox based security is no longer supported.

An SSO authentication mechanism configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/http-listener/index.html b/latest/wildscribe/subsystem/undertow/server/http-listener/index.html new file mode 100644 index 000000000..f2e357f4c --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/http-listener/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

http listener


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/https-listener/index.html b/latest/wildscribe/subsystem/undertow/server/https-listener/index.html new file mode 100644 index 000000000..7f08c21c5 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/https-listener/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

http listener


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/server/index.html b/latest/wildscribe/subsystem/undertow/server/index.html new file mode 100644 index 000000000..1cd7be4cd --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/server/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A server


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/servlet-container/index.html b/latest/wildscribe/subsystem/undertow/servlet-container/index.html new file mode 100644 index 000000000..0f269cc2e --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/servlet-container/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A servlet container


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/servlet-container/mime-mapping/index.html b/latest/wildscribe/subsystem/undertow/servlet-container/mime-mapping/index.html new file mode 100644 index 000000000..1468cb72c --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/servlet-container/mime-mapping/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The servlet container mime mapping config


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/servlet-container/setting/affinity-cookie/index.html b/latest/wildscribe/subsystem/undertow/servlet-container/setting/affinity-cookie/index.html new file mode 100644 index 000000000..80db682af --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/servlet-container/setting/affinity-cookie/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Affinity cookie configuration


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/servlet-container/setting/crawler-session-management/index.html b/latest/wildscribe/subsystem/undertow/servlet-container/setting/crawler-session-management/index.html new file mode 100644 index 000000000..be6211385 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/servlet-container/setting/crawler-session-management/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Configures special session handling for crawler bots


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/servlet-container/setting/jsp/index.html b/latest/wildscribe/subsystem/undertow/servlet-container/setting/jsp/index.html new file mode 100644 index 000000000..3b7d5242f --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/servlet-container/setting/jsp/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Jakarta Server Pages container configuration.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/servlet-container/setting/persistent-sessions/index.html b/latest/wildscribe/subsystem/undertow/servlet-container/setting/persistent-sessions/index.html new file mode 100644 index 000000000..db5838a1c --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/servlet-container/setting/persistent-sessions/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Session persistence sessions


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/servlet-container/setting/session-cookie/index.html b/latest/wildscribe/subsystem/undertow/servlet-container/setting/session-cookie/index.html new file mode 100644 index 000000000..cda508401 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/servlet-container/setting/session-cookie/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Session cookie configuration


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/servlet-container/setting/websockets/index.html b/latest/wildscribe/subsystem/undertow/servlet-container/setting/websockets/index.html new file mode 100644 index 000000000..c0d348028 --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/servlet-container/setting/websockets/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

If websockets are enabled for this container


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/undertow/servlet-container/welcome-file/index.html b/latest/wildscribe/subsystem/undertow/servlet-container/welcome-file/index.html new file mode 100644 index 000000000..a57936fca --- /dev/null +++ b/latest/wildscribe/subsystem/undertow/servlet-container/welcome-file/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The welcome file


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/client-config/index.html b/latest/wildscribe/subsystem/webservices/client-config/index.html new file mode 100644 index 000000000..1915e6754 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/client-config/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Webservice client configuration


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/client-config/post-handler-chain/handler/index.html b/latest/wildscribe/subsystem/webservices/client-config/post-handler-chain/handler/index.html new file mode 100644 index 000000000..bbcd45181 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/client-config/post-handler-chain/handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint handler


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/client-config/post-handler-chain/index.html b/latest/wildscribe/subsystem/webservices/client-config/post-handler-chain/index.html new file mode 100644 index 000000000..26cf4ba71 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/client-config/post-handler-chain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration POST handler chain


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/client-config/pre-handler-chain/handler/index.html b/latest/wildscribe/subsystem/webservices/client-config/pre-handler-chain/handler/index.html new file mode 100644 index 000000000..c2a8f9e6f --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/client-config/pre-handler-chain/handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint handler


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/client-config/pre-handler-chain/index.html b/latest/wildscribe/subsystem/webservices/client-config/pre-handler-chain/index.html new file mode 100644 index 000000000..e6dee6054 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/client-config/pre-handler-chain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration PRE handler chain


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/client-config/property/index.html b/latest/wildscribe/subsystem/webservices/client-config/property/index.html new file mode 100644 index 000000000..250245b68 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/client-config/property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration property


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/endpoint-config/index.html b/latest/wildscribe/subsystem/webservices/endpoint-config/index.html new file mode 100644 index 000000000..e1ede9668 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/endpoint-config/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Webservice endpoint configuration


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/handler/index.html b/latest/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/handler/index.html new file mode 100644 index 000000000..a61436020 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint handler


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/index.html b/latest/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/index.html new file mode 100644 index 000000000..fa931d8f7 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration POST handler chain


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/handler/index.html b/latest/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/handler/index.html new file mode 100644 index 000000000..fe77cad6b --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/handler/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint handler


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/index.html b/latest/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/index.html new file mode 100644 index 000000000..58f682c98 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration PRE handler chain


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/endpoint-config/property/index.html b/latest/wildscribe/subsystem/webservices/endpoint-config/property/index.html new file mode 100644 index 000000000..ace609da5 --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/endpoint-config/property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Endpoint configuration property


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/webservices/index.html b/latest/wildscribe/subsystem/webservices/index.html new file mode 100644 index 000000000..be5c6494a --- /dev/null +++ b/latest/wildscribe/subsystem/webservices/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the web services subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/weld/index.html b/latest/wildscribe/subsystem/weld/index.html new file mode 100644 index 000000000..147f1c31e --- /dev/null +++ b/latest/wildscribe/subsystem/weld/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

The configuration of the weld subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/subsystem/xts/index.html b/latest/wildscribe/subsystem/xts/index.html new file mode 100644 index 000000000..57b21c42c --- /dev/null +++ b/latest/wildscribe/subsystem/xts/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

Deprecated Since 3.0.0
Deprecated since the XTS feature set is rarely used and is considered legacy within development approaches nowadays.

The configuration of the XST subsystem.


\ No newline at end of file diff --git a/latest/wildscribe/system-property/index.html b/latest/wildscribe/system-property/index.html new file mode 100644 index 000000000..227902b61 --- /dev/null +++ b/latest/wildscribe/system-property/index.html @@ -0,0 +1 @@ + WildFly Full 29 Model Reference

WildFly Full 29 Model Reference

A system property to set on the server.


\ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 15f27e8e9..7db28e1bb 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,71 +2,117 @@ https://docs.wildfly.org/ + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/bootablejar/ + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/galleon/ + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/galleon-plugins/ + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/ + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Admin_Guide.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Bootable_Guide.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Client_Guide.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Bootable_Guide.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Cloud_References.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Extending_WildFly.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Galleon_Guide.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Getting_Started_Developing_Applications_Guide.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Getting_Started_Guide.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Getting_Started_on_OpenShift.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Glossary.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/High_Availability_Guide.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Installation_Guide.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Quickstarts.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/Testsuite.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/WildFly_Elytron_Security.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/WildFly_and_WildFly_Preview.html + 2023-08-04T22:26:18Z + monthly https://docs.wildfly.org/29/wildscribe/ + 2023-08-04T22:26:18Z + monthly